ZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL0xpY2Vuc2UvbGljZW5zZS50eHQgYi9GcmVlUlRPUy9MaWNlbnNlL2xpY2Vuc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzI3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9MaWNlbnNlL2xpY2Vuc2UudHh0CkBAIC0wLDAgKzEsNDQwIEBACitUaGUgRnJlZVJUT1Mub3JnIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIGJ5IHRoZSAqbW9kaWZpZWQqIEdOVSBHZW5lcmFsIFB1YmxpYw0KK0xpY2Vuc2UgKEdQTCksIHRleHQgcHJvdmlkZWQgYmVsb3cuICBBIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgaXMgDQoraW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1MgDQord2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBhbnkgcHJvcHJpZXRhcnkgDQorY29tcG9uZW50cy4gIFNlZSB0aGUgbGljZW5zaW5nIHNlY3Rpb24gb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIGZ1bGwgDQorZGV0YWlscy4gIFRoZSBleGNlcHRpb24gdGV4dCBpcyBhbHNvIGluY2x1ZGVkIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLg0KKw0KK1RoZSBGcmVlUlRPUyBkb3dubG9hZCBhbHNvIGluY2x1ZGVzIGRlbW8gYXBwbGljYXRpb24gc291cmNlIGNvZGUsIHNvbWUgb2YgDQord2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhpcmQgcGFydGllcyBBTkQgSVMgTElDRU5TRUQgU0VQQVJBVEVMWSBGUk9NIEZSRUVSVE9TLg0KKw0KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGFueSBkb3VidCByZWZlciB0byB0aGUgY29tbWVudCBpbmNsdWRlZCBhdCB0aGUgdG9wDQorb2YgZWFjaCBzb3VyY2UgYW5kIGhlYWRlciBmaWxlIGZvciBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uDQorDQorVGhpcyBpcyBhIGxpc3Qgb2YgZmlsZXMgZm9yIHdoaWNoIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkIGFyZSBub3QgdGhlIA0KK2NvcHlyaWdodCBvd25lciBhbmQgYXJlIE5PVCBDT1ZFUkVEIEJZIFRIRSBHUEwuDQorDQorDQorMSkgVmFyaW91cyBoZWFkZXIgZmlsZXMgcHJvdmlkZWQgYnkgc2lsaWNvbiBtYW51ZmFjdHVyZXJzIGFuZCB0b29sIHZlbmRvcnMNCisgICB0aGF0IGRlZmluZSBwcm9jZXNzb3Igc3BlY2lmaWMgbWVtb3J5IGFkZHJlc3NlcyBhbmQgdXRpbGl0eSBtYWNyb3MuDQorICAgUGVybWlzc2lvbiBoYXMgYmVlbiBncmFudGVkIGJ5IHRoZSB2YXJpb3VzIGNvcHlyaWdodCBob2xkZXJzIGZvciB0aGVzZQ0KKyAgIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBGcmVlUlRPUyBkb3dubG9hZC4gIFVzZXJzIG11c3QgZW5zdXJlIGxpY2Vuc2UNCisgICBjb25kaXRpb25zIGFyZSBhZGhlcmVkIHRvIGZvciBhbnkgdXNlIG90aGVyIHRoYW4gY29tcGlsYXRpb24gb2YgdGhlIA0KKyAgIEZyZWVSVE9TIGRlbW8gYXBwbGljYXRpb25zLg0KKw0KKzIpIFRoZSB1SVAgVENQL0lQIHN0YWNrIHRoZSBjb3B5cmlnaHQgb2Ygd2hpY2ggaXMgaGVsZCBieSBBZGFtIER1bmtlbHMuDQorICAgVXNlcnMgbXVzdCBlbnN1cmUgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQgYXQgdGhlIHRvcCANCisgICBvZiBlYWNoIHVJUCBzb3VyY2UgZmlsZSBpcyB1bmRlcnN0b29kIGFuZCBhZGhlcmVkIHRvLg0KKw0KKzMpIFRoZSBsd0lQIFRDUC9JUCBzdGFjayB0aGUgY29weXJpZ2h0IG9mIHdoaWNoIGlzIGhlbGQgYnkgdGhlIFN3ZWRpc2ggDQorICAgSW5zdGl0dXRlIG9mIENvbXB1dGVyIFNjaWVuY2UuICBVc2VycyBtdXN0IGVuc3VyZSB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZSANCisgICBjb25kaXRpb25zIHN0YXRlZCBhdCB0aGUgdG9wICBvZiBlYWNoIGx3SVAgc291cmNlIGZpbGUgaXMgdW5kZXJzdG9vZCBhbmQgDQorICAgYWRoZXJlZCB0by4NCisNCis0KSBWYXJpb3VzIHBlcmlwaGVyYWwgZHJpdmVyIHNvdXJjZSBmaWxlcyBhbmQgYmluYXJpZXMgcHJvdmlkZWQgYnkgc2lsaWNvbg0KKyAgIG1hbnVmYWN0dXJlcnMgYW5kIHRvb2wgdmVuZG9ycy4gIFBlcm1pc3Npb24gaGFzIGJlZW4gZ3JhbnRlZCBieSB0aGUNCisgICB2YXJpb3VzIGNvcHlyaWdodCBob2xkZXJzIGZvciB0aGVzZSBmaWxlcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgRnJlZVJUT1MNCisgICBkb3dubG9hZC4gIFVzZXJzIG11c3QgZW5zdXJlIGxpY2Vuc2UgY29uZGl0aW9ucyBhcmUgYWRoZXJlZCB0byBmb3IgYW55DQorICAgdXNlIG90aGVyIHRoYW4gY29tcGlsYXRpb24gb2YgdGhlIEZyZWVSVE9TIGRlbW8gYXBwbGljYXRpb25zLg0KKw0KKzUpIFRoZSBmaWxlcyBjb250YWluZWQgd2l0aGluIEZyZWVSVE9TXERlbW9cV2l6TkVUX0RFTU9fVEVSTl8xODZcdGVybl9jb2RlLA0KKyAgIHdoaWNoIGFyZSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBjb2RlIHByb3ZpZGVkIGJ5IGFuZCBjb3B5cmlnaHQgdG8NCisgICBUZXJuIEluYy4NCisNCitFcnJvcnMgYW5kIG9taXNzaW9ucyBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvcg0KK3dob20gY2FuIGJlIG9idGFpbmVkIGZyb20gaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcuDQorDQorDQorDQorDQorDQorVGhlIEdQTCBsaWNlbnNlIHRleHQgZm9sbG93cy4NCisNCitBIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvIGRpc3RyaWJ1dGUgYSANCitjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvIHByb3ZpZGUNCit0aGUgc291cmNlIGNvZGUgZm9yIGFueSBwcm9wcmlldGFyeSBjb21wb25lbnRzLiAgU2VlIHRoZSBsaWNlbnNpbmcgc2VjdGlvbg0KK29mIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIGZvciBmdWxsIGRldGFpbHMuICBUaGUgZXhjZXB0aW9uIHRleHQgaXMgYWxzbw0KK2luY2x1ZGVkIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLg0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorDQorDQorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UNCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKw0KKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcw0KKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4NCisNCisJCQkgICAgUHJlYW1ibGUNCisNCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXINCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUNCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcw0KK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlDQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bw0KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkNCit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8NCit5b3VyIHByb2dyYW1zLCB0b28uDQorDQorICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90DQorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQ0KK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3INCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQNCitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdA0KK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4NCisNCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQNCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuDQorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UNCitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuDQorDQorICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyDQorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0DQoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUNCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyDQorcmlnaHRzLg0KKw0KKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZA0KKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksDQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4NCisNCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluDQordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUNCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UNCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbw0KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsDQorYXV0aG9ycycgcmVwdXRhdGlvbnMuDQorDQorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQ0KK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUNCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlDQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55DQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4NCisNCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kDQorbW9kaWZpY2F0aW9uIGZvbGxvdy4NCisMDQorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UNCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04NCisNCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMNCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZA0KK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywNCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSINCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Og0KK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsDQorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXINCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluDQordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuDQorDQorQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QNCitjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mDQorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQ0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4NCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4NCisNCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncw0KK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQ0KK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUNCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlDQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5Ow0KK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UNCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLg0KKw0KK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZA0KK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuDQorDQorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uDQorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZA0KK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQ0KK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6DQorDQorICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcw0KKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLg0KKw0KKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4NCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55DQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkDQorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCisNCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQ0KKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoDQorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4NCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhDQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQ0KKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyDQorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzDQorICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0DQorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24NCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pDQorDA0KK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYNCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLA0KK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbg0KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UNCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UNCitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQNCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YNCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQ0KK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4NCisNCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QNCit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8NCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3INCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLg0KKw0KK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0NCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YNCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcg0KK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuDQorDQorICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwNCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YNCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6DQorDQorICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUNCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zDQorICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0KKw0KKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQ0KKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cg0KKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlDQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0NCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0KKw0KKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcg0KKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcw0KKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQ0KKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoDQorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQ0KKw0KK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3INCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQ0KK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55DQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvDQorY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQ0KK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQ0KK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5DQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUNCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudA0KK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4NCisNCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nDQorYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudA0KK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcw0KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdA0KK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuDQorDA0KKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtDQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdA0KK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcw0KK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4NCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcg0KK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoDQorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLg0KKw0KKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90DQorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3INCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUNCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5DQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQNCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nDQordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuDQorDQorICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUNCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvDQordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXINCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uDQorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8NCit0aGlzIExpY2Vuc2UuDQorDQorICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50DQoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwNCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yDQorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdA0KK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90DQorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcw0KK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UNCittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50DQorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQ0KK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbg0KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8NCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLg0KKw0KK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcg0KK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8NCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcg0KK2NpcmN1bXN0YW5jZXMuDQorDQorSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQ0KK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55DQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQ0KK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcw0KK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQ0KK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQNCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdA0KK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcNCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QNCitpbXBvc2UgdGhhdCBjaG9pY2UuDQorDQorVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvDQorYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuDQorDA0KKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4NCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUNCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlDQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nDQordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZw0KK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcw0KK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMNCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwNCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8NCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4NCisNCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtDQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkNCitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zDQorZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mDQordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQ0KK0ZvdW5kYXRpb24uDQorDQorICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlDQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcg0KK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcw0KK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzDQorb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZA0KK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5Lg0KKw0KKwkJCSAgICBOTyBXQVJSQU5UWQ0KKw0KKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZDQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVODQorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUw0KK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEDQorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTDQorVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQ0KK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLA0KK1JFUEFJUiBPUiBDT1JSRUNUSU9OLg0KKw0KKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORw0KK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1INCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLA0KK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORw0KK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQNCitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkNCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUg0KK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQ0KK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCisNCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TDQorDA0KKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zDQorDQorICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0DQorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdA0KK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLg0KKw0KKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QNCit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5DQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QNCit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4NCisNCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4NCisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4NCisNCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSoqIGFzIHB1Ymxpc2hlZCBieQ0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQorDQorDQorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuDQorDQorSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcw0KK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6DQorDQorICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcg0KKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuDQorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQNCisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLg0KKw0KK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQ0KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkNCitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUNCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLg0KKw0KK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyDQorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYNCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6DQorDQorICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtDQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4NCisNCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQ0KKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UNCisNCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8NCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQ0KK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQ0KK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbA0KK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitUaGUgRnJlZVJUT1MgR1BMIEV4Y2VwdGlvbiBUZXh0Og0KKw0KK0FueSBGcmVlUlRPUyBzb3VyY2UgY29kZSwgd2hldGhlciBtb2RpZmllZCBvciBpbiBpdCdzIG9yaWdpbmFsIHJlbGVhc2UgZm9ybSwgDQorb3Igd2hldGhlciBpbiB3aG9sZSBvciBpbiBwYXJ0LCBjYW4gb25seSBiZSBkaXN0cmlidXRlZCBieSB5b3UgdW5kZXIgdGhlIHRlcm1zIA0KK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwbHVzIHRoaXMgZXhjZXB0aW9uLiBBbiBpbmRlcGVuZGVudCBtb2R1bGUgaXMgDQorYSBtb2R1bGUgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSBvciBiYXNlZCBvbiBGcmVlUlRPUy4NCisNCitDbGF1c2UgMToNCisNCitMaW5raW5nIEZyZWVSVE9TIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZyBhIA0KK2NvbWJpbmVkIHdvcmsgYmFzZWQgb24gRnJlZVJUT1MuIFRodXMsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIA0KK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLg0KKw0KK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIEZyZWVSVE9TIGdpdmVzIHlvdSBwZXJtaXNzaW9uIA0KK3RvIGxpbmsgRnJlZVJUT1Mgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRoYXQgY29tbXVuaWNhdGUgd2l0aCBGcmVlUlRPUyANCitzb2xlbHkgdGhyb3VnaCB0aGUgRnJlZVJUT1MgQVBJIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiANCit0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLCBhbmQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGNvbWJpbmVkIA0KK3dvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQNCisNCisgICsgRXZlcnkgY29weSBvZiB0aGUgY29tYmluZWQgd29yayBpcyBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4gc3RhdGVtZW50IHRoYXQgDQorICBkZXRhaWxzIHRvIHRoZSByZWNpcGllbnQgdGhlIHZlcnNpb24gb2YgRnJlZVJUT1MgdXNlZCBhbmQgYW4gb2ZmZXIgYnkgeW91cnNlbGYgDQorICB0byBwcm92aWRlIHRoZSBGcmVlUlRPUyBzb3VyY2UgY29kZSAoaW5jbHVkaW5nIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkgaGF2ZSANCisgIG1hZGUpIHNob3VsZCB0aGUgcmVjaXBpZW50IHJlcXVlc3QgaXQuDQorDQorICArIFRoZSBjb21iaW5lZCB3b3JrIGlzIG5vdCBpdHNlbGYgYW4gUlRPUywgc2NoZWR1bGVyLCBrZXJuZWwgb3IgcmVsYXRlZCBwcm9kdWN0Lg0KKw0KKyAgKyBUaGUgaW5kZXBlbmRlbnQgbW9kdWxlcyBhZGQgc2lnbmlmaWNhbnQgYW5kIHByaW1hcnkgZnVuY3Rpb25hbGl0eSB0byBGcmVlUlRPUyANCisgIGFuZCBkbyBub3QgbWVyZWx5IGV4dGVuZCB0aGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBhbHJlYWR5IHByZXNlbnQgaW4gRnJlZVJUT1MuDQorDQorQ2xhdXNlIDI6DQorDQorRnJlZVJUT1MgbWF5IG5vdCBiZSB1c2VkIGZvciBhbnkgY29tcGV0aXRpdmUgb3IgY29tcGFyYXRpdmUgcHVycG9zZSwgaW5jbHVkaW5nIHRoZSANCitwdWJsaWNhdGlvbiBvZiBhbnkgZm9ybSBvZiBydW4gdGltZSBvciBjb21waWxlIHRpbWUgbWV0cmljLCB3aXRob3V0IHRoZSBleHByZXNzIA0KK3Blcm1pc3Npb24gb2YgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuICh0aGlzIGlzIHRoZSBub3JtIHdpdGhpbiB0aGUgaW5kdXN0cnkgYW5kIA0KK2lzIGludGVuZGVkIHRvIGVuc3VyZSBpbmZvcm1hdGlvbiBhY2N1cmFjeSkuDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL2Nyb3V0aW5lLmMgYi9GcmVlUlRPUy9Tb3VyY2UvY3JvdXRpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDYyY2EwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2Nyb3V0aW5lLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisjaW5jbHVkZSAiY3JvdXRpbmUuaCINCisNCisvKg0KKyAqIFNvbWUga2VybmVsIGF3YXJlIGRlYnVnZ2VycyByZXF1aXJlIGRhdGEgdG8gYmUgdmlld2VkIHRvIGJlIGdsb2JhbCwgcmF0aGVyDQorICogdGhhbiBmaWxlIHNjb3BlLg0KKyAqLw0KKyNpZmRlZiBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCisJI2RlZmluZSBzdGF0aWMNCisjZW5kaWYNCisNCisNCisvKiBMaXN0cyBmb3IgcmVhZHkgYW5kIGJsb2NrZWQgY28tcm91dGluZXMuIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitzdGF0aWMgeExpc3QgcHhSZWFkeUNvUm91dGluZUxpc3RzWyBjb25maWdNQVhfQ09fUk9VVElORV9QUklPUklUSUVTIF07CS8qPCBQcmlvcml0aXNlZCByZWFkeSBjby1yb3V0aW5lcy4gKi8NCitzdGF0aWMgeExpc3QgeERlbGF5ZWRDb1JvdXRpbmVMaXN0MTsJCQkJCQkJCQkvKjwgRGVsYXllZCBjby1yb3V0aW5lcy4gKi8NCitzdGF0aWMgeExpc3QgeERlbGF5ZWRDb1JvdXRpbmVMaXN0MjsJCQkJCQkJCQkvKjwgRGVsYXllZCBjby1yb3V0aW5lcyAodHdvIGxpc3RzIGFyZSB1c2VkIC0gb25lIGZvciBkZWxheXMgdGhhdCBoYXZlIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgdGljayBjb3VudC4gKi8NCitzdGF0aWMgeExpc3QgKiBweERlbGF5ZWRDb1JvdXRpbmVMaXN0OwkJCQkJCQkJCS8qPCBQb2ludHMgdG8gdGhlIGRlbGF5ZWQgY28tcm91dGluZSBsaXN0IGN1cnJlbnRseSBiZWluZyB1c2VkLiAqLw0KK3N0YXRpYyB4TGlzdCAqIHB4T3ZlcmZsb3dEZWxheWVkQ29Sb3V0aW5lTGlzdDsJCQkJCQkJLyo8IFBvaW50cyB0byB0aGUgZGVsYXllZCBjby1yb3V0aW5lIGxpc3QgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gaG9sZCBjby1yb3V0aW5lcyB0aGF0IGhhdmUgb3ZlcmZsb3dlZCB0aGUgY3VycmVudCB0aWNrIGNvdW50LiAqLw0KK3N0YXRpYyB4TGlzdCB4UGVuZGluZ1JlYWR5Q29Sb3V0aW5lTGlzdDsJCQkJCQkJCQkJCS8qPCBIb2xkcyBjby1yb3V0aW5lcyB0aGF0IGhhdmUgYmVlbiByZWFkaWVkIGJ5IGFuIGV4dGVybmFsIGV2ZW50LiAgVGhleSBjYW5ub3QgYmUgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHJlYWR5IGxpc3RzIGFzIHRoZSByZWFkeSBsaXN0cyBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgaW50ZXJydXB0cy4gKi8NCisNCisvKiBPdGhlciBmaWxlIHByaXZhdGUgdmFyaWFibGVzLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorY29yQ1JDQiAqIHB4Q3VycmVudENvUm91dGluZSA9IE5VTEw7DQorc3RhdGljIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhUb3BDb1JvdXRpbmVSZWFkeVByaW9yaXR5ID0gMDsNCitzdGF0aWMgcG9ydFRpY2tUeXBlIHhDb1JvdXRpbmVUaWNrQ291bnQgPSAwLCB4TGFzdFRpY2tDb3VudCA9IDAsIHhQYXNzZWRUaWNrcyA9IDA7DQorDQorLyogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvLXJvdXRpbmUgd2hlbiBpdCBpcyBjcmVhdGVkLiAqLw0KKyNkZWZpbmUgY29ySU5JVElBTF9TVEFURQkoIDAgKQ0KKw0KKy8qDQorICogUGxhY2UgdGhlIGNvLXJvdXRpbmUgcmVwcmVzZW50ZWQgYnkgcHhDUkNCIGludG8gdGhlIGFwcHJvcHJpYXRlIHJlYWR5IHF1ZXVlDQorICogZm9yIHRoZSBwcmlvcml0eS4gIEl0IGlzIGluc2VydGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuDQorICoNCisgKiBUaGlzIG1hY3JvIGFjY2Vzc2VzIHRoZSBjby1yb3V0aW5lIHJlYWR5IGxpc3RzIGFuZCB0aGVyZWZvcmUgbXVzdCBub3QgYmUNCisgKiB1c2VkIGZyb20gd2l0aGluIGFuIElTUi4NCisgKi8NCisjZGVmaW5lIHBydkFkZENvUm91dGluZVRvUmVhZHlRdWV1ZSggcHhDUkNCICkJCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDUkNCLT51eFByaW9yaXR5ID4gdXhUb3BDb1JvdXRpbmVSZWFkeVByaW9yaXR5ICkJCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJdXhUb3BDb1JvdXRpbmVSZWFkeVByaW9yaXR5ID0gcHhDUkNCLT51eFByaW9yaXR5OwkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXZMaXN0SW5zZXJ0RW5kKCAoIHhMaXN0ICogKSAmKCBweFJlYWR5Q29Sb3V0aW5lTGlzdHNbIHB4Q1JDQi0+dXhQcmlvcml0eSBdICksICYoIHB4Q1JDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7CVwNCit9CQ0KKw0KKy8qDQorICogVXRpbGl0eSB0byByZWFkeSBhbGwgdGhlIGxpc3RzIHVzZWQgYnkgdGhlIHNjaGVkdWxlci4gIFRoaXMgaXMgY2FsbGVkDQorICogYXV0b21hdGljYWxseSB1cG9uIHRoZSBjcmVhdGlvbiBvZiB0aGUgZmlyc3QgY28tcm91dGluZS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlQ29Sb3V0aW5lTGlzdHMoIHZvaWQgKTsNCisNCisvKg0KKyAqIENvLXJvdXRpbmVzIHRoYXQgYXJlIHJlYWRpZWQgYnkgYW4gaW50ZXJydXB0IGNhbm5vdCBiZSBwbGFjZWQgZGlyZWN0bHkgaW50bw0KKyAqIHRoZSByZWFkeSBsaXN0cyAodGhlcmUgaXMgbm8gbXV0dWFsIGV4Y2x1c2lvbikuICBJbnN0ZWFkIHRoZXkgYXJlIHBsYWNlZCBpbg0KKyAqIGluIHRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgaW4gb3JkZXIgdGhhdCB0aGV5IGNhbiBsYXRlciBiZSBtb3ZlZCB0byB0aGUgcmVhZHkNCisgKiBsaXN0IGJ5IHRoZSBjby1yb3V0aW5lIHNjaGVkdWxlci4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZDaGVja1BlbmRpbmdSZWFkeUxpc3QoIHZvaWQgKTsNCisNCisvKg0KKyAqIE1hY3JvIHRoYXQgbG9va3MgYXQgdGhlIGxpc3Qgb2YgY28tcm91dGluZXMgdGhhdCBhcmUgY3VycmVudGx5IGRlbGF5ZWQgdG8NCisgKiBzZWUgaWYgYW55IHJlcXVpcmUgd2FraW5nLg0KKyAqDQorICogQ28tcm91dGluZXMgYXJlIHN0b3JlZCBpbiB0aGUgcXVldWUgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIHdha2UgdGltZSAtDQorICogbWVhbmluZyBvbmNlIG9uZSBjby1yb3V0aW5lIGhhcyBiZWVuIGZvdW5kIHdob3NlIHRpbWVyIGhhcyBub3QgZXhwaXJlZA0KKyAqIHdlIG5lZWQgbm90IGxvb2sgYW55IGZ1cnRoZXIgZG93biB0aGUgbGlzdC4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZDaGVja0RlbGF5ZWRMaXN0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeENvUm91dGluZUNyZWF0ZSggY3JDT1JPVVRJTkVfQ09ERSBweENvUm91dGluZUNvZGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQcmlvcml0eSwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEluZGV4ICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCitjb3JDUkNCICpweENvUm91dGluZTsNCisNCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSB0aGF0IHdpbGwgc3RvcmUgdGhlIGNvLXJvdXRpbmUgY29udHJvbCBibG9jay4gKi8NCisJcHhDb1JvdXRpbmUgPSAoIGNvckNSQ0IgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBjb3JDUkNCICkgKTsNCisJaWYoIHB4Q29Sb3V0aW5lICkNCisJew0KKwkJLyogSWYgcHhDdXJyZW50Q29Sb3V0aW5lIGlzIE5VTEwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCBjby1yb3V0aW5lIHRvDQorCQliZSBjcmVhdGVkIGFuZCB0aGUgY28tcm91dGluZSBkYXRhIHN0cnVjdHVyZXMgbmVlZCBpbml0aWFsaXNpbmcuICovDQorCQlpZiggcHhDdXJyZW50Q29Sb3V0aW5lID09IE5VTEwgKQ0KKwkJew0KKwkJCXB4Q3VycmVudENvUm91dGluZSA9IHB4Q29Sb3V0aW5lOw0KKwkJCXBydkluaXRpYWxpc2VDb1JvdXRpbmVMaXN0cygpOw0KKwkJfQ0KKw0KKwkJLyogQ2hlY2sgdGhlIHByaW9yaXR5IGlzIHdpdGhpbiBsaW1pdHMuICovDQorCQlpZiggdXhQcmlvcml0eSA+PSBjb25maWdNQVhfQ09fUk9VVElORV9QUklPUklUSUVTICkNCisJCXsNCisJCQl1eFByaW9yaXR5ID0gY29uZmlnTUFYX0NPX1JPVVRJTkVfUFJJT1JJVElFUyAtIDE7DQorCQl9DQorDQorCQkvKiBGaWxsIG91dCB0aGUgY28tcm91dGluZSBjb250cm9sIGJsb2NrIGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovDQorCQlweENvUm91dGluZS0+dXhTdGF0ZSA9IGNvcklOSVRJQUxfU1RBVEU7DQorCQlweENvUm91dGluZS0+dXhQcmlvcml0eSA9IHV4UHJpb3JpdHk7DQorCQlweENvUm91dGluZS0+dXhJbmRleCA9IHV4SW5kZXg7DQorCQlweENvUm91dGluZS0+cHhDb1JvdXRpbmVGdW5jdGlvbiA9IHB4Q29Sb3V0aW5lQ29kZTsNCisNCisJCS8qIEluaXRpYWxpc2UgYWxsIHRoZSBvdGhlciBjby1yb3V0aW5lIGNvbnRyb2wgYmxvY2sgcGFyYW1ldGVycy4gKi8NCisJCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4Q29Sb3V0aW5lLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisJCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4Q29Sb3V0aW5lLT54RXZlbnRMaXN0SXRlbSApICk7DQorDQorCQkvKiBTZXQgdGhlIGNvLXJvdXRpbmUgY29udHJvbCBibG9jayBhcyBhIGxpbmsgYmFjayBmcm9tIHRoZSB4TGlzdEl0ZW0uDQorCQlUaGlzIGlzIHNvIHdlIGNhbiBnZXQgYmFjayB0byB0aGUgY29udGFpbmluZyBDUkNCIGZyb20gYSBnZW5lcmljIGl0ZW0NCisJCWluIGEgbGlzdC4gKi8NCisJCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweENvUm91dGluZS0+eEdlbmVyaWNMaXN0SXRlbSApLCBweENvUm91dGluZSApOw0KKwkJbGlzdFNFVF9MSVNUX0lURU1fT1dORVIoICYoIHB4Q29Sb3V0aW5lLT54RXZlbnRMaXN0SXRlbSApLCBweENvUm91dGluZSApOw0KKwkNCisJCS8qIEV2ZW50IGxpc3RzIGFyZSBhbHdheXMgaW4gcHJpb3JpdHkgb3JkZXIuICovDQorCQlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhDb1JvdXRpbmUtPnhFdmVudExpc3RJdGVtICksIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBwb3J0VGlja1R5cGUgKSB1eFByaW9yaXR5ICk7DQorCQkNCisJCS8qIE5vdyB0aGUgY28tcm91dGluZSBoYXMgYmVlbiBpbml0aWFsaXNlZCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHJlYWR5DQorCQlsaXN0IGF0IHRoZSBjb3JyZWN0IHByaW9yaXR5LiAqLw0KKwkJcHJ2QWRkQ29Sb3V0aW5lVG9SZWFkeVF1ZXVlKCBweENvUm91dGluZSApOw0KKw0KKwkJeFJldHVybiA9IHBkUEFTUzsNCisJfQ0KKwllbHNlDQorCXsJCQ0KKwkJeFJldHVybiA9IGVyckNPVUxEX05PVF9BTExPQ0FURV9SRVFVSVJFRF9NRU1PUlk7DQorCX0NCisJDQorCXJldHVybiB4UmV0dXJuOwkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2Q29Sb3V0aW5lQWRkVG9EZWxheWVkTGlzdCggcG9ydFRpY2tUeXBlIHhUaWNrc1RvRGVsYXksIHhMaXN0ICpweEV2ZW50TGlzdCApDQorew0KK3BvcnRUaWNrVHlwZSB4VGltZVRvV2FrZTsNCisNCisJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIHRvIHdha2UgLSB0aGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBpcw0KKwlub3QgYSBwcm9ibGVtLiAqLw0KKwl4VGltZVRvV2FrZSA9IHhDb1JvdXRpbmVUaWNrQ291bnQgKyB4VGlja3NUb0RlbGF5Ow0KKw0KKwkvKiBXZSBtdXN0IHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcmVhZHkgbGlzdCBiZWZvcmUgYWRkaW5nDQorCW91cnNlbHZlcyB0byB0aGUgYmxvY2tlZCBsaXN0IGFzIHRoZSBzYW1lIGxpc3QgaXRlbSBpcyB1c2VkIGZvcg0KKwlib3RoIGxpc3RzLiAqLw0KKwl2TGlzdFJlbW92ZSggKCB4TGlzdEl0ZW0gKiApICYoIHB4Q3VycmVudENvUm91dGluZS0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorDQorCS8qIFRoZSBsaXN0IGl0ZW0gd2lsbCBiZSBpbnNlcnRlZCBpbiB3YWtlIHRpbWUgb3JkZXIuICovDQorCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweEN1cnJlbnRDb1JvdXRpbmUtPnhHZW5lcmljTGlzdEl0ZW0gKSwgeFRpbWVUb1dha2UgKTsNCisNCisJaWYoIHhUaW1lVG9XYWtlIDwgeENvUm91dGluZVRpY2tDb3VudCApDQorCXsNCisJCS8qIFdha2UgdGltZSBoYXMgb3ZlcmZsb3dlZC4gIFBsYWNlIHRoaXMgaXRlbSBpbiB0aGUNCisJCW92ZXJmbG93IGxpc3QuICovDQorCQl2TGlzdEluc2VydCggKCB4TGlzdCAqICkgcHhPdmVyZmxvd0RlbGF5ZWRDb1JvdXRpbmVMaXN0LCAoIHhMaXN0SXRlbSAqICkgJiggcHhDdXJyZW50Q29Sb3V0aW5lLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCS8qIFRoZSB3YWtlIHRpbWUgaGFzIG5vdCBvdmVyZmxvd2VkLCBzbyB3ZSBjYW4gdXNlIHRoZQ0KKwkJY3VycmVudCBibG9jayBsaXN0LiAqLw0KKwkJdkxpc3RJbnNlcnQoICggeExpc3QgKiApIHB4RGVsYXllZENvUm91dGluZUxpc3QsICggeExpc3RJdGVtICogKSAmKCBweEN1cnJlbnRDb1JvdXRpbmUtPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwl9DQorDQorCWlmKCBweEV2ZW50TGlzdCApDQorCXsNCisJCS8qIEFsc28gYWRkIHRoZSBjby1yb3V0aW5lIHRvIGFuIGV2ZW50IGxpc3QuICBJZiB0aGlzIGlzIGRvbmUgdGhlbiB0aGUNCisJCWZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gKi8NCisJCXZMaXN0SW5zZXJ0KCBweEV2ZW50TGlzdCwgJiggcHhDdXJyZW50Q29Sb3V0aW5lLT54RXZlbnRMaXN0SXRlbSApICk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2Q2hlY2tQZW5kaW5nUmVhZHlMaXN0KCB2b2lkICkNCit7DQorCS8qIEFyZSB0aGVyZSBhbnkgY28tcm91dGluZXMgd2FpdGluZyB0byBnZXQgbW92ZWQgdG8gdGhlIHJlYWR5IGxpc3Q/ICBUaGVzZQ0KKwlhcmUgY28tcm91dGluZXMgdGhhdCBoYXZlIGJlZW4gcmVhZGllZCBieSBhbiBJU1IuICBUaGUgSVNSIGNhbm5vdCBhY2Nlc3MNCisJdGhlCXJlYWR5IGxpc3RzIGl0c2VsZi4gKi8NCisJd2hpbGUoIGxpc3RMSVNUX0lTX0VNUFRZKCAmeFBlbmRpbmdSZWFkeUNvUm91dGluZUxpc3QgKSA9PSBwZEZBTFNFICkNCisJew0KKwkJY29yQ1JDQiAqcHhVbmJsb2NrZWRDUkNCOw0KKw0KKwkJLyogVGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBjYW4gYmUgYWNjZXNzZWQgYnkgYW4gSVNSLiAqLw0KKwkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkJewkNCisJCQlweFVuYmxvY2tlZENSQ0IgPSAoIGNvckNSQ0IgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggKCZ4UGVuZGluZ1JlYWR5Q29Sb3V0aW5lTGlzdCkgKTsJCQkNCisJCQl2TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRDUkNCLT54RXZlbnRMaXN0SXRlbSApICk7DQorCQl9DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJCXZMaXN0UmVtb3ZlKCAmKCBweFVuYmxvY2tlZENSQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJcHJ2QWRkQ29Sb3V0aW5lVG9SZWFkeVF1ZXVlKCBweFVuYmxvY2tlZENSQ0IgKTsJDQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2Q2hlY2tEZWxheWVkTGlzdCggdm9pZCApDQorew0KK2NvckNSQ0IgKnB4Q1JDQjsNCisNCisJeFBhc3NlZFRpY2tzID0geFRhc2tHZXRUaWNrQ291bnQoKSAtIHhMYXN0VGlja0NvdW50Ow0KKwl3aGlsZSggeFBhc3NlZFRpY2tzICkNCisJew0KKwkJeENvUm91dGluZVRpY2tDb3VudCsrOw0KKwkJeFBhc3NlZFRpY2tzLS07DQorDQorCQkvKiBJZiB0aGUgdGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZCB3ZSBuZWVkIHRvIHN3YXAgdGhlIHJlYWR5IGxpc3RzLiAqLw0KKwkJaWYoIHhDb1JvdXRpbmVUaWNrQ291bnQgPT0gMCApDQorCQl7DQorCQkJeExpc3QgKiBweFRlbXA7DQorDQorCQkJLyogVGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZCBzbyB3ZSBuZWVkIHRvIHN3YXAgdGhlIGRlbGF5IGxpc3RzLiAgSWYgdGhlcmUgYXJlDQorCQkJYW55IGl0ZW1zIGluIHB4RGVsYXllZENvUm91dGluZUxpc3QgaGVyZSB0aGVuIHRoZXJlIGlzIGFuIGVycm9yISAqLw0KKwkJCXB4VGVtcCA9IHB4RGVsYXllZENvUm91dGluZUxpc3Q7DQorCQkJcHhEZWxheWVkQ29Sb3V0aW5lTGlzdCA9IHB4T3ZlcmZsb3dEZWxheWVkQ29Sb3V0aW5lTGlzdDsNCisJCQlweE92ZXJmbG93RGVsYXllZENvUm91dGluZUxpc3QgPSBweFRlbXA7DQorCQl9DQorDQorCQkvKiBTZWUgaWYgdGhpcyB0aWNrIGhhcyBtYWRlIGEgdGltZW91dCBleHBpcmUuICovDQorCQl3aGlsZSggbGlzdExJU1RfSVNfRU1QVFkoIHB4RGVsYXllZENvUm91dGluZUxpc3QgKSA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlweENSQ0IgPSAoIGNvckNSQ0IgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhEZWxheWVkQ29Sb3V0aW5lTGlzdCApOw0KKw0KKwkJCWlmKCB4Q29Sb3V0aW5lVGlja0NvdW50IDwgbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4Q1JDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgKQkJCQkNCisJCQl7CQkJDQorCQkJCS8qIFRpbWVvdXQgbm90IHlldCBleHBpcmVkLiAqLwkJCQkJCQkJCQkJCQkJCQkJCQkNCisJCQkJYnJlYWs7CQkJCQkJCQkJCQkJCQkJCQkJCQkNCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ0KKw0KKwkJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJCQl7DQorCQkJCS8qIFRoZSBldmVudCBjb3VsZCBoYXZlIG9jY3VycmVkIGp1c3QgYmVmb3JlIHRoaXMgY3JpdGljYWwNCisJCQkJc2VjdGlvbi4gIElmIHRoaXMgaXMgdGhlIGNhc2UgdGhlbiB0aGUgZ2VuZXJpYyBsaXN0IGl0ZW0gd2lsbA0KKwkJCQloYXZlIGJlZW4gbW92ZWQgdG8gdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBhbmQgdGhlIGZvbGxvd2luZw0KKwkJCQlsaW5lIGlzIHN0aWxsIHZhbGlkLiAgQWxzbyB0aGUgcHZDb250YWluZXIgcGFyYW1ldGVyIHdpbGwgaGF2ZQ0KKwkJCQliZWVuIHNldCB0byBOVUxMIHNvIHRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGFsc28gdmFsaWQuICovDQorCQkJCXZMaXN0UmVtb3ZlKCAmKCBweENSQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOwkJCQkJCQkJCQkJDQorDQorCQkJCS8qIElzIHRoZSBjby1yb3V0aW5lIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8JCQkJCQkJCQkJCQkNCisJCQkJaWYoIHB4Q1JDQi0+eEV2ZW50TGlzdEl0ZW0ucHZDb250YWluZXIgKQkJCQkJCQkJCQkJCQkNCisJCQkJewkJCQkJCQkJCQkJCQkJCQ0KKwkJCQkJdkxpc3RSZW1vdmUoICYoIHB4Q1JDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOwkJCQkJCQkJCQkJDQorCQkJCX0NCisJCQl9DQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCQkJcHJ2QWRkQ29Sb3V0aW5lVG9SZWFkeVF1ZXVlKCBweENSQ0IgKTsJCQkJCQkJCQkJCQkJDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ0KKwl9DQorDQorCXhMYXN0VGlja0NvdW50ID0geENvUm91dGluZVRpY2tDb3VudDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2Q29Sb3V0aW5lU2NoZWR1bGUoIHZvaWQgKQ0KK3sNCisJLyogU2VlIGlmIGFueSBjby1yb3V0aW5lcyByZWFkaWVkIGJ5IGV2ZW50cyBuZWVkIG1vdmluZyB0byB0aGUgcmVhZHkgbGlzdHMuICovDQorCXBydkNoZWNrUGVuZGluZ1JlYWR5TGlzdCgpOw0KKw0KKwkvKiBTZWUgaWYgYW55IGRlbGF5ZWQgY28tcm91dGluZXMgaGF2ZSB0aW1lZCBvdXQuICovDQorCXBydkNoZWNrRGVsYXllZExpc3QoKTsNCisNCisJLyogRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSB0aGF0IGNvbnRhaW5zIHJlYWR5IGNvLXJvdXRpbmVzLiAqLw0KKwl3aGlsZSggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UmVhZHlDb1JvdXRpbmVMaXN0c1sgdXhUb3BDb1JvdXRpbmVSZWFkeVByaW9yaXR5IF0gKSApICkNCisJew0KKwkJaWYoIHV4VG9wQ29Sb3V0aW5lUmVhZHlQcmlvcml0eSA9PSAwICkNCisJCXsNCisJCQkvKiBObyBtb3JlIGNvLXJvdXRpbmVzIHRvIGNoZWNrLiAqLw0KKwkJCXJldHVybjsNCisJCX0NCisJCS0tdXhUb3BDb1JvdXRpbmVSZWFkeVByaW9yaXR5Ow0KKwl9DQorDQorCS8qIGxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSB3YWxrcyB0aHJvdWdoIHRoZSBsaXN0LCBzbyB0aGUgY28tcm91dGluZXMNCisJIG9mIHRoZQlzYW1lIHByaW9yaXR5IGdldCBhbiBlcXVhbCBzaGFyZSBvZiB0aGUgcHJvY2Vzc29yIHRpbWUuICovDQorCWxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSggcHhDdXJyZW50Q29Sb3V0aW5lLCAmKCBweFJlYWR5Q29Sb3V0aW5lTGlzdHNbIHV4VG9wQ29Sb3V0aW5lUmVhZHlQcmlvcml0eSBdICkgKTsNCisNCisJLyogQ2FsbCB0aGUgY28tcm91dGluZS4gKi8NCisJKCBweEN1cnJlbnRDb1JvdXRpbmUtPnB4Q29Sb3V0aW5lRnVuY3Rpb24gKSggcHhDdXJyZW50Q29Sb3V0aW5lLCBweEN1cnJlbnRDb1JvdXRpbmUtPnV4SW5kZXggKTsNCisNCisJcmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlQ29Sb3V0aW5lTGlzdHMoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UHJpb3JpdHk7DQorDQorCWZvciggdXhQcmlvcml0eSA9IDA7IHV4UHJpb3JpdHkgPCBjb25maWdNQVhfQ09fUk9VVElORV9QUklPUklUSUVTOyB1eFByaW9yaXR5KysgKQ0KKwl7DQorCQl2TGlzdEluaXRpYWxpc2UoICggeExpc3QgKiApICYoIHB4UmVhZHlDb1JvdXRpbmVMaXN0c1sgdXhQcmlvcml0eSBdICkgKTsNCisJfQ0KKw0KKwl2TGlzdEluaXRpYWxpc2UoICggeExpc3QgKiApICZ4RGVsYXllZENvUm91dGluZUxpc3QxICk7DQorCXZMaXN0SW5pdGlhbGlzZSggKCB4TGlzdCAqICkgJnhEZWxheWVkQ29Sb3V0aW5lTGlzdDIgKTsNCisJdkxpc3RJbml0aWFsaXNlKCAoIHhMaXN0ICogKSAmeFBlbmRpbmdSZWFkeUNvUm91dGluZUxpc3QgKTsNCisNCisJLyogU3RhcnQgd2l0aCBweERlbGF5ZWRDb1JvdXRpbmVMaXN0IHVzaW5nIGxpc3QxIGFuZCB0aGUNCisJcHhPdmVyZmxvd0RlbGF5ZWRDb1JvdXRpbmVMaXN0IHVzaW5nIGxpc3QyLiAqLw0KKwlweERlbGF5ZWRDb1JvdXRpbmVMaXN0ID0gJnhEZWxheWVkQ29Sb3V0aW5lTGlzdDE7DQorCXB4T3ZlcmZsb3dEZWxheWVkQ29Sb3V0aW5lTGlzdCA9ICZ4RGVsYXllZENvUm91dGluZUxpc3QyOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4Q29Sb3V0aW5lUmVtb3ZlRnJvbUV2ZW50TGlzdCggY29uc3QgeExpc3QgKnB4RXZlbnRMaXN0ICkNCit7DQorY29yQ1JDQiAqcHhVbmJsb2NrZWRDUkNCOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhSZXR1cm47DQorDQorCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gd2l0aGluIGFuIGludGVycnVwdC4gIEl0IGNhbiBvbmx5IGFjY2Vzcw0KKwlldmVudCBsaXN0cyBhbmQgdGhlIHBlbmRpbmcgcmVhZHkgbGlzdC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGENCisJY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBtYWRlIHRvIGVuc3VyZSBweEV2ZW50TGlzdCBpcyBub3QgZW1wdHkuICovDQorCXB4VW5ibG9ja2VkQ1JDQiA9ICggY29yQ1JDQiAqICkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweEV2ZW50TGlzdCApOw0KKwl2TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRDUkNCLT54RXZlbnRMaXN0SXRlbSApICk7DQorCXZMaXN0SW5zZXJ0RW5kKCAoIHhMaXN0ICogKSAmKCB4UGVuZGluZ1JlYWR5Q29Sb3V0aW5lTGlzdCApLCAmKCBweFVuYmxvY2tlZENSQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisNCisJaWYoIHB4VW5ibG9ja2VkQ1JDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRDb1JvdXRpbmUtPnV4UHJpb3JpdHkgKQ0KKwl7DQorCQl4UmV0dXJuID0gcGRUUlVFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFJldHVybiA9IHBkRkFMU0U7DQorCX0NCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL0ZyZWVSVE9TLmggYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9GcmVlUlRPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTAyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9GcmVlUlRPUy5oCkBAIC0wLDAgKzEsNTI4IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIElOQ19GUkVFUlRPU19IDQorI2RlZmluZSBJTkNfRlJFRVJUT1NfSA0KKw0KKw0KKy8qDQorICogSW5jbHVkZSB0aGUgZ2VuZXJpYyBoZWFkZXJzIHJlcXVpcmVkIGZvciB0aGUgRnJlZVJUT1MgcG9ydCBiZWluZyB1c2VkLg0KKyAqLw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisNCisvKiBCYXNpYyBGcmVlUlRPUyBkZWZpbml0aW9ucy4gKi8NCisjaW5jbHVkZSAicHJvamRlZnMuaCINCisNCisvKiBBcHBsaWNhdGlvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorDQorLyogRGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gdGhlIHBvcnQgYmVpbmcgdXNlZC4gKi8NCisjaW5jbHVkZSAicG9ydGFibGUuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisjZGVmaW5lIGNhc3RfdG9fZnJlZVJUT1Nfc3RyaW5nKHMpIChyZWludGVycHJldF9jYXN0PGNvbnN0IHNpZ25lZCBjaGFyKj4ocykpDQorI2Vsc2UNCisjZGVmaW5lIGNhc3RfdG9fZnJlZVJUT1Nfc3RyaW5nKHMpICgoY29uc3Qgc2lnbmVkIGNoYXIgKikocykpDQorI2VuZGlmDQorDQorDQorLyogRGVmaW5lcyB0aGUgcHJvdG90eXBlIHRvIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiB0YXNrIGhvb2sgZnVuY3Rpb24gbXVzdA0KK2NvbmZvcm0uICovDQordHlwZWRlZiBwb3J0QkFTRV9UWVBFICgqcGRUQVNLX0hPT0tfQ09ERSkoIHZvaWQgKiApOw0KKw0KKw0KKw0KKw0KKw0KKy8qDQorICogQ2hlY2sgYWxsIHRoZSByZXF1aXJlZCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBtYWNyb3MgaGF2ZSBiZWVuIGRlZmluZWQuDQorICogVGhlc2UgbWFjcm9zIGFyZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyBhbmQgKGFzIGRvd25sb2FkZWQpIGFyZSBkZWZpbmVkDQorICogd2l0aGluIEZyZWVSVE9TQ29uZmlnLmguDQorICovDQorDQorI2lmbmRlZiBjb25maWdVU0VfUFJFRU1QVElPTg0KKwkjZXJyb3IgTWlzc2luZyBkZWZpbml0aW9uOiAgY29uZmlnVVNFX1BSRUVNUFRJT04gc2hvdWxkIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCBhcyBlaXRoZXIgMSBvciAwLiAgU2VlIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIEZyZWVSVE9TIEFQSSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgY29uZmlnVVNFX0lETEVfSE9PSw0KKwkjZXJyb3IgTWlzc2luZyBkZWZpbml0aW9uOiAgY29uZmlnVVNFX0lETEVfSE9PSyBzaG91bGQgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFzIGVpdGhlciAxIG9yIDAuICBTZWUgdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgRnJlZVJUT1MgQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdVU0VfVElDS19IT09LDQorCSNlcnJvciBNaXNzaW5nIGRlZmluaXRpb246ICBjb25maWdVU0VfVElDS19IT09LIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYXMgZWl0aGVyIDEgb3IgMC4gIFNlZSB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBGcmVlUlRPUyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4NCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ1VTRV9DT19ST1VUSU5FUw0KKwkjZXJyb3IgIE1pc3NpbmcgZGVmaW5pdGlvbjogIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyBzaG91bGQgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFzIGVpdGhlciAxIG9yIDAuICBTZWUgdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgRnJlZVJUT1MgQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3ZUYXNrUHJpb3JpdHlTZXQNCisJI2Vycm9yIE1pc3NpbmcgZGVmaW5pdGlvbjogIElOQ0xVREVfdlRhc2tQcmlvcml0eVNldCBzaG91bGQgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFzIGVpdGhlciAxIG9yIDAuICBTZWUgdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgRnJlZVJUT1MgQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3V4VGFza1ByaW9yaXR5R2V0DQorCSNlcnJvciBNaXNzaW5nIGRlZmluaXRpb246ICBJTkNMVURFX3V4VGFza1ByaW9yaXR5R2V0IHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYXMgZWl0aGVyIDEgb3IgMC4gIFNlZSB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBGcmVlUlRPUyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4NCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfdlRhc2tEZWxldGUJCQ0KKwkjZXJyb3IgTWlzc2luZyBkZWZpbml0aW9uOiAgSU5DTFVERV92VGFza0RlbGV0ZQkJIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYXMgZWl0aGVyIDEgb3IgMC4gIFNlZSB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBGcmVlUlRPUyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4NCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfdlRhc2tTdXNwZW5kCQ0KKwkjZXJyb3IgTWlzc2luZyBkZWZpbml0aW9uOiAgSU5DTFVERV92VGFza1N1c3BlbmQJIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYXMgZWl0aGVyIDEgb3IgMC4gIFNlZSB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBGcmVlUlRPUyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4NCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfdlRhc2tEZWxheVVudGlsDQorCSNlcnJvciBNaXNzaW5nIGRlZmluaXRpb246ICBJTkNMVURFX3ZUYXNrRGVsYXlVbnRpbCBzaG91bGQgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFzIGVpdGhlciAxIG9yIDAuICBTZWUgdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgRnJlZVJUT1MgQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3ZUYXNrRGVsYXkNCisJI2Vycm9yIE1pc3NpbmcgZGVmaW5pdGlvbjogIElOQ0xVREVfdlRhc2tEZWxheSBzaG91bGQgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFzIGVpdGhlciAxIG9yIDAuICBTZWUgdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgRnJlZVJUT1MgQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdVU0VfMTZfQklUX1RJQ0tTDQorCSNlcnJvciBNaXNzaW5nIGRlZmluaXRpb246ICBjb25maWdVU0VfMTZfQklUX1RJQ0tTIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYXMgZWl0aGVyIDEgb3IgMC4gIFNlZSB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBGcmVlUlRPUyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4NCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZQ0KKwkjZGVmaW5lIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3hUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZQ0KKwkjZGVmaW5lIElOQ0xVREVfeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlIDANCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfeFF1ZXVlR2V0TXV0ZXhIb2xkZXINCisJI2RlZmluZSBJTkNMVURFX3hRdWV1ZUdldE11dGV4SG9sZGVyIDANCisjZW5kaWYNCisNCisjaWZuZGVmIElOQ0xVREVfcGNUYXNrR2V0VGFza05hbWUNCisJI2RlZmluZSBJTkNMVURFX3BjVGFza0dldFRhc2tOYW1lIDANCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRw0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyaw0KKwkjZGVmaW5lIElOQ0xVREVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrIDANCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ1VTRV9SRUNVUlNJVkVfTVVURVhFUw0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9SRUNVUlNJVkVfTVVURVhFUyAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdVU0VfTVVURVhFUw0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9NVVRFWEVTIDANCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ1VTRV9USU1FUlMNCisJI2RlZmluZSBjb25maWdVU0VfVElNRVJTIDANCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTDQorCSNkZWZpbmUgY29uZmlnVVNFX0NPVU5USU5HX1NFTUFQSE9SRVMgMA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSQ0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgMA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCDQorCSNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCIDANCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ01BWF9UQVNLX05BTUVfTEVODQorCSNkZWZpbmUgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gMTYNCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ0lETEVfU0hPVUxEX1lJRUxEDQorCSNkZWZpbmUgY29uZmlnSURMRV9TSE9VTERfWUlFTEQJCTENCisjZW5kaWYNCisNCisjaWYgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gPCAxDQorCSNlcnJvciBjb25maWdNQVhfVEFTS19OQU1FX0xFTiBtdXN0IGJlIHNldCB0byBhIG1pbmltdW0gb2YgMSBpbiBGcmVlUlRPU0NvbmZpZy5oDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3hUYXNrUmVzdW1lRnJvbUlTUg0KKwkjZGVmaW5lIElOQ0xVREVfeFRhc2tSZXN1bWVGcm9tSVNSIDENCisjZW5kaWYNCisNCisjaWZuZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIGNvbmZpZ0FTU0VSVCggeCApDQorI2VuZGlmDQorDQorI2lmbmRlZiBwb3J0QUxJR05NRU5UX0FTU0VSVF9weEN1cnJlbnRUQ0INCisJI2RlZmluZSBwb3J0QUxJR05NRU5UX0FTU0VSVF9weEN1cnJlbnRUQ0IgY29uZmlnQVNTRVJUDQorI2VuZGlmDQorDQorLyogVGhlIHRpbWVycyBtb2R1bGUgcmVsaWVzIG9uIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKS4gKi8NCisjaWYgY29uZmlnVVNFX1RJTUVSUyA9PSAxDQorDQorCSNpZm5kZWYgY29uZmlnVElNRVJfVEFTS19QUklPUklUWQ0KKwkJI2Vycm9yIElmIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgdGhlbiBjb25maWdUSU1FUl9UQVNLX1BSSU9SSVRZIG11c3QgYWxzbyBiZSBkZWZpbmVkLg0KKwkjZW5kaWYgLyogY29uZmlnVElNRVJfVEFTS19QUklPUklUWSAqLw0KKw0KKwkjaWZuZGVmIGNvbmZpZ1RJTUVSX1FVRVVFX0xFTkdUSA0KKwkJI2Vycm9yIElmIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgdGhlbiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggbXVzdCBhbHNvIGJlIGRlZmluZWQuDQorCSNlbmRpZiAvKiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggKi8NCisNCisJI2lmbmRlZiBjb25maWdUSU1FUl9UQVNLX1NUQUNLX0RFUFRIDQorCQkjZXJyb3IgSWYgY29uZmlnVVNFX1RJTUVSUyBpcyBzZXQgdG8gMSB0aGVuIGNvbmZpZ1RJTUVSX1RBU0tfU1RBQ0tfREVQVEggbXVzdCBhbHNvIGJlIGRlZmluZWQuDQorCSNlbmRpZiAvKiBjb25maWdUSU1FUl9UQVNLX1NUQUNLX0RFUFRIICovDQorDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9USU1FUlMgKi8NCisNCisjaWZuZGVmIElOQ0xVREVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZQ0KKwkjZGVmaW5lIElOQ0xVREVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUNCisJI2RlZmluZSBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgMA0KKyNlbmRpZg0KKw0KKw0KKyNpZm5kZWYgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUg0KKwkjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1INCisJI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRTdGF0dXNWYWx1ZSApICggdm9pZCApIHV4U2F2ZWRTdGF0dXNWYWx1ZQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcG9ydENMRUFOX1VQX1RDQg0KKwkjZGVmaW5lIHBvcnRDTEVBTl9VUF9UQ0IoIHB4VENCICkgKCB2b2lkICkgcHhUQ0INCisjZW5kaWYNCisNCisjaWZuZGVmIHBvcnRTRVRVUF9UQ0INCisJI2RlZmluZSBwb3J0U0VUVVBfVENCKCBweFRDQiApICggdm9pZCApIHB4VENCDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFDQorCSNkZWZpbmUgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSAwVQ0KKyNlbmRpZg0KKw0KKyNpZiAoIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgPCAxICkNCisJI2RlZmluZSB2UXVldWVBZGRUb1JlZ2lzdHJ5KCB4UXVldWUsIHBjTmFtZSApDQorCSNkZWZpbmUgdlF1ZXVlVW5yZWdpc3RlclF1ZXVlKCB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcG9ydFBPSU5URVJfU0laRV9UWVBFDQorCSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIHVuc2lnbmVkIGxvbmcNCisjZW5kaWYNCisNCisvKiBSZW1vdmUgYW55IHVudXNlZCB0cmFjZSBtYWNyb3MuICovDQorI2lmbmRlZiB0cmFjZVNUQVJUDQorCS8qIFVzZWQgdG8gcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGluaXRpYWxpc2F0aW9uIC0gZm9yIGV4YW1wbGUsIG9wZW4gYSBmaWxlDQorCWludG8gd2hpY2ggdHJhY2UgaXMgdG8gYmUgd3JpdHRlbi4gKi8NCisJI2RlZmluZSB0cmFjZVNUQVJUKCkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlRU5EDQorCS8qIFVzZSB0byBjbG9zZSBhIHRyYWNlLCBmb3IgZXhhbXBsZSBjbG9zZSBhIGZpbGUgaW50byB3aGljaCB0cmFjZSBoYXMgYmVlbg0KKwl3cml0dGVuLiAqLw0KKwkjZGVmaW5lIHRyYWNlRU5EKCkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlVEFTS19TV0lUQ0hFRF9JTg0KKwkvKiBDYWxsZWQgYWZ0ZXIgYSB0YXNrIGhhcyBiZWVuIHNlbGVjdGVkIHRvIHJ1bi4gIHB4Q3VycmVudFRDQiBob2xkcyBhIHBvaW50ZXINCisJdG8gdGhlIHRhc2sgY29udHJvbCBibG9jayBvZiB0aGUgc2VsZWN0ZWQgdGFzay4gKi8NCisJI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX1NXSVRDSEVEX09VVA0KKwkvKiBDYWxsZWQgYmVmb3JlIGEgdGFzayBoYXMgYmVlbiBzZWxlY3RlZCB0byBydW4uICBweEN1cnJlbnRUQ0IgaG9sZHMgYSBwb2ludGVyDQorCXRvIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgb2YgdGhlIHRhc2sgYmVpbmcgc3dpdGNoZWQgb3V0LiAqLw0KKwkjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9PVVQoKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX1BSSU9SSVRZX0lOSEVSSVQNCisJLyogQ2FsbGVkIHdoZW4gYSB0YXNrIGF0dGVtcHRzIHRvIHRha2UgYSBtdXRleCB0aGF0IGlzIGFscmVhZHkgaGVsZCBieSBhDQorCWxvd2VyIHByaW9yaXR5IHRhc2suICBweFRDQk9mTXV0ZXhIb2xkZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBUQ0Igb2YgdGhlIHRhc2sNCisJdGhhdCBob2xkcyB0aGUgbXV0ZXguICB1eEluaGVyaXRlZFByaW9yaXR5IGlzIHRoZSBwcmlvcml0eSB0aGUgbXV0ZXggaG9sZGVyDQorCXdpbGwgaW5oZXJpdCAodGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrIHRoYXQgaXMgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlDQorCW11dGVkLiAqLw0KKwkjZGVmaW5lIHRyYWNlVEFTS19QUklPUklUWV9JTkhFUklUKCBweFRDQk9mTXV0ZXhIb2xkZXIsIHV4SW5oZXJpdGVkUHJpb3JpdHkgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX1BSSU9SSVRZX0RJU0lOSEVSSVQNCisJLyogQ2FsbGVkIHdoZW4gYSB0YXNrIHJlbGVhc2VzIGEgbXV0ZXgsIHRoZSBob2xkaW5nIG9mIHdoaWNoIGhhZCByZXN1bHRlZCBpbg0KKwl0aGUgdGFzayBpbmhlcml0aW5nIHRoZSBwcmlvcml0eSBvZiBhIGhpZ2hlciBwcmlvcml0eSB0YXNrLiAgDQorCXB4VENCT2ZNdXRleEhvbGRlciBpcyBhIHBvaW50ZXIgdG8gdGhlIFRDQiBvZiB0aGUgdGFzayB0aGF0IGlzIHJlbGVhc2luZyB0aGUNCisJbXV0ZXguICB1eE9yaWdpbmFsUHJpb3JpdHkgaXMgdGhlIHRhc2sncyBjb25maWd1cmVkIChiYXNlKSBwcmlvcml0eS4gKi8NCisJI2RlZmluZSB0cmFjZVRBU0tfUFJJT1JJVFlfRElTSU5IRVJJVCggcHhUQ0JPZk11dGV4SG9sZGVyLCB1eE9yaWdpbmFsUHJpb3JpdHkgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFDQorCS8qIFRhc2sgaXMgYWJvdXQgdG8gYmxvY2sgYmVjYXVzZSBpdCBjYW5ub3QgcmVhZCBmcm9tIGENCisJcXVldWUvbXV0ZXgvc2VtYXBob3JlLiAgcHhRdWV1ZSBpcyBhIHBvaW50ZXIgdG8gdGhlIHF1ZXVlL211dGV4L3NlbWFwaG9yZQ0KKwl1cG9uIHdoaWNoIHRoZSByZWFkIHdhcyBhdHRlbXB0ZWQuICBweEN1cnJlbnRUQ0IgcG9pbnRzIHRvIHRoZSBUQ0Igb2YgdGhlDQorCXRhc2sgdGhhdCBhdHRlbXB0ZWQgdGhlIHJlYWQuICovDQorCSNkZWZpbmUgdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFKCBweFF1ZXVlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfU0VORA0KKwkvKiBUYXNrIGlzIGFib3V0IHRvIGJsb2NrIGJlY2F1c2UgaXQgY2Fubm90IHdyaXRlIHRvIGENCisJcXVldWUvbXV0ZXgvc2VtYXBob3JlLiAgcHhRdWV1ZSBpcyBhIHBvaW50ZXIgdG8gdGhlIHF1ZXVlL211dGV4L3NlbWFwaG9yZQ0KKwl1cG9uIHdoaWNoIHRoZSB3cml0ZSB3YXMgYXR0ZW1wdGVkLiAgcHhDdXJyZW50VENCIHBvaW50cyB0byB0aGUgVENCIG9mIHRoZQ0KKwl0YXNrIHRoYXQgYXR0ZW1wdGVkIHRoZSB3cml0ZS4gKi8NCisJI2RlZmluZSB0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1NFTkQoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XDQorCSNkZWZpbmUgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIDANCisjZW5kaWYNCisNCisvKiBUaGUgZm9sbG93aW5nIGV2ZW50IG1hY3JvcyBhcmUgZW1iZWRkZWQgaW4gdGhlIGtlcm5lbCBBUEkgY2FsbHMuICovDQorDQorI2lmbmRlZiB0cmFjZU1PVkVEX1RBU0tfVE9fUkVBRFlfU1RBVEUNCisJI2RlZmluZSB0cmFjZU1PVkVEX1RBU0tfVE9fUkVBRFlfU1RBVEUoIHB4VENCICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlUVVFVUVfQ1JFQVRFCQ0KKwkjZGVmaW5lIHRyYWNlUVVFVUVfQ1JFQVRFKCBweE5ld1F1ZXVlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlUVVFVUVfQ1JFQVRFX0ZBSUxFRA0KKwkjZGVmaW5lIHRyYWNlUVVFVUVfQ1JFQVRFX0ZBSUxFRCggdWNRdWV1ZVR5cGUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VDUkVBVEVfTVVURVgNCisJI2RlZmluZSB0cmFjZUNSRUFURV9NVVRFWCggcHhOZXdRdWV1ZSApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZUNSRUFURV9NVVRFWF9GQUlMRUQNCisJI2RlZmluZSB0cmFjZUNSRUFURV9NVVRFWF9GQUlMRUQoKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRQ0KKwkjZGVmaW5lIHRyYWNlR0lWRV9NVVRFWF9SRUNVUlNJVkUoIHB4TXV0ZXggKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRV9GQUlMRUQNCisJI2RlZmluZSB0cmFjZUdJVkVfTVVURVhfUkVDVVJTSVZFX0ZBSUxFRCggcHhNdXRleCApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFDQorCSNkZWZpbmUgdHJhY2VUQUtFX01VVEVYX1JFQ1VSU0lWRSggcHhNdXRleCApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFX0ZBSUxFRA0KKwkjZGVmaW5lIHRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweE11dGV4ICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRQ0KKwkjZGVmaW5lIHRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRSgpDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZUNSRUFURV9DT1VOVElOR19TRU1BUEhPUkVfRkFJTEVEDQorCSNkZWZpbmUgdHJhY2VDUkVBVEVfQ09VTlRJTkdfU0VNQVBIT1JFX0ZBSUxFRCgpDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVFVRVVFX1NFTkQNCisJI2RlZmluZSB0cmFjZVFVRVVFX1NFTkQoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VRVUVVRV9TRU5EX0ZBSUxFRA0KKwkjZGVmaW5lIHRyYWNlUVVFVUVfU0VORF9GQUlMRUQoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VRVUVVRV9SRUNFSVZFDQorCSNkZWZpbmUgdHJhY2VRVUVVRV9SRUNFSVZFKCBweFF1ZXVlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlUVVFVUVfUEVFSw0KKwkjZGVmaW5lIHRyYWNlUVVFVUVfUEVFSyggcHhRdWV1ZSApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVFVRVVFX1JFQ0VJVkVfRkFJTEVEDQorCSNkZWZpbmUgdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVFVRVVFX1NFTkRfRlJPTV9JU1INCisJI2RlZmluZSB0cmFjZVFVRVVFX1NFTkRfRlJPTV9JU1IoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSX0ZBSUxFRA0KKwkjZGVmaW5lIHRyYWNlUVVFVUVfU0VORF9GUk9NX0lTUl9GQUlMRUQoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSDQorCSNkZWZpbmUgdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSKCBweFF1ZXVlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlUVVFVUVfUkVDRUlWRV9GUk9NX0lTUl9GQUlMRUQNCisJI2RlZmluZSB0cmFjZVFVRVVFX1JFQ0VJVkVfRlJPTV9JU1JfRkFJTEVEKCBweFF1ZXVlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlUVVFVUVfREVMRVRFDQorCSNkZWZpbmUgdHJhY2VRVUVVRV9ERUxFVEUoIHB4UXVldWUgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX0NSRUFURQ0KKwkjZGVmaW5lIHRyYWNlVEFTS19DUkVBVEUoIHB4TmV3VENCICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlVEFTS19DUkVBVEVfRkFJTEVEDQorCSNkZWZpbmUgdHJhY2VUQVNLX0NSRUFURV9GQUlMRUQoKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX0RFTEVURQ0KKwkjZGVmaW5lIHRyYWNlVEFTS19ERUxFVEUoIHB4VGFza1RvRGVsZXRlICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlVEFTS19ERUxBWV9VTlRJTA0KKwkjZGVmaW5lIHRyYWNlVEFTS19ERUxBWV9VTlRJTCgpDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRBU0tfREVMQVkNCisJI2RlZmluZSB0cmFjZVRBU0tfREVMQVkoKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX1BSSU9SSVRZX1NFVA0KKwkjZGVmaW5lIHRyYWNlVEFTS19QUklPUklUWV9TRVQoIHB4VGFzaywgdXhOZXdQcmlvcml0eSApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRBU0tfU1VTUEVORA0KKwkjZGVmaW5lIHRyYWNlVEFTS19TVVNQRU5EKCBweFRhc2tUb1N1c3BlbmQgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUQVNLX1JFU1VNRQ0KKwkjZGVmaW5lIHRyYWNlVEFTS19SRVNVTUUoIHB4VGFza1RvUmVzdW1lICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlVEFTS19SRVNVTUVfRlJPTV9JU1INCisJI2RlZmluZSB0cmFjZVRBU0tfUkVTVU1FX0ZST01fSVNSKCBweFRhc2tUb1Jlc3VtZSApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRBU0tfSU5DUkVNRU5UX1RJQ0sNCisJI2RlZmluZSB0cmFjZVRBU0tfSU5DUkVNRU5UX1RJQ0soIHhUaWNrQ291bnQgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUSU1FUl9DUkVBVEUNCisJI2RlZmluZSB0cmFjZVRJTUVSX0NSRUFURSggcHhOZXdUaW1lciApDQorI2VuZGlmDQorDQorI2lmbmRlZiB0cmFjZVRJTUVSX0NSRUFURV9GQUlMRUQNCisJI2RlZmluZSB0cmFjZVRJTUVSX0NSRUFURV9GQUlMRUQoKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUSU1FUl9DT01NQU5EX1NFTkQNCisJI2RlZmluZSB0cmFjZVRJTUVSX0NPTU1BTkRfU0VORCggeFRpbWVyLCB4TWVzc2FnZUlELCB4TWVzc2FnZVZhbHVlVmFsdWUsIHhSZXR1cm4gKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgdHJhY2VUSU1FUl9FWFBJUkVEDQorCSNkZWZpbmUgdHJhY2VUSU1FUl9FWFBJUkVEKCBweFRpbWVyICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHRyYWNlVElNRVJfQ09NTUFORF9SRUNFSVZFRA0KKwkjZGVmaW5lIHRyYWNlVElNRVJfQ09NTUFORF9SRUNFSVZFRCggcHhUaW1lciwgeE1lc3NhZ2VJRCwgeE1lc3NhZ2VWYWx1ZSApDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUw0KKwkjZGVmaW5lIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTIDANCisjZW5kaWYNCisNCisjaWYgKCBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyA9PSAxICkNCisNCisJI2lmbmRlZiBwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUw0KKwkJI2Vycm9yIElmIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTIGlzIGRlZmluZWQgdGhlbiBwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUyBtdXN0IGFsc28gYmUgZGVmaW5lZC4gIHBvcnRDT05GSUdVUkVfVElNRVJfRk9SX1JVTl9USU1FX1NUQVRTIHNob3VsZCBjYWxsIGEgcG9ydCBsYXllciBmdW5jdGlvbiB0byBzZXR1cCBhIHBlcmlwaGVyYWwgdGltZXIvY291bnRlciB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgYXMgdGhlIHJ1biB0aW1lIGNvdW50ZXIgdGltZSBiYXNlLg0KKwkjZW5kaWYgLyogcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMgKi8NCisNCisJI2lmbmRlZiBwb3J0R0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUNCisJCSNpZm5kZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KKwkJCSNlcnJvciBJZiBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyBpcyBkZWZpbmVkIHRoZW4gZWl0aGVyIHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSBvciBwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFIG11c3QgYWxzbyBiZSBkZWZpbmVkLiAgU2VlIHRoZSBleGFtcGxlcyBwcm92aWRlZCBhbmQgdGhlIEZyZWVSVE9TIHdlYiBzaXRlIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKwkJI2VuZGlmIC8qIHBvcnRBTFRfR0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUgKi8NCisJI2VuZGlmIC8qIHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSAqLw0KKw0KKyNlbmRpZiAvKiBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyAqLw0KKw0KKyNpZm5kZWYgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMNCisJI2RlZmluZSBwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUygpDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdVU0VfTUFMTE9DX0ZBSUxFRF9IT09LDQorCSNkZWZpbmUgY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBwb3J0UFJJVklMRUdFX0JJVA0KKwkjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUICggKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMHgwMCApDQorI2VuZGlmDQorDQorI2lmbmRlZiBwb3J0WUlFTERfV0lUSElOX0FQSQ0KKwkjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJIHBvcnRZSUVMRA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcHZQb3J0TWFsbG9jQWxpZ25lZA0KKwkjZGVmaW5lIHB2UG9ydE1hbGxvY0FsaWduZWQoIHgsIHB1eFN0YWNrQnVmZmVyICkgKCAoICggcHV4U3RhY2tCdWZmZXIgKSA9PSBOVUxMICkgPyAoIHB2UG9ydE1hbGxvYyggKCB4ICkgKSApIDogKCBwdXhTdGFja0J1ZmZlciApICkNCisjZW5kaWYNCisNCisjaWZuZGVmIHZQb3J0RnJlZUFsaWduZWQNCisJI2RlZmluZSB2UG9ydEZyZWVBbGlnbmVkKCBwdkJsb2NrVG9GcmVlICkgdlBvcnRGcmVlKCBwdkJsb2NrVG9GcmVlICkNCisjZW5kaWYNCisNCisjZW5kaWYgLyogSU5DX0ZSRUVSVE9TX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9TdGFja01hY3Jvcy5oIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvU3RhY2tNYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWYzY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvU3RhY2tNYWNyb3MuaApAQCAtMCwwICsxLDE4MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFNUQUNLX01BQ1JPU19IDQorI2RlZmluZSBTVEFDS19NQUNST1NfSA0KKw0KKy8qDQorICogQ2FsbCB0aGUgc3RhY2sgb3ZlcmZsb3cgaG9vayBmdW5jdGlvbiBpZiB0aGUgc3RhY2sgb2YgdGhlIHRhc2sgYmVpbmcgc3dhcHBlZA0KKyAqIG91dCBpcyBjdXJyZW50bHkgb3ZlcmZsb3dlZCwgb3IgbG9va3MgbGlrZSBpdCBtaWdodCBoYXZlIG92ZXJmbG93ZWQgaW4gdGhlDQorICogcGFzdC4NCisgKg0KKyAqIFNldHRpbmcgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIDEgd2lsbCBjYXVzZSB0aGUgbWFjcm8gdG8gY2hlY2sNCisgKiB0aGUgY3VycmVudCBzdGFjayBzdGF0ZSBvbmx5IC0gY29tcGFyaW5nIHRoZSBjdXJyZW50IHRvcCBvZiBzdGFjayB2YWx1ZSB0bw0KKyAqIHRoZSBzdGFjayBsaW1pdC4gIFNldHRpbmcgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIGdyZWF0ZXIgdGhhbiAxDQorICogd2lsbCBhbHNvIGNhdXNlIHRoZSBsYXN0IGZldyBzdGFjayBieXRlcyB0byBiZSBjaGVja2VkIHRvIGVuc3VyZSB0aGUgdmFsdWUNCisgKiB0byB3aGljaCB0aGUgYnl0ZXMgd2VyZSBzZXQgd2hlbiB0aGUgdGFzayB3YXMgY3JlYXRlZCBoYXZlIG5vdCBiZWVuDQorICogb3ZlcndyaXR0ZW4uICBOb3RlIHRoaXMgc2Vjb25kIHRlc3QgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgYW4gb3ZlcmZsb3dlZA0KKyAqIHN0YWNrIHdpbGwgYWx3YXlzIGJlIHJlY29nbmlzZWQuDQorICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPT0gMCApDQorDQorCS8qIEZyZWVSVE9TQ29uZmlnLmggaXMgbm90IHNldCB0byBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3dzLiAqLw0KKwkjZGVmaW5lIHRhc2tGSVJTVF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKQ0KKwkjZGVmaW5lIHRhc2tTRUNPTkRfQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XKCkNCisNCisjZW5kaWYgLyogY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID09IDAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA9PSAxICkNCisNCisJLyogRnJlZVJUT1NDb25maWcuaCBpcyBvbmx5IHNldCB0byB1c2UgdGhlIGZpcnN0IG1ldGhvZCBvZg0KKwlvdmVyZmxvdyBjaGVja2luZy4gKi8NCisJI2RlZmluZSB0YXNrU0VDT05EX0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVygpDQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmKCAoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDAgKSAmJiAoIHBvcnRTVEFDS19HUk9XVEggPCAwICkgKQ0KKw0KKwkvKiBPbmx5IHRoZSBjdXJyZW50IHN0YWNrIHN0YXRlIGlzIHRvIGJlIGNoZWNrZWQuICovDQorCSNkZWZpbmUgdGFza0ZJUlNUX0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVygpCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSXMgdGhlIGN1cnJlbnRseSBzYXZlZCBzdGFjayBwb2ludGVyIHdpdGhpbiB0aGUgc3RhY2sgbGltaXQ/ICovCQkJCQkJCQlcDQorCQlpZiggcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgPD0gcHhDdXJyZW50VENCLT5weFN0YWNrICkJCQkJCQkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQl2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vayggKCB4VGFza0hhbmRsZSApIHB4Q3VycmVudFRDQiwgcHhDdXJyZW50VENCLT5wY1Rhc2tOYW1lICk7CVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0NCisNCisjZW5kaWYgLyogY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMCAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiggKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAwICkgJiYgKCBwb3J0U1RBQ0tfR1JPV1RIID4gMCApICkNCisNCisJLyogT25seSB0aGUgY3VycmVudCBzdGFjayBzdGF0ZSBpcyB0byBiZSBjaGVja2VkLiAqLw0KKwkjZGVmaW5lIHRhc2tGSVJTVF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElzIHRoZSBjdXJyZW50bHkgc2F2ZWQgc3RhY2sgcG9pbnRlciB3aXRoaW4gdGhlIHN0YWNrIGxpbWl0PyAqLwkJCQkJCQkJXA0KKwkJaWYoIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrID49IHB4Q3VycmVudFRDQi0+cHhFbmRPZlN0YWNrICkJCQkJCQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rKCAoIHhUYXNrSGFuZGxlICkgcHhDdXJyZW50VENCLCBweEN1cnJlbnRUQ0ItPnBjVGFza05hbWUgKTsJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQ0KKw0KKyNlbmRpZiAvKiBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPT0gMSAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiggKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAxICkgJiYgKCBwb3J0U1RBQ0tfR1JPV1RIIDwgMCApICkNCisNCisJI2RlZmluZSB0YXNrU0VDT05EX0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVygpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPSB7CXRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQkJCQkJCQl0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsCQlcDQorCQkJCQkJCQkJCQkJCQkJdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCQkJCQkJCXRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQkJCQkJCQl0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUgfTsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBIYXMgdGhlIGV4dHJlbWl0eSBvZiB0aGUgdGFzayBzdGFjayBldmVyIGJlZW4gd3JpdHRlbiBvdmVyPyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCWlmKCBtZW1jbXAoICggdm9pZCAqICkgcHhDdXJyZW50VENCLT5weFN0YWNrLCAoIHZvaWQgKiApIHVjRXhwZWN0ZWRTdGFja0J5dGVzLCBzaXplb2YoIHVjRXhwZWN0ZWRTdGFja0J5dGVzICkgKSAhPSAwICkJCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rKCAoIHhUYXNrSGFuZGxlICkgcHhDdXJyZW50VENCLCBweEN1cnJlbnRUQ0ItPnBjVGFza05hbWUgKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9DQorDQorI2VuZGlmIC8qICNpZiggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMSApICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmKCAoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDEgKSAmJiAoIHBvcnRTVEFDS19HUk9XVEggPiAwICkgKQ0KKw0KKwkjZGVmaW5lIHRhc2tTRUNPTkRfQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XKCkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJY2hhciAqcGNFbmRPZlN0YWNrID0gKCBjaGFyICogKSBweEN1cnJlbnRUQ0ItPnB4RW5kT2ZTdGFjazsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPSB7CXRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQkJCQkJCQl0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsCQlcDQorCQkJCQkJCQkJCQkJCQkJdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCQkJCQkJCXRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQkJCQkJCQl0c2tTVEFDS19GSUxMX0JZVEUsIHRza1NUQUNLX0ZJTExfQllURSwgdHNrU1RBQ0tfRklMTF9CWVRFLCB0c2tTVEFDS19GSUxMX0JZVEUgfTsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwY0VuZE9mU3RhY2sgLT0gc2l6ZW9mKCB1Y0V4cGVjdGVkU3RhY2tCeXRlcyApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIEhhcyB0aGUgZXh0cmVtaXR5IG9mIHRoZSB0YXNrIHN0YWNrIGV2ZXIgYmVlbiB3cml0dGVuIG92ZXI/ICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIG1lbWNtcCggKCB2b2lkICogKSBwY0VuZE9mU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApICE9IDAgKQkJCQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQl2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vayggKCB4VGFza0hhbmRsZSApIHB4Q3VycmVudFRDQiwgcHhDdXJyZW50VENCLT5wY1Rhc2tOYW1lICk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQ0KKw0KKyNlbmRpZiAvKiAjaWYoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDEgKSAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNlbmRpZiAvKiBTVEFDS19NQUNST1NfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL2Nyb3V0aW5lLmggYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9jcm91dGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODQzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9jcm91dGluZS5oCkBAIC0wLDAgKzEsNzU5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgQ09fUk9VVElORV9IDQorI2RlZmluZSBDT19ST1VUSU5FX0gNCisNCisjaWZuZGVmIElOQ19GUkVFUlRPU19IDQorCSNlcnJvciAiaW5jbHVkZSBGcmVlUlRPUy5oIG11c3QgYXBwZWFyIGluIHNvdXJjZSBmaWxlcyBiZWZvcmUgaW5jbHVkZSBjcm91dGluZS5oIg0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlICJsaXN0LmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogVXNlZCB0byBoaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY28tcm91dGluZSBjb250cm9sIGJsb2NrLiAgVGhlDQorY29udHJvbCBibG9jayBzdHJ1Y3R1cmUgaG93ZXZlciBoYXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGhlYWRlciBkdWUgdG8NCit0aGUgbWFjcm8gaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvLXJvdXRpbmUgZnVuY3Rpb25hbGl0eS4gKi8NCit0eXBlZGVmIHZvaWQgKiB4Q29Sb3V0aW5lSGFuZGxlOw0KKw0KKy8qIERlZmluZXMgdGhlIHByb3RvdHlwZSB0byB3aGljaCBjby1yb3V0aW5lIGZ1bmN0aW9ucyBtdXN0IGNvbmZvcm0uICovDQordHlwZWRlZiB2b2lkICgqY3JDT1JPVVRJTkVfQ09ERSkoIHhDb1JvdXRpbmVIYW5kbGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKTsNCisNCit0eXBlZGVmIHN0cnVjdCBjb3JDb1JvdXRpbmVDb250cm9sQmxvY2sNCit7DQorCWNyQ09ST1VUSU5FX0NPREUgCQlweENvUm91dGluZUZ1bmN0aW9uOw0KKwl4TGlzdEl0ZW0JCQkJeEdlbmVyaWNMaXN0SXRlbTsJLyo8IExpc3QgaXRlbSB1c2VkIHRvIHBsYWNlIHRoZSBDUkNCIGluIHJlYWR5IGFuZCBibG9ja2VkIHF1ZXVlcy4gKi8NCisJeExpc3RJdGVtCQkJCXhFdmVudExpc3RJdGVtOwkJLyo8IExpc3QgaXRlbSB1c2VkIHRvIHBsYWNlIHRoZSBDUkNCIGluIGV2ZW50IGxpc3RzLiAqLw0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIAl1eFByaW9yaXR5OwkJCS8qPCBUaGUgcHJpb3JpdHkgb2YgdGhlIGNvLXJvdXRpbmUgaW4gcmVsYXRpb24gdG8gb3RoZXIgY28tcm91dGluZXMuICovDQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgCXV4SW5kZXg7CQkJLyo8IFVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBjby1yb3V0aW5lcyB3aGVuIG11bHRpcGxlIGNvLXJvdXRpbmVzIHVzZSB0aGUgc2FtZSBjby1yb3V0aW5lIGZ1bmN0aW9uLiAqLw0KKwl1bnNpZ25lZCBzaG9ydCAJCXV4U3RhdGU7CQkJLyo8IFVzZWQgaW50ZXJuYWxseSBieSB0aGUgY28tcm91dGluZSBpbXBsZW1lbnRhdGlvbi4gKi8NCit9IGNvckNSQ0I7IC8qIENvLXJvdXRpbmUgY29udHJvbCBibG9jay4gIE5vdGUgbXVzdCBiZSBpZGVudGljYWwgaW4gc2l6ZSBkb3duIHRvIHV4UHJpb3JpdHkgd2l0aCB0c2tUQ0IuICovDQorDQorLyoqDQorICogY3JvdXRpbmUuIGgNCisgKjxwcmU+DQorIHBvcnRCQVNFX1RZUEUgeENvUm91dGluZUNyZWF0ZSgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjckNPUk9VVElORV9DT0RFIHB4Q29Sb3V0aW5lQ29kZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UHJpb3JpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEluZGV4DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7PC9wcmU+DQorICoNCisgKiBDcmVhdGUgYSBuZXcgY28tcm91dGluZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGNvLXJvdXRpbmVzIHRoYXQgYXJlDQorICogcmVhZHkgdG8gcnVuLg0KKyAqDQorICogQHBhcmFtIHB4Q29Sb3V0aW5lQ29kZSBQb2ludGVyIHRvIHRoZSBjby1yb3V0aW5lIGZ1bmN0aW9uLiAgQ28tcm91dGluZQ0KKyAqIGZ1bmN0aW9ucyByZXF1aXJlIHNwZWNpYWwgc3ludGF4IC0gc2VlIHRoZSBjby1yb3V0aW5lIHNlY3Rpb24gb2YgdGhlIFdFQg0KKyAqIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICoNCisgKiBAcGFyYW0gdXhQcmlvcml0eSBUaGUgcHJpb3JpdHkgd2l0aCByZXNwZWN0IHRvIG90aGVyIGNvLXJvdXRpbmVzIGF0IHdoaWNoDQorICogIHRoZSBjby1yb3V0aW5lIHdpbGwgcnVuLg0KKyAqDQorICogQHBhcmFtIHV4SW5kZXggVXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBjby1yb3V0aW5lcyB0aGF0DQorICogZXhlY3V0ZSB0aGUgc2FtZSBmdW5jdGlvbi4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdyBhbmQgdGhlIGNvLXJvdXRpbmUgc2VjdGlvbg0KKyAqIG9mIHRoZSBXRUIgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEByZXR1cm4gcGRQQVNTIGlmIHRoZSBjby1yb3V0aW5lIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhbmQgYWRkZWQgdG8gYSByZWFkeQ0KKyAqIGxpc3QsIG90aGVyd2lzZSBhbiBlcnJvciBjb2RlIGRlZmluZWQgd2l0aCBQcm9qRGVmcy5oLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBDby1yb3V0aW5lIHRvIGJlIGNyZWF0ZWQuDQorIHZvaWQgdkZsYXNoQ29Sb3V0aW5lKCB4Q29Sb3V0aW5lSGFuZGxlIHhIYW5kbGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJbmRleCApDQorIHsNCisgLy8gVmFyaWFibGVzIGluIGNvLXJvdXRpbmVzIG11c3QgYmUgZGVjbGFyZWQgc3RhdGljIGlmIHRoZXkgbXVzdCBtYWludGFpbiB2YWx1ZSBhY3Jvc3MgYSBibG9ja2luZyBjYWxsLg0KKyAvLyBUaGlzIG1heSBub3QgYmUgbmVjZXNzYXJ5IGZvciBjb25zdCB2YXJpYWJsZXMuDQorIHN0YXRpYyBjb25zdCBjaGFyIGNMZWRUb0ZsYXNoWyAyIF0gPSB7IDUsIDYgfTsNCisgc3RhdGljIGNvbnN0IHBvcnRUaWNrVHlwZSB1eEZsYXNoUmF0ZXNbIDIgXSA9IHsgMjAwLCA0MDAgfTsNCisNCisgICAgIC8vIE11c3Qgc3RhcnQgZXZlcnkgY28tcm91dGluZSB3aXRoIGEgY2FsbCB0byBjclNUQVJUKCk7DQorICAgICBjclNUQVJUKCB4SGFuZGxlICk7DQorDQorICAgICBmb3IoIDs7ICkNCisgICAgIHsNCisgICAgICAgICAvLyBUaGlzIGNvLXJvdXRpbmUganVzdCBkZWxheXMgZm9yIGEgZml4ZWQgcGVyaW9kLCB0aGVuIHRvZ2dsZXMNCisgICAgICAgICAvLyBhbiBMRUQuICBUd28gY28tcm91dGluZXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbiwgc28NCisgICAgICAgICAvLyB0aGUgdXhJbmRleCBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0ZWxsIHRoZSBjby1yb3V0aW5lIHdoaWNoDQorICAgICAgICAgLy8gTEVEIHRvIGZsYXNoIGFuZCBob3cgbG9uZyB0byBkZWxheS4gIFRoaXMgYXNzdW1lcyB4UXVldWUgaGFzDQorICAgICAgICAgLy8gYWxyZWFkeSBiZWVuIGNyZWF0ZWQuDQorICAgICAgICAgdlBhclRlc3RUb2dnbGVMRUQoIGNMZWRUb0ZsYXNoWyB1eEluZGV4IF0gKTsNCisgICAgICAgICBjckRFTEFZKCB4SGFuZGxlLCB1eEZsYXNoUmF0ZXNbIHV4SW5kZXggXSApOw0KKyAgICAgfQ0KKw0KKyAgICAgLy8gTXVzdCBlbmQgZXZlcnkgY28tcm91dGluZSB3aXRoIGEgY2FsbCB0byBjckVORCgpOw0KKyAgICAgY3JFTkQoKTsNCisgfQ0KKw0KKyAvLyBGdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdHdvIGNvLXJvdXRpbmVzLg0KKyB2b2lkIHZPdGhlckZ1bmN0aW9uKCB2b2lkICkNCisgew0KKyB1bnNpZ25lZCBjaGFyIHVjUGFyYW1ldGVyVG9QYXNzOw0KKyB4VGFza0hhbmRsZSB4SGFuZGxlOw0KKwkJDQorICAgICAvLyBDcmVhdGUgdHdvIGNvLXJvdXRpbmVzIGF0IHByaW9yaXR5IDAuICBUaGUgZmlyc3QgaXMgZ2l2ZW4gaW5kZXggMA0KKyAgICAgLy8gc28gKGZyb20gdGhlIGNvZGUgYWJvdmUpIHRvZ2dsZXMgTEVEIDUgZXZlcnkgMjAwIHRpY2tzLiAgVGhlIHNlY29uZA0KKyAgICAgLy8gaXMgZ2l2ZW4gaW5kZXggMSBzbyB0b2dnbGVzIExFRCA2IGV2ZXJ5IDQwMCB0aWNrcy4NCisgICAgIGZvciggdXhJbmRleCA9IDA7IHV4SW5kZXggPCAyOyB1eEluZGV4KysgKQ0KKyAgICAgew0KKyAgICAgICAgIHhDb1JvdXRpbmVDcmVhdGUoIHZGbGFzaENvUm91dGluZSwgMCwgdXhJbmRleCApOw0KKyAgICAgfQ0KKyB9DQorICAgPC9wcmU+DQorICogXGRlZmdyb3VwIHhDb1JvdXRpbmVDcmVhdGUgeENvUm91dGluZUNyZWF0ZQ0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeENvUm91dGluZUNyZWF0ZSggY3JDT1JPVVRJTkVfQ09ERSBweENvUm91dGluZUNvZGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQcmlvcml0eSwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEluZGV4ICk7DQorDQorDQorLyoqDQorICogY3JvdXRpbmUuIGgNCisgKjxwcmU+DQorIHZvaWQgdkNvUm91dGluZVNjaGVkdWxlKCB2b2lkICk7PC9wcmU+DQorICoNCisgKiBSdW4gYSBjby1yb3V0aW5lLg0KKyAqDQorICogdkNvUm91dGluZVNjaGVkdWxlKCkgZXhlY3V0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgY28tcm91dGluZSB0aGF0IGlzIGFibGUNCisgKiB0byBydW4uICBUaGUgY28tcm91dGluZSB3aWxsIGV4ZWN1dGUgdW50aWwgaXQgZWl0aGVyIGJsb2NrcywgeWllbGRzIG9yIGlzDQorICogcHJlZW1wdGVkIGJ5IGEgdGFzay4gIENvLXJvdXRpbmVzIGV4ZWN1dGUgY29vcGVyYXRpdmVseSBzbyBvbmUNCisgKiBjby1yb3V0aW5lIGNhbm5vdCBiZSBwcmVlbXB0ZWQgYnkgYW5vdGhlciwgYnV0IGNhbiBiZSBwcmVlbXB0ZWQgYnkgYSB0YXNrLg0KKyAqDQorICogSWYgYW4gYXBwbGljYXRpb24gY29tcHJpc2VzIG9mIGJvdGggdGFza3MgYW5kIGNvLXJvdXRpbmVzIHRoZW4NCisgKiB2Q29Sb3V0aW5lU2NoZWR1bGUgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBpZGxlIHRhc2sgKGluIGFuIGlkbGUgdGFzaw0KKyAqIGhvb2spLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBUaGlzIGlkbGUgdGFzayBob29rIHdpbGwgc2NoZWR1bGUgYSBjby1yb3V0aW5lIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuDQorIC8vIFRoZSByZXN0IG9mIHRoZSBpZGxlIHRhc2sgd2lsbCBleGVjdXRlIGJldHdlZW4gY28tcm91dGluZSBjYWxscy4NCisgdm9pZCB2QXBwbGljYXRpb25JZGxlSG9vayggdm9pZCApDQorIHsNCisJdkNvUm91dGluZVNjaGVkdWxlKCk7DQorIH0NCisNCisgLy8gQWx0ZXJuYXRpdmVseSwgaWYgeW91IGRvIG5vdCByZXF1aXJlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBpZGxlIHRhc2sgdG8NCisgLy8gZXhlY3V0ZSwgdGhlIGlkbGUgdGFzayBob29rIGNhbiBjYWxsIHZDb1JvdXRpbmVTY2hlZHVsZXIoKSB3aXRoaW4gYW4NCisgLy8gaW5maW5pdGUgbG9vcC4NCisgdm9pZCB2QXBwbGljYXRpb25JZGxlSG9vayggdm9pZCApDQorIHsNCisgICAgZm9yKCA7OyApDQorICAgIHsNCisgICAgICAgIHZDb1JvdXRpbmVTY2hlZHVsZSgpOw0KKyAgICB9DQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHZDb1JvdXRpbmVTY2hlZHVsZSB2Q29Sb3V0aW5lU2NoZWR1bGUNCisgKiBcaW5ncm91cCBUYXNrcw0KKyAqLw0KK3ZvaWQgdkNvUm91dGluZVNjaGVkdWxlKCB2b2lkICk7DQorDQorLyoqDQorICogY3JvdXRpbmUuIGgNCisgKiA8cHJlPg0KKyBjclNUQVJUKCB4Q29Sb3V0aW5lSGFuZGxlIHhIYW5kbGUgKTs8L3ByZT4NCisgKg0KKyAqIFRoaXMgbWFjcm8gTVVTVCBhbHdheXMgYmUgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBhIGNvLXJvdXRpbmUgZnVuY3Rpb24uDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIC8vIENvLXJvdXRpbmUgdG8gYmUgY3JlYXRlZC4NCisgdm9pZCB2QUNvUm91dGluZSggeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5kZXggKQ0KKyB7DQorIC8vIFZhcmlhYmxlcyBpbiBjby1yb3V0aW5lcyBtdXN0IGJlIGRlY2xhcmVkIHN0YXRpYyBpZiB0aGV5IG11c3QgbWFpbnRhaW4gdmFsdWUgYWNyb3NzIGEgYmxvY2tpbmcgY2FsbC4NCisgc3RhdGljIGxvbmcgdWxBVmFyaWFibGU7DQorDQorICAgICAvLyBNdXN0IHN0YXJ0IGV2ZXJ5IGNvLXJvdXRpbmUgd2l0aCBhIGNhbGwgdG8gY3JTVEFSVCgpOw0KKyAgICAgY3JTVEFSVCggeEhhbmRsZSApOw0KKw0KKyAgICAgZm9yKCA7OyApDQorICAgICB7DQorICAgICAgICAgIC8vIENvLXJvdXRpbmUgZnVuY3Rpb25hbGl0eSBnb2VzIGhlcmUuDQorICAgICB9DQorDQorICAgICAvLyBNdXN0IGVuZCBldmVyeSBjby1yb3V0aW5lIHdpdGggYSBjYWxsIHRvIGNyRU5EKCk7DQorICAgICBjckVORCgpOw0KKyB9PC9wcmU+DQorICogXGRlZmdyb3VwIGNyU1RBUlQgY3JTVEFSVA0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQorI2RlZmluZSBjclNUQVJUKCBweENSQ0IgKSBzd2l0Y2goICggKCBjb3JDUkNCICogKSggcHhDUkNCICkgKS0+dXhTdGF0ZSApIHsgY2FzZSAwOg0KKw0KKy8qKg0KKyAqIGNyb3V0aW5lLiBoDQorICogPHByZT4NCisgY3JFTkQoKTs8L3ByZT4NCisgKg0KKyAqIFRoaXMgbWFjcm8gTVVTVCBhbHdheXMgYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBjby1yb3V0aW5lIGZ1bmN0aW9uLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBDby1yb3V0aW5lIHRvIGJlIGNyZWF0ZWQuDQorIHZvaWQgdkFDb1JvdXRpbmUoIHhDb1JvdXRpbmVIYW5kbGUgeEhhbmRsZSwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEluZGV4ICkNCisgew0KKyAvLyBWYXJpYWJsZXMgaW4gY28tcm91dGluZXMgbXVzdCBiZSBkZWNsYXJlZCBzdGF0aWMgaWYgdGhleSBtdXN0IG1haW50YWluIHZhbHVlIGFjcm9zcyBhIGJsb2NraW5nIGNhbGwuDQorIHN0YXRpYyBsb25nIHVsQVZhcmlhYmxlOw0KKw0KKyAgICAgLy8gTXVzdCBzdGFydCBldmVyeSBjby1yb3V0aW5lIHdpdGggYSBjYWxsIHRvIGNyU1RBUlQoKTsNCisgICAgIGNyU1RBUlQoIHhIYW5kbGUgKTsNCisNCisgICAgIGZvciggOzsgKQ0KKyAgICAgew0KKyAgICAgICAgICAvLyBDby1yb3V0aW5lIGZ1bmN0aW9uYWxpdHkgZ29lcyBoZXJlLg0KKyAgICAgfQ0KKw0KKyAgICAgLy8gTXVzdCBlbmQgZXZlcnkgY28tcm91dGluZSB3aXRoIGEgY2FsbCB0byBjckVORCgpOw0KKyAgICAgY3JFTkQoKTsNCisgfTwvcHJlPg0KKyAqIFxkZWZncm91cCBjclNUQVJUIGNyU1RBUlQNCisgKiBcaW5ncm91cCBUYXNrcw0KKyAqLw0KKyNkZWZpbmUgY3JFTkQoKSB9DQorDQorLyoNCisgKiBUaGVzZSBtYWNyb3MgYXJlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGNvLXJvdXRpbmUgaW1wbGVtZW50YXRpb24NCisgKiBvbmx5LiAgVGhlIG1hY3JvcyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgYnkgYXBwbGljYXRpb24gd3JpdGVycy4NCisgKi8NCisjZGVmaW5lIGNyU0VUX1NUQVRFMCggeEhhbmRsZSApICggKCBjb3JDUkNCICogKSggeEhhbmRsZSApICktPnV4U3RhdGUgPSAoX19MSU5FX18gKiAyKTsgcmV0dXJuOyBjYXNlIChfX0xJTkVfXyAqIDIpOg0KKyNkZWZpbmUgY3JTRVRfU1RBVEUxKCB4SGFuZGxlICkgKCAoIGNvckNSQ0IgKiApKCB4SGFuZGxlICkgKS0+dXhTdGF0ZSA9ICgoX19MSU5FX18gKiAyKSsxKTsgcmV0dXJuOyBjYXNlICgoX19MSU5FX18gKiAyKSsxKToNCisNCisvKioNCisgKiBjcm91dGluZS4gaA0KKyAqPHByZT4NCisgY3JERUxBWSggeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9EZWxheSApOzwvcHJlPg0KKyAqDQorICogRGVsYXkgYSBjby1yb3V0aW5lIGZvciBhIGZpeGVkIHBlcmlvZCBvZiB0aW1lLg0KKyAqDQorICogY3JERUxBWSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgY28tcm91dGluZSBmdW5jdGlvbiBpdHNlbGYgLSBub3QNCisgKiBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgY28tcm91dGluZSBmdW5jdGlvbi4gIFRoaXMgaXMgYmVjYXVzZQ0KKyAqIGNvLXJvdXRpbmVzIGRvIG5vdCBtYWludGFpbiB0aGVpciBvd24gc3RhY2suDQorICoNCisgKiBAcGFyYW0geEhhbmRsZSBUaGUgaGFuZGxlIG9mIHRoZSBjby1yb3V0aW5lIHRvIGRlbGF5LiAgVGhpcyBpcyB0aGUgeEhhbmRsZQ0KKyAqIHBhcmFtZXRlciBvZiB0aGUgY28tcm91dGluZSBmdW5jdGlvbi4NCisgKg0KKyAqIEBwYXJhbSB4VGlja1RvRGVsYXkgVGhlIG51bWJlciBvZiB0aWNrcyB0aGF0IHRoZSBjby1yb3V0aW5lIHNob3VsZCBkZWxheQ0KKyAqIGZvci4gIFRoZSBhY3R1YWwgYW1vdW50IG9mIHRpbWUgdGhpcyBlcXVhdGVzIHRvIGlzIGRlZmluZWQgYnkNCisgKiBjb25maWdUSUNLX1JBVEVfSFogKHNldCBpbiBGcmVlUlRPU0NvbmZpZy5oKS4gIFRoZSBjb25zdGFudCBwb3J0VElDS19SQVRFX01TDQorICogY2FuIGJlIHVzZWQgdG8gY29udmVydCB0aWNrcyB0byBtaWxsaXNlY29uZHMuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIC8vIENvLXJvdXRpbmUgdG8gYmUgY3JlYXRlZC4NCisgdm9pZCB2QUNvUm91dGluZSggeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5kZXggKQ0KKyB7DQorIC8vIFZhcmlhYmxlcyBpbiBjby1yb3V0aW5lcyBtdXN0IGJlIGRlY2xhcmVkIHN0YXRpYyBpZiB0aGV5IG11c3QgbWFpbnRhaW4gdmFsdWUgYWNyb3NzIGEgYmxvY2tpbmcgY2FsbC4NCisgLy8gVGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3IgY29uc3QgdmFyaWFibGVzLg0KKyAvLyBXZSBhcmUgdG8gZGVsYXkgZm9yIDIwMG1zLg0KKyBzdGF0aWMgY29uc3QgeFRpY2tUeXBlIHhEZWxheVRpbWUgPSAyMDAgLyBwb3J0VElDS19SQVRFX01TOw0KKw0KKyAgICAgLy8gTXVzdCBzdGFydCBldmVyeSBjby1yb3V0aW5lIHdpdGggYSBjYWxsIHRvIGNyU1RBUlQoKTsNCisgICAgIGNyU1RBUlQoIHhIYW5kbGUgKTsNCisNCisgICAgIGZvciggOzsgKQ0KKyAgICAgew0KKyAgICAgICAgLy8gRGVsYXkgZm9yIDIwMG1zLg0KKyAgICAgICAgY3JERUxBWSggeEhhbmRsZSwgeERlbGF5VGltZSApOw0KKw0KKyAgICAgICAgLy8gRG8gc29tZXRoaW5nIGhlcmUuDQorICAgICB9DQorDQorICAgICAvLyBNdXN0IGVuZCBldmVyeSBjby1yb3V0aW5lIHdpdGggYSBjYWxsIHRvIGNyRU5EKCk7DQorICAgICBjckVORCgpOw0KKyB9PC9wcmU+DQorICogXGRlZmdyb3VwIGNyREVMQVkgY3JERUxBWQ0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQorI2RlZmluZSBjckRFTEFZKCB4SGFuZGxlLCB4VGlja3NUb0RlbGF5ICkJCQkJCQkJCQkJCQlcDQorCWlmKCAoIHhUaWNrc1RvRGVsYXkgKSA+IDAgKQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXZDb1JvdXRpbmVBZGRUb0RlbGF5ZWRMaXN0KCAoIHhUaWNrc1RvRGVsYXkgKSwgTlVMTCApOwkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWNyU0VUX1NUQVRFMCggKCB4SGFuZGxlICkgKTsNCisNCisvKioNCisgKiA8cHJlPg0KKyBjclFVRVVFX1NFTkQoDQorICAgICAgICAgICAgICAgICAgeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLA0KKyAgICAgICAgICAgICAgICAgIHZvaWQgKnB2SXRlbVRvUXVldWUsDQorICAgICAgICAgICAgICAgICAgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwNCisgICAgICAgICAgICAgICAgICBwb3J0QkFTRV9UWVBFICpweFJlc3VsdA0KKyAgICAgICAgICAgICApPC9wcmU+DQorICoNCisgKiBUaGUgbWFjcm8ncyBjclFVRVVFX1NFTkQoKSBhbmQgY3JRVUVVRV9SRUNFSVZFKCkgYXJlIHRoZSBjby1yb3V0aW5lDQorICogZXF1aXZhbGVudCB0byB0aGUgeFF1ZXVlU2VuZCgpIGFuZCB4UXVldWVSZWNlaXZlKCkgZnVuY3Rpb25zIHVzZWQgYnkgdGFza3MuDQorICoNCisgKiBjclFVRVVFX1NFTkQgYW5kIGNyUVVFVUVfUkVDRUlWRSBjYW4gb25seSBiZSB1c2VkIGZyb20gYSBjby1yb3V0aW5lIHdoZXJlYXMNCisgKiB4UXVldWVTZW5kKCkgYW5kIHhRdWV1ZVJlY2VpdmUoKSBjYW4gb25seSBiZSB1c2VkIGZyb20gdGFza3MuDQorICoNCisgKiBjclFVRVVFX1NFTkQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvLXJvdXRpbmUgZnVuY3Rpb24gaXRzZWxmIC0gbm90DQorICogZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGNvLXJvdXRpbmUgZnVuY3Rpb24uICBUaGlzIGlzIGJlY2F1c2UNCisgKiBjby1yb3V0aW5lcyBkbyBub3QgbWFpbnRhaW4gdGhlaXIgb3duIHN0YWNrLg0KKyAqDQorICogU2VlIHRoZSBjby1yb3V0aW5lIHNlY3Rpb24gb2YgdGhlIFdFQiBkb2N1bWVudGF0aW9uIGZvciBpbmZvcm1hdGlvbiBvbg0KKyAqIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRhc2tzIGFuZCBjby1yb3V0aW5lcyBhbmQgYmV0d2VlbiBJU1IncyBhbmQNCisgKiBjby1yb3V0aW5lcy4NCisgKg0KKyAqIEBwYXJhbSB4SGFuZGxlIFRoZSBoYW5kbGUgb2YgdGhlIGNhbGxpbmcgY28tcm91dGluZS4gIFRoaXMgaXMgdGhlIHhIYW5kbGUNCisgKiBwYXJhbWV0ZXIgb2YgdGhlIGNvLXJvdXRpbmUgZnVuY3Rpb24uDQorICoNCisgKiBAcGFyYW0gcHhRdWV1ZSBUaGUgaGFuZGxlIG9mIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIHBvc3RlZC4NCisgKiBUaGUgaGFuZGxlIGlzIG9idGFpbmVkIGFzIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgcXVldWUgaXMgY3JlYXRlZCB1c2luZw0KKyAqIHRoZSB4UXVldWVDcmVhdGUoKSBBUEkgZnVuY3Rpb24uDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgYmVpbmcgcG9zdGVkIG9udG8gdGhlIHF1ZXVlLg0KKyAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZWFjaCBxdWV1ZWQgaXRlbSBpcyBzcGVjaWZpZWQgd2hlbiB0aGUgcXVldWUgaXMNCisgKiBjcmVhdGVkLiAgVGhpcyBudW1iZXIgb2YgYnl0ZXMgaXMgY29waWVkIGZyb20gcHZJdGVtVG9RdWV1ZSBpbnRvIHRoZSBxdWV1ZQ0KKyAqIGl0c2VsZi4NCisgKg0KKyAqIEBwYXJhbSB4VGlja1RvRGVsYXkgVGhlIG51bWJlciBvZiB0aWNrcyB0aGF0IHRoZSBjby1yb3V0aW5lIHNob3VsZCBibG9jaw0KKyAqIHRvIHdhaXQgZm9yIHNwYWNlIHRvIGJlY29tZSBhdmFpbGFibGUgb24gdGhlIHF1ZXVlLCBzaG91bGQgc3BhY2Ugbm90IGJlDQorICogYXZhaWxhYmxlIGltbWVkaWF0ZWx5LiBUaGUgYWN0dWFsIGFtb3VudCBvZiB0aW1lIHRoaXMgZXF1YXRlcyB0byBpcyBkZWZpbmVkDQorICogYnkgY29uZmlnVElDS19SQVRFX0haIChzZXQgaW4gRnJlZVJUT1NDb25maWcuaCkuICBUaGUgY29uc3RhbnQNCisgKiBwb3J0VElDS19SQVRFX01TIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGlja3MgdG8gbWlsbGlzZWNvbmRzIChzZWUgZXhhbXBsZQ0KKyAqIGJlbG93KS4NCisgKg0KKyAqIEBwYXJhbSBweFJlc3VsdCBUaGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBweFJlc3VsdCB3aWxsIGJlIHNldCB0byBwZFBBU1MgaWYNCisgKiBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgcG9zdGVkIG9udG8gdGhlIHF1ZXVlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzZXQgdG8gYW4NCisgKiBlcnJvciBkZWZpbmVkIHdpdGhpbiBQcm9qRGVmcy5oLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBDby1yb3V0aW5lIGZ1bmN0aW9uIHRoYXQgYmxvY2tzIGZvciBhIGZpeGVkIHBlcmlvZCB0aGVuIHBvc3RzIGEgbnVtYmVyIG9udG8NCisgLy8gYSBxdWV1ZS4NCisgc3RhdGljIHZvaWQgcHJ2Q29Sb3V0aW5lRmxhc2hUYXNrKCB4Q29Sb3V0aW5lSGFuZGxlIHhIYW5kbGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJbmRleCApDQorIHsNCisgLy8gVmFyaWFibGVzIGluIGNvLXJvdXRpbmVzIG11c3QgYmUgZGVjbGFyZWQgc3RhdGljIGlmIHRoZXkgbXVzdCBtYWludGFpbiB2YWx1ZSBhY3Jvc3MgYSBibG9ja2luZyBjYWxsLg0KKyBzdGF0aWMgcG9ydEJBU0VfVFlQRSB4TnVtYmVyVG9Qb3N0ID0gMDsNCisgc3RhdGljIHBvcnRCQVNFX1RZUEUgeFJlc3VsdDsNCisNCisgICAgLy8gQ28tcm91dGluZXMgbXVzdCBiZWdpbiB3aXRoIGEgY2FsbCB0byBjclNUQVJUKCkuDQorICAgIGNyU1RBUlQoIHhIYW5kbGUgKTsNCisNCisgICAgZm9yKCA7OyApDQorICAgIHsNCisgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGUgcXVldWUgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLg0KKyAgICAgICAgY3JRVUVVRV9TRU5EKCB4SGFuZGxlLCB4Q29Sb3V0aW5lUXVldWUsICZ4TnVtYmVyVG9Qb3N0LCBOT19ERUxBWSwgJnhSZXN1bHQgKTsNCisNCisgICAgICAgIGlmKCB4UmVzdWx0ICE9IHBkUEFTUyApDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gVGhlIG1lc3NhZ2Ugd2FzIG5vdCBwb3N0ZWQhDQorICAgICAgICB9DQorDQorICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIG51bWJlciB0byBiZSBwb3N0ZWQgb250byB0aGUgcXVldWUuDQorICAgICAgICB4TnVtYmVyVG9Qb3N0Kys7DQorDQorICAgICAgICAvLyBEZWxheSBmb3IgMTAwIHRpY2tzLg0KKyAgICAgICAgY3JERUxBWSggeEhhbmRsZSwgMTAwICk7DQorICAgIH0NCisNCisgICAgLy8gQ28tcm91dGluZXMgbXVzdCBlbmQgd2l0aCBhIGNhbGwgdG8gY3JFTkQoKS4NCisgICAgY3JFTkQoKTsNCisgfTwvcHJlPg0KKyAqIFxkZWZncm91cCBjclFVRVVFX1NFTkQgY3JRVUVVRV9TRU5EDQorICogXGluZ3JvdXAgVGFza3MNCisgKi8NCisjZGVmaW5lIGNyUVVFVUVfU0VORCggeEhhbmRsZSwgcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeFRpY2tzVG9XYWl0LCBweFJlc3VsdCApCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkqKCBweFJlc3VsdCApID0geFF1ZXVlQ1JTZW5kKCAoIHB4UXVldWUpICwgKCBwdkl0ZW1Ub1F1ZXVlKSAsICggeFRpY2tzVG9XYWl0ICkgKTsJXA0KKwlpZiggKiggcHhSZXN1bHQgKSA9PSBlcnJRVUVVRV9CTE9DS0VEICkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQljclNFVF9TVEFURTAoICggeEhhbmRsZSApICk7CQkJCQkJCQkJCQkJCVwNCisJCSpweFJlc3VsdCA9IHhRdWV1ZUNSU2VuZCggKCBweFF1ZXVlICksICggcHZJdGVtVG9RdWV1ZSApLCAwICk7CQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCAqcHhSZXN1bHQgPT0gZXJyUVVFVUVfWUlFTEQgKQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQljclNFVF9TVEFURTEoICggeEhhbmRsZSApICk7CQkJCQkJCQkJCQkJCVwNCisJCSpweFJlc3VsdCA9IHBkUEFTUzsJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKioNCisgKiBjcm91dGluZS4gaA0KKyAqIDxwcmU+DQorICBjclFVRVVFX1JFQ0VJVkUoDQorICAgICAgICAgICAgICAgICAgICAgeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLA0KKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB2QnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgICAgIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsDQorICAgICAgICAgICAgICAgICAgICAgcG9ydEJBU0VfVFlQRSAqcHhSZXN1bHQNCisgICAgICAgICAgICAgICAgICk8L3ByZT4NCisgKg0KKyAqIFRoZSBtYWNybydzIGNyUVVFVUVfU0VORCgpIGFuZCBjclFVRVVFX1JFQ0VJVkUoKSBhcmUgdGhlIGNvLXJvdXRpbmUNCisgKiBlcXVpdmFsZW50IHRvIHRoZSB4UXVldWVTZW5kKCkgYW5kIHhRdWV1ZVJlY2VpdmUoKSBmdW5jdGlvbnMgdXNlZCBieSB0YXNrcy4NCisgKg0KKyAqIGNyUVVFVUVfU0VORCBhbmQgY3JRVUVVRV9SRUNFSVZFIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSBhIGNvLXJvdXRpbmUgd2hlcmVhcw0KKyAqIHhRdWV1ZVNlbmQoKSBhbmQgeFF1ZXVlUmVjZWl2ZSgpIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0YXNrcy4NCisgKg0KKyAqIGNyUVVFVUVfUkVDRUlWRSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgY28tcm91dGluZSBmdW5jdGlvbiBpdHNlbGYgLSBub3QNCisgKiBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgY28tcm91dGluZSBmdW5jdGlvbi4gIFRoaXMgaXMgYmVjYXVzZQ0KKyAqIGNvLXJvdXRpbmVzIGRvIG5vdCBtYWludGFpbiB0aGVpciBvd24gc3RhY2suDQorICoNCisgKiBTZWUgdGhlIGNvLXJvdXRpbmUgc2VjdGlvbiBvZiB0aGUgV0VCIGRvY3VtZW50YXRpb24gZm9yIGluZm9ybWF0aW9uIG9uDQorICogcGFzc2luZyBkYXRhIGJldHdlZW4gdGFza3MgYW5kIGNvLXJvdXRpbmVzIGFuZCBiZXR3ZWVuIElTUidzIGFuZA0KKyAqIGNvLXJvdXRpbmVzLg0KKyAqDQorICogQHBhcmFtIHhIYW5kbGUgVGhlIGhhbmRsZSBvZiB0aGUgY2FsbGluZyBjby1yb3V0aW5lLiAgVGhpcyBpcyB0aGUgeEhhbmRsZQ0KKyAqIHBhcmFtZXRlciBvZiB0aGUgY28tcm91dGluZSBmdW5jdGlvbi4NCisgKg0KKyAqIEBwYXJhbSBweFF1ZXVlIFRoZSBoYW5kbGUgb2YgdGhlIHF1ZXVlIGZyb20gd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4NCisgKiBUaGUgaGFuZGxlIGlzIG9idGFpbmVkIGFzIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgcXVldWUgaXMgY3JlYXRlZCB1c2luZw0KKyAqIHRoZSB4UXVldWVDcmVhdGUoKSBBUEkgZnVuY3Rpb24uDQorICoNCisgKiBAcGFyYW0gcHZCdWZmZXIgVGhlIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSByZWNlaXZlZCBpdGVtIGlzIHRvIGJlIGNvcGllZC4NCisgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGVhY2ggcXVldWVkIGl0ZW0gaXMgc3BlY2lmaWVkIHdoZW4gdGhlIHF1ZXVlIGlzDQorICogY3JlYXRlZC4gIFRoaXMgbnVtYmVyIG9mIGJ5dGVzIGlzIGNvcGllZCBpbnRvIHB2QnVmZmVyLg0KKyAqDQorICogQHBhcmFtIHhUaWNrVG9EZWxheSBUaGUgbnVtYmVyIG9mIHRpY2tzIHRoYXQgdGhlIGNvLXJvdXRpbmUgc2hvdWxkIGJsb2NrDQorICogdG8gd2FpdCBmb3IgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlIGZyb20gdGhlIHF1ZXVlLCBzaG91bGQgZGF0YSBub3QgYmUNCisgKiBhdmFpbGFibGUgaW1tZWRpYXRlbHkuIFRoZSBhY3R1YWwgYW1vdW50IG9mIHRpbWUgdGhpcyBlcXVhdGVzIHRvIGlzIGRlZmluZWQNCisgKiBieSBjb25maWdUSUNLX1JBVEVfSFogKHNldCBpbiBGcmVlUlRPU0NvbmZpZy5oKS4gIFRoZSBjb25zdGFudA0KKyAqIHBvcnRUSUNLX1JBVEVfTVMgY2FuIGJlIHVzZWQgdG8gY29udmVydCB0aWNrcyB0byBtaWxsaXNlY29uZHMgKHNlZSB0aGUNCisgKiBjclFVRVVFX1NFTkQgZXhhbXBsZSkuDQorICoNCisgKiBAcGFyYW0gcHhSZXN1bHQgVGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgcHhSZXN1bHQgd2lsbCBiZSBzZXQgdG8gcGRQQVNTIGlmDQorICogZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIHRoZSBxdWV1ZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgc2V0IHRvDQorICogYW4gZXJyb3IgY29kZSBhcyBkZWZpbmVkIHdpdGhpbiBQcm9qRGVmcy5oLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgPHByZT4NCisgLy8gQSBjby1yb3V0aW5lIHJlY2VpdmVzIHRoZSBudW1iZXIgb2YgYW4gTEVEIHRvIGZsYXNoIGZyb20gYSBxdWV1ZS4gIEl0DQorIC8vIGJsb2NrcyBvbiB0aGUgcXVldWUgdW50aWwgdGhlIG51bWJlciBpcyByZWNlaXZlZC4NCisgc3RhdGljIHZvaWQgcHJ2Q29Sb3V0aW5lRmxhc2hXb3JrVGFzayggeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5kZXggKQ0KKyB7DQorIC8vIFZhcmlhYmxlcyBpbiBjby1yb3V0aW5lcyBtdXN0IGJlIGRlY2xhcmVkIHN0YXRpYyBpZiB0aGV5IG11c3QgbWFpbnRhaW4gdmFsdWUgYWNyb3NzIGEgYmxvY2tpbmcgY2FsbC4NCisgc3RhdGljIHBvcnRCQVNFX1RZUEUgeFJlc3VsdDsNCisgc3RhdGljIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhMRURUb0ZsYXNoOw0KKw0KKyAgICAvLyBBbGwgY28tcm91dGluZXMgbXVzdCBzdGFydCB3aXRoIGEgY2FsbCB0byBjclNUQVJUKCkuDQorICAgIGNyU1RBUlQoIHhIYW5kbGUgKTsNCisNCisgICAgZm9yKCA7OyApDQorICAgIHsNCisgICAgICAgIC8vIFdhaXQgZm9yIGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZSBvbiB0aGUgcXVldWUuDQorICAgICAgICBjclFVRVVFX1JFQ0VJVkUoIHhIYW5kbGUsIHhDb1JvdXRpbmVRdWV1ZSwgJnV4TEVEVG9GbGFzaCwgcG9ydE1BWF9ERUxBWSwgJnhSZXN1bHQgKTsNCisNCisgICAgICAgIGlmKCB4UmVzdWx0ID09IHBkUEFTUyApDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gV2UgcmVjZWl2ZWQgdGhlIExFRCB0byBmbGFzaCAtIGZsYXNoIGl0IQ0KKyAgICAgICAgICAgIHZQYXJUZXN0VG9nZ2xlTEVEKCB1eExFRFRvRmxhc2ggKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBjckVORCgpOw0KKyB9PC9wcmU+DQorICogXGRlZmdyb3VwIGNyUVVFVUVfUkVDRUlWRSBjclFVRVVFX1JFQ0VJVkUNCisgKiBcaW5ncm91cCBUYXNrcw0KKyAqLw0KKyNkZWZpbmUgY3JRVUVVRV9SRUNFSVZFKCB4SGFuZGxlLCBweFF1ZXVlLCBwdkJ1ZmZlciwgeFRpY2tzVG9XYWl0LCBweFJlc3VsdCApCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkqKCBweFJlc3VsdCApID0geFF1ZXVlQ1JSZWNlaXZlKCAoIHB4UXVldWUpICwgKCBwdkJ1ZmZlciApLCAoIHhUaWNrc1RvV2FpdCApICk7CQlcDQorCWlmKCAqKCBweFJlc3VsdCApID09IGVyclFVRVVFX0JMT0NLRUQgKSAJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCWNyU0VUX1NUQVRFMCggKCB4SGFuZGxlICkgKTsJCQkJCQkJCQkJCQkJXA0KKwkJKiggcHhSZXN1bHQgKSA9IHhRdWV1ZUNSUmVjZWl2ZSggKCBweFF1ZXVlKSAsICggcHZCdWZmZXIgKSwgMCApOwkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCAqKCBweFJlc3VsdCApID09IGVyclFVRVVFX1lJRUxEICkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQljclNFVF9TVEFURTEoICggeEhhbmRsZSApICk7CQkJCQkJCQkJCQkJCVwNCisJCSooIHB4UmVzdWx0ICkgPSBwZFBBU1M7CQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKioNCisgKiBjcm91dGluZS4gaA0KKyAqIDxwcmU+DQorICBjclFVRVVFX1NFTkRfRlJPTV9JU1IoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdkl0ZW1Ub1F1ZXVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QkFTRV9UWVBFIHhDb1JvdXRpbmVQcmV2aW91c2x5V29rZW4NCisgICAgICAgICAgICAgICAgICAgICAgICk8L3ByZT4NCisgKg0KKyAqIFRoZSBtYWNybydzIGNyUVVFVUVfU0VORF9GUk9NX0lTUigpIGFuZCBjclFVRVVFX1JFQ0VJVkVfRlJPTV9JU1IoKSBhcmUgdGhlDQorICogY28tcm91dGluZSBlcXVpdmFsZW50IHRvIHRoZSB4UXVldWVTZW5kRnJvbUlTUigpIGFuZCB4UXVldWVSZWNlaXZlRnJvbUlTUigpDQorICogZnVuY3Rpb25zIHVzZWQgYnkgdGFza3MuDQorICoNCisgKiBjclFVRVVFX1NFTkRfRlJPTV9JU1IoKSBhbmQgY3JRVUVVRV9SRUNFSVZFX0ZST01fSVNSKCkgY2FuIG9ubHkgYmUgdXNlZCB0bw0KKyAqIHBhc3MgZGF0YSBiZXR3ZWVuIGEgY28tcm91dGluZSBhbmQgYW5kIElTUiwgd2hlcmVhcyB4UXVldWVTZW5kRnJvbUlTUigpIGFuZA0KKyAqIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCkgY2FuIG9ubHkgYmUgdXNlZCB0byBwYXNzIGRhdGEgYmV0d2VlbiBhIHRhc2sgYW5kIGFuZA0KKyAqIElTUi4NCisgKg0KKyAqIGNyUVVFVUVfU0VORF9GUk9NX0lTUiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhbiBJU1IgdG8gc2VuZCBkYXRhIHRvIGEgcXVldWUNCisgKiB0aGF0IGlzIGJlaW5nIHVzZWQgZnJvbSB3aXRoaW4gYSBjby1yb3V0aW5lLg0KKyAqDQorICogU2VlIHRoZSBjby1yb3V0aW5lIHNlY3Rpb24gb2YgdGhlIFdFQiBkb2N1bWVudGF0aW9uIGZvciBpbmZvcm1hdGlvbiBvbg0KKyAqIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRhc2tzIGFuZCBjby1yb3V0aW5lcyBhbmQgYmV0d2VlbiBJU1IncyBhbmQNCisgKiBjby1yb3V0aW5lcy4NCisgKg0KKyAqIEBwYXJhbSB4UXVldWUgVGhlIGhhbmRsZSB0byB0aGUgcXVldWUgb24gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUgcG9zdGVkLg0KKyAqDQorICogQHBhcmFtIHB2SXRlbVRvUXVldWUgQSBwb2ludGVyIHRvIHRoZSBpdGVtIHRoYXQgaXMgdG8gYmUgcGxhY2VkIG9uIHRoZQ0KKyAqIHF1ZXVlLiAgVGhlIHNpemUgb2YgdGhlIGl0ZW1zIHRoZSBxdWV1ZSB3aWxsIGhvbGQgd2FzIGRlZmluZWQgd2hlbiB0aGUNCisgKiBxdWV1ZSB3YXMgY3JlYXRlZCwgc28gdGhpcyBtYW55IGJ5dGVzIHdpbGwgYmUgY29waWVkIGZyb20gcHZJdGVtVG9RdWV1ZQ0KKyAqIGludG8gdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYS4NCisgKg0KKyAqIEBwYXJhbSB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuIFRoaXMgaXMgaW5jbHVkZWQgc28gYW4gSVNSIGNhbiBwb3N0IG9udG8NCisgKiB0aGUgc2FtZSBxdWV1ZSBtdWx0aXBsZSB0aW1lcyBmcm9tIGEgc2luZ2xlIGludGVycnVwdC4gIFRoZSBmaXJzdCBjYWxsDQorICogc2hvdWxkIGFsd2F5cyBwYXNzIGluIHBkRkFMU0UuICBTdWJzZXF1ZW50IGNhbGxzIHNob3VsZCBwYXNzIGluDQorICogdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiBhIGNvLXJvdXRpbmUgd2FzIHdva2VuIGJ5IHBvc3Rpbmcgb250byB0aGUgcXVldWUuICBUaGlzIGlzDQorICogdXNlZCBieSB0aGUgSVNSIHRvIGRldGVybWluZSBpZiBhIGNvbnRleHQgc3dpdGNoIG1heSBiZSByZXF1aXJlZCBmb2xsb3dpbmcNCisgKiB0aGUgSVNSLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgPHByZT4NCisgLy8gQSBjby1yb3V0aW5lIHRoYXQgYmxvY2tzIG9uIGEgcXVldWUgd2FpdGluZyBmb3IgY2hhcmFjdGVycyB0byBiZSByZWNlaXZlZC4NCisgc3RhdGljIHZvaWQgdlJlY2VpdmluZ0NvUm91dGluZSggeENvUm91dGluZUhhbmRsZSB4SGFuZGxlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5kZXggKQ0KKyB7DQorIGNoYXIgY1J4ZWRDaGFyOw0KKyBwb3J0QkFTRV9UWVBFIHhSZXN1bHQ7DQorDQorICAgICAvLyBBbGwgY28tcm91dGluZXMgbXVzdCBzdGFydCB3aXRoIGEgY2FsbCB0byBjclNUQVJUKCkuDQorICAgICBjclNUQVJUKCB4SGFuZGxlICk7DQorDQorICAgICBmb3IoIDs7ICkNCisgICAgIHsNCisgICAgICAgICAvLyBXYWl0IGZvciBkYXRhIHRvIGJlY29tZSBhdmFpbGFibGUgb24gdGhlIHF1ZXVlLiAgVGhpcyBhc3N1bWVzIHRoZQ0KKyAgICAgICAgIC8vIHF1ZXVlIHhDb21tc1J4UXVldWUgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIQ0KKyAgICAgICAgIGNyUVVFVUVfUkVDRUlWRSggeEhhbmRsZSwgeENvbW1zUnhRdWV1ZSwgJnV4TEVEVG9GbGFzaCwgcG9ydE1BWF9ERUxBWSwgJnhSZXN1bHQgKTsNCisNCisgICAgICAgICAvLyBXYXMgYSBjaGFyYWN0ZXIgcmVjZWl2ZWQ/DQorICAgICAgICAgaWYoIHhSZXN1bHQgPT0gcGRQQVNTICkNCisgICAgICAgICB7DQorICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGNoYXJhY3RlciBoZXJlLg0KKyAgICAgICAgIH0NCisgICAgIH0NCisNCisgICAgIC8vIEFsbCBjby1yb3V0aW5lcyBtdXN0IGVuZCB3aXRoIGEgY2FsbCB0byBjckVORCgpLg0KKyAgICAgY3JFTkQoKTsNCisgfQ0KKw0KKyAvLyBBbiBJU1IgdGhhdCB1c2VzIGEgcXVldWUgdG8gc2VuZCBjaGFyYWN0ZXJzIHJlY2VpdmVkIG9uIGEgc2VyaWFsIHBvcnQgdG8NCisgLy8gYSBjby1yb3V0aW5lLg0KKyB2b2lkIHZVQVJUX0lTUiggdm9pZCApDQorIHsNCisgY2hhciBjUnhlZENoYXI7DQorIHBvcnRCQVNFX1RZUEUgeENSV29rZW5CeVBvc3QgPSBwZEZBTFNFOw0KKw0KKyAgICAgLy8gV2UgbG9vcCBhcm91bmQgcmVhZGluZyBjaGFyYWN0ZXJzIHVudGlsIHRoZXJlIGFyZSBub25lIGxlZnQgaW4gdGhlIFVBUlQuDQorICAgICB3aGlsZSggVUFSVF9SWF9SRUdfTk9UX0VNUFRZKCkgKQ0KKyAgICAgew0KKyAgICAgICAgIC8vIE9idGFpbiB0aGUgY2hhcmFjdGVyIGZyb20gdGhlIFVBUlQuDQorICAgICAgICAgY1J4ZWRDaGFyID0gVUFSVF9SWF9SRUc7DQorDQorICAgICAgICAgLy8gUG9zdCB0aGUgY2hhcmFjdGVyIG9udG8gYSBxdWV1ZS4gIHhDUldva2VuQnlQb3N0IHdpbGwgYmUgcGRGQUxTRQ0KKyAgICAgICAgIC8vIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCB0aGUgbG9vcC4gIElmIHRoZSBwb3N0IGNhdXNlcyBhIGNvLXJvdXRpbmUNCisgICAgICAgICAvLyB0byBiZSB3b2tlbiAodW5ibG9ja2VkKSB0aGVuIHhDUldva2VuQnlQb3N0IHdpbGwgYmUgc2V0IHRvIHBkVFJVRS4NCisgICAgICAgICAvLyBJbiB0aGlzIG1hbm5lciB3ZSBjYW4gZW5zdXJlIHRoYXQgaWYgbW9yZSB0aGFuIG9uZSBjby1yb3V0aW5lIGlzDQorICAgICAgICAgLy8gYmxvY2tlZCBvbiB0aGUgcXVldWUgb25seSBvbmUgaXMgd29rZW4gYnkgdGhpcyBJU1Igbm8gbWF0dGVyIGhvdw0KKyAgICAgICAgIC8vIG1hbnkgY2hhcmFjdGVycyBhcmUgcG9zdGVkIHRvIHRoZSBxdWV1ZS4NCisgICAgICAgICB4Q1JXb2tlbkJ5UG9zdCA9IGNyUVVFVUVfU0VORF9GUk9NX0lTUiggeENvbW1zUnhRdWV1ZSwgJmNSeGVkQ2hhciwgeENSV29rZW5CeVBvc3QgKTsNCisgICAgIH0NCisgfTwvcHJlPg0KKyAqIFxkZWZncm91cCBjclFVRVVFX1NFTkRfRlJPTV9JU1IgY3JRVUVVRV9TRU5EX0ZST01fSVNSDQorICogXGluZ3JvdXAgVGFza3MNCisgKi8NCisjZGVmaW5lIGNyUVVFVUVfU0VORF9GUk9NX0lTUiggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeENvUm91dGluZVByZXZpb3VzbHlXb2tlbiApIHhRdWV1ZUNSU2VuZEZyb21JU1IoICggcHhRdWV1ZSApLCAoIHB2SXRlbVRvUXVldWUgKSwgKCB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuICkgKQ0KKw0KKw0KKy8qKg0KKyAqIGNyb3V0aW5lLiBoDQorICogPHByZT4NCisgIGNyUVVFVUVfU0VORF9GUk9NX0lTUigNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFF1ZXVlSGFuZGxlIHB4UXVldWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB2QnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QkFTRV9UWVBFICogcHhDb1JvdXRpbmVXb2tlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgKTwvcHJlPg0KKyAqDQorICogVGhlIG1hY3JvJ3MgY3JRVUVVRV9TRU5EX0ZST01fSVNSKCkgYW5kIGNyUVVFVUVfUkVDRUlWRV9GUk9NX0lTUigpIGFyZSB0aGUNCisgKiBjby1yb3V0aW5lIGVxdWl2YWxlbnQgdG8gdGhlIHhRdWV1ZVNlbmRGcm9tSVNSKCkgYW5kIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCkNCisgKiBmdW5jdGlvbnMgdXNlZCBieSB0YXNrcy4NCisgKg0KKyAqIGNyUVVFVUVfU0VORF9GUk9NX0lTUigpIGFuZCBjclFVRVVFX1JFQ0VJVkVfRlJPTV9JU1IoKSBjYW4gb25seSBiZSB1c2VkIHRvDQorICogcGFzcyBkYXRhIGJldHdlZW4gYSBjby1yb3V0aW5lIGFuZCBhbmQgSVNSLCB3aGVyZWFzIHhRdWV1ZVNlbmRGcm9tSVNSKCkgYW5kDQorICogeFF1ZXVlUmVjZWl2ZUZyb21JU1IoKSBjYW4gb25seSBiZSB1c2VkIHRvIHBhc3MgZGF0YSBiZXR3ZWVuIGEgdGFzayBhbmQgYW5kDQorICogSVNSLg0KKyAqDQorICogY3JRVUVVRV9SRUNFSVZFX0ZST01fSVNSIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIGFuIElTUiB0byByZWNlaXZlIGRhdGENCisgKiBmcm9tIGEgcXVldWUgdGhhdCBpcyBiZWluZyB1c2VkIGZyb20gd2l0aGluIGEgY28tcm91dGluZSAoYSBjby1yb3V0aW5lDQorICogcG9zdGVkIHRvIHRoZSBxdWV1ZSkuDQorICoNCisgKiBTZWUgdGhlIGNvLXJvdXRpbmUgc2VjdGlvbiBvZiB0aGUgV0VCIGRvY3VtZW50YXRpb24gZm9yIGluZm9ybWF0aW9uIG9uDQorICogcGFzc2luZyBkYXRhIGJldHdlZW4gdGFza3MgYW5kIGNvLXJvdXRpbmVzIGFuZCBiZXR3ZWVuIElTUidzIGFuZA0KKyAqIGNvLXJvdXRpbmVzLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZCdWZmZXIgQSBwb2ludGVyIHRvIGEgYnVmZmVyIGludG8gd2hpY2ggdGhlIHJlY2VpdmVkIGl0ZW0gd2lsbCBiZQ0KKyAqIHBsYWNlZC4gIFRoZSBzaXplIG9mIHRoZSBpdGVtcyB0aGUgcXVldWUgd2lsbCBob2xkIHdhcyBkZWZpbmVkIHdoZW4gdGhlDQorICogcXVldWUgd2FzIGNyZWF0ZWQsIHNvIHRoaXMgbWFueSBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIHRoZSBxdWV1ZSBpbnRvDQorICogcHZCdWZmZXIuDQorICoNCisgKiBAcGFyYW0gcHhDb1JvdXRpbmVXb2tlbiBBIGNvLXJvdXRpbmUgbWF5IGJlIGJsb2NrZWQgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lDQorICogYXZhaWxhYmxlIG9uIHRoZSBxdWV1ZS4gIElmIGNyUVVFVUVfUkVDRUlWRV9GUk9NX0lTUiBjYXVzZXMgc3VjaCBhDQorICogY28tcm91dGluZSB0byB1bmJsb2NrICpweENvUm91dGluZVdva2VuIHdpbGwgZ2V0IHNldCB0byBwZFRSVUUsIG90aGVyd2lzZQ0KKyAqICpweENvUm91dGluZVdva2VuIHdpbGwgcmVtYWluIHVuY2hhbmdlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGFuIGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcm9tIHRoZSBxdWV1ZSwgb3RoZXJ3aXNlDQorICogcGRGQUxTRS4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIC8vIEEgY28tcm91dGluZSB0aGF0IHBvc3RzIGEgY2hhcmFjdGVyIHRvIGEgcXVldWUgdGhlbiBibG9ja3MgZm9yIGEgZml4ZWQNCisgLy8gcGVyaW9kLiAgVGhlIGNoYXJhY3RlciBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUuDQorIHN0YXRpYyB2b2lkIHZTZW5kaW5nQ29Sb3V0aW5lKCB4Q29Sb3V0aW5lSGFuZGxlIHhIYW5kbGUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJbmRleCApDQorIHsNCisgLy8gY0NoYXIgaG9sZHMgaXRzIHZhbHVlIHdoaWxlIHRoaXMgY28tcm91dGluZSBpcyBibG9ja2VkIGFuZCBtdXN0IHRoZXJlZm9yZQ0KKyAvLyBiZSBkZWNsYXJlZCBzdGF0aWMuDQorIHN0YXRpYyBjaGFyIGNDaGFyVG9UeCA9ICdhJzsNCisgcG9ydEJBU0VfVFlQRSB4UmVzdWx0Ow0KKw0KKyAgICAgLy8gQWxsIGNvLXJvdXRpbmVzIG11c3Qgc3RhcnQgd2l0aCBhIGNhbGwgdG8gY3JTVEFSVCgpLg0KKyAgICAgY3JTVEFSVCggeEhhbmRsZSApOw0KKw0KKyAgICAgZm9yKCA7OyApDQorICAgICB7DQorICAgICAgICAgLy8gU2VuZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gdGhlIHF1ZXVlLg0KKyAgICAgICAgIGNyUVVFVUVfU0VORCggeEhhbmRsZSwgeENvUm91dGluZVF1ZXVlLCAmY0NoYXJUb1R4LCBOT19ERUxBWSwgJnhSZXN1bHQgKTsNCisNCisgICAgICAgICBpZiggeFJlc3VsdCA9PSBwZFBBU1MgKQ0KKyAgICAgICAgIHsNCisgICAgICAgICAgICAgLy8gVGhlIGNoYXJhY3RlciB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZCB0byB0aGUgcXVldWUuDQorICAgICAgICAgfQ0KKwkJIGVsc2UNCisJCSB7DQorCQkJLy8gQ291bGQgbm90IHBvc3QgdGhlIGNoYXJhY3RlciB0byB0aGUgcXVldWUuDQorCQkgfQ0KKw0KKyAgICAgICAgIC8vIEVuYWJsZSB0aGUgVUFSVCBUeCBpbnRlcnJ1cHQgdG8gY2F1c2UgYW4gaW50ZXJydXB0IGluIHRoaXMNCisJCSAvLyBoeXBvdGhldGljYWwgVUFSVC4gIFRoZSBpbnRlcnJ1cHQgd2lsbCBvYnRhaW4gdGhlIGNoYXJhY3Rlcg0KKwkJIC8vIGZyb20gdGhlIHF1ZXVlIGFuZCBzZW5kIGl0Lg0KKwkJIEVOQUJMRV9SWF9JTlRFUlJVUFQoKTsNCisNCisJCSAvLyBJbmNyZW1lbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRoZW4gYmxvY2sgZm9yIGEgZml4ZWQgcGVyaW9kLg0KKwkJIC8vIGNDaGFyVG9UeCB3aWxsIG1haW50YWluIGl0cyB2YWx1ZSBhY3Jvc3MgdGhlIGRlbGF5IGFzIGl0IGlzDQorCQkgLy8gZGVjbGFyZWQgc3RhdGljLg0KKwkJIGNDaGFyVG9UeCsrOw0KKwkJIGlmKCBjQ2hhclRvVHggPiAneCcgKQ0KKwkJIHsNCisJCQljQ2hhclRvVHggPSAnYSc7DQorCQkgfQ0KKwkJIGNyREVMQVkoIDEwMCApOw0KKyAgICAgfQ0KKw0KKyAgICAgLy8gQWxsIGNvLXJvdXRpbmVzIG11c3QgZW5kIHdpdGggYSBjYWxsIHRvIGNyRU5EKCkuDQorICAgICBjckVORCgpOw0KKyB9DQorDQorIC8vIEFuIElTUiB0aGF0IHVzZXMgYSBxdWV1ZSB0byByZWNlaXZlIGNoYXJhY3RlcnMgdG8gc2VuZCBvbiBhIFVBUlQuDQorIHZvaWQgdlVBUlRfSVNSKCB2b2lkICkNCisgew0KKyBjaGFyIGNDaGFyVG9UeDsNCisgcG9ydEJBU0VfVFlQRSB4Q1JXb2tlbkJ5UG9zdCA9IHBkRkFMU0U7DQorDQorICAgICB3aGlsZSggVUFSVF9UWF9SRUdfRU1QVFkoKSApDQorICAgICB7DQorICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBxdWV1ZSB3YWl0aW5nIHRvIGJlIHNlbnQ/DQorCQkgLy8geENSV29rZW5CeVBvc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byBwZFRSVUUgaWYgYSBjby1yb3V0aW5lDQorCQkgLy8gaXMgd29rZW4gYnkgdGhlIHBvc3QgLSBlbnN1cmluZyB0aGF0IG9ubHkgYSBzaW5nbGUgY28tcm91dGluZSBpcw0KKwkJIC8vIHdva2VuIG5vIG1hdHRlciBob3cgbWFueSB0aW1lcyB3ZSBnbyBhcm91bmQgdGhpcyBsb29wLg0KKyAgICAgICAgIGlmKCBjclFVRVVFX1JFQ0VJVkVfRlJPTV9JU1IoIHB4UXVldWUsICZjQ2hhclRvVHgsICZ4Q1JXb2tlbkJ5UG9zdCApICkNCisJCSB7DQorCQkJIFNFTkRfQ0hBUkFDVEVSKCBjQ2hhclRvVHggKTsNCisJCSB9DQorICAgICB9DQorIH08L3ByZT4NCisgKiBcZGVmZ3JvdXAgY3JRVUVVRV9SRUNFSVZFX0ZST01fSVNSIGNyUVVFVUVfUkVDRUlWRV9GUk9NX0lTUg0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQorI2RlZmluZSBjclFVRVVFX1JFQ0VJVkVfRlJPTV9JU1IoIHB4UXVldWUsIHB2QnVmZmVyLCBweENvUm91dGluZVdva2VuICkgeFF1ZXVlQ1JSZWNlaXZlRnJvbUlTUiggKCBweFF1ZXVlICksICggcHZCdWZmZXIgKSwgKCBweENvUm91dGluZVdva2VuICkgKQ0KKw0KKy8qDQorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBjby1yb3V0aW5lIG1hY3JvcyBvbmx5Lg0KKyAqIFRoZSBtYWNybyBuYXR1cmUgb2YgdGhlIGNvLXJvdXRpbmUgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhhdCB0aGUNCisgKiBwcm90b3R5cGUgYXBwZWFycyBoZXJlLiAgVGhlIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBieSBhcHBsaWNhdGlvbg0KKyAqIHdyaXRlcnMuDQorICoNCisgKiBSZW1vdmVzIHRoZSBjdXJyZW50IGNvLXJvdXRpbmUgZnJvbSBpdHMgcmVhZHkgbGlzdCBhbmQgcGxhY2VzIGl0IGluIHRoZQ0KKyAqIGFwcHJvcHJpYXRlIGRlbGF5ZWQgbGlzdC4NCisgKi8NCit2b2lkIHZDb1JvdXRpbmVBZGRUb0RlbGF5ZWRMaXN0KCBwb3J0VGlja1R5cGUgeFRpY2tzVG9EZWxheSwgeExpc3QgKnB4RXZlbnRMaXN0ICk7DQorDQorLyoNCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIHF1ZXVlIGltcGxlbWVudGF0aW9uIG9ubHkuDQorICogVGhlIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBieSBhcHBsaWNhdGlvbiB3cml0ZXJzLg0KKyAqDQorICogUmVtb3ZlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBjby1yb3V0aW5lIGZyb20gdGhlIGV2ZW50IGxpc3QgYW5kIHBsYWNlcyBpdCBpbg0KKyAqIHRoZSBwZW5kaW5nIHJlYWR5IGxpc3QuDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeENvUm91dGluZVJlbW92ZUZyb21FdmVudExpc3QoIGNvbnN0IHhMaXN0ICpweEV2ZW50TGlzdCApOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogQ09fUk9VVElORV9IICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvaW5pdC5oIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMTA5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9pbml0LmgKQEAgLTAsMCArMSwyMSBAQAorCisjaWZuZGVmIF9fRlJFRV9SVE9TX0lOSVRfSAorI2RlZmluZSBfX0ZSRUVfUlRPU19JTklUX0gKKworI2lmbmRlZiBJTkNfRlJFRVJUT1NfSAorCSNlcnJvciAiaW5jbHVkZSBGcmVlUlRPUy5oIiBtdXN0IGFwcGVhciBpbiBzb3VyY2UgZmlsZXMgYmVmb3JlICJpbmNsdWRlIHF1ZXVlLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit2b2lkIHhJbml0UlRPUyh2b2lkKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19GUkVFX1JUT1NfSU5JVF9IICovCisKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL2xpc3QuaCBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ0ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvbGlzdC5oCkBAIC0wLDAgKzEsMzM3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorICogVGhpcyBpcyB0aGUgbGlzdCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIuICBXaGlsZSBpdCBpcyB0YWlsb3JlZA0KKyAqIGhlYXZpbHkgZm9yIHRoZSBzY2hlZHVsZXJzIG5lZWRzLCBpdCBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgdXNlIGJ5DQorICogYXBwbGljYXRpb24gY29kZS4NCisgKg0KKyAqIHhMaXN0cyBjYW4gb25seSBzdG9yZSBwb2ludGVycyB0byB4TGlzdEl0ZW1zLiAgRWFjaCB4TGlzdEl0ZW0gY29udGFpbnMgYQ0KKyAqIG51bWVyaWMgdmFsdWUgKHhJdGVtVmFsdWUpLiAgTW9zdCBvZiB0aGUgdGltZSB0aGUgbGlzdHMgYXJlIHNvcnRlZCBpbg0KKyAqIGRlc2NlbmRpbmcgaXRlbSB2YWx1ZSBvcmRlci4NCisgKg0KKyAqIExpc3RzIGFyZSBjcmVhdGVkIGFscmVhZHkgY29udGFpbmluZyBvbmUgbGlzdCBpdGVtLiAgVGhlIHZhbHVlIG9mIHRoaXMNCisgKiBpdGVtIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHRoYXQgY2FuIGJlIHN0b3JlZCwgaXQgaXMgdGhlcmVmb3JlIGFsd2F5cyBhdA0KKyAqIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGFjdHMgYXMgYSBtYXJrZXIuICBUaGUgbGlzdCBtZW1iZXIgcHhIZWFkIGFsd2F5cw0KKyAqIHBvaW50cyB0byB0aGlzIG1hcmtlciAtIGV2ZW4gdGhvdWdoIGl0IGlzIGF0IHRoZSB0YWlsIG9mIHRoZSBsaXN0LiAgVGhpcw0KKyAqIGlzIGJlY2F1c2UgdGhlIHRhaWwgY29udGFpbnMgYSB3cmFwIGJhY2sgcG9pbnRlciB0byB0aGUgdHJ1ZSBoZWFkIG9mDQorICogdGhlIGxpc3QuDQorICoNCisgKiBJbiBhZGRpdGlvbiB0byBpdCdzIHZhbHVlLCBlYWNoIGxpc3QgaXRlbSBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQNCisgKiBpdGVtIGluIHRoZSBsaXN0IChweE5leHQpLCBhIHBvaW50ZXIgdG8gdGhlIGxpc3QgaXQgaXMgaW4gKHB4Q29udGFpbmVyKQ0KKyAqIGFuZCBhIHBvaW50ZXIgdG8gYmFjayB0byB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgaXQuICBUaGVzZSBsYXRlciB0d28NCisgKiBwb2ludGVycyBhcmUgaW5jbHVkZWQgZm9yIGVmZmljaWVuY3kgb2YgbGlzdCBtYW5pcHVsYXRpb24uICBUaGVyZSBpcw0KKyAqIGVmZmVjdGl2ZWx5IGEgdHdvIHdheSBsaW5rIGJldHdlZW4gdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0IGl0ZW0gYW5kDQorICogdGhlIGxpc3QgaXRlbSBpdHNlbGYuDQorICoNCisgKg0KKyAqIFxwYWdlIExpc3RJbnRyb2R1Y3Rpb24gTGlzdCBJbXBsZW1lbnRhdGlvbg0KKyAqIFxpbmdyb3VwIEZyZWVSVE9TSW50cm8NCisgKi8NCisNCisNCisjaWZuZGVmIExJU1RfSA0KKyNkZWZpbmUgTElTVF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorLyoNCisgKiBEZWZpbml0aW9uIG9mIHRoZSBvbmx5IHR5cGUgb2Ygb2JqZWN0IHRoYXQgYSBsaXN0IGNhbiBjb250YWluLg0KKyAqLw0KK3N0cnVjdCB4TElTVF9JVEVNDQorew0KKwlwb3J0VGlja1R5cGUgeEl0ZW1WYWx1ZTsJCQkJLyo8IFRoZSB2YWx1ZSBiZWluZyBsaXN0ZWQuICBJbiBtb3N0IGNhc2VzIHRoaXMgaXMgdXNlZCB0byBzb3J0IHRoZSBsaXN0IGluIGRlc2NlbmRpbmcgb3JkZXIuICovDQorCXZvbGF0aWxlIHN0cnVjdCB4TElTVF9JVEVNICogcHhOZXh0OwkvKjwgUG9pbnRlciB0byB0aGUgbmV4dCB4TGlzdEl0ZW0gaW4gdGhlIGxpc3QuICovDQorCXZvbGF0aWxlIHN0cnVjdCB4TElTVF9JVEVNICogcHhQcmV2aW91czsvKjwgUG9pbnRlciB0byB0aGUgcHJldmlvdXMgeExpc3RJdGVtIGluIHRoZSBsaXN0LiAqLw0KKwl2b2lkICogcHZPd25lcjsJCQkJCQkJLyo8IFBvaW50ZXIgdG8gdGhlIG9iamVjdCAobm9ybWFsbHkgYSBUQ0IpIHRoYXQgY29udGFpbnMgdGhlIGxpc3QgaXRlbS4gIFRoZXJlIGlzIHRoZXJlZm9yZSBhIHR3byB3YXkgbGluayBiZXR3ZWVuIHRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgbGlzdCBpdGVtIGFuZCB0aGUgbGlzdCBpdGVtIGl0c2VsZi4gKi8NCisJdm9pZCAqIHB2Q29udGFpbmVyOwkJCQkJCS8qPCBQb2ludGVyIHRvIHRoZSBsaXN0IGluIHdoaWNoIHRoaXMgbGlzdCBpdGVtIGlzIHBsYWNlZCAoaWYgYW55KS4gKi8NCit9Ow0KK3R5cGVkZWYgc3RydWN0IHhMSVNUX0lURU0geExpc3RJdGVtOwkJLyogRm9yIHNvbWUgcmVhc29uIGxpbnQgd2FudHMgdGhpcyBhcyB0d28gc2VwYXJhdGUgZGVmaW5pdGlvbnMuICovDQorDQorc3RydWN0IHhNSU5JX0xJU1RfSVRFTQ0KK3sNCisJcG9ydFRpY2tUeXBlIHhJdGVtVmFsdWU7DQorCXZvbGF0aWxlIHN0cnVjdCB4TElTVF9JVEVNICpweE5leHQ7DQorCXZvbGF0aWxlIHN0cnVjdCB4TElTVF9JVEVNICpweFByZXZpb3VzOw0KK307DQordHlwZWRlZiBzdHJ1Y3QgeE1JTklfTElTVF9JVEVNIHhNaW5pTGlzdEl0ZW07DQorDQorLyoNCisgKiBEZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIHF1ZXVlIHVzZWQgYnkgdGhlIHNjaGVkdWxlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCB4TElTVA0KK3sNCisJdm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eE51bWJlck9mSXRlbXM7DQorCXZvbGF0aWxlIHhMaXN0SXRlbSAqIHB4SW5kZXg7CQkJLyo8IFVzZWQgdG8gd2FsayB0aHJvdWdoIHRoZSBsaXN0LiAgUG9pbnRzIHRvIHRoZSBsYXN0IGl0ZW0gcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHB2TGlzdEdldE93bmVyT2ZOZXh0RW50cnkgKCkuICovDQorCXZvbGF0aWxlIHhNaW5pTGlzdEl0ZW0geExpc3RFbmQ7CQkvKjwgTGlzdCBpdGVtIHRoYXQgY29udGFpbnMgdGhlIG1heGltdW0gcG9zc2libGUgaXRlbSB2YWx1ZSBtZWFuaW5nIGl0IGlzIGFsd2F5cyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBpcyB0aGVyZWZvcmUgdXNlZCBhcyBhIG1hcmtlci4gKi8NCit9IHhMaXN0Ow0KKw0KKy8qDQorICogQWNjZXNzIG1hY3JvIHRvIHNldCB0aGUgb3duZXIgb2YgYSBsaXN0IGl0ZW0uICBUaGUgb3duZXIgb2YgYSBsaXN0IGl0ZW0NCisgKiBpcyB0aGUgb2JqZWN0ICh1c3VhbGx5IGEgVENCKSB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IGl0ZW0uDQorICoNCisgKiBccGFnZSBsaXN0U0VUX0xJU1RfSVRFTV9PV05FUiBsaXN0U0VUX0xJU1RfSVRFTV9PV05FUg0KKyAqIFxpbmdyb3VwIExpbmtlZExpc3QNCisgKi8NCisjZGVmaW5lIGxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCBweExpc3RJdGVtLCBweE93bmVyICkJCSggcHhMaXN0SXRlbSApLT5wdk93bmVyID0gKCB2b2lkICogKSAoIHB4T3duZXIgKQ0KKw0KKy8qDQorICogQWNjZXNzIG1hY3JvIHRvIGdldCB0aGUgb3duZXIgb2YgYSBsaXN0IGl0ZW0uICBUaGUgb3duZXIgb2YgYSBsaXN0IGl0ZW0NCisgKiBpcyB0aGUgb2JqZWN0ICh1c3VhbGx5IGEgVENCKSB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IGl0ZW0uDQorICoNCisgKiBccGFnZSBsaXN0U0VUX0xJU1RfSVRFTV9PV05FUiBsaXN0U0VUX0xJU1RfSVRFTV9PV05FUg0KKyAqIFxpbmdyb3VwIExpbmtlZExpc3QNCisgKi8NCisjZGVmaW5lIGxpc3RHRVRfTElTVF9JVEVNX09XTkVSKCBweExpc3RJdGVtICkJCSggcHhMaXN0SXRlbSApLT5wdk93bmVyDQorDQorLyoNCisgKiBBY2Nlc3MgbWFjcm8gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgbGlzdCBpdGVtLiAgSW4gbW9zdCBjYXNlcyB0aGUgdmFsdWUgaXMNCisgKiB1c2VkIHRvIHNvcnQgdGhlIGxpc3QgaW4gZGVzY2VuZGluZyBvcmRlci4NCisgKg0KKyAqIFxwYWdlIGxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFIGxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFDQorICogXGluZ3JvdXAgTGlua2VkTGlzdA0KKyAqLw0KKyNkZWZpbmUgbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoIHB4TGlzdEl0ZW0sIHhWYWx1ZSApCQkoIHB4TGlzdEl0ZW0gKS0+eEl0ZW1WYWx1ZSA9ICggeFZhbHVlICkNCisNCisvKg0KKyAqIEFjY2VzcyBtYWNybyB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlIGxpc3QgaXRlbS4gIFRoZSB2YWx1ZSBjYW4NCisgKiByZXByZXNlbnQgYW55dGhpbmcgLSBmb3IgZXhhbXBsZSBhIHRoZSBwcmlvcml0eSBvZiBhIHRhc2ssIG9yIHRoZSB0aW1lIGF0DQorICogd2hpY2ggYSB0YXNrIHNob3VsZCBiZSB1bmJsb2NrZWQuDQorICoNCisgKiBccGFnZSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRQ0KKyAqIFxpbmdyb3VwIExpbmtlZExpc3QNCisgKi8NCisjZGVmaW5lIGxpc3RHRVRfTElTVF9JVEVNX1ZBTFVFKCBweExpc3RJdGVtICkJCQkJKCAoIHB4TGlzdEl0ZW0gKS0+eEl0ZW1WYWx1ZSApDQorDQorLyoNCisgKiBBY2Nlc3MgbWFjcm8gdGhlIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgbGlzdCBpdGVtIGF0IHRoZSBoZWFkIG9mIGEgZ2l2ZW4NCisgKiBsaXN0Lg0KKyAqDQorICogXHBhZ2UgbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUgbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUNCisgKiBcaW5ncm91cCBMaW5rZWRMaXN0DQorICovDQorI2RlZmluZSBsaXN0R0VUX0lURU1fVkFMVUVfT0ZfSEVBRF9FTlRSWSggcHhMaXN0ICkJCQkoICgmKCAoIHB4TGlzdCApLT54TGlzdEVuZCApKS0+cHhOZXh0LT54SXRlbVZhbHVlICkNCisNCisvKg0KKyAqIEFjY2VzcyBtYWNybyB0byBkZXRlcm1pbmUgaWYgYSBsaXN0IGNvbnRhaW5zIGFueSBpdGVtcy4gIFRoZSBtYWNybyB3aWxsDQorICogb25seSBoYXZlIHRoZSB2YWx1ZSB0cnVlIGlmIHRoZSBsaXN0IGlzIGVtcHR5Lg0KKyAqDQorICogXHBhZ2UgbGlzdExJU1RfSVNfRU1QVFkgbGlzdExJU1RfSVNfRU1QVFkNCisgKiBcaW5ncm91cCBMaW5rZWRMaXN0DQorICovDQorI2RlZmluZSBsaXN0TElTVF9JU19FTVBUWSggcHhMaXN0ICkJCQkJKCAoIHB4TGlzdCApLT51eE51bWJlck9mSXRlbXMgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorDQorLyoNCisgKiBBY2Nlc3MgbWFjcm8gdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QuDQorICovDQorI2RlZmluZSBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggcHhMaXN0ICkJCSggKCBweExpc3QgKS0+dXhOdW1iZXJPZkl0ZW1zICkNCisNCisvKg0KKyAqIEFjY2VzcyBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIG93bmVyIG9mIHRoZSBuZXh0IGVudHJ5IGluIGEgbGlzdC4NCisgKg0KKyAqIFRoZSBsaXN0IG1lbWJlciBweEluZGV4IGlzIHVzZWQgdG8gd2FsayB0aHJvdWdoIGEgbGlzdC4gIENhbGxpbmcNCisgKiBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkgaW5jcmVtZW50cyBweEluZGV4IHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QNCisgKiBhbmQgcmV0dXJucyB0aGF0IGVudHJpZXMgcHhPd25lciBwYXJhbWV0ZXIuICBVc2luZyBtdWx0aXBsZSBjYWxscyB0byB0aGlzDQorICogZnVuY3Rpb24gaXQgaXMgdGhlcmVmb3JlIHBvc3NpYmxlIHRvIG1vdmUgdGhyb3VnaCBldmVyeSBpdGVtIGNvbnRhaW5lZCBpbg0KKyAqIGEgbGlzdC4NCisgKg0KKyAqIFRoZSBweE93bmVyIHBhcmFtZXRlciBvZiBhIGxpc3QgaXRlbSBpcyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0aGF0IG93bnMNCisgKiB0aGUgbGlzdCBpdGVtLiAgSW4gdGhlIHNjaGVkdWxlciB0aGlzIGlzIG5vcm1hbGx5IGEgdGFzayBjb250cm9sIGJsb2NrLg0KKyAqIFRoZSBweE93bmVyIHBhcmFtZXRlciBlZmZlY3RpdmVseSBjcmVhdGVzIGEgdHdvIHdheSBsaW5rIGJldHdlZW4gdGhlIGxpc3QNCisgKiBpdGVtIGFuZCBpdHMgb3duZXIuDQorICoNCisgKiBAcGFyYW0gcHhMaXN0IFRoZSBsaXN0IGZyb20gd2hpY2ggdGhlIG5leHQgaXRlbSBvd25lciBpcyB0byBiZSByZXR1cm5lZC4NCisgKg0KKyAqIFxwYWdlIGxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkNCisgKiBcaW5ncm91cCBMaW5rZWRMaXN0DQorICovDQorI2RlZmluZSBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoIHB4VENCLCBweExpc3QgKQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit4TGlzdCAqIGNvbnN0IHB4Q29uc3RMaXN0ID0gKCBweExpc3QgKTsJCQkJCQkJCQkJCQkJXA0KKwkvKiBJbmNyZW1lbnQgdGhlIGluZGV4IHRvIHRoZSBuZXh0IGl0ZW0gYW5kIHJldHVybiB0aGUgaXRlbSwgZW5zdXJpbmcgKi8JCQlcDQorCS8qIHdlIGRvbid0IHJldHVybiB0aGUgbWFya2VyIHVzZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gICovCQkJCQkJXA0KKwkoIHB4Q29uc3RMaXN0ICktPnB4SW5kZXggPSAoIHB4Q29uc3RMaXN0ICktPnB4SW5kZXgtPnB4TmV4dDsJCQkJCQlcDQorCWlmKCAoIHB4Q29uc3RMaXN0ICktPnB4SW5kZXggPT0gKCB4TGlzdEl0ZW0gKiApICYoICggcHhDb25zdExpc3QgKS0+eExpc3RFbmQgKSApCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSggcHhDb25zdExpc3QgKS0+cHhJbmRleCA9ICggcHhDb25zdExpc3QgKS0+cHhJbmRleC0+cHhOZXh0OwkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHB4VENCICkgPSAoIHB4Q29uc3RMaXN0ICktPnB4SW5kZXgtPnB2T3duZXI7CQkJCQkJCQkJCVwNCit9DQorDQorDQorLyoNCisgKiBBY2Nlc3MgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBvd25lciBvZiB0aGUgZmlyc3QgZW50cnkgaW4gYSBsaXN0LiAgTGlzdHMNCisgKiBhcmUgbm9ybWFsbHkgc29ydGVkIGluIGFzY2VuZGluZyBpdGVtIHZhbHVlIG9yZGVyLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBweE93bmVyIG1lbWJlciBvZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4NCisgKiBUaGUgcHhPd25lciBwYXJhbWV0ZXIgb2YgYSBsaXN0IGl0ZW0gaXMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgdGhhdCBvd25zDQorICogdGhlIGxpc3QgaXRlbS4gIEluIHRoZSBzY2hlZHVsZXIgdGhpcyBpcyBub3JtYWxseSBhIHRhc2sgY29udHJvbCBibG9jay4NCisgKiBUaGUgcHhPd25lciBwYXJhbWV0ZXIgZWZmZWN0aXZlbHkgY3JlYXRlcyBhIHR3byB3YXkgbGluayBiZXR3ZWVuIHRoZSBsaXN0DQorICogaXRlbSBhbmQgaXRzIG93bmVyLg0KKyAqDQorICogQHBhcmFtIHB4TGlzdCBUaGUgbGlzdCBmcm9tIHdoaWNoIHRoZSBvd25lciBvZiB0aGUgaGVhZCBpdGVtIGlzIHRvIGJlDQorICogcmV0dXJuZWQuDQorICoNCisgKiBccGFnZSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZDQorICogXGluZ3JvdXAgTGlua2VkTGlzdA0KKyAqLw0KKyNkZWZpbmUgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweExpc3QgKSAgKCAoJiggKCBweExpc3QgKS0+eExpc3RFbmQgKSktPnB4TmV4dC0+cHZPd25lciApDQorDQorLyoNCisgKiBDaGVjayB0byBzZWUgaWYgYSBsaXN0IGl0ZW0gaXMgd2l0aGluIGEgbGlzdC4gIFRoZSBsaXN0IGl0ZW0gbWFpbnRhaW5zIGENCisgKiAiY29udGFpbmVyIiBwb2ludGVyIHRoYXQgcG9pbnRzIHRvIHRoZSBsaXN0IGl0IGlzIGluLiAgQWxsIHRoaXMgbWFjcm8gZG9lcw0KKyAqIGlzIGNoZWNrIHRvIHNlZSBpZiB0aGUgY29udGFpbmVyIGFuZCB0aGUgbGlzdCBtYXRjaC4NCisgKg0KKyAqIEBwYXJhbSBweExpc3QgVGhlIGxpc3Qgd2Ugd2FudCB0byBrbm93IGlmIHRoZSBsaXN0IGl0ZW0gaXMgd2l0aGluLg0KKyAqIEBwYXJhbSBweExpc3RJdGVtIFRoZSBsaXN0IGl0ZW0gd2Ugd2FudCB0byBrbm93IGlmIGlzIGluIHRoZSBsaXN0Lg0KKyAqIEByZXR1cm4gcGRUUlVFIGlzIHRoZSBsaXN0IGl0ZW0gaXMgaW4gdGhlIGxpc3QsIG90aGVyd2lzZSBwZEZBTFNFLg0KKyAqIHBvaW50ZXIgYWdhaW5zdA0KKyAqLw0KKyNkZWZpbmUgbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oIHB4TGlzdCwgcHhMaXN0SXRlbSApICggKCBweExpc3RJdGVtICktPnB2Q29udGFpbmVyID09ICggdm9pZCAqICkgKCBweExpc3QgKSApDQorDQorLyoNCisgKiBUaGlzIHByb3ZpZGVzIGEgY3J1ZGUgbWVhbnMgb2Yga25vd2luZyBpZiBhIGxpc3QgaGFzIGJlZW4gaW5pdGlhbGlzZWQsIGFzDQorICogcHhMaXN0LT54TGlzdEVuZC54SXRlbVZhbHVlIGlzIHNldCB0byBwb3J0TUFYX0RFTEFZIGJ5IHRoZSB2TGlzdEluaXRpYWxpc2UoKQ0KKyAqIGZ1bmN0aW9uLg0KKyAqLw0KKyNkZWZpbmUgbGlzdExJU1RfSVNfSU5JVElBTElTRUQoIHB4TGlzdCApICggKCBweExpc3QgKS0+eExpc3RFbmQueEl0ZW1WYWx1ZSA9PSBwb3J0TUFYX0RFTEFZICkNCisNCisvKg0KKyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhIGxpc3QgaXMgdXNlZCEgIFRoaXMgaW5pdGlhbGlzZXMgYWxsIHRoZSBtZW1iZXJzDQorICogb2YgdGhlIGxpc3Qgc3RydWN0dXJlIGFuZCBpbnNlcnRzIHRoZSB4TGlzdEVuZCBpdGVtIGludG8gdGhlIGxpc3QgYXMgYQ0KKyAqIG1hcmtlciB0byB0aGUgYmFjayBvZiB0aGUgbGlzdC4NCisgKg0KKyAqIEBwYXJhbSBweExpc3QgUG9pbnRlciB0byB0aGUgbGlzdCBiZWluZyBpbml0aWFsaXNlZC4NCisgKg0KKyAqIFxwYWdlIHZMaXN0SW5pdGlhbGlzZSB2TGlzdEluaXRpYWxpc2UNCisgKiBcaW5ncm91cCBMaW5rZWRMaXN0DQorICovDQordm9pZCB2TGlzdEluaXRpYWxpc2UoIHhMaXN0ICpweExpc3QgKTsNCisNCisvKg0KKyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhIGxpc3QgaXRlbSBpcyB1c2VkLiAgVGhpcyBzZXRzIHRoZSBsaXN0IGNvbnRhaW5lciB0bw0KKyAqIG51bGwgc28gdGhlIGl0ZW0gZG9lcyBub3QgdGhpbmsgdGhhdCBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIGxpc3QuDQorICoNCisgKiBAcGFyYW0gcHhJdGVtIFBvaW50ZXIgdG8gdGhlIGxpc3QgaXRlbSBiZWluZyBpbml0aWFsaXNlZC4NCisgKg0KKyAqIFxwYWdlIHZMaXN0SW5pdGlhbGlzZUl0ZW0gdkxpc3RJbml0aWFsaXNlSXRlbQ0KKyAqIFxpbmdyb3VwIExpbmtlZExpc3QNCisgKi8NCit2b2lkIHZMaXN0SW5pdGlhbGlzZUl0ZW0oIHhMaXN0SXRlbSAqcHhJdGVtICk7DQorDQorLyoNCisgKiBJbnNlcnQgYSBsaXN0IGl0ZW0gaW50byBhIGxpc3QuICBUaGUgaXRlbSB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGxpc3QgaW4NCisgKiBhIHBvc2l0aW9uIGRldGVybWluZWQgYnkgaXRzIGl0ZW0gdmFsdWUgKGRlc2NlbmRpbmcgaXRlbSB2YWx1ZSBvcmRlcikuDQorICoNCisgKiBAcGFyYW0gcHhMaXN0IFRoZSBsaXN0IGludG8gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUgaW5zZXJ0ZWQuDQorICoNCisgKiBAcGFyYW0gcHhOZXdMaXN0SXRlbSBUaGUgaXRlbSB0byB0aGF0IGlzIHRvIGJlIHBsYWNlZCBpbiB0aGUgbGlzdC4NCisgKg0KKyAqIFxwYWdlIHZMaXN0SW5zZXJ0IHZMaXN0SW5zZXJ0DQorICogXGluZ3JvdXAgTGlua2VkTGlzdA0KKyAqLw0KK3ZvaWQgdkxpc3RJbnNlcnQoIHhMaXN0ICpweExpc3QsIHhMaXN0SXRlbSAqcHhOZXdMaXN0SXRlbSApOw0KKw0KKy8qDQorICogSW5zZXJ0IGEgbGlzdCBpdGVtIGludG8gYSBsaXN0LiAgVGhlIGl0ZW0gd2lsbCBiZSBpbnNlcnRlZCBpbiBhIHBvc2l0aW9uDQorICogc3VjaCB0aGF0IGl0IHdpbGwgYmUgdGhlIGxhc3QgaXRlbSB3aXRoaW4gdGhlIGxpc3QgcmV0dXJuZWQgYnkgbXVsdGlwbGUNCisgKiBjYWxscyB0byBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkuDQorICoNCisgKiBUaGUgbGlzdCBtZW1iZXIgcHZJbmRleCBpcyB1c2VkIHRvIHdhbGsgdGhyb3VnaCBhIGxpc3QuICBDYWxsaW5nDQorICogbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZIGluY3JlbWVudHMgcHZJbmRleCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBsaXN0Lg0KKyAqIFBsYWNpbmcgYW4gaXRlbSBpbiBhIGxpc3QgdXNpbmcgdkxpc3RJbnNlcnRFbmQgZWZmZWN0aXZlbHkgcGxhY2VzIHRoZSBpdGVtDQorICogaW4gdGhlIGxpc3QgcG9zaXRpb24gcG9pbnRlZCB0byBieSBwdkluZGV4LiAgVGhpcyBtZWFucyB0aGF0IGV2ZXJ5IG90aGVyDQorICogaXRlbSB3aXRoaW4gdGhlIGxpc3Qgd2lsbCBiZSByZXR1cm5lZCBieSBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkgYmVmb3JlDQorICogdGhlIHB2SW5kZXggcGFyYW1ldGVyIGFnYWluIHBvaW50cyB0byB0aGUgaXRlbSBiZWluZyBpbnNlcnRlZC4NCisgKg0KKyAqIEBwYXJhbSBweExpc3QgVGhlIGxpc3QgaW50byB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBpbnNlcnRlZC4NCisgKg0KKyAqIEBwYXJhbSBweE5ld0xpc3RJdGVtIFRoZSBsaXN0IGl0ZW0gdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdC4NCisgKg0KKyAqIFxwYWdlIHZMaXN0SW5zZXJ0RW5kIHZMaXN0SW5zZXJ0RW5kDQorICogXGluZ3JvdXAgTGlua2VkTGlzdA0KKyAqLw0KK3ZvaWQgdkxpc3RJbnNlcnRFbmQoIHhMaXN0ICpweExpc3QsIHhMaXN0SXRlbSAqcHhOZXdMaXN0SXRlbSApOw0KKw0KKy8qDQorICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhIGxpc3QuICBUaGUgbGlzdCBpdGVtIGhhcyBhIHBvaW50ZXIgdG8gdGhlIGxpc3QgdGhhdA0KKyAqIGl0IGlzIGluLCBzbyBvbmx5IHRoZSBsaXN0IGl0ZW0gbmVlZCBiZSBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uDQorICoNCisgKiBAcGFyYW0gdkxpc3RSZW1vdmUgVGhlIGl0ZW0gdG8gYmUgcmVtb3ZlZC4gIFRoZSBpdGVtIHdpbGwgcmVtb3ZlIGl0c2VsZiBmcm9tDQorICogdGhlIGxpc3QgcG9pbnRlZCB0byBieSBpdCdzIHB4Q29udGFpbmVyIHBhcmFtZXRlci4NCisgKg0KKyAqIFxwYWdlIHZMaXN0UmVtb3ZlIHZMaXN0UmVtb3ZlDQorICogXGluZ3JvdXAgTGlua2VkTGlzdA0KKyAqLw0KK3ZvaWQgdkxpc3RSZW1vdmUoIHhMaXN0SXRlbSAqcHhJdGVtVG9SZW1vdmUgKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvbXB1X3dyYXBwZXJzLmggYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9tcHVfd3JhcHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ5YzNkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvbXB1X3dyYXBwZXJzLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBNUFVfV1JBUFBFUlNfSA0KKyNkZWZpbmUgTVBVX1dSQVBQRVJTX0gNCisNCisvKiBUaGlzIGZpbGUgcmVkZWZpbmVzIEFQSSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHRocm91Z2ggYSB3cmFwcGVyIG1hY3JvLCBidXQNCitvbmx5IGZvciBwb3J0cyB0aGF0IGFyZSB1c2luZyB0aGUgTVBVLiAqLw0KKyNpZmRlZiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTDQorDQorCS8qIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHdpbGwgYmUgZGVmaW5lZCB3aGVuIHRoaXMgZmlsZSBpcw0KKwlpbmNsdWRlZCBmcm9tIHF1ZXVlLmMgb3IgdGFzay5jIHRvIHByZXZlbnQgaXQgZnJvbSBoYXZpbmcgYW4gZWZmZWN0IHdpdGhpbg0KKwl0aG9zZSBmaWxlcy4gKi8NCisJI2lmbmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKwkJI2RlZmluZSB4VGFza0dlbmVyaWNDcmVhdGUJCQkJTVBVX3hUYXNrR2VuZXJpY0NyZWF0ZQ0KKwkJI2RlZmluZSB2VGFza0FsbG9jYXRlTVBVUmVnaW9ucwkJCU1QVV92VGFza0FsbG9jYXRlTVBVUmVnaW9ucw0KKwkJI2RlZmluZSB2VGFza0RlbGV0ZQkJCQkJCU1QVV92VGFza0RlbGV0ZQ0KKwkJI2RlZmluZSB2VGFza0RlbGF5VW50aWwJCQkJCU1QVV92VGFza0RlbGF5VW50aWwNCisJCSNkZWZpbmUgdlRhc2tEZWxheQkJCQkJCU1QVV92VGFza0RlbGF5DQorCQkjZGVmaW5lIHV4VGFza1ByaW9yaXR5R2V0CQkJCU1QVV91eFRhc2tQcmlvcml0eUdldA0KKwkJI2RlZmluZSB2VGFza1ByaW9yaXR5U2V0CQkJCU1QVV92VGFza1ByaW9yaXR5U2V0DQorCQkjZGVmaW5lIHZUYXNrU3VzcGVuZAkJCQkJTVBVX3ZUYXNrU3VzcGVuZA0KKwkJI2RlZmluZSB4VGFza0lzVGFza1N1c3BlbmRlZAkJCU1QVV94VGFza0lzVGFza1N1c3BlbmRlZA0KKwkJI2RlZmluZSB2VGFza1Jlc3VtZQkJCQkJCU1QVV92VGFza1Jlc3VtZQ0KKwkJI2RlZmluZSB2VGFza1N1c3BlbmRBbGwJCQkJCU1QVV92VGFza1N1c3BlbmRBbGwNCisJCSNkZWZpbmUgeFRhc2tSZXN1bWVBbGwJCQkJCU1QVV94VGFza1Jlc3VtZUFsbA0KKwkJI2RlZmluZSB4VGFza0dldFRpY2tDb3VudAkJCQlNUFVfeFRhc2tHZXRUaWNrQ291bnQNCisJCSNkZWZpbmUgdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcwkJCU1QVV91eFRhc2tHZXROdW1iZXJPZlRhc2tzDQorCQkjZGVmaW5lIHZUYXNrTGlzdAkJCQkJCU1QVV92VGFza0xpc3QNCisJCSNkZWZpbmUgdlRhc2tHZXRSdW5UaW1lU3RhdHMJCQlNUFVfdlRhc2tHZXRSdW5UaW1lU3RhdHMNCisJCSNkZWZpbmUgdlRhc2tTZXRBcHBsaWNhdGlvblRhc2tUYWcJCU1QVV92VGFza1NldEFwcGxpY2F0aW9uVGFza1RhZw0KKwkJI2RlZmluZSB4VGFza0dldEFwcGxpY2F0aW9uVGFza1RhZwkJTVBVX3hUYXNrR2V0QXBwbGljYXRpb25UYXNrVGFnDQorCQkjZGVmaW5lIHhUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2sJTVBVX3hUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2sNCisJCSNkZWZpbmUgdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrCQlNUFVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrDQorCQkjZGVmaW5lIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUJCU1QVV94VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlDQorCQkjZGVmaW5lIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUJCQlNUFVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZQ0KKw0KKwkJI2RlZmluZSB4UXVldWVHZW5lcmljQ3JlYXRlCQkJCU1QVV94UXVldWVHZW5lcmljQ3JlYXRlDQorCQkjZGVmaW5lIHhRdWV1ZUNyZWF0ZU11dGV4CQkJCU1QVV94UXVldWVDcmVhdGVNdXRleA0KKwkJI2RlZmluZSB4UXVldWVHaXZlTXV0ZXhSZWN1cnNpdmUJCU1QVV94UXVldWVHaXZlTXV0ZXhSZWN1cnNpdmUNCisJCSNkZWZpbmUgeFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlCQlNUFVfeFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlDQorCQkjZGVmaW5lIHhRdWV1ZUNyZWF0ZUNvdW50aW5nU2VtYXBob3JlCU1QVV94UXVldWVDcmVhdGVDb3VudGluZ1NlbWFwaG9yZQ0KKwkJI2RlZmluZSB4UXVldWVHZW5lcmljU2VuZAkJCQlNUFVfeFF1ZXVlR2VuZXJpY1NlbmQNCisJCSNkZWZpbmUgeFF1ZXVlQWx0R2VuZXJpY1NlbmQJCQlNUFVfeFF1ZXVlQWx0R2VuZXJpY1NlbmQNCisJCSNkZWZpbmUgeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUJCQlNUFVfeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUNCisJCSNkZWZpbmUgeFF1ZXVlR2VuZXJpY1JlY2VpdmUJCQlNUFVfeFF1ZXVlR2VuZXJpY1JlY2VpdmUNCisJCSNkZWZpbmUgdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZwkJCU1QVV91eFF1ZXVlTWVzc2FnZXNXYWl0aW5nDQorCQkjZGVmaW5lIHZRdWV1ZURlbGV0ZQkJCQkJTVBVX3ZRdWV1ZURlbGV0ZQ0KKw0KKwkJI2RlZmluZSBwdlBvcnRNYWxsb2MJCQkJCU1QVV9wdlBvcnRNYWxsb2MNCisJCSNkZWZpbmUgdlBvcnRGcmVlCQkJCQkJTVBVX3ZQb3J0RnJlZQ0KKwkJI2RlZmluZSB4UG9ydEdldEZyZWVIZWFwU2l6ZQkJCU1QVV94UG9ydEdldEZyZWVIZWFwU2l6ZQ0KKwkJI2RlZmluZSB2UG9ydEluaXRpYWxpc2VCbG9ja3MJCQlNUFVfdlBvcnRJbml0aWFsaXNlQmxvY2tzDQorDQorCQkjaWYgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDANCisJCQkjZGVmaW5lIHZRdWV1ZUFkZFRvUmVnaXN0cnkJCQkJTVBVX3ZRdWV1ZUFkZFRvUmVnaXN0cnkNCisJCQkjZGVmaW5lIHZRdWV1ZVVucmVnaXN0ZXJRdWV1ZQkJCU1QVV92UXVldWVVbnJlZ2lzdGVyUXVldWUNCisJCSNlbmRpZg0KKw0KKwkJLyogUmVtb3ZlIHRoZSBwcml2aWxlZ2VkIGZ1bmN0aW9uIG1hY3JvLiAqLw0KKwkJI2RlZmluZSBQUklWSUxFR0VEX0ZVTkNUSU9ODQorDQorCSNlbHNlIC8qIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFICovDQorDQorCQkvKiBFbnN1cmUgQVBJIGZ1bmN0aW9ucyBnbyBpbiB0aGUgcHJpdmlsZWdlZCBleGVjdXRpb24gc2VjdGlvbi4gKi8NCisJCSNkZWZpbmUgUFJJVklMRUdFRF9GVU5DVElPTiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJwcml2aWxlZ2VkX2Z1bmN0aW9ucyIpKSkNCisJCSNkZWZpbmUgUFJJVklMRUdFRF9EQVRBIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInByaXZpbGVnZWRfZGF0YSIpKSkNCisgICAgICAgIC8vI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCisNCisJI2VuZGlmIC8qIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFICovDQorDQorI2Vsc2UgLyogcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAqLw0KKw0KKwkjZGVmaW5lIFBSSVZJTEVHRURfRlVOQ1RJT04NCisJI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCisJI2RlZmluZSBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTIDANCisNCisjZW5kaWYgLyogcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAqLw0KKw0KKw0KKyNlbmRpZiAvKiBNUFVfV1JBUFBFUlNfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3BvcnRhYmxlLmggYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9wb3J0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Y2ZiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9wb3J0YWJsZS5oCkBAIC0wLDAgKzEsNDAzIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0YWJsZSBsYXllciBBUEkuICBFYWNoIGZ1bmN0aW9uIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBQT1JUQUJMRV9IDQorI2RlZmluZSBQT1JUQUJMRV9IDQorDQorLyogSW5jbHVkZSB0aGUgbWFjcm8gZmlsZSByZWxldmFudCB0byB0aGUgcG9ydCBiZWluZyB1c2VkLiAqLw0KKw0KKyNpZmRlZiBPUEVOX1dBVENPTV9JTkRVU1RSSUFMX1BDX1BPUlQNCisJI2luY2x1ZGUgIi4uXC4uXFNvdXJjZVxwb3J0YWJsZVxvd2F0Y29tXDE2Yml0ZG9zXHBjXHBvcnRtYWNyby5oIg0KKwl0eXBlZGVmIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhJU1IgKSgpOw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBPUEVOX1dBVENPTV9GTEFTSF9MSVRFXzE4Nl9QT1JUDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcb3dhdGNvbVwxNmJpdGRvc1xmbHNoMTg2XHBvcnRtYWNyby5oIg0KKwl0eXBlZGVmIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhJU1IgKSgpOw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBHQ0NfTUVHQV9BVlINCisJI2luY2x1ZGUgIi4uL3BvcnRhYmxlL0dDQy9BVE1lZ2EzMjMvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIElBUl9NRUdBX0FWUg0KKwkjaW5jbHVkZSAiLi4vcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgTVBMQUJfUElDMjRfUE9SVA0KKwkjaW5jbHVkZSAiLi5cLi5cU291cmNlXHBvcnRhYmxlXE1QTEFCXFBJQzI0X2RzUElDXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBNUExBQl9EU1BJQ19QT1JUDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcTVBMQUJcUElDMjRfZHNQSUNccG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIE1QTEFCX1BJQzE4Rl9QT1JUDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcTVBMQUJcUElDMThGXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBNUExBQl9QSUMzMk1YX1BPUlQNCisJI2luY2x1ZGUgIi4uXC4uXFNvdXJjZVxwb3J0YWJsZVxNUExBQlxQSUMzMk1YXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfRkVEUElDQw0KKwkjaW5jbHVkZSAibGliRnJlZVJUT1MvSW5jbHVkZS9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgU0RDQ19DWUdOQUwNCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9TRENDL0N5Z25hbC9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgR0NDX0FSTTcNCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBHQ0NfQVJNN19FQ0xJUFNFDQorCSNpbmNsdWRlICJwb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgUk9XTEVZX0xQQzIzeHgNCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBJQVJfTVNQNDMwDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcSUFSXE1TUDQzMFxwb3J0bWFjcm8uaCIJDQorI2VuZGlmDQorCQ0KKyNpZmRlZiBHQ0NfTVNQNDMwDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvR0NDL01TUDQzMEY0NDkvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIFJPV0xFWV9NU1A0MzANCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgQVJNN19MUEMyMXh4X0tFSUxfUlZEUw0KKwkjaW5jbHVkZSAiLi5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNN19MUEMyMXh4XHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBTQU03X0dDQw0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgU0FNN19JQVINCisJI2luY2x1ZGUgIi4uXC4uXFNvdXJjZVxwb3J0YWJsZVxJQVJcQXRtZWxTQU03UzY0XHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBTQU05WEVfSUFSDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcSUFSXEF0bWVsU0FNOVhFXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBMUEMyMDAwX0lBUg0KKwkjaW5jbHVkZSAiLi5cLi5cU291cmNlXHBvcnRhYmxlXElBUlxMUEMyMDAwXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBTVFI3MVhfSUFSDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcSUFSXFNUUjcxeFxwb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgU1RSNzVYX0lBUg0KKwkjaW5jbHVkZSAiLi5cLi5cU291cmNlXHBvcnRhYmxlXElBUlxTVFI3NXhccG9ydG1hY3JvLmgiDQorI2VuZGlmDQorCQ0KKyNpZmRlZiBTVFI3NVhfR0NDDQorCSNpbmNsdWRlICIuLlwuLlxTb3VyY2VccG9ydGFibGVcR0NDXFNUUjc1eFxwb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgU1RSOTFYX0lBUg0KKwkjaW5jbHVkZSAiLi5cLi5cU291cmNlXHBvcnRhYmxlXElBUlxTVFI5MXhccG9ydG1hY3JvLmgiDQorI2VuZGlmDQorCQ0KKyNpZmRlZiBHQ0NfSDhTDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvR0NDL0g4UzIzMjkvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIEdDQ19BVDkxRlI0MDAwOA0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBSVkRTX0FSTUNNM19MTTNTMTAyDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk1fQ00zL3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBHQ0NfQVJNQ00zX0xNM1MxMDINCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNMy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgR0NDX0FSTUNNMw0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zL3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBJQVJfQVJNX0NNMw0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBJQVJfQVJNQ00zX0xNDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTMvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorCQ0KKyNpZmRlZiBIQ1MxMl9DT0RFX1dBUlJJT1INCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9IQ1MxMi9wb3J0bWFjcm8uaCINCisjZW5kaWYJDQorDQorI2lmZGVmIE1JQ1JPQkxBWkVfR0NDDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIFRFUk5fRUUNCisJI2luY2x1ZGUgIi4uXC4uXFNvdXJjZVxwb3J0YWJsZVxQYXJhZGlnbVxUZXJuX0VFXHNtYWxsXHBvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBHQ0NfSENTMTINCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIEdDQ19NQ0Y1MjM1DQorICAgICNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIENPTERGSVJFX1YyX0dDQw0KKwkjaW5jbHVkZSAiLi4vLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgQ09MREZJUkVfVjJfQ09ERVdBUlJJT1INCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgR0NDX1BQQzQwNQ0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRtYWNyby5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBHQ0NfUFBDNDQwDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIF8xNkZYX1NPRlRVTkUNCisJI2luY2x1ZGUgIi4uXC4uXFNvdXJjZVxwb3J0YWJsZVxTb2Z0dW5lXE1COTYzNDBccG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIEJDQ19JTkRVU1RSSUFMX1BDX1BPUlQNCisJLyogQSBzaG9ydCBmaWxlIG5hbWUgaGFzIHRvIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIG5vcm1hbA0KKwlGcmVlUlRPU0NvbmZpZy5oIHdoZW4gdXNpbmcgdGhlIEJvcmxhbmQgY29tcGlsZXIuICovDQorCSNpbmNsdWRlICJmcmNvbmZpZy5oIg0KKwkjaW5jbHVkZSAiLi5ccG9ydGFibGVcQkNDXDE2Qml0RE9TXFBDXHBydG1hY3JvLmgiDQorICAgIHR5cGVkZWYgdm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweElTUiApKCk7DQorI2VuZGlmDQorDQorI2lmZGVmIEJDQ19GTEFTSF9MSVRFXzE4Nl9QT1JUDQorCS8qIEEgc2hvcnQgZmlsZSBuYW1lIGhhcyB0byBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSBub3JtYWwNCisJRnJlZVJUT1NDb25maWcuaCB3aGVuIHVzaW5nIHRoZSBCb3JsYW5kIGNvbXBpbGVyLiAqLw0KKwkjaW5jbHVkZSAiZnJjb25maWcuaCINCisJI2luY2x1ZGUgIi4uXHBvcnRhYmxlXEJDQ1wxNkJpdERPU1xmbHNoMTg2XHBydG1hY3JvLmgiDQorICAgIHR5cGVkZWYgdm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweElTUiApKCk7DQorI2VuZGlmDQorDQorI2lmZGVmIF9fR05VQ19fDQorICAgI2lmZGVmIF9fQVZSMzJfQVZSMzJBX18NCisJICAgI2luY2x1ZGUgInBvcnRtYWNyby5oIg0KKyAgICNlbmRpZg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX0lDQ0FWUjMyX18NCisgICAjaWZkZWYgX19DT1JFX18NCisgICAgICAjaWYgX19DT1JFX18gPT0gX19BVlIzMkFfXw0KKwkgICAgICAjaW5jbHVkZSAicG9ydG1hY3JvLmgiDQorICAgICAgI2VuZGlmDQorICAgI2VuZGlmDQorI2VuZGlmDQorDQorI2lmZGVmIF9fOTE0NjdEDQorCSNpbmNsdWRlICJwb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgX185NjM0MA0KKwkjaW5jbHVkZSAicG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorDQorI2lmZGVmIF9fSUFSX1Y4NTBFU19GeDNfXw0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIF9fSUFSX1Y4NTBFU19KeDNfXw0KKwkjaW5jbHVkZSAiLi4vLi4vU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIF9fSUFSX1Y4NTBFU19KeDNfTF9fDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgX19JQVJfVjg1MEVTX0p4Ml9fDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgX19JQVJfVjg1MEVTX0h4Ml9fDQorCSNpbmNsdWRlICIuLi8uLi9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0bWFjcm8uaCINCisjZW5kaWYNCisNCisjaWZkZWYgX19JQVJfNzhLMFJfS3gzX18NCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorCQ0KKyNpZmRlZiBfX0lBUl83OEswUl9LeDNMX18NCisJI2luY2x1ZGUgIi4uLy4uL1NvdXJjZS9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydG1hY3JvLmgiDQorI2VuZGlmDQorCQ0KKy8qIENhdGNoIGFsbCB0byBlbnN1cmUgcG9ydG1hY3JvLmggaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiAgTmV3ZXIgZGVtb3MNCitoYXZlIHRoZSBwYXRoIGFzIHBhcnQgb2YgdGhlIHByb2plY3Qgb3B0aW9ucywgcmF0aGVyIHRoYW4gYXMgcmVsYXRpdmUgZnJvbQ0KK3RoZSBwcm9qZWN0IGxvY2F0aW9uLiAgSWYgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIG5vdCBiZWVuIGRlZmluZWQgdGhlbg0KK3BvcnRtYWNyby5oIGhhcyBub3QgeWV0IGJlZW4gaW5jbHVkZWQgLSBhcyBldmVyeSBwb3J0bWFjcm8uaCBwcm92aWRlcyBhDQorcG9ydEVOVEVSX0NSSVRJQ0FMKCkgZGVmaW5pdGlvbi4gIENoZWNrIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZvciB5b3VyIGRlbW8NCit0byBmaW5kIHRoZSBwYXRoIHRvIHRoZSBjb3JyZWN0IHBvcnRtYWNyby5oIGZpbGUuICovDQorI2lmbmRlZiBwb3J0RU5URVJfQ1JJVElDQUwNCisJI2luY2x1ZGUgInBvcnRtYWNyby5oIgkNCisjZW5kaWYNCisJDQorI2lmIHBvcnRCWVRFX0FMSUdOTUVOVCA9PSA4DQorCSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKCAweDAwMDcgKQ0KKyNlbmRpZg0KKw0KKyNpZiBwb3J0QllURV9BTElHTk1FTlQgPT0gNA0KKwkjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLCSggMHgwMDAzICkNCisjZW5kaWYNCisNCisjaWYgcG9ydEJZVEVfQUxJR05NRU5UID09IDINCisJI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlRfTUFTSwkoIDB4MDAwMSApDQorI2VuZGlmDQorDQorI2lmIHBvcnRCWVRFX0FMSUdOTUVOVCA9PSAxDQorCSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sJKCAweDAwMDAgKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sNCisJI2Vycm9yICJJbnZhbGlkIHBvcnRCWVRFX0FMSUdOTUVOVCBkZWZpbml0aW9uIg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUw0KKwkjZGVmaW5lIHBvcnROVU1fQ09ORklHVVJBQkxFX1JFR0lPTlMgMQ0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlICJtcHVfd3JhcHBlcnMuaCINCisNCisvKg0KKyAqIFNldHVwIHRoZSBzdGFjayBvZiBhIG5ldyB0YXNrIHNvIGl0IGlzIHJlYWR5IHRvIGJlIHBsYWNlZCB1bmRlciB0aGUNCisgKiBzY2hlZHVsZXIgY29udHJvbC4gIFRoZSByZWdpc3RlcnMgaGF2ZSB0byBiZSBwbGFjZWQgb24gdGhlIHN0YWNrIGluDQorICogdGhlIG9yZGVyIHRoYXQgdGhlIHBvcnQgZXhwZWN0cyB0byBmaW5kIHRoZW0uDQorICoNCisgKi8NCisjaWYoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQorCXBvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzLCBwb3J0QkFTRV9UWVBFIHhSdW5Qcml2aWxlZ2VkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisjZWxzZQ0KKwlwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApOw0KKyNlbmRpZg0KKw0KKy8qDQorICogTWFwIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyByZXF1aXJlZCBmb3IgdGhlIHBvcnQuDQorICovDQordm9pZCAqcHZQb3J0TWFsbG9jKCBzaXplX3QgeFNpemUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3ZvaWQgdlBvcnRGcmVlKCB2b2lkICpwdiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQordm9pZCB2UG9ydEluaXRpYWxpc2VCbG9ja3MoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpemVfdCB4UG9ydEdldEZyZWVIZWFwU2l6ZSggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBTZXR1cCB0aGUgaGFyZHdhcmUgcmVhZHkgZm9yIHRoZSBzY2hlZHVsZXIgdG8gdGFrZSBjb250cm9sLiAgVGhpcyBnZW5lcmFsbHkNCisgKiBzZXRzIHVwIGEgdGljayBpbnRlcnJ1cHQgYW5kIHNldHMgdGltZXJzIGZvciB0aGUgY29ycmVjdCB0aWNrIGZyZXF1ZW5jeS4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVW5kbyBhbnkgaGFyZHdhcmUvSVNSIHNldHVwIHRoYXQgd2FzIHBlcmZvcm1lZCBieSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgc28NCisgKiB0aGUgaGFyZHdhcmUgaXMgbGVmdCBpbiBpdHMgb3JpZ2luYWwgY29uZGl0aW9uIGFmdGVyIHRoZSBzY2hlZHVsZXIgc3RvcHMNCisgKiBleGVjdXRpbmcuDQorICovDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBUaGUgc3RydWN0dXJlcyBhbmQgbWV0aG9kcyBvZiBtYW5pcHVsYXRpbmcgdGhlIE1QVSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUNCisgKiBwb3J0IGxheWVyLg0KKyAqDQorICogRmlsbHMgdGhlIHhNUFVTZXR0aW5ncyBzdHJ1Y3R1cmUgd2l0aCB0aGUgbWVtb3J5IHJlZ2lvbiBpbmZvcm1hdGlvbg0KKyAqIGNvbnRhaW5lZCBpbiB4UmVnaW9ucy4NCisgKi8NCisjaWYoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApIA0KKwlzdHJ1Y3QgeE1FTU9SWV9SRUdJT047DQorCXZvaWQgdlBvcnRTdG9yZVRhc2tNUFVTZXR0aW5ncyggeE1QVV9TRVRUSU5HUyAqeE1QVVNldHRpbmdzLCBjb25zdCBzdHJ1Y3QgeE1FTU9SWV9SRUdJT04gKiBjb25zdCB4UmVnaW9ucywgcG9ydFNUQUNLX1RZUEUgKnB4Qm90dG9tT2ZTdGFjaywgdW5zaWduZWQgc2hvcnQgdXNTdGFja0RlcHRoICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRBQkxFX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9wcm9qZGVmcy5oIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvcHJvamRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjlkYjkyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvcHJvamRlZnMuaApAQCAtMCwwICsxLDkwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUFJPSkRFRlNfSA0KKyNkZWZpbmUgUFJPSkRFRlNfSA0KKw0KKy8qIERlZmluZXMgdGhlIHByb3RvdHlwZSB0byB3aGljaCB0YXNrIGZ1bmN0aW9ucyBtdXN0IGNvbmZvcm0uICovDQordHlwZWRlZiB2b2lkICgqcGRUQVNLX0NPREUpKCB2b2lkICogKTsNCisNCisjZGVmaW5lIHBkVFJVRQkJKCAxICkNCisjZGVmaW5lIHBkRkFMU0UJCSggMCApDQorDQorI2RlZmluZSBwZFBBU1MJCQkJCQkJCQkoIDEgKQ0KKyNkZWZpbmUgcGRGQUlMCQkJCQkJCQkJKCAwICkNCisjZGVmaW5lIGVyclFVRVVFX0VNUFRZCQkJCQkJCSggMCApDQorI2RlZmluZSBlcnJRVUVVRV9GVUxMCQkJCQkJCSggMCApDQorDQorLyogRXJyb3IgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBlcnJDT1VMRF9OT1RfQUxMT0NBVEVfUkVRVUlSRURfTUVNT1JZCSggLTEgKQ0KKyNkZWZpbmUgZXJyTk9fVEFTS19UT19SVU4JCQkJCQkoIC0yICkNCisjZGVmaW5lIGVyclFVRVVFX0JMT0NLRUQJCQkJCQkoIC00ICkNCisjZGVmaW5lIGVyclFVRVVFX1lJRUxECQkJCQkJCSggLTUgKQ0KKw0KKyNlbmRpZiAvKiBQUk9KREVGU19IICovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvcXVldWUuaCBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlZmM2NAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3F1ZXVlLmgKQEAgLTAsMCArMSwxMzAyIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUVVFVUVfSA0KKyNkZWZpbmUgUVVFVUVfSA0KKw0KKyNpZm5kZWYgSU5DX0ZSRUVSVE9TX0gNCisJI2Vycm9yICJpbmNsdWRlIEZyZWVSVE9TLmgiIG11c3QgYXBwZWFyIGluIHNvdXJjZSBmaWxlcyBiZWZvcmUgImluY2x1ZGUgcXVldWUuaCINCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisNCisjaW5jbHVkZSAibXB1X3dyYXBwZXJzLmgiDQorDQorLyoqDQorICogVHlwZSBieSB3aGljaCBxdWV1ZXMgYXJlIHJlZmVyZW5jZWQuICBGb3IgZXhhbXBsZSwgYSBjYWxsIHRvIHhRdWV1ZUNyZWF0ZQ0KKyAqIHJldHVybnMgKHZpYSBhIHBvaW50ZXIgcGFyYW1ldGVyKSBhbiB4UXVldWVIYW5kbGUgdmFyaWFibGUgdGhhdCBjYW4gdGhlbg0KKyAqIGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8geFF1ZXVlU2VuZCgpLCB4UXVldWVSZWNlaXZlKCksIGV0Yy4NCisgKi8NCit0eXBlZGVmIHZvaWQgKiB4UXVldWVIYW5kbGU7DQorDQorDQorLyogRm9yIGludGVybmFsIHVzZSBvbmx5LiAqLw0KKyNkZWZpbmUJcXVldWVTRU5EX1RPX0JBQ0sJKCAwICkNCisjZGVmaW5lCXF1ZXVlU0VORF9UT19GUk9OVAkoIDEgKQ0KKw0KKy8qIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIFRoZXNlIGRlZmluaXRpb25zICptdXN0KiBtYXRjaCB0aG9zZSBpbiBxdWV1ZS5jLiAqLw0KKyNkZWZpbmUgcXVldWVRVUVVRV9UWVBFX0JBU0UJCQkJKCAwVSApDQorI2RlZmluZSBxdWV1ZVFVRVVFX1RZUEVfTVVURVggCQkJCSggMVUgKQ0KKyNkZWZpbmUgcXVldWVRVUVVRV9UWVBFX0NPVU5USU5HX1NFTUFQSE9SRQkoIDJVICkNCisjZGVmaW5lIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFCSggM1UgKQ0KKyNkZWZpbmUgcXVldWVRVUVVRV9UWVBFX1JFQ1VSU0lWRV9NVVRFWAkJKCA0VSApDQorDQordm9pZCB4SW5pdFF1ZXVlcyh2b2lkKTsNCisNCisvKioNCisgKiBxdWV1ZS4gaA0KKyAqIDxwcmU+DQorIHhRdWV1ZUhhbmRsZSB4UXVldWVDcmVhdGUoDQorCQkJCQkJCSAgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTGVuZ3RoLA0KKwkJCQkJCQkgIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJdGVtU2l6ZQ0KKwkJCQkJCSAgKTsNCisgKiA8L3ByZT4NCisgKg0KKyAqIENyZWF0ZXMgYSBuZXcgcXVldWUgaW5zdGFuY2UuICBUaGlzIGFsbG9jYXRlcyB0aGUgc3RvcmFnZSByZXF1aXJlZCBieSB0aGUNCisgKiBuZXcgcXVldWUgYW5kIHJldHVybnMgYSBoYW5kbGUgZm9yIHRoZSBxdWV1ZS4NCisgKg0KKyAqIEBwYXJhbSB1eFF1ZXVlTGVuZ3RoIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IHRoZSBxdWV1ZSBjYW4gY29udGFpbi4NCisgKg0KKyAqIEBwYXJhbSB1eEl0ZW1TaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgZWFjaCBpdGVtIGluIHRoZSBxdWV1ZSB3aWxsIHJlcXVpcmUuDQorICogSXRlbXMgYXJlIHF1ZXVlZCBieSBjb3B5LCBub3QgYnkgcmVmZXJlbmNlLCBzbyB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMNCisgKiB0aGF0IHdpbGwgYmUgY29waWVkIGZvciBlYWNoIHBvc3RlZCBpdGVtLiAgRWFjaCBpdGVtIG9uIHRoZSBxdWV1ZSBtdXN0IGJlDQorICogdGhlIHNhbWUgc2l6ZS4NCisgKg0KKyAqIEByZXR1cm4gSWYgdGhlIHF1ZXVlIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGUgdGhlbiBhIGhhbmRsZSB0byB0aGUgbmV3bHkNCisgKiBjcmVhdGVkIHF1ZXVlIGlzIHJldHVybmVkLiAgSWYgdGhlIHF1ZXVlIGNhbm5vdCBiZSBjcmVhdGVkIHRoZW4gMCBpcw0KKyAqIHJldHVybmVkLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyBzdHJ1Y3QgQU1lc3NhZ2UNCisgew0KKwljaGFyIHVjTWVzc2FnZUlEOw0KKwljaGFyIHVjRGF0YVsgMjAgXTsNCisgfTsNCisNCisgdm9pZCB2QVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQorIHsNCisgeFF1ZXVlSGFuZGxlIHhRdWV1ZTEsIHhRdWV1ZTI7DQorDQorCS8vIENyZWF0ZSBhIHF1ZXVlIGNhcGFibGUgb2YgY29udGFpbmluZyAxMCB1bnNpZ25lZCBsb25nIHZhbHVlcy4NCisJeFF1ZXVlMSA9IHhRdWV1ZUNyZWF0ZSggMTAsIHNpemVvZiggdW5zaWduZWQgbG9uZyApICk7DQorCWlmKCB4UXVldWUxID09IDAgKQ0KKwl7DQorCQkvLyBRdWV1ZSB3YXMgbm90IGNyZWF0ZWQgYW5kIG11c3Qgbm90IGJlIHVzZWQuDQorCX0NCisNCisJLy8gQ3JlYXRlIGEgcXVldWUgY2FwYWJsZSBvZiBjb250YWluaW5nIDEwIHBvaW50ZXJzIHRvIEFNZXNzYWdlIHN0cnVjdHVyZXMuDQorCS8vIFRoZXNlIHNob3VsZCBiZSBwYXNzZWQgYnkgcG9pbnRlciBhcyB0aGV5IGNvbnRhaW4gYSBsb3Qgb2YgZGF0YS4NCisJeFF1ZXVlMiA9IHhRdWV1ZUNyZWF0ZSggMTAsIHNpemVvZiggc3RydWN0IEFNZXNzYWdlICogKSApOw0KKwlpZiggeFF1ZXVlMiA9PSAwICkNCisJew0KKwkJLy8gUXVldWUgd2FzIG5vdCBjcmVhdGVkIGFuZCBtdXN0IG5vdCBiZSB1c2VkLg0KKwl9DQorDQorCS8vIC4uLiBSZXN0IG9mIHRhc2sgY29kZS4NCisgfQ0KKyA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFF1ZXVlQ3JlYXRlIHhRdWV1ZUNyZWF0ZQ0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KKyNkZWZpbmUgeFF1ZXVlQ3JlYXRlKCBidWZmZXIsIHV4UXVldWVMZW5ndGgsIHV4SXRlbVNpemUgKSB4UXVldWVHZW5lcmljQ3JlYXRlKCBidWZmZXIsIHV4UXVldWVMZW5ndGgsIHV4SXRlbVNpemUsIHF1ZXVlUVVFVUVfVFlQRV9CQVNFICkNCisNCisvKioNCisgKiBxdWV1ZS4gaA0KKyAqIDxwcmU+DQorIHBvcnRCQVNFX1RZUEUgeFF1ZXVlU2VuZFRvVG9Gcm9udCgNCisJCQkJCQkJCSAgIHhRdWV1ZUhhbmRsZQl4UXVldWUsDQorCQkJCQkJCQkgICBjb25zdCB2b2lkCSoJcHZJdGVtVG9RdWV1ZSwNCisJCQkJCQkJCSAgIHBvcnRUaWNrVHlwZQl4VGlja3NUb1dhaXQNCisJCQkJCQkJICAgKTsNCisgKiA8L3ByZT4NCisgKg0KKyAqIFRoaXMgaXMgYSBtYWNybyB0aGF0IGNhbGxzIHhRdWV1ZUdlbmVyaWNTZW5kKCkuDQorICoNCisgKiBQb3N0IGFuIGl0ZW0gdG8gdGhlIGZyb250IG9mIGEgcXVldWUuICBUaGUgaXRlbSBpcyBxdWV1ZWQgYnkgY29weSwgbm90IGJ5DQorICogcmVmZXJlbmNlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZQ0KKyAqIHJvdXRpbmUuICBTZWUgeFF1ZXVlU2VuZEZyb21JU1IgKCkgZm9yIGFuIGFsdGVybmF0aXZlIHdoaWNoIG1heSBiZSB1c2VkDQorICogaW4gYW4gSVNSLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGl0ZW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgb24gdGhlDQorICogcXVldWUuICBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgdGhlIHF1ZXVlIHdpbGwgaG9sZCB3YXMgZGVmaW5lZCB3aGVuIHRoZQ0KKyAqIHF1ZXVlIHdhcyBjcmVhdGVkLCBzbyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBwdkl0ZW1Ub1F1ZXVlDQorICogaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBzcGFjZSB0byBiZWNvbWUgYXZhaWxhYmxlIG9uIHRoZSBxdWV1ZSwgc2hvdWxkIGl0IGFscmVhZHkNCisgKiBiZSBmdWxsLiAgVGhlIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyBzZXQgdG8gMCBhbmQgdGhlDQorICogcXVldWUgaXMgZnVsbC4gIFRoZSB0aW1lIGlzIGRlZmluZWQgaW4gdGljayBwZXJpb2RzIHNvIHRoZSBjb25zdGFudA0KKyAqIHBvcnRUSUNLX1JBVEVfTVMgc2hvdWxkIGJlIHVzZWQgdG8gY29udmVydCB0byByZWFsIHRpbWUgaWYgdGhpcyBpcyByZXF1aXJlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcG9zdGVkLCBvdGhlcndpc2UgZXJyUVVFVUVfRlVMTC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgc3RydWN0IEFNZXNzYWdlDQorIHsNCisJY2hhciB1Y01lc3NhZ2VJRDsNCisJY2hhciB1Y0RhdGFbIDIwIF07DQorIH0geE1lc3NhZ2U7DQorDQorIHVuc2lnbmVkIGxvbmcgdWxWYXIgPSAxMFVMOw0KKw0KKyB2b2lkIHZBVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisgew0KKyB4UXVldWVIYW5kbGUgeFF1ZXVlMSwgeFF1ZXVlMjsNCisgc3RydWN0IEFNZXNzYWdlICpweE1lc3NhZ2U7DQorDQorCS8vIENyZWF0ZSBhIHF1ZXVlIGNhcGFibGUgb2YgY29udGFpbmluZyAxMCB1bnNpZ25lZCBsb25nIHZhbHVlcy4NCisJeFF1ZXVlMSA9IHhRdWV1ZUNyZWF0ZSggMTAsIHNpemVvZiggdW5zaWduZWQgbG9uZyApICk7DQorDQorCS8vIENyZWF0ZSBhIHF1ZXVlIGNhcGFibGUgb2YgY29udGFpbmluZyAxMCBwb2ludGVycyB0byBBTWVzc2FnZSBzdHJ1Y3R1cmVzLg0KKwkvLyBUaGVzZSBzaG91bGQgYmUgcGFzc2VkIGJ5IHBvaW50ZXIgYXMgdGhleSBjb250YWluIGEgbG90IG9mIGRhdGEuDQorCXhRdWV1ZTIgPSB4UXVldWVDcmVhdGUoIDEwLCBzaXplb2YoIHN0cnVjdCBBTWVzc2FnZSAqICkgKTsNCisNCisJLy8gLi4uDQorDQorCWlmKCB4UXVldWUxICE9IDAgKQ0KKwl7DQorCQkvLyBTZW5kIGFuIHVuc2lnbmVkIGxvbmcuICBXYWl0IGZvciAxMCB0aWNrcyBmb3Igc3BhY2UgdG8gYmVjb21lDQorCQkvLyBhdmFpbGFibGUgaWYgbmVjZXNzYXJ5Lg0KKwkJaWYoIHhRdWV1ZVNlbmRUb0Zyb250KCB4UXVldWUxLCAoIHZvaWQgKiApICZ1bFZhciwgKCBwb3J0VGlja1R5cGUgKSAxMCApICE9IHBkUEFTUyApDQorCQl7DQorCQkJLy8gRmFpbGVkIHRvIHBvc3QgdGhlIG1lc3NhZ2UsIGV2ZW4gYWZ0ZXIgMTAgdGlja3MuDQorCQl9DQorCX0NCisNCisJaWYoIHhRdWV1ZTIgIT0gMCApDQorCXsNCisJCS8vIFNlbmQgYSBwb2ludGVyIHRvIGEgc3RydWN0IEFNZXNzYWdlIG9iamVjdC4gIERvbid0IGJsb2NrIGlmIHRoZQ0KKwkJLy8gcXVldWUgaXMgYWxyZWFkeSBmdWxsLg0KKwkJcHhNZXNzYWdlID0gJiB4TWVzc2FnZTsNCisJCXhRdWV1ZVNlbmRUb0Zyb250KCB4UXVldWUyLCAoIHZvaWQgKiApICZweE1lc3NhZ2UsICggcG9ydFRpY2tUeXBlICkgMCApOw0KKwl9DQorDQorCS8vIC4uLiBSZXN0IG9mIHRhc2sgY29kZS4NCisgfQ0KKyA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFF1ZXVlU2VuZCB4UXVldWVTZW5kDQorICogXGluZ3JvdXAgUXVldWVNYW5hZ2VtZW50DQorICovDQorI2RlZmluZSB4UXVldWVTZW5kVG9Gcm9udCggeFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4VGlja3NUb1dhaXQgKSB4UXVldWVHZW5lcmljU2VuZCggKCB4UXVldWUgKSwgKCBwdkl0ZW1Ub1F1ZXVlICksICggeFRpY2tzVG9XYWl0ICksIHF1ZXVlU0VORF9UT19GUk9OVCApDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVNlbmRUb0JhY2soDQorCQkJCQkJCQkgICB4UXVldWVIYW5kbGUJeFF1ZXVlLA0KKwkJCQkJCQkJICAgY29uc3QJdm9pZAkqCXB2SXRlbVRvUXVldWUsDQorCQkJCQkJCQkgICBwb3J0VGlja1R5cGUJeFRpY2tzVG9XYWl0DQorCQkJCQkJCSAgICk7DQorICogPC9wcmU+DQorICoNCisgKiBUaGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyB4UXVldWVHZW5lcmljU2VuZCgpLg0KKyAqDQorICogUG9zdCBhbiBpdGVtIHRvIHRoZSBiYWNrIG9mIGEgcXVldWUuICBUaGUgaXRlbSBpcyBxdWV1ZWQgYnkgY29weSwgbm90IGJ5DQorICogcmVmZXJlbmNlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZQ0KKyAqIHJvdXRpbmUuICBTZWUgeFF1ZXVlU2VuZEZyb21JU1IgKCkgZm9yIGFuIGFsdGVybmF0aXZlIHdoaWNoIG1heSBiZSB1c2VkDQorICogaW4gYW4gSVNSLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGl0ZW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgb24gdGhlDQorICogcXVldWUuICBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgdGhlIHF1ZXVlIHdpbGwgaG9sZCB3YXMgZGVmaW5lZCB3aGVuIHRoZQ0KKyAqIHF1ZXVlIHdhcyBjcmVhdGVkLCBzbyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBwdkl0ZW1Ub1F1ZXVlDQorICogaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBzcGFjZSB0byBiZWNvbWUgYXZhaWxhYmxlIG9uIHRoZSBxdWV1ZSwgc2hvdWxkIGl0IGFscmVhZHkNCisgKiBiZSBmdWxsLiAgVGhlIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyBzZXQgdG8gMCBhbmQgdGhlIHF1ZXVlDQorICogaXMgZnVsbC4gIFRoZSAgdGltZSBpcyBkZWZpbmVkIGluIHRpY2sgcGVyaW9kcyBzbyB0aGUgY29uc3RhbnQNCisgKiBwb3J0VElDS19SQVRFX01TIHNob3VsZCBiZSB1c2VkIHRvIGNvbnZlcnQgdG8gcmVhbCB0aW1lIGlmIHRoaXMgaXMgcmVxdWlyZWQuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZCwgb3RoZXJ3aXNlIGVyclFVRVVFX0ZVTEwuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHN0cnVjdCBBTWVzc2FnZQ0KKyB7DQorCWNoYXIgdWNNZXNzYWdlSUQ7DQorCWNoYXIgdWNEYXRhWyAyMCBdOw0KKyB9IHhNZXNzYWdlOw0KKw0KKyB1bnNpZ25lZCBsb25nIHVsVmFyID0gMTBVTDsNCisNCisgdm9pZCB2QVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQorIHsNCisgeFF1ZXVlSGFuZGxlIHhRdWV1ZTEsIHhRdWV1ZTI7DQorIHN0cnVjdCBBTWVzc2FnZSAqcHhNZXNzYWdlOw0KKw0KKwkvLyBDcmVhdGUgYSBxdWV1ZSBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgMTAgdW5zaWduZWQgbG9uZyB2YWx1ZXMuDQorCXhRdWV1ZTEgPSB4UXVldWVDcmVhdGUoIDEwLCBzaXplb2YoIHVuc2lnbmVkIGxvbmcgKSApOw0KKw0KKwkvLyBDcmVhdGUgYSBxdWV1ZSBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgMTAgcG9pbnRlcnMgdG8gQU1lc3NhZ2Ugc3RydWN0dXJlcy4NCisJLy8gVGhlc2Ugc2hvdWxkIGJlIHBhc3NlZCBieSBwb2ludGVyIGFzIHRoZXkgY29udGFpbiBhIGxvdCBvZiBkYXRhLg0KKwl4UXVldWUyID0geFF1ZXVlQ3JlYXRlKCAxMCwgc2l6ZW9mKCBzdHJ1Y3QgQU1lc3NhZ2UgKiApICk7DQorDQorCS8vIC4uLg0KKw0KKwlpZiggeFF1ZXVlMSAhPSAwICkNCisJew0KKwkJLy8gU2VuZCBhbiB1bnNpZ25lZCBsb25nLiAgV2FpdCBmb3IgMTAgdGlja3MgZm9yIHNwYWNlIHRvIGJlY29tZQ0KKwkJLy8gYXZhaWxhYmxlIGlmIG5lY2Vzc2FyeS4NCisJCWlmKCB4UXVldWVTZW5kVG9CYWNrKCB4UXVldWUxLCAoIHZvaWQgKiApICZ1bFZhciwgKCBwb3J0VGlja1R5cGUgKSAxMCApICE9IHBkUEFTUyApDQorCQl7DQorCQkJLy8gRmFpbGVkIHRvIHBvc3QgdGhlIG1lc3NhZ2UsIGV2ZW4gYWZ0ZXIgMTAgdGlja3MuDQorCQl9DQorCX0NCisNCisJaWYoIHhRdWV1ZTIgIT0gMCApDQorCXsNCisJCS8vIFNlbmQgYSBwb2ludGVyIHRvIGEgc3RydWN0IEFNZXNzYWdlIG9iamVjdC4gIERvbid0IGJsb2NrIGlmIHRoZQ0KKwkJLy8gcXVldWUgaXMgYWxyZWFkeSBmdWxsLg0KKwkJcHhNZXNzYWdlID0gJiB4TWVzc2FnZTsNCisJCXhRdWV1ZVNlbmRUb0JhY2soIHhRdWV1ZTIsICggdm9pZCAqICkgJnB4TWVzc2FnZSwgKCBwb3J0VGlja1R5cGUgKSAwICk7DQorCX0NCisNCisJLy8gLi4uIFJlc3Qgb2YgdGFzayBjb2RlLg0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB4UXVldWVTZW5kIHhRdWV1ZVNlbmQNCisgKiBcaW5ncm91cCBRdWV1ZU1hbmFnZW1lbnQNCisgKi8NCisjZGVmaW5lIHhRdWV1ZVNlbmRUb0JhY2soIHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeFRpY2tzVG9XYWl0ICkgeFF1ZXVlR2VuZXJpY1NlbmQoICggeFF1ZXVlICksICggcHZJdGVtVG9RdWV1ZSApLCAoIHhUaWNrc1RvV2FpdCApLCBxdWV1ZVNFTkRfVE9fQkFDSyApDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVNlbmQoDQorCQkJCQkJCSAgeFF1ZXVlSGFuZGxlIHhRdWV1ZSwNCisJCQkJCQkJICBjb25zdCB2b2lkICogcHZJdGVtVG9RdWV1ZSwNCisJCQkJCQkJICBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0DQorCQkJCQkJICk7DQorICogPC9wcmU+DQorICoNCisgKiBUaGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyB4UXVldWVHZW5lcmljU2VuZCgpLiAgSXQgaXMgaW5jbHVkZWQgZm9yDQorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIG9mIEZyZWVSVE9TLm9yZyB0aGF0IGRpZCBub3QNCisgKiBpbmNsdWRlIHRoZSB4UXVldWVTZW5kVG9Gcm9udCgpIGFuZCB4UXVldWVTZW5kVG9CYWNrKCkgbWFjcm9zLiAgSXQgaXMNCisgKiBlcXVpdmFsZW50IHRvIHhRdWV1ZVNlbmRUb0JhY2soKS4NCisgKg0KKyAqIFBvc3QgYW4gaXRlbSBvbiBhIHF1ZXVlLiAgVGhlIGl0ZW0gaXMgcXVldWVkIGJ5IGNvcHksIG5vdCBieSByZWZlcmVuY2UuDQorICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLg0KKyAqIFNlZSB4UXVldWVTZW5kRnJvbUlTUiAoKSBmb3IgYW4gYWx0ZXJuYXRpdmUgd2hpY2ggbWF5IGJlIHVzZWQgaW4gYW4gSVNSLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGl0ZW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgb24gdGhlDQorICogcXVldWUuICBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgdGhlIHF1ZXVlIHdpbGwgaG9sZCB3YXMgZGVmaW5lZCB3aGVuIHRoZQ0KKyAqIHF1ZXVlIHdhcyBjcmVhdGVkLCBzbyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBwdkl0ZW1Ub1F1ZXVlDQorICogaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBzcGFjZSB0byBiZWNvbWUgYXZhaWxhYmxlIG9uIHRoZSBxdWV1ZSwgc2hvdWxkIGl0IGFscmVhZHkNCisgKiBiZSBmdWxsLiAgVGhlIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyBzZXQgdG8gMCBhbmQgdGhlDQorICogcXVldWUgaXMgZnVsbC4gIFRoZSB0aW1lIGlzIGRlZmluZWQgaW4gdGljayBwZXJpb2RzIHNvIHRoZSBjb25zdGFudA0KKyAqIHBvcnRUSUNLX1JBVEVfTVMgc2hvdWxkIGJlIHVzZWQgdG8gY29udmVydCB0byByZWFsIHRpbWUgaWYgdGhpcyBpcyByZXF1aXJlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcG9zdGVkLCBvdGhlcndpc2UgZXJyUVVFVUVfRlVMTC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgc3RydWN0IEFNZXNzYWdlDQorIHsNCisJY2hhciB1Y01lc3NhZ2VJRDsNCisJY2hhciB1Y0RhdGFbIDIwIF07DQorIH0geE1lc3NhZ2U7DQorDQorIHVuc2lnbmVkIGxvbmcgdWxWYXIgPSAxMFVMOw0KKw0KKyB2b2lkIHZBVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisgew0KKyB4UXVldWVIYW5kbGUgeFF1ZXVlMSwgeFF1ZXVlMjsNCisgc3RydWN0IEFNZXNzYWdlICpweE1lc3NhZ2U7DQorDQorCS8vIENyZWF0ZSBhIHF1ZXVlIGNhcGFibGUgb2YgY29udGFpbmluZyAxMCB1bnNpZ25lZCBsb25nIHZhbHVlcy4NCisJeFF1ZXVlMSA9IHhRdWV1ZUNyZWF0ZSggMTAsIHNpemVvZiggdW5zaWduZWQgbG9uZyApICk7DQorDQorCS8vIENyZWF0ZSBhIHF1ZXVlIGNhcGFibGUgb2YgY29udGFpbmluZyAxMCBwb2ludGVycyB0byBBTWVzc2FnZSBzdHJ1Y3R1cmVzLg0KKwkvLyBUaGVzZSBzaG91bGQgYmUgcGFzc2VkIGJ5IHBvaW50ZXIgYXMgdGhleSBjb250YWluIGEgbG90IG9mIGRhdGEuDQorCXhRdWV1ZTIgPSB4UXVldWVDcmVhdGUoIDEwLCBzaXplb2YoIHN0cnVjdCBBTWVzc2FnZSAqICkgKTsNCisNCisJLy8gLi4uDQorDQorCWlmKCB4UXVldWUxICE9IDAgKQ0KKwl7DQorCQkvLyBTZW5kIGFuIHVuc2lnbmVkIGxvbmcuICBXYWl0IGZvciAxMCB0aWNrcyBmb3Igc3BhY2UgdG8gYmVjb21lDQorCQkvLyBhdmFpbGFibGUgaWYgbmVjZXNzYXJ5Lg0KKwkJaWYoIHhRdWV1ZVNlbmQoIHhRdWV1ZTEsICggdm9pZCAqICkgJnVsVmFyLCAoIHBvcnRUaWNrVHlwZSApIDEwICkgIT0gcGRQQVNTICkNCisJCXsNCisJCQkvLyBGYWlsZWQgdG8gcG9zdCB0aGUgbWVzc2FnZSwgZXZlbiBhZnRlciAxMCB0aWNrcy4NCisJCX0NCisJfQ0KKw0KKwlpZiggeFF1ZXVlMiAhPSAwICkNCisJew0KKwkJLy8gU2VuZCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgQU1lc3NhZ2Ugb2JqZWN0LiAgRG9uJ3QgYmxvY2sgaWYgdGhlDQorCQkvLyBxdWV1ZSBpcyBhbHJlYWR5IGZ1bGwuDQorCQlweE1lc3NhZ2UgPSAmIHhNZXNzYWdlOw0KKwkJeFF1ZXVlU2VuZCggeFF1ZXVlMiwgKCB2b2lkICogKSAmcHhNZXNzYWdlLCAoIHBvcnRUaWNrVHlwZSApIDAgKTsNCisJfQ0KKw0KKwkvLyAuLi4gUmVzdCBvZiB0YXNrIGNvZGUuDQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhRdWV1ZVNlbmQgeFF1ZXVlU2VuZA0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KKyNkZWZpbmUgeFF1ZXVlU2VuZCggeFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4VGlja3NUb1dhaXQgKSB4UXVldWVHZW5lcmljU2VuZCggKCB4UXVldWUgKSwgKCBwdkl0ZW1Ub1F1ZXVlICksICggeFRpY2tzVG9XYWl0ICksIHF1ZXVlU0VORF9UT19CQUNLICkNCisNCisNCisvKioNCisgKiBxdWV1ZS4gaA0KKyAqIDxwcmU+DQorIHBvcnRCQVNFX1RZUEUgeFF1ZXVlR2VuZXJpY1NlbmQoDQorCQkJCQkJCQkJeFF1ZXVlSGFuZGxlIHhRdWV1ZSwNCisJCQkJCQkJCQljb25zdCB2b2lkICogcHZJdGVtVG9RdWV1ZSwNCisJCQkJCQkJCQlwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0DQorCQkJCQkJCQkJcG9ydEJBU0VfVFlQRSB4Q29weVBvc2l0aW9uDQorCQkJCQkJCQkpOw0KKyAqIDwvcHJlPg0KKyAqDQorICogSXQgaXMgcHJlZmVycmVkIHRoYXQgdGhlIG1hY3JvcyB4UXVldWVTZW5kKCksIHhRdWV1ZVNlbmRUb0Zyb250KCkgYW5kDQorICogeFF1ZXVlU2VuZFRvQmFjaygpIGFyZSB1c2VkIGluIHBsYWNlIG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4NCisgKg0KKyAqIFBvc3QgYW4gaXRlbSBvbiBhIHF1ZXVlLiAgVGhlIGl0ZW0gaXMgcXVldWVkIGJ5IGNvcHksIG5vdCBieSByZWZlcmVuY2UuDQorICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLg0KKyAqIFNlZSB4UXVldWVTZW5kRnJvbUlTUiAoKSBmb3IgYW4gYWx0ZXJuYXRpdmUgd2hpY2ggbWF5IGJlIHVzZWQgaW4gYW4gSVNSLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGl0ZW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgb24gdGhlDQorICogcXVldWUuICBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgdGhlIHF1ZXVlIHdpbGwgaG9sZCB3YXMgZGVmaW5lZCB3aGVuIHRoZQ0KKyAqIHF1ZXVlIHdhcyBjcmVhdGVkLCBzbyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBwdkl0ZW1Ub1F1ZXVlDQorICogaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBzcGFjZSB0byBiZWNvbWUgYXZhaWxhYmxlIG9uIHRoZSBxdWV1ZSwgc2hvdWxkIGl0IGFscmVhZHkNCisgKiBiZSBmdWxsLiAgVGhlIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyBzZXQgdG8gMCBhbmQgdGhlDQorICogcXVldWUgaXMgZnVsbC4gIFRoZSB0aW1lIGlzIGRlZmluZWQgaW4gdGljayBwZXJpb2RzIHNvIHRoZSBjb25zdGFudA0KKyAqIHBvcnRUSUNLX1JBVEVfTVMgc2hvdWxkIGJlIHVzZWQgdG8gY29udmVydCB0byByZWFsIHRpbWUgaWYgdGhpcyBpcyByZXF1aXJlZC4NCisgKg0KKyAqIEBwYXJhbSB4Q29weVBvc2l0aW9uIENhbiB0YWtlIHRoZSB2YWx1ZSBxdWV1ZVNFTkRfVE9fQkFDSyB0byBwbGFjZSB0aGUNCisgKiBpdGVtIGF0IHRoZSBiYWNrIG9mIHRoZSBxdWV1ZSwgb3IgcXVldWVTRU5EX1RPX0ZST05UIHRvIHBsYWNlIHRoZSBpdGVtDQorICogYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSAoZm9yIGhpZ2ggcHJpb3JpdHkgbWVzc2FnZXMpLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgdGhlIGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSBwb3N0ZWQsIG90aGVyd2lzZSBlcnJRVUVVRV9GVUxMLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyBzdHJ1Y3QgQU1lc3NhZ2UNCisgew0KKwljaGFyIHVjTWVzc2FnZUlEOw0KKwljaGFyIHVjRGF0YVsgMjAgXTsNCisgfSB4TWVzc2FnZTsNCisNCisgdW5zaWduZWQgbG9uZyB1bFZhciA9IDEwVUw7DQorDQorIHZvaWQgdkFUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHhRdWV1ZUhhbmRsZSB4UXVldWUxLCB4UXVldWUyOw0KKyBzdHJ1Y3QgQU1lc3NhZ2UgKnB4TWVzc2FnZTsNCisNCisJLy8gQ3JlYXRlIGEgcXVldWUgY2FwYWJsZSBvZiBjb250YWluaW5nIDEwIHVuc2lnbmVkIGxvbmcgdmFsdWVzLg0KKwl4UXVldWUxID0geFF1ZXVlQ3JlYXRlKCAxMCwgc2l6ZW9mKCB1bnNpZ25lZCBsb25nICkgKTsNCisNCisJLy8gQ3JlYXRlIGEgcXVldWUgY2FwYWJsZSBvZiBjb250YWluaW5nIDEwIHBvaW50ZXJzIHRvIEFNZXNzYWdlIHN0cnVjdHVyZXMuDQorCS8vIFRoZXNlIHNob3VsZCBiZSBwYXNzZWQgYnkgcG9pbnRlciBhcyB0aGV5IGNvbnRhaW4gYSBsb3Qgb2YgZGF0YS4NCisJeFF1ZXVlMiA9IHhRdWV1ZUNyZWF0ZSggMTAsIHNpemVvZiggc3RydWN0IEFNZXNzYWdlICogKSApOw0KKw0KKwkvLyAuLi4NCisNCisJaWYoIHhRdWV1ZTEgIT0gMCApDQorCXsNCisJCS8vIFNlbmQgYW4gdW5zaWduZWQgbG9uZy4gIFdhaXQgZm9yIDEwIHRpY2tzIGZvciBzcGFjZSB0byBiZWNvbWUNCisJCS8vIGF2YWlsYWJsZSBpZiBuZWNlc3NhcnkuDQorCQlpZiggeFF1ZXVlR2VuZXJpY1NlbmQoIHhRdWV1ZTEsICggdm9pZCAqICkgJnVsVmFyLCAoIHBvcnRUaWNrVHlwZSApIDEwLCBxdWV1ZVNFTkRfVE9fQkFDSyApICE9IHBkUEFTUyApDQorCQl7DQorCQkJLy8gRmFpbGVkIHRvIHBvc3QgdGhlIG1lc3NhZ2UsIGV2ZW4gYWZ0ZXIgMTAgdGlja3MuDQorCQl9DQorCX0NCisNCisJaWYoIHhRdWV1ZTIgIT0gMCApDQorCXsNCisJCS8vIFNlbmQgYSBwb2ludGVyIHRvIGEgc3RydWN0IEFNZXNzYWdlIG9iamVjdC4gIERvbid0IGJsb2NrIGlmIHRoZQ0KKwkJLy8gcXVldWUgaXMgYWxyZWFkeSBmdWxsLg0KKwkJcHhNZXNzYWdlID0gJiB4TWVzc2FnZTsNCisJCXhRdWV1ZUdlbmVyaWNTZW5kKCB4UXVldWUyLCAoIHZvaWQgKiApICZweE1lc3NhZ2UsICggcG9ydFRpY2tUeXBlICkgMCwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCisJfQ0KKw0KKwkvLyAuLi4gUmVzdCBvZiB0YXNrIGNvZGUuDQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhRdWV1ZVNlbmQgeFF1ZXVlU2VuZA0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeENvcHlQb3NpdGlvbiApOw0KKw0KKy8qKg0KKyAqIHF1ZXVlLiBoDQorICogPHByZT4NCisgcG9ydEJBU0VfVFlQRSB4UXVldWVQZWVrKA0KKwkJCQkJCQkgeFF1ZXVlSGFuZGxlIHhRdWV1ZSwNCisJCQkJCQkJIHZvaWQgKnB2QnVmZmVyLA0KKwkJCQkJCQkgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdA0KKwkJCQkJCSApOzwvcHJlPg0KKyAqDQorICogVGhpcyBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgdGhlIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCkgZnVuY3Rpb24uDQorICoNCisgKiBSZWNlaXZlIGFuIGl0ZW0gZnJvbSBhIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIGl0ZW0gZnJvbSB0aGUgcXVldWUuDQorICogVGhlIGl0ZW0gaXMgcmVjZWl2ZWQgYnkgY29weSBzbyBhIGJ1ZmZlciBvZiBhZGVxdWF0ZSBzaXplIG11c3QgYmUNCisgKiBwcm92aWRlZC4gIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGludG8gdGhlIGJ1ZmZlciB3YXMgZGVmaW5lZCB3aGVuDQorICogdGhlIHF1ZXVlIHdhcyBjcmVhdGVkLg0KKyAqDQorICogU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGl0ZW1zIHJlbWFpbiBvbiB0aGUgcXVldWUgc28gd2lsbCBiZSByZXR1cm5lZCBhZ2Fpbg0KKyAqIGJ5IHRoZSBuZXh0IGNhbGwsIG9yIGEgY2FsbCB0byB4UXVldWVSZWNlaXZlKCkuDQorICoNCisgKiBUaGlzIG1hY3JvIG11c3Qgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4NCisgKg0KKyAqIEBwYXJhbSBweFF1ZXVlIFRoZSBoYW5kbGUgdG8gdGhlIHF1ZXVlIGZyb20gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUNCisgKiByZWNlaXZlZC4NCisgKg0KKyAqIEBwYXJhbSBwdkJ1ZmZlciBQb2ludGVyIHRvIHRoZSBidWZmZXIgaW50byB3aGljaCB0aGUgcmVjZWl2ZWQgaXRlbSB3aWxsDQorICogYmUgY29waWVkLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBhbiBpdGVtIHRvIHJlY2VpdmUgc2hvdWxkIHRoZSBxdWV1ZSBiZSBlbXB0eSBhdCB0aGUgdGltZQ0KKyAqIG9mIHRoZSBjYWxsLgkgVGhlIHRpbWUgaXMgZGVmaW5lZCBpbiB0aWNrIHBlcmlvZHMgc28gdGhlIGNvbnN0YW50DQorICogcG9ydFRJQ0tfUkFURV9NUyBzaG91bGQgYmUgdXNlZCB0byBjb252ZXJ0IHRvIHJlYWwgdGltZSBpZiB0aGlzIGlzIHJlcXVpcmVkLg0KKyAqIHhRdWV1ZVBlZWsoKSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBpZiB4VGlja3NUb1dhaXQgaXMgMCBhbmQgdGhlIHF1ZXVlDQorICogaXMgZW1wdHkuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiBhbiBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJvbSB0aGUgcXVldWUsDQorICogb3RoZXJ3aXNlIHBkRkFMU0UuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHN0cnVjdCBBTWVzc2FnZQ0KKyB7DQorCWNoYXIgdWNNZXNzYWdlSUQ7DQorCWNoYXIgdWNEYXRhWyAyMCBdOw0KKyB9IHhNZXNzYWdlOw0KKw0KKyB4UXVldWVIYW5kbGUgeFF1ZXVlOw0KKw0KKyAvLyBUYXNrIHRvIGNyZWF0ZSBhIHF1ZXVlIGFuZCBwb3N0IGEgdmFsdWUuDQorIHZvaWQgdkFUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHN0cnVjdCBBTWVzc2FnZSAqcHhNZXNzYWdlOw0KKw0KKwkvLyBDcmVhdGUgYSBxdWV1ZSBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgMTAgcG9pbnRlcnMgdG8gQU1lc3NhZ2Ugc3RydWN0dXJlcy4NCisJLy8gVGhlc2Ugc2hvdWxkIGJlIHBhc3NlZCBieSBwb2ludGVyIGFzIHRoZXkgY29udGFpbiBhIGxvdCBvZiBkYXRhLg0KKwl4UXVldWUgPSB4UXVldWVDcmVhdGUoIDEwLCBzaXplb2YoIHN0cnVjdCBBTWVzc2FnZSAqICkgKTsNCisJaWYoIHhRdWV1ZSA9PSAwICkNCisJew0KKwkJLy8gRmFpbGVkIHRvIGNyZWF0ZSB0aGUgcXVldWUuDQorCX0NCisNCisJLy8gLi4uDQorDQorCS8vIFNlbmQgYSBwb2ludGVyIHRvIGEgc3RydWN0IEFNZXNzYWdlIG9iamVjdC4gIERvbid0IGJsb2NrIGlmIHRoZQ0KKwkvLyBxdWV1ZSBpcyBhbHJlYWR5IGZ1bGwuDQorCXB4TWVzc2FnZSA9ICYgeE1lc3NhZ2U7DQorCXhRdWV1ZVNlbmQoIHhRdWV1ZSwgKCB2b2lkICogKSAmcHhNZXNzYWdlLCAoIHBvcnRUaWNrVHlwZSApIDAgKTsNCisNCisJLy8gLi4uIFJlc3Qgb2YgdGFzayBjb2RlLg0KKyB9DQorDQorIC8vIFRhc2sgdG8gcGVlayB0aGUgZGF0YSBmcm9tIHRoZSBxdWV1ZS4NCisgdm9pZCB2QURpZmZlcmVudFRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQorIHsNCisgc3RydWN0IEFNZXNzYWdlICpweFJ4ZWRNZXNzYWdlOw0KKw0KKwlpZiggeFF1ZXVlICE9IDAgKQ0KKwl7DQorCQkvLyBQZWVrIGEgbWVzc2FnZSBvbiB0aGUgY3JlYXRlZCBxdWV1ZS4gIEJsb2NrIGZvciAxMCB0aWNrcyBpZiBhDQorCQkvLyBtZXNzYWdlIGlzIG5vdCBpbW1lZGlhdGVseSBhdmFpbGFibGUuDQorCQlpZiggeFF1ZXVlUGVlayggeFF1ZXVlLCAmKCBweFJ4ZWRNZXNzYWdlICksICggcG9ydFRpY2tUeXBlICkgMTAgKSApDQorCQl7DQorCQkJLy8gcGNSeGVkTWVzc2FnZSBub3cgcG9pbnRzIHRvIHRoZSBzdHJ1Y3QgQU1lc3NhZ2UgdmFyaWFibGUgcG9zdGVkDQorCQkJLy8gYnkgdkFUYXNrLCBidXQgdGhlIGl0ZW0gc3RpbGwgcmVtYWlucyBvbiB0aGUgcXVldWUuDQorCQl9DQorCX0NCisNCisJLy8gLi4uIFJlc3Qgb2YgdGFzayBjb2RlLg0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB4UXVldWVSZWNlaXZlIHhRdWV1ZVJlY2VpdmUNCisgKiBcaW5ncm91cCBRdWV1ZU1hbmFnZW1lbnQNCisgKi8NCisjZGVmaW5lIHhRdWV1ZVBlZWsoIHhRdWV1ZSwgcHZCdWZmZXIsIHhUaWNrc1RvV2FpdCApIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCAoIHhRdWV1ZSApLCAoIHB2QnVmZmVyICksICggeFRpY2tzVG9XYWl0ICksIHBkVFJVRSApDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVJlY2VpdmUoDQorCQkJCQkJCQkgeFF1ZXVlSGFuZGxlIHhRdWV1ZSwNCisJCQkJCQkJCSB2b2lkICpwdkJ1ZmZlciwNCisJCQkJCQkJCSBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0DQorCQkJCQkJCSk7PC9wcmU+DQorICoNCisgKiBUaGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyB0aGUgeFF1ZXVlR2VuZXJpY1JlY2VpdmUoKSBmdW5jdGlvbi4NCisgKg0KKyAqIFJlY2VpdmUgYW4gaXRlbSBmcm9tIGEgcXVldWUuICBUaGUgaXRlbSBpcyByZWNlaXZlZCBieSBjb3B5IHNvIGEgYnVmZmVyIG9mDQorICogYWRlcXVhdGUgc2l6ZSBtdXN0IGJlIHByb3ZpZGVkLiAgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byB0aGUgYnVmZmVyDQorICogd2FzIGRlZmluZWQgd2hlbiB0aGUgcXVldWUgd2FzIGNyZWF0ZWQuDQorICoNCisgKiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgaXRlbXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gIFNlZQ0KKyAqIHhRdWV1ZVJlY2VpdmVGcm9tSVNSIGZvciBhbiBhbHRlcm5hdGl2ZSB0aGF0IGNhbi4NCisgKg0KKyAqIEBwYXJhbSBweFF1ZXVlIFRoZSBoYW5kbGUgdG8gdGhlIHF1ZXVlIGZyb20gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUNCisgKiByZWNlaXZlZC4NCisgKg0KKyAqIEBwYXJhbSBwdkJ1ZmZlciBQb2ludGVyIHRvIHRoZSBidWZmZXIgaW50byB3aGljaCB0aGUgcmVjZWl2ZWQgaXRlbSB3aWxsDQorICogYmUgY29waWVkLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBhbiBpdGVtIHRvIHJlY2VpdmUgc2hvdWxkIHRoZSBxdWV1ZSBiZSBlbXB0eSBhdCB0aGUgdGltZQ0KKyAqIG9mIHRoZSBjYWxsLgkgeFF1ZXVlUmVjZWl2ZSgpIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHhUaWNrc1RvV2FpdA0KKyAqIGlzIHplcm8gYW5kIHRoZSBxdWV1ZSBpcyBlbXB0eS4gIFRoZSB0aW1lIGlzIGRlZmluZWQgaW4gdGljayBwZXJpb2RzIHNvIHRoZQ0KKyAqIGNvbnN0YW50IHBvcnRUSUNLX1JBVEVfTVMgc2hvdWxkIGJlIHVzZWQgdG8gY29udmVydCB0byByZWFsIHRpbWUgaWYgdGhpcyBpcw0KKyAqIHJlcXVpcmVkLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgYW4gaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlLA0KKyAqIG90aGVyd2lzZSBwZEZBTFNFLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyBzdHJ1Y3QgQU1lc3NhZ2UNCisgew0KKwljaGFyIHVjTWVzc2FnZUlEOw0KKwljaGFyIHVjRGF0YVsgMjAgXTsNCisgfSB4TWVzc2FnZTsNCisNCisgeFF1ZXVlSGFuZGxlIHhRdWV1ZTsNCisNCisgLy8gVGFzayB0byBjcmVhdGUgYSBxdWV1ZSBhbmQgcG9zdCBhIHZhbHVlLg0KKyB2b2lkIHZBVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisgew0KKyBzdHJ1Y3QgQU1lc3NhZ2UgKnB4TWVzc2FnZTsNCisNCisJLy8gQ3JlYXRlIGEgcXVldWUgY2FwYWJsZSBvZiBjb250YWluaW5nIDEwIHBvaW50ZXJzIHRvIEFNZXNzYWdlIHN0cnVjdHVyZXMuDQorCS8vIFRoZXNlIHNob3VsZCBiZSBwYXNzZWQgYnkgcG9pbnRlciBhcyB0aGV5IGNvbnRhaW4gYSBsb3Qgb2YgZGF0YS4NCisJeFF1ZXVlID0geFF1ZXVlQ3JlYXRlKCAxMCwgc2l6ZW9mKCBzdHJ1Y3QgQU1lc3NhZ2UgKiApICk7DQorCWlmKCB4UXVldWUgPT0gMCApDQorCXsNCisJCS8vIEZhaWxlZCB0byBjcmVhdGUgdGhlIHF1ZXVlLg0KKwl9DQorDQorCS8vIC4uLg0KKw0KKwkvLyBTZW5kIGEgcG9pbnRlciB0byBhIHN0cnVjdCBBTWVzc2FnZSBvYmplY3QuICBEb24ndCBibG9jayBpZiB0aGUNCisJLy8gcXVldWUgaXMgYWxyZWFkeSBmdWxsLg0KKwlweE1lc3NhZ2UgPSAmIHhNZXNzYWdlOw0KKwl4UXVldWVTZW5kKCB4UXVldWUsICggdm9pZCAqICkgJnB4TWVzc2FnZSwgKCBwb3J0VGlja1R5cGUgKSAwICk7DQorDQorCS8vIC4uLiBSZXN0IG9mIHRhc2sgY29kZS4NCisgfQ0KKw0KKyAvLyBUYXNrIHRvIHJlY2VpdmUgZnJvbSB0aGUgcXVldWUuDQorIHZvaWQgdkFEaWZmZXJlbnRUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHN0cnVjdCBBTWVzc2FnZSAqcHhSeGVkTWVzc2FnZTsNCisNCisJaWYoIHhRdWV1ZSAhPSAwICkNCisJew0KKwkJLy8gUmVjZWl2ZSBhIG1lc3NhZ2Ugb24gdGhlIGNyZWF0ZWQgcXVldWUuICBCbG9jayBmb3IgMTAgdGlja3MgaWYgYQ0KKwkJLy8gbWVzc2FnZSBpcyBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLg0KKwkJaWYoIHhRdWV1ZVJlY2VpdmUoIHhRdWV1ZSwgJiggcHhSeGVkTWVzc2FnZSApLCAoIHBvcnRUaWNrVHlwZSApIDEwICkgKQ0KKwkJew0KKwkJCS8vIHBjUnhlZE1lc3NhZ2Ugbm93IHBvaW50cyB0byB0aGUgc3RydWN0IEFNZXNzYWdlIHZhcmlhYmxlIHBvc3RlZA0KKwkJCS8vIGJ5IHZBVGFzay4NCisJCX0NCisJfQ0KKw0KKwkvLyAuLi4gUmVzdCBvZiB0YXNrIGNvZGUuDQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhRdWV1ZVJlY2VpdmUgeFF1ZXVlUmVjZWl2ZQ0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KKyNkZWZpbmUgeFF1ZXVlUmVjZWl2ZSggeFF1ZXVlLCBwdkJ1ZmZlciwgeFRpY2tzVG9XYWl0ICkgeFF1ZXVlR2VuZXJpY1JlY2VpdmUoICggeFF1ZXVlICksICggcHZCdWZmZXIgKSwgKCB4VGlja3NUb1dhaXQgKSwgcGRGQUxTRSApDQorDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKA0KKwkJCQkJCQkJCSAgIHhRdWV1ZUhhbmRsZQl4UXVldWUsDQorCQkJCQkJCQkJICAgdm9pZAkqcHZCdWZmZXIsDQorCQkJCQkJCQkJICAgcG9ydFRpY2tUeXBlCXhUaWNrc1RvV2FpdA0KKwkJCQkJCQkJCSAgIHBvcnRCQVNFX1RZUEUJeEp1c3RQZWVrDQorCQkJCQkJCQkJKTs8L3ByZT4NCisgKg0KKyAqIEl0IGlzIHByZWZlcnJlZCB0aGF0IHRoZSBtYWNybyB4UXVldWVSZWNlaXZlKCkgYmUgdXNlZCByYXRoZXIgdGhhbiBjYWxsaW5nDQorICogdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4NCisgKg0KKyAqIFJlY2VpdmUgYW4gaXRlbSBmcm9tIGEgcXVldWUuICBUaGUgaXRlbSBpcyByZWNlaXZlZCBieSBjb3B5IHNvIGEgYnVmZmVyIG9mDQorICogYWRlcXVhdGUgc2l6ZSBtdXN0IGJlIHByb3ZpZGVkLiAgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byB0aGUgYnVmZmVyDQorICogd2FzIGRlZmluZWQgd2hlbiB0aGUgcXVldWUgd2FzIGNyZWF0ZWQuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gIFNlZQ0KKyAqIHhRdWV1ZVJlY2VpdmVGcm9tSVNSIGZvciBhbiBhbHRlcm5hdGl2ZSB0aGF0IGNhbi4NCisgKg0KKyAqIEBwYXJhbSBweFF1ZXVlIFRoZSBoYW5kbGUgdG8gdGhlIHF1ZXVlIGZyb20gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUNCisgKiByZWNlaXZlZC4NCisgKg0KKyAqIEBwYXJhbSBwdkJ1ZmZlciBQb2ludGVyIHRvIHRoZSBidWZmZXIgaW50byB3aGljaCB0aGUgcmVjZWl2ZWQgaXRlbSB3aWxsDQorICogYmUgY29waWVkLg0KKyAqDQorICogQHBhcmFtIHhUaWNrc1RvV2FpdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBzaG91bGQgYmxvY2sNCisgKiB3YWl0aW5nIGZvciBhbiBpdGVtIHRvIHJlY2VpdmUgc2hvdWxkIHRoZSBxdWV1ZSBiZSBlbXB0eSBhdCB0aGUgdGltZQ0KKyAqIG9mIHRoZSBjYWxsLgkgVGhlIHRpbWUgaXMgZGVmaW5lZCBpbiB0aWNrIHBlcmlvZHMgc28gdGhlIGNvbnN0YW50DQorICogcG9ydFRJQ0tfUkFURV9NUyBzaG91bGQgYmUgdXNlZCB0byBjb252ZXJ0IHRvIHJlYWwgdGltZSBpZiB0aGlzIGlzIHJlcXVpcmVkLg0KKyAqIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZA0KKyAqIHhUaWNrc1RvV2FpdCBpcyAwLg0KKyAqDQorICogQHBhcmFtIHhKdXN0UGVlayBXaGVuIHNldCB0byB0cnVlLCB0aGUgaXRlbSByZWNlaXZlZCBmcm9tIHRoZSBxdWV1ZSBpcyBub3QNCisgKiBhY3R1YWxseSByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIC0gbWVhbmluZyBhIHN1YnNlcXVlbnQgY2FsbCB0bw0KKyAqIHhRdWV1ZVJlY2VpdmUoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBpdGVtLiAgV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBpdGVtDQorICogYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgcXVldWUgaXMgYWxzbyByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgYW4gaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlLA0KKyAqIG90aGVyd2lzZSBwZEZBTFNFLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyBzdHJ1Y3QgQU1lc3NhZ2UNCisgew0KKwljaGFyIHVjTWVzc2FnZUlEOw0KKwljaGFyIHVjRGF0YVsgMjAgXTsNCisgfSB4TWVzc2FnZTsNCisNCisgeFF1ZXVlSGFuZGxlIHhRdWV1ZTsNCisNCisgLy8gVGFzayB0byBjcmVhdGUgYSBxdWV1ZSBhbmQgcG9zdCBhIHZhbHVlLg0KKyB2b2lkIHZBVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisgew0KKyBzdHJ1Y3QgQU1lc3NhZ2UgKnB4TWVzc2FnZTsNCisNCisJLy8gQ3JlYXRlIGEgcXVldWUgY2FwYWJsZSBvZiBjb250YWluaW5nIDEwIHBvaW50ZXJzIHRvIEFNZXNzYWdlIHN0cnVjdHVyZXMuDQorCS8vIFRoZXNlIHNob3VsZCBiZSBwYXNzZWQgYnkgcG9pbnRlciBhcyB0aGV5IGNvbnRhaW4gYSBsb3Qgb2YgZGF0YS4NCisJeFF1ZXVlID0geFF1ZXVlQ3JlYXRlKCAxMCwgc2l6ZW9mKCBzdHJ1Y3QgQU1lc3NhZ2UgKiApICk7DQorCWlmKCB4UXVldWUgPT0gMCApDQorCXsNCisJCS8vIEZhaWxlZCB0byBjcmVhdGUgdGhlIHF1ZXVlLg0KKwl9DQorDQorCS8vIC4uLg0KKw0KKwkvLyBTZW5kIGEgcG9pbnRlciB0byBhIHN0cnVjdCBBTWVzc2FnZSBvYmplY3QuICBEb24ndCBibG9jayBpZiB0aGUNCisJLy8gcXVldWUgaXMgYWxyZWFkeSBmdWxsLg0KKwlweE1lc3NhZ2UgPSAmIHhNZXNzYWdlOw0KKwl4UXVldWVTZW5kKCB4UXVldWUsICggdm9pZCAqICkgJnB4TWVzc2FnZSwgKCBwb3J0VGlja1R5cGUgKSAwICk7DQorDQorCS8vIC4uLiBSZXN0IG9mIHRhc2sgY29kZS4NCisgfQ0KKw0KKyAvLyBUYXNrIHRvIHJlY2VpdmUgZnJvbSB0aGUgcXVldWUuDQorIHZvaWQgdkFEaWZmZXJlbnRUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHN0cnVjdCBBTWVzc2FnZSAqcHhSeGVkTWVzc2FnZTsNCisNCisJaWYoIHhRdWV1ZSAhPSAwICkNCisJew0KKwkJLy8gUmVjZWl2ZSBhIG1lc3NhZ2Ugb24gdGhlIGNyZWF0ZWQgcXVldWUuICBCbG9jayBmb3IgMTAgdGlja3MgaWYgYQ0KKwkJLy8gbWVzc2FnZSBpcyBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLg0KKwkJaWYoIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCB4UXVldWUsICYoIHB4UnhlZE1lc3NhZ2UgKSwgKCBwb3J0VGlja1R5cGUgKSAxMCApICkNCisJCXsNCisJCQkvLyBwY1J4ZWRNZXNzYWdlIG5vdyBwb2ludHMgdG8gdGhlIHN0cnVjdCBBTWVzc2FnZSB2YXJpYWJsZSBwb3N0ZWQNCisJCQkvLyBieSB2QVRhc2suDQorCQl9DQorCX0NCisNCisJLy8gLi4uIFJlc3Qgb2YgdGFzayBjb2RlLg0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB4UXVldWVSZWNlaXZlIHhRdWV1ZVJlY2VpdmUNCisgKiBcaW5ncm91cCBRdWV1ZU1hbmFnZW1lbnQNCisgKi8NCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVHZW5lcmljUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhKdXN0UGVlayApOw0KKw0KKy8qKg0KKyAqIHF1ZXVlLiBoDQorICogPHByZT51bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UXVldWVNZXNzYWdlc1dhaXRpbmcoIGNvbnN0IHhRdWV1ZUhhbmRsZSB4UXVldWUgKTs8L3ByZT4NCisgKg0KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHN0b3JlZCBpbiBhIHF1ZXVlLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBBIGhhbmRsZSB0byB0aGUgcXVldWUgYmVpbmcgcXVlcmllZC4NCisgKg0KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHF1ZXVlLg0KKyAqDQorICogXHBhZ2UgdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZyB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nDQorICogXGluZ3JvdXAgUXVldWVNYW5hZ2VtZW50DQorICovDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nKCBjb25zdCB4UXVldWVIYW5kbGUgeFF1ZXVlICk7DQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPnZvaWQgdlF1ZXVlRGVsZXRlKCB4UXVldWVIYW5kbGUgeFF1ZXVlICk7PC9wcmU+DQorICoNCisgKiBEZWxldGUgYSBxdWV1ZSAtIGZyZWVpbmcgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBzdG9yaW5nIG9mIGl0ZW1zDQorICogcGxhY2VkIG9uIHRoZSBxdWV1ZS4NCisgKg0KKyAqIEBwYXJhbSB4UXVldWUgQSBoYW5kbGUgdG8gdGhlIHF1ZXVlIHRvIGJlIGRlbGV0ZWQuDQorICoNCisgKiBccGFnZSB2UXVldWVEZWxldGUgdlF1ZXVlRGVsZXRlDQorICogXGluZ3JvdXAgUXVldWVNYW5hZ2VtZW50DQorICovDQordm9pZCB2UXVldWVEZWxldGUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlICk7DQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVNlbmRUb0Zyb250RnJvbUlTUigNCisJCQkJCQkJCQkJIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLA0KKwkJCQkJCQkJCQkgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwNCisJCQkJCQkJCQkJIHBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4NCisJCQkJCQkJCQkgICk7DQorIDwvcHJlPg0KKyAqDQorICogVGhpcyBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgeFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCkuDQorICoNCisgKiBQb3N0IGFuIGl0ZW0gdG8gdGhlIGZyb250IG9mIGEgcXVldWUuICBJdCBpcyBzYWZlIHRvIHVzZSB0aGlzIG1hY3JvIGZyb20NCisgKiB3aXRoaW4gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4NCisgKg0KKyAqIEl0ZW1zIGFyZSBxdWV1ZWQgYnkgY29weSBub3QgcmVmZXJlbmNlIHNvIGl0IGlzIHByZWZlcmFibGUgdG8gb25seQ0KKyAqIHF1ZXVlIHNtYWxsIGl0ZW1zLCBlc3BlY2lhbGx5IHdoZW4gY2FsbGVkIGZyb20gYW4gSVNSLiAgSW4gbW9zdCBjYXNlcw0KKyAqIGl0IHdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBpdGVtIGJlaW5nIHF1ZXVlZC4NCisgKg0KKyAqIEBwYXJhbSB4UXVldWUgVGhlIGhhbmRsZSB0byB0aGUgcXVldWUgb24gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUgcG9zdGVkLg0KKyAqDQorICogQHBhcmFtIHB2SXRlbVRvUXVldWUgQSBwb2ludGVyIHRvIHRoZSBpdGVtIHRoYXQgaXMgdG8gYmUgcGxhY2VkIG9uIHRoZQ0KKyAqIHF1ZXVlLiAgVGhlIHNpemUgb2YgdGhlIGl0ZW1zIHRoZSBxdWV1ZSB3aWxsIGhvbGQgd2FzIGRlZmluZWQgd2hlbiB0aGUNCisgKiBxdWV1ZSB3YXMgY3JlYXRlZCwgc28gdGhpcyBtYW55IGJ5dGVzIHdpbGwgYmUgY29waWVkIGZyb20gcHZJdGVtVG9RdWV1ZQ0KKyAqIGludG8gdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYS4NCisgKg0KKyAqIEBwYXJhbSBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHhRdWV1ZVNlbmRUb0Zyb250RnJvbUlTUigpIHdpbGwgc2V0DQorICogKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gdG8gcGRUUlVFIGlmIHNlbmRpbmcgdG8gdGhlIHF1ZXVlIGNhdXNlZCBhIHRhc2sNCisgKiB0byB1bmJsb2NrLCBhbmQgdGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50bHkNCisgKiBydW5uaW5nIHRhc2suICBJZiB4UXVldWVTZW5kVG9Gcm9tRnJvbUlTUigpIHNldHMgdGhpcyB2YWx1ZSB0byBwZFRSVUUgdGhlbg0KKyAqIGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkIGJlIHJlcXVlc3RlZCBiZWZvcmUgdGhlIGludGVycnVwdCBpcyBleGl0ZWQuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHF1ZXVlLCBvdGhlcndpc2UNCisgKiBlcnJRVUVVRV9GVUxMLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZSBmb3IgYnVmZmVyZWQgSU8gKHdoZXJlIHRoZSBJU1IgY2FuIG9idGFpbiBtb3JlIHRoYW4gb25lIHZhbHVlDQorICogcGVyIGNhbGwpOg0KKyAgIDxwcmU+DQorIHZvaWQgdkJ1ZmZlcklTUiggdm9pZCApDQorIHsNCisgY2hhciBjSW47DQorIHBvcnRCQVNFX1RZUEUgeEhpZ2hlclByaW9yaXRUYXNrV29rZW47DQorDQorCS8vIFdlIGhhdmUgbm90IHdva2VuIGEgdGFzayBhdCB0aGUgc3RhcnQgb2YgdGhlIElTUi4NCisJeEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRGQUxTRTsNCisNCisJLy8gTG9vcCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVtcHR5Lg0KKwlkbw0KKwl7DQorCQkvLyBPYnRhaW4gYSBieXRlIGZyb20gdGhlIGJ1ZmZlci4NCisJCWNJbiA9IHBvcnRJTlBVVF9CWVRFKCBSWF9SRUdJU1RFUl9BRERSRVNTICk7DQorDQorCQkvLyBQb3N0IHRoZSBieXRlLg0KKwkJeFF1ZXVlU2VuZFRvRnJvbnRGcm9tSVNSKCB4UnhRdWV1ZSwgJmNJbiwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKw0KKwl9IHdoaWxlKCBwb3J0SU5QVVRfQllURSggQlVGRkVSX0NPVU5UICkgKTsNCisNCisJLy8gTm93IHRoZSBidWZmZXIgaXMgZW1wdHkgd2UgY2FuIHN3aXRjaCBjb250ZXh0IGlmIG5lY2Vzc2FyeS4NCisJaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQorCXsNCisJCXRhc2tZSUVMRCAoKTsNCisJfQ0KKyB9DQorIDwvcHJlPg0KKyAqDQorICogXGRlZmdyb3VwIHhRdWV1ZVNlbmRGcm9tSVNSIHhRdWV1ZVNlbmRGcm9tSVNSDQorICogXGluZ3JvdXAgUXVldWVNYW5hZ2VtZW50DQorICovDQorI2RlZmluZSB4UXVldWVTZW5kVG9Gcm9udEZyb21JU1IoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSB4UXVldWVHZW5lcmljU2VuZEZyb21JU1IoICggcHhRdWV1ZSApLCAoIHB2SXRlbVRvUXVldWUgKSwgKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICksIHF1ZXVlU0VORF9UT19GUk9OVCApDQorDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVNlbmRUb0JhY2tGcm9tSVNSKA0KKwkJCQkJCQkJCQkgeFF1ZXVlSGFuZGxlIHB4UXVldWUsDQorCQkJCQkJCQkJCSBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLA0KKwkJCQkJCQkJCQkgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbg0KKwkJCQkJCQkJCSAgKTsNCisgPC9wcmU+DQorICoNCisgKiBUaGlzIGlzIGEgbWFjcm8gdGhhdCBjYWxscyB4UXVldWVHZW5lcmljU2VuZEZyb21JU1IoKS4NCisgKg0KKyAqIFBvc3QgYW4gaXRlbSB0byB0aGUgYmFjayBvZiBhIHF1ZXVlLiAgSXQgaXMgc2FmZSB0byB1c2UgdGhpcyBtYWNybyBmcm9tDQorICogd2l0aGluIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuDQorICoNCisgKiBJdGVtcyBhcmUgcXVldWVkIGJ5IGNvcHkgbm90IHJlZmVyZW5jZSBzbyBpdCBpcyBwcmVmZXJhYmxlIHRvIG9ubHkNCisgKiBxdWV1ZSBzbWFsbCBpdGVtcywgZXNwZWNpYWxseSB3aGVuIGNhbGxlZCBmcm9tIGFuIElTUi4gIEluIG1vc3QgY2FzZXMNCisgKiBpdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgaXRlbSBiZWluZyBxdWV1ZWQuDQorICoNCisgKiBAcGFyYW0geFF1ZXVlIFRoZSBoYW5kbGUgdG8gdGhlIHF1ZXVlIG9uIHdoaWNoIHRoZSBpdGVtIGlzIHRvIGJlIHBvc3RlZC4NCisgKg0KKyAqIEBwYXJhbSBwdkl0ZW1Ub1F1ZXVlIEEgcG9pbnRlciB0byB0aGUgaXRlbSB0aGF0IGlzIHRvIGJlIHBsYWNlZCBvbiB0aGUNCisgKiBxdWV1ZS4gIFRoZSBzaXplIG9mIHRoZSBpdGVtcyB0aGUgcXVldWUgd2lsbCBob2xkIHdhcyBkZWZpbmVkIHdoZW4gdGhlDQorICogcXVldWUgd2FzIGNyZWF0ZWQsIHNvIHRoaXMgbWFueSBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIHB2SXRlbVRvUXVldWUNCisgKiBpbnRvIHRoZSBxdWV1ZSBzdG9yYWdlIGFyZWEuDQorICoNCisgKiBAcGFyYW0gcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUigpIHdpbGwgc2V0DQorICogKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gdG8gcGRUUlVFIGlmIHNlbmRpbmcgdG8gdGhlIHF1ZXVlIGNhdXNlZCBhIHRhc2sNCisgKiB0byB1bmJsb2NrLCBhbmQgdGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50bHkNCisgKiBydW5uaW5nIHRhc2suICBJZiB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUigpIHNldHMgdGhpcyB2YWx1ZSB0byBwZFRSVUUgdGhlbg0KKyAqIGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkIGJlIHJlcXVlc3RlZCBiZWZvcmUgdGhlIGludGVycnVwdCBpcyBleGl0ZWQuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHF1ZXVlLCBvdGhlcndpc2UNCisgKiBlcnJRVUVVRV9GVUxMLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZSBmb3IgYnVmZmVyZWQgSU8gKHdoZXJlIHRoZSBJU1IgY2FuIG9idGFpbiBtb3JlIHRoYW4gb25lIHZhbHVlDQorICogcGVyIGNhbGwpOg0KKyAgIDxwcmU+DQorIHZvaWQgdkJ1ZmZlcklTUiggdm9pZCApDQorIHsNCisgY2hhciBjSW47DQorIHBvcnRCQVNFX1RZUEUgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuOw0KKw0KKwkvLyBXZSBoYXZlIG5vdCB3b2tlbiBhIHRhc2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBJU1IuDQorCXhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkRkFMU0U7DQorDQorCS8vIExvb3AgdW50aWwgdGhlIGJ1ZmZlciBpcyBlbXB0eS4NCisJZG8NCisJew0KKwkJLy8gT2J0YWluIGEgYnl0ZSBmcm9tIHRoZSBidWZmZXIuDQorCQljSW4gPSBwb3J0SU5QVVRfQllURSggUlhfUkVHSVNURVJfQUREUkVTUyApOw0KKw0KKwkJLy8gUG9zdCB0aGUgYnl0ZS4NCisJCXhRdWV1ZVNlbmRUb0JhY2tGcm9tSVNSKCB4UnhRdWV1ZSwgJmNJbiwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKw0KKwl9IHdoaWxlKCBwb3J0SU5QVVRfQllURSggQlVGRkVSX0NPVU5UICkgKTsNCisNCisJLy8gTm93IHRoZSBidWZmZXIgaXMgZW1wdHkgd2UgY2FuIHN3aXRjaCBjb250ZXh0IGlmIG5lY2Vzc2FyeS4NCisJaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQorCXsNCisJCXRhc2tZSUVMRCAoKTsNCisJfQ0KKyB9DQorIDwvcHJlPg0KKyAqDQorICogXGRlZmdyb3VwIHhRdWV1ZVNlbmRGcm9tSVNSIHhRdWV1ZVNlbmRGcm9tSVNSDQorICogXGluZ3JvdXAgUXVldWVNYW5hZ2VtZW50DQorICovDQorI2RlZmluZSB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUiggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggKCBweFF1ZXVlICksICggcHZJdGVtVG9RdWV1ZSApLCAoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSwgcXVldWVTRU5EX1RPX0JBQ0sgKQ0KKw0KKy8qKg0KKyAqIHF1ZXVlLiBoDQorICogPHByZT4NCisgcG9ydEJBU0VfVFlQRSB4UXVldWVTZW5kRnJvbUlTUigNCisJCQkJCQkJCQkgeFF1ZXVlSGFuZGxlIHB4UXVldWUsDQorCQkJCQkJCQkJIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsDQorCQkJCQkJCQkJIHBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4NCisJCQkJCQkJCSk7DQorIDwvcHJlPg0KKyAqDQorICogVGhpcyBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgeFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCkuICBJdCBpcyBpbmNsdWRlZA0KKyAqIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgb2YgRnJlZVJUT1Mub3JnIHRoYXQgZGlkIG5vdA0KKyAqIGluY2x1ZGUgdGhlIHhRdWV1ZVNlbmRUb0JhY2tGcm9tSVNSKCkgYW5kIHhRdWV1ZVNlbmRUb0Zyb250RnJvbUlTUigpDQorICogbWFjcm9zLg0KKyAqDQorICogUG9zdCBhbiBpdGVtIHRvIHRoZSBiYWNrIG9mIGEgcXVldWUuICBJdCBpcyBzYWZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20NCisgKiB3aXRoaW4gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4NCisgKg0KKyAqIEl0ZW1zIGFyZSBxdWV1ZWQgYnkgY29weSBub3QgcmVmZXJlbmNlIHNvIGl0IGlzIHByZWZlcmFibGUgdG8gb25seQ0KKyAqIHF1ZXVlIHNtYWxsIGl0ZW1zLCBlc3BlY2lhbGx5IHdoZW4gY2FsbGVkIGZyb20gYW4gSVNSLiAgSW4gbW9zdCBjYXNlcw0KKyAqIGl0IHdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBpdGVtIGJlaW5nIHF1ZXVlZC4NCisgKg0KKyAqIEBwYXJhbSB4UXVldWUgVGhlIGhhbmRsZSB0byB0aGUgcXVldWUgb24gd2hpY2ggdGhlIGl0ZW0gaXMgdG8gYmUgcG9zdGVkLg0KKyAqDQorICogQHBhcmFtIHB2SXRlbVRvUXVldWUgQSBwb2ludGVyIHRvIHRoZSBpdGVtIHRoYXQgaXMgdG8gYmUgcGxhY2VkIG9uIHRoZQ0KKyAqIHF1ZXVlLiAgVGhlIHNpemUgb2YgdGhlIGl0ZW1zIHRoZSBxdWV1ZSB3aWxsIGhvbGQgd2FzIGRlZmluZWQgd2hlbiB0aGUNCisgKiBxdWV1ZSB3YXMgY3JlYXRlZCwgc28gdGhpcyBtYW55IGJ5dGVzIHdpbGwgYmUgY29waWVkIGZyb20gcHZJdGVtVG9RdWV1ZQ0KKyAqIGludG8gdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYS4NCisgKg0KKyAqIEBwYXJhbSBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHhRdWV1ZVNlbmRGcm9tSVNSKCkgd2lsbCBzZXQNCisgKiAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB0byBwZFRSVUUgaWYgc2VuZGluZyB0byB0aGUgcXVldWUgY2F1c2VkIGEgdGFzaw0KKyAqIHRvIHVuYmxvY2ssIGFuZCB0aGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnRseQ0KKyAqIHJ1bm5pbmcgdGFzay4gIElmIHhRdWV1ZVNlbmRGcm9tSVNSKCkgc2V0cyB0aGlzIHZhbHVlIHRvIHBkVFJVRSB0aGVuDQorICogYSBjb250ZXh0IHN3aXRjaCBzaG91bGQgYmUgcmVxdWVzdGVkIGJlZm9yZSB0aGUgaW50ZXJydXB0IGlzIGV4aXRlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgcXVldWUsIG90aGVyd2lzZQ0KKyAqIGVyclFVRVVFX0ZVTEwuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlIGZvciBidWZmZXJlZCBJTyAod2hlcmUgdGhlIElTUiBjYW4gb2J0YWluIG1vcmUgdGhhbiBvbmUgdmFsdWUNCisgKiBwZXIgY2FsbCk6DQorICAgPHByZT4NCisgdm9pZCB2QnVmZmVySVNSKCB2b2lkICkNCisgew0KKyBjaGFyIGNJbjsNCisgcG9ydEJBU0VfVFlQRSB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW47DQorDQorCS8vIFdlIGhhdmUgbm90IHdva2VuIGEgdGFzayBhdCB0aGUgc3RhcnQgb2YgdGhlIElTUi4NCisJeEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRGQUxTRTsNCisNCisJLy8gTG9vcCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVtcHR5Lg0KKwlkbw0KKwl7DQorCQkvLyBPYnRhaW4gYSBieXRlIGZyb20gdGhlIGJ1ZmZlci4NCisJCWNJbiA9IHBvcnRJTlBVVF9CWVRFKCBSWF9SRUdJU1RFUl9BRERSRVNTICk7DQorDQorCQkvLyBQb3N0IHRoZSBieXRlLg0KKwkJeFF1ZXVlU2VuZEZyb21JU1IoIHhSeFF1ZXVlLCAmY0luLCAmeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICk7DQorDQorCX0gd2hpbGUoIHBvcnRJTlBVVF9CWVRFKCBCVUZGRVJfQ09VTlQgKSApOw0KKw0KKwkvLyBOb3cgdGhlIGJ1ZmZlciBpcyBlbXB0eSB3ZSBjYW4gc3dpdGNoIGNvbnRleHQgaWYgbmVjZXNzYXJ5Lg0KKwlpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCisJew0KKwkJLy8gQWN0dWFsIG1hY3JvIHVzZWQgaGVyZSBpcyBwb3J0IHNwZWNpZmljLg0KKwkJdGFza1lJRUxEX0ZST01fSVNSICgpOw0KKwl9DQorIH0NCisgPC9wcmU+DQorICoNCisgKiBcZGVmZ3JvdXAgeFF1ZXVlU2VuZEZyb21JU1IgeFF1ZXVlU2VuZEZyb21JU1INCisgKiBcaW5ncm91cCBRdWV1ZU1hbmFnZW1lbnQNCisgKi8NCisjZGVmaW5lIHhRdWV1ZVNlbmRGcm9tSVNSKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgeFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCAoIHB4UXVldWUgKSwgKCBwdkl0ZW1Ub1F1ZXVlICksICggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApLCBxdWV1ZVNFTkRfVE9fQkFDSyApDQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUigNCisJCQkJCQkJCQkJICAgeFF1ZXVlSGFuZGxlCXB4UXVldWUsDQorCQkJCQkJCQkJCSAgIGNvbnN0CXZvaWQJKnB2SXRlbVRvUXVldWUsDQorCQkJCQkJCQkJCSAgIHBvcnRCQVNFX1RZUEUJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sDQorCQkJCQkJCQkJCSAgIHBvcnRCQVNFX1RZUEUJeENvcHlQb3NpdGlvbg0KKwkJCQkJCQkJCSAgICk7DQorIDwvcHJlPg0KKyAqDQorICogSXQgaXMgcHJlZmVycmVkIHRoYXQgdGhlIG1hY3JvcyB4UXVldWVTZW5kRnJvbUlTUigpLA0KKyAqIHhRdWV1ZVNlbmRUb0Zyb250RnJvbUlTUigpIGFuZCB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUigpIGJlIHVzZWQgaW4gcGxhY2UNCisgKiBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuDQorICoNCisgKiBQb3N0IGFuIGl0ZW0gb24gYSBxdWV1ZS4gIEl0IGlzIHNhZmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4NCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLg0KKyAqDQorICogSXRlbXMgYXJlIHF1ZXVlZCBieSBjb3B5IG5vdCByZWZlcmVuY2Ugc28gaXQgaXMgcHJlZmVyYWJsZSB0byBvbmx5DQorICogcXVldWUgc21hbGwgaXRlbXMsIGVzcGVjaWFsbHkgd2hlbiBjYWxsZWQgZnJvbSBhbiBJU1IuICBJbiBtb3N0IGNhc2VzDQorICogaXQgd291bGQgYmUgcHJlZmVyYWJsZSB0byBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIGl0ZW0gYmVpbmcgcXVldWVkLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIHRvIHRoZSBxdWV1ZSBvbiB3aGljaCB0aGUgaXRlbSBpcyB0byBiZSBwb3N0ZWQuDQorICoNCisgKiBAcGFyYW0gcHZJdGVtVG9RdWV1ZSBBIHBvaW50ZXIgdG8gdGhlIGl0ZW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgb24gdGhlDQorICogcXVldWUuICBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgdGhlIHF1ZXVlIHdpbGwgaG9sZCB3YXMgZGVmaW5lZCB3aGVuIHRoZQ0KKyAqIHF1ZXVlIHdhcyBjcmVhdGVkLCBzbyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBwdkl0ZW1Ub1F1ZXVlDQorICogaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLg0KKyAqDQorICogQHBhcmFtIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4geFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCkgd2lsbCBzZXQNCisgKiAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB0byBwZFRSVUUgaWYgc2VuZGluZyB0byB0aGUgcXVldWUgY2F1c2VkIGEgdGFzaw0KKyAqIHRvIHVuYmxvY2ssIGFuZCB0aGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnRseQ0KKyAqIHJ1bm5pbmcgdGFzay4gIElmIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUigpIHNldHMgdGhpcyB2YWx1ZSB0byBwZFRSVUUgdGhlbg0KKyAqIGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkIGJlIHJlcXVlc3RlZCBiZWZvcmUgdGhlIGludGVycnVwdCBpcyBleGl0ZWQuDQorICoNCisgKiBAcGFyYW0geENvcHlQb3NpdGlvbiBDYW4gdGFrZSB0aGUgdmFsdWUgcXVldWVTRU5EX1RPX0JBQ0sgdG8gcGxhY2UgdGhlDQorICogaXRlbSBhdCB0aGUgYmFjayBvZiB0aGUgcXVldWUsIG9yIHF1ZXVlU0VORF9UT19GUk9OVCB0byBwbGFjZSB0aGUgaXRlbQ0KKyAqIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgKGZvciBoaWdoIHByaW9yaXR5IG1lc3NhZ2VzKS4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgcXVldWUsIG90aGVyd2lzZQ0KKyAqIGVyclFVRVVFX0ZVTEwuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlIGZvciBidWZmZXJlZCBJTyAod2hlcmUgdGhlIElTUiBjYW4gb2J0YWluIG1vcmUgdGhhbiBvbmUgdmFsdWUNCisgKiBwZXIgY2FsbCk6DQorICAgPHByZT4NCisgdm9pZCB2QnVmZmVySVNSKCB2b2lkICkNCisgew0KKyBjaGFyIGNJbjsNCisgcG9ydEJBU0VfVFlQRSB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW5CeVBvc3Q7DQorDQorCS8vIFdlIGhhdmUgbm90IHdva2VuIGEgdGFzayBhdCB0aGUgc3RhcnQgb2YgdGhlIElTUi4NCisJeEhpZ2hlclByaW9yaXR5VGFza1dva2VuQnlQb3N0ID0gcGRGQUxTRTsNCisNCisJLy8gTG9vcCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVtcHR5Lg0KKwlkbw0KKwl7DQorCQkvLyBPYnRhaW4gYSBieXRlIGZyb20gdGhlIGJ1ZmZlci4NCisJCWNJbiA9IHBvcnRJTlBVVF9CWVRFKCBSWF9SRUdJU1RFUl9BRERSRVNTICk7DQorDQorCQkvLyBQb3N0IGVhY2ggYnl0ZS4NCisJCXhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggeFJ4UXVldWUsICZjSW4sICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW5CeVBvc3QsIHF1ZXVlU0VORF9UT19CQUNLICk7DQorDQorCX0gd2hpbGUoIHBvcnRJTlBVVF9CWVRFKCBCVUZGRVJfQ09VTlQgKSApOw0KKw0KKwkvLyBOb3cgdGhlIGJ1ZmZlciBpcyBlbXB0eSB3ZSBjYW4gc3dpdGNoIGNvbnRleHQgaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHRoZQ0KKwkvLyBuYW1lIG9mIHRoZSB5aWVsZCBmdW5jdGlvbiByZXF1aXJlZCBpcyBwb3J0IHNwZWNpZmljLg0KKwlpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuQnlQb3N0ICkNCisJew0KKwkJdGFza1lJRUxEX1lJRUxEX0ZST01fSVNSKCk7DQorCX0NCisgfQ0KKyA8L3ByZT4NCisgKg0KKyAqIFxkZWZncm91cCB4UXVldWVTZW5kRnJvbUlTUiB4UXVldWVTZW5kRnJvbUlTUg0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiwgcG9ydEJBU0VfVFlQRSB4Q29weVBvc2l0aW9uICk7DQorDQorLyoqDQorICogcXVldWUuIGgNCisgKiA8cHJlPg0KKyBwb3J0QkFTRV9UWVBFIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKA0KKwkJCQkJCQkJCSAgIHhRdWV1ZUhhbmRsZQlweFF1ZXVlLA0KKwkJCQkJCQkJCSAgIHZvaWQJKnB2QnVmZmVyLA0KKwkJCQkJCQkJCSAgIHBvcnRCQVNFX1RZUEUJKnB4VGFza1dva2VuDQorCQkJCQkJCQkgICApOw0KKyAqIDwvcHJlPg0KKyAqDQorICogUmVjZWl2ZSBhbiBpdGVtIGZyb20gYSBxdWV1ZS4gIEl0IGlzIHNhZmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4NCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLg0KKyAqDQorICogQHBhcmFtIHB4UXVldWUgVGhlIGhhbmRsZSB0byB0aGUgcXVldWUgZnJvbSB3aGljaCB0aGUgaXRlbSBpcyB0byBiZQ0KKyAqIHJlY2VpdmVkLg0KKyAqDQorICogQHBhcmFtIHB2QnVmZmVyIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSByZWNlaXZlZCBpdGVtIHdpbGwNCisgKiBiZSBjb3BpZWQuDQorICoNCisgKiBAcGFyYW0gcHhUYXNrV29rZW4gQSB0YXNrIG1heSBiZSBibG9ja2VkIHdhaXRpbmcgZm9yIHNwYWNlIHRvIGJlY29tZQ0KKyAqIGF2YWlsYWJsZSBvbiB0aGUgcXVldWUuICBJZiB4UXVldWVSZWNlaXZlRnJvbUlTUiBjYXVzZXMgc3VjaCBhIHRhc2sgdG8NCisgKiB1bmJsb2NrICpweFRhc2tXb2tlbiB3aWxsIGdldCBzZXQgdG8gcGRUUlVFLCBvdGhlcndpc2UgKnB4VGFza1dva2VuIHdpbGwNCisgKiByZW1haW4gdW5jaGFuZ2VkLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgYW4gaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlLA0KKyAqIG90aGVyd2lzZSBwZEZBTFNFLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKw0KKyB4UXVldWVIYW5kbGUgeFF1ZXVlOw0KKw0KKyAvLyBGdW5jdGlvbiB0byBjcmVhdGUgYSBxdWV1ZSBhbmQgcG9zdCBzb21lIHZhbHVlcy4NCisgdm9pZCB2QUZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIGNoYXIgY1ZhbHVlVG9Qb3N0Ow0KKyBjb25zdCBwb3J0VGlja1R5cGUgeEJsb2NrVGltZSA9ICggcG9ydFRpY2tUeXBlICkweGZmOw0KKw0KKwkvLyBDcmVhdGUgYSBxdWV1ZSBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgMTAgY2hhcmFjdGVycy4NCisJeFF1ZXVlID0geFF1ZXVlQ3JlYXRlKCAxMCwgc2l6ZW9mKCBjaGFyICkgKTsNCisJaWYoIHhRdWV1ZSA9PSAwICkNCisJew0KKwkJLy8gRmFpbGVkIHRvIGNyZWF0ZSB0aGUgcXVldWUuDQorCX0NCisNCisJLy8gLi4uDQorDQorCS8vIFBvc3Qgc29tZSBjaGFyYWN0ZXJzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiBhbiBJU1IuICBJZiB0aGUgcXVldWUNCisJLy8gaXMgZnVsbCB0aGVuIHRoaXMgdGFzayB3aWxsIGJsb2NrIGZvciB4QmxvY2tUaW1lIHRpY2tzLg0KKwljVmFsdWVUb1Bvc3QgPSAnYSc7DQorCXhRdWV1ZVNlbmQoIHhRdWV1ZSwgKCB2b2lkICogKSAmY1ZhbHVlVG9Qb3N0LCB4QmxvY2tUaW1lICk7DQorCWNWYWx1ZVRvUG9zdCA9ICdiJzsNCisJeFF1ZXVlU2VuZCggeFF1ZXVlLCAoIHZvaWQgKiApICZjVmFsdWVUb1Bvc3QsIHhCbG9ja1RpbWUgKTsNCisNCisJLy8gLi4uIGtlZXAgcG9zdGluZyBjaGFyYWN0ZXJzIC4uLiB0aGlzIHRhc2sgbWF5IGJsb2NrIHdoZW4gdGhlIHF1ZXVlDQorCS8vIGJlY29tZXMgZnVsbC4NCisNCisJY1ZhbHVlVG9Qb3N0ID0gJ2MnOw0KKwl4UXVldWVTZW5kKCB4UXVldWUsICggdm9pZCAqICkgJmNWYWx1ZVRvUG9zdCwgeEJsb2NrVGltZSApOw0KKyB9DQorDQorIC8vIElTUiB0aGF0IG91dHB1dHMgYWxsIHRoZSBjaGFyYWN0ZXJzIHJlY2VpdmVkIG9uIHRoZSBxdWV1ZS4NCisgdm9pZCB2SVNSX1JvdXRpbmUoIHZvaWQgKQ0KKyB7DQorIHBvcnRCQVNFX1RZUEUgeFRhc2tXb2tlbkJ5UmVjZWl2ZSA9IHBkRkFMU0U7DQorIGNoYXIgY1J4ZWRDaGFyOw0KKw0KKwl3aGlsZSggeFF1ZXVlUmVjZWl2ZUZyb21JU1IoIHhRdWV1ZSwgKCB2b2lkICogKSAmY1J4ZWRDaGFyLCAmeFRhc2tXb2tlbkJ5UmVjZWl2ZSkgKQ0KKwl7DQorCQkvLyBBIGNoYXJhY3RlciB3YXMgcmVjZWl2ZWQuICBPdXRwdXQgdGhlIGNoYXJhY3RlciBub3cuDQorCQl2T3V0cHV0Q2hhcmFjdGVyKCBjUnhlZENoYXIgKTsNCisNCisJCS8vIElmIHJlbW92aW5nIHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgcXVldWUgd29rZSB0aGUgdGFzayB0aGF0IHdhcw0KKwkJLy8gcG9zdGluZyBvbnRvIHRoZSBxdWV1ZSBjVGFza1dva2VuQnlSZWNlaXZlIHdpbGwgaGF2ZSBiZWVuIHNldCB0bw0KKwkJLy8gcGRUUlVFLiAgTm8gbWF0dGVyIGhvdyBtYW55IHRpbWVzIHRoaXMgbG9vcCBpdGVyYXRlcyBvbmx5IG9uZQ0KKwkJLy8gdGFzayB3aWxsIGJlIHdva2VuLg0KKwl9DQorDQorCWlmKCBjVGFza1dva2VuQnlQb3N0ICE9ICggY2hhciApIHBkRkFMU0U7DQorCXsNCisJCXRhc2tZSUVMRCAoKTsNCisJfQ0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB4UXVldWVSZWNlaXZlRnJvbUlTUiB4UXVldWVSZWNlaXZlRnJvbUlTUg0KKyAqIFxpbmdyb3VwIFF1ZXVlTWFuYWdlbWVudA0KKyAqLw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKw0KKy8qDQorICogVXRpbGl0aWVzIHRvIHF1ZXJ5IHF1ZXVlcyB0aGF0IGFyZSBzYWZlIHRvIHVzZSBmcm9tIGFuIElTUi4gIFRoZXNlIHV0aWxpdGllcw0KKyAqIHNob3VsZCBiZSB1c2VkIG9ubHkgZnJvbSB3aXRpbiBhbiBJU1IsIG9yIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlSXNRdWV1ZUVtcHR5RnJvbUlTUiggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVJc1F1ZXVlRnVsbEZyb21JU1IoIGNvbnN0IHhRdWV1ZUhhbmRsZSBweFF1ZXVlICk7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nRnJvbUlTUiggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKTsNCisNCisNCisvKg0KKyAqIHhRdWV1ZUFsdEdlbmVyaWNTZW5kKCkgaXMgYW4gYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZiB4UXVldWVHZW5lcmljU2VuZCgpLg0KKyAqIExpa2V3aXNlIHhRdWV1ZUFsdEdlbmVyaWNSZWNlaXZlKCkgaXMgYW4gYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZg0KKyAqIHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCkuDQorICoNCisgKiBUaGUgc291cmNlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBhbHRlcm5hdGl2ZSAoQWx0KSBBUEkgaXMgbXVjaA0KKyAqIHNpbXBsZXIJYmVjYXVzZSBpdCBleGVjdXRlcyBldmVyeXRoaW5nIGZyb20gd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbi4NCisgKiBUaGlzIGlzCXRoZSBhcHByb2FjaCB0YWtlbiBieSBtYW55IG90aGVyIFJUT1NlcywgYnV0IEZyZWVSVE9TLm9yZyBoYXMgdGhlDQorICogcHJlZmVycmVkIGZ1bGx5IGZlYXR1cmVkIEFQSSB0b28uICBUaGUgZnVsbHkgZmVhdHVyZWQgQVBJIGhhcyBtb3JlDQorICogY29tcGxleAljb2RlIHRoYXQgdGFrZXMgbG9uZ2VyIHRvIGV4ZWN1dGUsIGJ1dCBtYWtlcyBtdWNoIGxlc3MgdXNlIG9mDQorICogY3JpdGljYWwgc2VjdGlvbnMuICBUaGVyZWZvcmUgdGhlIGFsdGVybmF0aXZlIEFQSSBzYWNyaWZpY2VzIGludGVycnVwdA0KKyAqIHJlc3BvbnNpdmVuZXNzIHRvIGdhaW4gZXhlY3V0aW9uIHNwZWVkLCB3aGVyZWFzIHRoZSBmdWxseSBmZWF0dXJlZCBBUEkNCisgKiBzYWNyaWZpY2VzIGV4ZWN1dGlvbiBzcGVlZCB0byBlbnN1cmUgYmV0dGVyIGludGVycnVwdCByZXNwb25zaXZlbmVzcy4NCisgKi8NCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhDb3B5UG9zaXRpb24gKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwgcG9ydEJBU0VfVFlQRSB4SnVzdFBlZWtpbmcgKTsNCisjZGVmaW5lIHhRdWV1ZUFsdFNlbmRUb0Zyb250KCB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHhUaWNrc1RvV2FpdCApIHhRdWV1ZUFsdEdlbmVyaWNTZW5kKCAoIHhRdWV1ZSApLCAoIHB2SXRlbVRvUXVldWUgKSwgKCB4VGlja3NUb1dhaXQgKSwgcXVldWVTRU5EX1RPX0ZST05UICkNCisjZGVmaW5lIHhRdWV1ZUFsdFNlbmRUb0JhY2soIHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeFRpY2tzVG9XYWl0ICkgeFF1ZXVlQWx0R2VuZXJpY1NlbmQoICggeFF1ZXVlICksICggcHZJdGVtVG9RdWV1ZSApLCAoIHhUaWNrc1RvV2FpdCApLCBxdWV1ZVNFTkRfVE9fQkFDSyApDQorI2RlZmluZSB4UXVldWVBbHRSZWNlaXZlKCB4UXVldWUsIHB2QnVmZmVyLCB4VGlja3NUb1dhaXQgKSB4UXVldWVBbHRHZW5lcmljUmVjZWl2ZSggKCB4UXVldWUgKSwgKCBwdkJ1ZmZlciApLCAoIHhUaWNrc1RvV2FpdCApLCBwZEZBTFNFICkNCisjZGVmaW5lIHhRdWV1ZUFsdFBlZWsoIHhRdWV1ZSwgcHZCdWZmZXIsIHhUaWNrc1RvV2FpdCApIHhRdWV1ZUFsdEdlbmVyaWNSZWNlaXZlKCAoIHhRdWV1ZSApLCAoIHB2QnVmZmVyICksICggeFRpY2tzVG9XYWl0ICksIHBkVFJVRSApDQorDQorLyoNCisgKiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgYWJvdmUgYXJlIGZvciBwYXNzaW5nIGRhdGEgdG8gYW5kIGZyb20gdGFza3MuICBUaGUNCisgKiBmdW5jdGlvbnMgYmVsb3cgYXJlIHRoZSBlcXVpdmFsZW50cyBmb3IgcGFzc2luZyBkYXRhIHRvIGFuZCBmcm9tDQorICogY28tcm91dGluZXMuDQorICoNCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHRoZSBjby1yb3V0aW5lIG1hY3JvIGltcGxlbWVudGF0aW9uIGFuZA0KKyAqIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gYXBwbGljYXRpb24gY29kZS4gIEluc3RlYWQgdXNlIHRoZSBtYWNybw0KKyAqIHdyYXBwZXJzIGRlZmluZWQgd2l0aGluIGNyb3V0aW5lLmguDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlQ1JTZW5kRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsIHNpZ25lZCBwb3J0QkFTRV9UWVBFIHhDb1JvdXRpbmVQcmV2aW91c2x5V29rZW4gKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVDUlJlY2VpdmVGcm9tSVNSKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdm9pZCAqcHZCdWZmZXIsIHNpZ25lZCBwb3J0QkFTRV9UWVBFICpweFRhc2tXb2tlbiApOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUNSU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVDUlJlY2VpdmUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICpwdkJ1ZmZlciwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCApOw0KKw0KKy8qDQorICogRm9yIGludGVybmFsIHVzZSBvbmx5LiAgVXNlIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpLCANCisgKiB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoKSBvciB4U2VtYXBob3JlR2V0TXV0ZXhIb2xkZXIoKSBpbnN0ZWFkIG9mIGNhbGxpbmcgDQorICogdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5Lg0KKyAqLw0KK3hRdWV1ZUhhbmRsZSB4UXVldWVDcmVhdGVNdXRleCggdW5zaWduZWQgY2hhciB1Y1F1ZXVlVHlwZSApOw0KK3hRdWV1ZUhhbmRsZSB4UXVldWVDcmVhdGVDb3VudGluZ1NlbWFwaG9yZSggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENvdW50VmFsdWUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJbml0aWFsQ291bnQgKTsNCit2b2lkKiB4UXVldWVHZXRNdXRleEhvbGRlciggeFF1ZXVlSGFuZGxlIHhTZW1hcGhvcmUgKTsNCisNCisvKg0KKyAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIFVzZSB4U2VtYXBob3JlVGFrZU11dGV4UmVjdXJzaXZlKCkgb3INCisgKiB4U2VtYXBob3JlR2l2ZU11dGV4UmVjdXJzaXZlKCkgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseS4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhRdWV1ZVRha2VNdXRleFJlY3Vyc2l2ZSggeFF1ZXVlSGFuZGxlIHB4TXV0ZXgsIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICk7DQorcG9ydEJBU0VfVFlQRSB4UXVldWVHaXZlTXV0ZXhSZWN1cnNpdmUoIHhRdWV1ZUhhbmRsZSBweE11dGV4ICk7DQorDQorLyoNCisgKiBSZXNldCBhIHF1ZXVlIGJhY2sgdG8gaXRzIG9yaWdpbmFsIGVtcHR5IHN0YXRlLiAgcGRQQVNTIGlzIHJldHVybmVkIGlmIHRoZQ0KKyAqIHF1ZXVlIGlzIHN1Y2Nlc3NmdWxseSByZXNldC4gIHBkRkFJTCBpcyByZXR1cm5lZCBpZiB0aGUgcXVldWUgY291bGQgbm90IGJlDQorICogcmVzZXQgYmVjYXVzZSB0aGVyZSBhcmUgdGFza3MgYmxvY2tlZCBvbiB0aGUgcXVldWUgd2FpdGluZyB0byBlaXRoZXINCisgKiByZWNlaXZlIGZyb20gdGhlIHF1ZXVlIG9yIHNlbmQgdG8gdGhlIHF1ZXVlLg0KKyAqLw0KKyNkZWZpbmUgeFF1ZXVlUmVzZXQoIHB4UXVldWUgKSB4UXVldWVHZW5lcmljUmVzZXQoIHB4UXVldWUsIHBkRkFMU0UgKQ0KKw0KKy8qDQorICogVGhlIHJlZ2lzdHJ5IGlzIHByb3ZpZGVkIGFzIGEgbWVhbnMgZm9yIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMgdG8NCisgKiBsb2NhdGUgcXVldWVzLCBzZW1hcGhvcmVzIGFuZCBtdXRleGVzLiAgQ2FsbCB2UXVldWVBZGRUb1JlZ2lzdHJ5KCkgYWRkDQorICogYSBxdWV1ZSwgc2VtYXBob3JlIG9yIG11dGV4IGhhbmRsZSB0byB0aGUgcmVnaXN0cnkgaWYgeW91IHdhbnQgdGhlIGhhbmRsZQ0KKyAqIHRvIGJlIGF2YWlsYWJsZSB0byBhIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlci4gIElmIHlvdSBhcmUgbm90IHVzaW5nIGEga2VybmVsDQorICogYXdhcmUgZGVidWdnZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBpZ25vcmVkLg0KKyAqDQorICogY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBoYW5kbGVzIHRoZQ0KKyAqIHJlZ2lzdHJ5IGNhbiBob2xkLiAgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwDQorICogd2l0aGluIEZyZWVSVE9TQ29uZmlnLmggZm9yIHRoZSByZWdpc3RyeSB0byBiZSBhdmFpbGFibGUuICBJdHMgdmFsdWUNCisgKiBkb2VzIG5vdCBlZmZlY3QgdGhlIG51bWJlciBvZiBxdWV1ZXMsIHNlbWFwaG9yZXMgYW5kIG11dGV4ZXMgdGhhdCBjYW4gYmUNCisgKiBjcmVhdGVkIC0ganVzdCB0aGUgbnVtYmVyIHRoYXQgdGhlIHJlZ2lzdHJ5IGNhbiBob2xkLg0KKyAqDQorICogQHBhcmFtIHhRdWV1ZSBUaGUgaGFuZGxlIG9mIHRoZSBxdWV1ZSBiZWluZyBhZGRlZCB0byB0aGUgcmVnaXN0cnkuICBUaGlzDQorICogaXMgdGhlIGhhbmRsZSByZXR1cm5lZCBieSBhIGNhbGwgdG8geFF1ZXVlQ3JlYXRlKCkuICBTZW1hcGhvcmUgYW5kIG11dGV4DQorICogaGFuZGxlcyBjYW4gYWxzbyBiZSBwYXNzZWQgaW4gaGVyZS4NCisgKg0KKyAqIEBwYXJhbSBwY05hbWUgVGhlIG5hbWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYW5kbGUuICBUaGlzIGlzIHRoZQ0KKyAqIG5hbWUgdGhhdCB0aGUga2VybmVsIGF3YXJlIGRlYnVnZ2VyIHdpbGwgZGlzcGxheS4NCisgKi8NCisjaWYgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDBVDQorCXZvaWQgdlF1ZXVlQWRkVG9SZWdpc3RyeSggeFF1ZXVlSGFuZGxlIHhRdWV1ZSwgc2lnbmVkIGNoYXIgKnBjTmFtZSApOw0KKyNlbmRpZg0KKw0KKy8qDQorICogR2VuZXJpYyB2ZXJzaW9uIG9mIHRoZSBxdWV1ZSBjcmVhdGlvbiBmdW5jdGlvbiwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgDQorICogYW55IHF1ZXVlLCBzZW1hcGhvcmUgb3IgbXV0ZXggY3JlYXRpb24gZnVuY3Rpb24gb3IgbWFjcm8uDQorICovDQorICAgIHhRdWV1ZUhhbmRsZSB4UXVldWVHZW5lcmljQ3JlYXRlKCB2b2lkKiBidWZmZXIsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhRdWV1ZUxlbmd0aCwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEl0ZW1TaXplLCB1bnNpZ25lZCBjaGFyIHVjUXVldWVUeXBlICk7DQorDQorLyogTm90IHB1YmxpYyBBUEkgZnVuY3Rpb25zLiAqLw0KK3ZvaWQgdlF1ZXVlV2FpdEZvck1lc3NhZ2VSZXN0cmljdGVkKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCApOw0KK3BvcnRCQVNFX1RZUEUgeFF1ZXVlR2VuZXJpY1Jlc2V0KCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgcG9ydEJBU0VfVFlQRSB4TmV3UXVldWUgKTsNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFFVRVVFX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9zZW1waHIuaCBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3NlbXBoci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzhjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvaW5jbHVkZS9zZW1waHIuaApAQCAtMCwwICsxLDc4MiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFNFTUFQSE9SRV9IDQorI2RlZmluZSBTRU1BUEhPUkVfSA0KKw0KKyNpZm5kZWYgSU5DX0ZSRUVSVE9TX0gNCisJI2Vycm9yICJpbmNsdWRlIEZyZWVSVE9TLmgiIG11c3QgYXBwZWFyIGluIHNvdXJjZSBmaWxlcyBiZWZvcmUgImluY2x1ZGUgc2VtcGhyLmgiDQorI2VuZGlmDQorDQorI2luY2x1ZGUgInF1ZXVlLmgiDQorDQordHlwZWRlZiB4UXVldWVIYW5kbGUgeFNlbWFwaG9yZUhhbmRsZTsNCisNCisjZGVmaW5lIHNlbUJJTkFSWV9TRU1BUEhPUkVfUVVFVUVfTEVOR1RICSggKCB1bnNpZ25lZCBjaGFyICkgMVUgKQ0KKyNkZWZpbmUgc2VtU0VNQVBIT1JFX1FVRVVFX0lURU1fTEVOR1RICQkoICggdW5zaWduZWQgY2hhciApIDBVICkNCisjZGVmaW5lIHNlbUdJVkVfQkxPQ0tfVElNRQkJCQkJKCAoIHBvcnRUaWNrVHlwZSApIDBVICkNCisNCisNCisvKioNCisgKiBzZW1waHIuIGgNCisgKiA8cHJlPnZTZW1hcGhvcmVDcmVhdGVCaW5hcnkoIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZSApPC9wcmU+DQorICoNCisgKiA8aT5NYWNybzwvaT4gdGhhdCBpbXBsZW1lbnRzIGEgc2VtYXBob3JlIGJ5IHVzaW5nIHRoZSBleGlzdGluZyBxdWV1ZSBtZWNoYW5pc20uDQorICogVGhlIHF1ZXVlIGxlbmd0aCBpcyAxIGFzIHRoaXMgaXMgYSBiaW5hcnkgc2VtYXBob3JlLiAgVGhlIGRhdGEgc2l6ZSBpcyAwDQorICogYXMgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBzdG9yZSBhbnkgZGF0YSAtIHdlIGp1c3Qgd2FudCB0byBrbm93IGlmIHRoZQ0KKyAqIHF1ZXVlIGlzIGVtcHR5IG9yIGZ1bGwuDQorICoNCisgKiBUaGlzIHR5cGUgb2Ygc2VtYXBob3JlIGNhbiBiZSB1c2VkIGZvciBwdXJlIHN5bmNocm9uaXNhdGlvbiBiZXR3ZWVuIHRhc2tzIG9yDQorICogYmV0d2VlbiBhbiBpbnRlcnJ1cHQgYW5kIGEgdGFzay4gIFRoZSBzZW1hcGhvcmUgbmVlZCBub3QgYmUgZ2l2ZW4gYmFjayBvbmNlDQorICogb2J0YWluZWQsIHNvIG9uZSB0YXNrL2ludGVycnVwdCBjYW4gY29udGludW91c2x5ICdnaXZlJyB0aGUgc2VtYXBob3JlIHdoaWxlDQorICogYW5vdGhlciBjb250aW51b3VzbHkgJ3Rha2VzJyB0aGUgc2VtYXBob3JlLiAgRm9yIHRoaXMgcmVhc29uIHRoaXMgdHlwZSBvZg0KKyAqIHNlbWFwaG9yZSBkb2VzIG5vdCB1c2UgYSBwcmlvcml0eSBpbmhlcml0YW5jZSBtZWNoYW5pc20uICBGb3IgYW4gYWx0ZXJuYXRpdmUNCisgKiB0aGF0IGRvZXMgdXNlIHByaW9yaXR5IGluaGVyaXRhbmNlIHNlZSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXgoKS4NCisgKg0KKyAqIEBwYXJhbSB4U2VtYXBob3JlIEhhbmRsZSB0byB0aGUgY3JlYXRlZCBzZW1hcGhvcmUuICBTaG91bGQgYmUgb2YgdHlwZSB4U2VtYXBob3JlSGFuZGxlLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgPHByZT4NCisgeFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlOw0KKw0KKyB2b2lkIHZBVGFzayggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisgICAgLy8gU2VtYXBob3JlIGNhbm5vdCBiZSB1c2VkIGJlZm9yZSBhIGNhbGwgdG8gdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSAoKS4NCisgICAgLy8gVGhpcyBpcyBhIG1hY3JvIHNvIHBhc3MgdGhlIHZhcmlhYmxlIGluIGRpcmVjdGx5Lg0KKyAgICB2U2VtYXBob3JlQ3JlYXRlQmluYXJ5KCB4U2VtYXBob3JlICk7DQorDQorICAgIGlmKCB4U2VtYXBob3JlICE9IE5VTEwgKQ0KKyAgICB7DQorICAgICAgICAvLyBUaGUgc2VtYXBob3JlIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4NCisgICAgICAgIC8vIFRoZSBzZW1hcGhvcmUgY2FuIG5vdyBiZSB1c2VkLiAgDQorICAgIH0NCisgfQ0KKyA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSB2U2VtYXBob3JlQ3JlYXRlQmluYXJ5DQorICogXGluZ3JvdXAgU2VtYXBob3Jlcw0KKyAqLw0KK3hRdWV1ZUhhbmRsZSB4U2VtYXBob3JlQ3JlYXRlQmluYXJ5KHZvaWQpOw0KKw0KKyNkZWZpbmUgdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSggeFNlbWFwaG9yZSApICggeFNlbWFwaG9yZSApID0geFNlbWFwaG9yZUNyZWF0ZUJpbmFyeSggKQ0KKw0KKy8qKg0KKyAqIHNlbXBoci4gaA0KKyAqIDxwcmU+eFNlbWFwaG9yZVRha2UoIA0KKyAqICAgICAgICAgICAgICAgICAgIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZSwgDQorICogICAgICAgICAgICAgICAgICAgcG9ydFRpY2tUeXBlIHhCbG9ja1RpbWUgDQorICogICAgICAgICAgICAgICApPC9wcmU+DQorICoNCisgKiA8aT5NYWNybzwvaT4gdG8gb2J0YWluIGEgc2VtYXBob3JlLiAgVGhlIHNlbWFwaG9yZSBtdXN0IGhhdmUgcHJldmlvdXNseSBiZWVuDQorICogY3JlYXRlZCB3aXRoIGEgY2FsbCB0byB2U2VtYXBob3JlQ3JlYXRlQmluYXJ5KCksIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpIG9yDQorICogeFNlbWFwaG9yZUNyZWF0ZUNvdW50aW5nKCkuDQorICoNCisgKiBAcGFyYW0geFNlbWFwaG9yZSBBIGhhbmRsZSB0byB0aGUgc2VtYXBob3JlIGJlaW5nIHRha2VuIC0gb2J0YWluZWQgd2hlbg0KKyAqIHRoZSBzZW1hcGhvcmUgd2FzIGNyZWF0ZWQuDQorICoNCisgKiBAcGFyYW0geEJsb2NrVGltZSBUaGUgdGltZSBpbiB0aWNrcyB0byB3YWl0IGZvciB0aGUgc2VtYXBob3JlIHRvIGJlY29tZQ0KKyAqIGF2YWlsYWJsZS4gIFRoZSBtYWNybyBwb3J0VElDS19SQVRFX01TIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhpcyB0byBhDQorICogcmVhbCB0aW1lLiAgQSBibG9jayB0aW1lIG9mIHplcm8gY2FuIGJlIHVzZWQgdG8gcG9sbCB0aGUgc2VtYXBob3JlLiAgQSBibG9jaw0KKyAqIHRpbWUgb2YgcG9ydE1BWF9ERUxBWSBjYW4gYmUgdXNlZCB0byBibG9jayBpbmRlZmluaXRlbHkgKHByb3ZpZGVkDQorICogSU5DTFVERV92VGFza1N1c3BlbmQgaXMgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaCkuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgc2VtYXBob3JlIHdhcyBvYnRhaW5lZC4gIHBkRkFMU0UNCisgKiBpZiB4QmxvY2tUaW1lIGV4cGlyZWQgd2l0aG91dCB0aGUgc2VtYXBob3JlIGJlY29taW5nIGF2YWlsYWJsZS4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZSA9IE5VTEw7DQorDQorIC8vIEEgdGFzayB0aGF0IGNyZWF0ZXMgYSBzZW1hcGhvcmUuDQorIHZvaWQgdkFUYXNrKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyAgICAvLyBDcmVhdGUgdGhlIHNlbWFwaG9yZSB0byBndWFyZCBhIHNoYXJlZCByZXNvdXJjZS4NCisgICAgdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSggeFNlbWFwaG9yZSApOw0KKyB9DQorDQorIC8vIEEgdGFzayB0aGF0IHVzZXMgdGhlIHNlbWFwaG9yZS4NCisgdm9pZCB2QW5vdGhlclRhc2soIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorICAgIC8vIC4uLiBEbyBvdGhlciB0aGluZ3MuDQorDQorICAgIGlmKCB4U2VtYXBob3JlICE9IE5VTEwgKQ0KKyAgICB7DQorICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIG9idGFpbiB0aGUgc2VtYXBob3JlLiAgSWYgdGhlIHNlbWFwaG9yZSBpcyBub3QgYXZhaWxhYmxlDQorICAgICAgICAvLyB3YWl0IDEwIHRpY2tzIHRvIHNlZSBpZiBpdCBiZWNvbWVzIGZyZWUuCQ0KKyAgICAgICAgaWYoIHhTZW1hcGhvcmVUYWtlKCB4U2VtYXBob3JlLCAoIHBvcnRUaWNrVHlwZSApIDEwICkgPT0gcGRUUlVFICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBXZSB3ZXJlIGFibGUgdG8gb2J0YWluIHRoZSBzZW1hcGhvcmUgYW5kIGNhbiBub3cgYWNjZXNzIHRoZQ0KKyAgICAgICAgICAgIC8vIHNoYXJlZCByZXNvdXJjZS4NCisNCisgICAgICAgICAgICAvLyAuLi4NCisNCisgICAgICAgICAgICAvLyBXZSBoYXZlIGZpbmlzaGVkIGFjY2Vzc2luZyB0aGUgc2hhcmVkIHJlc291cmNlLiAgUmVsZWFzZSB0aGUgDQorICAgICAgICAgICAgLy8gc2VtYXBob3JlLg0KKyAgICAgICAgICAgIHhTZW1hcGhvcmVHaXZlKCB4U2VtYXBob3JlICk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gV2UgY291bGQgbm90IG9idGFpbiB0aGUgc2VtYXBob3JlIGFuZCBjYW4gdGhlcmVmb3JlIG5vdCBhY2Nlc3MNCisgICAgICAgICAgICAvLyB0aGUgc2hhcmVkIHJlc291cmNlIHNhZmVseS4NCisgICAgICAgIH0NCisgICAgfQ0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB4U2VtYXBob3JlVGFrZSB4U2VtYXBob3JlVGFrZQ0KKyAqIFxpbmdyb3VwIFNlbWFwaG9yZXMNCisgKi8NCisjZGVmaW5lIHhTZW1hcGhvcmVUYWtlKCB4U2VtYXBob3JlLCB4QmxvY2tUaW1lICkJCXhRdWV1ZUdlbmVyaWNSZWNlaXZlKCAoIHhRdWV1ZUhhbmRsZSApICggeFNlbWFwaG9yZSApLCBOVUxMLCAoIHhCbG9ja1RpbWUgKSwgcGRGQUxTRSApDQorDQorLyoqDQorICogc2VtcGhyLiBoDQorICogeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoIA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB4U2VtYXBob3JlSGFuZGxlIHhNdXRleCwgDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lIA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKyAqDQorICogPGk+TWFjcm88L2k+IHRvIHJlY3Vyc2l2ZWx5IG9idGFpbiwgb3IgJ3Rha2UnLCBhIG11dGV4IHR5cGUgc2VtYXBob3JlLiAgDQorICogVGhlIG11dGV4IG11c3QgaGF2ZSBwcmV2aW91c2x5IGJlZW4gY3JlYXRlZCB1c2luZyBhIGNhbGwgdG8gDQorICogeFNlbWFwaG9yZUNyZWF0ZVJlY3Vyc2l2ZU11dGV4KCk7DQorICogDQorICogY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTIG11c3QgYmUgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaCBmb3IgdGhpcw0KKyAqIG1hY3JvIHRvIGJlIGF2YWlsYWJsZS4NCisgKiANCisgKiBUaGlzIG1hY3JvIG11c3Qgbm90IGJlIHVzZWQgb24gbXV0ZXhlcyBjcmVhdGVkIHVzaW5nIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpLg0KKyAqDQorICogQSBtdXRleCB1c2VkIHJlY3Vyc2l2ZWx5IGNhbiBiZSAndGFrZW4nIHJlcGVhdGVkbHkgYnkgdGhlIG93bmVyLiBUaGUgbXV0ZXggDQorICogZG9lc24ndCBiZWNvbWUgYXZhaWxhYmxlIGFnYWluIHVudGlsIHRoZSBvd25lciBoYXMgY2FsbGVkIA0KKyAqIHhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlKCkgZm9yIGVhY2ggc3VjY2Vzc2Z1bCAndGFrZScgcmVxdWVzdC4gIEZvciBleGFtcGxlLCANCisgKiBpZiBhIHRhc2sgc3VjY2Vzc2Z1bGx5ICd0YWtlcycgdGhlIHNhbWUgbXV0ZXggNSB0aW1lcyB0aGVuIHRoZSBtdXRleCB3aWxsIA0KKyAqIG5vdCBiZSBhdmFpbGFibGUgdG8gYW55IG90aGVyIHRhc2sgdW50aWwgaXQgaGFzIGFsc28gICdnaXZlbicgdGhlIG11dGV4IGJhY2sNCisgKiBleGFjdGx5IGZpdmUgdGltZXMuDQorICoNCisgKiBAcGFyYW0geE11dGV4IEEgaGFuZGxlIHRvIHRoZSBtdXRleCBiZWluZyBvYnRhaW5lZC4gIFRoaXMgaXMgdGhlDQorICogaGFuZGxlIHJldHVybmVkIGJ5IHhTZW1hcGhvcmVDcmVhdGVSZWN1cnNpdmVNdXRleCgpOw0KKyAqDQorICogQHBhcmFtIHhCbG9ja1RpbWUgVGhlIHRpbWUgaW4gdGlja3MgdG8gd2FpdCBmb3IgdGhlIHNlbWFwaG9yZSB0byBiZWNvbWUNCisgKiBhdmFpbGFibGUuICBUaGUgbWFjcm8gcG9ydFRJQ0tfUkFURV9NUyBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IHRoaXMgdG8gYQ0KKyAqIHJlYWwgdGltZS4gIEEgYmxvY2sgdGltZSBvZiB6ZXJvIGNhbiBiZSB1c2VkIHRvIHBvbGwgdGhlIHNlbWFwaG9yZS4gIElmDQorICogdGhlIHRhc2sgYWxyZWFkeSBvd25zIHRoZSBzZW1hcGhvcmUgdGhlbiB4U2VtYXBob3JlVGFrZVJlY3Vyc2l2ZSgpIHdpbGwNCisgKiByZXR1cm4gaW1tZWRpYXRlbHkgbm8gbWF0dGVyIHdoYXQgdGhlIHZhbHVlIG9mIHhCbG9ja1RpbWUuIA0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgdGhlIHNlbWFwaG9yZSB3YXMgb2J0YWluZWQuICBwZEZBTFNFIGlmIHhCbG9ja1RpbWUNCisgKiBleHBpcmVkIHdpdGhvdXQgdGhlIHNlbWFwaG9yZSBiZWNvbWluZyBhdmFpbGFibGUuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyA8cHJlPg0KKyB4U2VtYXBob3JlSGFuZGxlIHhNdXRleCA9IE5VTEw7DQorDQorIC8vIEEgdGFzayB0aGF0IGNyZWF0ZXMgYSBtdXRleC4NCisgdm9pZCB2QVRhc2soIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorICAgIC8vIENyZWF0ZSB0aGUgbXV0ZXggdG8gZ3VhcmQgYSBzaGFyZWQgcmVzb3VyY2UuDQorICAgIHhNdXRleCA9IHhTZW1hcGhvcmVDcmVhdGVSZWN1cnNpdmVNdXRleCgpOw0KKyB9DQorDQorIC8vIEEgdGFzayB0aGF0IHVzZXMgdGhlIG11dGV4Lg0KKyB2b2lkIHZBbm90aGVyVGFzayggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisgICAgLy8gLi4uIERvIG90aGVyIHRoaW5ncy4NCisNCisgICAgaWYoIHhNdXRleCAhPSBOVUxMICkNCisgICAgew0KKyAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBvYnRhaW4gdGhlIG11dGV4LiAgSWYgdGhlIG11dGV4IGlzIG5vdCBhdmFpbGFibGUNCisgICAgICAgIC8vIHdhaXQgMTAgdGlja3MgdG8gc2VlIGlmIGl0IGJlY29tZXMgZnJlZS4JDQorICAgICAgICBpZiggeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoIHhTZW1hcGhvcmUsICggcG9ydFRpY2tUeXBlICkgMTAgKSA9PSBwZFRSVUUgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIFdlIHdlcmUgYWJsZSB0byBvYnRhaW4gdGhlIG11dGV4IGFuZCBjYW4gbm93IGFjY2VzcyB0aGUNCisgICAgICAgICAgICAvLyBzaGFyZWQgcmVzb3VyY2UuDQorDQorICAgICAgICAgICAgLy8gLi4uDQorICAgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGR1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlIGZ1cnRoZXIgY2FsbHMgdG8gDQorCQkJLy8geFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoKSBhcmUgbWFkZSBvbiB0aGUgc2FtZSBtdXRleC4gIEluIHJlYWwNCisJCQkvLyBjb2RlIHRoZXNlIHdvdWxkIG5vdCBiZSBqdXN0IHNlcXVlbnRpYWwgY2FsbHMgYXMgdGhpcyB3b3VsZCBtYWtlDQorCQkJLy8gbm8gc2Vuc2UuICBJbnN0ZWFkIHRoZSBjYWxscyBhcmUgbGlrZWx5IHRvIGJlIGJ1cmllZCBpbnNpZGUNCisJCQkvLyBhIG1vcmUgY29tcGxleCBjYWxsIHN0cnVjdHVyZS4NCisgICAgICAgICAgICB4U2VtYXBob3JlVGFrZVJlY3Vyc2l2ZSggeE11dGV4LCAoIHBvcnRUaWNrVHlwZSApIDEwICk7DQorICAgICAgICAgICAgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoIHhNdXRleCwgKCBwb3J0VGlja1R5cGUgKSAxMCApOw0KKw0KKyAgICAgICAgICAgIC8vIFRoZSBtdXRleCBoYXMgbm93IGJlZW4gJ3Rha2VuJyB0aHJlZSB0aW1lcywgc28gd2lsbCBub3QgYmUgDQorCQkJLy8gYXZhaWxhYmxlIHRvIGFub3RoZXIgdGFzayB1bnRpbCBpdCBoYXMgYWxzbyBiZWVuIGdpdmVuIGJhY2sNCisJCQkvLyB0aHJlZSB0aW1lcy4gIEFnYWluIGl0IGlzIHVubGlrZWx5IHRoYXQgcmVhbCBjb2RlIHdvdWxkIGhhdmUNCisJCQkvLyB0aGVzZSBjYWxscyBzZXF1ZW50aWFsbHksIGJ1dCBpbnN0ZWFkIGJ1cmllZCBpbiBhIG1vcmUgY29tcGxleA0KKwkJCS8vIGNhbGwgc3RydWN0dXJlLiAgVGhpcyBpcyBqdXN0IGZvciBpbGx1c3RyYXRpdmUgcHVycG9zZXMuDQorICAgICAgICAgICAgeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoIHhNdXRleCApOw0KKwkJCXhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlKCB4TXV0ZXggKTsNCisJCQl4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSggeE11dGV4ICk7DQorDQorCQkJLy8gTm93IHRoZSBtdXRleCBjYW4gYmUgdGFrZW4gYnkgb3RoZXIgdGFza3MuDQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gV2UgY291bGQgbm90IG9idGFpbiB0aGUgbXV0ZXggYW5kIGNhbiB0aGVyZWZvcmUgbm90IGFjY2Vzcw0KKyAgICAgICAgICAgIC8vIHRoZSBzaGFyZWQgcmVzb3VyY2Ugc2FmZWx5Lg0KKyAgICAgICAgfQ0KKyAgICB9DQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhTZW1hcGhvcmVUYWtlUmVjdXJzaXZlIHhTZW1hcGhvcmVUYWtlUmVjdXJzaXZlDQorICogXGluZ3JvdXAgU2VtYXBob3Jlcw0KKyAqLw0KKyNkZWZpbmUgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoIHhNdXRleCwgeEJsb2NrVGltZSApCXhRdWV1ZVRha2VNdXRleFJlY3Vyc2l2ZSggKCB4TXV0ZXggKSwgKCB4QmxvY2tUaW1lICkgKQ0KKw0KKw0KKy8qIA0KKyAqIHhTZW1hcGhvcmVBbHRUYWtlKCkgaXMgYW4gYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZiB4U2VtYXBob3JlVGFrZSgpLg0KKyAqDQorICogVGhlIHNvdXJjZSBjb2RlIHRoYXQgaW1wbGVtZW50cyB0aGUgYWx0ZXJuYXRpdmUgKEFsdCkgQVBJIGlzIG11Y2ggDQorICogc2ltcGxlcgliZWNhdXNlIGl0IGV4ZWN1dGVzIGV2ZXJ5dGhpbmcgZnJvbSB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLiAgDQorICogVGhpcyBpcwl0aGUgYXBwcm9hY2ggdGFrZW4gYnkgbWFueSBvdGhlciBSVE9TZXMsIGJ1dCBGcmVlUlRPUy5vcmcgaGFzIHRoZSANCisgKiBwcmVmZXJyZWQgZnVsbHkgZmVhdHVyZWQgQVBJIHRvby4gIFRoZSBmdWxseSBmZWF0dXJlZCBBUEkgaGFzIG1vcmUgDQorICogY29tcGxleAljb2RlIHRoYXQgdGFrZXMgbG9uZ2VyIHRvIGV4ZWN1dGUsIGJ1dCBtYWtlcyBtdWNoIGxlc3MgdXNlIG9mIA0KKyAqIGNyaXRpY2FsIHNlY3Rpb25zLiAgVGhlcmVmb3JlIHRoZSBhbHRlcm5hdGl2ZSBBUEkgc2FjcmlmaWNlcyBpbnRlcnJ1cHQgDQorICogcmVzcG9uc2l2ZW5lc3MgdG8gZ2FpbiBleGVjdXRpb24gc3BlZWQsIHdoZXJlYXMgdGhlIGZ1bGx5IGZlYXR1cmVkIEFQSQ0KKyAqIHNhY3JpZmljZXMgZXhlY3V0aW9uIHNwZWVkIHRvIGVuc3VyZSBiZXR0ZXIgaW50ZXJydXB0IHJlc3BvbnNpdmVuZXNzLg0KKyAqLw0KKyNkZWZpbmUgeFNlbWFwaG9yZUFsdFRha2UoIHhTZW1hcGhvcmUsIHhCbG9ja1RpbWUgKQkJeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUoICggeFF1ZXVlSGFuZGxlICkgKCB4U2VtYXBob3JlICksIE5VTEwsICggeEJsb2NrVGltZSApLCBwZEZBTFNFICkNCisNCisvKioNCisgKiBzZW1waHIuIGgNCisgKiA8cHJlPnhTZW1hcGhvcmVHaXZlKCB4U2VtYXBob3JlSGFuZGxlIHhTZW1hcGhvcmUgKTwvcHJlPg0KKyAqDQorICogPGk+TWFjcm88L2k+IHRvIHJlbGVhc2UgYSBzZW1hcGhvcmUuICBUaGUgc2VtYXBob3JlIG11c3QgaGF2ZSBwcmV2aW91c2x5IGJlZW4NCisgKiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIHZTZW1hcGhvcmVDcmVhdGVCaW5hcnkoKSwgeFNlbWFwaG9yZUNyZWF0ZU11dGV4KCkgb3INCisgKiB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoKS4gYW5kIG9idGFpbmVkIHVzaW5nIHNTZW1hcGhvcmVUYWtlKCkuDQorICoNCisgKiBUaGlzIG1hY3JvIG11c3Qgbm90IGJlIHVzZWQgZnJvbSBhbiBJU1IuICBTZWUgeFNlbWFwaG9yZUdpdmVGcm9tSVNSICgpIGZvcg0KKyAqIGFuIGFsdGVybmF0aXZlIHdoaWNoIGNhbiBiZSB1c2VkIGZyb20gYW4gSVNSLg0KKyAqDQorICogVGhpcyBtYWNybyBtdXN0IGFsc28gbm90IGJlIHVzZWQgb24gc2VtYXBob3JlcyBjcmVhdGVkIHVzaW5nIA0KKyAqIHhTZW1hcGhvcmVDcmVhdGVSZWN1cnNpdmVNdXRleCgpLg0KKyAqDQorICogQHBhcmFtIHhTZW1hcGhvcmUgQSBoYW5kbGUgdG8gdGhlIHNlbWFwaG9yZSBiZWluZyByZWxlYXNlZC4gIFRoaXMgaXMgdGhlDQorICogaGFuZGxlIHJldHVybmVkIHdoZW4gdGhlIHNlbWFwaG9yZSB3YXMgY3JlYXRlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBzZW1hcGhvcmUgd2FzIHJlbGVhc2VkLiAgcGRGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4NCisgKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBxdWV1ZXMuICBBbiBlcnJvciBjYW4gb2NjdXIgaWYgdGhlcmUgaXMNCisgKiBubyBzcGFjZSBvbiB0aGUgcXVldWUgdG8gcG9zdCBhIG1lc3NhZ2UgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIA0KKyAqIHNlbWFwaG9yZSB3YXMgbm90IGZpcnN0IG9idGFpbmVkIGNvcnJlY3RseS4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZSA9IE5VTEw7DQorDQorIHZvaWQgdkFUYXNrKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyAgICAvLyBDcmVhdGUgdGhlIHNlbWFwaG9yZSB0byBndWFyZCBhIHNoYXJlZCByZXNvdXJjZS4NCisgICAgdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSggeFNlbWFwaG9yZSApOw0KKw0KKyAgICBpZiggeFNlbWFwaG9yZSAhPSBOVUxMICkNCisgICAgew0KKyAgICAgICAgaWYoIHhTZW1hcGhvcmVHaXZlKCB4U2VtYXBob3JlICkgIT0gcGRUUlVFICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBXZSB3b3VsZCBleHBlY3QgdGhpcyBjYWxsIHRvIGZhaWwgYmVjYXVzZSB3ZSBjYW5ub3QgZ2l2ZQ0KKyAgICAgICAgICAgIC8vIGEgc2VtYXBob3JlIHdpdGhvdXQgZmlyc3QgInRha2luZyIgaXQhDQorICAgICAgICB9DQorDQorICAgICAgICAvLyBPYnRhaW4gdGhlIHNlbWFwaG9yZSAtIGRvbid0IGJsb2NrIGlmIHRoZSBzZW1hcGhvcmUgaXMgbm90DQorICAgICAgICAvLyBpbW1lZGlhdGVseSBhdmFpbGFibGUuDQorICAgICAgICBpZiggeFNlbWFwaG9yZVRha2UoIHhTZW1hcGhvcmUsICggcG9ydFRpY2tUeXBlICkgMCApICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBXZSBub3cgaGF2ZSB0aGUgc2VtYXBob3JlIGFuZCBjYW4gYWNjZXNzIHRoZSBzaGFyZWQgcmVzb3VyY2UuDQorDQorICAgICAgICAgICAgLy8gLi4uDQorDQorICAgICAgICAgICAgLy8gV2UgaGF2ZSBmaW5pc2hlZCBhY2Nlc3NpbmcgdGhlIHNoYXJlZCByZXNvdXJjZSBzbyBjYW4gZnJlZSB0aGUNCisgICAgICAgICAgICAvLyBzZW1hcGhvcmUuDQorICAgICAgICAgICAgaWYoIHhTZW1hcGhvcmVHaXZlKCB4U2VtYXBob3JlICkgIT0gcGRUUlVFICkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIC8vIFdlIHdvdWxkIG5vdCBleHBlY3QgdGhpcyBjYWxsIHRvIGZhaWwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUNCisgICAgICAgICAgICAgICAgLy8gb2J0YWluZWQgdGhlIHNlbWFwaG9yZSB0byBnZXQgaGVyZS4NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgfQ0KKyA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFNlbWFwaG9yZUdpdmUgeFNlbWFwaG9yZUdpdmUNCisgKiBcaW5ncm91cCBTZW1hcGhvcmVzDQorICovDQorI2RlZmluZSB4U2VtYXBob3JlR2l2ZSggeFNlbWFwaG9yZSApCQl4UXVldWVHZW5lcmljU2VuZCggKCB4UXVldWVIYW5kbGUgKSAoIHhTZW1hcGhvcmUgKSwgTlVMTCwgc2VtR0lWRV9CTE9DS19USU1FLCBxdWV1ZVNFTkRfVE9fQkFDSyApDQorDQorLyoqDQorICogc2VtcGhyLiBoDQorICogPHByZT54U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSggeFNlbWFwaG9yZUhhbmRsZSB4TXV0ZXggKTwvcHJlPg0KKyAqDQorICogPGk+TWFjcm88L2k+IHRvIHJlY3Vyc2l2ZWx5IHJlbGVhc2UsIG9yICdnaXZlJywgYSBtdXRleCB0eXBlIHNlbWFwaG9yZS4NCisgKiBUaGUgbXV0ZXggbXVzdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBjcmVhdGVkIHVzaW5nIGEgY2FsbCB0byANCisgKiB4U2VtYXBob3JlQ3JlYXRlUmVjdXJzaXZlTXV0ZXgoKTsNCisgKiANCisgKiBjb25maWdVU0VfUkVDVVJTSVZFX01VVEVYRVMgbXVzdCBiZSBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciB0aGlzDQorICogbWFjcm8gdG8gYmUgYXZhaWxhYmxlLg0KKyAqDQorICogVGhpcyBtYWNybyBtdXN0IG5vdCBiZSB1c2VkIG9uIG11dGV4ZXMgY3JlYXRlZCB1c2luZyB4U2VtYXBob3JlQ3JlYXRlTXV0ZXgoKS4NCisgKiANCisgKiBBIG11dGV4IHVzZWQgcmVjdXJzaXZlbHkgY2FuIGJlICd0YWtlbicgcmVwZWF0ZWRseSBieSB0aGUgb3duZXIuIFRoZSBtdXRleCANCisgKiBkb2Vzbid0IGJlY29tZSBhdmFpbGFibGUgYWdhaW4gdW50aWwgdGhlIG93bmVyIGhhcyBjYWxsZWQgDQorICogeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoKSBmb3IgZWFjaCBzdWNjZXNzZnVsICd0YWtlJyByZXF1ZXN0LiAgRm9yIGV4YW1wbGUsIA0KKyAqIGlmIGEgdGFzayBzdWNjZXNzZnVsbHkgJ3Rha2VzJyB0aGUgc2FtZSBtdXRleCA1IHRpbWVzIHRoZW4gdGhlIG11dGV4IHdpbGwgDQorICogbm90IGJlIGF2YWlsYWJsZSB0byBhbnkgb3RoZXIgdGFzayB1bnRpbCBpdCBoYXMgYWxzbyAgJ2dpdmVuJyB0aGUgbXV0ZXggYmFjaw0KKyAqIGV4YWN0bHkgZml2ZSB0aW1lcy4NCisgKg0KKyAqIEBwYXJhbSB4TXV0ZXggQSBoYW5kbGUgdG8gdGhlIG11dGV4IGJlaW5nIHJlbGVhc2VkLCBvciAnZ2l2ZW4nLiAgVGhpcyBpcyB0aGUNCisgKiBoYW5kbGUgcmV0dXJuZWQgYnkgeFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7DQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgc2VtYXBob3JlIHdhcyBnaXZlbi4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIHhTZW1hcGhvcmVIYW5kbGUgeE11dGV4ID0gTlVMTDsNCisNCisgLy8gQSB0YXNrIHRoYXQgY3JlYXRlcyBhIG11dGV4Lg0KKyB2b2lkIHZBVGFzayggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisgICAgLy8gQ3JlYXRlIHRoZSBtdXRleCB0byBndWFyZCBhIHNoYXJlZCByZXNvdXJjZS4NCisgICAgeE11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZVJlY3Vyc2l2ZU11dGV4KCk7DQorIH0NCisNCisgLy8gQSB0YXNrIHRoYXQgdXNlcyB0aGUgbXV0ZXguDQorIHZvaWQgdkFub3RoZXJUYXNrKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyAgICAvLyAuLi4gRG8gb3RoZXIgdGhpbmdzLg0KKw0KKyAgICBpZiggeE11dGV4ICE9IE5VTEwgKQ0KKyAgICB7DQorICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIG9idGFpbiB0aGUgbXV0ZXguICBJZiB0aGUgbXV0ZXggaXMgbm90IGF2YWlsYWJsZQ0KKyAgICAgICAgLy8gd2FpdCAxMCB0aWNrcyB0byBzZWUgaWYgaXQgYmVjb21lcyBmcmVlLgkNCisgICAgICAgIGlmKCB4U2VtYXBob3JlVGFrZVJlY3Vyc2l2ZSggeE11dGV4LCAoIHBvcnRUaWNrVHlwZSApIDEwICkgPT0gcGRUUlVFICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBXZSB3ZXJlIGFibGUgdG8gb2J0YWluIHRoZSBtdXRleCBhbmQgY2FuIG5vdyBhY2Nlc3MgdGhlDQorICAgICAgICAgICAgLy8gc2hhcmVkIHJlc291cmNlLg0KKw0KKyAgICAgICAgICAgIC8vIC4uLg0KKyAgICAgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgY29kZSBmdXJ0aGVyIGNhbGxzIHRvIA0KKwkJCS8vIHhTZW1hcGhvcmVUYWtlUmVjdXJzaXZlKCkgYXJlIG1hZGUgb24gdGhlIHNhbWUgbXV0ZXguICBJbiByZWFsDQorCQkJLy8gY29kZSB0aGVzZSB3b3VsZCBub3QgYmUganVzdCBzZXF1ZW50aWFsIGNhbGxzIGFzIHRoaXMgd291bGQgbWFrZQ0KKwkJCS8vIG5vIHNlbnNlLiAgSW5zdGVhZCB0aGUgY2FsbHMgYXJlIGxpa2VseSB0byBiZSBidXJpZWQgaW5zaWRlDQorCQkJLy8gYSBtb3JlIGNvbXBsZXggY2FsbCBzdHJ1Y3R1cmUuDQorICAgICAgICAgICAgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoIHhNdXRleCwgKCBwb3J0VGlja1R5cGUgKSAxMCApOw0KKyAgICAgICAgICAgIHhTZW1hcGhvcmVUYWtlUmVjdXJzaXZlKCB4TXV0ZXgsICggcG9ydFRpY2tUeXBlICkgMTAgKTsNCisNCisgICAgICAgICAgICAvLyBUaGUgbXV0ZXggaGFzIG5vdyBiZWVuICd0YWtlbicgdGhyZWUgdGltZXMsIHNvIHdpbGwgbm90IGJlIA0KKwkJCS8vIGF2YWlsYWJsZSB0byBhbm90aGVyIHRhc2sgdW50aWwgaXQgaGFzIGFsc28gYmVlbiBnaXZlbiBiYWNrDQorCQkJLy8gdGhyZWUgdGltZXMuICBBZ2FpbiBpdCBpcyB1bmxpa2VseSB0aGF0IHJlYWwgY29kZSB3b3VsZCBoYXZlDQorCQkJLy8gdGhlc2UgY2FsbHMgc2VxdWVudGlhbGx5LCBpdCB3b3VsZCBiZSBtb3JlIGxpa2VseSB0aGF0IHRoZSBjYWxscw0KKwkJCS8vIHRvIHhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlKCkgd291bGQgYmUgY2FsbGVkIGFzIGEgY2FsbCBzdGFjaw0KKwkJCS8vIHVud291bmQuICBUaGlzIGlzIGp1c3QgZm9yIGRlbW9uc3RyYXRpdmUgcHVycG9zZXMuDQorICAgICAgICAgICAgeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoIHhNdXRleCApOw0KKwkJCXhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlKCB4TXV0ZXggKTsNCisJCQl4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSggeE11dGV4ICk7DQorDQorCQkJLy8gTm93IHRoZSBtdXRleCBjYW4gYmUgdGFrZW4gYnkgb3RoZXIgdGFza3MuDQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gV2UgY291bGQgbm90IG9idGFpbiB0aGUgbXV0ZXggYW5kIGNhbiB0aGVyZWZvcmUgbm90IGFjY2Vzcw0KKyAgICAgICAgICAgIC8vIHRoZSBzaGFyZWQgcmVzb3VyY2Ugc2FmZWx5Lg0KKyAgICAgICAgfQ0KKyAgICB9DQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlIHhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlDQorICogXGluZ3JvdXAgU2VtYXBob3Jlcw0KKyAqLw0KKyNkZWZpbmUgeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoIHhNdXRleCApCXhRdWV1ZUdpdmVNdXRleFJlY3Vyc2l2ZSggKCB4TXV0ZXggKSApDQorDQorLyogDQorICogeFNlbWFwaG9yZUFsdEdpdmUoKSBpcyBhbiBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9mIHhTZW1hcGhvcmVHaXZlKCkuDQorICoNCisgKiBUaGUgc291cmNlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBhbHRlcm5hdGl2ZSAoQWx0KSBBUEkgaXMgbXVjaCANCisgKiBzaW1wbGVyCWJlY2F1c2UgaXQgZXhlY3V0ZXMgZXZlcnl0aGluZyBmcm9tIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uICANCisgKiBUaGlzIGlzCXRoZSBhcHByb2FjaCB0YWtlbiBieSBtYW55IG90aGVyIFJUT1NlcywgYnV0IEZyZWVSVE9TLm9yZyBoYXMgdGhlIA0KKyAqIHByZWZlcnJlZCBmdWxseSBmZWF0dXJlZCBBUEkgdG9vLiAgVGhlIGZ1bGx5IGZlYXR1cmVkIEFQSSBoYXMgbW9yZSANCisgKiBjb21wbGV4CWNvZGUgdGhhdCB0YWtlcyBsb25nZXIgdG8gZXhlY3V0ZSwgYnV0IG1ha2VzIG11Y2ggbGVzcyB1c2Ugb2YgDQorICogY3JpdGljYWwgc2VjdGlvbnMuICBUaGVyZWZvcmUgdGhlIGFsdGVybmF0aXZlIEFQSSBzYWNyaWZpY2VzIGludGVycnVwdCANCisgKiByZXNwb25zaXZlbmVzcyB0byBnYWluIGV4ZWN1dGlvbiBzcGVlZCwgd2hlcmVhcyB0aGUgZnVsbHkgZmVhdHVyZWQgQVBJDQorICogc2FjcmlmaWNlcyBleGVjdXRpb24gc3BlZWQgdG8gZW5zdXJlIGJldHRlciBpbnRlcnJ1cHQgcmVzcG9uc2l2ZW5lc3MuDQorICovDQorI2RlZmluZSB4U2VtYXBob3JlQWx0R2l2ZSggeFNlbWFwaG9yZSApCQl4UXVldWVBbHRHZW5lcmljU2VuZCggKCB4UXVldWVIYW5kbGUgKSAoIHhTZW1hcGhvcmUgKSwgTlVMTCwgc2VtR0lWRV9CTE9DS19USU1FLCBxdWV1ZVNFTkRfVE9fQkFDSyApDQorDQorLyoqDQorICogc2VtcGhyLiBoDQorICogPHByZT4NCisgeFNlbWFwaG9yZUdpdmVGcm9tSVNSKCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbg0KKyAgICAgICAgICAgICAgICAgICAgICApPC9wcmU+DQorICoNCisgKiA8aT5NYWNybzwvaT4gdG8gIHJlbGVhc2UgYSBzZW1hcGhvcmUuICBUaGUgc2VtYXBob3JlIG11c3QgaGF2ZSBwcmV2aW91c2x5IGJlZW4NCisgKiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIHZTZW1hcGhvcmVDcmVhdGVCaW5hcnkoKSBvciB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoKS4NCisgKg0KKyAqIE11dGV4IHR5cGUgc2VtYXBob3JlcyAodGhvc2UgY3JlYXRlZCB1c2luZyBhIGNhbGwgdG8geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCkpDQorICogbXVzdCBub3QgYmUgdXNlZCB3aXRoIHRoaXMgbWFjcm8uDQorICoNCisgKiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIGZyb20gYW4gSVNSLg0KKyAqDQorICogQHBhcmFtIHhTZW1hcGhvcmUgQSBoYW5kbGUgdG8gdGhlIHNlbWFwaG9yZSBiZWluZyByZWxlYXNlZC4gIFRoaXMgaXMgdGhlDQorICogaGFuZGxlIHJldHVybmVkIHdoZW4gdGhlIHNlbWFwaG9yZSB3YXMgY3JlYXRlZC4NCisgKg0KKyAqIEBwYXJhbSBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHhTZW1hcGhvcmVHaXZlRnJvbUlTUigpIHdpbGwgc2V0DQorICogKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gdG8gcGRUUlVFIGlmIGdpdmluZyB0aGUgc2VtYXBob3JlIGNhdXNlZCBhIHRhc2sNCisgKiB0byB1bmJsb2NrLCBhbmQgdGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50bHkNCisgKiBydW5uaW5nIHRhc2suICBJZiB4U2VtYXBob3JlR2l2ZUZyb21JU1IoKSBzZXRzIHRoaXMgdmFsdWUgdG8gcGRUUlVFIHRoZW4NCisgKiBhIGNvbnRleHQgc3dpdGNoIHNob3VsZCBiZSByZXF1ZXN0ZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgaXMgZXhpdGVkLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgdGhlIHNlbWFwaG9yZSB3YXMgc3VjY2Vzc2Z1bGx5IGdpdmVuLCBvdGhlcndpc2UgZXJyUVVFVUVfRlVMTC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIFwjZGVmaW5lIExPTkdfVElNRSAweGZmZmYNCisgXCNkZWZpbmUgVElDS1NfVE9fV0FJVAkxMA0KKyB4U2VtYXBob3JlSGFuZGxlIHhTZW1hcGhvcmUgPSBOVUxMOw0KKw0KKyAvLyBSZXBldGl0aXZlIHRhc2suDQorIHZvaWQgdkFUYXNrKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyAgICBmb3IoIDs7ICkNCisgICAgew0KKyAgICAgICAgLy8gV2Ugd2FudCB0aGlzIHRhc2sgdG8gcnVuIGV2ZXJ5IDEwIHRpY2tzIG9mIGEgdGltZXIuICBUaGUgc2VtYXBob3JlIA0KKyAgICAgICAgLy8gd2FzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgdGFzayB3YXMgc3RhcnRlZC4NCisNCisgICAgICAgIC8vIEJsb2NrIHdhaXRpbmcgZm9yIHRoZSBzZW1hcGhvcmUgdG8gYmVjb21lIGF2YWlsYWJsZS4NCisgICAgICAgIGlmKCB4U2VtYXBob3JlVGFrZSggeFNlbWFwaG9yZSwgTE9OR19USU1FICkgPT0gcGRUUlVFICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBJdCBpcyB0aW1lIHRvIGV4ZWN1dGUuDQorDQorICAgICAgICAgICAgLy8gLi4uDQorDQorICAgICAgICAgICAgLy8gV2UgaGF2ZSBmaW5pc2hlZCBvdXIgdGFzay4gIFJldHVybiB0byB0aGUgdG9wIG9mIHRoZSBsb29wIHdoZXJlDQorICAgICAgICAgICAgLy8gd2Ugd2lsbCBibG9jayBvbiB0aGUgc2VtYXBob3JlIHVudGlsIGl0IGlzIHRpbWUgdG8gZXhlY3V0ZSANCisgICAgICAgICAgICAvLyBhZ2Fpbi4gIE5vdGUgd2hlbiB1c2luZyB0aGUgc2VtYXBob3JlIGZvciBzeW5jaHJvbmlzYXRpb24gd2l0aCBhbg0KKwkJCS8vIElTUiBpbiB0aGlzIG1hbm5lciB0aGVyZSBpcyBubyBuZWVkIHRvICdnaXZlJyB0aGUgc2VtYXBob3JlIGJhY2suDQorICAgICAgICB9DQorICAgIH0NCisgfQ0KKw0KKyAvLyBUaW1lciBJU1INCisgdm9pZCB2VGltZXJJU1IoIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHVjTG9jYWxUaWNrQ291bnQgPSAwOw0KKyBzdGF0aWMgc2lnbmVkIHBvcnRCQVNFX1RZUEUgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuOw0KKw0KKyAgICAvLyBBIHRpbWVyIHRpY2sgaGFzIG9jY3VycmVkLg0KKw0KKyAgICAvLyAuLi4gRG8gb3RoZXIgdGltZSBmdW5jdGlvbnMuDQorDQorICAgIC8vIElzIGl0IHRpbWUgZm9yIHZBVGFzayAoKSB0byBydW4/DQorCXhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkRkFMU0U7DQorICAgIHVjTG9jYWxUaWNrQ291bnQrKzsNCisgICAgaWYoIHVjTG9jYWxUaWNrQ291bnQgPj0gVElDS1NfVE9fV0FJVCApDQorICAgIHsNCisgICAgICAgIC8vIFVuYmxvY2sgdGhlIHRhc2sgYnkgcmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUuDQorICAgICAgICB4U2VtYXBob3JlR2l2ZUZyb21JU1IoIHhTZW1hcGhvcmUsICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKTsNCisNCisgICAgICAgIC8vIFJlc2V0IHRoZSBjb3VudCBzbyB3ZSByZWxlYXNlIHRoZSBzZW1hcGhvcmUgYWdhaW4gaW4gMTAgdGlja3MgdGltZS4NCisgICAgICAgIHVjTG9jYWxUaWNrQ291bnQgPSAwOw0KKyAgICB9DQorDQorICAgIGlmKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gcGRGQUxTRSApDQorICAgIHsNCisgICAgICAgIC8vIFdlIGNhbiBmb3JjZSBhIGNvbnRleHQgc3dpdGNoIGhlcmUuICBDb250ZXh0IHN3aXRjaGluZyBmcm9tIGFuDQorICAgICAgICAvLyBJU1IgdXNlcyBwb3J0IHNwZWNpZmljIHN5bnRheC4gIENoZWNrIHRoZSBkZW1vIHRhc2sgZm9yIHlvdXIgcG9ydA0KKyAgICAgICAgLy8gdG8gZmluZCB0aGUgc3ludGF4IHJlcXVpcmVkLg0KKyAgICB9DQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhTZW1hcGhvcmVHaXZlRnJvbUlTUiB4U2VtYXBob3JlR2l2ZUZyb21JU1INCisgKiBcaW5ncm91cCBTZW1hcGhvcmVzDQorICovDQorI2RlZmluZSB4U2VtYXBob3JlR2l2ZUZyb21JU1IoIHhTZW1hcGhvcmUsIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKQkJCXhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggKCB4UXVldWVIYW5kbGUgKSAoIHhTZW1hcGhvcmUgKSwgTlVMTCwgKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICksIHF1ZXVlU0VORF9UT19CQUNLICkNCisNCisvKioNCisgKiBzZW1waHIuIGgNCisgKiA8cHJlPg0KKyB4U2VtYXBob3JlVGFrZUZyb21JU1IoIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBwb3J0QkFTRV9UWVBFICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuDQorICAgICAgICAgICAgICAgICAgICAgICk8L3ByZT4NCisgKg0KKyAqIDxpPk1hY3JvPC9pPiB0byAgdGFrZSBhIHNlbWFwaG9yZSBmcm9tIGFuIElTUi4gIFRoZSBzZW1hcGhvcmUgbXVzdCBoYXZlIA0KKyAqIHByZXZpb3VzbHkgYmVlbiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIHZTZW1hcGhvcmVDcmVhdGVCaW5hcnkoKSBvciANCisgKiB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoKS4NCisgKg0KKyAqIE11dGV4IHR5cGUgc2VtYXBob3JlcyAodGhvc2UgY3JlYXRlZCB1c2luZyBhIGNhbGwgdG8geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCkpDQorICogbXVzdCBub3QgYmUgdXNlZCB3aXRoIHRoaXMgbWFjcm8uDQorICoNCisgKiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIGZyb20gYW4gSVNSLCBob3dldmVyIHRha2luZyBhIHNlbWFwaG9yZSBmcm9tIGFuIElTUg0KKyAqIGlzIG5vdCBhIGNvbW1vbiBvcGVyYXRpb24uICBJdCBpcyBsaWtlbHkgdG8gb25seSBiZSB1c2VmdWwgd2hlbiB0YWtpbmcgYQ0KKyAqIGNvdW50aW5nIHNlbWFwaG9yZSB3aGVuIGFuIGludGVycnVwdCBpcyBvYnRhaW5pbmcgYW4gb2JqZWN0IGZyb20gYSByZXNvdXJjZQ0KKyAqIHBvb2wgKHdoZW4gdGhlIHNlbWFwaG9yZSBjb3VudCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlKS4NCisgKg0KKyAqIEBwYXJhbSB4U2VtYXBob3JlIEEgaGFuZGxlIHRvIHRoZSBzZW1hcGhvcmUgYmVpbmcgdGFrZW4uICBUaGlzIGlzIHRoZQ0KKyAqIGhhbmRsZSByZXR1cm5lZCB3aGVuIHRoZSBzZW1hcGhvcmUgd2FzIGNyZWF0ZWQuDQorICoNCisgKiBAcGFyYW0gcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB4U2VtYXBob3JlVGFrZUZyb21JU1IoKSB3aWxsIHNldA0KKyAqICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHRvIHBkVFJVRSBpZiB0YWtpbmcgdGhlIHNlbWFwaG9yZSBjYXVzZWQgYSB0YXNrDQorICogdG8gdW5ibG9jaywgYW5kIHRoZSB1bmJsb2NrZWQgdGFzayBoYXMgYSBwcmlvcml0eSBoaWdoZXIgdGhhbiB0aGUgY3VycmVudGx5DQorICogcnVubmluZyB0YXNrLiAgSWYgeFNlbWFwaG9yZVRha2VGcm9tSVNSKCkgc2V0cyB0aGlzIHZhbHVlIHRvIHBkVFJVRSB0aGVuDQorICogYSBjb250ZXh0IHN3aXRjaCBzaG91bGQgYmUgcmVxdWVzdGVkIGJlZm9yZSB0aGUgaW50ZXJydXB0IGlzIGV4aXRlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSBzZW1hcGhvcmUgd2FzIHN1Y2Nlc3NmdWxseSB0YWtlbiwgb3RoZXJ3aXNlIA0KKyAqIHBkRkFMU0UNCisgKi8NCisjZGVmaW5lIHhTZW1hcGhvcmVUYWtlRnJvbUlTUiggeFNlbWFwaG9yZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApCQkJeFF1ZXVlUmVjZWl2ZUZyb21JU1IoICggeFF1ZXVlSGFuZGxlICkgKCB4U2VtYXBob3JlICksIE5VTEwsICggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICkNCisNCisvKioNCisgKiBzZW1waHIuIGgNCisgKiA8cHJlPnhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZUNyZWF0ZU11dGV4KCB2b2lkICk8L3ByZT4NCisgKg0KKyAqIDxpPk1hY3JvPC9pPiB0aGF0IGltcGxlbWVudHMgYSBtdXRleCBzZW1hcGhvcmUgYnkgdXNpbmcgdGhlIGV4aXN0aW5nIHF1ZXVlIA0KKyAqIG1lY2hhbmlzbS4NCisgKg0KKyAqIE11dGV4ZXMgY3JlYXRlZCB1c2luZyB0aGlzIG1hY3JvIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgeFNlbWFwaG9yZVRha2UoKQ0KKyAqIGFuZCB4U2VtYXBob3JlR2l2ZSgpIG1hY3Jvcy4gIFRoZSB4U2VtYXBob3JlVGFrZVJlY3Vyc2l2ZSgpIGFuZCANCisgKiB4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSgpIG1hY3JvcyBzaG91bGQgbm90IGJlIHVzZWQuDQorICogDQorICogVGhpcyB0eXBlIG9mIHNlbWFwaG9yZSB1c2VzIGEgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbWVjaGFuaXNtIHNvIGEgdGFzayANCisgKiAndGFraW5nJyBhIHNlbWFwaG9yZSBNVVNUIEFMV0FZUyAnZ2l2ZScgdGhlIHNlbWFwaG9yZSBiYWNrIG9uY2UgdGhlIA0KKyAqIHNlbWFwaG9yZSBpdCBpcyBubyBsb25nZXIgcmVxdWlyZWQuICANCisgKg0KKyAqIE11dGV4IHR5cGUgc2VtYXBob3JlcyBjYW5ub3QgYmUgdXNlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcy4gIA0KKyAqDQorICogU2VlIHZTZW1hcGhvcmVDcmVhdGVCaW5hcnkoKSBmb3IgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gYmUgDQorICogdXNlZCBmb3IgcHVyZSBzeW5jaHJvbmlzYXRpb24gKHdoZXJlIG9uZSB0YXNrIG9yIGludGVycnVwdCBhbHdheXMgJ2dpdmVzJyB0aGUgDQorICogc2VtYXBob3JlIGFuZCBhbm90aGVyIGFsd2F5cyAndGFrZXMnIHRoZSBzZW1hcGhvcmUpIGFuZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgDQorICogc2VydmljZSByb3V0aW5lcy4NCisgKg0KKyAqIEByZXR1cm4geFNlbWFwaG9yZSBIYW5kbGUgdG8gdGhlIGNyZWF0ZWQgbXV0ZXggc2VtYXBob3JlLiAgU2hvdWxkIGJlIG9mIHR5cGUgDQorICoJCXhTZW1hcGhvcmVIYW5kbGUuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyA8cHJlPg0KKyB4U2VtYXBob3JlSGFuZGxlIHhTZW1hcGhvcmU7DQorDQorIHZvaWQgdkFUYXNrKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyAgICAvLyBTZW1hcGhvcmUgY2Fubm90IGJlIHVzZWQgYmVmb3JlIGEgY2FsbCB0byB4U2VtYXBob3JlQ3JlYXRlTXV0ZXgoKS4NCisgICAgLy8gVGhpcyBpcyBhIG1hY3JvIHNvIHBhc3MgdGhlIHZhcmlhYmxlIGluIGRpcmVjdGx5Lg0KKyAgICB4U2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7DQorDQorICAgIGlmKCB4U2VtYXBob3JlICE9IE5VTEwgKQ0KKyAgICB7DQorICAgICAgICAvLyBUaGUgc2VtYXBob3JlIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4NCisgICAgICAgIC8vIFRoZSBzZW1hcGhvcmUgY2FuIG5vdyBiZSB1c2VkLiAgDQorICAgIH0NCisgfQ0KKyA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlNlbWFwaG9yZUNyZWF0ZU11dGV4IHZTZW1hcGhvcmVDcmVhdGVNdXRleA0KKyAqIFxpbmdyb3VwIFNlbWFwaG9yZXMNCisgKi8NCisjZGVmaW5lIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpIHhRdWV1ZUNyZWF0ZU11dGV4KCBxdWV1ZVFVRVVFX1RZUEVfTVVURVggKQ0KKw0KKw0KKy8qKg0KKyAqIHNlbXBoci4gaA0KKyAqIDxwcmU+eFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlQ3JlYXRlUmVjdXJzaXZlTXV0ZXgoIHZvaWQgKTwvcHJlPg0KKyAqDQorICogPGk+TWFjcm88L2k+IHRoYXQgaW1wbGVtZW50cyBhIHJlY3Vyc2l2ZSBtdXRleCBieSB1c2luZyB0aGUgZXhpc3RpbmcgcXVldWUgDQorICogbWVjaGFuaXNtLg0KKyAqDQorICogTXV0ZXhlcyBjcmVhdGVkIHVzaW5nIHRoaXMgbWFjcm8gY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSANCisgKiB4U2VtYXBob3JlVGFrZVJlY3Vyc2l2ZSgpIGFuZCB4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSgpIG1hY3Jvcy4gIFRoZSANCisgKiB4U2VtYXBob3JlVGFrZSgpIGFuZCB4U2VtYXBob3JlR2l2ZSgpIG1hY3JvcyBzaG91bGQgbm90IGJlIHVzZWQuDQorICoNCisgKiBBIG11dGV4IHVzZWQgcmVjdXJzaXZlbHkgY2FuIGJlICd0YWtlbicgcmVwZWF0ZWRseSBieSB0aGUgb3duZXIuIFRoZSBtdXRleCANCisgKiBkb2Vzbid0IGJlY29tZSBhdmFpbGFibGUgYWdhaW4gdW50aWwgdGhlIG93bmVyIGhhcyBjYWxsZWQgDQorICogeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoKSBmb3IgZWFjaCBzdWNjZXNzZnVsICd0YWtlJyByZXF1ZXN0LiAgRm9yIGV4YW1wbGUsIA0KKyAqIGlmIGEgdGFzayBzdWNjZXNzZnVsbHkgJ3Rha2VzJyB0aGUgc2FtZSBtdXRleCA1IHRpbWVzIHRoZW4gdGhlIG11dGV4IHdpbGwgDQorICogbm90IGJlIGF2YWlsYWJsZSB0byBhbnkgb3RoZXIgdGFzayB1bnRpbCBpdCBoYXMgYWxzbyAgJ2dpdmVuJyB0aGUgbXV0ZXggYmFjaw0KKyAqIGV4YWN0bHkgZml2ZSB0aW1lcy4NCisgKiANCisgKiBUaGlzIHR5cGUgb2Ygc2VtYXBob3JlIHVzZXMgYSBwcmlvcml0eSBpbmhlcml0YW5jZSBtZWNoYW5pc20gc28gYSB0YXNrIA0KKyAqICd0YWtpbmcnIGEgc2VtYXBob3JlIE1VU1QgQUxXQVlTICdnaXZlJyB0aGUgc2VtYXBob3JlIGJhY2sgb25jZSB0aGUgDQorICogc2VtYXBob3JlIGl0IGlzIG5vIGxvbmdlciByZXF1aXJlZC4gIA0KKyAqDQorICogTXV0ZXggdHlwZSBzZW1hcGhvcmVzIGNhbm5vdCBiZSB1c2VkIGZyb20gd2l0aGluIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzLiAgDQorICoNCisgKiBTZWUgdlNlbWFwaG9yZUNyZWF0ZUJpbmFyeSgpIGZvciBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBiZSANCisgKiB1c2VkIGZvciBwdXJlIHN5bmNocm9uaXNhdGlvbiAod2hlcmUgb25lIHRhc2sgb3IgaW50ZXJydXB0IGFsd2F5cyAnZ2l2ZXMnIHRoZSANCisgKiBzZW1hcGhvcmUgYW5kIGFub3RoZXIgYWx3YXlzICd0YWtlcycgdGhlIHNlbWFwaG9yZSkgYW5kIGZyb20gd2l0aGluIGludGVycnVwdCANCisgKiBzZXJ2aWNlIHJvdXRpbmVzLg0KKyAqDQorICogQHJldHVybiB4U2VtYXBob3JlIEhhbmRsZSB0byB0aGUgY3JlYXRlZCBtdXRleCBzZW1hcGhvcmUuICBTaG91bGQgYmUgb2YgdHlwZSANCisgKgkJeFNlbWFwaG9yZUhhbmRsZS4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorIDxwcmU+DQorIHhTZW1hcGhvcmVIYW5kbGUgeFNlbWFwaG9yZTsNCisNCisgdm9pZCB2QVRhc2soIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorICAgIC8vIFNlbWFwaG9yZSBjYW5ub3QgYmUgdXNlZCBiZWZvcmUgYSBjYWxsIHRvIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpLg0KKyAgICAvLyBUaGlzIGlzIGEgbWFjcm8gc28gcGFzcyB0aGUgdmFyaWFibGUgaW4gZGlyZWN0bHkuDQorICAgIHhTZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlUmVjdXJzaXZlTXV0ZXgoKTsNCisNCisgICAgaWYoIHhTZW1hcGhvcmUgIT0gTlVMTCApDQorICAgIHsNCisgICAgICAgIC8vIFRoZSBzZW1hcGhvcmUgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgICAgICAgLy8gVGhlIHNlbWFwaG9yZSBjYW4gbm93IGJlIHVzZWQuICANCisgICAgfQ0KKyB9DQorIDwvcHJlPg0KKyAqIFxkZWZncm91cCB2U2VtYXBob3JlQ3JlYXRlTXV0ZXggdlNlbWFwaG9yZUNyZWF0ZU11dGV4DQorICogXGluZ3JvdXAgU2VtYXBob3Jlcw0KKyAqLw0KKyNkZWZpbmUgeFNlbWFwaG9yZUNyZWF0ZVJlY3Vyc2l2ZU11dGV4KCkgeFF1ZXVlQ3JlYXRlTXV0ZXgoIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVggKQ0KKw0KKy8qKg0KKyAqIHNlbXBoci4gaA0KKyAqIDxwcmU+eFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhNYXhDb3VudCwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEluaXRpYWxDb3VudCApPC9wcmU+DQorICoNCisgKiA8aT5NYWNybzwvaT4gdGhhdCBjcmVhdGVzIGEgY291bnRpbmcgc2VtYXBob3JlIGJ5IHVzaW5nIHRoZSBleGlzdGluZyANCisgKiBxdWV1ZSBtZWNoYW5pc20uICANCisgKg0KKyAqIENvdW50aW5nIHNlbWFwaG9yZXMgYXJlIHR5cGljYWxseSB1c2VkIGZvciB0d28gdGhpbmdzOg0KKyAqDQorICogMSkgQ291bnRpbmcgZXZlbnRzLiAgDQorICoNCisgKiAgICBJbiB0aGlzIHVzYWdlIHNjZW5hcmlvIGFuIGV2ZW50IGhhbmRsZXIgd2lsbCAnZ2l2ZScgYSBzZW1hcGhvcmUgZWFjaCB0aW1lDQorICogICAgYW4gZXZlbnQgb2NjdXJzIChpbmNyZW1lbnRpbmcgdGhlIHNlbWFwaG9yZSBjb3VudCB2YWx1ZSksIGFuZCBhIGhhbmRsZXIgDQorICogICAgdGFzayB3aWxsICd0YWtlJyBhIHNlbWFwaG9yZSBlYWNoIHRpbWUgaXQgcHJvY2Vzc2VzIGFuIGV2ZW50IA0KKyAqICAgIChkZWNyZW1lbnRpbmcgdGhlIHNlbWFwaG9yZSBjb3VudCB2YWx1ZSkuICBUaGUgY291bnQgdmFsdWUgaXMgdGhlcmVmb3JlIA0KKyAqICAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCBoYXZlIG9jY3VycmVkIGFuZCB0aGUgDQorICogICAgbnVtYmVyIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIEluIHRoaXMgY2FzZSBpdCBpcyBkZXNpcmFibGUgZm9yIHRoZSANCisgKiAgICBpbml0aWFsIGNvdW50IHZhbHVlIHRvIGJlIHplcm8uDQorICoNCisgKiAyKSBSZXNvdXJjZSBtYW5hZ2VtZW50Lg0KKyAqDQorICogICAgSW4gdGhpcyB1c2FnZSBzY2VuYXJpbyB0aGUgY291bnQgdmFsdWUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzDQorICogICAgYXZhaWxhYmxlLiAgVG8gb2J0YWluIGNvbnRyb2wgb2YgYSByZXNvdXJjZSBhIHRhc2sgbXVzdCBmaXJzdCBvYnRhaW4gYSANCisgKiAgICBzZW1hcGhvcmUgLSBkZWNyZW1lbnRpbmcgdGhlIHNlbWFwaG9yZSBjb3VudCB2YWx1ZS4gIFdoZW4gdGhlIGNvdW50IHZhbHVlDQorICogICAgcmVhY2hlcyB6ZXJvIHRoZXJlIGFyZSBubyBmcmVlIHJlc291cmNlcy4gIFdoZW4gYSB0YXNrIGZpbmlzaGVzIHdpdGggdGhlDQorICogICAgcmVzb3VyY2UgaXQgJ2dpdmVzJyB0aGUgc2VtYXBob3JlIGJhY2sgLSBpbmNyZW1lbnRpbmcgdGhlIHNlbWFwaG9yZSBjb3VudA0KKyAqICAgIHZhbHVlLiAgSW4gdGhpcyBjYXNlIGl0IGlzIGRlc2lyYWJsZSBmb3IgdGhlIGluaXRpYWwgY291bnQgdmFsdWUgdG8gYmUNCisgKiAgICBlcXVhbCB0byB0aGUgbWF4aW11bSBjb3VudCB2YWx1ZSwgaW5kaWNhdGluZyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGZyZWUuDQorICoNCisgKiBAcGFyYW0gdXhNYXhDb3VudCBUaGUgbWF4aW11bSBjb3VudCB2YWx1ZSB0aGF0IGNhbiBiZSByZWFjaGVkLiAgV2hlbiB0aGUgDQorICogICAgICAgIHNlbWFwaG9yZSByZWFjaGVzIHRoaXMgdmFsdWUgaXQgY2FuIG5vIGxvbmdlciBiZSAnZ2l2ZW4nLg0KKyAqDQorICogQHBhcmFtIHV4SW5pdGlhbENvdW50IFRoZSBjb3VudCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgc2VtYXBob3JlIHdoZW4gaXQgaXMNCisgKiAgICAgICAgY3JlYXRlZC4NCisgKg0KKyAqIEByZXR1cm4gSGFuZGxlIHRvIHRoZSBjcmVhdGVkIHNlbWFwaG9yZS4gIE51bGwgaWYgdGhlIHNlbWFwaG9yZSBjb3VsZCBub3QgYmUNCisgKiAgICAgICAgIGNyZWF0ZWQuDQorICogDQorICogRXhhbXBsZSB1c2FnZToNCisgPHByZT4NCisgeFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlOw0KKw0KKyB2b2lkIHZBVGFzayggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisgeFNlbWFwaG9yZUhhbmRsZSB4U2VtYXBob3JlID0gTlVMTDsNCisNCisgICAgLy8gU2VtYXBob3JlIGNhbm5vdCBiZSB1c2VkIGJlZm9yZSBhIGNhbGwgdG8geFNlbWFwaG9yZUNyZWF0ZUNvdW50aW5nKCkuDQorICAgIC8vIFRoZSBtYXggdmFsdWUgdG8gd2hpY2ggdGhlIHNlbWFwaG9yZSBjYW4gY291bnQgc2hvdWxkIGJlIDEwLCBhbmQgdGhlDQorICAgIC8vIGluaXRpYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGNvdW50IHNob3VsZCBiZSAwLg0KKyAgICB4U2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZUNvdW50aW5nKCAxMCwgMCApOw0KKw0KKyAgICBpZiggeFNlbWFwaG9yZSAhPSBOVUxMICkNCisgICAgew0KKyAgICAgICAgLy8gVGhlIHNlbWFwaG9yZSB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuDQorICAgICAgICAvLyBUaGUgc2VtYXBob3JlIGNhbiBub3cgYmUgdXNlZC4gIA0KKyAgICB9DQorIH0NCisgPC9wcmU+DQorICogXGRlZmdyb3VwIHhTZW1hcGhvcmVDcmVhdGVDb3VudGluZyB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcNCisgKiBcaW5ncm91cCBTZW1hcGhvcmVzDQorICovDQorI2RlZmluZSB4U2VtYXBob3JlQ3JlYXRlQ291bnRpbmcoIHV4TWF4Q291bnQsIHV4SW5pdGlhbENvdW50ICkgeFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoICggdXhNYXhDb3VudCApLCAoIHV4SW5pdGlhbENvdW50ICkgKQ0KKw0KKy8qKg0KKyAqIHNlbXBoci4gaA0KKyAqIDxwcmU+dm9pZCB2U2VtYXBob3JlRGVsZXRlKCB4U2VtYXBob3JlSGFuZGxlIHhTZW1hcGhvcmUgKTs8L3ByZT4NCisgKg0KKyAqIERlbGV0ZSBhIHNlbWFwaG9yZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHdpdGggY2FyZS4gIEZvciBleGFtcGxlLA0KKyAqIGRvIG5vdCBkZWxldGUgYSBtdXRleCB0eXBlIHNlbWFwaG9yZSBpZiB0aGUgbXV0ZXggaXMgaGVsZCBieSBhIHRhc2suDQorICoNCisgKiBAcGFyYW0geFNlbWFwaG9yZSBBIGhhbmRsZSB0byB0aGUgc2VtYXBob3JlIHRvIGJlIGRlbGV0ZWQuDQorICoNCisgKiBccGFnZSB2U2VtYXBob3JlRGVsZXRlIHZTZW1hcGhvcmVEZWxldGUNCisgKiBcaW5ncm91cCBTZW1hcGhvcmVzDQorICovDQorI2RlZmluZSB2U2VtYXBob3JlRGVsZXRlKCB4U2VtYXBob3JlICkgdlF1ZXVlRGVsZXRlKCAoIHhRdWV1ZUhhbmRsZSApICggeFNlbWFwaG9yZSApICkNCisNCisvKioNCisgKiBzZW1waHIuaA0KKyAqIDxwcmU+eFRhc2tIYW5kbGUgeFNlbWFwaG9yZUdldE11dGV4SG9sZGVyKCB4U2VtYXBob3JlSGFuZGxlIHhNdXRleCApOzwvcHJlPg0KKyAqDQorICogSWYgeE11dGV4IGlzIGluZGVlZCBhIG11dGV4IHR5cGUgc2VtYXBob3JlLCByZXR1cm4gdGhlIGN1cnJlbnQgbXV0ZXggaG9sZGVyLg0KKyAqIElmIHhNdXRleCBpcyBub3QgYSBtdXRleCB0eXBlIHNlbWFwaG9yZSwgb3IgdGhlIG11dGV4IGlzIGF2YWlsYWJsZSAobm90IGhlbGQNCisgKiBieSBhIHRhc2spLCByZXR1cm4gTlVMTC4NCisgKg0KKyAqIE5vdGU6IFRoaXMgSXMgaXMgYSBnb29kIHdheSBvZiBkZXRlcm1pbmluZyBpZiB0aGUgY2FsbGluZyB0YXNrIGlzIHRoZSBtdXRleCANCisgKiBob2xkZXIsIGJ1dCBub3QgYSBnb29kIHdheSBvZiBkZXRlcm1pbmluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIG11dGV4IGhvbGRlciBhcw0KKyAqIHRoZSBob2xkZXIgbWF5IGNoYW5nZSBiZXR3ZWVuIHRoZSBmdW5jdGlvbiBleGl0aW5nIGFuZCB0aGUgcmV0dXJuZWQgdmFsdWUNCisgKiBiZWluZyB0ZXN0ZWQuDQorICovDQorI2RlZmluZSB4U2VtYXBob3JlR2V0TXV0ZXhIb2xkZXIoIHhTZW1hcGhvcmUgKSB4UXVldWVHZXRNdXRleEhvbGRlciggKCB4U2VtYXBob3JlICkgKQ0KKw0KKyNlbmRpZiAvKiBTRU1BUEhPUkVfSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3N0YXRpYy1hbGxvY2F0b3IuaCBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3N0YXRpYy1hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTZkZWZjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvc3RhdGljLWFsbG9jYXRvci5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX19TVEFUSUNfQUxMT0NBVE9SX0hfSU5DTFVERURfXworI2RlZmluZSBfX1NUQVRJQ19BTExPQ0FUT1JfSF9JTkNMVURFRF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiBzdHJ1Y3Qgc3RhdGljX3Bvb2xfcyB7CisgICAgdm9pZCogYmFja2luZ19zdG9yZTsKKyAgICB2b2lkKiBmbGFnczsKKyAgICBpbnQgICBpdGVtX3NpemU7CisgICAgaW50ICAgbnVtX2l0ZW1zOworfSBzdGF0aWNfcG9vbF90OworCit2b2lkIHBvb2xJbml0KCBzdGF0aWNfcG9vbF90KiBpblBvb2wsCisgICAgICAgICAgICAgICBpbnQgaW5JdGVtU2l6ZSwKKyAgICAgICAgICAgICAgIGludCBpbk51bUl0ZW1zLAorICAgICAgICAgICAgICAgdm9pZCogaW5CYWNraW5nU3RvcmUsCisgICAgICAgICAgICAgICB2b2lkKiBpbkZsYWdzKTsKK3ZvaWQgKnBvb2xBbGxvY2F0ZUJ1ZmZlciggc3RhdGljX3Bvb2xfdCogaW5Qb29sICk7Cit2b2lkIHBvb2xGcmVlQnVmZmVyKCBzdGF0aWNfcG9vbF90KiBpblBvb2wsIHZvaWQqIGluUG9pbnRlcik7CisKKworI2VuZGlmIC8vIF9fU1RBVElDX0FMTE9DQVRPUl9IX0lOQ0xVREVEX18KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3Rhc2suaCBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3Rhc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjk2NWVlCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvdGFzay5oCkBAIC0wLDAgKzEsMTMyMiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorDQorCQ0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisJICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisJICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorCQ0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorCQ0KKwlodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gU2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisJaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisJUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisJdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKwl0aGUgT3BlblJUT1MgYnJhbmQ6ICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKwlwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisJdGhlCVNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgVEFTS19IDQorI2RlZmluZSBUQVNLX0gNCisNCisjaWZuZGVmIElOQ19GUkVFUlRPU19IDQorCSNlcnJvciAiaW5jbHVkZSBGcmVlUlRPUy5oIG11c3QgYXBwZWFyIGluIHNvdXJjZSBmaWxlcyBiZWZvcmUgaW5jbHVkZSB0YXNrLmgiDQorI2VuZGlmDQorDQorI2luY2x1ZGUgInBvcnRhYmxlLmgiDQorI2luY2x1ZGUgImxpc3QuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogTUFDUk9TIEFORCBERUZJTklUSU9OUw0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSB0c2tLRVJORUxfVkVSU0lPTl9OVU1CRVIgIlY3LjIuMCINCisNCisvKioNCisgKiB0YXNrLiBoDQorICoNCisgKiBUeXBlIGJ5IHdoaWNoIHRhc2tzIGFyZSByZWZlcmVuY2VkLiAgRm9yIGV4YW1wbGUsIGEgY2FsbCB0byB4VGFza0NyZWF0ZQ0KKyAqIHJldHVybnMgKHZpYSBhIHBvaW50ZXIgcGFyYW1ldGVyKSBhbiB4VGFza0hhbmRsZSB2YXJpYWJsZSB0aGF0IGNhbiB0aGVuDQorICogYmUgdXNlZCBhcyBhIHBhcmFtZXRlciB0byB2VGFza0RlbGV0ZSB0byBkZWxldGUgdGhlIHRhc2suDQorICoNCisgKiBccGFnZSB4VGFza0hhbmRsZSB4VGFza0hhbmRsZQ0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQordHlwZWRlZiB2b2lkICogeFRhc2tIYW5kbGU7DQorDQorLyoNCisgKiBVc2VkIGludGVybmFsbHkgb25seS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCB4VElNRV9PVVQNCit7DQorCXBvcnRCQVNFX1RZUEUgeE92ZXJmbG93Q291bnQ7DQorCXBvcnRUaWNrVHlwZSAgeFRpbWVPbkVudGVyaW5nOw0KK30geFRpbWVPdXRUeXBlOw0KKw0KKy8qDQorICogRGVmaW5lcyB0aGUgbWVtb3J5IHJhbmdlcyBhbGxvY2F0ZWQgdG8gdGhlIHRhc2sgd2hlbiBhbiBNUFUgaXMgdXNlZC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCB4TUVNT1JZX1JFR0lPTg0KK3sNCisJdm9pZCAqcHZCYXNlQWRkcmVzczsNCisJdW5zaWduZWQgbG9uZyB1bExlbmd0aEluQnl0ZXM7DQorCXVuc2lnbmVkIGxvbmcgdWxQYXJhbWV0ZXJzOw0KK30geE1lbW9yeVJlZ2lvbjsNCisNCisvKg0KKyAqIFBhcmFtZXRlcnMgcmVxdWlyZWQgdG8gY3JlYXRlIGFuIE1QVSBwcm90ZWN0ZWQgdGFzay4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCB4VEFTS19QQVJBTVRFUlMNCit7DQorCXBkVEFTS19DT0RFIHB2VGFza0NvZGU7DQorCWNvbnN0IHNpZ25lZCBjaGFyICogY29uc3QgcGNOYW1lOw0KKwl1bnNpZ25lZCBzaG9ydCB1c1N0YWNrRGVwdGg7DQorCXZvaWQgKnB2UGFyYW1ldGVyczsNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFByaW9yaXR5Ow0KKwlwb3J0U1RBQ0tfVFlQRSAqcHV4U3RhY2tCdWZmZXI7DQorCXhNZW1vcnlSZWdpb24geFJlZ2lvbnNbIHBvcnROVU1fQ09ORklHVVJBQkxFX1JFR0lPTlMgXTsNCit9IHhUYXNrUGFyYW1ldGVyczsNCisNCisvKg0KKyAqIERlZmluZXMgdGhlIHByaW9yaXR5IHVzZWQgYnkgdGhlIGlkbGUgdGFzay4gIFRoaXMgbXVzdCBub3QgYmUgbW9kaWZpZWQuDQorICoNCisgKiBcaW5ncm91cCBUYXNrVXRpbHMNCisgKi8NCisjZGVmaW5lIHRza0lETEVfUFJJT1JJVFkJCQkoICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkNCisNCisvKioNCisgKiB0YXNrLiBoDQorICoNCisgKiBNYWNybyBmb3IgZm9yY2luZyBhIGNvbnRleHQgc3dpdGNoLg0KKyAqDQorICogXHBhZ2UgdGFza1lJRUxEIHRhc2tZSUVMRA0KKyAqIFxpbmdyb3VwIFNjaGVkdWxlckNvbnRyb2wNCisgKi8NCisjZGVmaW5lIHRhc2tZSUVMRCgpCQkJCQlwb3J0WUlFTEQoKQ0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKg0KKyAqIE1hY3JvIHRvIG1hcmsgdGhlIHN0YXJ0IG9mIGEgY3JpdGljYWwgY29kZSByZWdpb24uICBQcmVlbXB0aXZlIGNvbnRleHQNCisgKiBzd2l0Y2hlcyBjYW5ub3Qgb2NjdXIgd2hlbiBpbiBhIGNyaXRpY2FsIHJlZ2lvbi4NCisgKg0KKyAqIE5PVEU6IFRoaXMgbWF5IGFsdGVyIHRoZSBzdGFjayAoZGVwZW5kaW5nIG9uIHRoZSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbikNCisgKiBzbyBtdXN0IGJlIHVzZWQgd2l0aCBjYXJlIQ0KKyAqDQorICogXHBhZ2UgdGFza0VOVEVSX0NSSVRJQ0FMIHRhc2tFTlRFUl9DUklUSUNBTA0KKyAqIFxpbmdyb3VwIFNjaGVkdWxlckNvbnRyb2wNCisgKi8NCisjZGVmaW5lIHRhc2tFTlRFUl9DUklUSUNBTCgpCQlwb3J0RU5URVJfQ1JJVElDQUwoKQ0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKg0KKyAqIE1hY3JvIHRvIG1hcmsgdGhlIGVuZCBvZiBhIGNyaXRpY2FsIGNvZGUgcmVnaW9uLiAgUHJlZW1wdGl2ZSBjb250ZXh0DQorICogc3dpdGNoZXMgY2Fubm90IG9jY3VyIHdoZW4gaW4gYSBjcml0aWNhbCByZWdpb24uDQorICoNCisgKiBOT1RFOiBUaGlzIG1heSBhbHRlciB0aGUgc3RhY2sgKGRlcGVuZGluZyBvbiB0aGUgcG9ydGFibGUgaW1wbGVtZW50YXRpb24pDQorICogc28gbXVzdCBiZSB1c2VkIHdpdGggY2FyZSENCisgKg0KKyAqIFxwYWdlIHRhc2tFWElUX0NSSVRJQ0FMIHRhc2tFWElUX0NSSVRJQ0FMDQorICogXGluZ3JvdXAgU2NoZWR1bGVyQ29udHJvbA0KKyAqLw0KKyNkZWZpbmUgdGFza0VYSVRfQ1JJVElDQUwoKQkJCXBvcnRFWElUX0NSSVRJQ0FMKCkNCisNCisvKioNCisgKiB0YXNrLiBoDQorICoNCisgKiBNYWNybyB0byBkaXNhYmxlIGFsbCBtYXNrYWJsZSBpbnRlcnJ1cHRzLg0KKyAqDQorICogXHBhZ2UgdGFza0RJU0FCTEVfSU5URVJSVVBUUyB0YXNrRElTQUJMRV9JTlRFUlJVUFRTDQorICogXGluZ3JvdXAgU2NoZWR1bGVyQ29udHJvbA0KKyAqLw0KKyNkZWZpbmUgdGFza0RJU0FCTEVfSU5URVJSVVBUUygpCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQ0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKg0KKyAqIE1hY3JvIHRvIGVuYWJsZSBtaWNyb2NvbnRyb2xsZXIgaW50ZXJydXB0cy4NCisgKg0KKyAqIFxwYWdlIHRhc2tFTkFCTEVfSU5URVJSVVBUUyB0YXNrRU5BQkxFX0lOVEVSUlVQVFMNCisgKiBcaW5ncm91cCBTY2hlZHVsZXJDb250cm9sDQorICovDQorI2RlZmluZSB0YXNrRU5BQkxFX0lOVEVSUlVQVFMoKQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkNCisNCisvKiBEZWZpbml0aW9ucyByZXR1cm5lZCBieSB4VGFza0dldFNjaGVkdWxlclN0YXRlKCkuICovDQorI2RlZmluZSB0YXNrU0NIRURVTEVSX05PVF9TVEFSVEVECTANCisjZGVmaW5lIHRhc2tTQ0hFRFVMRVJfUlVOTklORwkJMQ0KKyNkZWZpbmUgdGFza1NDSEVEVUxFUl9TVVNQRU5ERUQJCTINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogVEFTSyBDUkVBVElPTiBBUEkNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKjxwcmU+DQorIHBvcnRCQVNFX1RZUEUgeFRhc2tDcmVhdGUoDQorCQkJCQkJCSAgcGRUQVNLX0NPREUgcHZUYXNrQ29kZSwNCisJCQkJCQkJICBjb25zdCBjaGFyICogY29uc3QgcGNOYW1lLA0KKwkJCQkJCQkgIHVuc2lnbmVkIHNob3J0IHVzU3RhY2tEZXB0aCwNCisJCQkJCQkJICB2b2lkICpwdlBhcmFtZXRlcnMsDQorCQkJCQkJCSAgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFByaW9yaXR5LA0KKwkJCQkJCQkgIHhUYXNrSGFuZGxlICpwdkNyZWF0ZWRUYXNrDQorCQkJCQkJICApOzwvcHJlPg0KKyAqDQorICogQ3JlYXRlIGEgbmV3IHRhc2sgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiB0YXNrcyB0aGF0IGFyZSByZWFkeSB0byBydW4uDQorICoNCisgKiB4VGFza0NyZWF0ZSgpIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIGEgdGFzayB0aGF0IGhhcyB1bnJlc3RyaWN0ZWQNCisgKiBhY2Nlc3MgdG8gdGhlIGVudGlyZSBtaWNyb2NvbnRyb2xsZXIgbWVtb3J5IG1hcC4gIFN5c3RlbXMgdGhhdCBpbmNsdWRlIE1QVQ0KKyAqIHN1cHBvcnQgY2FuIGFsdGVybmF0aXZlbHkgY3JlYXRlIGFuIE1QVSBjb25zdHJhaW5lZCB0YXNrIHVzaW5nDQorICogeFRhc2tDcmVhdGVSZXN0cmljdGVkKCkuDQorICoNCisgKiBAcGFyYW0gcHZUYXNrQ29kZSBQb2ludGVyIHRvIHRoZSB0YXNrIGVudHJ5IGZ1bmN0aW9uLiAgVGFza3MNCisgKiBtdXN0IGJlIGltcGxlbWVudGVkIHRvIG5ldmVyIHJldHVybiAoaS5lLiBjb250aW51b3VzIGxvb3ApLg0KKyAqDQorICogQHBhcmFtIHBjTmFtZSBBIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoZSB0YXNrLiAgVGhpcyBpcyBtYWlubHkgdXNlZCB0bw0KKyAqIGZhY2lsaXRhdGUgZGVidWdnaW5nLiAgTWF4IGxlbmd0aCBkZWZpbmVkIGJ5IHRza01BWF9UQVNLX05BTUVfTEVOIC0gZGVmYXVsdA0KKyAqIGlzIDE2Lg0KKyAqDQorICogQHBhcmFtIHVzU3RhY2tEZXB0aCBUaGUgc2l6ZSBvZiB0aGUgdGFzayBzdGFjayBzcGVjaWZpZWQgYXMgdGhlIG51bWJlciBvZg0KKyAqIHZhcmlhYmxlcyB0aGUgc3RhY2sgY2FuIGhvbGQgLSBub3QgdGhlIG51bWJlciBvZiBieXRlcy4gIEZvciBleGFtcGxlLCBpZg0KKyAqIHRoZSBzdGFjayBpcyAxNiBiaXRzIHdpZGUgYW5kIHVzU3RhY2tEZXB0aCBpcyBkZWZpbmVkIGFzIDEwMCwgMjAwIGJ5dGVzDQorICogd2lsbCBiZSBhbGxvY2F0ZWQgZm9yIHN0YWNrIHN0b3JhZ2UuDQorICoNCisgKiBAcGFyYW0gcHZQYXJhbWV0ZXJzIFBvaW50ZXIgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlIHRhc2sNCisgKiBiZWluZyBjcmVhdGVkLg0KKyAqDQorICogQHBhcmFtIHV4UHJpb3JpdHkgVGhlIHByaW9yaXR5IGF0IHdoaWNoIHRoZSB0YXNrIHNob3VsZCBydW4uICBTeXN0ZW1zIHRoYXQNCisgKiBpbmNsdWRlIE1QVSBzdXBwb3J0IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSB0YXNrcyBpbiBhIHByaXZpbGVnZWQgKHN5c3RlbSkNCisgKiBtb2RlIGJ5IHNldHRpbmcgYml0IHBvcnRQUklWSUxFR0VfQklUIG9mIHRoZSBwcmlvcml0eSBwYXJhbWV0ZXIuICBGb3INCisgKiBleGFtcGxlLCB0byBjcmVhdGUgYSBwcml2aWxlZ2VkIHRhc2sgYXQgcHJpb3JpdHkgMiB0aGUgdXhQcmlvcml0eSBwYXJhbWV0ZXINCisgKiBzaG91bGQgYmUgc2V0IHRvICggMiB8IHBvcnRQUklWSUxFR0VfQklUICkuDQorICoNCisgKiBAcGFyYW0gcHZDcmVhdGVkVGFzayBVc2VkIHRvIHBhc3MgYmFjayBhIGhhbmRsZSBieSB3aGljaCB0aGUgY3JlYXRlZCB0YXNrDQorICogY2FuIGJlIHJlZmVyZW5jZWQuDQorICoNCisgKiBAcmV0dXJuIHBkUEFTUyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIGEgcmVhZHkNCisgKiBsaXN0LCBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBkZWZpbmVkIGluIHRoZSBmaWxlIGVycm9ycy4gaA0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBUYXNrIHRvIGJlIGNyZWF0ZWQuDQorIHZvaWQgdlRhc2tDb2RlKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKwkgZm9yKCA7OyApDQorCSB7DQorCQkgLy8gVGFzayBjb2RlIGdvZXMgaGVyZS4NCisJIH0NCisgfQ0KKw0KKyAvLyBGdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0YXNrLg0KKyB2b2lkIHZPdGhlckZ1bmN0aW9uKCB2b2lkICkNCisgew0KKyBzdGF0aWMgdW5zaWduZWQgY2hhciB1Y1BhcmFtZXRlclRvUGFzczsNCisgeFRhc2tIYW5kbGUgeEhhbmRsZTsNCisNCisJIC8vIENyZWF0ZSB0aGUgdGFzaywgc3RvcmluZyB0aGUgaGFuZGxlLiAgTm90ZSB0aGF0IHRoZSBwYXNzZWQgcGFyYW1ldGVyIHVjUGFyYW1ldGVyVG9QYXNzDQorCSAvLyBtdXN0IGV4aXN0IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHRhc2ssIHNvIGluIHRoaXMgY2FzZSBpcyBkZWNsYXJlZCBzdGF0aWMuICBJZiBpdCB3YXMganVzdCBhbg0KKwkgLy8gYW4gYXV0b21hdGljIHN0YWNrIHZhcmlhYmxlIGl0IG1pZ2h0IG5vIGxvbmdlciBleGlzdCwgb3IgYXQgbGVhc3QgaGF2ZSBiZWVuIGNvcnJ1cHRlZCwgYnkgdGhlIHRpbWUNCisJIC8vIHRoZSBuZXcgdGFzayBhdHRlbXB0cyB0byBhY2Nlc3MgaXQuDQorCSB4VGFza0NyZWF0ZSggdlRhc2tDb2RlLCAiTkFNRSIsIFNUQUNLX1NJWkUsICZ1Y1BhcmFtZXRlclRvUGFzcywgdHNrSURMRV9QUklPUklUWSwgJnhIYW5kbGUgKTsNCisNCisJIC8vIFVzZSB0aGUgaGFuZGxlIHRvIGRlbGV0ZSB0aGUgdGFzay4NCisJIHZUYXNrRGVsZXRlKCB4SGFuZGxlICk7DQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFRhc2tDcmVhdGUgeFRhc2tDcmVhdGUNCisgKiBcaW5ncm91cCBUYXNrcw0KKyAqLw0KKyNkZWZpbmUgeFRhc2tDcmVhdGUoIHB2VGFza0NvZGUsIHBjTmFtZSwgdXNTdGFja0RlcHRoLCBwdlBhcmFtZXRlcnMsIHV4UHJpb3JpdHksIHB4Q3JlYXRlZFRhc2sgKSB4VGFza0dlbmVyaWNDcmVhdGUoICggcHZUYXNrQ29kZSApLCAoIHBjTmFtZSApLCAoIHVzU3RhY2tEZXB0aCApLCAoIHB2UGFyYW1ldGVycyApLCAoIHV4UHJpb3JpdHkgKSwgKCBweENyZWF0ZWRUYXNrICksICggTlVMTCApLCAoIE5VTEwgKSApDQorDQorLyoqDQorICogdGFzay4gaA0KKyAqPHByZT4NCisgcG9ydEJBU0VfVFlQRSB4VGFza0NyZWF0ZVJlc3RyaWN0ZWQoIHhUYXNrUGFyYW1ldGVycyAqcHhUYXNrRGVmaW5pdGlvbiwgeFRhc2tIYW5kbGUgKnB4Q3JlYXRlZFRhc2sgKTs8L3ByZT4NCisgKg0KKyAqIHhUYXNrQ3JlYXRlUmVzdHJpY3RlZCgpIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gc3lzdGVtcyB0aGF0IGluY2x1ZGUgYW4gTVBVDQorICogaW1wbGVtZW50YXRpb24uDQorICoNCisgKiBDcmVhdGUgYSBuZXcgdGFzayBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHRhc2tzIHRoYXQgYXJlIHJlYWR5IHRvIHJ1bi4NCisgKiBUaGUgZnVuY3Rpb24gcGFyYW1ldGVycyBkZWZpbmUgdGhlIG1lbW9yeSByZWdpb25zIGFuZCBhc3NvY2lhdGVkIGFjY2Vzcw0KKyAqIHBlcm1pc3Npb25zIGFsbG9jYXRlZCB0byB0aGUgdGFzay4NCisgKg0KKyAqIEBwYXJhbSBweFRhc2tEZWZpbml0aW9uIFBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhIG1lbWJlcg0KKyAqIGZvciBlYWNoIG9mIHRoZSBub3JtYWwgeFRhc2tDcmVhdGUoKSBwYXJhbWV0ZXJzIChzZWUgdGhlIHhUYXNrQ3JlYXRlKCkgQVBJDQorICogZG9jdW1lbnRhdGlvbikgcGx1cyBhbiBvcHRpb25hbCBzdGFjayBidWZmZXIgYW5kIHRoZSBtZW1vcnkgcmVnaW9uDQorICogZGVmaW5pdGlvbnMuDQorICoNCisgKiBAcGFyYW0gcHhDcmVhdGVkVGFzayBVc2VkIHRvIHBhc3MgYmFjayBhIGhhbmRsZSBieSB3aGljaCB0aGUgY3JlYXRlZCB0YXNrDQorICogY2FuIGJlIHJlZmVyZW5jZWQuDQorICoNCisgKiBAcmV0dXJuIHBkUEFTUyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIGEgcmVhZHkNCisgKiBsaXN0LCBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBkZWZpbmVkIGluIHRoZSBmaWxlIGVycm9ycy4gaA0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKy8vIENyZWF0ZSBhbiB4VGFza1BhcmFtZXRlcnMgc3RydWN0dXJlIHRoYXQgZGVmaW5lcyB0aGUgdGFzayB0byBiZSBjcmVhdGVkLg0KK3N0YXRpYyBjb25zdCB4VGFza1BhcmFtZXRlcnMgeENoZWNrVGFza1BhcmFtZXRlcnMgPQ0KK3sNCisJdkFUYXNrLAkJLy8gcHZUYXNrQ29kZSAtIHRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIHRhc2suDQorCSJBVGFzayIsCS8vIHBjTmFtZSAtIGp1c3QgYSB0ZXh0IG5hbWUgZm9yIHRoZSB0YXNrIHRvIGFzc2lzdCBkZWJ1Z2dpbmcuDQorCTEwMCwJCS8vIHVzU3RhY2tEZXB0aAktIHRoZSBzdGFjayBzaXplIERFRklORUQgSU4gV09SRFMuDQorCU5VTEwsCQkvLyBwdlBhcmFtZXRlcnMgLSBwYXNzZWQgaW50byB0aGUgdGFzayBmdW5jdGlvbiBhcyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4NCisJKCAxVUwgfCBwb3J0UFJJVklMRUdFX0JJVCApLC8vIHV4UHJpb3JpdHkgLSB0YXNrIHByaW9yaXR5LCBzZXQgdGhlIHBvcnRQUklWSUxFR0VfQklUIGlmIHRoZSB0YXNrIHNob3VsZCBydW4gaW4gYSBwcml2aWxlZ2VkIHN0YXRlLg0KKwljU3RhY2tCdWZmZXIsLy8gcHV4U3RhY2tCdWZmZXIgLSB0aGUgYnVmZmVyIHRvIGJlIHVzZWQgYXMgdGhlIHRhc2sgc3RhY2suDQorDQorCS8vIHhSZWdpb25zIC0gQWxsb2NhdGUgdXAgdG8gdGhyZWUgc2VwYXJhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGFjY2VzcyBieQ0KKwkvLyB0aGUgdGFzaywgd2l0aCBhcHByb3ByaWF0ZSBhY2Nlc3MgcGVybWlzc2lvbnMuICBEaWZmZXJlbnQgcHJvY2Vzc29ycyBoYXZlDQorCS8vIGRpZmZlcmVudCBtZW1vcnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyAtIHJlZmVyIHRvIHRoZSBGcmVlUlRPUyBkb2N1bWVudGF0aW9uDQorCS8vIGZvciBmdWxsIGluZm9ybWF0aW9uLg0KKwl7CQkJCQkJCQkJCQkNCisJCS8vIEJhc2UgYWRkcmVzcwkJCQkJTGVuZ3RoCVBhcmFtZXRlcnMNCisgICAgICAgIHsgY1JlYWRXcml0ZUFycmF5LAkJCQkzMiwJCXBvcnRNUFVfUkVHSU9OX1JFQURfV1JJVEUgfSwNCisgICAgICAgIHsgY1JlYWRPbmx5QXJyYXksCQkJCTMyLAkJcG9ydE1QVV9SRUdJT05fUkVBRF9PTkxZIH0sDQorICAgICAgICB7IGNQcml2aWxlZ2VkT25seUFjY2Vzc0FycmF5LAkxMjgsCXBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURSB9DQorCX0NCit9Ow0KKw0KK2ludCBtYWluKCB2b2lkICkNCit7DQoreFRhc2tIYW5kbGUgeEhhbmRsZTsNCisNCisJLy8gQ3JlYXRlIGEgdGFzayBmcm9tIHRoZSBjb25zdCBzdHJ1Y3R1cmUgZGVmaW5lZCBhYm92ZS4gIFRoZSB0YXNrIGhhbmRsZQ0KKwkvLyBpcyByZXF1ZXN0ZWQgKHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5vdCBOVUxMKSBidXQgaW4gdGhpcyBjYXNlIGp1c3QgZm9yDQorCS8vIGRlbW9uc3RyYXRpb24gcHVycG9zZXMgYXMgaXRzIG5vdCBhY3R1YWxseSB1c2VkLg0KKwl4VGFza0NyZWF0ZVJlc3RyaWN0ZWQoICZ4UmVnVGVzdDFQYXJhbWV0ZXJzLCAmeEhhbmRsZSApOw0KKw0KKwkvLyBTdGFydCB0aGUgc2NoZWR1bGVyLg0KKwl2VGFza1N0YXJ0U2NoZWR1bGVyKCk7DQorDQorCS8vIFdpbGwgb25seSBnZXQgaGVyZSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBjcmVhdGUgdGhlIGlkbGUNCisJLy8gdGFzay4NCisJZm9yKCA7OyApOw0KK30NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFRhc2tDcmVhdGVSZXN0cmljdGVkIHhUYXNrQ3JlYXRlUmVzdHJpY3RlZA0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQorI2RlZmluZSB4VGFza0NyZWF0ZVJlc3RyaWN0ZWQoIHgsIHB4Q3JlYXRlZFRhc2sgKSB4VGFza0dlbmVyaWNDcmVhdGUoICgoeCktPnB2VGFza0NvZGUpLCAoKHgpLT5wY05hbWUpLCAoKHgpLT51c1N0YWNrRGVwdGgpLCAoKHgpLT5wdlBhcmFtZXRlcnMpLCAoKHgpLT51eFByaW9yaXR5KSwgKHB4Q3JlYXRlZFRhc2spLCAoKHgpLT5wdXhTdGFja0J1ZmZlciksICgoeCktPnhSZWdpb25zKSApDQorDQorLyoqDQorICogdGFzay4gaA0KKyAqPHByZT4NCisgdm9pZCB2VGFza0FsbG9jYXRlTVBVUmVnaW9ucyggeFRhc2tIYW5kbGUgeFRhc2ssIGNvbnN0IHhNZW1vcnlSZWdpb24gKiBjb25zdCBweFJlZ2lvbnMgKTs8L3ByZT4NCisgKg0KKyAqIE1lbW9yeSByZWdpb25zIGFyZSBhc3NpZ25lZCB0byBhIHJlc3RyaWN0ZWQgdGFzayB3aGVuIHRoZSB0YXNrIGlzIGNyZWF0ZWQgYnkNCisgKiBhIGNhbGwgdG8geFRhc2tDcmVhdGVSZXN0cmljdGVkKCkuICBUaGVzZSByZWdpb25zIGNhbiBiZSByZWRlZmluZWQgdXNpbmcNCisgKiB2VGFza0FsbG9jYXRlTVBVUmVnaW9ucygpLg0KKyAqDQorICogQHBhcmFtIHhUYXNrIFRoZSBoYW5kbGUgb2YgdGhlIHRhc2sgYmVpbmcgdXBkYXRlZC4NCisgKg0KKyAqIEBwYXJhbSB4UmVnaW9ucyBBIHBvaW50ZXIgdG8gYW4geE1lbW9yeVJlZ2lvbiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUNCisgKiBuZXcgbWVtb3J5IHJlZ2lvbiBkZWZpbml0aW9ucy4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisvLyBEZWZpbmUgYW4gYXJyYXkgb2YgeE1lbW9yeVJlZ2lvbiBzdHJ1Y3R1cmVzIHRoYXQgY29uZmlndXJlcyBhbiBNUFUgcmVnaW9uDQorLy8gYWxsb3dpbmcgcmVhZC93cml0ZSBhY2Nlc3MgZm9yIDEwMjQgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUNCisvLyB1Y09uZUtCeXRlIGFycmF5LiAgVGhlIG90aGVyIHR3byBvZiB0aGUgbWF4aW11bSAzIGRlZmluYWJsZSByZWdpb25zIGFyZQ0KKy8vIHVudXNlZCBzbyBzZXQgdG8gemVyby4NCitzdGF0aWMgY29uc3QgeE1lbW9yeVJlZ2lvbiB4QWx0UmVnaW9uc1sgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUyBdID0NCit7CQkJCQkJCQkJCQkNCisJLy8gQmFzZSBhZGRyZXNzCQlMZW5ndGgJCVBhcmFtZXRlcnMNCisJeyB1Y09uZUtCeXRlLAkJMTAyNCwJCXBvcnRNUFVfUkVHSU9OX1JFQURfV1JJVEUgfSwNCisJeyAwLAkJCQkwLAkJCTAgfSwNCisJeyAwLAkJCQkwLAkJCTAgfQ0KK307DQorDQordm9pZCB2QVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvLyBUaGlzIHRhc2sgd2FzIGNyZWF0ZWQgc3VjaCB0aGF0IGl0IGhhcyBhY2Nlc3MgdG8gY2VydGFpbiByZWdpb25zIG9mDQorCS8vIG1lbW9yeSBhcyBkZWZpbmVkIGJ5IHRoZSBNUFUgY29uZmlndXJhdGlvbi4gIEF0IHNvbWUgcG9pbnQgaXQgaXMNCisJLy8gZGVzaXJlZCB0aGF0IHRoZXNlIE1QVSByZWdpb25zIGFyZSByZXBsYWNlZCB3aXRoIHRoYXQgZGVmaW5lZCBpbiB0aGUNCisJLy8geEFsdFJlZ2lvbnMgY29uc3Qgc3RydWN0IGFib3ZlLiAgVXNlIGEgY2FsbCB0byB2VGFza0FsbG9jYXRlTVBVUmVnaW9ucygpDQorCS8vIGZvciB0aGlzIHB1cnBvc2UuICBOVUxMIGlzIHVzZWQgYXMgdGhlIHRhc2sgaGFuZGxlIHRvIGluZGljYXRlIHRoYXQgdGhpcw0KKwkvLyBmdW5jdGlvbiBzaG91bGQgbW9kaWZ5IHRoZSBNUFUgcmVnaW9ucyBvZiB0aGUgY2FsbGluZyB0YXNrLg0KKwl2VGFza0FsbG9jYXRlTVBVUmVnaW9ucyggTlVMTCwgeEFsdFJlZ2lvbnMgKTsNCisJDQorCS8vIE5vdyB0aGUgdGFzayBjYW4gY29udGludWUgaXRzIGZ1bmN0aW9uLCBidXQgZnJvbSB0aGlzIHBvaW50IG9uIGNhbiBvbmx5DQorCS8vIGFjY2VzcyBpdHMgc3RhY2sgYW5kIHRoZSB1Y09uZUtCeXRlIGFycmF5ICh1bmxlc3MgYW55IG90aGVyIHN0YXRpY2FsbHkNCisJLy8gZGVmaW5lZCBvciBzaGFyZWQgcmVnaW9ucyBoYXZlIGJlZW4gZGVjbGFyZWQgZWxzZXdoZXJlKS4NCit9DQorICAgPC9wcmU+DQorICogXGRlZmdyb3VwIHhUYXNrQ3JlYXRlUmVzdHJpY3RlZCB4VGFza0NyZWF0ZVJlc3RyaWN0ZWQNCisgKiBcaW5ncm91cCBUYXNrcw0KKyAqLw0KK3ZvaWQgdlRhc2tBbGxvY2F0ZU1QVVJlZ2lvbnMoIHhUYXNrSGFuZGxlIHhUYXNrLCBjb25zdCB4TWVtb3J5UmVnaW9uICogY29uc3QgcHhSZWdpb25zICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHZUYXNrRGVsZXRlKCB4VGFza0hhbmRsZSBweFRhc2sgKTs8L3ByZT4NCisgKg0KKyAqIElOQ0xVREVfdlRhc2tEZWxldGUgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlLg0KKyAqIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqDQorICogUmVtb3ZlIGEgdGFzayBmcm9tIHRoZSBSVE9TIHJlYWwgdGltZSBrZXJuZWxzIG1hbmFnZW1lbnQuICBUaGUgdGFzayBiZWluZw0KKyAqIGRlbGV0ZWQgd2lsbCBiZSByZW1vdmVkIGZyb20gYWxsIHJlYWR5LCBibG9ja2VkLCBzdXNwZW5kZWQgYW5kIGV2ZW50IGxpc3RzLg0KKyAqDQorICogTk9URTogIFRoZSBpZGxlIHRhc2sgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGtlcm5lbCBhbGxvY2F0ZWQNCisgKiBtZW1vcnkgZnJvbSB0YXNrcyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0DQorICogdGhlIGlkbGUgdGFzayBpcyBub3Qgc3RhcnZlZCBvZiBtaWNyb2NvbnRyb2xsZXIgcHJvY2Vzc2luZyB0aW1lIGlmIHlvdXINCisgKiBhcHBsaWNhdGlvbiBtYWtlcyBhbnkgY2FsbHMgdG8gdlRhc2tEZWxldGUgKCkuICBNZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZQ0KKyAqIHRhc2sgY29kZSBpcyBub3QgYXV0b21hdGljYWxseSBmcmVlZCwgYW5kIHNob3VsZCBiZSBmcmVlZCBiZWZvcmUgdGhlIHRhc2sNCisgKiBpcyBkZWxldGVkLg0KKyAqDQorICogU2VlIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZpbGUgZGVhdGguYyBmb3Igc2FtcGxlIGNvZGUgdGhhdCB1dGlsaXNlcw0KKyAqIHZUYXNrRGVsZXRlICgpLg0KKyAqDQorICogQHBhcmFtIHB4VGFzayBUaGUgaGFuZGxlIG9mIHRoZSB0YXNrIHRvIGJlIGRlbGV0ZWQuICBQYXNzaW5nIE5VTEwgd2lsbA0KKyAqIGNhdXNlIHRoZSBjYWxsaW5nIHRhc2sgdG8gYmUgZGVsZXRlZC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgdm9pZCB2T3RoZXJGdW5jdGlvbiggdm9pZCApDQorIHsNCisgeFRhc2tIYW5kbGUgeEhhbmRsZTsNCisNCisJIC8vIENyZWF0ZSB0aGUgdGFzaywgc3RvcmluZyB0aGUgaGFuZGxlLg0KKwkgeFRhc2tDcmVhdGUoIHZUYXNrQ29kZSwgIk5BTUUiLCBTVEFDS19TSVpFLCBOVUxMLCB0c2tJRExFX1BSSU9SSVRZLCAmeEhhbmRsZSApOw0KKw0KKwkgLy8gVXNlIHRoZSBoYW5kbGUgdG8gZGVsZXRlIHRoZSB0YXNrLg0KKwkgdlRhc2tEZWxldGUoIHhIYW5kbGUgKTsNCisgfQ0KKyAgIDwvcHJlPg0KKyAqIFxkZWZncm91cCB2VGFza0RlbGV0ZSB2VGFza0RlbGV0ZQ0KKyAqIFxpbmdyb3VwIFRhc2tzDQorICovDQordm9pZCB2VGFza0RlbGV0ZSggeFRhc2tIYW5kbGUgcHhUYXNrVG9EZWxldGUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBUQVNLIENPTlRST0wgQVBJDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHZUYXNrRGVsYXkoIHBvcnRUaWNrVHlwZSB4VGlja3NUb0RlbGF5ICk7PC9wcmU+DQorICoNCisgKiBEZWxheSBhIHRhc2sgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIHRpY2tzLiAgVGhlIGFjdHVhbCB0aW1lIHRoYXQgdGhlDQorICogdGFzayByZW1haW5zIGJsb2NrZWQgZGVwZW5kcyBvbiB0aGUgdGljayByYXRlLiAgVGhlIGNvbnN0YW50DQorICogcG9ydFRJQ0tfUkFURV9NUyBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgcmVhbCB0aW1lIGZyb20gdGhlIHRpY2sNCisgKiByYXRlIC0gd2l0aCB0aGUgcmVzb2x1dGlvbiBvZiBvbmUgdGljayBwZXJpb2QuDQorICoNCisgKiBJTkNMVURFX3ZUYXNrRGVsYXkgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlLg0KKyAqIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqDQorICoNCisgKiB2VGFza0RlbGF5KCkgc3BlY2lmaWVzIGEgdGltZSBhdCB3aGljaCB0aGUgdGFzayB3aXNoZXMgdG8gdW5ibG9jayByZWxhdGl2ZSB0bw0KKyAqIHRoZSB0aW1lIGF0IHdoaWNoIHZUYXNrRGVsYXkoKSBpcyBjYWxsZWQuICBGb3IgZXhhbXBsZSwgc3BlY2lmeWluZyBhIGJsb2NrDQorICogcGVyaW9kIG9mIDEwMCB0aWNrcyB3aWxsIGNhdXNlIHRoZSB0YXNrIHRvIHVuYmxvY2sgMTAwIHRpY2tzIGFmdGVyDQorICogdlRhc2tEZWxheSgpIGlzIGNhbGxlZC4gIHZUYXNrRGVsYXkoKSBkb2VzIG5vdCB0aGVyZWZvcmUgcHJvdmlkZSBhIGdvb2QgbWV0aG9kDQorICogb2YgY29udHJvbGxpbmcgdGhlIGZyZXF1ZW5jeSBvZiBhIGN5Y2xpY2FsIHRhc2sgYXMgdGhlIHBhdGggdGFrZW4gdGhyb3VnaCB0aGUNCisgKiBjb2RlLCBhcyB3ZWxsIGFzIG90aGVyIHRhc2sgYW5kIGludGVycnVwdCBhY3Rpdml0eSwgd2lsbCBlZmZlY3QgdGhlIGZyZXF1ZW5jeQ0KKyAqIGF0IHdoaWNoIHZUYXNrRGVsYXkoKSBnZXRzIGNhbGxlZCBhbmQgdGhlcmVmb3JlIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrDQorICogbmV4dCBleGVjdXRlcy4gIFNlZSB2VGFza0RlbGF5VW50aWwoKSBmb3IgYW4gYWx0ZXJuYXRpdmUgQVBJIGZ1bmN0aW9uIGRlc2lnbmVkDQorICogdG8gZmFjaWxpdGF0ZSBmaXhlZCBmcmVxdWVuY3kgZXhlY3V0aW9uLiAgSXQgZG9lcyB0aGlzIGJ5IHNwZWNpZnlpbmcgYW4NCisgKiBhYnNvbHV0ZSB0aW1lIChyYXRoZXIgdGhhbiBhIHJlbGF0aXZlIHRpbWUpIGF0IHdoaWNoIHRoZSBjYWxsaW5nIHRhc2sgc2hvdWxkDQorICogdW5ibG9jay4NCisgKg0KKyAqIEBwYXJhbSB4VGlja3NUb0RlbGF5IFRoZSBhbW91bnQgb2YgdGltZSwgaW4gdGljayBwZXJpb2RzLCB0aGF0DQorICogdGhlIGNhbGxpbmcgdGFzayBzaG91bGQgYmxvY2suDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKw0KKyB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisgLy8gQmxvY2sgZm9yIDUwMG1zLg0KKyBjb25zdCBwb3J0VGlja1R5cGUgeERlbGF5ID0gNTAwIC8gcG9ydFRJQ0tfUkFURV9NUzsNCisNCisJIGZvciggOzsgKQ0KKwkgew0KKwkJIC8vIFNpbXBseSB0b2dnbGUgdGhlIExFRCBldmVyeSA1MDBtcywgYmxvY2tpbmcgYmV0d2VlbiBlYWNoIHRvZ2dsZS4NCisJCSB2VG9nZ2xlTEVEKCk7DQorCQkgdlRhc2tEZWxheSggeERlbGF5ICk7DQorCSB9DQorIH0NCisNCisgKiBcZGVmZ3JvdXAgdlRhc2tEZWxheSB2VGFza0RlbGF5DQorICogXGluZ3JvdXAgVGFza0N0cmwNCisgKi8NCit2b2lkIHZUYXNrRGVsYXkoIHBvcnRUaWNrVHlwZSB4VGlja3NUb0RlbGF5ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHZUYXNrRGVsYXlVbnRpbCggcG9ydFRpY2tUeXBlICpweFByZXZpb3VzV2FrZVRpbWUsIHBvcnRUaWNrVHlwZSB4VGltZUluY3JlbWVudCApOzwvcHJlPg0KKyAqDQorICogSU5DTFVERV92VGFza0RlbGF5VW50aWwgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlLg0KKyAqIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqDQorICogRGVsYXkgYSB0YXNrIHVudGlsIGEgc3BlY2lmaWVkIHRpbWUuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGN5Y2xpY2FsDQorICogdGFza3MgdG8gZW5zdXJlIGEgY29uc3RhbnQgZXhlY3V0aW9uIGZyZXF1ZW5jeS4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHZUYXNrRGVsYXkgKCkgaW4gb25lIGltcG9ydGFudCBhc3BlY3Q6ICB2VGFza0RlbGF5ICgpIHdpbGwNCisgKiBjYXVzZSBhIHRhc2sgdG8gYmxvY2sgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIHRpbWUgdlRhc2tEZWxheSAoKSBpcw0KKyAqIGNhbGxlZC4gIEl0IGlzIHRoZXJlZm9yZSBkaWZmaWN1bHQgdG8gdXNlIHZUYXNrRGVsYXkgKCkgYnkgaXRzZWxmIHRvIGdlbmVyYXRlIGEgZml4ZWQNCisgKiBleGVjdXRpb24gZnJlcXVlbmN5IGFzIHRoZSB0aW1lIGJldHdlZW4gYSB0YXNrIHN0YXJ0aW5nIHRvIGV4ZWN1dGUgYW5kIHRoYXQgdGFzaw0KKyAqIGNhbGxpbmcgdlRhc2tEZWxheSAoKSBtYXkgbm90IGJlIGZpeGVkIFt0aGUgdGFzayBtYXkgdGFrZSBhIGRpZmZlcmVudCBwYXRoIHRob3VnaCB0aGUNCisgKiBjb2RlIGJldHdlZW4gY2FsbHMsIG9yIG1heSBnZXQgaW50ZXJydXB0ZWQgb3IgcHJlZW1wdGVkIGEgZGlmZmVyZW50IG51bWJlciBvZiB0aW1lcw0KKyAqIGVhY2ggdGltZSBpdCBleGVjdXRlc10uDQorICoNCisgKiBXaGVyZWFzIHZUYXNrRGVsYXkgKCkgc3BlY2lmaWVzIGEgd2FrZSB0aW1lIHJlbGF0aXZlIHRvIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBmdW5jdGlvbg0KKyAqIGlzIGNhbGxlZCwgdlRhc2tEZWxheVVudGlsICgpIHNwZWNpZmllcyB0aGUgYWJzb2x1dGUgKGV4YWN0KSB0aW1lIGF0IHdoaWNoIGl0IHdpc2hlcyB0bw0KKyAqIHVuYmxvY2suDQorICoNCisgKiBUaGUgY29uc3RhbnQgcG9ydFRJQ0tfUkFURV9NUyBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgcmVhbCB0aW1lIGZyb20gdGhlIHRpY2sNCisgKiByYXRlIC0gd2l0aCB0aGUgcmVzb2x1dGlvbiBvZiBvbmUgdGljayBwZXJpb2QuDQorICoNCisgKiBAcGFyYW0gcHhQcmV2aW91c1dha2VUaW1lIFBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZQ0KKyAqIHRhc2sgd2FzIGxhc3QgdW5ibG9ja2VkLiAgVGhlIHZhcmlhYmxlIG11c3QgYmUgaW5pdGlhbGlzZWQgd2l0aCB0aGUgY3VycmVudCB0aW1lDQorICogcHJpb3IgdG8gaXRzIGZpcnN0IHVzZSAoc2VlIHRoZSBleGFtcGxlIGJlbG93KS4gIEZvbGxvd2luZyB0aGlzIHRoZSB2YXJpYWJsZSBpcw0KKyAqIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoaW4gdlRhc2tEZWxheVVudGlsICgpLg0KKyAqDQorICogQHBhcmFtIHhUaW1lSW5jcmVtZW50IFRoZSBjeWNsZSB0aW1lIHBlcmlvZC4gIFRoZSB0YXNrIHdpbGwgYmUgdW5ibG9ja2VkIGF0DQorICogdGltZSAqcHhQcmV2aW91c1dha2VUaW1lICsgeFRpbWVJbmNyZW1lbnQuICBDYWxsaW5nIHZUYXNrRGVsYXlVbnRpbCB3aXRoIHRoZQ0KKyAqIHNhbWUgeFRpbWVJbmNyZW1lbnQgcGFyYW1ldGVyIHZhbHVlIHdpbGwgY2F1c2UgdGhlIHRhc2sgdG8gZXhlY3V0ZSB3aXRoDQorICogYSBmaXhlZCBpbnRlcmZhY2UgcGVyaW9kLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyAvLyBQZXJmb3JtIGFuIGFjdGlvbiBldmVyeSAxMCB0aWNrcy4NCisgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKyBwb3J0VGlja1R5cGUgeExhc3RXYWtlVGltZTsNCisgY29uc3QgcG9ydFRpY2tUeXBlIHhGcmVxdWVuY3kgPSAxMDsNCisNCisJIC8vIEluaXRpYWxpc2UgdGhlIHhMYXN0V2FrZVRpbWUgdmFyaWFibGUgd2l0aCB0aGUgY3VycmVudCB0aW1lLg0KKwkgeExhc3RXYWtlVGltZSA9IHhUYXNrR2V0VGlja0NvdW50ICgpOw0KKwkgZm9yKCA7OyApDQorCSB7DQorCQkgLy8gV2FpdCBmb3IgdGhlIG5leHQgY3ljbGUuDQorCQkgdlRhc2tEZWxheVVudGlsKCAmeExhc3RXYWtlVGltZSwgeEZyZXF1ZW5jeSApOw0KKw0KKwkJIC8vIFBlcmZvcm0gYWN0aW9uIGhlcmUuDQorCSB9DQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlRhc2tEZWxheVVudGlsIHZUYXNrRGVsYXlVbnRpbA0KKyAqIFxpbmdyb3VwIFRhc2tDdHJsDQorICovDQordm9pZCB2VGFza0RlbGF5VW50aWwoIHBvcnRUaWNrVHlwZSAqIGNvbnN0IHB4UHJldmlvdXNXYWtlVGltZSwgcG9ydFRpY2tUeXBlIHhUaW1lSW5jcmVtZW50ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT51bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VGFza1ByaW9yaXR5R2V0KCB4VGFza0hhbmRsZSBweFRhc2sgKTs8L3ByZT4NCisgKg0KKyAqIElOQ0xVREVfeFRhc2tQcmlvcml0eUdldCBtdXN0IGJlIGRlZmluZWQgYXMgMSBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSBhdmFpbGFibGUuDQorICogU2VlIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICoNCisgKiBPYnRhaW4gdGhlIHByaW9yaXR5IG9mIGFueSB0YXNrLg0KKyAqDQorICogQHBhcmFtIHB4VGFzayBIYW5kbGUgb2YgdGhlIHRhc2sgdG8gYmUgcXVlcmllZC4gIFBhc3NpbmcgYSBOVUxMDQorICogaGFuZGxlIHJlc3VsdHMgaW4gdGhlIHByaW9yaXR5IG9mIHRoZSBjYWxsaW5nIHRhc2sgYmVpbmcgcmV0dXJuZWQuDQorICoNCisgKiBAcmV0dXJuIFRoZSBwcmlvcml0eSBvZiBweFRhc2suDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHZvaWQgdkFGdW5jdGlvbiggdm9pZCApDQorIHsNCisgeFRhc2tIYW5kbGUgeEhhbmRsZTsNCisNCisJIC8vIENyZWF0ZSBhIHRhc2ssIHN0b3JpbmcgdGhlIGhhbmRsZS4NCisJIHhUYXNrQ3JlYXRlKCB2VGFza0NvZGUsICJOQU1FIiwgU1RBQ0tfU0laRSwgTlVMTCwgdHNrSURMRV9QUklPUklUWSwgJnhIYW5kbGUgKTsNCisNCisJIC8vIC4uLg0KKw0KKwkgLy8gVXNlIHRoZSBoYW5kbGUgdG8gb2J0YWluIHRoZSBwcmlvcml0eSBvZiB0aGUgY3JlYXRlZCB0YXNrLg0KKwkgLy8gSXQgd2FzIGNyZWF0ZWQgd2l0aCB0c2tJRExFX1BSSU9SSVRZLCBidXQgbWF5IGhhdmUgY2hhbmdlZA0KKwkgLy8gaXQgaXRzZWxmLg0KKwkgaWYoIHV4VGFza1ByaW9yaXR5R2V0KCB4SGFuZGxlICkgIT0gdHNrSURMRV9QUklPUklUWSApDQorCSB7DQorCQkgLy8gVGhlIHRhc2sgaGFzIGNoYW5nZWQgaXQncyBwcmlvcml0eS4NCisJIH0NCisNCisJIC8vIC4uLg0KKw0KKwkgLy8gSXMgb3VyIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjcmVhdGVkIHRhc2s/DQorCSBpZiggdXhUYXNrUHJpb3JpdHlHZXQoIHhIYW5kbGUgKSA8IHV4VGFza1ByaW9yaXR5R2V0KCBOVUxMICkgKQ0KKwkgew0KKwkJIC8vIE91ciBwcmlvcml0eSAob2J0YWluZWQgdXNpbmcgTlVMTCBoYW5kbGUpIGlzIGhpZ2hlci4NCisJIH0NCisgfQ0KKyAgIDwvcHJlPg0KKyAqIFxkZWZncm91cCB1eFRhc2tQcmlvcml0eUdldCB1eFRhc2tQcmlvcml0eUdldA0KKyAqIFxpbmdyb3VwIFRhc2tDdHJsDQorICovDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFRhc2tQcmlvcml0eUdldCggeFRhc2tIYW5kbGUgcHhUYXNrICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHZUYXNrUHJpb3JpdHlTZXQoIHhUYXNrSGFuZGxlIHB4VGFzaywgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eE5ld1ByaW9yaXR5ICk7PC9wcmU+DQorICoNCisgKiBJTkNMVURFX3ZUYXNrUHJpb3JpdHlTZXQgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlLg0KKyAqIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqDQorICogU2V0IHRoZSBwcmlvcml0eSBvZiBhbnkgdGFzay4NCisgKg0KKyAqIEEgY29udGV4dCBzd2l0Y2ggd2lsbCBvY2N1ciBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMgaWYgdGhlIHByaW9yaXR5DQorICogYmVpbmcgc2V0IGlzIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suDQorICoNCisgKiBAcGFyYW0gcHhUYXNrIEhhbmRsZSB0byB0aGUgdGFzayBmb3Igd2hpY2ggdGhlIHByaW9yaXR5IGlzIGJlaW5nIHNldC4NCisgKiBQYXNzaW5nIGEgTlVMTCBoYW5kbGUgcmVzdWx0cyBpbiB0aGUgcHJpb3JpdHkgb2YgdGhlIGNhbGxpbmcgdGFzayBiZWluZyBzZXQuDQorICoNCisgKiBAcGFyYW0gdXhOZXdQcmlvcml0eSBUaGUgcHJpb3JpdHkgdG8gd2hpY2ggdGhlIHRhc2sgd2lsbCBiZSBzZXQuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHZvaWQgdkFGdW5jdGlvbiggdm9pZCApDQorIHsNCisgeFRhc2tIYW5kbGUgeEhhbmRsZTsNCisNCisJIC8vIENyZWF0ZSBhIHRhc2ssIHN0b3JpbmcgdGhlIGhhbmRsZS4NCisJIHhUYXNrQ3JlYXRlKCB2VGFza0NvZGUsICJOQU1FIiwgU1RBQ0tfU0laRSwgTlVMTCwgdHNrSURMRV9QUklPUklUWSwgJnhIYW5kbGUgKTsNCisNCisJIC8vIC4uLg0KKw0KKwkgLy8gVXNlIHRoZSBoYW5kbGUgdG8gcmFpc2UgdGhlIHByaW9yaXR5IG9mIHRoZSBjcmVhdGVkIHRhc2suDQorCSB2VGFza1ByaW9yaXR5U2V0KCB4SGFuZGxlLCB0c2tJRExFX1BSSU9SSVRZICsgMSApOw0KKw0KKwkgLy8gLi4uDQorDQorCSAvLyBVc2UgYSBOVUxMIGhhbmRsZSB0byByYWlzZSBvdXIgcHJpb3JpdHkgdG8gdGhlIHNhbWUgdmFsdWUuDQorCSB2VGFza1ByaW9yaXR5U2V0KCBOVUxMLCB0c2tJRExFX1BSSU9SSVRZICsgMSApOw0KKyB9DQorICAgPC9wcmU+DQorICogXGRlZmdyb3VwIHZUYXNrUHJpb3JpdHlTZXQgdlRhc2tQcmlvcml0eVNldA0KKyAqIFxpbmdyb3VwIFRhc2tDdHJsDQorICovDQordm9pZCB2VGFza1ByaW9yaXR5U2V0KCB4VGFza0hhbmRsZSBweFRhc2ssIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhOZXdQcmlvcml0eSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxwcmU+dm9pZCB2VGFza1N1c3BlbmQoIHhUYXNrSGFuZGxlIHB4VGFza1RvU3VzcGVuZCApOzwvcHJlPg0KKyAqDQorICogSU5DTFVERV92VGFza1N1c3BlbmQgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXZhaWxhYmxlLg0KKyAqIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqDQorICogU3VzcGVuZCBhbnkgdGFzay4gIFdoZW4gc3VzcGVuZGVkIGEgdGFzayB3aWxsIG5ldmVyIGdldCBhbnkgbWljcm9jb250cm9sbGVyDQorICogcHJvY2Vzc2luZyB0aW1lLCBubyBtYXR0ZXIgd2hhdCBpdHMgcHJpb3JpdHkuDQorICoNCisgKiBDYWxscyB0byB2VGFza1N1c3BlbmQgYXJlIG5vdCBhY2N1bXVsYXRpdmUgLQ0KKyAqIGkuZS4gY2FsbGluZyB2VGFza1N1c3BlbmQgKCkgdHdpY2Ugb24gdGhlIHNhbWUgdGFzayBzdGlsbCBvbmx5IHJlcXVpcmVzIG9uZQ0KKyAqIGNhbGwgdG8gdlRhc2tSZXN1bWUgKCkgdG8gcmVhZHkgdGhlIHN1c3BlbmRlZCB0YXNrLg0KKyAqDQorICogQHBhcmFtIHB4VGFza1RvU3VzcGVuZCBIYW5kbGUgdG8gdGhlIHRhc2sgYmVpbmcgc3VzcGVuZGVkLiAgUGFzc2luZyBhIE5VTEwNCisgKiBoYW5kbGUgd2lsbCBjYXVzZSB0aGUgY2FsbGluZyB0YXNrIHRvIGJlIHN1c3BlbmRlZC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgdm9pZCB2QUZ1bmN0aW9uKCB2b2lkICkNCisgew0KKyB4VGFza0hhbmRsZSB4SGFuZGxlOw0KKw0KKwkgLy8gQ3JlYXRlIGEgdGFzaywgc3RvcmluZyB0aGUgaGFuZGxlLg0KKwkgeFRhc2tDcmVhdGUoIHZUYXNrQ29kZSwgIk5BTUUiLCBTVEFDS19TSVpFLCBOVUxMLCB0c2tJRExFX1BSSU9SSVRZLCAmeEhhbmRsZSApOw0KKw0KKwkgLy8gLi4uDQorDQorCSAvLyBVc2UgdGhlIGhhbmRsZSB0byBzdXNwZW5kIHRoZSBjcmVhdGVkIHRhc2suDQorCSB2VGFza1N1c3BlbmQoIHhIYW5kbGUgKTsNCisNCisJIC8vIC4uLg0KKw0KKwkgLy8gVGhlIGNyZWF0ZWQgdGFzayB3aWxsIG5vdCBydW4gZHVyaW5nIHRoaXMgcGVyaW9kLCB1bmxlc3MNCisJIC8vIGFub3RoZXIgdGFzayBjYWxscyB2VGFza1Jlc3VtZSggeEhhbmRsZSApLg0KKw0KKwkgLy8uLi4NCisNCisNCisJIC8vIFN1c3BlbmQgb3Vyc2VsdmVzLg0KKwkgdlRhc2tTdXNwZW5kKCBOVUxMICk7DQorDQorCSAvLyBXZSBjYW5ub3QgZ2V0IGhlcmUgdW5sZXNzIGFub3RoZXIgdGFzayBjYWxscyB2VGFza1Jlc3VtZQ0KKwkgLy8gd2l0aCBvdXIgaGFuZGxlIGFzIHRoZSBwYXJhbWV0ZXIuDQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlRhc2tTdXNwZW5kIHZUYXNrU3VzcGVuZA0KKyAqIFxpbmdyb3VwIFRhc2tDdHJsDQorICovDQordm9pZCB2VGFza1N1c3BlbmQoIHhUYXNrSGFuZGxlIHB4VGFza1RvU3VzcGVuZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxwcmU+dm9pZCB2VGFza1Jlc3VtZSggeFRhc2tIYW5kbGUgcHhUYXNrVG9SZXN1bWUgKTs8L3ByZT4NCisgKg0KKyAqIElOQ0xVREVfdlRhc2tTdXNwZW5kIG11c3QgYmUgZGVmaW5lZCBhcyAxIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIGF2YWlsYWJsZS4NCisgKiBTZWUgdGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIFJlc3VtZXMgYSBzdXNwZW5kZWQgdGFzay4NCisgKg0KKyAqIEEgdGFzayB0aGF0IGhhcyBiZWVuIHN1c3BlbmRlZCBieSBvbmUgb2YgbW9yZSBjYWxscyB0byB2VGFza1N1c3BlbmQgKCkNCisgKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGZvciBydW5uaW5nIGFnYWluIGJ5IGEgc2luZ2xlIGNhbGwgdG8NCisgKiB2VGFza1Jlc3VtZSAoKS4NCisgKg0KKyAqIEBwYXJhbSBweFRhc2tUb1Jlc3VtZSBIYW5kbGUgdG8gdGhlIHRhc2sgYmVpbmcgcmVhZGllZC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgdm9pZCB2QUZ1bmN0aW9uKCB2b2lkICkNCisgew0KKyB4VGFza0hhbmRsZSB4SGFuZGxlOw0KKw0KKwkgLy8gQ3JlYXRlIGEgdGFzaywgc3RvcmluZyB0aGUgaGFuZGxlLg0KKwkgeFRhc2tDcmVhdGUoIHZUYXNrQ29kZSwgIk5BTUUiLCBTVEFDS19TSVpFLCBOVUxMLCB0c2tJRExFX1BSSU9SSVRZLCAmeEhhbmRsZSApOw0KKw0KKwkgLy8gLi4uDQorDQorCSAvLyBVc2UgdGhlIGhhbmRsZSB0byBzdXNwZW5kIHRoZSBjcmVhdGVkIHRhc2suDQorCSB2VGFza1N1c3BlbmQoIHhIYW5kbGUgKTsNCisNCisJIC8vIC4uLg0KKw0KKwkgLy8gVGhlIGNyZWF0ZWQgdGFzayB3aWxsIG5vdCBydW4gZHVyaW5nIHRoaXMgcGVyaW9kLCB1bmxlc3MNCisJIC8vIGFub3RoZXIgdGFzayBjYWxscyB2VGFza1Jlc3VtZSggeEhhbmRsZSApLg0KKw0KKwkgLy8uLi4NCisNCisNCisJIC8vIFJlc3VtZSB0aGUgc3VzcGVuZGVkIHRhc2sgb3Vyc2VsdmVzLg0KKwkgdlRhc2tSZXN1bWUoIHhIYW5kbGUgKTsNCisNCisJIC8vIFRoZSBjcmVhdGVkIHRhc2sgd2lsbCBvbmNlIGFnYWluIGdldCBtaWNyb2NvbnRyb2xsZXIgcHJvY2Vzc2luZw0KKwkgLy8gdGltZSBpbiBhY2NvcmRhbmNlIHdpdGggaXQgcHJpb3JpdHkgd2l0aGluIHRoZSBzeXN0ZW0uDQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlRhc2tSZXN1bWUgdlRhc2tSZXN1bWUNCisgKiBcaW5ncm91cCBUYXNrQ3RybA0KKyAqLw0KK3ZvaWQgdlRhc2tSZXN1bWUoIHhUYXNrSGFuZGxlIHB4VGFza1RvUmVzdW1lICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHhUYXNrUmVzdW1lRnJvbUlTUiggeFRhc2tIYW5kbGUgcHhUYXNrVG9SZXN1bWUgKTs8L3ByZT4NCisgKg0KKyAqIElOQ0xVREVfeFRhc2tSZXN1bWVGcm9tSVNSIG11c3QgYmUgZGVmaW5lZCBhcyAxIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlDQorICogYXZhaWxhYmxlLiAgU2VlIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICoNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB2VGFza1Jlc3VtZSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBJU1IuDQorICoNCisgKiBBIHRhc2sgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQgYnkgb25lIG9mIG1vcmUgY2FsbHMgdG8gdlRhc2tTdXNwZW5kICgpDQorICogd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSBmb3IgcnVubmluZyBhZ2FpbiBieSBhIHNpbmdsZSBjYWxsIHRvDQorICogeFRhc2tSZXN1bWVGcm9tSVNSICgpLg0KKyAqDQorICogQHBhcmFtIHB4VGFza1RvUmVzdW1lIEhhbmRsZSB0byB0aGUgdGFzayBiZWluZyByZWFkaWVkLg0KKyAqDQorICogXGRlZmdyb3VwIHZUYXNrUmVzdW1lRnJvbUlTUiB2VGFza1Jlc3VtZUZyb21JU1INCisgKiBcaW5ncm91cCBUYXNrQ3RybA0KKyAqLw0KK3BvcnRCQVNFX1RZUEUgeFRhc2tSZXN1bWVGcm9tSVNSKCB4VGFza0hhbmRsZSBweFRhc2tUb1Jlc3VtZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFNDSEVEVUxFUiBDT05UUk9MDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT52b2lkIHZUYXNrU3RhcnRTY2hlZHVsZXIoIHZvaWQgKTs8L3ByZT4NCisgKg0KKyAqIFN0YXJ0cyB0aGUgcmVhbCB0aW1lIGtlcm5lbCB0aWNrIHByb2Nlc3NpbmcuICBBZnRlciBjYWxsaW5nIHRoZSBrZXJuZWwNCisgKiBoYXMgY29udHJvbCBvdmVyIHdoaWNoIHRhc2tzIGFyZSBleGVjdXRlZCBhbmQgd2hlbi4gIFRoaXMgZnVuY3Rpb24NCisgKiBkb2VzIG5vdCByZXR1cm4gdW50aWwgYW4gZXhlY3V0aW5nIHRhc2sgY2FsbHMgdlRhc2tFbmRTY2hlZHVsZXIgKCkuDQorICoNCisgKiBBdCBsZWFzdCBvbmUgdGFzayBzaG91bGQgYmUgY3JlYXRlZCB2aWEgYSBjYWxsIHRvIHhUYXNrQ3JlYXRlICgpDQorICogYmVmb3JlIGNhbGxpbmcgdlRhc2tTdGFydFNjaGVkdWxlciAoKS4gIFRoZSBpZGxlIHRhc2sgaXMgY3JlYXRlZA0KKyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZmlyc3QgYXBwbGljYXRpb24gdGFzayBpcyBjcmVhdGVkLg0KKyAqDQorICogU2VlIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZpbGUgbWFpbi5jIGZvciBhbiBleGFtcGxlIG9mIGNyZWF0aW5nDQorICogdGFza3MgYW5kIHN0YXJ0aW5nIHRoZSBrZXJuZWwuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHZvaWQgdkFGdW5jdGlvbiggdm9pZCApDQorIHsNCisJIC8vIENyZWF0ZSBhdCBsZWFzdCBvbmUgdGFzayBiZWZvcmUgc3RhcnRpbmcgdGhlIGtlcm5lbC4NCisJIHhUYXNrQ3JlYXRlKCB2VGFza0NvZGUsICJOQU1FIiwgU1RBQ0tfU0laRSwgTlVMTCwgdHNrSURMRV9QUklPUklUWSwgTlVMTCApOw0KKw0KKwkgLy8gU3RhcnQgdGhlIHJlYWwgdGltZSBrZXJuZWwgd2l0aCBwcmVlbXB0aW9uLg0KKwkgdlRhc2tTdGFydFNjaGVkdWxlciAoKTsNCisNCisJIC8vIFdpbGwgbm90IGdldCBoZXJlIHVubGVzcyBhIHRhc2sgY2FsbHMgdlRhc2tFbmRTY2hlZHVsZXIgKCkNCisgfQ0KKyAgIDwvcHJlPg0KKyAqDQorICogXGRlZmdyb3VwIHZUYXNrU3RhcnRTY2hlZHVsZXIgdlRhc2tTdGFydFNjaGVkdWxlcg0KKyAqIFxpbmdyb3VwIFNjaGVkdWxlckNvbnRyb2wNCisgKi8NCit2b2lkIHZUYXNrU3RhcnRTY2hlZHVsZXIoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKiA8cHJlPnZvaWQgdlRhc2tFbmRTY2hlZHVsZXIoIHZvaWQgKTs8L3ByZT4NCisgKg0KKyAqIFN0b3BzIHRoZSByZWFsIHRpbWUga2VybmVsIHRpY2suICBBbGwgY3JlYXRlZCB0YXNrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkNCisgKiBkZWxldGVkIGFuZCBtdWx0aXRhc2tpbmcgKGVpdGhlciBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlKSB3aWxsDQorICogc3RvcC4gIEV4ZWN1dGlvbiB0aGVuIHJlc3VtZXMgZnJvbSB0aGUgcG9pbnQgd2hlcmUgdlRhc2tTdGFydFNjaGVkdWxlciAoKQ0KKyAqIHdhcyBjYWxsZWQsIGFzIGlmIHZUYXNrU3RhcnRTY2hlZHVsZXIgKCkgaGFkIGp1c3QgcmV0dXJuZWQuDQorICoNCisgKiBTZWUgdGhlIGRlbW8gYXBwbGljYXRpb24gZmlsZSBtYWluLiBjIGluIHRoZSBkZW1vL1BDIGRpcmVjdG9yeSBmb3IgYW4NCisgKiBleGFtcGxlIHRoYXQgdXNlcyB2VGFza0VuZFNjaGVkdWxlciAoKS4NCisgKg0KKyAqIHZUYXNrRW5kU2NoZWR1bGVyICgpIHJlcXVpcmVzIGFuIGV4aXQgZnVuY3Rpb24gdG8gYmUgZGVmaW5lZCB3aXRoaW4gdGhlDQorICogcG9ydGFibGUgbGF5ZXIgKHNlZSB2UG9ydEVuZFNjaGVkdWxlciAoKSBpbiBwb3J0LiBjIGZvciB0aGUgUEMgcG9ydCkuICBUaGlzDQorICogcGVyZm9ybXMgaGFyZHdhcmUgc3BlY2lmaWMgb3BlcmF0aW9ucyBzdWNoIGFzIHN0b3BwaW5nIHRoZSBrZXJuZWwgdGljay4NCisgKg0KKyAqIHZUYXNrRW5kU2NoZWR1bGVyICgpIHdpbGwgY2F1c2UgYWxsIG9mIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZQ0KKyAqIGtlcm5lbCB0byBiZSBmcmVlZCAtIGJ1dCB3aWxsIG5vdCBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYXBwbGljYXRpb24NCisgKiB0YXNrcy4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICAgPHByZT4NCisgdm9pZCB2VGFza0NvZGUoIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyB7DQorCSBmb3IoIDs7ICkNCisJIHsNCisJCSAvLyBUYXNrIGNvZGUgZ29lcyBoZXJlLg0KKw0KKwkJIC8vIEF0IHNvbWUgcG9pbnQgd2Ugd2FudCB0byBlbmQgdGhlIHJlYWwgdGltZSBrZXJuZWwgcHJvY2Vzc2luZw0KKwkJIC8vIHNvIGNhbGwgLi4uDQorCQkgdlRhc2tFbmRTY2hlZHVsZXIgKCk7DQorCSB9DQorIH0NCisNCisgdm9pZCB2QUZ1bmN0aW9uKCB2b2lkICkNCisgew0KKwkgLy8gQ3JlYXRlIGF0IGxlYXN0IG9uZSB0YXNrIGJlZm9yZSBzdGFydGluZyB0aGUga2VybmVsLg0KKwkgeFRhc2tDcmVhdGUoIHZUYXNrQ29kZSwgIk5BTUUiLCBTVEFDS19TSVpFLCBOVUxMLCB0c2tJRExFX1BSSU9SSVRZLCBOVUxMICk7DQorDQorCSAvLyBTdGFydCB0aGUgcmVhbCB0aW1lIGtlcm5lbCB3aXRoIHByZWVtcHRpb24uDQorCSB2VGFza1N0YXJ0U2NoZWR1bGVyICgpOw0KKw0KKwkgLy8gV2lsbCBvbmx5IGdldCBoZXJlIHdoZW4gdGhlIHZUYXNrQ29kZSAoKSB0YXNrIGhhcyBjYWxsZWQNCisJIC8vIHZUYXNrRW5kU2NoZWR1bGVyICgpLiAgV2hlbiB3ZSBnZXQgaGVyZSB3ZSBhcmUgYmFjayB0byBzaW5nbGUgdGFzaw0KKwkgLy8gZXhlY3V0aW9uLg0KKyB9DQorICAgPC9wcmU+DQorICoNCisgKiBcZGVmZ3JvdXAgdlRhc2tFbmRTY2hlZHVsZXIgdlRhc2tFbmRTY2hlZHVsZXINCisgKiBcaW5ncm91cCBTY2hlZHVsZXJDb250cm9sDQorICovDQordm9pZCB2VGFza0VuZFNjaGVkdWxlciggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxwcmU+dm9pZCB2VGFza1N1c3BlbmRBbGwoIHZvaWQgKTs8L3ByZT4NCisgKg0KKyAqIFN1c3BlbmRzIGFsbCByZWFsIHRpbWUga2VybmVsIGFjdGl2aXR5IHdoaWxlIGtlZXBpbmcgaW50ZXJydXB0cyAoaW5jbHVkaW5nIHRoZQ0KKyAqIGtlcm5lbCB0aWNrKSBlbmFibGVkLg0KKyAqDQorICogQWZ0ZXIgY2FsbGluZyB2VGFza1N1c3BlbmRBbGwgKCkgdGhlIGNhbGxpbmcgdGFzayB3aWxsIGNvbnRpbnVlIHRvIGV4ZWN1dGUNCisgKiB3aXRob3V0IHJpc2sgb2YgYmVpbmcgc3dhcHBlZCBvdXQgdW50aWwgYSBjYWxsIHRvIHhUYXNrUmVzdW1lQWxsICgpIGhhcyBiZWVuDQorICogbWFkZS4NCisgKg0KKyAqIEFQSSBmdW5jdGlvbnMgdGhhdCBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gY2F1c2UgYSBjb250ZXh0IHN3aXRjaCAoZm9yIGV4YW1wbGUsDQorICogdlRhc2tEZWxheVVudGlsKCksIHhRdWV1ZVNlbmQoKSwgZXRjLikgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBzY2hlZHVsZXINCisgKiBpcyBzdXNwZW5kZWQuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAgIDxwcmU+DQorIHZvaWQgdlRhc2sxKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgew0KKwkgZm9yKCA7OyApDQorCSB7DQorCQkgLy8gVGFzayBjb2RlIGdvZXMgaGVyZS4NCisNCisJCSAvLyAuLi4NCisNCisJCSAvLyBBdCBzb21lIHBvaW50IHRoZSB0YXNrIHdhbnRzIHRvIHBlcmZvcm0gYSBsb25nIG9wZXJhdGlvbiBkdXJpbmcNCisJCSAvLyB3aGljaCBpdCBkb2VzIG5vdCB3YW50IHRvIGdldCBzd2FwcGVkIG91dC4gIEl0IGNhbm5vdCB1c2UNCisJCSAvLyB0YXNrRU5URVJfQ1JJVElDQUwgKCkvdGFza0VYSVRfQ1JJVElDQUwgKCkgYXMgdGhlIGxlbmd0aCBvZiB0aGUNCisJCSAvLyBvcGVyYXRpb24gbWF5IGNhdXNlIGludGVycnVwdHMgdG8gYmUgbWlzc2VkIC0gaW5jbHVkaW5nIHRoZQ0KKwkJIC8vIHRpY2tzLg0KKw0KKwkJIC8vIFByZXZlbnQgdGhlIHJlYWwgdGltZSBrZXJuZWwgc3dhcHBpbmcgb3V0IHRoZSB0YXNrLg0KKwkJIHZUYXNrU3VzcGVuZEFsbCAoKTsNCisNCisJCSAvLyBQZXJmb3JtIHRoZSBvcGVyYXRpb24gaGVyZS4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGNyaXRpY2FsDQorCQkgLy8gc2VjdGlvbnMgYXMgd2UgaGF2ZSBhbGwgdGhlIG1pY3JvY29udHJvbGxlciBwcm9jZXNzaW5nIHRpbWUuDQorCQkgLy8gRHVyaW5nIHRoaXMgdGltZSBpbnRlcnJ1cHRzIHdpbGwgc3RpbGwgb3BlcmF0ZSBhbmQgdGhlIGtlcm5lbA0KKwkJIC8vIHRpY2sgY291bnQgd2lsbCBiZSBtYWludGFpbmVkLg0KKw0KKwkJIC8vIC4uLg0KKw0KKwkJIC8vIFRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUuICBSZXN0YXJ0IHRoZSBrZXJuZWwuDQorCQkgeFRhc2tSZXN1bWVBbGwgKCk7DQorCSB9DQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgdlRhc2tTdXNwZW5kQWxsIHZUYXNrU3VzcGVuZEFsbA0KKyAqIFxpbmdyb3VwIFNjaGVkdWxlckNvbnRyb2wNCisgKi8NCit2b2lkIHZUYXNrU3VzcGVuZEFsbCggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxwcmU+Y2hhciB4VGFza1Jlc3VtZUFsbCggdm9pZCApOzwvcHJlPg0KKyAqDQorICogUmVzdW1lcyByZWFsIHRpbWUga2VybmVsIGFjdGl2aXR5IGZvbGxvd2luZyBhIGNhbGwgdG8gdlRhc2tTdXNwZW5kQWxsICgpLg0KKyAqIEFmdGVyIGEgY2FsbCB0byB2VGFza1N1c3BlbmRBbGwgKCkgdGhlIGtlcm5lbCB3aWxsIHRha2UgY29udHJvbCBvZiB3aGljaA0KKyAqIHRhc2sgaXMgZXhlY3V0aW5nIGF0IGFueSB0aW1lLg0KKyAqDQorICogQHJldHVybiBJZiByZXN1bWluZyB0aGUgc2NoZWR1bGVyIGNhdXNlZCBhIGNvbnRleHQgc3dpdGNoIHRoZW4gcGRUUlVFIGlzDQorICoJCSAgcmV0dXJuZWQsIG90aGVyd2lzZSBwZEZBTFNFIGlzIHJldHVybmVkLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgICA8cHJlPg0KKyB2b2lkIHZUYXNrMSggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorIHsNCisJIGZvciggOzsgKQ0KKwkgew0KKwkJIC8vIFRhc2sgY29kZSBnb2VzIGhlcmUuDQorDQorCQkgLy8gLi4uDQorDQorCQkgLy8gQXQgc29tZSBwb2ludCB0aGUgdGFzayB3YW50cyB0byBwZXJmb3JtIGEgbG9uZyBvcGVyYXRpb24gZHVyaW5nDQorCQkgLy8gd2hpY2ggaXQgZG9lcyBub3Qgd2FudCB0byBnZXQgc3dhcHBlZCBvdXQuICBJdCBjYW5ub3QgdXNlDQorCQkgLy8gdGFza0VOVEVSX0NSSVRJQ0FMICgpL3Rhc2tFWElUX0NSSVRJQ0FMICgpIGFzIHRoZSBsZW5ndGggb2YgdGhlDQorCQkgLy8gb3BlcmF0aW9uIG1heSBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIG1pc3NlZCAtIGluY2x1ZGluZyB0aGUNCisJCSAvLyB0aWNrcy4NCisNCisJCSAvLyBQcmV2ZW50IHRoZSByZWFsIHRpbWUga2VybmVsIHN3YXBwaW5nIG91dCB0aGUgdGFzay4NCisJCSB2VGFza1N1c3BlbmRBbGwgKCk7DQorDQorCQkgLy8gUGVyZm9ybSB0aGUgb3BlcmF0aW9uIGhlcmUuICBUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBjcml0aWNhbA0KKwkJIC8vIHNlY3Rpb25zIGFzIHdlIGhhdmUgYWxsIHRoZSBtaWNyb2NvbnRyb2xsZXIgcHJvY2Vzc2luZyB0aW1lLg0KKwkJIC8vIER1cmluZyB0aGlzIHRpbWUgaW50ZXJydXB0cyB3aWxsIHN0aWxsIG9wZXJhdGUgYW5kIHRoZSByZWFsDQorCQkgLy8gdGltZSBrZXJuZWwgdGljayBjb3VudCB3aWxsIGJlIG1haW50YWluZWQuDQorDQorCQkgLy8gLi4uDQorDQorCQkgLy8gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4gIFJlc3RhcnQgdGhlIGtlcm5lbC4gIFdlIHdhbnQgdG8gZm9yY2UNCisJCSAvLyBhIGNvbnRleHQgc3dpdGNoIC0gYnV0IHRoZXJlIGlzIG5vIHBvaW50IGlmIHJlc3VtaW5nIHRoZSBzY2hlZHVsZXINCisJCSAvLyBjYXVzZWQgYSBjb250ZXh0IHN3aXRjaCBhbHJlYWR5Lg0KKwkJIGlmKCAheFRhc2tSZXN1bWVBbGwgKCkgKQ0KKwkJIHsNCisJCQkgIHRhc2tZSUVMRCAoKTsNCisJCSB9DQorCSB9DQorIH0NCisgICA8L3ByZT4NCisgKiBcZGVmZ3JvdXAgeFRhc2tSZXN1bWVBbGwgeFRhc2tSZXN1bWVBbGwNCisgKiBcaW5ncm91cCBTY2hlZHVsZXJDb250cm9sDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFRhc2tSZXN1bWVBbGwoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKiA8cHJlPnNpZ25lZCBwb3J0QkFTRV9UWVBFIHhUYXNrSXNUYXNrU3VzcGVuZGVkKCB4VGFza0hhbmRsZSB4VGFzayApOzwvcHJlPg0KKyAqDQorICogVXRpbGl0eSB0YXNrIHRoYXQgc2ltcGx5IHJldHVybnMgcGRUUlVFIGlmIHRoZSB0YXNrIHJlZmVyZW5jZWQgYnkgeFRhc2sgaXMNCisgKiBjdXJyZW50bHkgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZSwgb3IgcGRGQUxTRSBpZiB0aGUgdGFzayByZWZlcmVuY2VkIGJ5IHhUYXNrDQorICogaXMgaW4gYW55IG90aGVyIHN0YXRlLg0KKyAqDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFRhc2tJc1Rhc2tTdXNwZW5kZWQoIHhUYXNrSGFuZGxlIHhUYXNrICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB0YXNrLiBoDQorICogPHByZT5zaWduZWQgcG9ydEJBU0VfVFlQRSB4VGFza0lzVGFza0ZpbmlzaGVkKCB4VGFza0hhbmRsZSB4VGFzayApOzwvcHJlPg0KKyAqDQorICogVXRpbGl0eSB0YXNrIHRoYXQgc2ltcGx5IHJldHVybnMgcGRUUlVFIGlmIHRoZSB0YXNrIGhhcyB0ZXJtaW5hdGVkLg0KKyAqDQorICovDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFRhc2tJc1Rhc2tGaW5pc2hlZCggeFRhc2tIYW5kbGUgeFRhc2sgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBUQVNLIFVUSUxJVElFUw0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxQUkU+cG9ydFRpY2tUeXBlIHhUYXNrR2V0VGlja0NvdW50KCB2b2lkICk7PC9QUkU+DQorICoNCisgKiBAcmV0dXJuIFRoZSBjb3VudCBvZiB0aWNrcyBzaW5jZSB2VGFza1N0YXJ0U2NoZWR1bGVyIHdhcyBjYWxsZWQuDQorICoNCisgKiBccGFnZSB4VGFza0dldFRpY2tDb3VudCB4VGFza0dldFRpY2tDb3VudA0KKyAqIFxpbmdyb3VwIFRhc2tVdGlscw0KKyAqLw0KK3BvcnRUaWNrVHlwZSB4VGFza0dldFRpY2tDb3VudCggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxQUkU+cG9ydFRpY2tUeXBlIHhUYXNrR2V0VGlja0NvdW50RnJvbUlTUiggdm9pZCApOzwvUFJFPg0KKyAqDQorICogQHJldHVybiBUaGUgY291bnQgb2YgdGlja3Mgc2luY2UgdlRhc2tTdGFydFNjaGVkdWxlciB3YXMgY2FsbGVkLg0KKyAqDQorICogVGhpcyBpcyBhIHZlcnNpb24gb2YgeFRhc2tHZXRUaWNrQ291bnQoKSB0aGF0IGlzIHNhZmUgdG8gYmUgY2FsbGVkIGZyb20gYW4NCisgKiBJU1IgLSBwcm92aWRlZCB0aGF0IHBvcnRUaWNrVHlwZSBpcyB0aGUgbmF0dXJhbCB3b3JkIHNpemUgb2YgdGhlDQorICogbWljcm9jb250cm9sbGVyIGJlaW5nIHVzZWQgb3IgaW50ZXJydXB0IG5lc3RpbmcgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb3INCisgKiBub3QgYmVpbmcgdXNlZC4NCisgKg0KKyAqIFxwYWdlIHhUYXNrR2V0VGlja0NvdW50IHhUYXNrR2V0VGlja0NvdW50DQorICogXGluZ3JvdXAgVGFza1V0aWxzDQorICovDQorcG9ydFRpY2tUeXBlIHhUYXNrR2V0VGlja0NvdW50RnJvbUlTUiggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxQUkU+dW5zaWduZWQgc2hvcnQgdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcyggdm9pZCApOzwvUFJFPg0KKyAqDQorICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHRhc2tzIHRoYXQgdGhlIHJlYWwgdGltZSBrZXJuZWwgaXMgY3VycmVudGx5IG1hbmFnaW5nLg0KKyAqIFRoaXMgaW5jbHVkZXMgYWxsIHJlYWR5LCBibG9ja2VkIGFuZCBzdXNwZW5kZWQgdGFza3MuICBBIHRhc2sgdGhhdA0KKyAqIGhhcyBiZWVuIGRlbGV0ZWQgYnV0IG5vdCB5ZXQgZnJlZWQgYnkgdGhlIGlkbGUgdGFzayB3aWxsIGFsc28gYmUNCisgKiBpbmNsdWRlZCBpbiB0aGUgY291bnQuDQorICoNCisgKiBccGFnZSB1eFRhc2tHZXROdW1iZXJPZlRhc2tzIHV4VGFza0dldE51bWJlck9mVGFza3MNCisgKiBcaW5ncm91cCBUYXNrVXRpbHMNCisgKi8NCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VGFza0dldE51bWJlck9mVGFza3MoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKiA8UFJFPnNpZ25lZCBjaGFyICpwY1Rhc2tHZXRUYXNrTmFtZSggeFRhc2tIYW5kbGUgeFRhc2tUb1F1ZXJ5ICk7PC9QUkU+DQorICoNCisgKiBAcmV0dXJuIFRoZSB0ZXh0IChodW1hbiByZWFkYWJsZSkgbmFtZSBvZiB0aGUgdGFzayByZWZlcmVuY2VkIGJ5IHRoZSBoYW5kbGUNCisgKiB4VGFza1RvUXVldXJ5LiAgQSB0YXNrIGNhbiBxdWVyeSBpdHMgb3duIG5hbWUgYnkgZWl0aGVyIHBhc3NpbmcgaW4gaXRzIG93bg0KKyAqIGhhbmRsZSwgb3IgYnkgc2V0dGluZyB4VGFza1RvUXVlcnkgdG8gTlVMTC4gIElOQ0xVREVfcGNUYXNrR2V0VGFza05hbWUgbXVzdCBiZQ0KKyAqIHNldCB0byAxIGluIEZyZWVSVE9TQ29uZmlnLmggZm9yIHBjVGFza0dldFRhc2tOYW1lKCkgdG8gYmUgYXZhaWxhYmxlLg0KKyAqDQorICogXHBhZ2UgcGNUYXNrR2V0VGFza05hbWUgcGNUYXNrR2V0VGFza05hbWUNCisgKiBcaW5ncm91cCBUYXNrVXRpbHMNCisgKi8NCitzaWduZWQgY2hhciAqcGNUYXNrR2V0VGFza05hbWUoIHhUYXNrSGFuZGxlIHhUYXNrVG9RdWVyeSApOw0KKw0KKy8qKg0KKyAqIHRhc2suIGgNCisgKiA8UFJFPnZvaWQgdlRhc2tMaXN0KCBjaGFyICpwY1dyaXRlQnVmZmVyICk7PC9QUkU+DQorICoNCisgKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUNCisgKiBhdmFpbGFibGUuICBTZWUgdGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIGludGVycnVwdHMgZm9yIGl0cyBkdXJhdGlvbi4gIEl0IGlzDQorICogbm90IGludGVuZGVkIGZvciBub3JtYWwgYXBwbGljYXRpb24gcnVudGltZSB1c2UgYnV0IGFzIGEgZGVidWcgYWlkLg0KKyAqDQorICogTGlzdHMgYWxsIHRoZSBjdXJyZW50IHRhc2tzLCBhbG9uZyB3aXRoIHRoZWlyIGN1cnJlbnQgc3RhdGUgYW5kIHN0YWNrDQorICogdXNhZ2UgaGlnaCB3YXRlciBtYXJrLg0KKyAqDQorICogVGFza3MgYXJlIHJlcG9ydGVkIGFzIGJsb2NrZWQgKCdCJyksIHJlYWR5ICgnUicpLCBkZWxldGVkICgnRCcpIG9yDQorICogc3VzcGVuZGVkICgnUycpLg0KKyAqDQorICogQHBhcmFtIHBjV3JpdGVCdWZmZXIgQSBidWZmZXIgaW50byB3aGljaCB0aGUgYWJvdmUgbWVudGlvbmVkIGRldGFpbHMNCisgKiB3aWxsIGJlIHdyaXR0ZW4sIGluIGFzY2lpIGZvcm0uICBUaGlzIGJ1ZmZlciBpcyBhc3N1bWVkIHRvIGJlIGxhcmdlDQorICogZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGdlbmVyYXRlZCByZXBvcnQuICBBcHByb3hpbWF0ZWx5IDQwIGJ5dGVzIHBlcg0KKyAqIHRhc2sgc2hvdWxkIGJlIHN1ZmZpY2llbnQuDQorICoNCisgKiBccGFnZSB2VGFza0xpc3QgdlRhc2tMaXN0DQorICogXGluZ3JvdXAgVGFza1V0aWxzDQorICovDQordm9pZCB2VGFza0xpc3QoIHNpZ25lZCBjaGFyICpwY1dyaXRlQnVmZmVyICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCit2b2lkIHZUYXNrTGlzdDEodm9pZCAoKnBtQ2FsbGJhY2spKHZvbGF0aWxlIHZvaWQgKnB4UENCLCBzaWduZWQgY2hhciBjU3RhdHVzKSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay4gaA0KKyAqIDxQUkU+dm9pZCB2VGFza0dldFJ1blRpbWVTdGF0cyggY2hhciAqcGNXcml0ZUJ1ZmZlciApOzwvUFJFPg0KKyAqDQorICogY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgbXVzdCBiZSBkZWZpbmVkIGFzIDEgZm9yIHRoaXMgZnVuY3Rpb24NCisgKiB0byBiZSBhdmFpbGFibGUuICBUaGUgYXBwbGljYXRpb24gbXVzdCBhbHNvIHRoZW4gcHJvdmlkZSBkZWZpbml0aW9ucw0KKyAqIGZvciBwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUygpIGFuZA0KKyAqIHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSB0byBjb25maWd1cmUgYSBwZXJpcGhlcmFsIHRpbWVyL2NvdW50ZXINCisgKiBhbmQgcmV0dXJuIHRoZSB0aW1lcnMgY3VycmVudCBjb3VudCB2YWx1ZSByZXNwZWN0aXZlbHkuICBUaGUgY291bnRlcg0KKyAqIHNob3VsZCBiZSBhdCBsZWFzdCAxMCB0aW1lcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSB0aWNrIGNvdW50Lg0KKyAqDQorICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgaXRzIGR1cmF0aW9uLiAgSXQgaXMNCisgKiBub3QgaW50ZW5kZWQgZm9yIG5vcm1hbCBhcHBsaWNhdGlvbiBydW50aW1lIHVzZSBidXQgYXMgYSBkZWJ1ZyBhaWQuDQorICoNCisgKiBTZXR0aW5nIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTIHRvIDEgd2lsbCByZXN1bHQgaW4gYSB0b3RhbA0KKyAqIGFjY3VtdWxhdGVkIGV4ZWN1dGlvbiB0aW1lIGJlaW5nIHN0b3JlZCBmb3IgZWFjaCB0YXNrLiAgVGhlIHJlc29sdXRpb24NCisgKiBvZiB0aGUgYWNjdW11bGF0ZWQgdGltZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHRpbWVyDQorICogY29uZmlndXJlZCBieSB0aGUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKSBtYWNyby4NCisgKiBDYWxsaW5nIHZUYXNrR2V0UnVuVGltZVN0YXRzKCkgd3JpdGVzIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSBvZiBlYWNoDQorICogdGFzayBpbnRvIGEgYnVmZmVyLCBib3RoIGFzIGFuIGFic29sdXRlIGNvdW50IHZhbHVlIGFuZCBhcyBhIHBlcmNlbnRhZ2UNCisgKiBvZiB0aGUgdG90YWwgc3lzdGVtIGV4ZWN1dGlvbiB0aW1lLg0KKyAqDQorICogQHBhcmFtIHBjV3JpdGVCdWZmZXIgQSBidWZmZXIgaW50byB3aGljaCB0aGUgZXhlY3V0aW9uIHRpbWVzIHdpbGwgYmUNCisgKiB3cml0dGVuLCBpbiBhc2NpaSBmb3JtLiAgVGhpcyBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSBsYXJnZSBlbm91Z2ggdG8NCisgKiBjb250YWluIHRoZSBnZW5lcmF0ZWQgcmVwb3J0LiAgQXBwcm94aW1hdGVseSA0MCBieXRlcyBwZXIgdGFzayBzaG91bGQNCisgKiBiZSBzdWZmaWNpZW50Lg0KKyAqDQorICogXHBhZ2UgdlRhc2tHZXRSdW5UaW1lU3RhdHMgdlRhc2tHZXRSdW5UaW1lU3RhdHMNCisgKiBcaW5ncm91cCBUYXNrVXRpbHMNCisgKi8NCit2b2lkIHZUYXNrR2V0UnVuVGltZVN0YXRzKCBzaWduZWQgY2hhciAqcGNXcml0ZUJ1ZmZlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdGFzay5oDQorICogPFBSRT51bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayggeFRhc2tIYW5kbGUgeFRhc2sgKTs8L1BSRT4NCisgKg0KKyAqIElOQ0xVREVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrIG11c3QgYmUgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaCBmb3INCisgKiB0aGlzIGZ1bmN0aW9uIHRvIGJlIGF2YWlsYWJsZS4NCisgKg0KKyAqIFJldHVybnMgdGhlIGhpZ2ggd2F0ZXIgbWFyayBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHhUYXNrLiAgVGhhdCBpcywNCisgKiB0aGUgbWluaW11bSBmcmVlIHN0YWNrIHNwYWNlIHRoZXJlIGhhcyBiZWVuIChpbiB3b3Jkcywgc28gb24gYSAzMiBiaXQgbWFjaGluZQ0KKyAqIGEgdmFsdWUgb2YgMSBtZWFucyA0IGJ5dGVzKSBzaW5jZSB0aGUgdGFzayBzdGFydGVkLiAgVGhlIHNtYWxsZXIgdGhlIHJldHVybmVkDQorICogbnVtYmVyIHRoZSBjbG9zZXIgdGhlIHRhc2sgaGFzIGNvbWUgdG8gb3ZlcmZsb3dpbmcgaXRzIHN0YWNrLg0KKyAqDQorICogQHBhcmFtIHhUYXNrIEhhbmRsZSBvZiB0aGUgdGFzayBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YWNrIHRvIGJlIGNoZWNrZWQuDQorICogU2V0IHhUYXNrIHRvIE5VTEwgdG8gY2hlY2sgdGhlIHN0YWNrIG9mIHRoZSBjYWxsaW5nIHRhc2suDQorICoNCisgKiBAcmV0dXJuIFRoZSBzbWFsbGVzdCBhbW91bnQgb2YgZnJlZSBzdGFjayBzcGFjZSB0aGVyZSBoYXMgYmVlbiAoaW4gYnl0ZXMpDQorICogc2luY2UgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayB3YXMgY3JlYXRlZC4NCisgKi8NCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayggeFRhc2tIYW5kbGUgeFRhc2sgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qIFdoZW4gdXNpbmcgdHJhY2UgbWFjcm9zIGl0IGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkgdG8gaW5jbHVkZSB0YXNrcy5oIGJlZm9yZQ0KK0ZyZWVSVE9TLmguICBXaGVuIHRoaXMgaXMgZG9uZSBwZFRBU0tfSE9PS19DT0RFIHdpbGwgbm90IHlldCBoYXZlIGJlZW4gZGVmaW5lZCwNCitzbyB0aGUgZm9sbG93aW5nIHR3byBwcm90b3R5cGVzIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4gIFRoaXMgY2FuIGJlDQorZml4ZWQgYnkgc2ltcGx5IGd1YXJkaW5nIGFnYWluc3QgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSB0d28gcHJvdG90eXBlcyB1bmxlc3MNCit0aGV5IGFyZSBleHBsaWNpdGx5IHJlcXVpcmVkIGJ5IHRoZSBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgY29uZmlndXJhdGlvbg0KK2NvbnN0YW50LiAqLw0KKyNpZmRlZiBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcNCisJI2lmIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxDQorCQkvKioNCisJCSAqIHRhc2suaA0KKwkJICogPHByZT52b2lkIHZUYXNrU2V0QXBwbGljYXRpb25UYXNrVGFnKCB4VGFza0hhbmRsZSB4VGFzaywgcGRUQVNLX0hPT0tfQ09ERSBweEhvb2tGdW5jdGlvbiApOzwvcHJlPg0KKwkJICoNCisJCSAqIFNldHMgcHhIb29rRnVuY3Rpb24gdG8gYmUgdGhlIHRhc2sgaG9vayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSB0YXNrIHhUYXNrLg0KKwkJICogUGFzc2luZyB4VGFzayBhcyBOVUxMIGhhcyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhlIGNhbGxpbmcgdGFza3MgaG9vaw0KKwkJICogZnVuY3Rpb24uDQorCQkgKi8NCisJCXZvaWQgdlRhc2tTZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrSGFuZGxlIHhUYXNrLCBwZFRBU0tfSE9PS19DT0RFIHB4SG9va0Z1bmN0aW9uICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisJCS8qKg0KKwkJICogdGFzay5oDQorCQkgKiA8cHJlPnZvaWQgeFRhc2tHZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrSGFuZGxlIHhUYXNrICk7PC9wcmU+DQorCQkgKg0KKwkJICogUmV0dXJucyB0aGUgcHhIb29rRnVuY3Rpb24gdmFsdWUgYXNzaWduZWQgdG8gdGhlIHRhc2sgeFRhc2suDQorCQkgKi8NCisJCXBkVEFTS19IT09LX0NPREUgeFRhc2tHZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrSGFuZGxlIHhUYXNrICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisJI2VuZGlmIC8qIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PTEgKi8NCisjZW5kaWYgLyogaWZkZWYgY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHICovDQorDQorLyoqDQorICogdGFzay5oDQorICogPHByZT5wb3J0QkFTRV9UWVBFIHhUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2soIHhUYXNrSGFuZGxlIHhUYXNrLCBwZFRBU0tfSE9PS19DT0RFIHB4SG9va0Z1bmN0aW9uICk7PC9wcmU+DQorICoNCisgKiBDYWxscyB0aGUgaG9vayBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggeFRhc2suICBQYXNzaW5nIHhUYXNrIGFzIE5VTEwgaGFzDQorICogdGhlIGVmZmVjdCBvZiBjYWxsaW5nIHRoZSBSdW5uaW5nIHRhc2tzICh0aGUgY2FsbGluZyB0YXNrKSBob29rIGZ1bmN0aW9uLg0KKyAqDQorICogcHZQYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoZSBob29rIGZ1bmN0aW9uIGZvciB0aGUgdGFzayB0byBpbnRlcnByZXQgYXMgaXQNCisgKiB3YW50cy4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2soIHhUYXNrSGFuZGxlIHhUYXNrLCB2b2lkICpwdlBhcmFtZXRlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogeFRhc2tHZXRJZGxlVGFza0hhbmRsZSgpIGlzIG9ubHkgYXZhaWxhYmxlIGlmIA0KKyAqIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSBpcyBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLg0KKyAqDQorICogU2ltcGx5IHJldHVybnMgdGhlIGhhbmRsZSBvZiB0aGUgaWRsZSB0YXNrLiAgSXQgaXMgbm90IHZhbGlkIHRvIGNhbGwNCisgKiB4VGFza0dldElkbGVUYXNrSGFuZGxlKCkgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZC4NCisgKi8NCit4VGFza0hhbmRsZSB4VGFza0dldElkbGVUYXNrSGFuZGxlKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFNDSEVEVUxFUiBJTlRFUk5BTFMgQVZBSUxBQkxFIEZPUiBQT1JUSU5HIFBVUlBPU0VTDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFRISVMgRlVOQ1RJT04gTVVTVCBOT1QgQkUgVVNFRCBGUk9NIEFQUExJQ0FUSU9OIENPREUuICBJVCBJUyBPTkxZDQorICogSU5URU5ERUQgRk9SIFVTRSBXSEVOIElNUExFTUVOVElORyBBIFBPUlQgT0YgVEhFIFNDSEVEVUxFUiBBTkQgSVMNCisgKiBBTiBJTlRFUkZBQ0UgV0hJQ0ggSVMgRk9SIFRIRSBFWENMVVNJVkUgVVNFIE9GIFRIRSBTQ0hFRFVMRVIuDQorICoNCisgKiBDYWxsZWQgZnJvbSB0aGUgcmVhbCB0aW1lIGtlcm5lbCB0aWNrIChlaXRoZXIgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSksDQorICogdGhpcyBpbmNyZW1lbnRzIHRoZSB0aWNrIGNvdW50IGFuZCBjaGVja3MgaWYgYW55IHRhc2tzIHRoYXQgYXJlIGJsb2NrZWQNCisgKiBmb3IgYSBmaW5pdGUgcGVyaW9kIHJlcXVpcmVkIHJlbW92aW5nIGZyb20gYSBibG9ja2VkIGxpc3QgYW5kIHBsYWNpbmcgb24NCisgKiBhIHJlYWR5IGxpc3QuDQorICovDQordm9pZCB2VGFza0luY3JlbWVudFRpY2soIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogUG9ydGVkIGZyb20gRnJlZVJUT1NWOC4wLjEgdG8gc3VwcG9ydCBrMjQgVkxQUyBtb2RlDQorICogSWYgdGlja2xlc3MgbW9kZSBpcyBiZWluZyB1c2VkLCBvciBhIGxvdyBwb3dlciBtb2RlIGlzIGltcGxlbWVudGVkLCB0aGVuDQorICogdGhlIHRpY2sgaW50ZXJydXB0IHdpbGwgbm90IGV4ZWN1dGUgZHVyaW5nIGlkbGUgcGVyaW9kcy4gIFdoZW4gdGhpcyBpcyB0aGUNCisgKiBjYXNlLCB0aGUgdGljayBjb3VudCB2YWx1ZSBtYWludGFpbmVkIGJ5IHRoZSBzY2hlZHVsZXIgbmVlZHMgdG8gYmUga2VwdCB1cA0KKyAqIHRvIGRhdGUgd2l0aCB0aGUgYWN0dWFsIGV4ZWN1dGlvbiB0aW1lIGJ5IGJlaW5nIHNraXBwZWQgZm9yd2FyZCBieSBhIHRpbWUNCisgKiBlcXVhbCB0byB0aGUgaWRsZSBwZXJpb2QuDQorICovDQordm9pZCB2VGFza1N0ZXBUaWNrKCBjb25zdCBwb3J0VGlja1R5cGUgeFRpY2tzVG9KdW1wICk7DQorDQorLyoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgTk9UIEJFIFVTRUQgRlJPTSBBUFBMSUNBVElPTiBDT0RFLiAgSVQgSVMgQU4NCisgKiBJTlRFUkZBQ0UgV0hJQ0ggSVMgRk9SIFRIRSBFWENMVVNJVkUgVVNFIE9GIFRIRSBTQ0hFRFVMRVIuDQorICoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRC4NCisgKg0KKyAqIFJlbW92ZXMgdGhlIGNhbGxpbmcgdGFzayBmcm9tIHRoZSByZWFkeSBsaXN0IGFuZCBwbGFjZXMgaXQgYm90aA0KKyAqIG9uIHRoZSBsaXN0IG9mIHRhc2tzIHdhaXRpbmcgZm9yIGEgcGFydGljdWxhciBldmVudCwgYW5kIHRoZQ0KKyAqIGxpc3Qgb2YgZGVsYXllZCB0YXNrcy4gIFRoZSB0YXNrIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGJvdGggbGlzdHMNCisgKiBhbmQgcmVwbGFjZWQgb24gdGhlIHJlYWR5IGxpc3Qgc2hvdWxkIGVpdGhlciB0aGUgZXZlbnQgb2NjdXIgKGFuZA0KKyAqIHRoZXJlIGJlIG5vIGhpZ2hlciBwcmlvcml0eSB0YXNrcyB3YWl0aW5nIG9uIHRoZSBzYW1lIGV2ZW50KSBvcg0KKyAqIHRoZSBkZWxheSBwZXJpb2QgZXhwaXJlcy4NCisgKg0KKyAqIEBwYXJhbSBweEV2ZW50TGlzdCBUaGUgbGlzdCBjb250YWluaW5nIHRhc2tzIHRoYXQgYXJlIGJsb2NrZWQgd2FpdGluZw0KKyAqIGZvciB0aGUgZXZlbnQgdG8gb2NjdXIuDQorICoNCisgKiBAcGFyYW0geFRpY2tzVG9XYWl0IFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIHRhc2sgc2hvdWxkIHdhaXQNCisgKiBmb3IgdGhlIGV2ZW50IHRvIG9jY3VyLiAgVGhpcyBpcyBzcGVjaWZpZWQgaW4ga2VybmVsIHRpY2tzLHRoZSBjb25zdGFudA0KKyAqIHBvcnRUSUNLX1JBVEVfTVMgY2FuIGJlIHVzZWQgdG8gY29udmVydCBrZXJuZWwgdGlja3MgaW50byBhIHJlYWwgdGltZQ0KKyAqIHBlcmlvZC4NCisgKi8NCit2b2lkIHZUYXNrUGxhY2VPbkV2ZW50TGlzdCggY29uc3QgeExpc3QgKiBjb25zdCBweEV2ZW50TGlzdCwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgTk9UIEJFIFVTRUQgRlJPTSBBUFBMSUNBVElPTiBDT0RFLiAgSVQgSVMgQU4NCisgKiBJTlRFUkZBQ0UgV0hJQ0ggSVMgRk9SIFRIRSBFWENMVVNJVkUgVVNFIE9GIFRIRSBTQ0hFRFVMRVIuDQorICoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRC4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbmVhcmx5IHRoZSBzYW1lIGZ1bmN0aW9uIGFzIHZUYXNrUGxhY2VPbkV2ZW50TGlzdCgpLg0KKyAqIFRoZSBkaWZmZXJlbmNlIGJlaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJtaXQgdGFza3MgdG8gYmxvY2sNCisgKiBpbmRlZmluaXRlbHksIHdoZXJlYXMgdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCkgZG9lcy4NCisgKg0KKyAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZSB0YXNrIGJlaW5nIHJlbW92ZWQgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIHRhc2sNCisgKiBtYWtpbmcgdGhlIGNhbGwsIG90aGVyd2lzZSBwZEZBTFNFLg0KKyAqLw0KK3ZvaWQgdlRhc2tQbGFjZU9uRXZlbnRMaXN0UmVzdHJpY3RlZCggY29uc3QgeExpc3QgKiBjb25zdCBweEV2ZW50TGlzdCwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgTk9UIEJFIFVTRUQgRlJPTSBBUFBMSUNBVElPTiBDT0RFLiAgSVQgSVMgQU4NCisgKiBJTlRFUkZBQ0UgV0hJQ0ggSVMgRk9SIFRIRSBFWENMVVNJVkUgVVNFIE9GIFRIRSBTQ0hFRFVMRVIuDQorICoNCisgKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRC4NCisgKg0KKyAqIFJlbW92ZXMgYSB0YXNrIGZyb20gYm90aCB0aGUgc3BlY2lmaWVkIGV2ZW50IGxpc3QgYW5kIHRoZSBsaXN0IG9mIGJsb2NrZWQNCisgKiB0YXNrcywgYW5kIHBsYWNlcyBpdCBvbiBhIHJlYWR5IHF1ZXVlLg0KKyAqDQorICogeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0ICgpIHdpbGwgYmUgY2FsbGVkIGlmIGVpdGhlciBhbiBldmVudCBvY2N1cnMgdG8NCisgKiB1bmJsb2NrIGEgdGFzaywgb3IgdGhlIGJsb2NrIHRpbWVvdXQgcGVyaW9kIGV4cGlyZXMuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgdGFzayBiZWluZyByZW1vdmVkIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSB0YXNrDQorICogbWFraW5nIHRoZSBjYWxsLCBvdGhlcndpc2UgcGRGQUxTRS4NCisgKi8NCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoIGNvbnN0IHhMaXN0ICogY29uc3QgcHhFdmVudExpc3QgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVEhJUyBGVU5DVElPTiBNVVNUIE5PVCBCRSBVU0VEIEZST00gQVBQTElDQVRJT04gQ09ERS4gIElUIElTIE9OTFkNCisgKiBJTlRFTkRFRCBGT1IgVVNFIFdIRU4gSU1QTEVNRU5USU5HIEEgUE9SVCBPRiBUSEUgU0NIRURVTEVSIEFORCBJUw0KKyAqIEFOIElOVEVSRkFDRSBXSElDSCBJUyBGT1IgVEhFIEVYQ0xVU0lWRSBVU0UgT0YgVEhFIFNDSEVEVUxFUi4NCisgKg0KKyAqIFNldHMgdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgVENCIHRvIHRoZSBUQ0Igb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KKyAqIHRoYXQgaXMgcmVhZHkgdG8gcnVuLg0KKyAqLw0KK3ZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFJldHVybiB0aGUgaGFuZGxlIG9mIHRoZSBjYWxsaW5nIHRhc2suDQorICovDQoreFRhc2tIYW5kbGUgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBDYXB0dXJlIHRoZSBjdXJyZW50IHRpbWUgc3RhdHVzIGZvciBmdXR1cmUgcmVmZXJlbmNlLg0KKyAqLw0KK3ZvaWQgdlRhc2tTZXRUaW1lT3V0U3RhdGUoIHhUaW1lT3V0VHlwZSAqIGNvbnN0IHB4VGltZU91dCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBDb21wYXJlIHRoZSB0aW1lIHN0YXR1cyBub3cgd2l0aCB0aGF0IHByZXZpb3VzbHkgY2FwdHVyZWQgdG8gc2VlIGlmIHRoZQ0KKyAqIHRpbWVvdXQgaGFzIGV4cGlyZWQuDQorICovDQorcG9ydEJBU0VfVFlQRSB4VGFza0NoZWNrRm9yVGltZU91dCggeFRpbWVPdXRUeXBlICogY29uc3QgcHhUaW1lT3V0LCBwb3J0VGlja1R5cGUgKiBjb25zdCBweFRpY2tzVG9XYWl0ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFNob3J0Y3V0IHVzZWQgYnkgdGhlIHF1ZXVlIGltcGxlbWVudGF0aW9uIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgY2FsbCB0bw0KKyAqIHRhc2tZSUVMRCgpOw0KKyAqLw0KK3ZvaWQgdlRhc2tNaXNzZWRZaWVsZCggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBSZXR1cm5zIHRoZSBzY2hlZHVsZXIgc3RhdGUgYXMgdGFza1NDSEVEVUxFUl9SVU5OSU5HLA0KKyAqIHRhc2tTQ0hFRFVMRVJfTk9UX1NUQVJURUQgb3IgdGFza1NDSEVEVUxFUl9TVVNQRU5ERUQuDQorICovDQorcG9ydEJBU0VfVFlQRSB4VGFza0dldFNjaGVkdWxlclN0YXRlKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFJhaXNlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG11dGV4IGhvbGRlciB0byB0aGF0IG9mIHRoZSBjYWxsaW5nIHRhc2sgc2hvdWxkDQorICogdGhlIG11dGV4IGhvbGRlciBoYXZlIGEgcHJpb3JpdHkgbGVzcyB0aGFuIHRoZSBjYWxsaW5nIHRhc2suDQorICovDQordm9pZCB2VGFza1ByaW9yaXR5SW5oZXJpdCggeFRhc2tIYW5kbGUgKiBjb25zdCBweE11dGV4SG9sZGVyICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFNldCB0aGUgcHJpb3JpdHkgb2YgYSB0YXNrIGJhY2sgdG8gaXRzIHByb3BlciBwcmlvcml0eSBpbiB0aGUgY2FzZSB0aGF0IGl0DQorICogaW5oZXJpdGVkIGEgaGlnaGVyIHByaW9yaXR5IHdoaWxlIGl0IHdhcyBob2xkaW5nIGEgc2VtYXBob3JlLg0KKyAqLw0KK3ZvaWQgdlRhc2tQcmlvcml0eURpc2luaGVyaXQoIHhUYXNrSGFuZGxlICogY29uc3QgcHhNdXRleEhvbGRlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBHZW5lcmljIHZlcnNpb24gb2YgdGhlIHRhc2sgY3JlYXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgdGhlDQorICogeFRhc2tDcmVhdGUoKSBhbmQgeFRhc2tDcmVhdGVSZXN0cmljdGVkKCkgbWFjcm9zLg0KKyAqLw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhUYXNrR2VuZXJpY0NyZWF0ZSggcGRUQVNLX0NPREUgcHhUYXNrQ29kZSwgY29uc3Qgc2lnbmVkIGNoYXIgKiBjb25zdCBwY05hbWUsIHVuc2lnbmVkIHNob3J0IHVzU3RhY2tEZXB0aCwgdm9pZCAqcHZQYXJhbWV0ZXJzLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UHJpb3JpdHksIHhUYXNrSGFuZGxlICpweENyZWF0ZWRUYXNrLCBwb3J0U1RBQ0tfVFlQRSAqcHV4U3RhY2tCdWZmZXIsIGNvbnN0IHhNZW1vcnlSZWdpb24gKiBjb25zdCB4UmVnaW9ucyApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBHZXQgdGhlIHV4VENCTnVtYmVyIGFzc2lnbmVkIHRvIHRoZSB0YXNrIHJlZmVyZW5jZWQgYnkgdGhlIHhUYXNrIHBhcmFtZXRlci4NCisgKi8NCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VGFza0dldFRhc2tOdW1iZXIoIHhUYXNrSGFuZGxlIHhUYXNrICk7DQorDQorLyogDQorICogU2V0IHRoZSB1eFRDQk51bWJlciBvZiB0aGUgdGFzayByZWZlcmVuY2VkIGJ5IHRoZSB4VGFzayBwYXJhbWV0ZXIgdG8NCisgKiB1Y0hhbmRsZS4NCisgKi8NCit2b2lkIHZUYXNrU2V0VGFza051bWJlciggeFRhc2tIYW5kbGUgeFRhc2ssIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhIYW5kbGUgKTsNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8qIFRBU0tfSCAqLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3RpbWVycy5oIGIvRnJlZVJUT1MvU291cmNlL2luY2x1ZGUvdGltZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2MjM2OAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlL3RpbWVycy5oCkBAIC0wLDAgKzEsOTUyIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgVElNRVJTX0gNCisjZGVmaW5lIFRJTUVSU19IDQorDQorI2lmbmRlZiBJTkNfRlJFRVJUT1NfSA0KKwkjZXJyb3IgImluY2x1ZGUgRnJlZVJUT1MuaCBtdXN0IGFwcGVhciBpbiBzb3VyY2UgZmlsZXMgYmVmb3JlIGluY2x1ZGUgdGltZXJzLmgiDQorI2VuZGlmDQorDQorI2luY2x1ZGUgInBvcnRhYmxlLmgiDQorI2luY2x1ZGUgImxpc3QuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIElEcyBmb3IgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudC9yZWNlaXZlZCBvbiB0aGUgdGltZXIgcXVldWUuICBUaGVzZSBhcmUgdG8NCitiZSB1c2VkIHNvbGVseSB0aHJvdWdoIHRoZSBtYWNyb3MgdGhhdCBtYWtlIHVwIHRoZSBwdWJsaWMgc29mdHdhcmUgdGltZXIgQVBJLA0KK2FzIGRlZmluZWQgYmVsb3cuICovDQorI2RlZmluZSB0bXJDT01NQU5EX1NUQVJUCQkJCQkwDQorI2RlZmluZSB0bXJDT01NQU5EX1NUT1AJCQkJCQkxDQorI2RlZmluZSB0bXJDT01NQU5EX0NIQU5HRV9QRVJJT0QJCQkyDQorI2RlZmluZSB0bXJDT01NQU5EX0RFTEVURQkJCQkJMw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBNQUNST1MgQU5EIERFRklOSVRJT05TDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisgLyoqDQorICogVHlwZSBieSB3aGljaCBzb2Z0d2FyZSB0aW1lcnMgYXJlIHJlZmVyZW5jZWQuICBGb3IgZXhhbXBsZSwgYSBjYWxsIHRvDQorICogeFRpbWVyQ3JlYXRlKCkgcmV0dXJucyBhbiB4VGltZXJIYW5kbGUgdmFyaWFibGUgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvDQorICogcmVmZXJlbmNlIHRoZSBzdWJqZWN0IHRpbWVyIGluIGNhbGxzIHRvIG90aGVyIHNvZnR3YXJlIHRpbWVyIEFQSSBmdW5jdGlvbnMNCisgKiAoZm9yIGV4YW1wbGUsIHhUaW1lclN0YXJ0KCksIHhUaW1lclJlc2V0KCksIGV0Yy4pLg0KKyAqLw0KK3R5cGVkZWYgdm9pZCAqIHhUaW1lckhhbmRsZTsNCisNCisvKiBEZWZpbmUgdGhlIHByb3RvdHlwZSB0byB3aGljaCB0aW1lciBjYWxsYmFjayBmdW5jdGlvbnMgbXVzdCBjb25mb3JtLiAqLw0KK3R5cGVkZWYgdm9pZCAoKnRtclRJTUVSX0NBTExCQUNLKSggeFRpbWVySGFuZGxlIHhUaW1lciApOw0KKw0KKy8qKg0KKyAqIHhUaW1lckhhbmRsZSB4VGltZXJDcmVhdGUoIAljb25zdCBzaWduZWQgY2hhciAqcGNUaW1lck5hbWUsDQorICogCQkJCQkJCQlwb3J0VGlja1R5cGUgeFRpbWVyUGVyaW9kSW5UaWNrcywNCisgKiAJCQkJCQkJCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhBdXRvUmVsb2FkLA0KKyAqIAkJCQkJCQkJdm9pZCAqIHB2VGltZXJJRCwNCisgKiAJCQkJCQkJCXRtclRJTUVSX0NBTExCQUNLIHB4Q2FsbGJhY2tGdW5jdGlvbiApOw0KKyAqDQorICogQ3JlYXRlcyBhIG5ldyBzb2Z0d2FyZSB0aW1lciBpbnN0YW5jZS4gIFRoaXMgYWxsb2NhdGVzIHRoZSBzdG9yYWdlIHJlcXVpcmVkDQorICogYnkgdGhlIG5ldyB0aW1lciwgaW5pdGlhbGlzZXMgdGhlIG5ldyB0aW1lcnMgaW50ZXJuYWwgc3RhdGUsIGFuZCByZXR1cm5zIGENCisgKiBoYW5kbGUgYnkgd2hpY2ggdGhlIG5ldyB0aW1lciBjYW4gYmUgcmVmZXJlbmNlZC4NCisgKg0KKyAqIFRpbWVycyBhcmUgY3JlYXRlZCBpbiB0aGUgZG9ybWFudCBzdGF0ZS4gIFRoZSB4VGltZXJTdGFydCgpLCB4VGltZXJSZXNldCgpLA0KKyAqIHhUaW1lclN0YXJ0RnJvbUlTUigpLCB4VGltZXJSZXNldEZyb21JU1IoKSwgeFRpbWVyQ2hhbmdlUGVyaW9kKCkgYW5kDQorICogeFRpbWVyQ2hhbmdlUGVyaW9kRnJvbUlTUigpIEFQSSBmdW5jdGlvbnMgY2FuIGFsbCBiZSB1c2VkIHRvIHRyYW5zaXRpb24gYSB0aW1lciBpbnRvIHRoZQ0KKyAqIGFjdGl2ZSBzdGF0ZS4NCisgKg0KKyAqIEBwYXJhbSBwY1RpbWVyTmFtZSBBIHRleHQgbmFtZSB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSB0aW1lci4gIFRoaXMgaXMgZG9uZQ0KKyAqIHB1cmVseSB0byBhc3Npc3QgZGVidWdnaW5nLiAgVGhlIGtlcm5lbCBpdHNlbGYgb25seSBldmVyIHJlZmVyZW5jZXMgYSB0aW1lciBieQ0KKyAqIGl0cyBoYW5kbGUsIGFuZCBuZXZlciBieSBpdHMgbmFtZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXJQZXJpb2RJblRpY2tzIFRoZSB0aW1lciBwZXJpb2QuICBUaGUgdGltZSBpcyBkZWZpbmVkIGluIHRpY2sgcGVyaW9kcyBzbw0KKyAqIHRoZSBjb25zdGFudCBwb3J0VElDS19SQVRFX01TIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lIHRoYXQgaGFzIGJlZW4NCisgKiBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0aW1lciBtdXN0IGV4cGlyZSBhZnRlciAxMDANCisgKiB0aWNrcywgdGhlbiB4VGltZXJQZXJpb2RJblRpY2tzIHNob3VsZCBiZSBzZXQgdG8gMTAwLiAgQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHRpbWVyDQorICogbXVzdCBleHBpcmUgYWZ0ZXIgNTAwbXMsIHRoZW4geFBlcmlvZCBjYW4gYmUgc2V0IHRvICggNTAwIC8gcG9ydFRJQ0tfUkFURV9NUyApDQorICogcHJvdmlkZWQgY29uZmlnVElDS19SQVRFX0haIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwLg0KKyAqDQorICogQHBhcmFtIHV4QXV0b1JlbG9hZCBJZiB1eEF1dG9SZWxvYWQgaXMgc2V0IHRvIHBkVFJVRSB0aGVuIHRoZSB0aW1lciB3aWxsDQorICogZXhwaXJlIHJlcGVhdGVkbHkgd2l0aCBhIGZyZXF1ZW5jeSBzZXQgYnkgdGhlIHhUaW1lclBlcmlvZEluVGlja3MgcGFyYW1ldGVyLiAgSWYNCisgKiB1eEF1dG9SZWxvYWQgaXMgc2V0IHRvIHBkRkFMU0UgdGhlbiB0aGUgdGltZXIgd2lsbCBiZSBhIG9uZS1zaG90IHRpbWVyIGFuZA0KKyAqIGVudGVyIHRoZSBkb3JtYW50IHN0YXRlIGFmdGVyIGl0IGV4cGlyZXMuDQorICoNCisgKiBAcGFyYW0gcHZUaW1lcklEIEFuIGlkZW50aWZpZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgdGltZXIgYmVpbmcgY3JlYXRlZC4NCisgKiBUeXBpY2FsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIGluIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbiB0byBpZGVudGlmeSB3aGljaA0KKyAqIHRpbWVyIGV4cGlyZWQgd2hlbiB0aGUgc2FtZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBtb3JlIHRoYW4gb25lDQorICogdGltZXIuDQorICoNCisgKiBAcGFyYW0gcHhDYWxsYmFja0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuDQorICogQ2FsbGJhY2sgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgcHJvdG90eXBlIGRlZmluZWQgYnkgdG1yVElNRVJfQ0FMTEJBQ0ssDQorICogd2hpY2ggaXMJInZvaWQgdkNhbGxiYWNrRnVuY3Rpb24oIHhUaW1lckhhbmRsZSB4VGltZXIgKTsiLg0KKyAqDQorICogQHJldHVybiBJZiB0aGUgdGltZXIgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZSB0aGVuIGEgaGFuZGxlIHRvIHRoZSBuZXdseQ0KKyAqIGNyZWF0ZWQgdGltZXIgaXMgcmV0dXJuZWQuICBJZiB0aGUgdGltZXIgY2Fubm90IGJlIGNyZWF0ZWQgKGJlY2F1c2UgZWl0aGVyDQorICogdGhlcmUgaXMgaW5zdWZmaWNpZW50IEZyZWVSVE9TIGhlYXAgcmVtYWluaW5nIHRvIGFsbG9jYXRlIHRoZSB0aW1lcg0KKyAqIHN0cnVjdHVyZXMsIG9yIHRoZSB0aW1lciBwZXJpb2Qgd2FzIHNldCB0byAwKSB0aGVuIDAgaXMgcmV0dXJuZWQuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAqDQorICogI2RlZmluZSBOVU1fVElNRVJTIDUNCisgKg0KKyAqIC8vIEFuIGFycmF5IHRvIGhvbGQgaGFuZGxlcyB0byB0aGUgY3JlYXRlZCB0aW1lcnMuDQorICogeFRpbWVySGFuZGxlIHhUaW1lcnNbIE5VTV9USU1FUlMgXTsNCisgKg0KKyAqIC8vIEFuIGFycmF5IHRvIGhvbGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggdGltZXIgZXhwaXJlcy4NCisgKiBsb25nIGxFeHBpcmVDb3VudGVyc1sgTlVNX1RJTUVSUyBdID0geyAwIH07DQorICoNCisgKiAvLyBEZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBieSBtdWx0aXBsZSB0aW1lciBpbnN0YW5jZXMuDQorICogLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXQgY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUNCisgKiAvLyBhc3NvY2lhdGVkIHRpbWVyIGV4cGlyZXMsIGFuZCBzdG9wIHRoZSB0aW1lciBvbmNlIHRoZSB0aW1lciBoYXMgZXhwaXJlZA0KKyAqIC8vIDEwIHRpbWVzLg0KKyAqIHZvaWQgdlRpbWVyQ2FsbGJhY2soIHhUaW1lckhhbmRsZSBweFRpbWVyICkNCisgKiB7DQorICogbG9uZyBsQXJyYXlJbmRleDsNCisgKiBjb25zdCBsb25nIHhNYXhFeHBpcnlDb3VudEJlZm9yZVN0b3BwaW5nID0gMTA7DQorICoNCisgKiAJICAgLy8gT3B0aW9uYWxseSBkbyBzb21ldGhpbmcgaWYgdGhlIHB4VGltZXIgcGFyYW1ldGVyIGlzIE5VTEwuDQorICogCSAgIGNvbmZpZ0FTU0VSVCggcHhUaW1lciApOw0KKyAqIAkNCisgKiAgICAgLy8gV2hpY2ggdGltZXIgZXhwaXJlZD8NCisgKiAgICAgbEFycmF5SW5kZXggPSAoIGxvbmcgKSBwdlRpbWVyR2V0VGltZXJJRCggcHhUaW1lciApOw0KKyAqDQorICogICAgIC8vIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcHhUaW1lciBoYXMgZXhwaXJlZC4NCisgKiAgICAgbEV4cGlyZUNvdW50ZXJzWyBsQXJyYXlJbmRleCBdICs9IDE7DQorICoNCisgKiAgICAgLy8gSWYgdGhlIHRpbWVyIGhhcyBleHBpcmVkIDEwIHRpbWVzIHRoZW4gc3RvcCBpdCBmcm9tIHJ1bm5pbmcuDQorICogICAgIGlmKCBsRXhwaXJlQ291bnRlcnNbIGxBcnJheUluZGV4IF0gPT0geE1heEV4cGlyeUNvdW50QmVmb3JlU3RvcHBpbmcgKQ0KKyAqICAgICB7DQorICogICAgICAgICAvLyBEbyBub3QgdXNlIGEgYmxvY2sgdGltZSBpZiBjYWxsaW5nIGEgdGltZXIgQVBJIGZ1bmN0aW9uIGZyb20gYQ0KKyAqICAgICAgICAgLy8gdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24sIGFzIGRvaW5nIHNvIGNvdWxkIGNhdXNlIGEgZGVhZGxvY2shDQorICogICAgICAgICB4VGltZXJTdG9wKCBweFRpbWVyLCAwICk7DQorICogICAgIH0NCisgKiB9DQorICoNCisgKiB2b2lkIG1haW4oIHZvaWQgKQ0KKyAqIHsNCisgKiBsb25nIHg7DQorICoNCisgKiAgICAgLy8gQ3JlYXRlIHRoZW4gc3RhcnQgc29tZSB0aW1lcnMuICBTdGFydGluZyB0aGUgdGltZXJzIGJlZm9yZSB0aGUgc2NoZWR1bGVyDQorICogICAgIC8vIGhhcyBiZWVuIHN0YXJ0ZWQgbWVhbnMgdGhlIHRpbWVycyB3aWxsIHN0YXJ0IHJ1bm5pbmcgaW1tZWRpYXRlbHkgdGhhdA0KKyAqICAgICAvLyB0aGUgc2NoZWR1bGVyIHN0YXJ0cy4NCisgKiAgICAgZm9yKCB4ID0gMDsgeCA8IE5VTV9USU1FUlM7IHgrKyApDQorICogICAgIHsNCisgKiAgICAgICAgIHhUaW1lcnNbIHggXSA9IHhUaW1lckNyZWF0ZSggICAgICJUaW1lciIsICAgICAgICAgLy8gSnVzdCBhIHRleHQgbmFtZSwgbm90IHVzZWQgYnkgdGhlIGtlcm5lbC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMDAgKiB4ICksICAgICAvLyBUaGUgdGltZXIgcGVyaW9kIGluIHRpY2tzLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZFRSVUUsICAgICAgICAgLy8gVGhlIHRpbWVycyB3aWxsIGF1dG8tcmVsb2FkIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IGV4cGlyZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2b2lkICogKSB4LCAgICAgLy8gQXNzaWduIGVhY2ggdGltZXIgYSB1bmlxdWUgaWQgZXF1YWwgdG8gaXRzIGFycmF5IGluZGV4Lg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGltZXJDYWxsYmFjayAgICAgLy8gRWFjaCB0aW1lciBjYWxscyB0aGUgc2FtZSBjYWxsYmFjayB3aGVuIGl0IGV4cGlyZXMuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisgKg0KKyAqICAgICAgICAgaWYoIHhUaW1lcnNbIHggXSA9PSBOVUxMICkNCisgKiAgICAgICAgIHsNCisgKiAgICAgICAgICAgICAvLyBUaGUgdGltZXIgd2FzIG5vdCBjcmVhdGVkLg0KKyAqICAgICAgICAgfQ0KKyAqICAgICAgICAgZWxzZQ0KKyAqICAgICAgICAgew0KKyAqICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSB0aW1lci4gIE5vIGJsb2NrIHRpbWUgaXMgc3BlY2lmaWVkLCBhbmQgZXZlbiBpZiBvbmUgd2FzDQorICogICAgICAgICAgICAgLy8gaXQgd291bGQgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBzY2hlZHVsZXIgaGFzIG5vdCB5ZXQgYmVlbg0KKyAqICAgICAgICAgICAgIC8vIHN0YXJ0ZWQuDQorICogICAgICAgICAgICAgaWYoIHhUaW1lclN0YXJ0KCB4VGltZXJzWyB4IF0sIDAgKSAhPSBwZFBBU1MgKQ0KKyAqICAgICAgICAgICAgIHsNCisgKiAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVyIGNvdWxkIG5vdCBiZSBzZXQgaW50byB0aGUgQWN0aXZlIHN0YXRlLg0KKyAqICAgICAgICAgICAgIH0NCisgKiAgICAgICAgIH0NCisgKiAgICAgfQ0KKyAqDQorICogICAgIC8vIC4uLg0KKyAqICAgICAvLyBDcmVhdGUgdGFza3MgaGVyZS4NCisgKiAgICAgLy8gLi4uDQorICoNCisgKiAgICAgLy8gU3RhcnRpbmcgdGhlIHNjaGVkdWxlciB3aWxsIHN0YXJ0IHRoZSB0aW1lcnMgcnVubmluZyBhcyB0aGV5IGhhdmUgYWxyZWFkeQ0KKyAqICAgICAvLyBiZWVuIHNldCBpbnRvIHRoZSBhY3RpdmUgc3RhdGUuDQorICogICAgIHhUYXNrU3RhcnRTY2hlZHVsZXIoKTsNCisgKg0KKyAqICAgICAvLyBTaG91bGQgbm90IHJlYWNoIGhlcmUuDQorICogICAgIGZvciggOzsgKTsNCisgKiB9DQorICovDQoreFRpbWVySGFuZGxlIHhUaW1lckNyZWF0ZSggY29uc3Qgc2lnbmVkIGNoYXIgKnBjVGltZXJOYW1lLCBwb3J0VGlja1R5cGUgeFRpbWVyUGVyaW9kSW5UaWNrcywgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEF1dG9SZWxvYWQsIHZvaWQgKiBwdlRpbWVySUQsIHRtclRJTUVSX0NBTExCQUNLIHB4Q2FsbGJhY2tGdW5jdGlvbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoqDQorICogdm9pZCAqcHZUaW1lckdldFRpbWVySUQoIHhUaW1lckhhbmRsZSB4VGltZXIgKTsNCisgKg0KKyAqIFJldHVybnMgdGhlIElEIGFzc2lnbmVkIHRvIHRoZSB0aW1lci4NCisgKg0KKyAqIElEcyBhcmUgYXNzaWduZWQgdG8gdGltZXJzIHVzaW5nIHRoZSBwdlRpbWVySUQgcGFyYW1ldGVyIG9mIHRoZSBjYWxsIHRvDQorICogeFRpbWVyQ3JlYXRlZCgpIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSB0aW1lci4NCisgKg0KKyAqIElmIHRoZSBzYW1lIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIG11bHRpcGxlIHRpbWVycyB0aGVuIHRoZSB0aW1lcg0KKyAqIElEIGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaWRlbnRpZnkgd2hpY2ggdGltZXIgYWN0dWFsbHkNCisgKiBleHBpcmVkLg0KKyAqDQorICogQHBhcmFtIHhUaW1lciBUaGUgdGltZXIgYmVpbmcgcXVlcmllZC4NCisgKg0KKyAqIEByZXR1cm4gVGhlIElEIGFzc2lnbmVkIHRvIHRoZSB0aW1lciBiZWluZyBxdWVyaWVkLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIFNlZSB0aGUgeFRpbWVyQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uIGV4YW1wbGUgdXNhZ2Ugc2NlbmFyaW8uDQorICovDQordm9pZCAqcHZUaW1lckdldFRpbWVySUQoIHhUaW1lckhhbmRsZSB4VGltZXIgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qKg0KKyAqIHBvcnRCQVNFX1RZUEUgeFRpbWVySXNUaW1lckFjdGl2ZSggeFRpbWVySGFuZGxlIHhUaW1lciApOw0KKyAqDQorICogUXVlcmllcyBhIHRpbWVyIHRvIHNlZSBpZiBpdCBpcyBhY3RpdmUgb3IgZG9ybWFudC4NCisgKg0KKyAqIEEgdGltZXIgd2lsbCBiZSBkb3JtYW50IGlmOg0KKyAqICAgICAxKSBJdCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBub3Qgc3RhcnRlZCwgb3INCisgKiAgICAgMikgSXQgaXMgYW4gZXhwaXJlZCBvbi1zaG90IHRpbWVyIHRoYXQgaGFzIG5vdCBiZWVuIHJlc3RhcnRlZC4NCisgKg0KKyAqIFRpbWVycyBhcmUgY3JlYXRlZCBpbiB0aGUgZG9ybWFudCBzdGF0ZS4gIFRoZSB4VGltZXJTdGFydCgpLCB4VGltZXJSZXNldCgpLA0KKyAqIHhUaW1lclN0YXJ0RnJvbUlTUigpLCB4VGltZXJSZXNldEZyb21JU1IoKSwgeFRpbWVyQ2hhbmdlUGVyaW9kKCkgYW5kDQorICogeFRpbWVyQ2hhbmdlUGVyaW9kRnJvbUlTUigpIEFQSSBmdW5jdGlvbnMgY2FuIGFsbCBiZSB1c2VkIHRvIHRyYW5zaXRpb24gYSB0aW1lciBpbnRvIHRoZQ0KKyAqIGFjdGl2ZSBzdGF0ZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIHRpbWVyIGJlaW5nIHF1ZXJpZWQuDQorICoNCisgKiBAcmV0dXJuIHBkRkFMU0Ugd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdGltZXIgaXMgZG9ybWFudC4gIEEgdmFsdWUgb3RoZXIgdGhhbg0KKyAqIHBkRkFMU0Ugd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdGltZXIgaXMgYWN0aXZlLg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB4VGltZXIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLg0KKyAqIHZvaWQgdkFGdW5jdGlvbiggeFRpbWVySGFuZGxlIHhUaW1lciApDQorICogew0KKyAqICAgICBpZiggeFRpbWVySXNUaW1lckFjdGl2ZSggeFRpbWVyICkgIT0gcGRGQUxTRSApIC8vIG9yIG1vcmUgc2ltcGx5IGFuZCBlcXVpdmFsZW50bHkgImlmKCB4VGltZXJJc1RpbWVyQWN0aXZlKCB4VGltZXIgKSApIg0KKyAqICAgICB7DQorICogICAgICAgICAvLyB4VGltZXIgaXMgYWN0aXZlLCBkbyBzb21ldGhpbmcuDQorICogICAgIH0NCisgKiAgICAgZWxzZQ0KKyAqICAgICB7DQorICogICAgICAgICAvLyB4VGltZXIgaXMgbm90IGFjdGl2ZSwgZG8gc29tZXRoaW5nIGVsc2UuDQorICogICAgIH0NCisgKiB9DQorICovDQorcG9ydEJBU0VfVFlQRSB4VGltZXJJc1RpbWVyQWN0aXZlKCB4VGltZXJIYW5kbGUgeFRpbWVyICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKioNCisgKiB4VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUoKSBpcyBvbmx5IGF2YWlsYWJsZSBpZiANCisgKiBJTkNMVURFX3hUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSBpcyBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLg0KKyAqDQorICogU2ltcGx5IHJldHVybnMgdGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzay4gIEl0IGl0IG5vdCB2YWxpZA0KKyAqIHRvIGNhbGwgeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlKCkgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZC4NCisgKi8NCit4VGFza0hhbmRsZSB4VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUoIHZvaWQgKTsNCisNCisvKioNCisgKiBwb3J0QkFTRV9UWVBFIHhUaW1lclN0YXJ0KCB4VGltZXJIYW5kbGUgeFRpbWVyLCBwb3J0VGlja1R5cGUgeEJsb2NrVGltZSApOw0KKyAqDQorICogVGltZXIgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSBhIHRpbWVyIHNlcnZpY2UvZGFlbW9uIHRhc2suICBNYW55IG9mIHRoZQ0KKyAqIHB1YmxpYyBGcmVlUlRPUyB0aW1lciBBUEkgZnVuY3Rpb25zIHNlbmQgY29tbWFuZHMgdG8gdGhlIHRpbWVyIHNlcnZpY2UgdGFzaw0KKyAqIHRob3VnaCBhIHF1ZXVlIGNhbGxlZCB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZS4gIFRoZSB0aW1lciBjb21tYW5kIHF1ZXVlIGlzDQorICogcHJpdmF0ZSB0byB0aGUga2VybmVsIGl0c2VsZiBhbmQgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gYXBwbGljYXRpb24NCisgKiBjb2RlLiAgVGhlIGxlbmd0aCBvZiB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSBpcyBzZXQgYnkgdGhlDQorICogY29uZmlnVElNRVJfUVVFVUVfTEVOR1RIIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQuDQorICoNCisgKiB4VGltZXJTdGFydCgpIHN0YXJ0cyBhIHRpbWVyIHRoYXQgd2FzIHByZXZpb3VzbHkgY3JlYXRlZCB1c2luZyB0aGUNCisgKiB4VGltZXJDcmVhdGUoKSBBUEkgZnVuY3Rpb24uICBJZiB0aGUgdGltZXIgaGFkIGFscmVhZHkgYmVlbiBzdGFydGVkIGFuZCB3YXMNCisgKiBhbHJlYWR5IGluIHRoZSBhY3RpdmUgc3RhdGUsIHRoZW4geFRpbWVyU3RhcnQoKSBoYXMgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5DQorICogdG8gdGhlIHhUaW1lclJlc2V0KCkgQVBJIGZ1bmN0aW9uLg0KKyAqDQorICogU3RhcnRpbmcgYSB0aW1lciBlbnN1cmVzIHRoZSB0aW1lciBpcyBpbiB0aGUgYWN0aXZlIHN0YXRlLiAgSWYgdGhlIHRpbWVyDQorICogaXMgbm90IHN0b3BwZWQsIGRlbGV0ZWQsIG9yIHJlc2V0IGluIHRoZSBtZWFuIHRpbWUsIHRoZSBjYWxsYmFjayBmdW5jdGlvbg0KKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGltZXIgd2lsbCBnZXQgY2FsbGVkICduJyB0aWNrcyBhZnRlciB4VGltZXJTdGFydCgpIHdhcw0KKyAqIGNhbGxlZCwgd2hlcmUgJ24nIGlzIHRoZSB0aW1lcnMgZGVmaW5lZCBwZXJpb2QuDQorICoNCisgKiBJdCBpcyB2YWxpZCB0byBjYWxsIHhUaW1lclN0YXJ0KCkgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCwgYnV0DQorICogd2hlbiB0aGlzIGlzIGRvbmUgdGhlIHRpbWVyIHdpbGwgbm90IGFjdHVhbGx5IHN0YXJ0IHVudGlsIHRoZSBzY2hlZHVsZXIgaXMNCisgKiBzdGFydGVkLCBhbmQgdGhlIHRpbWVycyBleHBpcnkgdGltZSB3aWxsIGJlIHJlbGF0aXZlIHRvIHdoZW4gdGhlIHNjaGVkdWxlciBpcw0KKyAqIHN0YXJ0ZWQsIG5vdCByZWxhdGl2ZSB0byB3aGVuIHhUaW1lclN0YXJ0KCkgd2FzIGNhbGxlZC4NCisgKg0KKyAqIFRoZSBjb25maWdVU0VfVElNRVJTIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQgbXVzdCBiZSBzZXQgdG8gMSBmb3IgeFRpbWVyU3RhcnQoKQ0KKyAqIHRvIGJlIGF2YWlsYWJsZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgYmVpbmcgc3RhcnRlZC9yZXN0YXJ0ZWQuDQorICoNCisgKiBAcGFyYW0geEJsb2NrVGltZSBTcGVjaWZpZXMgdGhlIHRpbWUsIGluIHRpY2tzLCB0aGF0IHRoZSBjYWxsaW5nIHRhc2sgc2hvdWxkDQorICogYmUgaGVsZCBpbiB0aGUgQmxvY2tlZCBzdGF0ZSB0byB3YWl0IGZvciB0aGUgc3RhcnQgY29tbWFuZCB0byBiZSBzdWNjZXNzZnVsbHkNCisgKiBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLCBzaG91bGQgdGhlIHF1ZXVlIGFscmVhZHkgYmUgZnVsbCB3aGVuDQorICogeFRpbWVyU3RhcnQoKSB3YXMgY2FsbGVkLiAgeEJsb2NrVGltZSBpcyBpZ25vcmVkIGlmIHhUaW1lclN0YXJ0KCkgaXMgY2FsbGVkDQorICogYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRGQUlMIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHN0YXJ0IGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8NCisgKiB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSBldmVuIGFmdGVyIHhCbG9ja1RpbWUgdGlja3MgaGFkIHBhc3NlZC4gIHBkUEFTUyB3aWxsDQorICogYmUgcmV0dXJuZWQgaWYgdGhlIGNvbW1hbmQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLg0KKyAqIFdoZW4gdGhlIGNvbW1hbmQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBwcmlvcml0eSBvZiB0aGUNCisgKiB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZSBzeXN0ZW0sIGFsdGhvdWdoIHRoZQ0KKyAqIHRpbWVycyBleHBpcnkgdGltZSBpcyByZWxhdGl2ZSB0byB3aGVuIHhUaW1lclN0YXJ0KCkgaXMgYWN0dWFsbHkgY2FsbGVkLiAgVGhlDQorICogdGltZXIgc2VydmljZS9kYWVtb24gdGFzayBwcmlvcml0eSBpcyBzZXQgYnkgdGhlIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkNCisgKiBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIFNlZSB0aGUgeFRpbWVyQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uIGV4YW1wbGUgdXNhZ2Ugc2NlbmFyaW8uDQorICoNCisgKi8NCisjZGVmaW5lIHhUaW1lclN0YXJ0KCB4VGltZXIsIHhCbG9ja1RpbWUgKSB4VGltZXJHZW5lcmljQ29tbWFuZCggKCB4VGltZXIgKSwgdG1yQ09NTUFORF9TVEFSVCwgKCB4VGFza0dldFRpY2tDb3VudCgpICksIE5VTEwsICggeEJsb2NrVGltZSApICkNCisNCisvKioNCisgKiBwb3J0QkFTRV9UWVBFIHhUaW1lclN0b3AoIHhUaW1lckhhbmRsZSB4VGltZXIsIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICk7DQorICoNCisgKiBUaW1lciBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGEgdGltZXIgc2VydmljZS9kYWVtb24gdGFzay4gIE1hbnkgb2YgdGhlDQorICogcHVibGljIEZyZWVSVE9TIHRpbWVyIEFQSSBmdW5jdGlvbnMgc2VuZCBjb21tYW5kcyB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrDQorICogdGhvdWdoIGEgcXVldWUgY2FsbGVkIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgVGhlIHRpbWVyIGNvbW1hbmQgcXVldWUgaXMNCisgKiBwcml2YXRlIHRvIHRoZSBrZXJuZWwgaXRzZWxmIGFuZCBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBhcHBsaWNhdGlvbg0KKyAqIGNvZGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlIGlzIHNldCBieSB0aGUNCisgKiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggY29uZmlndXJhdGlvbiBjb25zdGFudC4NCisgKg0KKyAqIHhUaW1lclN0b3AoKSBzdG9wcyBhIHRpbWVyIHRoYXQgd2FzIHByZXZpb3VzbHkgc3RhcnRlZCB1c2luZyBlaXRoZXIgb2YgdGhlDQorICogVGhlIHhUaW1lclN0YXJ0KCksIHhUaW1lclJlc2V0KCksIHhUaW1lclN0YXJ0RnJvbUlTUigpLCB4VGltZXJSZXNldEZyb21JU1IoKSwNCisgKiB4VGltZXJDaGFuZ2VQZXJpb2QoKSBvciB4VGltZXJDaGFuZ2VQZXJpb2RGcm9tSVNSKCkgQVBJIGZ1bmN0aW9ucy4NCisgKg0KKyAqIFN0b3BwaW5nIGEgdGltZXIgZW5zdXJlcyB0aGUgdGltZXIgaXMgbm90IGluIHRoZSBhY3RpdmUgc3RhdGUuDQorICoNCisgKiBUaGUgY29uZmlnVVNFX1RJTUVSUyBjb25maWd1cmF0aW9uIGNvbnN0YW50IG11c3QgYmUgc2V0IHRvIDEgZm9yIHhUaW1lclN0b3AoKQ0KKyAqIHRvIGJlIGF2YWlsYWJsZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgYmVpbmcgc3RvcHBlZC4NCisgKg0KKyAqIEBwYXJhbSB4QmxvY2tUaW1lIFNwZWNpZmllcyB0aGUgdGltZSwgaW4gdGlja3MsIHRoYXQgdGhlIGNhbGxpbmcgdGFzayBzaG91bGQNCisgKiBiZSBoZWxkIGluIHRoZSBCbG9ja2VkIHN0YXRlIHRvIHdhaXQgZm9yIHRoZSBzdG9wIGNvbW1hbmQgdG8gYmUgc3VjY2Vzc2Z1bGx5DQorICogc2VudCB0byB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSwgc2hvdWxkIHRoZSBxdWV1ZSBhbHJlYWR5IGJlIGZ1bGwgd2hlbg0KKyAqIHhUaW1lclN0b3AoKSB3YXMgY2FsbGVkLiAgeEJsb2NrVGltZSBpcyBpZ25vcmVkIGlmIHhUaW1lclN0b3AoKSBpcyBjYWxsZWQNCisgKiBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLg0KKyAqDQorICogQHJldHVybiBwZEZBSUwgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgc3RvcCBjb21tYW5kIGNvdWxkIG5vdCBiZSBzZW50IHRvDQorICogdGhlIHRpbWVyIGNvbW1hbmQgcXVldWUgZXZlbiBhZnRlciB4QmxvY2tUaW1lIHRpY2tzIGhhZCBwYXNzZWQuICBwZFBBU1Mgd2lsbA0KKyAqIGJlIHJldHVybmVkIGlmIHRoZSBjb21tYW5kIHdhcyBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZS4NCisgKiBXaGVuIHRoZSBjb21tYW5kIGlzIGFjdHVhbGx5IHByb2Nlc3NlZCB3aWxsIGRlcGVuZCBvbiB0aGUgcHJpb3JpdHkgb2YgdGhlDQorICogdGltZXIgc2VydmljZS9kYWVtb24gdGFzayByZWxhdGl2ZSB0byBvdGhlciB0YXNrcyBpbiB0aGUgc3lzdGVtLiAgVGhlIHRpbWVyDQorICogc2VydmljZS9kYWVtb24gdGFzayBwcmlvcml0eSBpcyBzZXQgYnkgdGhlIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkNCisgKiBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIFNlZSB0aGUgeFRpbWVyQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uIGV4YW1wbGUgdXNhZ2Ugc2NlbmFyaW8uDQorICoNCisgKi8NCisjZGVmaW5lIHhUaW1lclN0b3AoIHhUaW1lciwgeEJsb2NrVGltZSApIHhUaW1lckdlbmVyaWNDb21tYW5kKCAoIHhUaW1lciApLCB0bXJDT01NQU5EX1NUT1AsIDBVLCBOVUxMLCAoIHhCbG9ja1RpbWUgKSApDQorDQorLyoqDQorICogcG9ydEJBU0VfVFlQRSB4VGltZXJDaGFuZ2VQZXJpb2QoIAl4VGltZXJIYW5kbGUgeFRpbWVyLA0KKyAqCQkJCQkJCQkJCXBvcnRUaWNrVHlwZSB4TmV3UGVyaW9kLA0KKyAqCQkJCQkJCQkJCXBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICk7DQorICoNCisgKiBUaW1lciBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGEgdGltZXIgc2VydmljZS9kYWVtb24gdGFzay4gIE1hbnkgb2YgdGhlDQorICogcHVibGljIEZyZWVSVE9TIHRpbWVyIEFQSSBmdW5jdGlvbnMgc2VuZCBjb21tYW5kcyB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrDQorICogdGhvdWdoIGEgcXVldWUgY2FsbGVkIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgVGhlIHRpbWVyIGNvbW1hbmQgcXVldWUgaXMNCisgKiBwcml2YXRlIHRvIHRoZSBrZXJuZWwgaXRzZWxmIGFuZCBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBhcHBsaWNhdGlvbg0KKyAqIGNvZGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlIGlzIHNldCBieSB0aGUNCisgKiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggY29uZmlndXJhdGlvbiBjb25zdGFudC4NCisgKg0KKyAqIHhUaW1lckNoYW5nZVBlcmlvZCgpIGNoYW5nZXMgdGhlIHBlcmlvZCBvZiBhIHRpbWVyIHRoYXQgd2FzIHByZXZpb3VzbHkNCisgKiBjcmVhdGVkIHVzaW5nIHRoZSB4VGltZXJDcmVhdGUoKSBBUEkgZnVuY3Rpb24uDQorICoNCisgKiB4VGltZXJDaGFuZ2VQZXJpb2QoKSBjYW4gYmUgY2FsbGVkIHRvIGNoYW5nZSB0aGUgcGVyaW9kIG9mIGFuIGFjdGl2ZSBvcg0KKyAqIGRvcm1hbnQgc3RhdGUgdGltZXIuDQorICoNCisgKiBUaGUgY29uZmlnVVNFX1RJTUVSUyBjb25maWd1cmF0aW9uIGNvbnN0YW50IG11c3QgYmUgc2V0IHRvIDEgZm9yDQorICogeFRpbWVyQ2hhbmdlUGVyaW9kKCkgdG8gYmUgYXZhaWxhYmxlLg0KKyAqDQorICogQHBhcmFtIHhUaW1lciBUaGUgaGFuZGxlIG9mIHRoZSB0aW1lciB0aGF0IGlzIGhhdmluZyBpdHMgcGVyaW9kIGNoYW5nZWQuDQorICoNCisgKiBAcGFyYW0geE5ld1BlcmlvZCBUaGUgbmV3IHBlcmlvZCBmb3IgeFRpbWVyLiBUaW1lciBwZXJpb2RzIGFyZSBzcGVjaWZpZWQgaW4NCisgKiB0aWNrIHBlcmlvZHMsIHNvIHRoZSBjb25zdGFudCBwb3J0VElDS19SQVRFX01TIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lDQorICogdGhhdCBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0aW1lciBtdXN0DQorICogZXhwaXJlIGFmdGVyIDEwMCB0aWNrcywgdGhlbiB4TmV3UGVyaW9kIHNob3VsZCBiZSBzZXQgdG8gMTAwLiAgQWx0ZXJuYXRpdmVseSwNCisgKiBpZiB0aGUgdGltZXIgbXVzdCBleHBpcmUgYWZ0ZXIgNTAwbXMsIHRoZW4geE5ld1BlcmlvZCBjYW4gYmUgc2V0IHRvDQorICogKCA1MDAgLyBwb3J0VElDS19SQVRFX01TICkgcHJvdmlkZWQgY29uZmlnVElDS19SQVRFX0haIGlzIGxlc3MgdGhhbg0KKyAqIG9yIGVxdWFsIHRvIDEwMDAuDQorICoNCisgKiBAcGFyYW0geEJsb2NrVGltZSBTcGVjaWZpZXMgdGhlIHRpbWUsIGluIHRpY2tzLCB0aGF0IHRoZSBjYWxsaW5nIHRhc2sgc2hvdWxkDQorICogYmUgaGVsZCBpbiB0aGUgQmxvY2tlZCBzdGF0ZSB0byB3YWl0IGZvciB0aGUgY2hhbmdlIHBlcmlvZCBjb21tYW5kIHRvIGJlDQorICogc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHRpbWVyIGNvbW1hbmQgcXVldWUsIHNob3VsZCB0aGUgcXVldWUgYWxyZWFkeSBiZQ0KKyAqIGZ1bGwgd2hlbiB4VGltZXJDaGFuZ2VQZXJpb2QoKSB3YXMgY2FsbGVkLiAgeEJsb2NrVGltZSBpcyBpZ25vcmVkIGlmDQorICogeFRpbWVyQ2hhbmdlUGVyaW9kKCkgaXMgY2FsbGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuDQorICoNCisgKiBAcmV0dXJuIHBkRkFJTCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjaGFuZ2UgcGVyaW9kIGNvbW1hbmQgY291bGQgbm90IGJlDQorICogc2VudCB0byB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSBldmVuIGFmdGVyIHhCbG9ja1RpbWUgdGlja3MgaGFkIHBhc3NlZC4NCisgKiBwZFBBU1Mgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHRpbWVyDQorICogY29tbWFuZCBxdWV1ZS4gIFdoZW4gdGhlIGNvbW1hbmQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZQ0KKyAqIHByaW9yaXR5IG9mIHRoZSB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZQ0KKyAqIHN5c3RlbS4gIFRoZSB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHByaW9yaXR5IGlzIHNldCBieSB0aGUNCisgKiBjb25maWdUSU1FUl9UQVNLX1BSSU9SSVRZIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAqDQorICogLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHhUaW1lciBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuICBJZiB0aGUgdGltZXINCisgKiAvLyByZWZlcmVuY2VkIGJ5IHhUaW1lciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIGl0IGlzIGNhbGxlZCwgdGhlbiB0aGUgdGltZXINCisgKiAvLyBpcyBkZWxldGVkLiAgSWYgdGhlIHRpbWVyIHJlZmVyZW5jZWQgYnkgeFRpbWVyIGlzIG5vdCBhY3RpdmUgd2hlbiBpdCBpcw0KKyAqIC8vIGNhbGxlZCwgdGhlbiB0aGUgcGVyaW9kIG9mIHRoZSB0aW1lciBpcyBzZXQgdG8gNTAwbXMgYW5kIHRoZSB0aW1lciBpcw0KKyAqIC8vIHN0YXJ0ZWQuDQorICogdm9pZCB2QUZ1bmN0aW9uKCB4VGltZXJIYW5kbGUgeFRpbWVyICkNCisgKiB7DQorICogICAgIGlmKCB4VGltZXJJc1RpbWVyQWN0aXZlKCB4VGltZXIgKSAhPSBwZEZBTFNFICkgLy8gb3IgbW9yZSBzaW1wbHkgYW5kIGVxdWl2YWxlbnRseSAiaWYoIHhUaW1lcklzVGltZXJBY3RpdmUoIHhUaW1lciApICkiDQorICogICAgIHsNCisgKiAgICAgICAgIC8vIHhUaW1lciBpcyBhbHJlYWR5IGFjdGl2ZSAtIGRlbGV0ZSBpdC4NCisgKiAgICAgICAgIHhUaW1lckRlbGV0ZSggeFRpbWVyICk7DQorICogICAgIH0NCisgKiAgICAgZWxzZQ0KKyAqICAgICB7DQorICogICAgICAgICAvLyB4VGltZXIgaXMgbm90IGFjdGl2ZSwgY2hhbmdlIGl0cyBwZXJpb2QgdG8gNTAwbXMuICBUaGlzIHdpbGwgYWxzbw0KKyAqICAgICAgICAgLy8gY2F1c2UgdGhlIHRpbWVyIHRvIHN0YXJ0LiAgQmxvY2sgZm9yIGEgbWF4aW11bSBvZiAxMDAgdGlja3MgaWYgdGhlDQorICogICAgICAgICAvLyBjaGFuZ2UgcGVyaW9kIGNvbW1hbmQgY2Fubm90IGltbWVkaWF0ZWx5IGJlIHNlbnQgdG8gdGhlIHRpbWVyDQorICogICAgICAgICAvLyBjb21tYW5kIHF1ZXVlLg0KKyAqICAgICAgICAgaWYoIHhUaW1lckNoYW5nZVBlcmlvZCggeFRpbWVyLCA1MDAgLyBwb3J0VElDS19SQVRFX01TLCAxMDAgKSA9PSBwZFBBU1MgKQ0KKyAqICAgICAgICAgew0KKyAqICAgICAgICAgICAgIC8vIFRoZSBjb21tYW5kIHdhcyBzdWNjZXNzZnVsbHkgc2VudC4NCisgKiAgICAgICAgIH0NCisgKiAgICAgICAgIGVsc2UNCisgKiAgICAgICAgIHsNCisgKiAgICAgICAgICAgICAvLyBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCwgZXZlbiBhZnRlciB3YWl0aW5nIGZvciAxMDAgdGlja3MNCisgKiAgICAgICAgICAgICAvLyB0byBwYXNzLiAgVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaGVyZS4NCisgKiAgICAgICAgIH0NCisgKiAgICAgfQ0KKyAqIH0NCisgKi8NCisgI2RlZmluZSB4VGltZXJDaGFuZ2VQZXJpb2QoIHhUaW1lciwgeE5ld1BlcmlvZCwgeEJsb2NrVGltZSApIHhUaW1lckdlbmVyaWNDb21tYW5kKCAoIHhUaW1lciApLCB0bXJDT01NQU5EX0NIQU5HRV9QRVJJT0QsICggeE5ld1BlcmlvZCApLCBOVUxMLCAoIHhCbG9ja1RpbWUgKSApDQorDQorLyoqDQorICogcG9ydEJBU0VfVFlQRSB4VGltZXJEZWxldGUoIHhUaW1lckhhbmRsZSB4VGltZXIsIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICk7DQorICoNCisgKiBUaW1lciBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGEgdGltZXIgc2VydmljZS9kYWVtb24gdGFzay4gIE1hbnkgb2YgdGhlDQorICogcHVibGljIEZyZWVSVE9TIHRpbWVyIEFQSSBmdW5jdGlvbnMgc2VuZCBjb21tYW5kcyB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrDQorICogdGhvdWdoIGEgcXVldWUgY2FsbGVkIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgVGhlIHRpbWVyIGNvbW1hbmQgcXVldWUgaXMNCisgKiBwcml2YXRlIHRvIHRoZSBrZXJuZWwgaXRzZWxmIGFuZCBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBhcHBsaWNhdGlvbg0KKyAqIGNvZGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlIGlzIHNldCBieSB0aGUNCisgKiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggY29uZmlndXJhdGlvbiBjb25zdGFudC4NCisgKg0KKyAqIHhUaW1lckRlbGV0ZSgpIGRlbGV0ZXMgYSB0aW1lciB0aGF0IHdhcyBwcmV2aW91c2x5IGNyZWF0ZWQgdXNpbmcgdGhlDQorICogeFRpbWVyQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uLg0KKyAqDQorICogVGhlIGNvbmZpZ1VTRV9USU1FUlMgY29uZmlndXJhdGlvbiBjb25zdGFudCBtdXN0IGJlIHNldCB0byAxIGZvcg0KKyAqIHhUaW1lckRlbGV0ZSgpIHRvIGJlIGF2YWlsYWJsZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgYmVpbmcgZGVsZXRlZC4NCisgKg0KKyAqIEBwYXJhbSB4QmxvY2tUaW1lIFNwZWNpZmllcyB0aGUgdGltZSwgaW4gdGlja3MsIHRoYXQgdGhlIGNhbGxpbmcgdGFzayBzaG91bGQNCisgKiBiZSBoZWxkIGluIHRoZSBCbG9ja2VkIHN0YXRlIHRvIHdhaXQgZm9yIHRoZSBkZWxldGUgY29tbWFuZCB0byBiZQ0KKyAqIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLCBzaG91bGQgdGhlIHF1ZXVlIGFscmVhZHkgYmUNCisgKiBmdWxsIHdoZW4geFRpbWVyRGVsZXRlKCkgd2FzIGNhbGxlZC4gIHhCbG9ja1RpbWUgaXMgaWdub3JlZCBpZiB4VGltZXJEZWxldGUoKQ0KKyAqIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLg0KKyAqDQorICogQHJldHVybiBwZEZBSUwgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgZGVsZXRlIGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8NCisgKiB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSBldmVuIGFmdGVyIHhCbG9ja1RpbWUgdGlja3MgaGFkIHBhc3NlZC4gIHBkUEFTUyB3aWxsDQorICogYmUgcmV0dXJuZWQgaWYgdGhlIGNvbW1hbmQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLg0KKyAqIFdoZW4gdGhlIGNvbW1hbmQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBwcmlvcml0eSBvZiB0aGUNCisgKiB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZSBzeXN0ZW0uICBUaGUgdGltZXINCisgKiBzZXJ2aWNlL2RhZW1vbiB0YXNrIHByaW9yaXR5IGlzIHNldCBieSB0aGUgY29uZmlnVElNRVJfVEFTS19QUklPUklUWQ0KKyAqIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQuDQorICoNCisgKiBFeGFtcGxlIHVzYWdlOg0KKyAqDQorICogU2VlIHRoZSB4VGltZXJDaGFuZ2VQZXJpb2QoKSBBUEkgZnVuY3Rpb24gZXhhbXBsZSB1c2FnZSBzY2VuYXJpby4NCisgKi8NCisjZGVmaW5lIHhUaW1lckRlbGV0ZSggeFRpbWVyLCB4QmxvY2tUaW1lICkgeFRpbWVyR2VuZXJpY0NvbW1hbmQoICggeFRpbWVyICksIHRtckNPTU1BTkRfREVMRVRFLCAwVSwgTlVMTCwgKCB4QmxvY2tUaW1lICkgKQ0KKw0KKy8qKg0KKyAqIHBvcnRCQVNFX1RZUEUgeFRpbWVyUmVzZXQoIHhUaW1lckhhbmRsZSB4VGltZXIsIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICk7DQorICoNCisgKiBUaW1lciBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGEgdGltZXIgc2VydmljZS9kYWVtb24gdGFzay4gIE1hbnkgb2YgdGhlDQorICogcHVibGljIEZyZWVSVE9TIHRpbWVyIEFQSSBmdW5jdGlvbnMgc2VuZCBjb21tYW5kcyB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrDQorICogdGhvdWdoIGEgcXVldWUgY2FsbGVkIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgVGhlIHRpbWVyIGNvbW1hbmQgcXVldWUgaXMNCisgKiBwcml2YXRlIHRvIHRoZSBrZXJuZWwgaXRzZWxmIGFuZCBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBhcHBsaWNhdGlvbg0KKyAqIGNvZGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlIGlzIHNldCBieSB0aGUNCisgKiBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEggY29uZmlndXJhdGlvbiBjb25zdGFudC4NCisgKg0KKyAqIHhUaW1lclJlc2V0KCkgcmUtc3RhcnRzIGEgdGltZXIgdGhhdCB3YXMgcHJldmlvdXNseSBjcmVhdGVkIHVzaW5nIHRoZQ0KKyAqIHhUaW1lckNyZWF0ZSgpIEFQSSBmdW5jdGlvbi4gIElmIHRoZSB0aW1lciBoYWQgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgYW5kIHdhcw0KKyAqIGFscmVhZHkgaW4gdGhlIGFjdGl2ZSBzdGF0ZSwgdGhlbiB4VGltZXJSZXNldCgpIHdpbGwgY2F1c2UgdGhlIHRpbWVyIHRvDQorICogcmUtZXZhbHVhdGUgaXRzIGV4cGlyeSB0aW1lIHNvIHRoYXQgaXQgaXMgcmVsYXRpdmUgdG8gd2hlbiB4VGltZXJSZXNldCgpIHdhcw0KKyAqIGNhbGxlZC4gIElmIHRoZSB0aW1lciB3YXMgaW4gdGhlIGRvcm1hbnQgc3RhdGUgdGhlbiB4VGltZXJSZXNldCgpIGhhcw0KKyAqIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSB0byB0aGUgeFRpbWVyU3RhcnQoKSBBUEkgZnVuY3Rpb24uDQorICoNCisgKiBSZXNldHRpbmcgYSB0aW1lciBlbnN1cmVzIHRoZSB0aW1lciBpcyBpbiB0aGUgYWN0aXZlIHN0YXRlLiAgSWYgdGhlIHRpbWVyDQorICogaXMgbm90IHN0b3BwZWQsIGRlbGV0ZWQsIG9yIHJlc2V0IGluIHRoZSBtZWFuIHRpbWUsIHRoZSBjYWxsYmFjayBmdW5jdGlvbg0KKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGltZXIgd2lsbCBnZXQgY2FsbGVkICduJyB0aWNrcyBhZnRlciB4VGltZXJSZXNldCgpIHdhcw0KKyAqIGNhbGxlZCwgd2hlcmUgJ24nIGlzIHRoZSB0aW1lcnMgZGVmaW5lZCBwZXJpb2QuDQorICoNCisgKiBJdCBpcyB2YWxpZCB0byBjYWxsIHhUaW1lclJlc2V0KCkgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCwgYnV0DQorICogd2hlbiB0aGlzIGlzIGRvbmUgdGhlIHRpbWVyIHdpbGwgbm90IGFjdHVhbGx5IHN0YXJ0IHVudGlsIHRoZSBzY2hlZHVsZXIgaXMNCisgKiBzdGFydGVkLCBhbmQgdGhlIHRpbWVycyBleHBpcnkgdGltZSB3aWxsIGJlIHJlbGF0aXZlIHRvIHdoZW4gdGhlIHNjaGVkdWxlciBpcw0KKyAqIHN0YXJ0ZWQsIG5vdCByZWxhdGl2ZSB0byB3aGVuIHhUaW1lclJlc2V0KCkgd2FzIGNhbGxlZC4NCisgKg0KKyAqIFRoZSBjb25maWdVU0VfVElNRVJTIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQgbXVzdCBiZSBzZXQgdG8gMSBmb3IgeFRpbWVyUmVzZXQoKQ0KKyAqIHRvIGJlIGF2YWlsYWJsZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgYmVpbmcgcmVzZXQvc3RhcnRlZC9yZXN0YXJ0ZWQuDQorICoNCisgKiBAcGFyYW0geEJsb2NrVGltZSBTcGVjaWZpZXMgdGhlIHRpbWUsIGluIHRpY2tzLCB0aGF0IHRoZSBjYWxsaW5nIHRhc2sgc2hvdWxkDQorICogYmUgaGVsZCBpbiB0aGUgQmxvY2tlZCBzdGF0ZSB0byB3YWl0IGZvciB0aGUgcmVzZXQgY29tbWFuZCB0byBiZSBzdWNjZXNzZnVsbHkNCisgKiBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLCBzaG91bGQgdGhlIHF1ZXVlIGFscmVhZHkgYmUgZnVsbCB3aGVuDQorICogeFRpbWVyUmVzZXQoKSB3YXMgY2FsbGVkLiAgeEJsb2NrVGltZSBpcyBpZ25vcmVkIGlmIHhUaW1lclJlc2V0KCkgaXMgY2FsbGVkDQorICogYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4NCisgKg0KKyAqIEByZXR1cm4gcGRGQUlMIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlc2V0IGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8NCisgKiB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZSBldmVuIGFmdGVyIHhCbG9ja1RpbWUgdGlja3MgaGFkIHBhc3NlZC4gIHBkUEFTUyB3aWxsDQorICogYmUgcmV0dXJuZWQgaWYgdGhlIGNvbW1hbmQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLg0KKyAqIFdoZW4gdGhlIGNvbW1hbmQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBwcmlvcml0eSBvZiB0aGUNCisgKiB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZSBzeXN0ZW0sIGFsdGhvdWdoIHRoZQ0KKyAqIHRpbWVycyBleHBpcnkgdGltZSBpcyByZWxhdGl2ZSB0byB3aGVuIHhUaW1lclN0YXJ0KCkgaXMgYWN0dWFsbHkgY2FsbGVkLiAgVGhlDQorICogdGltZXIgc2VydmljZS9kYWVtb24gdGFzayBwcmlvcml0eSBpcyBzZXQgYnkgdGhlIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkNCisgKiBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIC8vIFdoZW4gYSBrZXkgaXMgcHJlc3NlZCwgYW4gTENEIGJhY2stbGlnaHQgaXMgc3dpdGNoZWQgb24uICBJZiA1IHNlY29uZHMgcGFzcw0KKyAqIC8vIHdpdGhvdXQgYSBrZXkgYmVpbmcgcHJlc3NlZCwgdGhlbiB0aGUgTENEIGJhY2stbGlnaHQgaXMgc3dpdGNoZWQgb2ZmLiAgSW4NCisgKiAvLyB0aGlzIGNhc2UsIHRoZSB0aW1lciBpcyBhIG9uZS1zaG90IHRpbWVyLg0KKyAqDQorICogeFRpbWVySGFuZGxlIHhCYWNrbGlnaHRUaW1lciA9IE5VTEw7DQorICoNCisgKiAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gYXNzaWduZWQgdG8gdGhlIG9uZS1zaG90IHRpbWVyLiAgSW4gdGhpcyBjYXNlIHRoZQ0KKyAqIC8vIHBhcmFtZXRlciBpcyBub3QgdXNlZC4NCisgKiB2b2lkIHZCYWNrbGlnaHRUaW1lckNhbGxiYWNrKCB4VGltZXJIYW5kbGUgcHhUaW1lciApDQorICogew0KKyAqICAgICAvLyBUaGUgdGltZXIgZXhwaXJlZCwgdGhlcmVmb3JlIDUgc2Vjb25kcyBtdXN0IGhhdmUgcGFzc2VkIHNpbmNlIGEga2V5DQorICogICAgIC8vIHdhcyBwcmVzc2VkLiAgU3dpdGNoIG9mZiB0aGUgTENEIGJhY2stbGlnaHQuDQorICogICAgIHZTZXRCYWNrbGlnaHRTdGF0ZSggQkFDS0xJR0hUX09GRiApOw0KKyAqIH0NCisgKg0KKyAqIC8vIFRoZSBrZXkgcHJlc3MgZXZlbnQgaGFuZGxlci4NCisgKiB2b2lkIHZLZXlQcmVzc0V2ZW50SGFuZGxlciggY2hhciBjS2V5ICkNCisgKiB7DQorICogICAgIC8vIEVuc3VyZSB0aGUgTENEIGJhY2stbGlnaHQgaXMgb24sIHRoZW4gcmVzZXQgdGhlIHRpbWVyIHRoYXQgaXMNCisgKiAgICAgLy8gcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgdGhlIGJhY2stbGlnaHQgb2ZmIGFmdGVyIDUgc2Vjb25kcyBvZg0KKyAqICAgICAvLyBrZXkgaW5hY3Rpdml0eS4gIFdhaXQgMTAgdGlja3MgZm9yIHRoZSBjb21tYW5kIHRvIGJlIHN1Y2Nlc3NmdWxseSBzZW50DQorICogICAgIC8vIGlmIGl0IGNhbm5vdCBiZSBzZW50IGltbWVkaWF0ZWx5Lg0KKyAqICAgICB2U2V0QmFja2xpZ2h0U3RhdGUoIEJBQ0tMSUdIVF9PTiApOw0KKyAqICAgICBpZiggeFRpbWVyUmVzZXQoIHhCYWNrbGlnaHRUaW1lciwgMTAwICkgIT0gcGRQQVNTICkNCisgKiAgICAgew0KKyAqICAgICAgICAgLy8gVGhlIHJlc2V0IGNvbW1hbmQgd2FzIG5vdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuICBUYWtlIGFwcHJvcHJpYXRlDQorICogICAgICAgICAvLyBhY3Rpb24gaGVyZS4NCisgKiAgICAgfQ0KKyAqDQorICogICAgIC8vIFBlcmZvcm0gdGhlIHJlc3Qgb2YgdGhlIGtleSBwcm9jZXNzaW5nIGhlcmUuDQorICogfQ0KKyAqDQorICogdm9pZCBtYWluKCB2b2lkICkNCisgKiB7DQorICogbG9uZyB4Ow0KKyAqDQorICogICAgIC8vIENyZWF0ZSB0aGVuIHN0YXJ0IHRoZSBvbmUtc2hvdCB0aW1lciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0dXJuaW5nDQorICogICAgIC8vIHRoZSBiYWNrLWxpZ2h0IG9mZiBpZiBubyBrZXlzIGFyZSBwcmVzc2VkIHdpdGhpbiBhIDUgc2Vjb25kIHBlcmlvZC4NCisgKiAgICAgeEJhY2tsaWdodFRpbWVyID0geFRpbWVyQ3JlYXRlKCAiQmFja2xpZ2h0VGltZXIiLCAgICAgICAgICAgLy8gSnVzdCBhIHRleHQgbmFtZSwgbm90IHVzZWQgYnkgdGhlIGtlcm5lbC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDUwMDAgLyBwb3J0VElDS19SQVRFX01TKSwgLy8gVGhlIHRpbWVyIHBlcmlvZCBpbiB0aWNrcy4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZEZBTFNFLCAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVyIGlzIGEgb25lLXNob3QgdGltZXIuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpZCBpcyBub3QgdXNlZCBieSB0aGUgY2FsbGJhY2sgc28gY2FuIHRha2UgYW55IHZhbHVlLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZCYWNrbGlnaHRUaW1lckNhbGxiYWNrICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBzd2l0Y2hlcyB0aGUgTENEIGJhY2stbGlnaHQgb2ZmLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAqDQorICogICAgIGlmKCB4QmFja2xpZ2h0VGltZXIgPT0gTlVMTCApDQorICogICAgIHsNCisgKiAgICAgICAgIC8vIFRoZSB0aW1lciB3YXMgbm90IGNyZWF0ZWQuDQorICogICAgIH0NCisgKiAgICAgZWxzZQ0KKyAqICAgICB7DQorICogICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIuICBObyBibG9jayB0aW1lIGlzIHNwZWNpZmllZCwgYW5kIGV2ZW4gaWYgb25lIHdhcw0KKyAqICAgICAgICAgLy8gaXQgd291bGQgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBzY2hlZHVsZXIgaGFzIG5vdCB5ZXQgYmVlbg0KKyAqICAgICAgICAgLy8gc3RhcnRlZC4NCisgKiAgICAgICAgIGlmKCB4VGltZXJTdGFydCggeEJhY2tsaWdodFRpbWVyLCAwICkgIT0gcGRQQVNTICkNCisgKiAgICAgICAgIHsNCisgKiAgICAgICAgICAgICAvLyBUaGUgdGltZXIgY291bGQgbm90IGJlIHNldCBpbnRvIHRoZSBBY3RpdmUgc3RhdGUuDQorICogICAgICAgICB9DQorICogICAgIH0NCisgKg0KKyAqICAgICAvLyAuLi4NCisgKiAgICAgLy8gQ3JlYXRlIHRhc2tzIGhlcmUuDQorICogICAgIC8vIC4uLg0KKyAqDQorICogICAgIC8vIFN0YXJ0aW5nIHRoZSBzY2hlZHVsZXIgd2lsbCBzdGFydCB0aGUgdGltZXIgcnVubmluZyBhcyBpdCBoYXMgYWxyZWFkeQ0KKyAqICAgICAvLyBiZWVuIHNldCBpbnRvIHRoZSBhY3RpdmUgc3RhdGUuDQorICogICAgIHhUYXNrU3RhcnRTY2hlZHVsZXIoKTsNCisgKg0KKyAqICAgICAvLyBTaG91bGQgbm90IHJlYWNoIGhlcmUuDQorICogICAgIGZvciggOzsgKTsNCisgKiB9DQorICovDQorI2RlZmluZSB4VGltZXJSZXNldCggeFRpbWVyLCB4QmxvY2tUaW1lICkgeFRpbWVyR2VuZXJpY0NvbW1hbmQoICggeFRpbWVyICksIHRtckNPTU1BTkRfU1RBUlQsICggeFRhc2tHZXRUaWNrQ291bnQoKSApLCBOVUxMLCAoIHhCbG9ja1RpbWUgKSApDQorDQorLyoqDQorICogcG9ydEJBU0VfVFlQRSB4VGltZXJTdGFydEZyb21JU1IoIAl4VGltZXJIYW5kbGUgeFRpbWVyLA0KKyAqCQkJCQkJCQkJCXBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKTsNCisgKg0KKyAqIEEgdmVyc2lvbiBvZiB4VGltZXJTdGFydCgpIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBzZXJ2aWNlDQorICogcm91dGluZS4NCisgKg0KKyAqIEBwYXJhbSB4VGltZXIgVGhlIGhhbmRsZSBvZiB0aGUgdGltZXIgYmVpbmcgc3RhcnRlZC9yZXN0YXJ0ZWQuDQorICoNCisgKiBAcGFyYW0gcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBUaGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzayBzcGVuZHMgbW9zdA0KKyAqIG9mIGl0cyB0aW1lIGluIHRoZSBCbG9ja2VkIHN0YXRlLCB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBhcnJpdmUgb24gdGhlIHRpbWVyDQorICogY29tbWFuZCBxdWV1ZS4gIENhbGxpbmcgeFRpbWVyU3RhcnRGcm9tSVNSKCkgd3JpdGVzIGEgbWVzc2FnZSB0byB0aGUgdGltZXINCisgKiBjb21tYW5kIHF1ZXVlLCBzbyBoYXMgdGhlIHBvdGVudGlhbCB0byB0cmFuc2l0aW9uIHRoZSB0aW1lciBzZXJ2aWNlL2RhZW1vbg0KKyAqIHRhc2sgb3V0IG9mIHRoZSBCbG9ja2VkIHN0YXRlLiAgSWYgY2FsbGluZyB4VGltZXJTdGFydEZyb21JU1IoKSBjYXVzZXMgdGhlDQorICogdGltZXIgc2VydmljZS9kYWVtb24gdGFzayB0byBsZWF2ZSB0aGUgQmxvY2tlZCBzdGF0ZSwgYW5kIHRoZSB0aW1lciBzZXJ2aWNlLw0KKyAqIGRhZW1vbiB0YXNrIGhhcyBhIHByaW9yaXR5IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZw0KKyAqIHRhc2sgKHRoZSB0YXNrIHRoYXQgd2FzIGludGVycnVwdGVkKSwgdGhlbiAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB3aWxsDQorICogZ2V0IHNldCB0byBwZFRSVUUgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHhUaW1lclN0YXJ0RnJvbUlTUigpIGZ1bmN0aW9uLiAgSWYNCisgKiB4VGltZXJTdGFydEZyb21JU1IoKSBzZXRzIHRoaXMgdmFsdWUgdG8gcGRUUlVFIHRoZW4gYSBjb250ZXh0IHN3aXRjaCBzaG91bGQNCisgKiBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgZXhpdHMuDQorICoNCisgKiBAcmV0dXJuIHBkRkFJTCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBzdGFydCBjb21tYW5kIGNvdWxkIG5vdCBiZSBzZW50IHRvDQorICogdGhlIHRpbWVyIGNvbW1hbmQgcXVldWUuICBwZFBBU1Mgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgY29tbWFuZCB3YXMNCisgKiBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZS4gIFdoZW4gdGhlIGNvbW1hbmQgaXMgYWN0dWFsbHkNCisgKiBwcm9jZXNzZWQgd2lsbCBkZXBlbmQgb24gdGhlIHByaW9yaXR5IG9mIHRoZSB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrDQorICogcmVsYXRpdmUgdG8gb3RoZXIgdGFza3MgaW4gdGhlIHN5c3RlbSwgYWx0aG91Z2ggdGhlIHRpbWVycyBleHBpcnkgdGltZSBpcw0KKyAqIHJlbGF0aXZlIHRvIHdoZW4geFRpbWVyU3RhcnRGcm9tSVNSKCkgaXMgYWN0dWFsbHkgY2FsbGVkLiAgVGhlIHRpbWVyIHNlcnZpY2UvZGFlbW9uDQorICogdGFzayBwcmlvcml0eSBpcyBzZXQgYnkgdGhlIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkgY29uZmlndXJhdGlvbiBjb25zdGFudC4NCisgKg0KKyAqIEV4YW1wbGUgdXNhZ2U6DQorICoNCisgKiAvLyBUaGlzIHNjZW5hcmlvIGFzc3VtZXMgeEJhY2tsaWdodFRpbWVyIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4gIFdoZW4gYQ0KKyAqIC8vIGtleSBpcyBwcmVzc2VkLCBhbiBMQ0QgYmFjay1saWdodCBpcyBzd2l0Y2hlZCBvbi4gIElmIDUgc2Vjb25kcyBwYXNzDQorICogLy8gd2l0aG91dCBhIGtleSBiZWluZyBwcmVzc2VkLCB0aGVuIHRoZSBMQ0QgYmFjay1saWdodCBpcyBzd2l0Y2hlZCBvZmYuICBJbg0KKyAqIC8vIHRoaXMgY2FzZSwgdGhlIHRpbWVyIGlzIGEgb25lLXNob3QgdGltZXIsIGFuZCB1bmxpa2UgdGhlIGV4YW1wbGUgZ2l2ZW4gZm9yDQorICogLy8gdGhlIHhUaW1lclJlc2V0KCkgZnVuY3Rpb24sIHRoZSBrZXkgcHJlc3MgZXZlbnQgaGFuZGxlciBpcyBhbiBpbnRlcnJ1cHQNCisgKiAvLyBzZXJ2aWNlIHJvdXRpbmUuDQorICoNCisgKiAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gYXNzaWduZWQgdG8gdGhlIG9uZS1zaG90IHRpbWVyLiAgSW4gdGhpcyBjYXNlIHRoZQ0KKyAqIC8vIHBhcmFtZXRlciBpcyBub3QgdXNlZC4NCisgKiB2b2lkIHZCYWNrbGlnaHRUaW1lckNhbGxiYWNrKCB4VGltZXJIYW5kbGUgcHhUaW1lciApDQorICogew0KKyAqICAgICAvLyBUaGUgdGltZXIgZXhwaXJlZCwgdGhlcmVmb3JlIDUgc2Vjb25kcyBtdXN0IGhhdmUgcGFzc2VkIHNpbmNlIGEga2V5DQorICogICAgIC8vIHdhcyBwcmVzc2VkLiAgU3dpdGNoIG9mZiB0aGUgTENEIGJhY2stbGlnaHQuDQorICogICAgIHZTZXRCYWNrbGlnaHRTdGF0ZSggQkFDS0xJR0hUX09GRiApOw0KKyAqIH0NCisgKg0KKyAqIC8vIFRoZSBrZXkgcHJlc3MgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4NCisgKiB2b2lkIHZLZXlQcmVzc0V2ZW50SW50ZXJydXB0SGFuZGxlciggdm9pZCApDQorICogew0KKyAqIHBvcnRCQVNFX1RZUEUgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRGQUxTRTsNCisgKg0KKyAqICAgICAvLyBFbnN1cmUgdGhlIExDRCBiYWNrLWxpZ2h0IGlzIG9uLCB0aGVuIHJlc3RhcnQgdGhlIHRpbWVyIHRoYXQgaXMNCisgKiAgICAgLy8gcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgdGhlIGJhY2stbGlnaHQgb2ZmIGFmdGVyIDUgc2Vjb25kcyBvZg0KKyAqICAgICAvLyBrZXkgaW5hY3Rpdml0eS4gIFRoaXMgaXMgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBzbyBjYW4gb25seQ0KKyAqICAgICAvLyBjYWxsIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiLg0KKyAqICAgICB2U2V0QmFja2xpZ2h0U3RhdGUoIEJBQ0tMSUdIVF9PTiApOw0KKyAqDQorICogICAgIC8vIHhUaW1lclN0YXJ0RnJvbUlTUigpIG9yIHhUaW1lclJlc2V0RnJvbUlTUigpIGNvdWxkIGJlIGNhbGxlZCBoZXJlDQorICogICAgIC8vIGFzIGJvdGggY2F1c2UgdGhlIHRpbWVyIHRvIHJlLWNhbGN1bGF0ZSBpdHMgZXhwaXJ5IHRpbWUuDQorICogICAgIC8vIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB3YXMgaW5pdGlhbGlzZWQgdG8gcGRGQUxTRSB3aGVuIGl0IHdhcw0KKyAqICAgICAvLyBkZWNsYXJlZCAoaW4gdGhpcyBmdW5jdGlvbikuDQorICogICAgIGlmKCB4VGltZXJTdGFydEZyb21JU1IoIHhCYWNrbGlnaHRUaW1lciwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICE9IHBkUEFTUyApDQorICogICAgIHsNCisgKiAgICAgICAgIC8vIFRoZSBzdGFydCBjb21tYW5kIHdhcyBub3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGFrZSBhcHByb3ByaWF0ZQ0KKyAqICAgICAgICAgLy8gYWN0aW9uIGhlcmUuDQorICogICAgIH0NCisgKg0KKyAqICAgICAvLyBQZXJmb3JtIHRoZSByZXN0IG9mIHRoZSBrZXkgcHJvY2Vzc2luZyBoZXJlLg0KKyAqDQorICogICAgIC8vIElmIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBlcXVhbHMgcGRUUlVFLCB0aGVuIGEgY29udGV4dCBzd2l0Y2gNCisgKiAgICAgLy8gc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFRoZSBzeW50YXggcmVxdWlyZWQgdG8gcGVyZm9ybSBhIGNvbnRleHQgc3dpdGNoDQorICogICAgIC8vIGZyb20gaW5zaWRlIGFuIElTUiB2YXJpZXMgZnJvbSBwb3J0IHRvIHBvcnQsIGFuZCBmcm9tIGNvbXBpbGVyIHRvDQorICogICAgIC8vIGNvbXBpbGVyLiAgSW5zcGVjdCB0aGUgZGVtb3MgZm9yIHRoZSBwb3J0IHlvdSBhcmUgdXNpbmcgdG8gZmluZCB0aGUNCisgKiAgICAgLy8gYWN0dWFsIHN5bnRheCByZXF1aXJlZC4NCisgKiAgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkNCisgKiAgICAgew0KKyAqICAgICAgICAgLy8gQ2FsbCB0aGUgaW50ZXJydXB0IHNhZmUgeWllbGQgZnVuY3Rpb24gaGVyZSAoYWN0dWFsIGZ1bmN0aW9uDQorICogICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSBGcmVlUlRPUyBwb3J0IGJlaW5nIHVzZWQuDQorICogICAgIH0NCisgKiB9DQorICovDQorI2RlZmluZSB4VGltZXJTdGFydEZyb21JU1IoIHhUaW1lciwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHhUaW1lckdlbmVyaWNDb21tYW5kKCAoIHhUaW1lciApLCB0bXJDT01NQU5EX1NUQVJULCAoIHhUYXNrR2V0VGlja0NvdW50RnJvbUlTUigpICksICggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApLCAwVSApDQorDQorLyoqDQorICogcG9ydEJBU0VfVFlQRSB4VGltZXJTdG9wRnJvbUlTUiggCXhUaW1lckhhbmRsZSB4VGltZXIsDQorICoJCQkJCQkJCQkJcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKyAqDQorICogQSB2ZXJzaW9uIG9mIHhUaW1lclN0b3AoKSB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZQ0KKyAqIHJvdXRpbmUuDQorICoNCisgKiBAcGFyYW0geFRpbWVyIFRoZSBoYW5kbGUgb2YgdGhlIHRpbWVyIGJlaW5nIHN0b3BwZWQuDQorICoNCisgKiBAcGFyYW0gcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBUaGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzayBzcGVuZHMgbW9zdA0KKyAqIG9mIGl0cyB0aW1lIGluIHRoZSBCbG9ja2VkIHN0YXRlLCB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBhcnJpdmUgb24gdGhlIHRpbWVyDQorICogY29tbWFuZCBxdWV1ZS4gIENhbGxpbmcgeFRpbWVyU3RvcEZyb21JU1IoKSB3cml0ZXMgYSBtZXNzYWdlIHRvIHRoZSB0aW1lcg0KKyAqIGNvbW1hbmQgcXVldWUsIHNvIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyYW5zaXRpb24gdGhlIHRpbWVyIHNlcnZpY2UvZGFlbW9uDQorICogdGFzayBvdXQgb2YgdGhlIEJsb2NrZWQgc3RhdGUuICBJZiBjYWxsaW5nIHhUaW1lclN0b3BGcm9tSVNSKCkgY2F1c2VzIHRoZQ0KKyAqIHRpbWVyIHNlcnZpY2UvZGFlbW9uIHRhc2sgdG8gbGVhdmUgdGhlIEJsb2NrZWQgc3RhdGUsIGFuZCB0aGUgdGltZXIgc2VydmljZS8NCisgKiBkYWVtb24gdGFzayBoYXMgYSBwcmlvcml0eSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcNCisgKiB0YXNrICh0aGUgdGFzayB0aGF0IHdhcyBpbnRlcnJ1cHRlZCksIHRoZW4gKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gd2lsbA0KKyAqIGdldCBzZXQgdG8gcGRUUlVFIGludGVybmFsbHkgd2l0aGluIHRoZSB4VGltZXJTdG9wRnJvbUlTUigpIGZ1bmN0aW9uLiAgSWYNCisgKiB4VGltZXJTdG9wRnJvbUlTUigpIHNldHMgdGhpcyB2YWx1ZSB0byBwZFRSVUUgdGhlbiBhIGNvbnRleHQgc3dpdGNoIHNob3VsZA0KKyAqIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGludGVycnVwdCBleGl0cy4NCisgKg0KKyAqIEByZXR1cm4gcGRGQUlMIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHN0b3AgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0bw0KKyAqIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgcGRQQVNTIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGNvbW1hbmQgd2FzDQorICogc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHRpbWVyIGNvbW1hbmQgcXVldWUuICBXaGVuIHRoZSBjb21tYW5kIGlzIGFjdHVhbGx5DQorICogcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBwcmlvcml0eSBvZiB0aGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzaw0KKyAqIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZSBzeXN0ZW0uICBUaGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzaw0KKyAqIHByaW9yaXR5IGlzIHNldCBieSB0aGUgY29uZmlnVElNRVJfVEFTS19QUklPUklUWSBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIC8vIFRoaXMgc2NlbmFyaW8gYXNzdW1lcyB4VGltZXIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBzdGFydGVkLiAgV2hlbg0KKyAqIC8vIGFuIGludGVycnVwdCBvY2N1cnMsIHRoZSB0aW1lciBzaG91bGQgYmUgc2ltcGx5IHN0b3BwZWQuDQorICoNCisgKiAvLyBUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0aGF0IHN0b3BzIHRoZSB0aW1lci4NCisgKiB2b2lkIHZBbkV4YW1wbGVJbnRlcnJ1cHRTZXJ2aWNlUm91dGluZSggdm9pZCApDQorICogew0KKyAqIHBvcnRCQVNFX1RZUEUgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRGQUxTRTsNCisgKg0KKyAqICAgICAvLyBUaGUgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAtIHNpbXBseSBzdG9wIHRoZSB0aW1lci4NCisgKiAgICAgLy8geEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHdhcyBzZXQgdG8gcGRGQUxTRSB3aGVyZSBpdCB3YXMgZGVmaW5lZA0KKyAqICAgICAvLyAod2l0aGluIHRoaXMgZnVuY3Rpb24pLiAgQXMgdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLCBvbmx5DQorICogICAgIC8vIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiIGNhbiBiZSB1c2VkLg0KKyAqICAgICBpZiggeFRpbWVyU3RvcEZyb21JU1IoIHhUaW1lciwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICE9IHBkUEFTUyApDQorICogICAgIHsNCisgKiAgICAgICAgIC8vIFRoZSBzdG9wIGNvbW1hbmQgd2FzIG5vdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuICBUYWtlIGFwcHJvcHJpYXRlDQorICogICAgICAgICAvLyBhY3Rpb24gaGVyZS4NCisgKiAgICAgfQ0KKyAqDQorICogICAgIC8vIElmIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBlcXVhbHMgcGRUUlVFLCB0aGVuIGEgY29udGV4dCBzd2l0Y2gNCisgKiAgICAgLy8gc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFRoZSBzeW50YXggcmVxdWlyZWQgdG8gcGVyZm9ybSBhIGNvbnRleHQgc3dpdGNoDQorICogICAgIC8vIGZyb20gaW5zaWRlIGFuIElTUiB2YXJpZXMgZnJvbSBwb3J0IHRvIHBvcnQsIGFuZCBmcm9tIGNvbXBpbGVyIHRvDQorICogICAgIC8vIGNvbXBpbGVyLiAgSW5zcGVjdCB0aGUgZGVtb3MgZm9yIHRoZSBwb3J0IHlvdSBhcmUgdXNpbmcgdG8gZmluZCB0aGUNCisgKiAgICAgLy8gYWN0dWFsIHN5bnRheCByZXF1aXJlZC4NCisgKiAgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkNCisgKiAgICAgew0KKyAqICAgICAgICAgLy8gQ2FsbCB0aGUgaW50ZXJydXB0IHNhZmUgeWllbGQgZnVuY3Rpb24gaGVyZSAoYWN0dWFsIGZ1bmN0aW9uDQorICogICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSBGcmVlUlRPUyBwb3J0IGJlaW5nIHVzZWQuDQorICogICAgIH0NCisgKiB9DQorICovDQorI2RlZmluZSB4VGltZXJTdG9wRnJvbUlTUiggeFRpbWVyLCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgeFRpbWVyR2VuZXJpY0NvbW1hbmQoICggeFRpbWVyICksIHRtckNPTU1BTkRfU1RPUCwgMCwgKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICksIDBVICkNCisNCisvKioNCisgKiBwb3J0QkFTRV9UWVBFIHhUaW1lckNoYW5nZVBlcmlvZEZyb21JU1IoIHhUaW1lckhhbmRsZSB4VGltZXIsDQorICoJCQkJCQkJCQkJCXBvcnRUaWNrVHlwZSB4TmV3UGVyaW9kLA0KKyAqCQkJCQkJCQkJCQlwb3J0QkFTRV9UWVBFICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICk7DQorICoNCisgKiBBIHZlcnNpb24gb2YgeFRpbWVyQ2hhbmdlUGVyaW9kKCkgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0DQorICogc2VydmljZSByb3V0aW5lLg0KKyAqDQorICogQHBhcmFtIHhUaW1lciBUaGUgaGFuZGxlIG9mIHRoZSB0aW1lciB0aGF0IGlzIGhhdmluZyBpdHMgcGVyaW9kIGNoYW5nZWQuDQorICoNCisgKiBAcGFyYW0geE5ld1BlcmlvZCBUaGUgbmV3IHBlcmlvZCBmb3IgeFRpbWVyLiBUaW1lciBwZXJpb2RzIGFyZSBzcGVjaWZpZWQgaW4NCisgKiB0aWNrIHBlcmlvZHMsIHNvIHRoZSBjb25zdGFudCBwb3J0VElDS19SQVRFX01TIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lDQorICogdGhhdCBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0aW1lciBtdXN0DQorICogZXhwaXJlIGFmdGVyIDEwMCB0aWNrcywgdGhlbiB4TmV3UGVyaW9kIHNob3VsZCBiZSBzZXQgdG8gMTAwLiAgQWx0ZXJuYXRpdmVseSwNCisgKiBpZiB0aGUgdGltZXIgbXVzdCBleHBpcmUgYWZ0ZXIgNTAwbXMsIHRoZW4geE5ld1BlcmlvZCBjYW4gYmUgc2V0IHRvDQorICogKCA1MDAgLyBwb3J0VElDS19SQVRFX01TICkgcHJvdmlkZWQgY29uZmlnVElDS19SQVRFX0haIGlzIGxlc3MgdGhhbg0KKyAqIG9yIGVxdWFsIHRvIDEwMDAuDQorICoNCisgKiBAcGFyYW0gcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBUaGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzayBzcGVuZHMgbW9zdA0KKyAqIG9mIGl0cyB0aW1lIGluIHRoZSBCbG9ja2VkIHN0YXRlLCB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBhcnJpdmUgb24gdGhlIHRpbWVyDQorICogY29tbWFuZCBxdWV1ZS4gIENhbGxpbmcgeFRpbWVyQ2hhbmdlUGVyaW9kRnJvbUlTUigpIHdyaXRlcyBhIG1lc3NhZ2UgdG8gdGhlDQorICogdGltZXIgY29tbWFuZCBxdWV1ZSwgc28gaGFzIHRoZSBwb3RlbnRpYWwgdG8gdHJhbnNpdGlvbiB0aGUgdGltZXIgc2VydmljZS8NCisgKiBkYWVtb24gdGFzayBvdXQgb2YgdGhlIEJsb2NrZWQgc3RhdGUuICBJZiBjYWxsaW5nIHhUaW1lckNoYW5nZVBlcmlvZEZyb21JU1IoKQ0KKyAqIGNhdXNlcyB0aGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzayB0byBsZWF2ZSB0aGUgQmxvY2tlZCBzdGF0ZSwgYW5kIHRoZQ0KKyAqIHRpbWVyIHNlcnZpY2UvZGFlbW9uIHRhc2sgaGFzIGEgcHJpb3JpdHkgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZQ0KKyAqIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayAodGhlIHRhc2sgdGhhdCB3YXMgaW50ZXJydXB0ZWQpLCB0aGVuDQorICogKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gd2lsbCBnZXQgc2V0IHRvIHBkVFJVRSBpbnRlcm5hbGx5IHdpdGhpbiB0aGUNCisgKiB4VGltZXJDaGFuZ2VQZXJpb2RGcm9tSVNSKCkgZnVuY3Rpb24uICBJZiB4VGltZXJDaGFuZ2VQZXJpb2RGcm9tSVNSKCkgc2V0cw0KKyAqIHRoaXMgdmFsdWUgdG8gcGRUUlVFIHRoZW4gYSBjb250ZXh0IHN3aXRjaCBzaG91bGQgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUNCisgKiBpbnRlcnJ1cHQgZXhpdHMuDQorICoNCisgKiBAcmV0dXJuIHBkRkFJTCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjb21tYW5kIHRvIGNoYW5nZSB0aGUgdGltZXJzIHBlcmlvZA0KKyAqIGNvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgcGRQQVNTIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlDQorICogY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHRpbWVyIGNvbW1hbmQgcXVldWUuICBXaGVuIHRoZSBjb21tYW5kDQorICogaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBwcmlvcml0eSBvZiB0aGUgdGltZXIgc2VydmljZS9kYWVtb24NCisgKiB0YXNrIHJlbGF0aXZlIHRvIG90aGVyIHRhc2tzIGluIHRoZSBzeXN0ZW0uICBUaGUgdGltZXIgc2VydmljZS9kYWVtb24gdGFzaw0KKyAqIHByaW9yaXR5IGlzIHNldCBieSB0aGUgY29uZmlnVElNRVJfVEFTS19QUklPUklUWSBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIC8vIFRoaXMgc2NlbmFyaW8gYXNzdW1lcyB4VGltZXIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBzdGFydGVkLiAgV2hlbg0KKyAqIC8vIGFuIGludGVycnVwdCBvY2N1cnMsIHRoZSBwZXJpb2Qgb2YgeFRpbWVyIHNob3VsZCBiZSBjaGFuZ2VkIHRvIDUwMG1zLg0KKyAqDQorICogLy8gVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdGhhdCBjaGFuZ2VzIHRoZSBwZXJpb2Qgb2YgeFRpbWVyLg0KKyAqIHZvaWQgdkFuRXhhbXBsZUludGVycnVwdFNlcnZpY2VSb3V0aW5lKCB2b2lkICkNCisgKiB7DQorICogcG9ydEJBU0VfVFlQRSB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZEZBTFNFOw0KKyAqDQorICogICAgIC8vIFRoZSBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIC0gY2hhbmdlIHRoZSBwZXJpb2Qgb2YgeFRpbWVyIHRvIDUwMG1zLg0KKyAqICAgICAvLyB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gd2FzIHNldCB0byBwZEZBTFNFIHdoZXJlIGl0IHdhcyBkZWZpbmVkDQorICogICAgIC8vICh3aXRoaW4gdGhpcyBmdW5jdGlvbikuICBBcyB0aGlzIGlzIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUsIG9ubHkNCisgKiAgICAgLy8gRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQuDQorICogICAgIGlmKCB4VGltZXJDaGFuZ2VQZXJpb2RGcm9tSVNSKCB4VGltZXIsICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSAhPSBwZFBBU1MgKQ0KKyAqICAgICB7DQorICogICAgICAgICAvLyBUaGUgY29tbWFuZCB0byBjaGFuZ2UgdGhlIHRpbWVycyBwZXJpb2Qgd2FzIG5vdCBleGVjdXRlZA0KKyAqICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LiAgVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaGVyZS4NCisgKiAgICAgfQ0KKyAqDQorICogICAgIC8vIElmIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBlcXVhbHMgcGRUUlVFLCB0aGVuIGEgY29udGV4dCBzd2l0Y2gNCisgKiAgICAgLy8gc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFRoZSBzeW50YXggcmVxdWlyZWQgdG8gcGVyZm9ybSBhIGNvbnRleHQgc3dpdGNoDQorICogICAgIC8vIGZyb20gaW5zaWRlIGFuIElTUiB2YXJpZXMgZnJvbSBwb3J0IHRvIHBvcnQsIGFuZCBmcm9tIGNvbXBpbGVyIHRvDQorICogICAgIC8vIGNvbXBpbGVyLiAgSW5zcGVjdCB0aGUgZGVtb3MgZm9yIHRoZSBwb3J0IHlvdSBhcmUgdXNpbmcgdG8gZmluZCB0aGUNCisgKiAgICAgLy8gYWN0dWFsIHN5bnRheCByZXF1aXJlZC4NCisgKiAgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkNCisgKiAgICAgew0KKyAqICAgICAgICAgLy8gQ2FsbCB0aGUgaW50ZXJydXB0IHNhZmUgeWllbGQgZnVuY3Rpb24gaGVyZSAoYWN0dWFsIGZ1bmN0aW9uDQorICogICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSBGcmVlUlRPUyBwb3J0IGJlaW5nIHVzZWQuDQorICogICAgIH0NCisgKiB9DQorICovDQorI2RlZmluZSB4VGltZXJDaGFuZ2VQZXJpb2RGcm9tSVNSKCB4VGltZXIsIHhOZXdQZXJpb2QsIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSB4VGltZXJHZW5lcmljQ29tbWFuZCggKCB4VGltZXIgKSwgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9ELCAoIHhOZXdQZXJpb2QgKSwgKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICksIDBVICkNCisNCisvKioNCisgKiBwb3J0QkFTRV9UWVBFIHhUaW1lclJlc2V0RnJvbUlTUiggCXhUaW1lckhhbmRsZSB4VGltZXIsDQorICoJCQkJCQkJCQkJcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKyAqDQorICogQSB2ZXJzaW9uIG9mIHhUaW1lclJlc2V0KCkgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHNlcnZpY2UNCisgKiByb3V0aW5lLg0KKyAqDQorICogQHBhcmFtIHhUaW1lciBUaGUgaGFuZGxlIG9mIHRoZSB0aW1lciB0aGF0IGlzIHRvIGJlIHN0YXJ0ZWQsIHJlc2V0LCBvcg0KKyAqIHJlc3RhcnRlZC4NCisgKg0KKyAqIEBwYXJhbSBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIFRoZSB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHNwZW5kcyBtb3N0DQorICogb2YgaXRzIHRpbWUgaW4gdGhlIEJsb2NrZWQgc3RhdGUsIHdhaXRpbmcgZm9yIG1lc3NhZ2VzIHRvIGFycml2ZSBvbiB0aGUgdGltZXINCisgKiBjb21tYW5kIHF1ZXVlLiAgQ2FsbGluZyB4VGltZXJSZXNldEZyb21JU1IoKSB3cml0ZXMgYSBtZXNzYWdlIHRvIHRoZSB0aW1lcg0KKyAqIGNvbW1hbmQgcXVldWUsIHNvIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyYW5zaXRpb24gdGhlIHRpbWVyIHNlcnZpY2UvZGFlbW9uDQorICogdGFzayBvdXQgb2YgdGhlIEJsb2NrZWQgc3RhdGUuICBJZiBjYWxsaW5nIHhUaW1lclJlc2V0RnJvbUlTUigpIGNhdXNlcyB0aGUNCisgKiB0aW1lciBzZXJ2aWNlL2RhZW1vbiB0YXNrIHRvIGxlYXZlIHRoZSBCbG9ja2VkIHN0YXRlLCBhbmQgdGhlIHRpbWVyIHNlcnZpY2UvDQorICogZGFlbW9uIHRhc2sgaGFzIGEgcHJpb3JpdHkgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nDQorICogdGFzayAodGhlIHRhc2sgdGhhdCB3YXMgaW50ZXJydXB0ZWQpLCB0aGVuICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuIHdpbGwNCisgKiBnZXQgc2V0IHRvIHBkVFJVRSBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgeFRpbWVyUmVzZXRGcm9tSVNSKCkgZnVuY3Rpb24uICBJZg0KKyAqIHhUaW1lclJlc2V0RnJvbUlTUigpIHNldHMgdGhpcyB2YWx1ZSB0byBwZFRSVUUgdGhlbiBhIGNvbnRleHQgc3dpdGNoIHNob3VsZA0KKyAqIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGludGVycnVwdCBleGl0cy4NCisgKg0KKyAqIEByZXR1cm4gcGRGQUlMIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlc2V0IGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8NCisgKiB0aGUgdGltZXIgY29tbWFuZCBxdWV1ZS4gIHBkUEFTUyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjb21tYW5kIHdhcw0KKyAqIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSB0aW1lciBjb21tYW5kIHF1ZXVlLiAgV2hlbiB0aGUgY29tbWFuZCBpcyBhY3R1YWxseQ0KKyAqIHByb2Nlc3NlZCB3aWxsIGRlcGVuZCBvbiB0aGUgcHJpb3JpdHkgb2YgdGhlIHRpbWVyIHNlcnZpY2UvZGFlbW9uIHRhc2sNCisgKiByZWxhdGl2ZSB0byBvdGhlciB0YXNrcyBpbiB0aGUgc3lzdGVtLCBhbHRob3VnaCB0aGUgdGltZXJzIGV4cGlyeSB0aW1lIGlzDQorICogcmVsYXRpdmUgdG8gd2hlbiB4VGltZXJSZXNldEZyb21JU1IoKSBpcyBhY3R1YWxseSBjYWxsZWQuICBUaGUgdGltZXIgc2VydmljZS9kYWVtb24NCisgKiB0YXNrIHByaW9yaXR5IGlzIHNldCBieSB0aGUgY29uZmlnVElNRVJfVEFTS19QUklPUklUWSBjb25maWd1cmF0aW9uIGNvbnN0YW50Lg0KKyAqDQorICogRXhhbXBsZSB1c2FnZToNCisgKg0KKyAqIC8vIFRoaXMgc2NlbmFyaW8gYXNzdW1lcyB4QmFja2xpZ2h0VGltZXIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiAgV2hlbiBhDQorICogLy8ga2V5IGlzIHByZXNzZWQsIGFuIExDRCBiYWNrLWxpZ2h0IGlzIHN3aXRjaGVkIG9uLiAgSWYgNSBzZWNvbmRzIHBhc3MNCisgKiAvLyB3aXRob3V0IGEga2V5IGJlaW5nIHByZXNzZWQsIHRoZW4gdGhlIExDRCBiYWNrLWxpZ2h0IGlzIHN3aXRjaGVkIG9mZi4gIEluDQorICogLy8gdGhpcyBjYXNlLCB0aGUgdGltZXIgaXMgYSBvbmUtc2hvdCB0aW1lciwgYW5kIHVubGlrZSB0aGUgZXhhbXBsZSBnaXZlbiBmb3INCisgKiAvLyB0aGUgeFRpbWVyUmVzZXQoKSBmdW5jdGlvbiwgdGhlIGtleSBwcmVzcyBldmVudCBoYW5kbGVyIGlzIGFuIGludGVycnVwdA0KKyAqIC8vIHNlcnZpY2Ugcm91dGluZS4NCisgKg0KKyAqIC8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhc3NpZ25lZCB0byB0aGUgb25lLXNob3QgdGltZXIuICBJbiB0aGlzIGNhc2UgdGhlDQorICogLy8gcGFyYW1ldGVyIGlzIG5vdCB1c2VkLg0KKyAqIHZvaWQgdkJhY2tsaWdodFRpbWVyQ2FsbGJhY2soIHhUaW1lckhhbmRsZSBweFRpbWVyICkNCisgKiB7DQorICogICAgIC8vIFRoZSB0aW1lciBleHBpcmVkLCB0aGVyZWZvcmUgNSBzZWNvbmRzIG11c3QgaGF2ZSBwYXNzZWQgc2luY2UgYSBrZXkNCisgKiAgICAgLy8gd2FzIHByZXNzZWQuICBTd2l0Y2ggb2ZmIHRoZSBMQ0QgYmFjay1saWdodC4NCisgKiAgICAgdlNldEJhY2tsaWdodFN0YXRlKCBCQUNLTElHSFRfT0ZGICk7DQorICogfQ0KKyAqDQorICogLy8gVGhlIGtleSBwcmVzcyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLg0KKyAqIHZvaWQgdktleVByZXNzRXZlbnRJbnRlcnJ1cHRIYW5kbGVyKCB2b2lkICkNCisgKiB7DQorICogcG9ydEJBU0VfVFlQRSB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZEZBTFNFOw0KKyAqDQorICogICAgIC8vIEVuc3VyZSB0aGUgTENEIGJhY2stbGlnaHQgaXMgb24sIHRoZW4gcmVzZXQgdGhlIHRpbWVyIHRoYXQgaXMNCisgKiAgICAgLy8gcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgdGhlIGJhY2stbGlnaHQgb2ZmIGFmdGVyIDUgc2Vjb25kcyBvZg0KKyAqICAgICAvLyBrZXkgaW5hY3Rpdml0eS4gIFRoaXMgaXMgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBzbyBjYW4gb25seQ0KKyAqICAgICAvLyBjYWxsIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiLg0KKyAqICAgICB2U2V0QmFja2xpZ2h0U3RhdGUoIEJBQ0tMSUdIVF9PTiApOw0KKyAqDQorICogICAgIC8vIHhUaW1lclN0YXJ0RnJvbUlTUigpIG9yIHhUaW1lclJlc2V0RnJvbUlTUigpIGNvdWxkIGJlIGNhbGxlZCBoZXJlDQorICogICAgIC8vIGFzIGJvdGggY2F1c2UgdGhlIHRpbWVyIHRvIHJlLWNhbGN1bGF0ZSBpdHMgZXhwaXJ5IHRpbWUuDQorICogICAgIC8vIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiB3YXMgaW5pdGlhbGlzZWQgdG8gcGRGQUxTRSB3aGVuIGl0IHdhcw0KKyAqICAgICAvLyBkZWNsYXJlZCAoaW4gdGhpcyBmdW5jdGlvbikuDQorICogICAgIGlmKCB4VGltZXJSZXNldEZyb21JU1IoIHhCYWNrbGlnaHRUaW1lciwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICE9IHBkUEFTUyApDQorICogICAgIHsNCisgKiAgICAgICAgIC8vIFRoZSByZXNldCBjb21tYW5kIHdhcyBub3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGFrZSBhcHByb3ByaWF0ZQ0KKyAqICAgICAgICAgLy8gYWN0aW9uIGhlcmUuDQorICogICAgIH0NCisgKg0KKyAqICAgICAvLyBQZXJmb3JtIHRoZSByZXN0IG9mIHRoZSBrZXkgcHJvY2Vzc2luZyBoZXJlLg0KKyAqDQorICogICAgIC8vIElmIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiBlcXVhbHMgcGRUUlVFLCB0aGVuIGEgY29udGV4dCBzd2l0Y2gNCisgKiAgICAgLy8gc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFRoZSBzeW50YXggcmVxdWlyZWQgdG8gcGVyZm9ybSBhIGNvbnRleHQgc3dpdGNoDQorICogICAgIC8vIGZyb20gaW5zaWRlIGFuIElTUiB2YXJpZXMgZnJvbSBwb3J0IHRvIHBvcnQsIGFuZCBmcm9tIGNvbXBpbGVyIHRvDQorICogICAgIC8vIGNvbXBpbGVyLiAgSW5zcGVjdCB0aGUgZGVtb3MgZm9yIHRoZSBwb3J0IHlvdSBhcmUgdXNpbmcgdG8gZmluZCB0aGUNCisgKiAgICAgLy8gYWN0dWFsIHN5bnRheCByZXF1aXJlZC4NCisgKiAgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkNCisgKiAgICAgew0KKyAqICAgICAgICAgLy8gQ2FsbCB0aGUgaW50ZXJydXB0IHNhZmUgeWllbGQgZnVuY3Rpb24gaGVyZSAoYWN0dWFsIGZ1bmN0aW9uDQorICogICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSBGcmVlUlRPUyBwb3J0IGJlaW5nIHVzZWQuDQorICogICAgIH0NCisgKiB9DQorICovDQorI2RlZmluZSB4VGltZXJSZXNldEZyb21JU1IoIHhUaW1lciwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHhUaW1lckdlbmVyaWNDb21tYW5kKCAoIHhUaW1lciApLCB0bXJDT01NQU5EX1NUQVJULCAoIHhUYXNrR2V0VGlja0NvdW50RnJvbUlTUigpICksICggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApLCAwVSApDQorDQorLyoNCisgKiBGdW5jdGlvbnMgYmV5b25kIHRoaXMgcGFydCBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIGFyZSBpbnRlbmRlZA0KKyAqIGZvciB1c2UgYnkgdGhlIGtlcm5lbCBvbmx5Lg0KKyAqLw0KK3BvcnRCQVNFX1RZUEUgeFRpbWVyQ3JlYXRlVGltZXJUYXNrKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCitwb3J0QkFTRV9UWVBFIHhUaW1lckdlbmVyaWNDb21tYW5kKCB4VGltZXJIYW5kbGUgeFRpbWVyLCBwb3J0QkFTRV9UWVBFIHhDb21tYW5kSUQsIHBvcnRUaWNrVHlwZSB4T3B0aW9uYWxWYWx1ZSwgc2lnbmVkIHBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8qIFRJTUVSU19IICovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL2luaXQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4ZjA1MwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9pbml0LmMKQEAgLTAsMCArMSwxNiBAQAorCisjaW5jbHVkZSAiRnJlZVJUT1MuaCIKKy8vIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwordm9pZCB4SW5pdFJUT1Modm9pZCk7Cit2b2lkIHhJbml0UXVldWVzKHZvaWQpOwordm9pZCB4SW5pdFRpbWVycyh2b2lkKTsKK3ZvaWQgeEluaXRUQ0JzKHZvaWQpOworCit2b2lkIHhJbml0UlRPUyh2b2lkKQoreworICAgIHhJbml0UXVldWVzKCk7CisjaWYgKCBjb25maWdVU0VfVElNRVJTID09IDEgKQorICAgIHhJbml0VGltZXJzKCk7CisjZW5kaWYKKyAgICB4SW5pdFRDQnMoKTsKK30KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9saXN0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTVkODYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvbGlzdC5jCkBAIC0wLDAgKzEsMjA0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAibGlzdC5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQVUJMSUMgTElTVCBBUEkgZG9jdW1lbnRlZCBpbiBsaXN0LmgNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdkxpc3RJbml0aWFsaXNlKCB4TGlzdCAqcHhMaXN0ICkNCit7DQorCS8qIFRoZSBsaXN0IHN0cnVjdHVyZSBjb250YWlucyBhIGxpc3QgaXRlbSB3aGljaCBpcyB1c2VkIHRvIG1hcmsgdGhlDQorCWVuZCBvZiB0aGUgbGlzdC4gIFRvIGluaXRpYWxpc2UgdGhlIGxpc3QgdGhlIGxpc3QgZW5kIGlzIGluc2VydGVkDQorCWFzIHRoZSBvbmx5IGxpc3QgZW50cnkuICovDQorCXB4TGlzdC0+cHhJbmRleCA9ICggeExpc3RJdGVtICogKSAmKCBweExpc3QtPnhMaXN0RW5kICk7DQorDQorCS8qIFRoZSBsaXN0IGVuZCB2YWx1ZSBpcyB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZSBpbiB0aGUgbGlzdCB0bw0KKwllbnN1cmUgaXQgcmVtYWlucyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAqLw0KKwlweExpc3QtPnhMaXN0RW5kLnhJdGVtVmFsdWUgPSBwb3J0TUFYX0RFTEFZOw0KKw0KKwkvKiBUaGUgbGlzdCBlbmQgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnRlcnMgcG9pbnQgdG8gaXRzZWxmIHNvIHdlIGtub3cNCisJd2hlbiB0aGUgbGlzdCBpcyBlbXB0eS4gKi8NCisJcHhMaXN0LT54TGlzdEVuZC5weE5leHQgPSAoIHhMaXN0SXRlbSAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOw0KKwlweExpc3QtPnhMaXN0RW5kLnB4UHJldmlvdXMgPSAoIHhMaXN0SXRlbSAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOw0KKw0KKwlweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyA9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZMaXN0SW5pdGlhbGlzZUl0ZW0oIHhMaXN0SXRlbSAqcHhJdGVtICkNCit7DQorCS8qIE1ha2Ugc3VyZSB0aGUgbGlzdCBpdGVtIGlzIG5vdCByZWNvcmRlZCBhcyBiZWluZyBvbiBhIGxpc3QuICovDQorCXB4SXRlbS0+cHZDb250YWluZXIgPSBOVUxMOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZMaXN0SW5zZXJ0RW5kKCB4TGlzdCAqcHhMaXN0LCB4TGlzdEl0ZW0gKnB4TmV3TGlzdEl0ZW0gKQ0KK3sNCit2b2xhdGlsZSB4TGlzdEl0ZW0gKiBweEluZGV4Ow0KKw0KKwkvKiBJbnNlcnQgYSBuZXcgbGlzdCBpdGVtIGludG8gcHhMaXN0LCBidXQgcmF0aGVyIHRoYW4gc29ydCB0aGUgbGlzdCwNCisJbWFrZXMgdGhlIG5ldyBsaXN0IGl0ZW0gdGhlIGxhc3QgaXRlbSB0byBiZSByZW1vdmVkIGJ5IGEgY2FsbCB0bw0KKwlwdkxpc3RHZXRPd25lck9mTmV4dEVudHJ5LiAgVGhpcyBtZWFucyBpdCBoYXMgdG8gYmUgdGhlIGl0ZW0gcG9pbnRlZCB0byBieQ0KKwl0aGUgcHhJbmRleCBtZW1iZXIuICovDQorCXB4SW5kZXggPSBweExpc3QtPnB4SW5kZXg7DQorDQorCXB4TmV3TGlzdEl0ZW0tPnB4TmV4dCA9IHB4SW5kZXgtPnB4TmV4dDsNCisJcHhOZXdMaXN0SXRlbS0+cHhQcmV2aW91cyA9IHB4TGlzdC0+cHhJbmRleDsNCisJcHhJbmRleC0+cHhOZXh0LT5weFByZXZpb3VzID0gKCB2b2xhdGlsZSB4TGlzdEl0ZW0gKiApIHB4TmV3TGlzdEl0ZW07DQorCXB4SW5kZXgtPnB4TmV4dCA9ICggdm9sYXRpbGUgeExpc3RJdGVtICogKSBweE5ld0xpc3RJdGVtOw0KKwlweExpc3QtPnB4SW5kZXggPSAoIHZvbGF0aWxlIHhMaXN0SXRlbSAqICkgcHhOZXdMaXN0SXRlbTsNCisNCisJLyogUmVtZW1iZXIgd2hpY2ggbGlzdCB0aGUgaXRlbSBpcyBpbi4gKi8NCisJcHhOZXdMaXN0SXRlbS0+cHZDb250YWluZXIgPSAoIHZvaWQgKiApIHB4TGlzdDsNCisNCisJKCBweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyApKys7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdkxpc3RJbnNlcnQoIHhMaXN0ICpweExpc3QsIHhMaXN0SXRlbSAqcHhOZXdMaXN0SXRlbSApDQorew0KK3ZvbGF0aWxlIHhMaXN0SXRlbSAqcHhJdGVyYXRvcjsNCitwb3J0VGlja1R5cGUgeFZhbHVlT2ZJbnNlcnRpb247DQorDQorCS8qIEluc2VydCB0aGUgbmV3IGxpc3QgaXRlbSBpbnRvIHRoZSBsaXN0LCBzb3J0ZWQgaW4gdWxMaXN0SXRlbSBvcmRlci4gKi8NCisJeFZhbHVlT2ZJbnNlcnRpb24gPSBweE5ld0xpc3RJdGVtLT54SXRlbVZhbHVlOw0KKw0KKwkvKiBJZiB0aGUgbGlzdCBhbHJlYWR5IGNvbnRhaW5zIGEgbGlzdCBpdGVtIHdpdGggdGhlIHNhbWUgaXRlbSB2YWx1ZSB0aGVuDQorCXRoZSBuZXcgbGlzdCBpdGVtIHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgaXQuICBUaGlzIGVuc3VyZXMgdGhhdCBUQ0IncyB3aGljaA0KKwlhcmUgc3RvcmVkIGluIHJlYWR5IGxpc3RzIChhbGwgb2Ygd2hpY2ggaGF2ZSB0aGUgc2FtZSB1bExpc3RJdGVtIHZhbHVlKQ0KKwlnZXQgYW4gZXF1YWwgc2hhcmUgb2YgdGhlIENQVS4gIEhvd2V2ZXIsIGlmIHRoZSB4SXRlbVZhbHVlIGlzIHRoZSBzYW1lIGFzDQorCXRoZSBiYWNrIG1hcmtlciB0aGUgaXRlcmF0aW9uIGxvb3AgYmVsb3cgd2lsbCBub3QgZW5kLiAgVGhpcyBtZWFucyB3ZSBuZWVkDQorCXRvIGd1YXJkIGFnYWluc3QgdGhpcyBieSBjaGVja2luZyB0aGUgdmFsdWUgZmlyc3QgYW5kIG1vZGlmeWluZyB0aGUNCisJYWxnb3JpdGhtIHNsaWdodGx5IGlmIG5lY2Vzc2FyeS4gKi8NCisJaWYoIHhWYWx1ZU9mSW5zZXJ0aW9uID09IHBvcnRNQVhfREVMQVkgKQ0KKwl7DQorCQlweEl0ZXJhdG9yID0gcHhMaXN0LT54TGlzdEVuZC5weFByZXZpb3VzOw0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogKioqIE5PVEUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisJCUlmIHlvdSBmaW5kIHlvdXIgYXBwbGljYXRpb24gaXMgY3Jhc2hpbmcgaGVyZSB0aGVuIGxpa2VseSBjYXVzZXMgYXJlOg0KKwkJCTEpIFN0YWNrIG92ZXJmbG93IC0NCisJCQkgICBzZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvU3RhY2tzLWFuZC1zdGFjay1vdmVyZmxvdy1jaGVja2luZy5odG1sDQorCQkJMikgSW5jb3JyZWN0IGludGVycnVwdCBwcmlvcml0eSBhc3NpZ25tZW50LCBlc3BlY2lhbGx5IG9uIENvcnRleC1NMw0KKwkJCSAgIHBhcnRzIHdoZXJlIG51bWVyaWNhbGx5IGhpZ2ggcHJpb3JpdHkgdmFsdWVzIGRlbm90ZSBsb3cgYWN0dWFsDQorCQkJICAgaW50ZXJydXB0IHByaW9yaWVzLCB3aGljaCBjYW4gc2VlbSBjb3VudGVyIGludHVpdGl2ZS4gIFNlZQ0KKwkJCSAgIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBvbiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTAuaHRtbA0KKwkJCTMpIENhbGxpbmcgYW4gQVBJIGZ1bmN0aW9uIGZyb20gd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiBvciB3aGVuDQorCQkJICAgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQuDQorCQkJNCkgVXNpbmcgYSBxdWV1ZSBvciBzZW1hcGhvcmUgYmVmb3JlIGl0IGhhcyBiZWVuIGluaXRpYWxpc2VkIG9yDQorCQkJICAgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCAoYXJlIGludGVycnVwdHMgZmlyaW5nDQorCQkJICAgYmVmb3JlIHZUYXNrU3RhcnRTY2hlZHVsZXIoKSBoYXMgYmVlbiBjYWxsZWQ/KS4NCisJCVNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9GQVFIZWxwLmh0bWwgZm9yIG1vcmUgdGlwcy4NCisJCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorCQkNCisJCWZvciggcHhJdGVyYXRvciA9ICggeExpc3RJdGVtICogKSAmKCBweExpc3QtPnhMaXN0RW5kICk7IHB4SXRlcmF0b3ItPnB4TmV4dC0+eEl0ZW1WYWx1ZSA8PSB4VmFsdWVPZkluc2VydGlvbjsgcHhJdGVyYXRvciA9IHB4SXRlcmF0b3ItPnB4TmV4dCApDQorCQl7DQorCQkJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLCB3ZSBhcmUganVzdCBpdGVyYXRpbmcgdG8gdGhlDQorCQkJd2FudGVkIGluc2VydGlvbiBwb3NpdGlvbi4gKi8NCisJCX0NCisJfQ0KKw0KKwlweE5ld0xpc3RJdGVtLT5weE5leHQgPSBweEl0ZXJhdG9yLT5weE5leHQ7DQorCXB4TmV3TGlzdEl0ZW0tPnB4TmV4dC0+cHhQcmV2aW91cyA9ICggdm9sYXRpbGUgeExpc3RJdGVtICogKSBweE5ld0xpc3RJdGVtOw0KKwlweE5ld0xpc3RJdGVtLT5weFByZXZpb3VzID0gcHhJdGVyYXRvcjsNCisJcHhJdGVyYXRvci0+cHhOZXh0ID0gKCB2b2xhdGlsZSB4TGlzdEl0ZW0gKiApIHB4TmV3TGlzdEl0ZW07DQorDQorCS8qIFJlbWVtYmVyIHdoaWNoIGxpc3QgdGhlIGl0ZW0gaXMgaW4uICBUaGlzIGFsbG93cyBmYXN0IHJlbW92YWwgb2YgdGhlDQorCWl0ZW0gbGF0ZXIuICovDQorCXB4TmV3TGlzdEl0ZW0tPnB2Q29udGFpbmVyID0gKCB2b2lkICogKSBweExpc3Q7DQorDQorCSggcHhMaXN0LT51eE51bWJlck9mSXRlbXMgKSsrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZMaXN0UmVtb3ZlKCB4TGlzdEl0ZW0gKnB4SXRlbVRvUmVtb3ZlICkNCit7DQoreExpc3QgKiBweExpc3Q7DQorDQorCXB4SXRlbVRvUmVtb3ZlLT5weE5leHQtPnB4UHJldmlvdXMgPSBweEl0ZW1Ub1JlbW92ZS0+cHhQcmV2aW91czsNCisJcHhJdGVtVG9SZW1vdmUtPnB4UHJldmlvdXMtPnB4TmV4dCA9IHB4SXRlbVRvUmVtb3ZlLT5weE5leHQ7DQorCQ0KKwkvKiBUaGUgbGlzdCBpdGVtIGtub3dzIHdoaWNoIGxpc3QgaXQgaXMgaW4uICBPYnRhaW4gdGhlIGxpc3QgZnJvbSB0aGUgbGlzdA0KKwlpdGVtLiAqLw0KKwlweExpc3QgPSAoIHhMaXN0ICogKSBweEl0ZW1Ub1JlbW92ZS0+cHZDb250YWluZXI7DQorDQorCS8qIE1ha2Ugc3VyZSB0aGUgaW5kZXggaXMgbGVmdCBwb2ludGluZyB0byBhIHZhbGlkIGl0ZW0uICovDQorCWlmKCBweExpc3QtPnB4SW5kZXggPT0gcHhJdGVtVG9SZW1vdmUgKQ0KKwl7DQorCQlweExpc3QtPnB4SW5kZXggPSBweEl0ZW1Ub1JlbW92ZS0+cHhQcmV2aW91czsNCisJfQ0KKw0KKwlweEl0ZW1Ub1JlbW92ZS0+cHZDb250YWluZXIgPSBOVUxMOw0KKwkoIHB4TGlzdC0+dXhOdW1iZXJPZkl0ZW1zICktLTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvRmxzaDE4Ni9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxZTRhMAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvRmxzaDE4Ni9wb3J0LmMKQEAgLTAsMCArMSwyODIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorQ2hhbmdlcyBmcm9tIFYxLjAwOg0KKw0KKwkrIENhbGwgdG8gdGFza1lJRUxEKCkgZnJvbSB3aXRoaW4gdGljayBJU1IgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG1vcmUNCisJICBlZmZpY2llbnQgcG9ydFNXSVRDSF9DT05URVhUKCkuDQorCSsgSVNSIGZ1bmN0aW9uIGRlZmluaXRpb25zIHJlbmFtZWQgdG8gaW5jbHVkZSB0aGUgcHJ2IHByZWZpeC4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCisJICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBGbGFzaGxpdGUgMTg2DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlIDxkb3MuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHNldGptcC5oPg0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorI2luY2x1ZGUgInBvcnRhc20uaCINCisNCisvKmxpbnQgLWU5NTAgTm9uIEFOU0kgcmVzZXJ2ZWQgd29yZHMgb2theSBpbiB0aGlzIGZpbGUgb25seS4gKi8NCisNCisjZGVmaW5lIHBvcnRUSU1FUl9FT0lfVFlQRQkJKCA4ICkNCisjZGVmaW5lIHBvcnRSRVNFVF9QSUMoKQkJCXBvcnRPVVRQVVRfV09SRCggKCB1bnNpZ25lZCBzaG9ydCApIDB4ZmYyMiwgcG9ydFRJTUVSX0VPSV9UWVBFICkNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSCTB4MTINCisNCisjZGVmaW5lIHBvcnRUSU1FUl8xX0NPTlRST0xfUkVHSVNURVIJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHhmZjVlICkNCisjZGVmaW5lIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHhmZjU2ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFCQkoICggdW5zaWduZWQgc2hvcnQgKSAweDIwMDAgKQ0KKw0KKy8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgdGljayBmcmVxdWVuY3kuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeSggdW5zaWduZWQgbG9uZyB1bFRpY2tSYXRlSHogKTsNCisNCisvKiBTZXQgdGhlIGhhcmR3YXJlIGJhY2sgdG8gdGhlIHN0YXRlIGFzIHBlciBiZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydGVkLiAqLw0KK3N0YXRpYyB2b2lkIHBydkV4aXRGdW5jdGlvbiggdm9pZCApOw0KKw0KKy8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyDQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisjZWxzZQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorI2VuZGlmDQorDQorLyogVHJhcCByb3V0aW5lIHVzZWQgYnkgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCitzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApOw0KKw0KKy8qbGludCAtZTk1NiBGaWxlIHNjb3BlcyBuZWNlc3NhcnkgaGVyZS4gKi8NCisNCisvKiBTZXQgdHJ1ZSB3aGVuIHRoZSB2ZWN0b3JzIGFyZSBzZXQgc28gdGhlIHNjaGVkdWxlciB3aWxsIHNlcnZpY2UgdGhlIHRpY2suICovDQorc3RhdGljIHBvcnRCQVNFX1RZUEUgeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKw0KKy8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgZm9yIG1hbnVhbA0KK2NvbnRleHQgc3dpdGNoZXMuICBUaGlzIGlzIHRoZW4gdXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCByb3V0aW5lIGR1cmluZw0KK3BydkV4aXRGdW5jdGlvbigpLiAqLw0KK3N0YXRpYyB2b2lkICggX19pbnRlcnJ1cHQgX19mYXIgKnB4T2xkU3dpdGNoSVNSICkoKTsNCisNCisvKiBVc2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIERPUyBjb250ZXh0IHdoZW4gdGhlIHNjaGVkdWxlciBpcyBlbmRlZC4gKi8NCitzdGF0aWMgam1wX2J1ZiB4SnVtcEJ1ZjsNCisNCisvKmxpbnQgK2U5NTYgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuICovDQorDQorCS8qIFJlbWVtYmVyIHdoYXQgd2FzIG9uIHRoZSBpbnRlcnJ1cHRzIHdlIGFyZSBnb2luZyB0byB1c2UNCisJc28gd2UgY2FuIHB1dCB0aGVtIGJhY2sgbGF0ZXIgaWYgcmVxdWlyZWQuICovDQorCXB4T2xkU3dpdGNoSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKTsNCisNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KKw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwl7DQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2VuZGlmDQorDQorCXBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQorDQorCQkvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCQlwb3J0RklSU1RfQ09OVEVYVCgpOw0KKwl9DQorDQorCXJldHVybiB4U2NoZWR1bGVyUnVubmluZzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJCXBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KKw0KKwkJLyogUmVzZXQgdGhlIFBJQyByZWFkeSBmb3IgdGhlIG5leHQgdGltZS4gKi8NCisJCXBvcnRSRVNFVF9QSUMoKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBvcnRSRVNFVF9QSUMoKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICkNCit7DQorCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJcG9ydFNXSVRDSF9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSnVtcCBiYWNrIHRvIHRoZSBwcm9jZXNzb3Igc3RhdGUgcHJpb3IgdG8gc3RhcnRpbmcgdGhlDQorCXNjaGVkdWxlci4gIFRoaXMgbWVhbnMgd2UgYXJlIG5vdCBnb2luZyB0byBiZSB1c2luZyBhDQorCXRhc2sgc3RhY2sgZnJhbWUgc28gdGhlIHRhc2sgY2FuIGJlIGRlbGV0ZWQuICovDQorCWxvbmdqbXAoIHhKdW1wQnVmLCAxICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydkV4aXRGdW5jdGlvbiggdm9pZCApDQorew0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzVGltZXJEaXNhYmxlID0gMHgwMDAwOw0KK3Vuc2lnbmVkIHNob3J0IHVzVGltZXIwQ29udHJvbDsNCisNCisJLyogSW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgaGVyZSBhbnl3YXkgLSBidXQgbm8NCisJaGFybSBpbiBtYWtpbmcgc3VyZS4gKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlpZiggeFNjaGVkdWxlclJ1bm5pbmcgPT0gcGRUUlVFICkNCisJew0KKwkJLyogUHV0IGJhY2sgdGhlIHN3aXRjaCBpbnRlcnJ1cHQgcm91dGluZXMgdGhhdCB3YXMgaW4gcGxhY2UNCisJCWJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0ZWQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHhPbGRTd2l0Y2hJU1IgKTsNCisJfQ0KKw0KKwkvKiBEaXNhYmxlIHRoZSB0aW1lciB1c2VkIGZvciB0aGUgdGljayB0byBlbnN1cmUgdGhlIHNjaGVkdWxlciBpcw0KKwlub3QgY2FsbGVkIGJlZm9yZSByZXN0b3JpbmcgaW50ZXJydXB0cy4gIFRoZXJlIHdhcyBwcmV2aW91c2x5IG5vdGhpbmcNCisJb24gdGhpcyB0aW1lciBzbyB0aGVyZSBpcyBubyBvbGQgSVNSIHRvIHJlc3RvcmUuICovDQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckRpc2FibGUgKTsNCisNCisJLyogUmVzdGFydCB0aGUgRE9TIHRpY2suICovDQorCXVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQorCXVzVGltZXIwQ29udHJvbCB8PSBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCisNCisNCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVuc2lnbmVkIGxvbmcgdWxUaWNrUmF0ZUh6ICkNCit7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNNYXhDb3VudFJlZ2lzdGVyID0gMHhmZjVhOw0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzVGltZXJQcmlvcml0eVJlZ2lzdGVyID0gMHhmZjMyOw0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzVGltZXJFbmFibGUgPSAweEMwMDA7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNSZXRyaWdnZXIgPSAweDAwMDE7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNUaW1lckhpZ2hQcmlvcml0eSA9IDB4MDAwMDsNCit1bnNpZ25lZCBzaG9ydCB1c1RpbWVyMENvbnRyb2w7DQorDQorLyogKCBDUFUgZnJlcXVlbmN5IC8gNCApIC8gY2xvY2sgMiBtYXggY291bnQgW2lucHcoIDB4ZmY2MiApID0gN10gKi8NCisNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsQ2xvY2tGcmVxdWVuY3kgPSAoIHVuc2lnbmVkIGxvbmcgKSAweDdmMzFhMFVMOw0KKw0KK3Vuc2lnbmVkIGxvbmcgdWxUaW1lckNvdW50ID0gdWxDbG9ja0ZyZXF1ZW5jeSAvIHVsVGlja1JhdGVIejsNCisNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMV9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyRW5hYmxlIHwgcG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEUgfCB1c1JldHJpZ2dlciApOw0KKwlwb3J0T1VUUFVUX1dPUkQoIHVzTWF4Q291bnRSZWdpc3RlciwgKCB1bnNpZ25lZCBzaG9ydCApIHVsVGltZXJDb3VudCApOw0KKwlwb3J0T1VUUFVUX1dPUkQoIHVzVGltZXJQcmlvcml0eVJlZ2lzdGVyLCB1c1RpbWVySGlnaFByaW9yaXR5ICk7DQorDQorCS8qIFN0b3AgdGhlIERPUyB0aWNrIC0gZG9uJ3QgZG8gdGhpcyBpZiB5b3Ugd2FudCB0byBtYWludGFpbiBhIFRPRCBjbG9jay4gKi8NCisJdXNUaW1lcjBDb250cm9sID0gcG9ydElOUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIgKTsNCisJdXNUaW1lcjBDb250cm9sICY9IH5wb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCit9DQorDQorDQorLypsaW50ICtlOTUwICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL0Zsc2gxODYvcHJ0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ5OTBiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BydG1hY3JvLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWxvbmcNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCWludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydFNIT1JUDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRTSE9SVA0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCV9fYXNteyBwdXNoZiB9ICBcDQorCQkJCQkJCQkJCV9fYXNteyBjbGkgCSB9CVwNCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCisNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJX19hc217IHN0aSB9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQkJX19hc217IG5vcCB9DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIAkJCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfSANCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgMg0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1cJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApCS8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0SU5QVVRfQllURSggeEFkZHIgKQkJCQlpbnAoIHhBZGRyICkNCisjZGVmaW5lIHBvcnRPVVRQVVRfQllURSggeEFkZHIsIHVjVmFsdWUgKQlvdXRwKCB4QWRkciwgdWNWYWx1ZSApDQorI2RlZmluZSBwb3J0SU5QVVRfV09SRCggeEFkZHIgKQkJCQlpbnB3KCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX1dPUkQoIHhBZGRyLCB1c1ZhbHVlICkJb3V0cHcoIHhBZGRyLCB1c1ZhbHVlICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjcwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BvcnQuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCisJICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KKw0KK0NoYW5nZXMgZnJvbSBWNC4wLjENCisJDQorCSsgQWRkIGZ1bmN0aW9uIHBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCkgdG8gc2V0IHRoZSBET1MgdGljayBiYWNrIHRvDQorCSAgaXRzIHByb3BlciB2YWx1ZSB3aGVuIHRoZSBzY2hlZHVsZXIgZXhpdHMuIA0KKyovDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxkb3MuaD4NCisjaW5jbHVkZSA8c2V0am1wLmg+DQorDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisjaW5jbHVkZSAicG9ydGFzbS5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgaW5kdXN0cmlhbA0KKyAqIFBDIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKmxpbnQgLWU5NTAgTm9uIEFOU0kgcmVzZXJ2ZWQgd29yZHMgb2theSBpbiB0aGlzIGZpbGUgb25seS4gKi8NCisNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSCTB4MDgNCisNCisvKiBTZXR1cCBoYXJkd2FyZSBmb3IgcmVxdWlyZWQgdGljayBpbnRlcnJ1cHQgcmF0ZS4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5KCB1bnNpZ25lZCBsb25nIHVsVGlja1JhdGVIeiApOw0KKw0KKy8qIFJlc3RvcmUgaGFyZHdhcmUgdG8gYXMgaXQgd2FzIHByaW9yIHRvIHN0YXJ0aW5nIHRoZSBzY2hlZHVsZXIuICovDQorc3RhdGljIHZvaWQgcHJ2RXhpdEZ1bmN0aW9uKCB2b2lkICk7DQorDQorLyogRWl0aGVyIGNoYWluIHRvIHRoZSBET1MgdGljayAod2hpY2ggaXRzZWxmIGNsZWFycyB0aGUgUElDKSBvciBjbGVhciB0aGUgUElDDQorZGlyZWN0bHkuICBXZSBjaGFpbiB0byB0aGUgRE9TIHRpY2sgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHN0YW5kYXJkIERPUw0KK3RpY2sgcmF0ZS4gKi8NCitzdGF0aWMgdm9pZCBwcnZQb3J0UmVzZXRQSUMoIHZvaWQgKTsNCisNCisvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQorc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorI2Vsc2UNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKyNlbmRpZg0KKw0KKy8qIFRyYXAgcm91dGluZSB1c2VkIGJ5IHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKTsNCisNCisvKiBTZXQgdGhlIHRpY2sgZnJlcXVlbmN5IGJhY2sgc28gdGhlIGZsb3BweSBkcml2ZSB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGUNCitzY2hlZHVsZXIgZXhpdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeURlZmF1bHQoIHZvaWQgKTsNCisNCisvKmxpbnQgLWU5NTYgRmlsZSBzY29wZXMgbmVjZXNzYXJ5IGhlcmUuICovDQorDQorLyogVXNlZCB0byBzaWduYWwgd2hlbiB0byBjaGFpbiB0byB0aGUgRE9TIHRpY2ssIGFuZCB3aGVuIHRvIGp1c3QgY2xlYXIgdGhlIFBJQyBvdXJzZWx2ZXMuICovDQorc3RhdGljIHNob3J0IHNET1NUaWNrQ291bnRlcjsNCisNCisvKiBTZXQgdHJ1ZSB3aGVuIHRoZSB2ZWN0b3JzIGFyZSBzZXQgc28gdGhlIHNjaGVkdWxlciB3aWxsIHNlcnZpY2UgdGhlIHRpY2suICovDQorc3RhdGljIHBvcnRCQVNFX1RZUEUgeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOwkJCQkNCisNCisvKiBQb2ludHMgdG8gdGhlIG9yaWdpbmFsIHJvdXRpbmUgaW5zdGFsbGVkIG9uIHRoZSB2ZWN0b3Igd2UgdXNlIGZvciBtYW51YWwgY29udGV4dCBzd2l0Y2hlcy4gIFRoaXMgaXMgdGhlbiB1c2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvdXRpbmUgZHVyaW5nIHBydkV4aXRGdW5jdGlvbigpLiAqLw0KK3N0YXRpYyB2b2lkICggX19pbnRlcnJ1cHQgX19mYXIgKnB4T2xkU3dpdGNoSVNSICkoKTsJCQ0KKw0KKy8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgdG8gY2hhaW4gdG8gdGhlIERPUyB0aWNrLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcgcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQorc3RhdGljIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhPbGRTd2l0Y2hJU1JQbHVzMSApKCk7CQ0KKw0KKy8qIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRE9TIGNvbnRleHQgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGVuZGVkLiAqLw0KK3N0YXRpYyBqbXBfYnVmIHhKdW1wQnVmOw0KKw0KKy8qbGludCArZTk1NiAqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK3B4SVNSIHB4T3JpZ2luYWxUaWNrSVNSOw0KKwkNCisJLyogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuICovDQorDQorCS8qIFJlbWVtYmVyIHdoYXQgd2FzIG9uIHRoZSBpbnRlcnJ1cHRzIHdlIGFyZSBnb2luZyB0byB1c2UNCisJc28gd2UgY2FuIHB1dCB0aGVtIGJhY2sgbGF0ZXIgaWYgcmVxdWlyZWQuICovDQorCXB4T2xkU3dpdGNoSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKTsNCisJcHhPcmlnaW5hbFRpY2tJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSICk7DQorCXB4T2xkU3dpdGNoSVNSUGx1czEgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgKTsNCisNCisJcHJ2U2V0VGlja0ZyZXF1ZW5jeSggY29uZmlnVElDS19SQVRFX0haICk7DQorDQorCS8qIFB1dCBvdXIgbWFudWFsIHN3aXRjaCAoeWllbGQpIGZ1bmN0aW9uIG9uIGEga25vd24NCisJdmVjdG9yLiAqLw0KKwlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCisNCisJLyogUHV0IHRoZSBvbGQgdGljayBvbiBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgbnVtYmVyIHNvIHdlIGNhbg0KKwljYWxsIGl0IHdoZW4gd2Ugd2FudC4gKi8NCisJX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxLCBweE9yaWdpbmFsVGlja0lTUiApOw0KKw0KKwkvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQorCXNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwl7DQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisgICAgI2VuZGlmDQorDQorCS8qIFNldHVwIGEgY291bnRlciB0aGF0IGlzIHVzZWQgdG8gY2FsbCB0aGUgRE9TIGludGVycnVwdCBhcyBjbG9zZQ0KKwl0byBpdCdzIG9yaWdpbmFsIGZyZXF1ZW5jeSBhcyBjYW4gYmUgYWNoaWV2ZWQgZ2l2ZW4gb3VyIGNob3NlbiB0aWNrDQorCWZyZXF1ZW5jeS4gKi8NCisJc0RPU1RpY2tDb3VudGVyID0gcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCisNCisJLyogQ2xlYW4gdXAgZnVuY3Rpb24gaWYgd2Ugd2FudCB0byByZXR1cm4gdG8gRE9TLiAqLw0KKwlpZiggc2V0am1wKCB4SnVtcEJ1ZiApICE9IDAgKQ0KKwl7DQorCQlwcnZFeGl0RnVuY3Rpb24oKTsNCisJCXhTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXhTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKw0KKwkJLyogS2ljayBvZmYgdGhlIHNjaGVkdWxlciBieSBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisJfQ0KKw0KKwlyZXR1cm4geFNjaGVkdWxlclJ1bm5pbmc7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCitzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisNCisJCS8qIFJlc2V0IHRoZSBQSUMgcmVhZHkgZm9yIHRoZSBuZXh0IHRpbWUuICovDQorCQlwcnZQb3J0UmVzZXRQSUMoKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBydlBvcnRSZXNldFBJQygpOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KK3sNCisJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2UG9ydFJlc2V0UElDKCB2b2lkICkNCit7DQorCS8qIFdlIGFyZSBnb2luZyB0byBjYWxsIHRoZSBET1MgdGljayBpbnRlcnJ1cHQgYXQgYXMgY2xvc2UgYQ0KKwlmcmVxdWVuY3kgdG8gdGhlIG5vcm1hbCBET1MgdGljayBhcyBwb3NzaWJsZS4gKi8NCisNCisJLyogV0UgU0hPVUxEIE5PVCBETyBUSElTIElGIFlJRUxEIFdBUyBDQUxMRUQuICovDQorCS0tc0RPU1RpY2tDb3VudGVyOw0KKwlpZiggc0RPU1RpY2tDb3VudGVyIDw9IDAgKQ0KKwl7DQorCQlzRE9TVGlja0NvdW50ZXIgPSAoIHNob3J0ICkgcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCisJCV9fYXNteyBpbnQJcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSB9OwkJIA0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogUmVzZXQgdGhlIFBJQyBhcyB0aGUgRE9TIHRpY2sgaXMgbm90IGJlaW5nIGNhbGxlZCB0bw0KKwkJZG8gaXQuICovDQorCQlfX2FzbQ0KKwkJew0KKwkJCW1vdglhbCwgMjBIDQorCQkJb3V0IDIwSCwgYWwNCisJCX07DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBKdW1wIGJhY2sgdG8gdGhlIHByb2Nlc3NvciBzdGF0ZSBwcmlvciB0byBzdGFydGluZyB0aGUNCisJc2NoZWR1bGVyLiAgVGhpcyBtZWFucyB3ZSBhcmUgbm90IGdvaW5nIHRvIGJlIHVzaW5nIGENCisJdGFzayBzdGFjayBmcmFtZSBzbyB0aGUgdGFzayBjYW4gYmUgZGVsZXRlZC4gKi8NCisJbG9uZ2ptcCggeEp1bXBCdWYsIDEgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2RXhpdEZ1bmN0aW9uKCB2b2lkICkNCit7DQordm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9yaWdpbmFsVGlja0lTUiApKCk7DQorDQorCS8qIEludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUgYW55d2F5IC0gYnV0IG5vIA0KKwloYXJtIGluIG1ha2luZyBzdXJlLiAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KKwl7DQorCQkvKiBTZXQgdGhlIERPUyB0aWNrIGJhY2sgb250byB0aGUgdGltZXIgdGlja2VyLiAqLw0KKwkJcHhPcmlnaW5hbFRpY2tJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgKTsNCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHB4T3JpZ2luYWxUaWNrSVNSICk7DQorCQlwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpOw0KKw0KKwkJLyogUHV0IGJhY2sgdGhlIHN3aXRjaCBpbnRlcnJ1cHQgcm91dGluZXMgdGhhdCB3YXMgaW4gcGxhY2UNCisJCWJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0ZWQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHhPbGRTd2l0Y2hJU1IgKTsNCisJCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPbGRTd2l0Y2hJU1JQbHVzMSApOw0KKwl9DQorCS8qIFRoZSB0aWNrIHRpbWVyIGlzIGJhY2sgaG93IERPUyB3YW50cyBpdC4gIFdlIGNhbiByZS1lbmFibGUNCisJaW50ZXJydXB0cyB3aXRob3V0IHRoZSBzY2hlZHVsZXIgYmVpbmcgY2FsbGVkLiAqLw0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeSggdW5zaWduZWQgbG9uZyB1bFRpY2tSYXRlSHogKQ0KK3sNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1c1BJVF9NT0RFID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDM7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNQSVQwID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDA7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFBJVF9DT05TVCA9ICggdW5zaWduZWQgbG9uZyApIDExOTMxODBVTDsNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1czgyNTRfQ1RSMF9NT0RFMyA9ICggdW5zaWduZWQgc2hvcnQgKSAweDM2Ow0KK3Vuc2lnbmVkIGxvbmcgdWxPdXRwdXQ7DQorDQorCS8qIFNldHVwIHRoZSA4MjQ1IHRvIHRpY2sgYXQgdGhlIHdhbnRlZCBmcmVxdWVuY3kuICovDQorCXBvcnRPVVRQVVRfQllURSggdXNQSVRfTU9ERSwgdXM4MjU0X0NUUjBfTU9ERTMgKTsNCisJdWxPdXRwdXQgPSB1bFBJVF9DT05TVCAvIHVsVGlja1JhdGVIejsNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsICggdW5zaWduZWQgc2hvcnQgKSggdWxPdXRwdXQgJiAoIHVuc2lnbmVkIGxvbmcgKSAweGZmICkgKTsNCisJdWxPdXRwdXQgPj49IDg7DQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLCAoIHVuc2lnbmVkIHNob3J0ICkgKCB1bE91dHB1dCAmICggdW5zaWduZWQgbG9uZyApIDB4ZmYgKSApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCggdm9pZCApDQorew0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzUElUX01PREUgPSAoIHVuc2lnbmVkIHNob3J0ICkgMHg0MzsNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1c1BJVDAgPSAoIHVuc2lnbmVkIHNob3J0ICkgMHg0MDsNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1czgyNTRfQ1RSMF9NT0RFMyA9ICggdW5zaWduZWQgc2hvcnQgKSAweDM2Ow0KKw0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUX01PREUsIHVzODI1NF9DVFIwX01PREUzICk7DQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLDAgKTsNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsMCApOw0KK30NCisNCisNCisvKmxpbnQgK2U5NTAgKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5ODBkMwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcHJ0bWFjcm8uaApAQCAtMCwwICsxLDEzMiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlsb25nDQorI2RlZmluZSBwb3J0RE9VQkxFCQlsb25nDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0U0hPUlQNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCV9fYXNteyBwdXNoZiB9ICBcDQorCQkJCQkJCQkJCV9fYXNteyBjbGkgCSB9CVwNCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCisNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJX19hc217IHN0aSB9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCV9fYXNteyBub3AgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJKCAtMSApDQorI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0gDQorI2RlZmluZSBwb3J0RE9TX1RJQ0tfUkFURQkJKCAxOC4yMDY0OCApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0sJKCAoIHVuc2lnbmVkIHBvcnRTSE9SVCApICggKCAoIHBvcnRET1VCTEUgKSBjb25maWdUSUNLX1JBVEVfSFogLyBwb3J0RE9TX1RJQ0tfUkFURSApICsgMC41ICkgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1cJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIgKQkvKiBTdGFydCB0aGUgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCSggMiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29tcGlsZXIgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkJCQkJaW5wKCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkJb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDJlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQkNDLzE2Qml0RE9TL2NvbW1vbi9wb3J0YXNtLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVF9BU01fSA0KKyNkZWZpbmUgUE9SVF9BU01fSA0KKw0KK3R5cGVkZWYgdm9pZCB0c2tUQ0I7DQorZXh0ZXJuIHZvbGF0aWxlIHRza1RDQiAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIFNhdmVzIHRoZSBzdGFjayBwb2ludGVyIGZvciBvbmUgdGFzayBpbnRvIGl0cyBUQ0IsIGNhbGxzDQorICogdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gdXBkYXRlIHRoZSBUQ0IgYmVpbmcgdXNlZCwgdGhlbiByZXN0b3JlcyB0aGUgc3RhY2sNCisgKiBmcm9tIHRoZSBuZXcgVENCIHJlYWQgdG8gcnVuIHRoZSB0YXNrLg0KKyAqLw0KK3ZvaWQgcG9ydFNXSVRDSF9DT05URVhUKCB2b2lkICk7DQorDQorLyoNCisgKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQiBvZiB0aGUgdGFzayB3aGljaCBpcyBnb2luZyB0byBiZSBmaXJzdA0KKyAqIHRvIGV4ZWN1dGUuICBUaGVuIGZvcmNlIGFuIElSRVQgc28gdGhlIHJlZ2lzdGVycyBhbmQgSVAgYXJlIHBvcHBlZCBvZmYgdGhlDQorICogc3RhY2suDQorICovDQordm9pZCBwb3J0RklSU1RfQ09OVEVYVCggdm9pZCApOw0KKw0KKy8qIFRoZXJlIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGFyZSBidWlsZGluZw0KK3RvIGluY2x1ZGUgZGVidWdnZXIgaW5mb3JtYXRpb24uICBJZiBkZWJ1Z2dlciBpbmZvcm1hdGlvbiBpcyB1c2VkIHRoZW4gdGhlcmUNCithcmUgYSBjb3VwbGUgb2YgZXh0cmEgYnl0ZXMgbGVmdCBvZiB0aGUgSVNSIHN0YWNrIChwcmVzdW1hYmx5IGZvciB1c2UgYnkgdGhlDQorZGVidWdnZXIpLiAgVGhlIHRydWUgc3RhY2sgcG9pbnRlciBpcyB0aGVuIHN0b3JlZCBpbiB0aGUgYnAgcmVnaXN0ZXIuICBXZSBhZGQNCisyIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIHJlbW92ZSB0aGUgZXh0cmEgYnl0ZXMgYmVmb3JlIHdlIHJlc3RvcmUgb3VyIGNvbnRleHQuICovDQorDQorI2RlZmluZSBwb3J0U1dJVENIX0NPTlRFWFQoKQkJCQkJCQkJCQkJXA0KKwkJCQkJCQlhc20geyBtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IJCX0JXA0KKwkJCQkJCQlhc20geyBtb3YJZHMsIGF4CQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IGxlcwlieCwgcHhDdXJyZW50VENCCQkJfQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8JCVwNCisJCQkJCQkJYXNtIHsgbW92CWVzOjB4MlsgYnggXSwgc3MJCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CWVzOlsgYnggXSwgc3AJCQkJfQlcDQorCQkJCQkJCWFzbSB7IGNhbGwgIGZhciBwdHIgdlRhc2tTd2l0Y2hDb250ZXh0CX0JLyogUGVyZm9ybSB0aGUgc3dpdGNoLiAqLwkJCQkJCVwNCisJCQkJCQkJYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9CS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLwlcDQorCQkJCQkJCWFzbSB7IG1vdglkcywgYXgJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgbGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCCX0JXA0KKwkJCQkJCQlhc20geyBtb3YJc3MsIGVzOlsgYnggKyAyIF0JCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBlczpbIGJ4IF0JCQkJfQ0KKw0KKyNkZWZpbmUgcG9ydEZJUlNUX0NPTlRFWFQoKQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJX19hc20geyBtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IG1vdglkcywgYXgJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBsZXMJYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IJfQlcDQorCQkJCQkJCV9fYXNtIHsgbW92CXNzLCBlczpbIGJ4ICsgMiBdCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgbW92CXNwLCBlczpbIGJ4IF0JCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCWJwCQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAlkaQkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJc2kJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCWRzCQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAllcwkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJZHgJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCWN4CQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAlieAkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJYXgJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgaXJldAkJCQkJCQl9DQorDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvY29tbW9uL3BvcnRjb21uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0MWE3NwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvY29tbW9uL3BvcnRjb21uLmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorQ2hhbmdlcyBmcm9tIFYxLjAwOg0KKw0KKwkrIHB4UG9ydEluaXRpYWxpc2VTdGFjaygpIG5vdyBpbml0aWFsaXNlcyB0aGUgc3RhY2sgb2YgbmV3IHRhc2tzIHRvIHRoZQ0KKwkgIHNhbWUgZm9ybWF0IHVzZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhpcyBhbGxvd3MgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZA0KKwkgIGludGVycnVwdCBtZWNoYW5pc20gdG8gYmUgdXNlZCBmb3IgY29udGV4dCBzd2l0Y2hlcy4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgTW92ZSB1c1BvcnRDaGVja0ZyZWVTdGFja1NwYWNlKCkgdG8gdGFza3MuYy4NCisqLw0KKw0KKw0KKyNpbmNsdWRlIDxkb3MuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFIERTX1JlZyA9IDA7DQorDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzMzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorDQorCS8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCisNCisJLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCisJaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCisJZnVuY3Rpb24gY2FsbCB3aXRoIHBhcmFtZXRlcnMgcHJlYW1ibGUuICovDQorCQ0KKwkqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBwdlBhcmFtZXRlcnMgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB2UGFyYW1ldGVycyApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIE5leHQgdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgaW50ZXJydXB0IHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1c7IA0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIHdvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgb3VyIGNvbnRleHQNCisJc3dpdGNoIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHZhbHVlcyBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcNCisJZWFzaWVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4QUFBQTsJLyogQVggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhCQkJCOwkvKiBCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweENDQ0M7CS8qIENYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RERERDsJLyogRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhFRUVFOwkvKiBFUyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQorCV9fYXNtewlNT1YgRFNfUmVnLCBEUyB9Ow0KKw0KKwkqcHhUb3BPZlN0YWNrID0gRFNfUmVnOwkJCQkJCS8qIERTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEREREOwkvKiBESSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJCQkI7CS8qIEJQICovDQorDQorCS8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ0NTL01TUDQzMFgvZGF0YV9tb2RlbC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NDUy9NU1A0MzBYL2RhdGFfbW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NDUy9NU1A0MzBYL2RhdGFfbW9kZWwuaApAQCAtMCwwICsxLDc5IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisJLmlmICRERUZJTkVEKCBfX0xBUkdFX0RBVEFfTU9ERUxfXyApDQorCQkuZGVmaW5lICJwdXNobS5hIiwgcHVzaG1feA0KKwkJLmRlZmluZSAicG9wbS5hIiwgcG9wbV94DQorCQkuZGVmaW5lICJwdXNoLmEiLCBwdXNoX3gNCisJCS5kZWZpbmUgInBvcC5hIiwgcG9wX3gNCisJCS5kZWZpbmUgIm1vdi5hIiwgbW92X3gNCisJLmVsc2UNCisJCS5kZWZpbmUgInB1c2htLnciLCBwdXNobV94DQorCQkuZGVmaW5lICJwb3BtLnciLCBwb3BtX3gNCisJCS5kZWZpbmUgInB1c2gudyIsIHB1c2hfeA0KKwkJLmRlZmluZSAicG9wLnciLCBwb3BfeA0KKwkJLmRlZmluZSAibW92LnciLCBtb3ZfeA0KKwkuZW5kaWYNCisJDQorCS5pZiAkREVGSU5FRCggX19MQVJHRV9DT0RFX01PREVMX18gKQ0KKwkJLmRlZmluZSAiY2FsbGEiLCBjYWxsX3gNCisJCS5kZWZpbmUgInJldGEiLCByZXRfeA0KKwkuZWxzZQ0KKwkJLmRlZmluZSAiY2FsbCIsIGNhbGxfeA0KKwkJLmRlZmluZSAicmV0IiwgcmV0X3gNCisJLmVuZGlmDQorCQ0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NTMxODUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydC5jCkBAIC0wLDAgKzEsMjI2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE1TUDQzMFggcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCBmb3IgaGFyZHdhcmUgc2V0dXAuICBUaGUgdGljayBJU1IgcnVucyBvZmYgdGhlIEFDTEssDQorbm90IHRoZSBNQ0xLLiAqLw0KKyNkZWZpbmUgcG9ydEFDTEtfRlJFUVVFTkNZX0haCQkJKCAoIHBvcnRUaWNrVHlwZSApIDMyNzY4ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcJKCAoIHVuc2lnbmVkIHNob3J0ICkgMTAgKQ0KKyNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVECQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwOCApDQorDQorLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KKw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaA0KK3RpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGENCitjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seQ0KK2JlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQordm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qDQorICogU2V0cyB1cCB0aGUgcGVyaW9kaWMgSVNSIHVzZWQgZm9yIHRoZSBSVE9TIHRpY2suICBUaGlzIHVzZXMgdGltZXIgMCwgYnV0DQorICogY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IHVzZWQgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuDQorICovDQordm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCit1bnNpZ25lZCBzaG9ydCAqcHVzVG9wT2ZTdGFjazsNCit1bnNpZ25lZCBsb25nICpwdWxUb3BPZlN0YWNrLCB1bFRlbXA7DQorDQorCS8qDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCQlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCisNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjIyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJKi8NCisNCisJLyogRGF0YSB0eXBlcyBhcmUgbmVlZCBlaXRoZXIgMTYgYml0cyBvciAzMiBiaXRzIGRlcGVuZGluZyBvbiB0aGUgZGF0YSANCisJYW5kIGNvZGUgbW9kZWwgdXNlZC4gKi8NCisJaWYoIHNpemVvZiggcHhDb2RlICkgPT0gc2l6ZW9mKCB1bnNpZ25lZCBzaG9ydCApICkNCisJew0KKwkJcHVzVG9wT2ZTdGFjayA9ICggdW5zaWduZWQgc2hvcnQgKiApIHB4VG9wT2ZTdGFjazsNCisJCXVsVGVtcCA9ICggdW5zaWduZWQgbG9uZyApIHB4Q29kZTsNCisJCSpwdXNUb3BPZlN0YWNrID0gKCB1bnNpZ25lZCBzaG9ydCApIHVsVGVtcDsNCisJfQ0KKwllbHNlDQorCXsNCisJCS8qIE1ha2Ugcm9vbSBmb3IgYSAyMCBiaXQgdmFsdWUgc3RvcmVkIGFzIGEgMzIgYml0IHZhbHVlLiAqLw0KKwkJcHVzVG9wT2ZTdGFjayA9ICggdW5zaWduZWQgc2hvcnQgKiApIHB4VG9wT2ZTdGFjazsJCQ0KKwkJcHVzVG9wT2ZTdGFjay0tOw0KKwkJcHVsVG9wT2ZTdGFjayA9ICggdW5zaWduZWQgbG9uZyAqICkgcHVzVG9wT2ZTdGFjazsNCisJCSpwdWxUb3BPZlN0YWNrID0gKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlOw0KKwl9DQorDQorCXB1c1RvcE9mU3RhY2stLTsNCisJKnB1c1RvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB1c1RvcE9mU3RhY2sgLT0gKCBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgLyAyICk7DQorCQ0KKwkvKiBGcm9tIGhlcmUgb24gdGhlIHNpemUgb2Ygc3RhY2tlZCBpdGVtcyBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9kZWwuICovDQorCXB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKiApIHB1c1RvcE9mU3RhY2s7DQorDQorCS8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCSNpZmRlZiBQUkVMT0FEX1JFR0lTVEVSX1ZBTFVFUw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGZmZmY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhlZWVlOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4YWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07CQ0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg2NjY2Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0NDQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJI2Vsc2UNCisJCXB4VG9wT2ZTdGFjayAtPSAzOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2sgLT0gOTsNCisJI2VuZGlmDQorDQorCS8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQorCVRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzDQorCWluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCisNCisJLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB3ZSBoYXZlIGdlbmVyYXRlZCBzbyB0aGlzIGNhbg0KKwliZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTVNQNDMwIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEhhcmR3YXJlIGluaXRpYWxpc2F0aW9uIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suDQorICovDQordm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjcHJhZ21hIHZlY3Rvcj1jb25maWdUSUNLX1ZFQ1RPUg0KK2ludGVycnVwdCB2b2lkIHZUaWNrSVNSRW50cnkoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKTsNCisNCisJX19iaWNfU1JfcmVnaXN0ZXJfb25fZXhpdCggU0NHMSArIFNDRzAgKyBPU0NPRkYgKyBDUFVPRkYgKTsNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCWV4dGVybiB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoIHZvaWQgKTsNCisJCXZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoKTsNCisJI2Vsc2UNCisJCWV4dGVybiB2b2lkIHZQb3J0Q29vcGVyYXRpdmVUaWNrSVNSKCB2b2lkICk7DQorCQl2UG9ydENvb3BlcmF0aXZlVGlja0lTUigpOw0KKwkjZW5kaWYNCit9DQorDQorCQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9wb3J0ZXh0LmFzbSBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9wb3J0ZXh0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJiNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NDUy9NU1A0MzBYL3BvcnRleHQuYXNtCkBAIC0wLDAgKzEsMTg0IEBACis7DQorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOwkNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorDQorOyAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSAicmVnaXN0ZXIgdGVzdCIgdGFza3MsIGFzIGRlc2NyaWJlZCBhdCB0aGUgdG9wIG9mDQorOyAqIG1haW4uYw0KKw0KKwkuaW5jbHVkZSBkYXRhX21vZGVsLmgNCisNCisJLmdsb2JhbCB2VGFza0luY3JlbWVudFRpY2sNCisJLmdsb2JhbCB2VGFza1N3aXRjaENvbnRleHQNCisJLmdsb2JhbCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQNCisJLmdsb2JhbCBweEN1cnJlbnRUQ0INCisJLmdsb2JhbCB1c0NyaXRpY2FsTmVzdGluZw0KKw0KKwkuZGVmIHZQb3J0UHJlZW1wdGl2ZVRpY2tJU1INCisJLmRlZiB2UG9ydENvb3BlcmF0aXZlVGlja0lTUg0KKwkuZGVmIHZQb3J0WWllbGQNCisJLmRlZiB4UG9ydFN0YXJ0U2NoZWR1bGVyDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorcG9ydFNBVkVfQ09OVEVYVCAubWFjcm8NCisNCisJO1NhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuDQorCXB1c2htX3gJIzEyLCByMTUNCisJbW92LncJJnVzQ3JpdGljYWxOZXN0aW5nLCByMTQNCisJcHVzaF94IHIxNA0KKwltb3ZfeAkmcHhDdXJyZW50VENCLCByMTINCisJbW92X3gJc3AsIDAoIHIxMiApDQorCS5lbmRtDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorCQkNCitwb3J0UkVTVE9SRV9DT05URVhUIC5tYWNybw0KKw0KKwltb3ZfeAkmcHhDdXJyZW50VENCLCByMTINCisJbW92X3gJQHIxMiwgc3ANCisJcG9wX3gJcjE1DQorCW1vdi53CXIxNSwgJnVzQ3JpdGljYWxOZXN0aW5nDQorCXBvcG1feAkjMTIsIHIxNQ0KKwlwb3Audwlzcg0KKwlyZXRfeA0KKwkuZW5kbQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzsqDQorOyogVGhlIFJUT1MgdGljayBJU1IuDQorOyoNCis7KiBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGluIHVzZSB0aGlzIHNpbXBseSBpbmNyZW1lbnRzIHRoZSB0aWNrDQorOyogY291bnQuDQorOyoNCis7KiBJZiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgaW4gdXNlIGEgY29udGV4dCBzd2l0Y2ggY2FuIGFsc28gb2NjdXIuDQorOyovDQorCQ0KKwkudGV4dA0KKwkuYWxpZ24gMg0KKwkNCit2UG9ydFByZWVtcHRpdmVUaWNrSVNSOiAuYXNtZnVuYw0KKwkNCisJOyBUaGUgc3IgaXMgbm90IHNhdmVkIGluIHBvcnRTQVZFX0NPTlRFWFQoKSBiZWNhdXNlIHZQb3J0WWllbGQoKSBuZWVkcw0KKwk7dG8gc2F2ZSBpdCBtYW51YWxseSBiZWZvcmUgaXQgZ2V0cyBtb2RpZmllZCAoaW50ZXJydXB0cyBnZXQgZGlzYWJsZWQpLg0KKwlwdXNoLncgc3INCisJcG9ydFNBVkVfQ09OVEVYVA0KKwkJCQkNCisJY2FsbF94CSN2VGFza0luY3JlbWVudFRpY2sNCisJY2FsbF94CSN2VGFza1N3aXRjaENvbnRleHQNCisJCQ0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorCS5lbmRhc21mdW5jDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorCS5hbGlnbiAyDQorCQ0KK3ZQb3J0Q29vcGVyYXRpdmVUaWNrSVNSOiAuYXNtZnVuYw0KKwkNCisJOyBUaGUgc3IgaXMgbm90IHNhdmVkIGluIHBvcnRTQVZFX0NPTlRFWFQoKSBiZWNhdXNlIHZQb3J0WWllbGQoKSBuZWVkcw0KKwk7dG8gc2F2ZSBpdCBtYW51YWxseSBiZWZvcmUgaXQgZ2V0cyBtb2RpZmllZCAoaW50ZXJydXB0cyBnZXQgZGlzYWJsZWQpLg0KKwlwdXNoLncgc3INCisJcG9ydFNBVkVfQ09OVEVYVA0KKwkJCQkNCisJY2FsbF94CSN2VGFza0luY3JlbWVudFRpY2sNCisJCQ0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorCQ0KKwkuZW5kYXNtZnVuYw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzsNCis7IE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgdGhlIHBvcnRZSUVMRCgpIG1hY3JvLg0KKzsNCisNCisJLmFsaWduIDINCisNCit2UG9ydFlpZWxkOiAuYXNtZnVuYw0KKw0KKwk7IFRoZSBzciBuZWVkcyBzYXZpbmcgYmVmb3JlIGl0IGlzIG1vZGlmaWVkLg0KKwlwdXNoLncJc3INCisJDQorCTsgTm93IHRoZSBTUiBpcyBzdGFja2VkIHdlIGNhbiBkaXNhYmxlIGludGVycnVwdHMuDQorCWRpbnQJDQorCW5vcA0KKwkJCQkNCisJOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorCXBvcnRTQVZFX0NPTlRFWFQJCQkNCisNCisJOyBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uDQorCWNhbGxfeAkjdlRhc2tTd2l0Y2hDb250ZXh0CQkNCisNCisJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4NCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKwkuZW5kYXNtZnVuYw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKw0KKzsNCis7IFN0YXJ0IG9mZiB0aGUgc2NoZWR1bGVyIGJ5IGluaXRpYWxpc2luZyB0aGUgUlRPUyB0aWNrIHRpbWVyLCB0aGVuIHJlc3RvcmluZw0KKzsgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suDQorOw0KKw0KKwkuYWxpZ24gMg0KKwkNCit4UG9ydFN0YXJ0U2NoZWR1bGVyOiAuYXNtZnVuYw0KKw0KKwk7IFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCTsgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisJY2FsbF94CSN2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQNCisNCisJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorCS5lbmRhc21mdW5jDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgCQkNCisJLmVuZA0KKwkJDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NDUy9NU1A0MzBYL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NDUy9NU1A0MzBYL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTFiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogSGFyZHdhcmUgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIm1zcDQzMC5oIg0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQorDQorLyogVGhlIHN0YWNrIHR5cGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIGRhdGEgbW9kZWwuICovDQorI2lmZGVmIF9fTEFSR0VfREFUQV9NT0RFTF9fDQorCSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgdW5zaWduZWQgbG9uZw0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgdW5zaWduZWQgc2hvcnQNCisjZW5kaWYNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9kaXNhYmxlX2ludGVycnVwdCgpOyBfbm9wKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfZW5hYmxlX2ludGVycnVwdCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1bnNpZ25lZCBwb3J0U0hPUlQgKSAwICkNCisNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVzQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCVwNCisJCXVzQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwlcDQorCQkvKiByZS1lbmFibGVkLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKw0KKy8qDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoIGNhbGxlZCBieSBwb3J0WUlFTEQgb3IgdGFza1lJRUxELg0KKyAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpIHZQb3J0WWllbGQoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlfX25vX29wZXJhdGlvbigpCQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIGlmKCB4ICkgdlBvcnRZaWVsZCgpDQorCQ0KK3ZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIHNpemVvZiggaW50ICkgIT0gc2l6ZW9mKCBsb25nICkgc28gYSBmdWxsIHByaW50ZigpIGxpYnJhcnkgaXMgcmVxdWlyZWQgaWYNCitydW4gdGltZSBzdGF0cyBpbmZvcm1hdGlvbiBpcyB0byBiZSBkaXNwbGF5ZWQuICovDQorI2RlZmluZSBwb3J0TFVfUFJJTlRGX1NQRUNJRklFUl9SRVFVSVJFRA0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDc0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydC5jCkBAIC0wLDAgKzEsMjI3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBLZXJuZWwgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisNCisjZGVmaW5lIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4NDAwMCApDQorDQorLyogU3VwZXJ2aXNvciBtb2RlIHNldC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NUQVRVU19SRUdJU1RFUgkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMDAwKQ0KKw0KKy8qIFRoZSBjbG9jayBwcmVzY2FsZSBpbnRvIHRoZSB0aW1lciBwZXJpcGhlcmFsLiAqLw0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJCSggKCB1bnNpZ25lZCBjaGFyICkgMTAgKQ0KKw0KKy8qIFRoZSBjbG9jayBmcmVxdWVuY3kgaW50byB0aGUgUlRDLiAqLw0KKyNkZWZpbmUgcG9ydFJUQ19DTE9DS19IWgkJCQkoICggdW5zaWduZWQgbG9uZyApIDEwMDAgKQ0KKw0KK2FzbSB2b2lkIGludGVycnVwdCBWZWN0b3JOdW1iZXJfVkwxc3dpIHZQb3J0WWllbGRJU1IoIHZvaWQgKTsNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgbmVzdGVkIGNhbGxzIHRvIHRhc2tFTlRFUl9DUklUSUNBTCgpLiAgVGhpcw0KK3dpbGwgYmUgc2V0IHRvIDAgcHJpb3IgdG8gdGhlIGZpcnN0IHRhc2sgYmVpbmcgc3RhcnRlZC4gKi8NCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDB4OTk5OVVMOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICogcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKw0KK3Vuc2lnbmVkIGxvbmcgdWxPcmlnaW5hbEE1Ow0KKw0KKwlfX2FzbXsgTU9WRS5MIEE1LCB1bE9yaWdpbmFsQTUgfTsNCisNCisNCisJKnB4VG9wT2ZTdGFjayA9IChwb3J0U1RBQ0tfVFlQRSkgMHhERUFEQkVFRjsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIEV4Y2VwdGlvbiBzdGFjayBmcmFtZSBzdGFydHMgd2l0aCB0aGUgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUiA8PCAxNlVMICkgfCAoIHBvcnRJTklUSUFMX1NUQVRVU19SRUdJU1RFUiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA7IC8qRlAqLw0KKwlweFRvcE9mU3RhY2sgLT0gMTQ7IC8qIEE1IHRvIEQwLiAqLw0KKw0KKwkvKiBQYXJhbWV0ZXIgaW4gQTAuICovDQorCSooIHB4VG9wT2ZTdGFjayArIDggKSA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorDQorCS8qIEE1IG11c3QgYmUgbWFpbnRhaW5lZCBhcyBpdCBpcyByZXN1cnZlZCBieSB0aGUgY29tcGlsZXIuICovDQorCSooIHB4VG9wT2ZTdGFjayArIDEzICkgPSB1bE9yaWdpbmFsQTU7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7ICANCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKwl1bENyaXRpY2FsTmVzdGluZyA9IDBVTDsNCisNCisJLyogQ29uZmlndXJlIGEgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwlyZXR1cm4gcGRGQUxTRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorewkJCQkNCisJLyogUHJlc2NhbGUgYnkgMSAtIGllIG5vIHByZXNjYWxlLiAqLw0KKwlSVENTQyB8PSA4Ow0KKwkNCisJLyogQ29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCisJUlRDTU9EID0gcG9ydFJUQ19DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJDQorCS8qIEVuYWJsZSB0aGUgUlRDIHRvIGdlbmVyYXRlIGludGVycnVwdHMgLSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkDQorCXdoZW4gdGhpcyBjb2RlIGV4ZWN1dGVzLiAqLw0KKwlSVENTQ19SVElFID0gMTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KKwl7DQorCQkvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KKwkJY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KKwkJZG8NCisJCXsNCisJCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJaWYoIElOVENfRlJDID09IDBVTCApDQorCQkJew0KKwkJCQlicmVhazsNCisJCQl9DQorDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCQl9IHdoaWxlKCAxICk7DQorCX0NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEhhbmRsZXIoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KKw0KKwl1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJLyogTm90ZSB0aGlzIHdpbGwgY2xlYXIgYWxsIGZvcmNlZCBpbnRlcnJ1cHRzIC0gdGhpcyBpcyBkb25lIGZvciBzcGVlZC4gKi8NCisJCUlOVENfQ0ZSQyA9IDB4M0U7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgaW50ZXJydXB0IFZlY3Rvck51bWJlcl9WcnRjIHZQb3J0VGlja0lTUiggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxTYXZlZEludGVycnVwdE1hc2s7DQorDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovDQorCVJUQ1NDIHw9IFJUQ1NDX1JUSUZfTUFTSzsNCisNCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2suICovDQorCXVsU2F2ZWRJbnRlcnJ1cHRNYXNrID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrICk7DQorDQorCS8qIElmIHdlIGFyZSB1c2luZyB0aGUgcHJlLWVtcHRpdmUgc2NoZWR1bGVyIHRoZW4gYWxzbyByZXF1ZXN0IGENCisJY29udGV4dCBzd2l0Y2ggYXMgaW5jcmVtZW50aW5nIHRoZSB0aWNrIGNvdWxkIGhhdmUgdW5ibG9ja2VkIGEgdGFzay4gKi8NCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJew0KKwkJdGFza1lJRUxEKCk7DQorCX0NCisJI2VuZGlmDQorfQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0YXNtLlMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydGFzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjQxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydGFzbS5TCkBAIC0wLDAgKzEsMTY5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKg0KKyAqIFB1cnBvc2U6IExvd2VzdCBsZXZlbCByb3V0aW5lcyBmb3IgYWxsIENvbGRGaXJlIHByb2Nlc3NvcnMuDQorICoNCisgKiBOb3RlczoNCisgKiANCisgKiB1bFBvcnRTZXRJUEwoKSBhbmQgbWNmNXh4eF93cl9jYWNyKCkgY29waWVkIHdpdGggcGVybWlzc2lvbiBmcm9tIEZyZWVTY2FsZQ0KKyAqIHN1cHBsaWVkIHNvdXJjZSBmaWxlcy4NCisgKi8NCisNCisgICAgLmdsb2JhbCB1bFBvcnRTZXRJUEwNCisgICAgLmdsb2JhbCBfdWxQb3J0U2V0SVBMDQorICAgIC5nbG9iYWwgbWNmNXh4eF93cl9jYWNyeA0KKyAgICAuZ2xvYmFsIF9tY2Y1eHh4X3dyX2NhY3J4DQorICAgIC5nbG9iYWwgdlBvcnRZaWVsZElTUg0KKyAgICAuZ2xvYmFsIF92UG9ydFlpZWxkSVNSDQorICAgIC5nbG9iYWwgdlBvcnRTdGFydEZpcnN0VGFzaw0KKyAgICAuZ2xvYmFsIF92UG9ydFN0YXJ0Rmlyc3RUYXNrDQorICAgIC5leHRlcm4gX3B4Q3VycmVudFRDQg0KKyAgICAuZXh0ZXJuIF92UG9ydFlpZWxkSGFuZGxlcg0KKw0KKyAgICAudGV4dA0KKw0KKy5tYWNybyBwb3J0U0FWRV9DT05URVhUDQorDQorCWxlYS5sCQkoLTYwLCBzcCksIHNwDQorCW1vdmVtLmwJCWQwLWE2LCAoc3ApDQorCW1vdmUubAkJX3B4Q3VycmVudFRDQiwgYTANCisJbW92ZS5sCQlzcCwgKGEwKQ0KKw0KKwkuZW5kbQ0KKw0KKy5tYWNybyBwb3J0UkVTVE9SRV9DT05URVhUDQorDQorCW1vdmUubAkJX3B4Q3VycmVudFRDQiwgYTANCisJbW92ZS5sCQkoYTApLCBzcA0KKwltb3ZlbS5sCQkoc3ApLCBkMC1hNg0KKwlsZWEubAkJKDYwLCBzcCksIHNwDQorCXJ0ZQ0KKw0KKwkuZW5kbQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKg0KKyAqIFRoaXMgcm91dGluZXMgY2hhbmdlcyB0aGUgSVBMIHRvIHRoZSB2YWx1ZSBwYXNzZWQgaW50byB0aGUgcm91dGluZS4NCisgKiBJdCBhbHNvIHJldHVybnMgdGhlIG9sZCBJUEwgdmFsdWUgYmFjay4NCisgKiBDYWxsaW5nIGNvbnZlbnRpb24gZnJvbSBDOg0KKyAqICAgb2xkX2lwbCA9IGFzbV9zZXRfaXBsKG5ld19pcGwpOw0KKyAqIEZvciB0aGUgRGlhYiBEYXRhIEMgY29tcGlsZXIsIGl0IHBhc3NlcyByZXR1cm4gdmFsdWUgdGhydSBEMC4NCisgKiBOb3RlIHRoYXQgb25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdGhyZWUgYml0cyBvZiB0aGUgcGFzc2VkDQorICogdmFsdWUgYXJlIHVzZWQuDQorICovDQorDQordWxQb3J0U2V0SVBMOg0KK191bFBvcnRTZXRJUEw6DQorICAgIGxpbmsgICAgQTYsIy04DQorICAgIG1vdmVtLmwgRDYtRDcsKFNQKQ0KKw0KKyAgICBtb3ZlLncgIFNSLEQ3ICAgICAgIC8qIGN1cnJlbnQgc3IgICAgKi8NCisNCisgICAgbW92ZS5sICBENyxENiAgICAgICAvKiBwcmVwYXJlIHJldHVybiB2YWx1ZSAgKi8NCisgICAgYW5kaS5sICAjMHgwNzAwLEQ2ICAvKiBtYXNrIG91dCBJUEwgICovDQorICAgIGxzci5sICAgIzgsRDYgICAgICAgLyogSVBMICAgKi8NCisNCisgICAgYW5kaS5sICAjMHgwNyxEMCAgICAvKiBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzICAqLw0KKyAgICBsc2wubCAgICM4LEQwICAgICAgIC8qIG1vdmUgb3ZlciB0byBtYWtlIG1hc2sgICAgKi8NCisNCisgICAgYW5kaS5sICAjMHgwMDAwRjhGRixENyAgLyogemVybyBvdXQgY3VycmVudCBJUEwgICovDQorICAgIG9yLmwgICAgRDAsRDcgICAgICAgICAgIC8qIHBsYWNlIG5ldyBJUEwgaW4gc3IgICAqLw0KKyAgICBtb3ZlLncgIEQ3LFNSDQorDQorCW1vdmUubAlENiwgRDAJCS8qIFJldHVybiB2YWx1ZSBpbiBEMC4gKi8NCisgICAgbW92ZW0ubCAoU1ApLEQ2LUQ3DQorICAgIGxlYSAgICAgOChTUCksU1ANCisgICAgdW5sayAgICBBNg0KKyAgICBydHMNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorbWNmNXh4eF93cl9jYWNyeDoNCitfbWNmNXh4eF93cl9jYWNyeDoNCisgICAgbW92ZS5sICA0KHNwKSxkMA0KKyAgICAubG9uZyAgIDB4NGU3YjAwMDIgIC8qIG1vdmVjIGQwLGNhY3IgICAqLw0KKyAgICBub3ANCisgICAgcnRzDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qIFlpZWxkIGludGVycnVwdC4gKi8NCitfdlBvcnRZaWVsZElTUjoNCit2UG9ydFlpZWxkSVNSOg0KKwlwb3J0U0FWRV9DT05URVhUDQorCWpzciBfdlBvcnRZaWVsZEhhbmRsZXINCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KK192UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorICAgIC5lbmQNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyMjdkMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIGxvbmcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTQNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit1bnNpZ25lZCBwb3J0TE9ORyB1bFBvcnRTZXRJUEwoIHVuc2lnbmVkIHBvcnRMT05HICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXVsUG9ydFNldElQTCggMCApDQorDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisNCitleHRlcm4gdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCXVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdWxQb3J0U2V0SVBMKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCWFzbSB2b2xhdGlsZSAoICJub3AiICkNCisNCisvKiBDb250ZXh0IHN3aXRjaGVzIGFyZSByZXF1ZXN0ZWQgdXNpbmcgdGhlIGZvcmNlIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJSU5UQ19TRlJDID0gMHgzRTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCk7IHBvcnROT1AoKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkJaWYoIHhTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkJXA0KKwkJCQkJCQkJCQkJCQl7CQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJcG9ydFlJRUxEKCk7CQkJCQlcDQorCQkJCQkJCQkJCQkJCX0NCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkMTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0LmMKQEAgLTAsMCArMSwxODYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIEtlcm5lbCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUgkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHg0MDAwICkNCisNCisvKiBTdXBlcnZpc29yIG1vZGUgc2V0LiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1RBVFVTX1JFR0lTVEVSCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDIwMDApDQorDQorLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgbmVzdGVkIGNhbGxzIHRvIHRhc2tFTlRFUl9DUklUSUNBTCgpLiAgVGhpcw0KK3dpbGwgYmUgc2V0IHRvIDAgcHJpb3IgdG8gdGhlIGZpcnN0IHRhc2sgYmVpbmcgc3RhcnRlZC4gKi8NCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDB4OTk5OVVMOw0KKw0KKw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCVwNCisJbGVhLmwJCSgtNjAsICVzcCksICVzcDsJCVwNCisJbW92ZW0ubAkJJWQwLSVmcCwgKCVzcCk7CQkJXA0KKwltb3ZlLmwJCXB4Q3VycmVudFRDQiwgJWEwOwkJXA0KKwltb3ZlLmwJCSVzcCwgKCVhMCk7DQorDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQlcDQorCW1vdmUubAkJcHhDdXJyZW50VENCLCAlYTA7CQlcDQorCW1vdmUubAkJKCVhMCksICVzcDsJCQkJXA0KKwltb3ZlbS5sCQkoJXNwKSwgJWQwLSVmcDsJCQlcDQorCWxlYS5sCQklc3BAKDYwKSwgJXNwOwkJCVwNCisJcnRlDQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKiBweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IChwb3J0U1RBQ0tfVFlQRSkgMHhERUFEQkVFRjsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIEV4Y2VwdGlvbiBzdGFjayBmcmFtZSBzdGFydHMgd2l0aCB0aGUgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUiA8PCAxNlVMICkgfCAoIHBvcnRJTklUSUFMX1NUQVRVU19SRUdJU1RFUiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA7IC8qRlAqLw0KKwlweFRvcE9mU3RhY2sgLT0gMTQ7IC8qIEE1IHRvIEQwLiAqLw0KKw0KKyAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorCXVsQ3JpdGljYWxOZXN0aW5nID0gMFVMOw0KKw0KKwkvKiBDb25maWd1cmUgdGhlIGludGVycnVwdHMgdXNlZCBieSB0aGlzIHBvcnQuICovDQorCXZBcHBsaWNhdGlvblNldHVwSW50ZXJydXB0cygpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcuICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJcmV0dXJuIHBkRkFMU0U7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMFVMICkNCisJew0KKwkJLyogR3VhcmQgYWdhaW5zdCBjb250ZXh0IHN3aXRjaGVzIGJlaW5nIHBlbmRlZCBzaW11bHRhbmVvdXNseSB3aXRoIGENCisJCWNyaXRpY2FsIHNlY3Rpb24gYmVpbmcgZW50ZXJlZC4gKi8NCisJCWRvDQorCQl7DQorCQkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkJCWlmKCBNQ0ZfSU5UQzBfSU5URlJDSCA9PSAwVUwgKQ0KKwkJCXsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKw0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKw0KKwkJfSB3aGlsZSggMSApOw0KKwl9DQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0WWllbGRIYW5kbGVyKCB2b2lkICkNCit7DQordW5zaWduZWQgbG9uZyB1bFNhdmVkSW50ZXJydXB0TWFzazsNCisNCisJdWxTYXZlZEludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCQkvKiBOb3RlIHRoaXMgd2lsbCBjbGVhciBhbGwgZm9yY2VkIGludGVycnVwdHMgLSB0aGlzIGlzIGRvbmUgZm9yIHNwZWVkLiAqLw0KKwkJTUNGX0lOVEMwX0lOVEZSQ0wgPSAwOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxTYXZlZEludGVycnVwdE1hc2sgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRhc20uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0YXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhZGE2YwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0YXNtLlMKQEAgLTAsMCArMSwxNjkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorICogUHVycG9zZTogTG93ZXN0IGxldmVsIHJvdXRpbmVzIGZvciBhbGwgQ29sZEZpcmUgcHJvY2Vzc29ycy4NCisgKg0KKyAqIE5vdGVzOg0KKyAqIA0KKyAqIHVsUG9ydFNldElQTCgpIGFuZCBtY2Y1eHh4X3dyX2NhY3IoKSBjb3BpZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gRnJlZVNjYWxlDQorICogc3VwcGxpZWQgc291cmNlIGZpbGVzLg0KKyAqLw0KKw0KKyAgICAuZ2xvYmFsIHVsUG9ydFNldElQTA0KKyAgICAuZ2xvYmFsIF91bFBvcnRTZXRJUEwNCisgICAgLmdsb2JhbCBtY2Y1eHh4X3dyX2NhY3J4DQorICAgIC5nbG9iYWwgX21jZjV4eHhfd3JfY2FjcngNCisgICAgLmdsb2JhbCB2UG9ydFlpZWxkSVNSDQorICAgIC5nbG9iYWwgX3ZQb3J0WWllbGRJU1INCisgICAgLmdsb2JhbCB2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorICAgIC5nbG9iYWwgX3ZQb3J0U3RhcnRGaXJzdFRhc2sNCisgICAgLmV4dGVybiBfcHhDdXJyZW50VENCDQorICAgIC5leHRlcm4gX3ZQb3J0WWllbGRIYW5kbGVyDQorDQorICAgIC50ZXh0DQorDQorLm1hY3JvIHBvcnRTQVZFX0NPTlRFWFQNCisNCisJbGVhLmwJCSgtNjAsIHNwKSwgc3ANCisJbW92ZW0ubAkJZDAtYTYsIChzcCkNCisJbW92ZS5sCQlfcHhDdXJyZW50VENCLCBhMA0KKwltb3ZlLmwJCXNwLCAoYTApDQorDQorCS5lbmRtDQorDQorLm1hY3JvIHBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisJbW92ZS5sCQlfcHhDdXJyZW50VENCLCBhMA0KKwltb3ZlLmwJCShhMCksIHNwDQorCW1vdmVtLmwJCShzcCksIGQwLWE2DQorCWxlYS5sCQkoNjAsIHNwKSwgc3ANCisJcnRlDQorDQorCS5lbmRtDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qDQorICogVGhpcyByb3V0aW5lcyBjaGFuZ2VzIHRoZSBJUEwgdG8gdGhlIHZhbHVlIHBhc3NlZCBpbnRvIHRoZSByb3V0aW5lLg0KKyAqIEl0IGFsc28gcmV0dXJucyB0aGUgb2xkIElQTCB2YWx1ZSBiYWNrLg0KKyAqIENhbGxpbmcgY29udmVudGlvbiBmcm9tIEM6DQorICogICBvbGRfaXBsID0gYXNtX3NldF9pcGwobmV3X2lwbCk7DQorICogRm9yIHRoZSBEaWFiIERhdGEgQyBjb21waWxlciwgaXQgcGFzc2VzIHJldHVybiB2YWx1ZSB0aHJ1IEQwLg0KKyAqIE5vdGUgdGhhdCBvbmx5IHRoZSBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzIG9mIHRoZSBwYXNzZWQNCisgKiB2YWx1ZSBhcmUgdXNlZC4NCisgKi8NCisNCit1bFBvcnRTZXRJUEw6DQorX3VsUG9ydFNldElQTDoNCisgICAgbGluayAgICBBNiwjLTgNCisgICAgbW92ZW0ubCBENi1ENywoU1ApDQorDQorICAgIG1vdmUudyAgU1IsRDcgICAgICAgLyogY3VycmVudCBzciAgICAqLw0KKw0KKyAgICBtb3ZlLmwgIEQ3LEQwICAgICAgIC8qIHByZXBhcmUgcmV0dXJuIHZhbHVlICAqLw0KKyAgICBhbmRpLmwgICMweDA3MDAsRDAgIC8qIG1hc2sgb3V0IElQTCAgKi8NCisgICAgbHNyLmwgICAjOCxEMCAgICAgICAvKiBJUEwgICAqLw0KKw0KKyAgICBtb3ZlLmwgIDgoQTYpLEQ2ICAgIC8qIGdldCBhcmd1bWVudCAgKi8NCisgICAgYW5kaS5sICAjMHgwNyxENiAgICAvKiBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzICAqLw0KKyAgICBsc2wubCAgICM4LEQ2ICAgICAgIC8qIG1vdmUgb3ZlciB0byBtYWtlIG1hc2sgICAgKi8NCisNCisgICAgYW5kaS5sICAjMHgwMDAwRjhGRixENyAgLyogemVybyBvdXQgY3VycmVudCBJUEwgICovDQorICAgIG9yLmwgICAgRDYsRDcgICAgICAgICAgIC8qIHBsYWNlIG5ldyBJUEwgaW4gc3IgICAqLw0KKyAgICBtb3ZlLncgIEQ3LFNSDQorDQorICAgIG1vdmVtLmwgKFNQKSxENi1ENw0KKyAgICBsZWEgICAgIDgoU1ApLFNQDQorICAgIHVubGsgICAgQTYNCisgICAgcnRzDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK21jZjV4eHhfd3JfY2Fjcng6DQorX21jZjV4eHhfd3JfY2Fjcng6DQorICAgIG1vdmUubCAgNChzcCksZDANCisgICAgLmxvbmcgICAweDRlN2IwMDAyICAvKiBtb3ZlYyBkMCxjYWNyICAgKi8NCisgICAgbm9wDQorICAgIHJ0cw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKiBZaWVsZCBpbnRlcnJ1cHQuICovDQorX3ZQb3J0WWllbGRJU1I6DQordlBvcnRZaWVsZElTUjoNCisJcG9ydFNBVkVfQ09OVEVYVA0KKwlqc3IgX3ZQb3J0WWllbGRIYW5kbGVyDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQordlBvcnRTdGFydEZpcnN0VGFzazoNCitfdlBvcnRTdGFydEZpcnN0VGFzazoNCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKyAgICAuZW5kDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWI2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjIvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBsb25nDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk0DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQordW5zaWduZWQgcG9ydExPTkcgdWxQb3J0U2V0SVBMKCB1bnNpZ25lZCBwb3J0TE9ORyApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl1bFBvcnRTZXRJUEwoIDAgKQ0KKw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorDQorZXh0ZXJuIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKTsNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQl1bFBvcnRTZXRJUEwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApIHVsUG9ydFNldElQTCggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisjZGVmaW5lIHBvcnROT1AoKQlhc20gdm9sYXRpbGUgKCAJIm5vcCIgKQ0KKw0KKy8qIE5vdGUgdGhpcyB3aWxsIG92ZXJ3cml0ZSBhbGwgb3RoZXIgYml0cyBpbiB0aGUgZm9yY2UgcmVnaXN0ZXIsIGl0IGlzIGRvbmUgdGhpcyB3YXkgZm9yIHNwZWVkLiAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQlNQ0ZfSU5UQzBfSU5URlJDTCA9ICggMVVMIDw8IGNvbmZpZ1lJRUxEX0lOVEVSUlVQVF9WRUNUT1IgKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCkgLyogLTMyIGFzIHdlIGFyZSB1c2luZyB0aGUgaGlnaCB3b3JkIG9mIHRoZSA2NGJpdCBtYXNrLiAqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKQlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQlcDQorCQkJCQkJCQkJCQkJCXsJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQlwb3J0WUlFTEQoKTsJCQkJCVwNCisJCQkJCQkJCQkJCQkJfQ0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvQ29kZVdhcnJpb3IvSENTMTIvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJlYzVkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnQuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBIQ1MxMiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoNCisgKiBDb25maWd1cmUgYSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrIGF0IHRoZSBmcmVxdWVuY3kgc3BlY2lmaWVkIA0KKyAqIHdpdGhpbiBGcmVlUlRPU0NvbmZpZy5oLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBoYXZlIHRvIGJlIGluIG5vbi1iYW5rZWQgbWVtb3J5IC0gYXMgZG9lcyB0aGUNCitzY2hlZHVsZXIgc3RhcnR1cCBmdW5jdGlvbi4gKi8NCisjcHJhZ21hIENPREVfU0VHIF9fTkVBUl9TRUcgTk9OX0JBTktFRA0KKw0KKwkvKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSBTV0kgSVNSLiAqLw0KKwl2b2lkIGludGVycnVwdCB2UG9ydFlpZWxkKCB2b2lkICk7DQorDQorCS8qIFRpY2sgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSB0aW1lciBJU1IuICovDQorCXZvaWQgaW50ZXJydXB0IHZQb3J0VGlja0ludGVycnVwdCggdm9pZCApOw0KKwkNCisJLyogU2ltcGx5IGNhbGxlZCBieSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkuICB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgZG9lcyBub3QNCisJc3RhcnQgdGhlIHNjaGVkdWxlciBkaXJlY3RseSBiZWNhdXNlIHRoZSBoZWFkZXIgZmlsZSBjb250YWluaW5nIHRoZSANCisJeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0IG9mIHRoZSBjb21tb24ga2VybmVsIGNvZGUsIGFuZCANCisJdGhlcmVmb3JlIGNhbm5vdCB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gKi8NCisJc3RhdGljIHBvcnRCQVNFX1RZUEUgeEJhbmtlZFN0YXJ0U2NoZWR1bGVyKCB2b2lkICk7DQorDQorI3ByYWdtYSBDT0RFX1NFRyBERUZBVUxUDQorDQorLyogQ2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkgY2FuIGJlIG5lc3RlZC4gIFdoZW4gdGhleSBhcmUgbmVzdGVkIHRoZSANCitjcml0aWNhbCBzZWN0aW9uIHNob3VsZCBub3QgYmUgbGVmdCAoaS5lLiBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgcmUtZW5hYmxlZCkNCit1bnRpbCB0aGUgbmVzdGluZyBkZXB0aCByZWFjaGVzIDAuICBUaGlzIHZhcmlhYmxlIHNpbXBseSB0cmFja3MgdGhlIG5lc3RpbmcgDQorZGVwdGguICBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0J3Mgb3duIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggdmFyaWFibGUgc28gDQordXhDcml0aWNhbE5lc3RpbmcgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGZyb20gdGhlIHRhc2sgc3RhY2sgZHVyaW5nIGEgY29udGV4dA0KK3N3aXRjaC4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHhmZjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiANCisJCVBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJCVRoaXMgY2FuIGJlIHVuY29tbWVudGVkIHRvIHByb3ZpZGUgdXNlZnVsIHN0YWNrIG1hcmtlcnMgd2hlbiBkZWJ1Z2dpbmcuDQorDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSovDQorDQorDQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAgSW4gdGhpcyBjYXNlIHRoZSBzdGFjayBhcw0KKwlleHBlY3RlZCBieSB0aGUgSENTMTIgUlRJIGluc3RydWN0aW9uLiAqLw0KKw0KKw0KKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgdGFzayBmdW5jdGlvbiBpcyBwbGFjZWQgaW4gdGhlIHN0YWNrIGJ5dGUgYXQgYSB0aW1lLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICooICgocG9ydFNUQUNLX1RZUEUgKikgKCZweENvZGUpICkgKyAxICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICooICgocG9ydFNUQUNLX1RZUEUgKikgKCZweENvZGUpICkgKyAwICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBOZXh0IGFyZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IGZvcm0gcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAqLw0KKw0KKwkvKiBZIHJlZ2lzdGVyICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhmZjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhlZTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFggcmVnaXN0ZXIgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGRkOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGNjOw0KKwlweFRvcE9mU3RhY2stLTsNCisgDQorCS8qIEEgcmVnaXN0ZXIgY29udGFpbnMgcGFyYW1ldGVyIGhpZ2ggYnl0ZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAqKCAoKHBvcnRTVEFDS19UWVBFICopICgmcHZQYXJhbWV0ZXJzKSApICsgMCApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogQiByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgbG93IGJ5dGUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKiggKChwb3J0U1RBQ0tfVFlQRSAqKSAoJnB2UGFyYW1ldGVycykgKSArIDEgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIENDUjogTm90ZSB0aGF0IHdoZW4gdGhlIHRhc2sgc3RhcnRzIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkIHNpbmNlDQorCSJJIiBiaXQgb2YgQ0NSIGlzIGNsZWFyZWQgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCSNpZmRlZiBCQU5LRURfTU9ERUwNCisJCS8qIFRoZSBwYWdlIG9mIHRoZSB0YXNrLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoICggaW50ICkgcHhDb2RlICk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJI2VuZGlmDQorCQ0KKwkvKiBGaW5hbGx5IHRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIGluaXRpYWxpc2VkIHdpdGggMCAobm90IHdpdGhpbg0KKwlhIGNyaXRpY2FsIHNlY3Rpb24pLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDA7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgSENTMTIgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCVRpY2tUaW1lcl9TZXRGcmVxSHooIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwlUaWNrVGltZXJfRW5hYmxlKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgZG9lcyBub3Qgc3RhcnQgdGhlIHNjaGVkdWxlciBkaXJlY3RseSBiZWNhdXNlIA0KKwl0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0IA0KKwlvZiB0aGUgY29tbW9uIGtlcm5lbCBjb2RlLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gDQorCUluc3RlYWQgaXQgc2ltcGx5IGNhbGxzIHRoZSBsb2NhbGx5IGRlZmluZWQgeEJhbmtlZFN0YXJ0U2NoZWR1bGVyKCkgLSANCisJd2hpY2ggZG9lcyB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gKi8NCisNCisJcmV0dXJuIHhCYW5rZWRTdGFydFNjaGVkdWxlcigpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjcHJhZ21hIENPREVfU0VHIF9fTkVBUl9TRUcgTk9OX0JBTktFRA0KKw0KK3N0YXRpYyBwb3J0QkFTRV9UWVBFIHhCYW5rZWRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBDb25maWd1cmUgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgSW50ZXJydXB0cyBhcmUNCisJZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorDQorCS8qIFNpbXVsYXRlIHRoZSBlbmQgb2YgYW4gaW50ZXJydXB0IHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgb2ZmLiAqLw0KKwlfX2FzbSggInJ0aSIgKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogQ29udGV4dCBzd2l0Y2ggZnVuY3Rpb25zLiAgVGhlc2UgYXJlIGJvdGggaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMuDQorICovDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggZm9yY2VkIGJ5IGNhbGxpbmcgcG9ydFlJRUxEKCkuICBUaGlzIGlzIHRoZSBTV0kNCisgKiBoYW5kbGVyLg0KKyAqLw0KK3ZvaWQgaW50ZXJydXB0IHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFJUT1MgdGljayBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAgSWYgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyANCisgKiBiZWluZyB1c2VkIHRoZW4gdGhpcyBzaW1wbHkgaW5jcmVtZW50cyB0aGUgdGljayBjb3VudC4gIElmIHRoZSANCisgKiBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIGEgY29udGV4dCBzd2l0Y2ggY2FuIG9jY3VyLg0KKyAqLw0KK3ZvaWQgaW50ZXJydXB0IHZQb3J0VGlja0ludGVycnVwdCggdm9pZCApDQorew0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7DQorCQkvKiBBIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhcHBlbiBzbyBzYXZlIHRoZSBjb250ZXh0LiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKw0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIC4uLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiAuLi4gdGhlbiBzZWUgaWYgdGhlIG5ldyB0aWNrIHZhbHVlIGhhcyBuZWNlc3NpdGF0ZWQgYQ0KKwkJY29udGV4dCBzd2l0Y2guICovDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJCVRGTEcxID0gMTsJCQkJCQkJCSAgIA0KKw0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiBhIHRhc2sgLSB3aGljaCBtYXkgYmUgYSBkaWZmZXJlbnQgdGFzaw0KKwkJdG8gdGhhdCBpbnRlcnJ1cHRlZC4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsJDQorCX0NCisJI2Vsc2UNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQlURkxHMSA9IDE7DQorCX0NCisJI2VuZGlmDQorfQ0KKw0KKyNwcmFnbWEgQ09ERV9TRUcgREVGQVVMVA0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9IQ1MxMi9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Db2RlV2Fycmlvci9IQ1MxMi9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjAzNWYxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMjM3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0Q0hBUg0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtKCAic3dpIiApOw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlfX2FzbSggIm5vcCIgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJX19hc20oICJjbGkiICkJDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQlfX2FzbSggInNlaSIgKQ0KKw0KKy8qDQorICogRGlzYWJsZSBpbnRlcnJ1cHRzIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGNvdW50IG9mIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCisgKiBUaGUgbmVzdGluZyBjb3VudCBpcyBtYWludGFpbmVkIHNvIHdlIGtub3cgd2hlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKyAqIHJlLWVuYWJsZWQuICBPbmNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRoZSBuZXN0aW5nIGNvdW50IGNhbiBiZSBhY2Nlc3NlZA0KKyAqIGRpcmVjdGx5LiAgRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIG5lc3RpbmcgY291bnQuDQorICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJXA0KKwlleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQlcDQorCXV4Q3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCVwNCit9DQorDQorLyoNCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBzbyB3ZSBjYW4gYWNjZXNzIHRoZSBuZXN0aW5nIGNvdW50IGRpcmVjdGx5LiAgSWYgdGhlDQorICogbmVzdGluZyBpcyBmb3VuZCB0byBiZSAwIChubyBuZXN0aW5nKSB0aGVuIHdlIGFyZSBsZWF2aW5nIHRoZSBjcml0aWNhbCANCisgKiBzZWN0aW9uIGFuZCBpbnRlcnJ1cHRzIGNhbiBiZSByZS1lbmFibGVkLg0KKyAqLw0KKyNkZWZpbmUgIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQlcDQorCWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCQkJCQkJCVwNCisJdXhDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJXA0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorDQorLyogDQorICogVGhlc2UgbWFjcm9zIGFyZSB2ZXJ5IHNpbXBsZSBhcyB0aGUgcHJvY2Vzc29yIGF1dG9tYXRpY2FsbHkgc2F2ZXMgYW5kIA0KKyAqIHJlc3RvcmVzIGl0cyByZWdpc3RlcnMgYXMgaW50ZXJydXB0cyBhcmUgZW50ZXJlZCBhbmQgZXhpdGVkLiAgSW4NCisgKiBhZGRpdGlvbiB0byB0aGUgKGF1dG9tYXRpY2FsbHkgc3RhY2tlZCkgcmVnaXN0ZXJzIHdlIGFsc28gc3RhY2sgdGhlIA0KKyAqIGNyaXRpY2FsIG5lc3RpbmcgY291bnQuICBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gY3JpdGljYWwgbmVzdGluZw0KKyAqIGNvdW50IGFzIGl0IGlzIGxlZ2l0aW1hdGUgZm9yIGEgdGFzayB0byB5aWVsZCBmcm9tIHdpdGhpbiBhIGNyaXRpY2FsDQorICogc2VjdGlvbi4gIElmIHRoZSBiYW5rZWQgbWVtb3J5IG1vZGVsIGlzIGJlaW5nIHVzZWQgdGhlbiB0aGUgUFBBR0UNCisgKiByZWdpc3RlciBpcyBhbHNvIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0Lg0KKyAqLw0KKw0KKyNpZmRlZiBCQU5LRURfTU9ERUwNCisJLyogDQorCSAqIExvYWQgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIHRoZSB0YXNrLCB0aGVuIHB1bGwgdGhlIGNyaXRpY2FsIG5lc3RpbmcNCisJICogY291bnQgYW5kIFBQQUdFIHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrLiAgVGhlIHJlbWFpbnMgb2YgdGhlIA0KKwkgKiBjb250ZXh0IGFyZSByZXN0b3JlZCBieSB0aGUgUlRJIGluc3RydWN0aW9uLg0KKwkgKi8NCisJI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiBweEN1cnJlbnRUQ0I7CQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAibGR4IHB4Q3VycmVudFRDQiIgKTsJCQkJCQkJCVwNCisJCV9fYXNtKCAibGRzIDAsIHgiICk7CQkJCQkJCQkJCVwNCisJCV9fYXNtKCAicHVsYSIgKTsJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAic3RhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsJCQkJCQkJXA0KKwkJX19hc20oICJwdWxhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJzdGFhIDB4MzAiICk7IC8qIDB4MzAgPSBQUEFHRSAqLwkJCQkJXA0KKwl9DQorDQorCS8qIA0KKwkgKiBCeSB0aGUgdGltZSB0aGlzIG1hY3JvIGlzIGNhbGxlZCB0aGUgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHN0YWNrZWQgdGhlDQorCSAqIHJlZ2lzdGVycy4gIFNpbXBseSBzdGFjayB0aGUgbmVzdGluZyBjb3VudCBhbmQgUFBBR0UgdmFsdWUsIHRoZW4gc2F2ZSANCisJICogdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4NCisJICovDQorCSNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQlcDQorCQlleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHB4Q3VycmVudFRDQjsJCQkJCQlcDQorCQlleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZGFhIDB4MzAiICk7ICAvKiAweDMwID0gUFBBR0UgKi8JCQkJCVwNCisJCV9fYXNtKCAicHNoYSIgKTsJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAibGRhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsJCQkJCQkJXA0KKwkJX19hc20oICJwc2hhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOwkJCQkJCQkJXA0KKwkJX19hc20oICJzdHMgMCwgeCIgKTsJCQkJCQkJCQkJXA0KKwl9DQorI2Vsc2UNCisNCisJLyogDQorCSAqIFRoZXNlIG1hY3JvcyBhcmUgYXMgcGVyIHRoZSBCQU5LRUQgdmVyc2lvbnMgYWJvdmUsIGJ1dCB3aXRob3V0IHNhdmluZw0KKwkgKiBhbmQgcmVzdG9yaW5nIHRoZSBQUEFHRSByZWdpc3Rlci4NCisJICovDQorDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOwkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfX2FzbSggImxkeCBweEN1cnJlbnRUQ0IiICk7CQkJCQkJCQlcDQorCQlfX2FzbSggImxkcyAwLCB4IiApOwkJCQkJCQkJCQlcDQorCQlfX2FzbSggInB1bGEiICk7CQkJCQkJCQkJCQlcDQorCQlfX2FzbSggInN0YWEgdXhDcml0aWNhbE5lc3RpbmciICk7CQkJCQkJCVwNCisJfQ0KKw0KKwkjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiBweEN1cnJlbnRUQ0I7CQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAibGRhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsJCQkJCQkJXA0KKwkJX19hc20oICJwc2hhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOwkJCQkJCQkJXA0KKwkJX19hc20oICJzdHMgMCwgeCIgKTsJCQkJCQkJCQkJXA0KKwl9DQorI2VuZGlmDQorDQorLyoNCisgKiBVdGlsaXR5IG1hY3JvIHRvIGNhbGwgbWFjcm9zIGFib3ZlIGluIGNvcnJlY3Qgb3JkZXIgaW4gb3JkZXIgdG8gcGVyZm9ybSBhDQorICogdGFzayBzd2l0Y2ggZnJvbSB3aXRoaW4gYSBzdGFuZGFyZCBJU1IuICBUaGlzIG1hY3JvIGNhbiBvbmx5IGJlIHVzZWQgaWYNCisgKiB0aGUgSVNSIGRvZXMgbm90IHVzZSBhbnkgbG9jYWwgKHN0YWNrKSB2YXJpYWJsZXMuICBJZiB0aGUgSVNSIHVzZXMgc3RhY2sNCisgKiB2YXJpYWJsZXMgcG9ydFlJRUxEKCkgc2hvdWxkIGJlIHVzZWQgaW4gaXQncyBwbGFjZS4NCisgKi8NCisjZGVmaW5lIHBvcnRUQVNLX1NXSVRDSF9GUk9NX0lTUigpCQkJCQkJCQlcDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsJCQkJCQkJCQkJCVwNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJCQkJCVwNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQ4YWMzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnQuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBVDkxUjQwMDA4DQorICogcG9ydC4NCisgKg0KKyAqIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KKyAqIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlIGFyZSBjb250YWluZWQgaW4gcG9ydElTUi5jLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljIGRlZmluaXRpb25zLiAqLw0KKyNpbmNsdWRlICJBVDkxUjQwMDA4LmgiDQorI2luY2x1ZGUgInBpby5oIg0KKyNpbmNsdWRlICJhaWMuaCINCisjaW5jbHVkZSAidGMuaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggcG9ydFNUQUNLX1RZUEUgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorI2RlZmluZSBwb3J0VElDS19QUklPUklUWV82CQkJCSggNiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIA0KKyAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBzbyANCisgKiB2UG9ydElTUlN0YXJ0Rmlyc3RTVGFzaygpIGlzIGRlZmluZWQgaW4gcG9ydElTUi5jLiANCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFICpweE9yaWdpbmFsVE9TOw0KKw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwkNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMgDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydElOSVRJQUxfU1BTUjsNCisNCisJI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KKwkjZW5kaWYNCisNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNvbWUgb3B0aW1pc2F0aW9uIGxldmVscyB1c2UgdGhlIHN0YWNrIGRpZmZlcmVudGx5IHRvIG90aGVycy4gIFRoaXMgDQorCW1lYW5zIHRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7CQ0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHRpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsRHVtbXk7DQorDQorCS8qIEVuYWJsZSBjbG9jayB0byB0aGUgdGljayB0aW1lci4uLiAqLw0KKwlBVDkxQ19CQVNFX1BTLT5QU19QQ0VSID0gcG9ydFRJTUVSX0NMS19FTkFCTEVfQklUOw0KKw0KKwkvKiBTdG9wIHRoZSB0aWNrIHRpbWVyLi4uICovDQorCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0NDUiA9IFRDX0NMS0RJUzsNCisNCisJLyogU3RhcnQgd2l0aCB0aWNrIHRpbWVyIGludGVycnVwdHMgZGlzYWJsZWQuLi4gKi8NCisJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfSURSID0gMHhGRkZGRkZGRjsNCisNCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgdGljayB0aW1lciBpbnRlcnJ1cHRzLi4uICovDQorCXVsRHVtbXkgPSBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19TUjsNCisNCisJLyogU3RvcmUgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gYWRkcmVzcyBpbiB0aWNrIHRpbWVyIHZlY3RvciByZWdpc3Rlci4uLg0KKwlUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsNCisJCWV4dGVybiB2b2lkICggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCisJCUFUOTFDX0JBU0VfQUlDLT5BSUNfU1ZSW3BvcnRUSU1FUl9BSUNfQ0hBTk5FTF0gPSAoIHVuc2lnbmVkIGxvbmcgKSB2UHJlZW1wdGl2ZVRpY2s7DQorCX0NCisJI2Vsc2UgIC8vIGVsc2UgdXNlIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KKwl7DQorCQlleHRlcm4gdm9pZCAoIHZOb25QcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQorCQlBVDkxQ19CQVNFX0FJQy0+QUlDX1NWUltwb3J0VElNRVJfQUlDX0NIQU5ORUxdID0gKCB1bnNpZ25lZCBsb25nICkgdk5vblByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkvKiBUaWNrIHRpbWVyIGludGVycnVwdCBsZXZlbC1zZW5zaXRpdmUsIHByaW9yaXR5IDYuLi4gKi8NCisJQVQ5MUNfQkFTRV9BSUMtPkFJQ19TTVJbIHBvcnRUSU1FUl9BSUNfQ0hBTk5FTCBdID0gQUlDX1NSQ1RZUEVfSU5UX0xFVkVMX1NFTlNJVElWRSB8IHBvcnRUSUNLX1BSSU9SSVRZXzY7DQorDQorCS8qIEVuYWJsZSB0aGUgdGljayB0aW1lciBpbnRlcnJ1cHQuLi4NCisNCisJRmlyc3QgYXQgdGltZXIgbGV2ZWwgKi8NCisJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfSUVSID0gVENfQ1BDUzsNCisNCisJLyogVGhlbiBhdCB0aGUgQUlDIGxldmVsLiAqLw0KKwlBVDkxQ19CQVNFX0FJQy0+QUlDX0lFQ1IgPSAoMSA8PCBwb3J0VElNRVJfQUlDX0NIQU5ORUwpOw0KKw0KKwkvKiBDYWxjdWxhdGUgdGltZXIgY29tcGFyZSB2YWx1ZSB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHRpY2sgcmF0ZS4uLiAqLw0KKwlpZiggKGNvbmZpZ0NQVV9DTE9DS19IWiAvIChjb25maWdUSUNLX1JBVEVfSFogKiAyKSApIDw9IDB4RkZGRiApDQorCXsNCisJCS8qIFRoZSB0aWNrIHJhdGUgaXMgZmFzdCBlbm91Z2ggZm9yIHVzIHRvIHVzZSB0aGUgZmFzdGVyIHRpbWVyIGlucHV0DQorCQljbG9jayAobWFpbiBjbG9jayAvIDIpLiAqLw0KKwkJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfQ01SID0gVENfV0FWRSB8IFRDX0NMS1NfTUNLMiB8IFRDX0JVUlNUX05PTkUgfCBUQ19DUENUUkc7DQorCQlwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19SQyAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyAoY29uZmlnVElDS19SQVRFX0haICogMik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBXZSBtdXN0IHVzZSBhIHNsb3dlciB0aW1lciBpbnB1dCBjbG9jayAobWFpbiBjbG9jayAvIDgpIGJlY2F1c2UgdGhlDQorCQl0aWNrIHJhdGUgaXMgdG9vIHNsb3cgZm9yIHRoZSBmYXN0ZXIgaW5wdXQgY2xvY2suICovDQorCQlwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19DTVIgPSBUQ19XQVZFIHwgVENfQ0xLU19NQ0s4IHwgVENfQlVSU1RfTk9ORSB8IFRDX0NQQ1RSRzsNCisJCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1JDICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIChjb25maWdUSUNLX1JBVEVfSFogKiA4KTsNCisJfQ0KKw0KKwkvKiBTdGFydCB0aWNrIHRpbWVyLi4uICovDQorCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0NDUiA9IFRDX1NXVFJHIHwgVENfQ0xLRU47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0SVNSLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydElTUi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTljZTQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydElTUi5jCkBAIC0wLDAgKzEsMjcwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQorICogY29udGFpbmVkIGluIHBvcnQuYyAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSwgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKwlDaGFuZ2VzIGZyb20gVjMuMi40DQorDQorCSsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KKwkgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCisqLw0KKw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gKi8NCisjZGVmaW5lIHBvcnRDTEVBUl9BSUNfSU5URVJSVVBUCQkoICggdW5zaWduZWQgbG9uZyApIDAgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIElTUiB0byBoYW5kbGUgbWFudWFsIGNvbnRleHQgc3dpdGNoZXMgKGZyb20gYSBjYWxsIHRvIHRhc2tZSUVMRCgpKS4gKi8NCit2b2lkIHZQb3J0WWllbGRQcm9jZXNzb3IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQoIlNXSSIpLCBuYWtlZCkpOw0KKw0KKy8qIA0KKyAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBoZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMNCisgKiBmdW5jdGlvbiBoZXJlLg0KKyAqLw0KK3ZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApDQorew0KKwkvKiBTaW1wbHkgc3RhcnQgdGhlIHNjaGVkdWxlci4gIFRoaXMgaXMgaW5jbHVkZWQgaGVyZSBhcyBpdCBjYW4gb25seSBiZQ0KKwljYWxsZWQgZnJvbSBBUk0gbW9kZS4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIENhbGxlZCBieSBwb3J0WUlFTEQoKSBvciB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLg0KKyAqDQorICogV2hlbiBhIGNvbnRleHQgc3dpdGNoIGlzIHBlcmZvcm1lZCBmcm9tIHRoZSB0YXNrIGxldmVsIHRoZSBzYXZlZCB0YXNrIA0KKyAqIGNvbnRleHQgaXMgbWFkZSB0byBsb29rIGFzIGlmIGl0IG9jY3VycmVkIGZyb20gd2l0aGluIHRoZSB0aWNrIElTUi4gIFRoaXMNCisgKiB3YXkgdGhlIHNhbWUgcmVzdG9yZSBjb250ZXh0IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIHRoZSBjb250ZXh0DQorICogc2F2ZWQgZnJvbSB0aGUgSVNSIG9yIHRoYXQgc2F2ZWQgZnJvbSBhIGNhbGwgdG8gdlBvcnRZaWVsZFByb2Nlc3Nvci4NCisgKi8NCit2b2lkIHZQb3J0WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KK3sNCisJLyogV2l0aGluIGFuIElSUSBJU1IgdGhlIGxpbmsgcmVnaXN0ZXIgaGFzIGFuIG9mZnNldCBmcm9tIHRoZSB0cnVlIHJldHVybiANCisJYWRkcmVzcywgYnV0IGFuIFNXSSBJU1IgZG9lcyBub3QuICBBZGQgdGhlIG9mZnNldCBtYW51YWxseSBzbyB0aGUgc2FtZSANCisJSVNSIHJldHVybiBjb2RlIGNhbiBiZSB1c2VkIGluIGJvdGggY2FzZXMuICovDQorCWFzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiICk7DQorDQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQorDQorCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7CQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBUaGUgSVNSIHVzZWQgZm9yIHRoZSBzY2hlZHVsZXIgdGljayBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGNvb3BlcmF0aXZlIG9yDQorICogdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuDQorICovDQorDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisNCisJLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvIA0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiSVJRIikpKTsNCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7CQkNCisJc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJCS8qIENsZWFyIHRpY2sgdGltZXIgaW50ZXJydXB0IGluZGljYXRpb24uICovDQorCQl1bER1bW15ID0gcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfU1I7ICANCisNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKw0KKwkJLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBhdCBBSUMgbGV2ZWwuLi4gKi8NCisJCUFUOTFDX0JBU0VfQUlDLT5BSUNfRU9JQ1IgPSBwb3J0Q0xFQVJfQUlDX0lOVEVSUlVQVDsNCisJfQ0KKw0KKyNlbHNlICAvKiBlbHNlIHByZWVtcHRpb24gaXMgdHVybmVkIG9uICovDQorDQorCS8qIFRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBkZWZpbmVkIGFzICJuYWtlZCIgYXMgdGhlIGZ1bGwgY29udGV4dCBpcw0KKwlzYXZlZCBvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKwl2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUKCk7CQ0KKw0KKwkJLyogV0FSTklORyAtIERvIG5vdCB1c2UgbG9jYWwgKHN0YWNrKSB2YXJpYWJsZXMgaGVyZS4gIFVzZSBnbG9iYWxzDQorCQkJCQkgaWYgeW91IG11c3QhICovDQorCQlzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKw0KKwkJLyogQ2xlYXIgdGljayB0aW1lciBpbnRlcnJ1cHQgaW5kaWNhdGlvbi4gKi8NCisJCXVsRHVtbXkgPSBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19TUjsgIA0KKw0KKwkJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQsIHRoZW4gbG9vayBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgDQorCQl0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgYXQgQUlDIGxldmVsLi4uICovDQorCQlBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gcG9ydENMRUFSX0FJQ19JTlRFUlJVUFQ7DQorDQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogVGhlIGludGVycnVwdCBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZS4gIFdoZW4NCisgKiBUSFVNQl9JTlRFUldPUksgaXMgZGVmaW5lZCB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucyBoZXJlIHRvDQorICogZW5zdXJlIGEgc3dpdGNoIHRvIEFSTSBtb2RlLiAgV2hlbiBUSFVNQl9JTlRFUldPUksgaXMgbm90IGRlZmluZWQgdGhlbg0KKyAqIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGluIHBvcnRtYWNyby5oIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KKyAqLw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisNCisJdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorDQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCWFzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQorCQkJDQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCisJew0KKwkJYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLwkNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovCQ0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCQkJCSovCQ0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovCQ0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQorDQorI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KKw0KKy8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQorZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KK2JlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCitpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkJCQkJCQkqLw0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCANCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJKi8NCisJCQlhc20gdm9sYXRpbGUgKCANCisJCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwkNCisJCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwkNCisJCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JDQorCQkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCQ0KKwkJCQkiTERNSUEJU1AhLCB7UjB9IiApOwkJCS8qIFBvcCBSMC4JCQkJCQkqLw0KKwkJfQ0KKwl9DQorfQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzFhYWUyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMjkwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKg0KKwlDaGFuZ2VzIGZyb20gVjMuMi4zDQorCQ0KKwkrIE1vZGlmaWVkIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgdG8gYWxsb3cgdXNlIHdpdGggR0NDIFY0LjAuMS4NCisNCisJQ2hhbmdlcyBmcm9tIFYzLjIuNA0KKw0KKwkrIFJlbW92ZWQgdGhlIHVzZSBvZiB0aGUgJTAgcGFyYW1ldGVyIHdpdGhpbiB0aGUgYXNzZW1ibGVyIG1hY3JvcyBhbmQgDQorCSAgcmVwbGFjZWQgdGhlbSB3aXRoIGhhcmQgY29kZWQgcmVnaXN0ZXJzLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGUNCisJICBhc3NlbWJsZXIgZG9lcyBub3Qgc2VsZWN0IHRoZSBsaW5rIHJlZ2lzdGVyIGFzIHRoZSB0ZW1wIHJlZ2lzdGVyIGFzDQorCSAgd2FzIG9jY2FzaW9uYWxseSBoYXBwZW5pbmcgcHJldmlvdXNseS4NCisNCisJKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQorCSAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjQuNS4wDQorDQorCSsgUmVtb3ZlZCB0aGUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpIG1hY3Jvcw0KKwkgIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggcG9ydFlJRUxEX0ZST01fSVNSKCkgbWFjcm8uICBBcHBsaWNhdGlvbiBjb2RlIA0KKwkgIHNob3VsZCBub3cgbWFrZSB1c2Ugb2YgdGhlIHBvcnRTQVZFX0NPTlRFWFQoKSBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCgpDQorCSAgbWFjcm9zIGFzIHBlciB0aGUgVjQuNS4xIGRlbW8gY29kZS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSB2b2xhdGlsZSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorDQorLyoNCisgKiBUaGVzZSBkZWZpbmUgdGhlIHRpbWVyIHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0aGUgdGljayBpbnRlcnJ1cHQuDQorICogVGhleSBhcmUgcHV0IGluIHRoaXMgZmlsZSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiAicG9ydC5jIg0KKyAqIGFuZCAicG9ydGlzci5jIi4NCisgKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFIJCUFUOTFDX0JBU0VfVEMwDQorI2RlZmluZSBwb3J0VElNRVJfQ0xLX0VOQUJMRV9CSVQJQVQ5MUNfUFNfVEMwDQorI2RlZmluZSBwb3J0VElNRVJfQUlDX0NIQU5ORUwJCSggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDQgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKg0KKyAqIHBvcnRSRVNUT1JFX0NPTlRFWFQsIHBvcnRSRVNUT1JFX0NPTlRFWFQsIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSDQorICogYW5kIHBvcnRFWElUX1NXSVRDSElOR19JU1IgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQVJNIG1vZGUsIGJ1dA0KKyAqIGFyZSBpbmNsdWRlZCBoZXJlIGZvciBlZmZpY2llbmN5LiAgQW4gYXR0ZW1wdCB0byBjYWxsIG9uZSBmcm9tDQorICogVEhVTUIgbW9kZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZSB0aW1lIGVycm9yLg0KKyAqLw0KKw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suICovCQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJXA0KKwkiTERSCQlSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlSMCwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCUxSLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gKi8JXA0KKwkvKiBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAqLwkJCQkJXA0KKwkiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiCVwNCisJIkxETUZECUxSISwge1IxfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RSCQlSMSwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suICovCQkJCQkJCQkJXA0KKwkiTERNRkQJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCSJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suICovCQkJCVwNCisJIkxETUZECUxSLCB7UjAtUjE0fV4JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8JCQkJCQkJCQlcDQorCSJMRFIJCUxSLCBbTFIsICMrNjBdCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLwlcDQorCS8qIGNvcnJlY3QgYWRkcmVzcy4gKi8JCQkJCQkJCQkJCQlcDQorCSJTVUJTCVBDLCBMUiwgIzQJCQkJCQkJCQkJCVxuXHQiCVwNCisJKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAqLwkJCQkJXA0KKwlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJXA0KKwkiU1RNREIJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8JCQkJCVwNCisJIlNUTURCCVNQLHtTUH1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglTUCwgU1AsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSJMRE1JQQlTUCEse1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suICovCQkJCQkJXA0KKwkiU1RNREIJUjAhLCB7TFJ9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuICovCQkJCVwNCisJIk1PVglMUiwgUjAJCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suICovCQkJXA0KKwkiTERNSUEJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suICovCQlcDQorCSJTVE1EQglMUix7UjAtTFJ9XgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVUIJTFIsIExSLCAjNjAJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gKi8JCQkJCQkJXA0KKwkiTVJTCVIwLCBTUFNSCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCSJMRFIJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gKi8JCQkJCQlcDQorCSJMRFIJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUglMUiwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQorDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorDQorLyoNCisgKiBUaGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAgV2hlbg0KKyAqIFRIVU1CX0lOVEVSV09SSyBpcyBkZWZpbmVkIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zIGluIA0KKyAqIHBvcnRJU1IuYyB0byBlbnN1cmUgYSBzd2l0Y2ggdG8gQVJNIG1vZGUuICBXaGVuIFRIVU1CX0lOVEVSV09SSyBpcyBub3QgDQorICogZGVmaW5lZCB0aGVuIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGhlcmUgLSBhcyBwZXIgb3RoZXIgcG9ydHMuDQorICovDQorDQorI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKw0KKwlleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCWV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJDQorI2Vsc2UNCisNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCVwNCisJCWFzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQkJXA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JXA0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JXA0KKwkJCSJPUlIJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCSovCVwNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwlcDQorCQkJIkxETUlBCVNQISwge1IwfQkJCSIgKQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCQkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJCVwNCisJCWFzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQkJXA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JXA0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JXA0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCVwNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwlcDQorCQkJIkxETUlBCVNQISwge1IwfQkJCSIgKQkvKiBQb3AgUjAuCQkJCQkJKi8NCisNCisjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvQVQ5MVNBTTdYMjU2LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL0FUOTFTQU03WDI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDI3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL0FUOTFTQU03WDI1Ni5oCkBAIC0wLDAgKzEsMjczMSBAQAorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQorLy8gIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisvLyAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCisvLyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCisvLyAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKy8vICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCisvLyAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KKy8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKy8vICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQorLy8gIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2LmgNCisvLyBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zDQorLy8gR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KQ0KKy8vIA0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQVQ5MVNBTTdYMjU2LnBsLzEuMTEvVHVlIE1heSAxMCAxMjoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU19TQU03WC5wbC8xLjMvVHVlIEZlYiAgMSAxNzowMTo0MyAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTdYLnBsLzEuMi9GcmkgTWF5IDIwIDE0OjEzOjA0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUE1DX1NBTTdYLnBsLzEuNC9UdWUgRmViICA4IDEzOjU4OjEwIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlNUQ19TQU03WC5wbC8xLjEvVHVlIEZlYiAgMSAxNjoxNjoyNiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VEUF9TQU03WC5wbC8xLjEvVHVlIE1heSAxMCAxMTozNTozNSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BXTV9TQU03WC5wbC8xLjEvVHVlIE1heSAxMCAxMTo1MzowNyAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FJQ182MDc1Qi5wbC8xLjMvRnJpIE1heSAyMCAxNDowMTozMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJT182MDU3QS5wbC8xLjIvVGh1IEZlYiAgMyAxMDoxODoyOCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JUVENfNjA4MUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTggMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSVRDXzYwNzlBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvV0RUQ182MDgwQS5wbC8xLjMvVHVlIE5vdiAgOSAxNDo0NDowMCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1ZSRUdfNjA4NUIucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MDU6NDggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QRENfNjA3NEMucGwvMS4yL1RodSBGZWIgIDMgMDg6NDg6NTQgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9EQkdVXzYwNTlELnBsLzEuMS9Nb24gSmFuIDMxIDEzOjE1OjMyIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJXzYwODhELnBsLzEuMy9GcmkgTWF5IDIwIDE0OjA4OjU5IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVVNfNjA4OUMucGwvMS4xL01vbiBKdWwgMTIgMTg6MjM6MjYgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TU0NfNjA3OEEucGwvMS4xL1R1ZSBKdWwgMTMgMDc6NDU6NDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9UV0lfNjA2MUEucGwvMS4xL1R1ZSBKdWwgMTMgMDc6Mzg6MDYgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9UQ182MDgyQS5wbC8xLjcvRnJpIE1hciAxMSAxMjo1MjoxNyAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0NBTl82MDE5Qi5wbC8xLjEvVHVlIE1hciAgOCAxMjo0MjoyMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0VNQUNCXzYxMTlBLnBsLzEuNS9UaHUgRmViICAzIDE1OjUyOjA0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDXzYwNTFDLnBsLzEuMS9GcmkgT2N0IDE3IDA5OjEyOjM4IDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUVTXzYxNDlBLnBsLzEuMTAvTW9uIEZlYiAgNyAwOTo0NDoyNSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RFUzNfNjE1MEEucGwvMS4xL01vbiBKYW4gMTcgMDg6MzQ6MzEgMjAwNS8vDQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjaWZuZGVmIEFUOTFTQU03WDI1Nl9IDQorI2RlZmluZSBBVDkxU0FNN1gyNTZfSA0KKw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZUyB7DQorCUFUOTFfUkVHCSBBSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JVlI7IAkvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JUFI7IAkvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfSUVDUjsgCS8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNDUjsgCS8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRENSOyAJLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZTUjsgCS8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0NV07IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzddOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX0NJRFI7IAkvLyBDaGlwIElEIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0VYSUQ7IAkvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9GTlRSOyAJLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFs0NV07IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDVbNTRdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9BX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ5WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTJbODVdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxM1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPQl9PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE0WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVVNSOyAJLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTdbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMThbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE5WzM0MV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDRFI7IAkvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENFUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENEUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDU1I7IAkvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyM1szXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDS1JbNF07IAkvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI1WzM2XTsgCS8vIA0KKwlBVDkxX1JFRwkgUlNUQ19SQ1I7IAkvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JTUjsgCS8vIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19STVI7IAkvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI2WzVdOyAJLy8gDQorCUFUOTFfUkVHCSBSVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVEFSOyAJLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElNUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJU1I7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJVlI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElJUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRENSOyAJLy8gV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRE1SOyAJLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRFNSOyAJLy8gV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI3WzVdOyAJLy8gDQorCUFUOTFfUkVHCSBWUkVHX01SOyAJLy8gVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfU1lTLCAqQVQ5MVBTX1NZUzsNCisNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUlDLCAqQVQ5MVBTX0FJQzsNCisNCisvLyAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMb3ctbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX1BPU0lUSVZFX0VER0UgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX05FR0FUSVZFX0VER0UgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorLy8gLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfTkZJUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgTkZJUSBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX0FJQ19OSVJRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQUlDKSBOSVJRIFN0YXR1cw0KKy8vIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfUFJPVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUlDKSBQcm90ZWN0aW9uIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQUlDKSBHZW5lcmFsIE1hc2sNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlwaGVyYWwgRE1BIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCisNCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVSB7DQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KKw0KKy8vIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUUlggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChEQkdVKSBSZXNldCBSZWNlaXZlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBSZWNlaXZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChEQkdVKSBSZXNldCBTdGF0dXMgQml0cw0KKy8vIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBDaGFubmVsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIFJYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgaW4gSlRBRw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGFyYWxsZWwgSW5wdXQgT3V0cHV0IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJTyB7DQorCUFUOTFfUkVHCSBQSU9fUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVVNSOyAJLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ1WzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUElPLCAqQVQ5MVBTX1BJTzsNCisNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DS0dSIHsNCisJQVQ5MV9SRUcJIENLR1JfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDS0dSX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQ0tHUl9QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorfSBBVDkxU19DS0dSLCAqQVQ5MVBTX0NLR1I7DQorDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1NDRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDS0dSKSBNYWluIENsb2NrIFJlYWR5DQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQNCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMQ09VTlQgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NVUwgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKENLR1IpIFBMTCBNdWx0aXBsaWVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMgew0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19QTUMsICpBVDkxUFNfUE1DOw0KKw0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDIHsNCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUlNUQywgKkFUOTFQU19SU1RDOw0KKw0KKy8vIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDIHsNCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUlRUQywgKkFUOTFQU19SVFRDOw0KKw0KKy8vIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRQUkVTICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1TICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElUQyB7DQorCUFUOTFfUkVHCSBQSVRDX1BJTVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVNSOyAJLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVZSOyAJLy8gUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJSVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCit9IEFUOTFTX1BJVEMsICpBVDkxUFNfUElUQzsNCisNCisvLyAtLS0tLS0tLSBQSVRDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVEVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0IEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFBJVENfUElTUiA6IChQSVRDIE9mZnNldDogMHg0KSBQZXJpb2RpYyBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVFMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFBJVENfUElWUiA6IChQSVRDIE9mZnNldDogMHg4KSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgMjApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19XRFRDIHsNCisJQVQ5MV9SRUcJIFdEVENfV0RDUjsgCS8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RNUjsgCS8vIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RTUjsgCS8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfV0RUQywgKkFUOTFQU19XRFRDOw0KKw0KKy8vIC0tLS0tLS0tIFdEVENfV0RDUiA6IChXRFRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19LRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNURU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFdEVEMpIFdhdGNoZG9nIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0REICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERCR0hMVCAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdA0KKy8vIC0tLS0tLS0tIFdEVENfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEVU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1ZSRUcgew0KKwlBVDkxX1JFRwkgVlJFR19NUjsgCS8vIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1ZSRUcsICpBVDkxUFNfVlJFRzsNCisNCisvLyAtLS0tLS0tLSBWUkVHX01SIDogKFZSRUcgT2Zmc2V0OiAweDApIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19WUkVHX1BTVERCWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIFN0YW5kYnkgTW9kZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfTUMgew0KKwlBVDkxX1JFRwkgTUNfUkNSOyAJLy8gTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQVNSOyAJLy8gTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19BQVNSOyAJLy8gTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyMV07IAkvLyANCisJQVQ5MV9SRUcJIE1DX0ZNUjsgCS8vIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0ZDUjsgCS8vIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0ZTUjsgCS8vIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfTUMsICpBVDkxUFNfTUM7DQorDQorLy8gLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgUmVtYXAgQ29tbWFuZCBCaXQNCisvLyAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1VOREFERCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0FCVFNaICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEFib3J0IFNpemUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSBCeXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBIYWxmLXdvcmQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoTUMpIFdvcmQNCisjZGVmaW5lIEFUOTFDX01DX0FCVFRZUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChNQykgRGF0YSBSZWFkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChNQykgRGF0YSBXcml0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoTUMpIENvZGUgRmV0Y2gNCisjZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0tLS0tLS0tIE1DX0ZNUiA6IChNQyBPZmZzZXQ6IDB4NjApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBGbGFzaCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChNQykgTG9jayBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChNQykgUHJvZ3JhbW1pbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoTUMpIE5vIEVyYXNlIEJlZm9yZSBQcm9ncmFtbWluZw0KKyNkZWZpbmUgQVQ5MUNfTUNfRldTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgRmxhc2ggV2FpdCBTdGF0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXINCisvLyAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNNRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChNQykgRmxhc2ggQ29tbWFuZA0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKE1DKSBTdGFydHMgdGhlIHByb2dyYW1taW5nIG9mIHRoIGVwYWdlIHNwZWNpZmllZCBieSBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0xPQ0sgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChNQykgVGhlIGxvY2sgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9VTkxPQ0sgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4KSAvLyAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoTUMpIFNldCBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhEKSAvLyAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYpIC8vIChNQykgU2V0IFNlY3VyaXR5IEJpdC4NCisjZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDgpIC8vIChNQykgUGFnZSBOdW1iZXINCisjZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5DQorLy8gLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1NFQ1VSSVRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoTUMpIFNlY3VyaXR5IEJpdCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0yICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk01ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MzICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M2ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKE1DKSBTZWN0b3IgOCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M5ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChNQykgU2VjdG9yIDkgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjcpIC8vIChNQykgU2VjdG9yIDExIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKE1DKSBTZWN0b3IgMTIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChNQykgU2VjdG9yIDE0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKE1DKSBTZWN0b3IgMTUgTG9jayBTdGF0dXMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TUEkgew0KKwlBVDkxX1JFRwkgU1BJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JEUjsgCS8vIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1REUjsgCS8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9DU1JbNF07IAkvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ4XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1BJLCAqQVQ5MVBTX1NQSTsNCisNCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgU1BJIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlDQorI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1BJKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgQ2xvY2sgUGhhc2UNCisjZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVCB7DQorCUFUOTFfUkVHCSBVU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JUT1I7IAkvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFRHUjsgCS8vIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1XTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfRklESTsgCS8vIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19ORVI7IAkvLyBOYiBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfSUY7IAkvLyBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19VU0FSVCwgKkFUOTFQU19VU0FSVDsNCisNCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVU0FSVCkgU3RhcnQgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVVNBUlQpIFN0b3AgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUVFRPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19TRU5EQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIFJlc2V0IEl0ZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX1JTVE5BQ0sgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUkVUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19EVFJESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBEaXNhYmxlDQorLy8gLS0tLS0tLS0gVVNfTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoVVNBUlQpIFVzYXJ0IG1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFVTQVJUKSBOb3JtYWwNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFVTQVJUKSBSUzQ4NQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChVU0FSVCkgTW9kZW0NCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDgpIC8vIChVU0FSVCkgSXJEQQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhDKSAvLyAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVU0FSVCkgZmRpdjENCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF81X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA2IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzdfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNyBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF84X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKFVTQVJUKSAxIHN0b3AgYml0DQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChVU0FSVCkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIEJpdCBPcmRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlDQorI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sNCisjZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KKy8vIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcNCisvLyAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfSU1SIDogKFVTQVJUIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19DVFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NTQyB7DQorCUFUOTFfUkVHCSBTU0NfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfQ01SOyAJLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUkNNUjsgCS8vIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkZNUjsgCS8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RDTVI7IAkvLyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEZNUjsgCS8vIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SSFI7IAkvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19USFI7IAkvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SU0hSOyAJLy8gUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UU0hSOyAJLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19TU0MsICpBVDkxUFNfU1NDOw0KKw0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgUmVjZWl2ZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNTQykgVHJhbnNtaXQgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChTU0MpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19SRk1SIDogKFNTQyBPZmZzZXQ6IDB4MTQpIFNTQyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfREFUTEVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgTG9vcCBNb2RlDQorI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QNCisjZGVmaW5lIEFUOTFDX1NTQ19EQVROQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIE91dHB1dCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOb25lIFJLIHBpbiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTmVnYXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19QT1NJVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBQb3NpdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0xPVyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBMb3cgZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ISUdIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgSGlnaCBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFRvZ2dsaW5nIGF0IGVhY2ggc3RhcnQgb2YgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTRURHRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBUcmFuc21pdCBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTU0MpIEVuZCBPZiBUcmFuc21pc3Npb24NCisjZGVmaW5lIEFUOTFDX1NTQ19UWEJVRkUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1NDKSBSZWNlaXZlIFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZSBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19TU0NfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJIHsNCisJQVQ5MV9SRUcJIFRXSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9NTVI7IAkvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfSUFEUjsgCS8vIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9DV0dSOyAJLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbM107IAkvLyANCisJQVQ5MV9SRUcJIFRXSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KK30gQVQ5MVNfVFdJLCAqQVQ5MVBTX1RXSTsNCisNCisvLyAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBTZW5kIGEgU1RBUlQgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfU1RPUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBEaXNhYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUV0kpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVFdJKSBJbnRlcm5hbCBEZXZpY2UgQWRkcmVzcyBTaXplDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl9OTyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVFdJKSBObyBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMV9CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRXSSkgT25lLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzJfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUV0kpIFR3by1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8zX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVFdJKSBUaHJlZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfTVJFQUQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0YgPDwgMTYpIC8vIChUV0kpIERldmljZSBBZGRyZXNzDQorLy8gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFRXSSkgQ2xvY2sgTG93IERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKFRXSSkgQ2xvY2sgSGlnaCBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0tESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAxNikgLy8gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUV0kpIFRyYW5zbWlzc2lvbiBDb21wbGV0ZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9SWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVFdJKSBSZWNlaXZlIGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRXSSkgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUV0kpIFVuZGVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19UV0lfTkFDSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRXSSkgTm90IEFja25vd2xlZGdlZA0KKy8vIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lNUiA6IChUV0kgT2Zmc2V0OiAweDJjKSBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUFdNQ19DSCB7DQorCUFUOTFfUkVHCSBQV01DX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DRFRZUjsgCS8vIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DUFJEUjsgCS8vIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NDTlRSOyAJLy8gQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NVUERSOyAJLy8gQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfUmVzZXJ2ZWRbM107IAkvLyBSZXNlcnZlZA0KK30gQVQ5MVNfUFdNQ19DSCwgKkFUOTFQU19QV01DX0NIOw0KKw0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3gNCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFs0XTsgCS8vIFBXTUMgQ2hhbm5lbA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KKw0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQg0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoUFdNQykgDQorLy8gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAyDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVURQIHsNCisJQVQ5MV9SRUcJIFVEUF9OVU07IAkvLyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9HTEJTVEFURTsgCS8vIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0ZBRERSOyAJLy8gRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSUNSOyAJLy8gSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9SU1RFUDsgCS8vIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9DU1JbNl07IAkvLyBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1syXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0ZEUls2XTsgCS8vIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzNdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfVFhWQzsgCS8vIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCit9IEFUOTFTX1VEUCwgKkFUOTFQU19VRFA7DQorDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAgMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVEUCkgRnJhbWUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfQ09ORkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgQ29uZmlndXJlZA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VTUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCisjZGVmaW5lIEFUOTFDX1VEUF9STVdVUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIEZ1bmN0aW9uIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhTVVNQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVURQKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1NPRklOVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JTVIgOiAoVURQIE9mZnNldDogMHgxOCkgVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAxDQorI2RlZmluZSBBVDkxQ19VRFBfRVAyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDMNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA0DQorI2RlZmluZSBBVDkxQ19VRFBfRVA1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNQ0KKy8vIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQkswICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9UWFBLVFJEWSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuDQorI2RlZmluZSBBVDkxQ19VRFBfRElSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFVEUCkgQ29udHJvbA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVURQKSBCdWxrIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChVRFApIEJ1bGsgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBJTg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVRFApIERhdGEgVG9nZ2xlDQorI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTYpIC8vIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCisvLyAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1BVT04gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVRFApIFB1bGwtdXAgT04NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQyB7DQorCUFUOTFfUkVHCSBUQ19DQ1I7IAkvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVENfQ1Y7IAkvLyBDb3VudGVyIFZhbHVlDQorCUFUOTFfUkVHCSBUQ19SQTsgCS8vIFJlZ2lzdGVyIEENCisJQVQ5MV9SRUcJIFRDX1JCOyAJLy8gUmVnaXN0ZXIgQg0KKwlBVDkxX1JFRwkgVENfUkM7IAkvLyBSZWdpc3RlciBDDQorCUFUOTFfUkVHCSBUQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19UQywgKkFUOTFQU19UQzsNCisNCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX0NMS0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoVEMpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFJBIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVEMpIFJBIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIENsb2NrIEVuYWJsaW5nDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQ0Igew0KKwlBVDkxU19UQwkgVENCX1RDMDsgCS8vIFRDIENoYW5uZWwgMA0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMxOyAJLy8gVEMgQ2hhbm5lbCAxDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MVNfVEMJIFRDQl9UQzI7IAkvLyBUQyBDaGFubmVsIDINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0XTsgCS8vIA0KKwlBVDkxX1JFRwkgVENCX0JDUjsgCS8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDQl9CTVI7IAkvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19UQ0IsICpBVDkxUFNfVENCOw0KKw0KKy8vIC0tLS0tLS0tIFRDQl9CQ1IgOiAoVENCIE9mZnNldDogMHhjMCkgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9TWU5DICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RDTEsxICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NBTl9NQiB7DQorCUFUOTFfUkVHCSBDQU5fTUJfTU1SOyAJLy8gTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUFNOyAJLy8gTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NSUQ7IAkvLyBNYWlsQm94IElEIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUZJRDsgCS8vIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTVNSOyAJLy8gTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NREw7IAkvLyBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURIOyAJLy8gTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NQ1I7IAkvLyBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCit9IEFUOTFTX0NBTl9NQiwgKkFUOTFQU19DQU5fTUI7DQorDQorLy8gLS0tLS0tLS0gQ0FOX01NUiA6IChDQU5fTUIgT2Zmc2V0OiAweDApIENBTiBNZXNzYWdlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTl9NQikgTWFpbGJveCBUaW1lbWFyaw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BSSU9SICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggUHJpb3JpdHkNCisjZGVmaW5lIEFUOTFDX0NBTl9NT1QgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyNCkgLy8gKENBTl9NQikgDQorLy8gLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkZGRiA8PCAgMCkgLy8gKENBTl9NQikgQ29tcGxlbWVudGFyeSBiaXRzIGZvciBpZGVudGlmaWVyIGluIGV4dGVuZGVkIG1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QSAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTgpIC8vIChDQU5fTUIpIElkZW50aWZpZXIgZm9yIHN0YW5kYXJkIGZyYW1lIG1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9NSURFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIFZlcnNpb24NCisvLyAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01GSUQgOiAoQ0FOX01CIE9mZnNldDogMHhjKSBDQU4gTWVzc2FnZSBGYW1pbHkgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVTVEFNUCAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTl9NQikgVGltZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX0NBTl9NRExDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IERhdGEgTGVuZ3RoIENvZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9NUlRSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBBYm9ydA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX0NBTl9NTUkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgSWdub3JlZA0KKy8vIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01ESCA6IChDQU5fTUIgT2Zmc2V0OiAweDE4KSBDQU4gTWVzc2FnZSBEYXRhIEhpZ2ggUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQ1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChDQU5fTUIpIEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3gNCisjZGVmaW5lIEFUOTFDX0NBTl9NVENSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFRyYW5zZmVyIENvbW1hbmQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NBTiB7DQorCUFUOTFfUkVHCSBDQU5fTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0JSOyAJLy8gQmF1ZHJhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9USU07IAkvLyBUaW1lciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTUVTVFA7IAkvLyBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fRUNSOyAJLy8gRXJyb3IgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RDUjsgCS8vIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9BQ1I7IAkvLyBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNTJdOyAJLy8gDQorCUFUOTFfUkVHCSBDQU5fVlI7IAkvLyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNjRdOyAJLy8gDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMDsgCS8vIENBTiBNYWlsYm94IDANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxOyAJLy8gQ0FOIE1haWxib3ggMQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjI7IAkvLyBDQU4gTWFpbGJveCAyDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMzsgCS8vIENBTiBNYWlsYm94IDMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI0OyAJLy8gQ0FOIE1haWxib3ggNA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjU7IAkvLyBDQU4gTWFpbGJveCA1DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNjsgCS8vIENBTiBNYWlsYm94IDYNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI3OyAJLy8gQ0FOIE1haWxib3ggNw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjg7IAkvLyBDQU4gTWFpbGJveCA4DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01COTsgCS8vIENBTiBNYWlsYm94IDkNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMDsgCS8vIENBTiBNYWlsYm94IDEwDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTE7IAkvLyBDQU4gTWFpbGJveCAxMQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEyOyAJLy8gQ0FOIE1haWxib3ggMTINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMzsgCS8vIENBTiBNYWlsYm94IDEzDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTQ7IAkvLyBDQU4gTWFpbGJveCAxNA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE1OyAJLy8gQ0FOIE1haWxib3ggMTUNCit9IEFUOTFTX0NBTiwgKkFUOTFQU19DQU47DQorDQorLy8gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIE1haWxib3ggMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgTWFpbGJveCAxIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIE1haWxib3ggMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgTWFpbGJveCA0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIE1haWxib3ggNiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKENBTikgTWFpbGJveCA3IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChDQU4pIE1haWxib3ggOSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKENBTikgTWFpbGJveCAxMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKENBTikgTWFpbGJveCAxMiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKENBTikgTWFpbGJveCAxMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKENBTikgTWFpbGJveCAxNSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKENBTikgV2FrZXVwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBDUkMgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKENBTikgRm9ybSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKENBTikgVHJhbnNtaXR0ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChDQU4pIFBoYXNlIDEgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChDQU4pIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoQ0FOKSBCYXVkcmF0ZSBQcmVzY2FsZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TTVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBTYW1wbGluZyBtb2RlDQorLy8gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQorLy8gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfRU1BQyB7DQorCUFUOTFfUkVHCSBFTUFDX05DUjsgCS8vIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19OQ0ZHUjsgCS8vIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19OU1I7IAkvLyBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBFTUFDX1RTUjsgCS8vIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SQlFQOyAJLy8gUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKwlBVDkxX1JFRwkgRU1BQ19UQlFQOyAJLy8gVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlNSOyAJLy8gUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX01BTjsgCS8vIFBIWSBNYWludGVuYW5jZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QVFI7IAkvLyBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1BGUjsgCS8vIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GVE87IAkvLyBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU0NGOyAJLy8gU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQ0Y7IAkvLyBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlJPOyAJLy8gRnJhbWVzIFJlY2VpdmVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZDU0U7IAkvLyBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19BTEU7IAkvLyBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRFRGOyAJLy8gRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0xDT0w7IAkvLyBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19FQ09MOyAJLy8gRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19UVU5EOyAJLy8gVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQ1NFOyAJLy8gQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SUkU7IAkvLyBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19ST1Y7IAkvLyBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTRTsgCS8vIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19FTEU7IAkvLyBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SSkE7IAkvLyBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNGOyAJLy8gVW5kZXJzaXplIEZyYW1lcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19TVEU7IAkvLyBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19STEU7IAkvLyBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19UUEY7IAkvLyBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSFJCOyAJLy8gSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKwlBVDkxX1JFRwkgRU1BQ19IUlQ7IAkvLyBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXQ0KKwlBVDkxX1JFRwkgRU1BQ19TQTFMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTFIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBMkw7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBMkg7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EzTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EzSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTRMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTRIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1RJRDsgCS8vIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBROyAJLy8gVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19VU1JJTzsgCS8vIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1dPTDsgCS8vIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMTNdOyAJLy8gDQorCUFUOTFfUkVHCSBFTUFDX1JFVjsgCS8vIFJldmlzaW9uIFJlZ2lzdGVyDQorfSBBVDkxU19FTUFDLCAqQVQ5MVBTX0VNQUM7DQorDQorLy8gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4NCisjZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgTG9vcGJhY2sgbG9jYWwuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTFJTVEFUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lOQ1NUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNUQVJUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUEZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFpRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lDQorLy8gLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIFNwZWVkLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRkQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgRnVsbCBkdXBsZXguIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19KRlJBTUUgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBKdW1ibyBGcmFtZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBDb3B5IGFsbCBmcmFtZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSBObyBicm9hZGNhc3QuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgVW5pY2FzdCBoYXNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JJRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIEV4dGVybmFsIGFkZHJlc3MgbWF0Y2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoRU1BQykgDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS184ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfMzIgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzY0ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0DQorI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJPRiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoRU1BQykgDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChFTUFDKSBubyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoRU1BQykgb25lIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoRU1BQykgdGhyZWUgYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxDRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIERpc2NhcmQgUmVjZWl2ZSBGQ1MNCisjZGVmaW5lIEFUOTFDX0VNQUNfRUZSSEQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lSWEZDUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEVNQUMpIElnbm9yZSBSWCBGQ1MNCisvLyAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX01ESU8gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBHbw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CRVggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBCdWZmZXJzIGV4aGF1c3RlZCBtaWQgZnJhbWUNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09NUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQk5BICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTUZEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhVQlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RVTkRSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhFUlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk9WUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSRVNQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRaICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JRFIgOiAoRU1BQyBPZmZzZXQ6IDB4MmMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFR0EgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEhZQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAyMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU09GICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19VU1JJTyA6IChFTUFDIE9mZnNldDogMHhjMCkgVVNFUiBJbnB1dCBPdXRwdXQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JNSUkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIFJlZHVjZSBNSUkNCisvLyAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19BUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZQ0KKy8vIC0tLS0tLS0tIEVNQUNfUkVWIDogKEVNQUMgT2Zmc2V0OiAweGZjKSBSZXZpc2lvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWUkVGICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBUlRSRUYgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAxNikgLy8gKEVNQUMpIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDIHsNCisJQVQ5MV9SRUcJIEFEQ19DUjsgCS8vIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfTVI7IAkvLyBBREMgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfQ0hFUjsgCS8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIRFI7IAkvLyBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0hTUjsgCS8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1NSOyAJLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0xDRFI7IAkvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lFUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSURSOyAJLy8gQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSU1SOyAJLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0RSMDsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKwlBVDkxX1JFRwkgQURDX0NEUjE7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisJQVQ5MV9SRUcJIEFEQ19DRFIyOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorCUFUOTFfUkVHCSBBRENfQ0RSMzsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKwlBVDkxX1JFRwkgQURDX0NEUjQ7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisJQVQ5MV9SRUcJIEFEQ19DRFI1OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorCUFUOTFfUkVHCSBBRENfQ0RSNjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKwlBVDkxX1JFRwkgQURDX0NEUjc7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NF07IAkvLyANCisJQVQ5MV9SRUcJIEFEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FEQywgKkFUOTFQU19BREM7DQorDQorLy8gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDEpIC8vIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQURDKSBOb3JtYWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0YgPDwgIDgpIC8vIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUNCisvLyAtLS0tLS0tLSAJQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIENoYW5uZWwgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIENoYW5uZWwgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFEQykgRGF0YSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIENvbnZlcnRlZCBEYXRhDQorLy8gLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIyIDogKEFEQyBPZmZzZXQ6IDB4MzgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI1IDogKEFEQyBPZmZzZXQ6IDB4NDQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19BRVMgew0KKwlBVDkxX1JFRwkgQUVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfS0VZV3hSWzRdOyAJLy8gS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfSURBVEF4Uls0XTsgCS8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX09EQVRBeFJbNF07IAkvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSVZ4Uls0XTsgCS8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMzVdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfVlI7IAkvLyBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUVTLCAqQVQ5MVBTX0FFUzsNCisNCisvLyAtLS0tLS0tLSBBRVNfQ1IgOiAoQUVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19BRVNfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FFU19MT0FEU0VFRCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQUVTKSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBTZWVkIExvYWRpbmcNCisvLyAtLS0tLS0tLSBBRVNfTVIgOiAoQUVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NJUEhFUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDQpIC8vIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkNCisjZGVmaW5lIEFUOTFDX0FFU19TTU9EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoQUVTKSBTdGFydCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQUVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChBRVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX09QTU9EICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTIpIC8vIChBRVMpIENUUiBDb3VudGVyIG1vZGUuDQorI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKEFFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19BRVNfQ0ZCUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAxNikgLy8gKEFFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzEyOF9CSVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChBRVMpIDEyOC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfNjRfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzMyX0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChBRVMpIDMyLWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoQUVTKSAxNi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxNikgLy8gKEFFUykgOC1iaXQuDQorI2RlZmluZSBBVDkxQ19BRVNfQ0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyMCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgS2V5DQorI2RlZmluZSBBVDkxQ19BRVNfQ1RZUEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAxIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUyX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMiBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFM19FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA0IGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU1X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEwIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDUgaXMgZW5hYmxlZC4NCisvLyAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfREFUUkRZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFFUykgREFUUkRZDQorI2RlZmluZSBBVDkxQ19BRVNfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFRYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19BRVNfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX0FFU19UWEJVRkUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19BRVNfVVJBRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lNUiA6IChBRVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfVVJBVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAxMikgLy8gKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfU1VCS0VZICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX1NVQktFWSAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMTIpIC8vIChBRVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVERFUyB7DQorCUFUOTFfUkVHCSBUREVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMVd4UlsyXTsgCS8vIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkyV3hSWzJdOyAJLy8gS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTNXeFJbMl07IAkvLyBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JREFUQXhSWzJdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfT0RBVEF4UlsyXTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1syXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JVnhSWzJdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszN107IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfVlI7IAkvLyBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19UREVTLCAqQVQ5MVBTX1RERVM7DQorDQorLy8gLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUREVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfVERFU19TV1JTVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUREVTKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRERVNfTVIgOiAoVERFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfQ0lQSEVSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1RERVNNT0QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRERVMpIFNpbmdsZSBvciBUcmlwbGUgREVTIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZTU9EICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVERFUykgS2V5IE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfU01PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVERFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRERVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PUE1PRCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfRUNCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKFRERVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFRERVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0NGQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSBBVDkxQ19UREVTX0xPRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19DRkJTICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUREVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzMyX0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUREVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUREVTKSAxNi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUREVTKSA4LWJpdC4NCisvLyAtLS0tLS0tLSBUREVTX0lFUiA6IChUREVTIE9mZnNldDogMHgxMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgREFUUkRZDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFJYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX1RERVNfRU5EVFggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1RERVNfVFhCVUZFICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19VUkFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSU1SIDogKFRERVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lTUiA6IChUREVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUREVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFRERVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNZUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lWUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDApIC8vIChBSUMpIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDQpIC8vIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTM4KSAvLyAoQUlDKSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0VPSUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzApIC8vIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYwODApIC8vIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQ4KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyOCkgLy8gKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjExMCkgLy8gKEFJQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTBDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDApIC8vIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRUNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTIwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU0NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTJDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQ0KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0NJU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTQpIC8vIChBSUMpIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lEQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjQpIC8vIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTM0KSAvLyAoQUlDKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19EQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzBDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzEwKSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMjApIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzI0KSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzFDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX0VYSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0NCkgLy8gKERCR1UpIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0JSR1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIyMCkgLy8gKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjBDKSAvLyAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE0KSAvLyAoREJHVSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ0lEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQwKSAvLyAoREJHVSkgQ2hpcCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDQpIC8vIChEQkdVKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxMCkgLy8gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQ4KSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVEhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjFDKSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTgpIC8vIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwOCkgLy8gKERCR1UpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0EgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTQpIC8vIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDMwKSAvLyAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0QykgLy8gKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc4KSAvLyAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDApIC8vIChQSU9BKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjApIC8vIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQ4KSAvLyAoUElPQSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUEVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDAwKSAvLyAoUElPQSkgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjQpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTQpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTgpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0NCkgLy8gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzOCkgLy8gKFBJT0EpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY4KSAvLyAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE4KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzQpIC8vIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTApIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyMCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDNDKSAvLyAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjQpIC8vIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTgpIC8vIChQSU9BKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3MCkgLy8gKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ1NCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzNCkgLy8gKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ1MCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDA0KSAvLyAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI4KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTApIC8vIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwOCkgLy8gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTQpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTApIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjgpIC8vIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDgpIC8vIChQSU9CKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzApIC8vIChQSU9CKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjYwKSAvLyAoUElPQikgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwOCkgLy8gKFBJT0IpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQwKSAvLyAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzQpIC8vIChQSU9CKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV0VSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTApIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY3OCkgLy8gKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjI0KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUERTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjNDKSAvLyAoUElPQikgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0NCkgLy8gKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjZBOCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUERSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjA0KSAvLyAoUElPQikgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE0KSAvLyAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyOCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2NCkgLy8gKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzMCkgLy8gKFBJT0IpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NEMpIC8vIChQSU9CKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzOCkgLy8gKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MTgpIC8vIChQSU9CKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY1OCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjIwKSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzQpIC8vIChQSU9CKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTQpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MTApIC8vIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwMCkgLy8gKFBJT0IpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoQ0tHUikgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzY0KSAvLyAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjApIC8vIChQTUMpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BMTFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMkMpIC8vIChQTUMpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTApIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENLUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM0MCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMzMCkgLy8gKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwNCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzE0KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzA4KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxOCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0ZSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzI0KSAvLyAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzAwKSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2QykgLy8gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzYwKSAvLyAoUE1DKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2OCkgLy8gKFBNQykgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JTVENfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDAwKSAvLyAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19STVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDgpIC8vIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwNCkgLy8gKFJTVEMpIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyQykgLy8gKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRWUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDI4KSAvLyAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUQVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyNCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzOCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzQpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzQykgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzApIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQ4KSAvLyAoV0RUQykgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dETVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0NCkgLy8gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENjApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwNCkgLy8gKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX1JDUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjAwKSAvLyAoTUMpIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjY0KSAvLyAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FBU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjA4KSAvLyAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2OCkgLy8gKE1DKSBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZNUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjYwKSAvLyAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTIwKSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTFDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDgpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTgpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEwQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEwNCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTEwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExNCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMjQpIC8vIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxQykgLy8gKFNQSTEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxNCkgLy8gKFNQSTEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA0KSAvLyAoU1BJMSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMDgpIC8vIChTUEkxKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDE4KSAvLyAoU1BJMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDEwKSAvLyAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwQykgLy8gKFNQSTEpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDAwKSAvLyAoU1BJMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMzApIC8vIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMjApIC8vIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTA4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTBDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTA0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMjQpIC8vIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTApIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMUMpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDE0KSAvLyAoU1BJMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTApIC8vIChTUEkwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDE4KSAvLyAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDAwKSAvLyAoU1BJMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDQpIC8vIChTUEkwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxQykgLy8gKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwQykgLy8gKFNQSTApIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA4KSAvLyAoU1BJMCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAzMCkgLy8gKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTE0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTIwKSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTBDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMjQpIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDQpIC8vIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTEwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNEMpIC8vIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTkVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0NCkgLy8gKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyNCkgLy8gKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDE0KSAvLyAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMEMpIC8vIChVUzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwOCkgLy8gKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMUMpIC8vIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UVEdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDI4KSAvLyAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxOCkgLy8gKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjApIC8vIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDEwKSAvLyAoVVMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0ZJREkgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDApIC8vIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDQpIC8vIChVUzEpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTEwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTBDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMjApIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMjQpIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfQlJHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyMCkgLy8gKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwNDQpIC8vIChVUzApIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDApIC8vIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDEwKSAvLyAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwNDApIC8vIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyOCkgLy8gKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDQpIC8vIChVUzApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDI0KSAvLyAoVVMwKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTQpIC8vIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxOCkgLy8gKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMEMpIC8vIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxQykgLy8gKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lGICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwNEMpIC8vIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwOCkgLy8gKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTA4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMjApIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMEMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTApIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTI0KSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDIwKSAvLyAoU1NDKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SU0hSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDMwKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMUMpIC8vIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ4KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMjQpIC8vIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDEwKSAvLyAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDQpIC8vIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UU0hSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDM0KSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQwKSAvLyAoU1NDKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDA0KSAvLyAoU1NDKSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxOCkgLy8gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMDApIC8vIChTU0MpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDRDKSAvLyAoU1NDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JGTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTQpIC8vIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RXSV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI0KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwMCkgLy8gKFRXSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjApIC8vIChUV0kpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMkMpIC8vIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAzNCkgLy8gKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjgpIC8vIChUV0kpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwQykgLy8gKFRXSSkgSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDQpIC8vIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAxMCkgLy8gKFRXSSkgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAzMCkgLy8gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjcwKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjc0KSAvLyAoUFdNQ19DSDMpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjY4KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjY0KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2QykgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI1NCkgLy8gKFBXTUNfQ0gyKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ01SICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjRDKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0OCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI1MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0NCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMzQpIC8vIChQV01DX0NIMSkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMzApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMjgpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMkMpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI0KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ01SICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjE0KSAvLyAoUFdNQ19DSDApIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjA4KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjA0KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjEwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjBDKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxNCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRElTICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDA4KSAvLyAoUFdNQykgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxMCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwRkMpIC8vIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDFDKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwQykgLy8gKFBXTUMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxOCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDAwKSAvLyAoUFdNQykgUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0VOQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwNCkgLy8gKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVRFAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMTgpIC8vIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwOCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX05VTSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDApIC8vIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNTApIC8vIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMUMpIC8vIChVRFApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDMwKSAvLyAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE0KSAvLyAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMjApIC8vIChVRFApIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTVEVQICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMjgpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDA3NCkgLy8gKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0dMQlNUQVRFICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDQpIC8vIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMTApIC8vIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyMCkgLy8gKFRDMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxQykgLy8gKFRDMCkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMTgpIC8vIChUQzApIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDA0KSAvLyAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyNCkgLy8gKFRDMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMTQpIC8vIChUQzApIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDI4KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMTApIC8vIChUQzApIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDJDKSAvLyAoVEMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU4KSAvLyAoVEMxKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzFfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2NCkgLy8gKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjgpIC8vIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2MCkgLy8gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA0NCkgLy8gKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTQpIC8vIChUQzEpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDVDKSAvLyAoVEMxKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2QykgLy8gKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDUwKSAvLyAoVEMxKSBDb3VudGVyIFZhbHVlDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwODQpIC8vIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDgwKSAvLyAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDkwKSAvLyAoVEMyKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzJfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5NCkgLy8gKFRDMikgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTgpIC8vIChUQzIpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE4KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQUMpIC8vIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5QykgLy8gKFRDMikgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTQpIC8vIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEEwKSAvLyAoVEMyKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQ0JfQk1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBDNCkgLy8gKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzApIC8vIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIxNCkgLy8gKENBTl9NQjApIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDQpIC8vIChDQU5fTUIwKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIxQykgLy8gKENBTl9NQjApIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwOCkgLy8gKENBTl9NQjApIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTApIC8vIChDQU5fTUIwKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMEMpIC8vIChDQU5fTUIwKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIxOCkgLy8gKENBTl9NQjApIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzQpIC8vIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjI4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzMCkgLy8gKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjI0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzgpIC8vIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzQykgLy8gKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMkMpIC8vIChDQU5fTUIxKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjVDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjU4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDgpIC8vIChDQU5fTUIyKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjU0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI0NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI0QykgLy8gKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjUwKSAvLyAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNkMpIC8vIChDQU5fTUIzKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjY4KSAvLyAoQ0FOX01CMykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3QykgLy8gKENBTl9NQjMpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3MCkgLy8gKENBTl9NQjMpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjc0KSAvLyAoQ0FOX01CMykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI0IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyODgpIC8vIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjk4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjhDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTApIC8vIChDQU5fTUI0KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5QykgLy8gKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyODQpIC8vIChDQU5fTUI0KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkIwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQkMpIC8vIChDQU5fTUI1KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkFDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQjgpIC8vIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTApIC8vIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQjQpIC8vIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkE0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQ0MpIC8vIChDQU5fTUI2KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDOCkgLy8gKENBTl9NQjYpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzQpIC8vIChDQU5fTUI2KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJEMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkQ0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJEQykgLy8gKENBTl9NQjYpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJEOCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI3IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRkMpIC8vIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjgpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRUMpIC8vIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRTgpIC8vIChDQU5fTUI3KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjApIC8vIChDQU5fTUI3KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI0KSAvLyAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwQykgLy8gKENBTikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDA0KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fRUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyMCkgLy8gKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxQykgLy8gKENBTikgVGltZSBTdGFtcCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMDApIC8vIChDQU4pIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDA4KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjgpIC8vIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU0gICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE4KSAvLyAoQ0FOKSBUaW1lciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMTApIC8vIChDQU4pIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMTQpIC8vIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDBGQykgLy8gKENBTikgVmVyc2lvbiBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgRU1BQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAyNCkgLy8gKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEI0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUwgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5OCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfRUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDc4KSAvLyAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDVDKSAvLyAoRU1BQykgTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDg4KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfV09MICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEM0KSAvLyAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU4KSAvLyAoRU1BQykgRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RVTkQgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA2NCkgLy8gKEVNQUMpIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAwMCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAyMCkgLy8gKEVNQUMpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBOCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDE0KSAvLyAoRU1BQykgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAyQykgLy8gKEVNQUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JTRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3NCkgLy8gKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjApIC8vIChFTUFDKSBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RJRCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCOCkgLy8gKEVNQUMpIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJCICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDkwKSAvLyAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMUMpIC8vIChFTUFDKSBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU1JJTyAoKEFUOTFfUkVHICopIAkweEZGRkRDMEMwKSAvLyAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDM4KSAvLyAoRU1BQykgUGF1c2UgVGltZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUk9WICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDcwKSAvLyAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNTQpIC8vIChFTUFDKSBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkpBICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDdDKSAvLyAoRU1BQykgUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCUVAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxOCkgLy8gKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDhDKSAvLyAoRU1BQykgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05DRkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDQpIC8vIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDk0KSAvLyAoRU1BQykgSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNGICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDgwKSAvLyAoRU1BQykgVW5kZXJzaXplIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GQ1NFICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNTApIC8vIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQkMpIC8vIChFTUFDKSBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01BTiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzNCkgLy8gKEVNQUMpIFBIWSBNYWludGVuYW5jZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GVE8gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNDApIC8vIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEZDKSAvLyAoRU1BQykgUmV2aXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDMwKSAvLyAoRU1BQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0NGICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQ0KSAvLyAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwM0MpIC8vIChFTUFDKSBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUNGICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQ4KSAvLyAoRU1BQykgTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAwOCkgLy8gKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfRlJPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDRDKSAvLyAoRU1BQykgRnJhbWVzIFJlY2VpdmVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAyOCkgLy8gKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDlDKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0NTRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA2OCkgLy8gKEVNQUMpIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EzSCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEFDKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA2QykgLy8gKEVNQUMpIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NURSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4NCkgLy8gKEVNQUMpIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTI0KSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMjApIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTgpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTFDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMEMpIC8vIChQRENfQURDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTA0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwM0MpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjUgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTQpIC8vIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDFDKSAvLyAoQURDKSBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0MCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorI2RlZmluZSBBVDkxQ19BRENfTENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyMCkgLy8gKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI4KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjcgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNEMpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjYgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjQpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxOCkgLy8gKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwNCkgLy8gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDJDKSAvLyAoQURDKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDgpIC8vIChQRENfQUVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEyMCkgLy8gKFBEQ19BRVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExQykgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMEMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTQpIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTgpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEyNCkgLy8gKFBEQ19BRVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRVNfSVZ4UiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDA2MCkgLy8gKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDA0KSAvLyAoQUVTKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVlIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDBGQykgLy8gKEFFUykgQUVTIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19PREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNTApIC8vIChBRVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNDApIC8vIChBRVMpIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMDApIC8vIChBRVMpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE0KSAvLyAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTgpIC8vIChBRVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxMCkgLy8gKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDIwKSAvLyAoQUVTKSBLZXkgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxQykgLy8gKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVERFU19STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTBDKSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTA0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExMCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMDApIC8vIChQRENfVERFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTA4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTI0KSAvLyAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTIwKSAvLyAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDI4KSAvLyAoVERFUykgS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTNXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAzMCkgLy8gKFRERVMpIEtleSAzIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMTQpIC8vIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwRkMpIC8vIChUREVTKSBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVZ4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDYwKSAvLyAoVERFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDUwKSAvLyAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMTgpIC8vIChUREVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDQpIC8vIChUREVTKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAwMCkgLy8gKFRERVMpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDEwKSAvLyAoVERFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMUMpIC8vIChUREVTKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lEQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA0MCkgLy8gKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMjApIC8vIChUREVTKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEwKSAvLyAgVVNBUlQgMCBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMSkgLy8gIFVTQVJUIDAgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfVFdEICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEwKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMQ0KKyNkZWZpbmUgQVQ5MUNfUEExMV9UV0NLICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTEpIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMg0KKyNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTIpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorI2RlZmluZSBBVDkxQ19QQTEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTMpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNA0KKyNkZWZpbmUgQVQ5MUNfUEExNF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BBMTRfSVJRMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE1DQorI2RlZmluZSBBVDkxQ19QQTE1X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorI2RlZmluZSBBVDkxQ19QQTE2X01JU08wICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNikgLy8gIFNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcNCisjZGVmaW5lIEFUOTFDX1BBMTdfTU9TSTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE3KSAvLyAgU1BJIDAgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTgNCisjZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE4KSAvLyAgU1BJIDAgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KKyNkZWZpbmUgQVQ5MUNfUEExOV9DQU5SWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTkpIC8vICBDQU4gUmVjZWl2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIwKSAvLyAgQ0FOIFRyYW5zbWl0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9URiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjEpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9OUENTMTAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNTQyBUcmFuc21pdCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9TUENLMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMykgLy8gIFNTQyBUcmFuc21pdCBkYXRhDQorI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMykgLy8gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI0DQorI2RlZmluZSBBVDkxQ19QQTI0X1JEICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNCkgLy8gIFNTQyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBMjRfTUlTTzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1BJIDEgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjUpIC8vICBTU0MgUmVjZWl2ZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjUpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNw0KKyNkZWZpbmUgQVQ5MUNfUEEyN19EUlhEICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjcpIC8vICBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyN19QQ0szICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjcpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjgpIC8vICBEQkdVIERlYnVnIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMNCisjZGVmaW5lIEFUOTFDX1BBM19SVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KKyNkZWZpbmUgQVQ5MUNfUEE1X1JYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE1KSAvLyAgVVNBUlQgMSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTYgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNw0KKyNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KKyNkZWZpbmUgQVQ5MUNfUEE4X1JUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQThfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTkgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTkNCisjZGVmaW5lIEFUOTFDX1BBOV9DVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIwDQorI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCisjZGVmaW5lIEFUOTFDX1BCMTBfRVRYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjExDQorI2RlZmluZSBBVDkxQ19QQjExX0VUWDMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMNCisjZGVmaW5lIEFUOTFDX1BCMTFfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9FVFhFUiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTIpIC8vICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorI2RlZmluZSBBVDkxQ19QQjEzX0VSWDIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE0DQorI2RlZmluZSBBVDkxQ19QQjE0X0VSWDMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxNF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE1DQorI2RlZmluZSBBVDkxQ19QQjE1X0VSWERWICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNikgLy8gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BCMTZfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNw0KKyNkZWZpbmUgQVQ5MUNfUEIxN19FUlhDSyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIxN19OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTcpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE4DQorI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOCkgLy8gIEV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMvc2VjDQorI2RlZmluZSBBVDkxQ19QQjE4X0FEVFJHICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOCkgLy8gIEFEQyBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTkpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQjE5X1RDTEsxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMg0KKyNkZWZpbmUgQVQ5MUNfUEIyX0VUWDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjANCisjZGVmaW5lIEFUOTFDX1BCMjBfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIwKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjEpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QQjIxX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIyDQorI2RlZmluZSBBVDkxQ19QQjIyX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMikgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjMNCisjZGVmaW5lIEFUOTFDX1BCMjNfVElPQTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIzKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjNfRENEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIzKSAvLyAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNA0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9USU9CMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjQpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9EU1IxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjQpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9USU9BMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpIC8vICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI2DQorI2RlZmluZSBBVDkxQ19QQjI2X1RJT0IxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNikgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI2X1JJMSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNikgLy8gIFVTQVJUIDEgUmluZyBJbmRpY2F0b3INCisjZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI3DQorI2RlZmluZSBBVDkxQ19QQjI3X1RJT0EyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNykgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI3X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNykgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI4DQorI2RlZmluZSBBVDkxQ19QQjI4X1RJT0IyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOCkgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI5DQorI2RlZmluZSBBVDkxQ19QQjI5X1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BCMjlfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMw0KKyNkZWZpbmUgQVQ5MUNfUEIzX0VUWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMzANCisjZGVmaW5lIEFUOTFDX1BCMzBfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEI0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjQpIC8vICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjYNCisjZGVmaW5lIEFUOTFDX1BCNl9FUlgxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNikgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KKyNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjgNCisjZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCOCkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjkNCisjZGVmaW5lIEFUOTFDX1BCOV9FTURJTyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCOSkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgKCh1bnNpZ25lZCBpbnQpICAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICgodW5zaWduZWQgaW50KSAgMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAoKHVuc2lnbmVkIGludCkgIDIpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICgodW5zaWduZWQgaW50KSAgMykgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCDQorI2RlZmluZSBBVDkxQ19JRF9TUEkwICAgKCh1bnNpZ25lZCBpbnQpICA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICgodW5zaWduZWQgaW50KSAgNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCisjZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAoKHVuc2lnbmVkIGludCkgIDYpIC8vIFVTQVJUIDANCisjZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAoKHVuc2lnbmVkIGludCkgIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAoKHVuc2lnbmVkIGludCkgIDgpIC8vIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgKCh1bnNpZ25lZCBpbnQpICA5KSAvLyBUd28tV2lyZSBJbnRlcmZhY2UNCisjZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAoKHVuc2lnbmVkIGludCkgMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgKCh1bnNpZ25lZCBpbnQpIDExKSAvLyBVU0IgRGV2aWNlIFBvcnQNCisjZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAoKHVuc2lnbmVkIGludCkgMTIpIC8vIFRpbWVyIENvdW50ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICgodW5zaWduZWQgaW50KSAxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgKCh1bnNpZ25lZCBpbnQpIDE0KSAvLyBUaW1lciBDb3VudGVyIDINCisjZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAoKHVuc2lnbmVkIGludCkgMTUpIC8vIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX0VNQUMgICAoKHVuc2lnbmVkIGludCkgMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICgodW5zaWduZWQgaW50KSAxNykgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgKCh1bnNpZ25lZCBpbnQpIDE4KSAvLyBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQNCisjZGVmaW5lIEFUOTFDX0lEX1RERVMgICAoKHVuc2lnbmVkIGludCkgMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAoKHVuc2lnbmVkIGludCkgMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICgodW5zaWduZWQgaW50KSAzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICgoQVQ5MVBTX1NZUykgCTB4RkZGRkYwMDApIC8vIChTWVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgKChBVDkxUFNfQUlDKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAoKEFUOTFQU19QREMpIAkweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgKChBVDkxUFNfREJHVSkgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICgoQVQ5MVBTX1BJTykgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICgoQVQ5MVBTX1BJTykgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICgoQVQ5MVBTX0NLR1IpIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BNQyAgICAgICAoKEFUOTFQU19QTUMpIAkweEZGRkZGQzAwKSAvLyAoUE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlNUQyAgICAgICgoQVQ5MVBTX1JTVEMpIAkweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAoKEFUOTFQU19SVFRDKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgKChBVDkxUFNfUElUQykgCTB4RkZGRkZEMzApIC8vIChQSVRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfV0RUQyAgICAgICgoQVQ5MVBTX1dEVEMpIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAoKEFUOTFQU19WUkVHKSAJMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgKChBVDkxUFNfTUMpIAkweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgKChBVDkxUFNfUERDKSAJMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTQwMDApIC8vIChTUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAoKEFUOTFQU19TUEkpIAkweEZGRkUwMDAwKSAvLyAoU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAoKEFUOTFQU19QREMpIAkweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzQwMDApIC8vIChVUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMwICAgKChBVDkxUFNfUERDKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzAgICAgICAgKChBVDkxUFNfVVNBUlQpIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICgoQVQ5MVBTX1NTQykgCTB4RkZGRDQwMDApIC8vIChTU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgKChBVDkxUFNfVFdJKSAJMHhGRkZCODAwMCkgLy8gKFRXSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDIgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQyAgICAgICgoQVQ5MVBTX1BXTUMpIAkweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAoKEFUOTFQU19VRFApIAkweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMSAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwNDApIC8vIChUQzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICgoQVQ5MVBTX1RDQikgCTB4RkZGQTAwMDApIC8vIChUQ0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgKChBVDkxUFNfQ0FOKSAJMHhGRkZEMDAwMCkgLy8gKENBTikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAoKEFUOTFQU19FTUFDKSAJMHhGRkZEQzAwMCkgLy8gKEVNQUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgKChBVDkxUFNfUERDKSAJMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgKChBVDkxUFNfQURDKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAoKEFUOTFQU19QREMpIAkweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAoKEFUOTFQU19BRVMpIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTgxMDApIC8vIChQRENfVERFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAoKEFUOTFQU19UREVTKSAJMHhGRkZBODAwMCkgLy8gKFRERVMpIEJhc2UgQWRkcmVzcw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAoKGNoYXIgKikgCTB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAoKGNoYXIgKikgCTB4MDAxMDAwMDApIC8vIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDA0MDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKQ0KKw0KKyNkZWZpbmUgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBpcnFfaWQsIHByaW9yaXR5LCBzcmNfdHlwZSwgbmV3SGFuZGxlciApCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICBtYXNrID0gMHgxIDw8IGlycV9pZDsJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovCQkJCQlcDQorICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfSURDUiA9IG1hc2sgOwkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eSAqLwlcDQorICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfU1ZSW2lycV9pZF0gPSAodW5zaWduZWQgaW50KSBuZXdIYW5kbGVyIDsJCQlcDQorICAgIC8qIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLwkJCQkJCQkJCVwNCisgICAgQVQ5MUNfQkFTRV9BSUMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsJCQkJXA0KKyAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwkJCQkJXA0KKyAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0lDQ1IgPSBtYXNrIDsJCQkJCQkJCQkJXA0KK30NCisNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2lvYXQ5MXNhbTd4MjU2LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2lvYXQ5MXNhbTd4MjU2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNzIxZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvaW9hdDkxc2FtN3gyNTYuaApAQCAtMCwwICsxLDQ2OTggQEAKKy8vIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIC0gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAtICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vIC0gIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisvLyAtICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KKy8vIC0gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gLSAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKy8vIC0gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KKy8vIC0gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAtICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKy8vIC0gIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCisvLyAtICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIC0gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gLSBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zDQorLy8gLSBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjkpDQorLy8gLSANCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQVQ5MVNBTTdYMjU2LnBsLzEuMTEvVHVlIE1heSAxMCAxMjoxNTozMiAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUE1DX1NBTTdYLnBsLzEuNC9UdWUgRmViICA4IDEzOjU4OjEwIDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BXTV9TQU03WC5wbC8xLjEvVHVlIE1heSAxMCAxMTo1MzowNyAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JUVENfNjA4MUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTggMjAwNC8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1ZSRUdfNjA4NUIucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MDU6NDggMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJXzYwODhELnBsLzEuMy9GcmkgTWF5IDIwIDE0OjA4OjU5IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9UV0lfNjA2MUEucGwvMS4xL1R1ZSBKdWwgMTMgMDc6Mzg6MDYgMjAwNC8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0VNQUNCXzYxMTlBLnBsLzEuNS9UaHUgRmViICAzIDE1OjUyOjA0IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RFUzNfNjE1MEEucGwvMS4xL01vbiBKYW4gMTcgMDg6MzQ6MzEgMjAwNS8vDQorLy8gLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorI2lmbmRlZiBBVDkxU0FNN1gyNTZfSA0KKyNkZWZpbmUgQVQ5MVNBTTdYMjU2X0gNCisNCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsvLyBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TWVMgew0KKwlBVDkxX1JFRwkgQUlDX1NNUlszMl07IAkvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NWUlszMl07IAkvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVZSOyAJLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZWUjsgCS8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVBSOyAJLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0NJU1I7IAkvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0lFQ1I7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JRENSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lDQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTQ1I7IAkvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19FT0lDUjsgCS8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NQVTsgCS8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0RDUjsgCS8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19GRkVSOyAJLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGRFI7IAkvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGU1I7IAkvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ1WzU0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPQV9PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDdbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDhbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BQVVNSOyAJLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTFbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEyWzg1XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0JfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTVbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE4WzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOVszNDFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfU0NFUjsgCS8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ0RSOyAJLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ1NSOyAJLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DS1I7IAkvLyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI0WzRdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNVszNl07IAkvLyANCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNls1XTsgCS8vIA0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJTVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVNSOyAJLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVZSOyAJLy8gUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJSVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RDUjsgCS8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RNUjsgCS8vIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RTUjsgCS8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyN1s1XTsgCS8vIA0KKwlBVDkxX1JFRwkgVlJFR19NUjsgCS8vIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1NZUywgKkFUOTFQU19TWVM7DQorDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FJQyB7DQorCUFUOTFfUkVHCSBBSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JVlI7IAkvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JUFI7IAkvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfSUVDUjsgCS8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNDUjsgCS8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRENSOyAJLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZTUjsgCS8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FJQywgKkFUOTFQU19BSUM7DQorDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDIHsNCisJQVQ5MV9SRUcJIFBEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BEQywgKkFUOTFQU19QREM7DQorDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1Ugew0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0RCR1UsICpBVDkxUFNfREJHVTsNCisNCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOSkgLy8gKERCR1UpIEV2ZW4gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBPZGQgUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA5KSAvLyAoREJHVSkgTm8gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDkpIC8vIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8gew0KKwlBVDkxX1JFRwkgUElPX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT19PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQorDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUiB7DQorCUFUOTFfUkVHCSBDS0dSX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0tHUl9NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIENLR1JfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KK30gQVQ5MVNfQ0tHUiwgKkFUOTFQU19DS0dSOw0KKw0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKENLR1IgT2Zmc2V0OiAweDApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZQ0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kNCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTlJEWSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChDS0dSKSBEaXZpZGVyIGlzIGJ5cGFzc2VkDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTENPVU5UICAgKCh1bnNpZ25lZCBpbnQpIDB4M0YgPDwgIDgpIC8vIChDS0dSKSBQTEwgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTYpIC8vIChDS0dSKSBQTEwgTXVsdGlwbGllcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8xICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDINCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUE1DIHsNCisJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDRFI7IAkvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzRdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfUE1DLCAqQVQ5MVBTX1BNQzsNCisNCisvLyAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisvLyAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlNUQyB7DQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1JTVEMsICpBVDkxUFNfUlNUQzsNCisNCisvLyAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QUk9DUlNUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19LRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoUlNUQykgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfUlNUVFlQICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoUlNUQykgUmVzZXQgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1BPV0VSVVAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFJTVEMpIFdha2VVcCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FUQ0hET0cgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX0JST1dOT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChSU1RDKSBCcm93bm91dCBSZXNldCBvY2N1cmVkLg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19OUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBOUlNUIHBpbiBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KKy8vIC0tLS0tLS0tIFJTVENfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVhbCBUaW1lIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlRUQyB7DQorCUFUOTFfUkVHCSBSVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVEFSOyAJLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1JUVEMsICpBVDkxUFNfUlRUQzsNCisNCisvLyAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1WICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBBbGFybSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQ1JUViAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQorDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCisNCisvLyAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFdEVEMpIFdhdGNoZG9nIEtFWSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFdEVENfV0RNUiA6IChXRFRDIE9mZnNldDogMHg0KSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RGSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChXRFRDKSBXYXRjaGRvZyBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSUFJPQyAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDE2KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQNCisvLyAtLS0tLS0tLSBXRFRDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBVbmRlcmZsb3cNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RFUlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19WUkVHIHsNCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19WUkVHLCAqQVQ5MVBTX1ZSRUc7DQorDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DIHsNCisJQVQ5MV9SRUcJIE1DX1JDUjsgCS8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FTUjsgCS8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQUFTUjsgCS8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMjFdOyAJLy8gDQorCUFUOTFfUkVHCSBNQ19GTVI7IAkvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GQ1I7IAkvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GU1I7IAkvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX01DLCAqQVQ5MVBTX01DOw0KKw0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJIHsNCisJQVQ5MV9SRUcJIFNQSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SRFI7IAkvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9URFI7IAkvLyBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfQ1NSWzRdOyAJLy8gQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0OF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NQSSwgKkFUOTFQU19TUEk7DQorDQorLy8gLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0DQorI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzDQorLy8gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNQSSkgRW5hYmxlIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVVNBUlQgew0KKwlBVDkxX1JFRwkgVVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SVE9SOyAJLy8gUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RUR1I7IAkvLyBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNV07IAkvLyANCisJQVQ5MV9SRUcJIFVTX0ZJREk7IAkvLyBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTkVSOyAJLy8gTmIgRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVTX0lGOyAJLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0NF07IAkvLyANCisJQVQ5MV9SRUcJIFVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVVNBUlQsICpBVDkxUFNfVVNBUlQ7DQorDQorLy8gLS0tLS0tLS0gVVNfQ1IgOiAoVVNBUlQgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVTQVJUKSBTdGFydCBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFVTQVJUKSBVc2FydCBtb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChVU0FSVCkgTm9ybWFsDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChVU0FSVCkgUlM0ODUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVVNBUlQpIE1vZGVtDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDANCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4KSAvLyAoVVNBUlQpIElyREENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfU1dIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXINCisvLyAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JYQlJLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkFDSyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RDRElDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EU1IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TU0Mgew0KKwlBVDkxX1JFRwkgU1NDX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0NNUjsgCS8vIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JDTVI7IAkvLyBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JGTVI7IAkvLyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ01SOyAJLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RGTVI7IAkvLyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUlNIUjsgCS8vIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVFNIUjsgCS8vIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1NDLCAqQVQ5MVBTX1NTQzsNCisNCisvLyAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX0RJViAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChTU0MpIERpdmlkZWQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChTU0MpIFRLIENsb2NrIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFNTQykgUksgcGluDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgOCkgLy8gKFNTQykgQ29tcGFyZSAwDQorI2RlZmluZSBBVDkxQ19TU0NfU1RURExZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8ICAwKSAvLyAoU1NDKSBEYXRhIExlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0xPT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0DQorI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgRGF0YSBOdW1iZXIgcGVyIEZyYW1lDQorI2RlZmluZSBBVDkxQ19TU0NfRlNMRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMjApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTm9uZSBSSyBwaW4gSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgTG93IGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfSElHSCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1NDKSBGcmFtZSBTeW5jIEVkZ2UgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1RDTVIgOiAoU1NDIE9mZnNldDogMHgxOCkgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfREFUREVGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFRyYW5zbWl0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNTQykgVHJhbnNtaXQgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTU0MpIEVuZCBvZiBSZWNlcHRpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChTU0MpIFJlY2VpdmUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFR3by13aXJlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RXSSB7DQorCUFUOTFfUkVHCSBUV0lfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfTU1SOyAJLy8gTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVFdJX0lBRFI7IAkvLyBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfQ1dHUjsgCS8vIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCit9IEFUOTFTX1RXSSwgKkFUOTFQU19UV0k7DQorDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0ggew0KKwlBVDkxX1JFRwkgUFdNQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0RUWVI7IAkvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1BSRFI7IAkvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DQ05UUjsgCS8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DVVBEUjsgCS8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1Jlc2VydmVkWzNdOyAJLy8gUmVzZXJ2ZWQNCit9IEFUOTFTX1BXTUNfQ0gsICpBVDkxUFNfUFdNQ19DSDsNCisNCisvLyAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4DQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhDKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQWxpZ25tZW50DQorI2RlZmluZSBBVDkxQ19QV01DX0NQT0wgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlDQorLy8gLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUFdNQyB7DQorCUFUOTFfUkVHCSBQV01DX01SOyAJLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0VOQTsgCS8vIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0RJUzsgCS8vIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19TUjsgCS8vIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lFUjsgCS8vIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JRFI7IAkvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lNUjsgCS8vIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSVNSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNTVdOyAJLy8gDQorCUFUOTFfUkVHCSBQV01DX1ZSOyAJLy8gUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNjRdOyAJLy8gDQorCUFUOTFTX1BXTUNfQ0gJIFBXTUNfQ0hbNF07IAkvLyBQV01DIENoYW5uZWwNCit9IEFUOTFTX1BXTUMsICpBVDkxUFNfUFdNQzsNCisNCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQQ0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoUFdNQykgDQorI2RlZmluZSBBVDkxQ19QV01DX0RJVkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEINCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUJfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFBXTUMpIA0KKy8vIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQV01DKSBDaGFubmVsIElEIDANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBXTUMpIENoYW5uZWwgSUQgMg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQV01DKSBDaGFubmVsIElEIDMNCisvLyAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lFUiA6IChQV01DIE9mZnNldDogMHgxMCkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSVNSIDogKFBXTUMgT2Zmc2V0OiAweDFjKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzZdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9GRFJbNl07IAkvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1RYVkM7IAkvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KKw0KKy8vIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVRFApIEZyYW1lIEVycm9yDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVEUCkgRnJhbWUgT0sNCisvLyAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIENvbmZpZ3VyZWQNCisjZGVmaW5lIEFUOTFDX1VEUF9FU1IgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBFbmFibGUgU2VuZCBSZXN1bWUNCisjZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDINCisjZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwDQorI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBEYXRhIFRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQRURTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorLy8gLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSANCisjZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBQdWxsLXVwIE9ODQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVEMgew0KKwlBVDkxX1JFRwkgVENfQ0NSOyAJLy8gQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRDX0NWOyAJLy8gQ291bnRlciBWYWx1ZQ0KKwlBVDkxX1JFRwkgVENfUkE7IAkvLyBSZWdpc3RlciBBDQorCUFUOTFfUkVHCSBUQ19SQjsgCS8vIFJlZ2lzdGVyIEINCisJQVQ5MV9SRUcJIFRDX1JDOyAJLy8gUmVnaXN0ZXIgQw0KKwlBVDkxX1JFRwkgVENfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfVEMsICpBVDkxUFNfVEM7DQorDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIENsb2NrIEludmVydA0KKyNkZWZpbmUgQVQ5MUNfVENfQlVSU1QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9USU9CICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjYpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBPdmVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfVENfTE9WUlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRDKSBSQiBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChUQykgVElPQSBNaXJyb3INCisjZGVmaW5lIEFUOTFDX1RDX01USU9CICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCIHsNCisJQVQ5MVNfVEMJIFRDQl9UQzA7IAkvLyBUQyBDaGFubmVsIDANCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMTsgCS8vIFRDIENoYW5uZWwgMQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMyOyAJLy8gVEMgQ2hhbm5lbCAyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNF07IAkvLyANCisJQVQ5MV9SRUcJIFRDQl9CQ1I7IAkvLyBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ0JfQk1SOyAJLy8gVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVENCLCAqQVQ5MVBTX1RDQjsNCisNCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUIgew0KKwlBVDkxX1JFRwkgQ0FOX01CX01NUjsgCS8vIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01BTTsgCS8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUlEOyAJLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01GSUQ7IAkvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01TUjsgCS8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURMOyAJLy8gTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ESDsgCS8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUNSOyAJLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19DQU5fTUIsICpBVDkxUFNfQ0FOX01COw0KKw0KKy8vIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjQpIC8vIChDQU5fTUIpIA0KKy8vIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLS0tLS0tLS0gQ0FOX01JRCA6IChDQU5fTUIgT2Zmc2V0OiAweDgpIENBTiBNZXNzYWdlIElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FU1RBTVAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCisjZGVmaW5lIEFUOTFDX0NBTl9NQUJUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtLS0tLS0tLSBDQU5fTURMIDogKENBTl9NQiBPZmZzZXQ6IDB4MTQpIENBTiBNZXNzYWdlIERhdGEgTG93IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQUNSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU4gew0KKwlBVDkxX1JFRwkgQ0FOX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9CUjsgCS8vIEJhdWRyYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNOyAJLy8gVGltZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9USU1FU1RQOyAJLy8gVGltZSBTdGFtcCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0VDUjsgCS8vIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9UQ1I7IAkvLyBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQUNSOyAJLy8gQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzUyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQ0FOX1ZSOyAJLy8gVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzY0XTsgCS8vIA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjA7IAkvLyBDQU4gTWFpbGJveCAwDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTsgCS8vIENBTiBNYWlsYm94IDENCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIyOyAJLy8gQ0FOIE1haWxib3ggMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjM7IAkvLyBDQU4gTWFpbGJveCAzDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNDsgCS8vIENBTiBNYWlsYm94IDQNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI1OyAJLy8gQ0FOIE1haWxib3ggNQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjY7IAkvLyBDQU4gTWFpbGJveCA2DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNzsgCS8vIENBTiBNYWlsYm94IDcNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI4OyAJLy8gQ0FOIE1haWxib3ggOA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjk7IAkvLyBDQU4gTWFpbGJveCA5DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTA7IAkvLyBDQU4gTWFpbGJveCAxMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjExOyAJLy8gQ0FOIE1haWxib3ggMTENCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMjsgCS8vIENBTiBNYWlsYm94IDEyDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTM7IAkvLyBDQU4gTWFpbGJveCAxMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE0OyAJLy8gQ0FOIE1haWxib3ggMTQNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNTsgCS8vIENBTiBNYWlsYm94IDE1DQorfSBBVDkxU19DQU4sICpBVDkxUFNfQ0FOOw0KKw0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIENBTiBDb250cm9sbGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0xQTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIExvdyBQb3dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fQUJNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBPdmVybG9hZCBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIFRpbWUgU3RhbXAgbWVzc2FnZXMgYXQgZWFjaCBlbmQgb2YgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9UVE0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIEVuYWJsZSBUaW1lciBGcmVlemUNCisjZGVmaW5lIEFUOTFDX0NBTl9EUlBUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQ0FOKSBEaXNhYmxlIFJlcGVhdA0KKy8vIC0tLS0tLS0tIENBTl9JRVIgOiAoQ0FOIE9mZnNldDogMHg0KSBDQU4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIE1haWxib3ggMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgTWFpbGJveCAyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIE1haWxib3ggNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKENBTikgTWFpbGJveCA1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIE1haWxib3ggNyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI4ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKENBTikgTWFpbGJveCA4IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChDQU4pIE1haWxib3ggMTAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChDQU4pIE1haWxib3ggMTEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChDQU4pIE1haWxib3ggMTMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDQU4pIE1haWxib3ggMTQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDQU4pIEVycm9yIEFjdGl2ZSBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9XQVJOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChDQU4pIEJ1cyBPZmYgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTikgU2xlZXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTikgVGltZXIgT3ZlcmZsb3cgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RTVFAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU4pIFRpbWVzdGFtcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKENBTikgU3R1ZmZpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9BRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoQ0FOKSBCaXQgRXJyb3INCisvLyAtLS0tLS0tLSBDQU5fSURSIDogKENBTiBPZmZzZXQ6IDB4OCkgQ0FOIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX1NSIDogKENBTiBPZmZzZXQ6IDB4MTApIENBTiBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTikgUmVjZWl2ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RCU1kgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBPdmVybG9hZCBCdXN5DQorLy8gLS0tLS0tLS0gQ0FOX0JSIDogKENBTiBPZmZzZXQ6IDB4MTQpIENBTiBCYXVkcmF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoQ0FOKSBQaGFzZSAyIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTEgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChDQU4pIFJlLXN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9CUlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgU2FtcGxpbmcgbW9kZQ0KKy8vIC0tLS0tLS0tIENBTl9USU0gOiAoQ0FOIE9mZnNldDogMHgxOCkgQ0FOIFRpbWVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVSICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU4pIFRpbWVyIGZpZWxkDQorLy8gLS0tLS0tLS0gQ0FOX1RJTUVTVFAgOiAoQ0FOIE9mZnNldDogMHgxYykgQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlcg0KKy8vIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKENBTikgVGltZXIgUmVzZXQgRmllbGQNCisvLyAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMgew0KKwlBVDkxX1JFRwkgRU1BQ19OQ1I7IAkvLyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTkNGR1I7IAkvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTlNSOyAJLy8gTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19UU1I7IAkvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkJRUDsgCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfVEJRUDsgCS8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTUjsgCS8vIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQU47IAkvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUFRSOyAJLy8gUGF1c2UgVGltZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QRlI7IAkvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlRPOyAJLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NDRjsgCS8vIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUNGOyAJLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZSTzsgCS8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GQ1NFOyAJLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQUxFOyAJLy8gQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0RURjsgCS8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19MQ09MOyAJLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUNPTDsgCS8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFVORDsgCS8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0NTRTsgCS8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlJFOyAJLy8gUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUk9WOyAJLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU0U7IAkvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUxFOyAJLy8gRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkpBOyAJLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTRjsgCS8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU1RFOyAJLy8gU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkxFOyAJLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBGOyAJLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0hSQjsgCS8vIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisJQVQ5MV9SRUcJIEVNQUNfSFJUOyAJLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisJQVQ5MV9SRUcJIEVNQUNfU0ExTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0ExSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0w7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0g7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0TDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0SDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19USUQ7IAkvLyBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQUTsgCS8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNSSU87IAkvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19XT0w7IAkvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzEzXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19SRVY7IAkvLyBSZXZpc2lvbiBSZWdpc3Rlcg0KK30gQVQ5MVNfRU1BQywgKkFUOTFQU19FTUFDOw0KKw0KKy8vIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgTG9vcGJhY2suIE9wdGlvbmFsLiBXaGVuIHNldCwgbG9vcGJhY2sgc2lnbmFsIGlzIGF0IGhpZ2ggbGV2ZWwuDQorI2RlZmluZSBBVDkxQ19FTUFDX0xMQiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIExvb3BiYWNrIGxvY2FsLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgUmVjZWl2ZSBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NUEUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xSU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgQ2xlYXIgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XRVNUQVQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgQmFjayBwcmVzc3VyZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RIQUxUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgVHJhbnNtaXQgcGF1c2UgZnJhbWUgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZQ0KKy8vIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBTcGVlZC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZEICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIEZ1bGwgZHVwbGV4LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgSnVtYm8gRnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0FGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTkJDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgTm8gYnJvYWRjYXN0LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIFVuaWNhc3QgaGFzaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChFTUFDKSBSZWNlaXZlIDE1MjIgYnl0ZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FQUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfMTYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzMyICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA2NA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEVNQUMpIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8yICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChFTUFDKSB0d28gYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzMgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIGZpZWxkIENoZWNraW5nIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EUkZDUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorI2RlZmluZSBBVDkxQ19FTUFDX0VGUkhEICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChFTUFDKSBJZ25vcmUgUlggRkNTDQorLy8gLS0tLS0tLS0gRU1BQ19OU1IgOiAoRU1BQyBPZmZzZXQ6IDB4OCkgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTktSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVUJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEdPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgR28NCisjZGVmaW5lIEFUOTFDX0VNQUNfQkVYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JOQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfT1ZSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUlhVQlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkVTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSUVSIDogKEVNQUMgT2Zmc2V0OiAweDI4KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19NQU4gOiAoRU1BQyBPZmZzZXQ6IDB4MzQpIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDE4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMjMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUlcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1NPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBSZWR1Y2UgTUlJDQorLy8gLS0tLS0tLS0gRU1BQ19XT0wgOiAoRU1BQyBPZmZzZXQ6IDB4YzQpIFdha2UgT24gTEFOIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBJUCBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19FTUFDX01BRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEVNQUMpIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMSBldmVudCBlbmFibGUNCisvLyAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgMTYpIC8vIChFTUFDKSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FEQyB7DQorCUFUOTFfUkVHCSBBRENfQ1I7IAkvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX01SOyAJLy8gQURDIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX0NIRVI7IAkvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSERSOyAJLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIU1I7IAkvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19TUjsgCS8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19MQ0RSOyAJLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRVI7IAkvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lEUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lNUjsgCS8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NEUjA7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisJQVQ5MV9SRUcJIEFEQ19DRFIxOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorCUFUOTFfUkVHCSBBRENfQ0RSMjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKwlBVDkxX1JFRwkgQURDX0NEUjM7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisJQVQ5MV9SRUcJIEFEQ19DRFI0OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorCUFUOTFfUkVHCSBBRENfQ0RSNTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKwlBVDkxX1JFRwkgQURDX0NEUjY7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisJQVQ5MV9SRUcJIEFEQ19DRFI3OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BREMsICpBVDkxUFNfQURDOw0KKw0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAxKSAvLyAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzANCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIFJlc29sdXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQURDKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxNikgLy8gKEFEQykgU3RhcnR1cCBUaW1lDQorI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBDaGFubmVsIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBDaGFubmVsIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBDaGFubmVsIDcNCisvLyAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBREMpIERhdGEgUmVhZHkNCisjZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQURDKSBHZW5lcmFsIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoQURDKSBSWEJVRkYgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfTERBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUVTIHsNCisJQVQ5MV9SRUcJIEFFU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0tFWVd4Uls0XTsgCS8vIEtleSBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX0lEQVRBeFJbNF07IAkvLyBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19PREFUQXhSWzRdOyAJLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lWeFJbNF07IAkvLyBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzM1XTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX1ZSOyAJLy8gQUVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FFUywgKkFUOTFQU19BRVM7DQorDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjApIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQUQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMgew0KKwlBVDkxX1JFRwkgVERFU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTFXeFJbMl07IAkvLyBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMld4UlsyXTsgCS8vIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkzV3hSWzJdOyAJLy8gS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSURBVEF4UlsyXTsgCS8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX09EQVRBeFJbMl07IAkvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSVZ4UlsyXTsgCS8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMzddOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX1ZSOyAJLy8gVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVERFUywgKkFUOTFQU19UREVTOw0KKw0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAoKEFUOTFfUkVHICopIAkweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTANCisjZGVmaW5lIEFUOTFDX1BBMF9SWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMCkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExDQorI2RlZmluZSBBVDkxQ19QQTFfVFhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEwDQorI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMCkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTENCisjZGVmaW5lIEFUOTFDX1BBMTFfVFdDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTExKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTINCisjZGVmaW5lIEFUOTFDX1BBMTJfTlBDUzAwICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEyKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMw0KKyNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BBMTNfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCisjZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QQTE0X0lSUTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BBMTVfVENMSzIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNg0KKyNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTYpIC8vICBTUEkgMCBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE3DQorI2RlZmluZSBBVDkxQ19QQTE3X01PU0kwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNykgLy8gIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE4DQorI2RlZmluZSBBVDkxQ19QQTE4X1NQQ0swICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOCkgLy8gIFNQSSAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkNCisjZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE5KSAvLyAgQ0FOIFJlY2VpdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTINCisjZGVmaW5lIEFUOTFDX1BBMl9TQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMikgLy8gIFVTQVJUIDAgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTJfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIwDQorI2RlZmluZSBBVDkxQ19QQTIwX0NBTlRYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMCkgLy8gIENBTiBUcmFuc21pdA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjENCisjZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIxKSAvLyAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIxKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMg0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1BJIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19URCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBTU0MgVHJhbnNtaXQgZGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyM19NT1NJMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBTUEkgMSBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNCkgLy8gIFNQSSAxIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNg0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9SRiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTI2X05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCisjZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjgNCisjZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI4KSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOQ0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9GSVEgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1BBMjlfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorI2RlZmluZSBBVDkxQ19QQTNfUlRTMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBM19OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzANCisjZGVmaW5lIEFUOTFDX1BBMzBfSVJRMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDANCisjZGVmaW5lIEFUOTFDX1BBMzBfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNA0KKyNkZWZpbmUgQVQ5MUNfUEE0X0NUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgVVNBUlQgMCBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTRfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTUNCisjZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE2DQorI2RlZmluZSBBVDkxQ19QQTZfVFhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19TQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTggICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFVTQVJUIDEgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorI2RlZmluZSBBVDkxQ19QQTlfQ1RTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBVU0FSVCAxIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMA0KKyNkZWZpbmUgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSyAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMCkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jay9SZWZlcmVuY2UgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BCMF9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjEgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjENCisjZGVmaW5lIEFUOTFDX1BCMV9FVFhFTiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEwDQorI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDINCisjZGVmaW5lIEFUOTFDX1BCMTBfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEwKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjExX05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCisjZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWlrdCBDb2RpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BCMTJfVENMSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEyKSAvLyAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMw0KKyNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTMpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDINCisjZGVmaW5lIEFUOTFDX1BCMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNA0KKyNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDMNCisjZGVmaW5lIEFUOTFDX1BCMTRfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KKyNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNg0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9FQ09MICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkDQorI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTcNCisjZGVmaW5lIEFUOTFDX1BCMTdfRVJYQ0sgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTgpIC8vICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTkNCisjZGVmaW5lIEFUOTFDX1BCMTlfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTkpIC8vICBUaW1lciBDb3VudGVyIDEgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjIgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjINCisjZGVmaW5lIEFUOTFDX1BCMl9FVFgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIwDQorI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BCMjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjENCisjZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QQjIyX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMikgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjIzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIzDQorI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMykgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjIzX0RDRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMykgLy8gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCisjZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI0KSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI0KSAvLyAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUNCisjZGVmaW5lIEFUOTFDX1BCMjVfVElPQTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI1KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjVfRFRSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI1KSAvLyAgVVNBUlQgMSBEYXRhIFRlcm1pbmFsIHJlYWR5DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjYpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9SSTEgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjYpIC8vICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNw0KKyNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjcpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyOA0KKyNkZWZpbmUgQVQ5MUNfUEIyOF9USU9CMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjgpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyOF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjgpIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyOQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QQjI5X1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMNCisjZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMykgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorI2RlZmluZSBBVDkxQ19QQjMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMwKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNA0KKyNkZWZpbmUgQVQ5MUNfUEI0X0VDUlNfRUNSU0RWICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI0KSAvLyAgRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UvQ2FycmllciBTZW5zZSBhbmQgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNQ0KKyNkZWZpbmUgQVQ5MUNfUEI1X0VSWDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI2DQorI2RlZmluZSBBVDkxQ19QQjZfRVJYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjYpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjcNCisjZGVmaW5lIEFUOTFDX1BCN19FUlhFUiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEI4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI4DQorI2RlZmluZSBBVDkxQ19QQjhfRU1EQyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjgpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI5DQorI2RlZmluZSBBVDkxQ19QQjlfRU1ESU8gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjkpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICgodW5zaWduZWQgaW50KSAgMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkNCisjZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAoKHVuc2lnbmVkIGludCkgIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgKCh1bnNpZ25lZCBpbnQpICAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAoKHVuc2lnbmVkIGludCkgIDMpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQg0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMCAgICgodW5zaWduZWQgaW50KSAgNCkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDANCisjZGVmaW5lIEFUOTFDX0lEX1NQSTEgICAoKHVuc2lnbmVkIGludCkgIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgKCh1bnNpZ25lZCBpbnQpICA2KSAvLyBVU0FSVCAwDQorI2RlZmluZSBBVDkxQ19JRF9VUzEgICAgKCh1bnNpZ25lZCBpbnQpICA3KSAvLyBVU0FSVCAxDQorI2RlZmluZSBBVDkxQ19JRF9TU0MgICAgKCh1bnNpZ25lZCBpbnQpICA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICgodW5zaWduZWQgaW50KSAgOSkgLy8gVHdvLVdpcmUgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9QV01DICAgKCh1bnNpZ25lZCBpbnQpIDEwKSAvLyBQV00gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVURQICAgICgodW5zaWduZWQgaW50KSAxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgKCh1bnNpZ25lZCBpbnQpIDEyKSAvLyBUaW1lciBDb3VudGVyIDANCisjZGVmaW5lIEFUOTFDX0lEX1RDMSAgICAoKHVuc2lnbmVkIGludCkgMTMpIC8vIFRpbWVyIENvdW50ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfVEMyICAgICgodW5zaWduZWQgaW50KSAxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgKCh1bnNpZ25lZCBpbnQpIDE1KSAvLyBDb250cm9sIEFyZWEgTmV0d29yayBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9FTUFDICAgKCh1bnNpZ25lZCBpbnQpIDE2KSAvLyBFdGhlcm5ldCBNQUMNCisjZGVmaW5lIEFUOTFDX0lEX0FEQyAgICAoKHVuc2lnbmVkIGludCkgMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICgodW5zaWduZWQgaW50KSAxOCkgLy8gQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAxMjgtYml0DQorI2RlZmluZSBBVDkxQ19JRF9UREVTICAgKCh1bnNpZ25lZCBpbnQpIDE5KSAvLyBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorI2RlZmluZSBBVDkxQ19JRF8yMF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjIpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yM19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjUpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjgpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgKCh1bnNpZ25lZCBpbnQpIDMwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTEgICAoKHVuc2lnbmVkIGludCkgMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAoKEFUOTFQU19TWVMpIAkweEZGRkZGMDAwKSAvLyAoU1lTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICgoQVQ5MVBTX0FJQykgCTB4RkZGRkYwMDApIC8vIChBSUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgKChBVDkxUFNfUERDKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICgoQVQ5MVBTX0RCR1UpIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJT0EgICAgICAoKEFUOTFQU19QSU8pIAkweEZGRkZGNDAwKSAvLyAoUElPQSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJT0IgICAgICAoKEFUOTFQU19QSU8pIAkweEZGRkZGNjAwKSAvLyAoUElPQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NLR1IgICAgICAoKEFUOTFQU19DS0dSKSAJMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgKChBVDkxUFNfUE1DKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAoKEFUOTFQU19SU1RDKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgKChBVDkxUFNfUlRUQykgCTB4RkZGRkZEMjApIC8vIChSVFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElUQyAgICAgICgoQVQ5MVBTX1BJVEMpIAkweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAoKEFUOTFQU19XRFRDKSAJMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgKChBVDkxUFNfVlJFRykgCTB4RkZGRkZENjApIC8vIChWUkVHKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfTUMgICAgICAgICgoQVQ5MVBTX01DKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICgoQVQ5MVBTX1BEQykgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAoKEFUOTFQU19TUEkpIAkweEZGRkU0MDAwKSAvLyAoU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAoKEFUOTFQU19QREMpIAkweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgKChBVDkxUFNfUERDKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgKChBVDkxUFNfVVNBUlQpIAkweEZGRkM0MDAwKSAvLyAoVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDMDAwMCkgLy8gKFVTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TU0MgICAoKEFUOTFQU19QREMpIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NTQyAgICAgICAoKEFUOTFQU19TU0MpIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICgoQVQ5MVBTX1RXSSkgCTB4RkZGQjgwMDApIC8vIChUV0kpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMyAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMCAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAoKEFUOTFQU19QV01DKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgKChBVDkxUFNfVURQKSAJMHhGRkZCMDAwMCkgLy8gKFVEUCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMyICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAoKEFUOTFQU19UQ0IpIAkweEZGRkEwMDAwKSAvLyAoVENCKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyQTApIC8vIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICgoQVQ5MVBTX0NBTikgCTB4RkZGRDAwMDApIC8vIChDQU4pIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgKChBVDkxUFNfRU1BQykgCTB4RkZGREMwMDApIC8vIChFTUFDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FEQyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQURDICAgICAgICgoQVQ5MVBTX0FEQykgCTB4RkZGRDgwMDApIC8vIChBREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQUVTICAgKChBVDkxUFNfUERDKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BRVMgICAgICAgKChBVDkxUFNfQUVTKSAJMHhGRkZBNDAwMCkgLy8gKEFFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19UREVTICAoKEFUOTFQU19QREMpIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UREVTICAgICAgKChBVDkxUFNfVERFUykgCTB4RkZGQTgwMDApIC8vIChUREVTKSBCYXNlIEFkZHJlc3MNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgKChjaGFyICopIAkweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwMTAwMDApIC8vIEludGVybmFsIFNSQU0gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCisjZGVmaW5lIEFUOTFDX0lGTEFTSAkgKChjaGFyICopIAkweDAwMTAwMDAwKSAvLyBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwNDAwMDApIC8vIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDI1NiBLYnl0ZSkNCisNCisNCisNCisvLyAtIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjaWYgMCAvKl9SQl8qLw0KK0FUOTFDX0FJQ19QUklPUiAgICAgICAgICAgRVFVICgweDcgPDwgIDApIDstIChBSUMpIFByaW9yaXR5IExldmVsDQorQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICBFUVUgKDB4MCkgOy0gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICBFUVUgKDB4NykgOy0gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KK0FUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgRVFVICgweDMgPDwgIDUpIDstIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZQ0KK0FUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMIEVRVSAoMHgwIDw8ICA1KSA7LSAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCitBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMIEVRVSAoMHgwIDw8ICA1KSA7LSAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KK0FUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFIEVRVSAoMHgxIDw8ICA1KSA7LSAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCitBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSBFUVUgKDB4MSA8PCAgNSkgOy0gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCBFUVUgKDB4MiA8PCAgNSkgOy0gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSBFUVUgKDB4MyA8PCAgNSkgOy0gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorLy8gLSAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19BSUNfTkZJUSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQUlDKSBORklRIFN0YXR1cw0KK0FUOTFDX0FJQ19OSVJRICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLSAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorQVQ5MUNfQUlDX0RDUl9HTVNLICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFJQykgR2VuZXJhbCBNYXNrDQorI2VuZGlmDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFBEQ19QVENSIDogKFBEQyBPZmZzZXQ6IDB4MjApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BEQ19SWFRFTiAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KK0FUOTFDX1BEQ19SWFRESVMgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUNCitBVDkxQ19QRENfVFhURU4gICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUNCitBVDkxQ19QRENfVFhURElTICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLSAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19SU1RSWCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCitBVDkxQ19VU19SU1RUWCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCitBVDkxQ19VU19SWEVOICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCitBVDkxQ19VU19UWEVOICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorQVQ5MUNfVVNfVFhESVMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCitBVDkxQ19VU19SU1RTVEEgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1BBUiAgICAgICAgICAgICAgRVFVICgweDcgPDwgIDkpIDstIChEQkdVKSBQYXJpdHkgdHlwZQ0KK0FUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgRVFVICgweDAgPDwgIDkpIDstIChEQkdVKSBFdmVuIFBhcml0eQ0KK0FUOTFDX1VTX1BBUl9PREQgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChEQkdVKSBPZGQgUGFyaXR5DQorQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICBFUVUgKDB4MiA8PCAgOSkgOy0gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICBFUVUgKDB4MyA8PCAgOSkgOy0gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykNCitBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgIEVRVSAoMHg0IDw8ICA5KSA7LSAoREJHVSkgTm8gUGFyaXR5DQorQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICBFUVUgKDB4NiA8PCAgOSkgOy0gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KK0FUOTFDX1VTX0NITU9ERSAgICAgICAgICAgRVFVICgweDMgPDwgMTQpIDstIChEQkdVKSBDaGFubmVsIE1vZGUNCitBVDkxQ19VU19DSE1PREVfTk9STUFMICAgIEVRVSAoMHgwIDw8IDE0KSA7LSAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULg0KK0FUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgRVFVICgweDEgPDwgMTQpIDstIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICBFUVUgKDB4MiA8PCAxNCkgOy0gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICBFUVUgKDB4MyA8PCAxNCkgOy0gKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLg0KKy8vIC0gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1JYUkRZICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCitBVDkxQ19VU19UWFJEWSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KK0FUOTFDX1VTX0VORFRYICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorQVQ5MUNfVVNfUEFSRSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCitBVDkxQ19VU19UWEVNUFRZICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCitBVDkxQ19VU19UWEJVRkUgICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KK0FUOTFDX1VTX1JYQlVGRiAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICBFUVUgKDB4MSA8PCAzMCkgOy0gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICBFUVUgKDB4MSA8PCAzMSkgOy0gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLSAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoREJHVSkgRm9yY2UgTlRSU1QgaW4gSlRBRw0KKw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIENLR1JfTU9SIDogKENLR1IgT2Zmc2V0OiAweDApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZQ0KK0FUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgRVFVICgweDEgPDwgIDEpIDstIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICAgICBFUVUgKDB4RkYgPDwgIDgpIDstIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZQ0KKy8vIC0gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NLR1JfTUFJTkYgICAgICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KK0FUOTFDX0NLR1JfTUFJTlJEWSAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChDS0dSKSBNYWluIENsb2NrIFJlYWR5DQorLy8gLSAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDApIDstIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICBFUVUgKDB4MCkgOy0gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCitBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgIEVRVSAoMHgxKSA7LSAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KK0FUOTFDX0NLR1JfUExMQ09VTlQgICAgICAgRVFVICgweDNGIDw8ICA4KSA7LSAoQ0tHUikgUExMIENvdW50ZXINCitBVDkxQ19DS0dSX09VVCAgICAgICAgICAgIEVRVSAoMHgzIDw8IDE0KSA7LSAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCitBVDkxQ19DS0dSX09VVF8wICAgICAgICAgIEVRVSAoMHgwIDw8IDE0KSA7LSAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICBFUVUgKDB4MSA8PCAxNCkgOy0gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KK0FUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgRVFVICgweDIgPDwgMTQpIDstIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCitBVDkxQ19DS0dSX09VVF8zICAgICAgICAgIEVRVSAoMHgzIDw8IDE0KSA7LSAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorQVQ5MUNfQ0tHUl9NVUwgICAgICAgICAgICBFUVUgKDB4N0ZGIDw8IDE2KSA7LSAoQ0tHUikgUExMIE11bHRpcGxpZXINCitBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgIEVRVSAoMHgzIDw8IDI4KSA7LSAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KK0FUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgRVFVICgweDAgPDwgMjgpIDstIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICBFUVUgKDB4MSA8PCAyOCkgOy0gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICBFUVUgKDB4MiA8PCAyOCkgOy0gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorQVQ5MUNfUE1DX1VEUCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorQVQ5MUNfUE1DX1BDSzAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KK0FUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCitBVDkxQ19QTUNfUENLMiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorQVQ5MUNfUE1DX1BDSzMgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICAwKSA7LSAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICBFUVUgKDB4MCkgOy0gKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZA0KK0FUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgRVFVICgweDEpIDstIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCitBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgIEVRVSAoMHgzKSA7LSAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KK0FUOTFDX1BNQ19QUkVTICAgICAgICAgICAgRVFVICgweDcgPDwgIDIpIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCitBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgIEVRVSAoMHgwIDw8ICAyKSA7LSAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KK0FUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgRVFVICgweDEgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KK0FUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgRVFVICgweDIgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KK0FUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgRVFVICgweDMgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KK0FUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgRVFVICgweDQgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCitBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgIEVRVSAoMHg1IDw8ICAyKSA7LSAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICBFUVUgKDB4NiA8PCAgMikgOy0gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFBNQykgUExMIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KK0FUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKFBNQykgUENLMV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCitBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KK0FUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLSAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCitBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KK0FUOTFDX1JTVENfRVhUUlNUICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KK0FUOTFDX1JTVENfS0VZICAgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoUlNUQykgUGFzc3dvcmQNCisvLyAtIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SU1RDX1VSU1RTICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCitBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KK0FUOTFDX1JTVENfUlNUVFlQICAgICAgICAgRVFVICgweDcgPDwgIDgpIDstIChSU1RDKSBSZXNldCBUeXBlDQorQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCBFUVUgKDB4MCA8PCAgOCkgOy0gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCitBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCitBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyBFUVUgKDB4MiA8PCAgOCkgOy0gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KK0FUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFIEVRVSAoMHgzIDw8ICA4KSA7LSAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuDQorQVQ5MUNfUlNUQ19SU1RUWVBfVVNFUiAgICBFUVUgKDB4NCA8PCAgOCkgOy0gKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4NCitBVDkxQ19SU1RDX1JTVFRZUF9CUk9XTk9VVCBFUVUgKDB4NSA8PCAgOCkgOy0gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorQVQ5MUNfUlNUQ19OUlNUTCAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLSAtLS0tLS0tLSBSU1RDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1JTVENfVVJTVEVOICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KK0FUOTFDX1JTVENfVVJTVElFTiAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCitBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgIEVRVSAoMHhGIDw8ICA4KSA7LSAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCitBVDkxQ19SU1RDX0JPRElFTiAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUNCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUlRUQ19SVFBSRVMgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCitBVDkxQ19SVFRDX0FMTUlFTiAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KK0FUOTFDX1JUVENfUlRUSU5DSUVOICAgICAgRVFVICgweDEgPDwgMTcpIDstIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCitBVDkxQ19SVFRDX1JUVFJTVCAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUlRUQ19BTE1WICAgICAgICAgICBFUVUgKDB4MCA8PCAgMCkgOy0gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLSAtLS0tLS0tLSBSVFRDX1JUVlIgOiAoUlRUQyBPZmZzZXQ6IDB4OCkgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgICBFUVUgKDB4MCA8PCAgMCkgOy0gKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlDQorLy8gLSAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SVFRDX0FMTVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KK0FUOTFDX1JUVENfUlRUSU5DICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBQSVRDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QSVRDX1BJViAgICAgICAgICAgIEVRVSAoMHhGRkZGRiA8PCAgMCkgOy0gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorQVQ5MUNfUElUQ19QSVRFTiAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQNCitBVDkxQ19QSVRDX1BJVElFTiAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0IEVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QSVRDX1BJVFMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLSAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUElUQ19DUElWICAgICAgICAgICBFUVUgKDB4RkZGRkYgPDwgIDApIDstIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorQVQ5MUNfUElUQ19QSUNOVCAgICAgICAgICBFUVUgKDB4RkZGIDw8IDIwKSA7LSAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0gLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1dEVENfV0RSU1RUICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorQVQ5MUNfV0RUQ19LRVkgICAgICAgICAgICBFUVUgKDB4RkYgPDwgMjQpIDstIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtIC0tLS0tLS0tIFdEVENfV0RNUiA6IChXRFRDIE9mZnNldDogMHg0KSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1dEVENfV0RWICAgICAgICAgICAgRVFVICgweEZGRiA8PCAgMCkgOy0gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCitBVDkxQ19XRFRDX1dERklFTiAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZQ0KK0FUOTFDX1dEVENfV0RSU1RFTiAgICAgICAgRVFVICgweDEgPDwgMTMpIDstIChXRFRDKSBXYXRjaGRvZyBSZXNldCBFbmFibGUNCitBVDkxQ19XRFRDX1dEUlBST0MgICAgICAgIEVRVSAoMHgxIDw8IDE0KSA7LSAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KK0FUOTFDX1dEVENfV0RESVMgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlDQorQVQ5MUNfV0RUQ19XREQgICAgICAgICAgICBFUVUgKDB4RkZGIDw8IDE2KSA7LSAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUNCitBVDkxQ19XRFRDX1dEREJHSExUICAgICAgIEVRVSAoMHgxIDw8IDI4KSA7LSAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KK0FUOTFDX1dEVENfV0RJRExFSExUICAgICAgRVFVICgweDEgPDwgMjkpIDstIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQNCisvLyAtIC0tLS0tLS0tIFdEVENfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfV0RUQ19XRFVORiAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KK0FUOTFDX1dEVENfV0RFUlIgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KKw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBWUkVHX01SIDogKFZSRUcgT2Zmc2V0OiAweDApIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVlJFR19QU1REQlkgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIFN0YW5kYnkgTW9kZQ0KKw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLSAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19VTkRBREQgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorQVQ5MUNfTUNfTUlTQUREICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCitBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoTUMpIEFib3J0IFNpemUgU3RhdHVzDQorQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKE1DKSBCeXRlDQorQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSBIYWxmLXdvcmQNCitBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgIEVRVSAoMHgyIDw8ICA4KSA7LSAoTUMpIFdvcmQNCitBVDkxQ19NQ19BQlRUWVAgICAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICBFUVUgKDB4MCA8PCAxMCkgOy0gKE1DKSBEYXRhIFJlYWQNCitBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoTUMpIERhdGEgV3JpdGUNCitBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgIEVRVSAoMHgyIDw8IDEwKSA7LSAoTUMpIENvZGUgRmV0Y2gNCitBVDkxQ19NQ19NU1QwICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KK0FUOTFDX01DX01TVDEgICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorQVQ5MUNfTUNfU1ZNU1QwICAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCitBVDkxQ19NQ19TVk1TVDEgICAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19GUkRZICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIEZsYXNoIFJlYWR5DQorQVQ5MUNfTUNfTE9DS0UgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKE1DKSBMb2NrIEVycm9yDQorQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KK0FUOTFDX01DX05FQlAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorQVQ5MUNfTUNfRldTICAgICAgICAgICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KK0FUOTFDX01DX0ZXU18yRldTICAgICAgICAgRVFVICgweDIgPDwgIDgpIDstIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCitBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICBFUVUgKDB4RkYgPDwgMTYpIDstIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLSAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX01DX0ZDTUQgICAgICAgICAgICAgRVFVICgweEYgPDwgIDApIDstIChNQykgRmxhc2ggQ29tbWFuZA0KK0FUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgRVFVICgweDEpIDstIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICBFUVUgKDB4MikgOy0gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KK0FUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyBFUVUgKDB4MykgOy0gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCitBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgIEVRVSAoMHg0KSA7LSAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICBFUVUgKDB4OCkgOy0gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KK0FUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgRVFVICgweEIpIDstIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCitBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gIEVRVSAoMHhEKSA7LSAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCitBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSBFUVUgKDB4RikgOy0gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KK0FUOTFDX01DX1BBR0VOICAgICAgICAgICAgRVFVICgweDNGRiA8PCAgOCkgOy0gKE1DKSBQYWdlIE51bWJlcg0KK0FUOTFDX01DX0tFWSAgICAgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNMSAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNNCAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICBFUVUgKDB4MSA8PCAxNCkgOy0gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNNyAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICBFUVUgKDB4MSA8PCAyMCkgOy0gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgRVFVICgweDEgPDwgMjEpIDstIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICBFUVUgKDB4MSA8PCAyNikgOy0gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzExICAgICAgICAgIEVRVSAoMHgxIDw8IDI3KSA7LSAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICBFUVUgKDB4MSA8PCAyOSkgOy0gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgIEVRVSAoMHgxIDw8IDMwKSA7LSAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgRVFVICgweDEgPDwgMzEpIDstIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1NQSV9TUElFTiAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChTUEkpIFNQSSBFbmFibGUNCitBVDkxQ19TUElfU1BJRElTICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoU1BJKSBTUEkgRGlzYWJsZQ0KK0FUOTFDX1NQSV9TV1JTVCAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KK0FUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyDQorLy8gLSAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfTVNUUiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KK0FUOTFDX1NQSV9QUyAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICBFUVUgKDB4MCA8PCAgMSkgOy0gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCitBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KK0FUOTFDX1NQSV9QQ1NERUMgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChTUEkpIENoaXAgU2VsZWN0IERlY29kZQ0KK0FUOTFDX1NQSV9GRElWICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KK0FUOTFDX1NQSV9NT0RGRElTICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorQVQ5MUNfU1BJX0xMQiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KK0FUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfUkQgICAgICAgICAgICAgIEVRVSAoMHhGRkZGIDw8ICAwKSA7LSAoU1BJKSBSZWNlaXZlIERhdGENCitBVDkxQ19TUElfUlBDUyAgICAgICAgICAgIEVRVSAoMHhGIDw8IDE2KSA7LSAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfU1BJX1REICAgICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KK0FUOTFDX1NQSV9UUENTICAgICAgICAgICAgRVFVICgweEYgPDwgMTYpIDstIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLSAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1NQSV9SRFJGICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorQVQ5MUNfU1BJX1REUkUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KK0FUOTFDX1NQSV9NT0RGICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChTUEkpIE1vZGUgRmF1bHQgRXJyb3INCitBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KK0FUOTFDX1NQSV9FTkRSWCAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KK0FUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KK0FUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCitBVDkxQ19TUElfVFhCVUZFICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFNQSSkgTlNTUiBJbnRlcnJ1cHQNCitBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KK0FUOTFDX1NQSV9TUElFTlMgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1BJKSBDbG9jayBQb2xhcml0eQ0KK0FUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTUEkpIENsb2NrIFBoYXNlDQorQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICBFUVUgKDB4RiA8PCAgNCkgOy0gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCitBVDkxQ19TUElfQklUU184ICAgICAgICAgIEVRVSAoMHgwIDw8ICA0KSA7LSAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgRVFVICgweDIgPDwgIDQpIDstIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCitBVDkxQ19TUElfQklUU18xMiAgICAgICAgIEVRVSAoMHg0IDw8ICA0KSA7LSAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgRVFVICgweDUgPDwgIDQpIDstIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICBFUVUgKDB4NiA8PCAgNCkgOy0gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCitBVDkxQ19TUElfQklUU18xNSAgICAgICAgIEVRVSAoMHg3IDw8ICA0KSA7LSAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgRVFVICgweDggPDwgIDQpIDstIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDgpIDstIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCitBVDkxQ19TUElfRExZQlMgICAgICAgICAgIEVRVSAoMHhGRiA8PCAxNikgOy0gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCitBVDkxQ19TUElfRExZQkNUICAgICAgICAgIEVRVSAoMHhGRiA8PCAyNCkgOy0gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVVNfU1RUQlJLICAgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKFVTQVJUKSBTdGFydCBCcmVhaw0KK0FUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgRVFVICgweDEgPDwgMTApIDstIChVU0FSVCkgU3RvcCBCcmVhaw0KK0FUOTFDX1VTX1NUVFRPICAgICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCitBVDkxQ19VU19TRU5EQSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KK0FUOTFDX1VTX1JTVElUICAgICAgICAgICAgRVFVICgweDEgPDwgMTMpIDstIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KK0FUOTFDX1VTX1JTVE5BQ0sgICAgICAgICAgRVFVICgweDEgPDwgMTQpIDstIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorQVQ5MUNfVVNfUkVUVE8gICAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KK0FUOTFDX1VTX0RUUkVOICAgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCitBVDkxQ19VU19EVFJESVMgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KK0FUOTFDX1VTX1JUU0VOICAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KK0FUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgRVFVICgweDEgPDwgMTkpIDstIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVVNfVVNNT0RFICAgICAgICAgICBFUVUgKDB4RiA8PCAgMCkgOy0gKFVTQVJUKSBVc2FydCBtb2RlDQorQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICBFUVUgKDB4MCkgOy0gKFVTQVJUKSBOb3JtYWwNCitBVDkxQ19VU19VU01PREVfUlM0ODUgICAgIEVRVSAoMHgxKSA7LSAoVVNBUlQpIFJTNDg1DQorQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICBFUVUgKDB4MikgOy0gKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZw0KK0FUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgRVFVICgweDMpIDstIChVU0FSVCkgTW9kZW0NCitBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wIEVRVSAoMHg0KSA7LSAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSBFUVUgKDB4NikgOy0gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMQ0KK0FUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgRVFVICgweDgpIDstIChVU0FSVCkgSXJEQQ0KK0FUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgRVFVICgweEMpIDstIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCitBVDkxQ19VU19DTEtTICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICA0KSA7LSAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KK0FUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgRVFVICgweDAgPDwgIDQpIDstIChVU0FSVCkgQ2xvY2sNCitBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVVNBUlQpIGZkaXYxDQorQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICBFUVUgKDB4MiA8PCAgNCkgOy0gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KK0FUOTFDX1VTX0NIUkwgICAgICAgICAgICAgRVFVICgweDMgPDwgIDYpIDstIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorQVQ5MUNfVVNfQ0hSTF81X0JJVFMgICAgICBFUVUgKDB4MCA8PCAgNikgOy0gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCitBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KK0FUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgRVFVICgweDIgPDwgIDYpIDstIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNyBiaXRzDQorQVQ5MUNfVVNfQ0hSTF84X0JJVFMgICAgICBFUVUgKDB4MyA8PCAgNikgOy0gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCitBVDkxQ19VU19TWU5DICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0DQorQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICBFUVUgKDB4MCA8PCAxMikgOy0gKFVTQVJUKSAxIHN0b3AgYml0DQorQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICBFUVUgKDB4MSA8PCAxMikgOy0gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCitBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgIEVRVSAoMHgyIDw8IDEyKSA7LSAoVVNBUlQpIDIgc3RvcCBiaXRzDQorQVQ5MUNfVVNfTVNCRiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKFVTQVJUKSBCaXQgT3JkZXINCitBVDkxQ19VU19NT0RFOSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGgNCitBVDkxQ19VU19DS0xPICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCitBVDkxQ19VU19PVkVSICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KK0FUOTFDX1VTX0lOQUNLICAgICAgICAgICAgRVFVICgweDEgPDwgMjApIDstIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UNCitBVDkxQ19VU19EU05BQ0sgICAgICAgICAgIEVRVSAoMHgxIDw8IDIxKSA7LSAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorQVQ5MUNfVVNfTUFYX0lURVIgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCitBVDkxQ19VU19GSUxURVIgICAgICAgICAgIEVRVSAoMHgxIDw8IDI4KSA7LSAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXINCisvLyAtIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1JYQlJLICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorQVQ5MUNfVVNfVElNRU9VVCAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dA0KK0FUOTFDX1VTX0lURVJBVElPTiAgICAgICAgRVFVICgweDEgPDwgMTApIDstIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorQVQ5MUNfVVNfTkFDSyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCitBVDkxQ19VU19SSUlDICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnDQorQVQ5MUNfVVNfRFNSSUMgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KK0FUOTFDX1VTX0RDRElDICAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCitBVDkxQ19VU19DVFNJQyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcNCisvLyAtIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1JJICAgICAgICAgICAgICAgRVFVICgweDEgPDwgMjApIDstIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCitBVDkxQ19VU19EU1IgICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIxKSA7LSAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KK0FUOTFDX1VTX0RDRCAgICAgICAgICAgICAgRVFVICgweDEgPDwgMjIpIDstIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0DQorQVQ5MUNfVVNfQ1RTICAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfUlhFTiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KK0FUOTFDX1NTQ19SWERJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KK0FUOTFDX1NTQ19UWEVOICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KK0FUOTFDX1NTQ19UWERJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCitBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgIEVRVSAoMHgxIDw8IDE1KSA7LSAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICAwKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19DS1NfRElWICAgICAgICAgRVFVICgweDApIDstIChTU0MpIERpdmlkZWQgQ2xvY2sNCitBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgIEVRVSAoMHgxKSA7LSAoU1NDKSBUSyBDbG9jayBzaWduYWwNCitBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgIEVRVSAoMHgyKSA7LSAoU1NDKSBSSyBwaW4NCitBVDkxQ19TU0NfQ0tPICAgICAgICAgICAgIEVRVSAoMHg3IDw8ICAyKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgRVFVICgweDAgPDwgIDIpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICBFUVUgKDB4MSA8PCAgMikgOy0gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICBFUVUgKDB4MiA8PCAgMikgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KK0FUOTFDX1NTQ19DS0kgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICBFUVUgKDB4RiA8PCAgOCkgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCitBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTIEVRVSAoMHgwIDw8ICA4KSA7LSAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCitBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0DQorQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICBFUVUgKDB4MiA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KK0FUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgRVFVICgweDQgPDwgIDgpIDstIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dA0KK0FUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgRVFVICgweDUgPDwgIDgpIDstIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICBFUVUgKDB4NiA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCitBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgIEVRVSAoMHg3IDw8ICA4KSA7LSAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQNCitBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgIEVRVSAoMHg4IDw8ICA4KSA7LSAoU1NDKSBDb21wYXJlIDANCitBVDkxQ19TU0NfU1RURExZICAgICAgICAgIEVRVSAoMHhGRiA8PCAxNikgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KK0FUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfREFUTEVOICAgICAgICAgIEVRVSAoMHgxRiA8PCAgMCkgOy0gKFNTQykgRGF0YSBMZW5ndGgNCitBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBMb29wIE1vZGUNCitBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KK0FUOTFDX1NTQ19EQVROQiAgICAgICAgICAgRVFVICgweEYgPDwgIDgpIDstIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KK0FUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgRVFVICgweEYgPDwgMTYpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCitBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgIEVRVSAoMHg3IDw8IDIwKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19GU09TX05PTkUgICAgICAgRVFVICgweDAgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCitBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KK0FUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgRVFVICgweDIgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICBFUVUgKDB4MyA8PCAyMCkgOy0gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KK0FUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgRVFVICgweDQgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICBFUVUgKDB4NSA8PCAyMCkgOy0gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorQVQ5MUNfU1NDX0ZTRURHRSAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gU1NDX1RDTVIgOiAoU1NDIE9mZnNldDogMHgxOCkgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfREFUREVGICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCitBVDkxQ19TU0NfRlNERU4gICAgICAgICAgIEVRVSAoMHgxIDw8IDIzKSA7LSAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlDQorLy8gLSAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfVFhSRFkgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KK0FUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KK0FUOTFDX1NTQ19UWEJVRkUgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KK0FUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTU0MpIFJlY2VpdmUgUmVhZHkNCitBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCitBVDkxQ19TU0NfRU5EUlggICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KK0FUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgRVFVICgweDEgPDwgMTApIDstIChTU0MpIFRyYW5zbWl0IFN5bmMNCitBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoU1NDKSBSZWNlaXZlIFN5bmMNCitBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoU1NDKSBUcmFuc21pdCBFbmFibGUNCitBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KK0FUOTFDX1RXSV9TVE9QICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KK0FUOTFDX1RXSV9NU0VOICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KK0FUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCitBVDkxQ19UV0lfU1dSU1QgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0gLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19UV0lfSUFEUlNaICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoVFdJKSBJbnRlcm5hbCBEZXZpY2UgQWRkcmVzcyBTaXplDQorQVQ5MUNfVFdJX0lBRFJTWl9OTyAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCitBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KK0FUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgRVFVICgweDIgPDwgIDgpIDstIChUV0kpIFR3by1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorQVQ5MUNfVFdJX0lBRFJTWl8zX0JZVEUgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KK0FUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KK0FUOTFDX1RXSV9EQURSICAgICAgICAgICAgRVFVICgweDdGIDw8IDE2KSA7LSAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgIEVRVSAoMHhGRiA8PCAgMCkgOy0gKFRXSSkgQ2xvY2sgTG93IERpdmlkZXINCitBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgIEVRVSAoMHhGRiA8PCAgOCkgOy0gKFRXSSkgQ2xvY2sgSGlnaCBEaXZpZGVyDQorQVQ5MUNfVFdJX0NLRElWICAgICAgICAgICBFUVUgKDB4NyA8PCAxNikgOy0gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KK0FUOTFDX1RXSV9SWFJEWSAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KK0FUOTFDX1RXSV9UWFJEWSAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCitBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVFdJKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFRXSSkgVW5kZXJydW4gRXJyb3INCitBVDkxQ19UV0lfTkFDSyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorLy8gLSAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICBFUVUgKDB4RiA8PCAgMCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KK0FUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgRVFVICgweDApIDstIChQV01DX0NIKSANCitBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAgIEVRVSAoMHhCKSA7LSAoUFdNQ19DSCkgDQorQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICBFUVUgKDB4QykgOy0gKFBXTUNfQ0gpIA0KK0FUOTFDX1BXTUNfQ0FMRyAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KK0FUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QV01DX0NEVFkgICAgICAgICAgIEVRVSAoMHgwIDw8ICAwKSA7LSAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlDQorLy8gLSAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICBFUVUgKDB4MCA8PCAgMCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLSAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgRVFVICgweDAgPDwgIDApIDstIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DVVBEICAgICAgICAgICBFUVUgKDB4MCA8PCAgMCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BXTUNfRElWQSAgICAgICAgICAgRVFVICgweEZGIDw8ICAwKSA7LSAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KK0FUOTFDX1BXTUNfUFJFQSAgICAgICAgICAgRVFVICgweEYgPDwgIDgpIDstIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFBXTUMpIA0KK0FUOTFDX1BXTUNfRElWQiAgICAgICAgICAgRVFVICgweEZGIDw8IDE2KSA7LSAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLg0KK0FUOTFDX1BXTUNfUFJFQiAgICAgICAgICAgRVFVICgweEYgPDwgMjQpIDstIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICBFUVUgKDB4MCA8PCAyNCkgOy0gKFBXTUMpIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFBXTUMpIENoYW5uZWwgSUQgMA0KK0FUOTFDX1BXTUNfQ0hJRDEgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChQV01DKSBDaGFubmVsIElEIDENCitBVDkxQ19QV01DX0NISUQyICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoUFdNQykgQ2hhbm5lbCBJRCAyDQorQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VRFBfRlJNX05VTSAgICAgICAgIEVRVSAoMHg3RkYgPDwgIDApIDstIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KK0FUOTFDX1VEUF9GUk1fRVJSICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChVRFApIEZyYW1lIEVycm9yDQorQVQ5MUNfVURQX0ZSTV9PSyAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFVEUCkgRnJhbWUgT0sNCisvLyAtIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9GQURERU4gICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorQVQ5MUNfVURQX0NPTkZHICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFVEUCkgQ29uZmlndXJlZA0KK0FUOTFDX1VEUF9FU1IgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZQ0KK0FUOTFDX1VEUF9SU01JTlBSICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCitBVDkxQ19VRFBfUk1XVVBFICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUNCisvLyAtIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9GQUREICAgICAgICAgICAgRVFVICgweEZGIDw8ICAwKSA7LSAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorQVQ5MUNfVURQX0ZFTiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLSAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9FUElOVDAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorQVQ5MUNfVURQX0VQSU5UMSAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfRVBJTlQyICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KK0FUOTFDX1VEUF9FUElOVDMgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorQVQ5MUNfVURQX0VQSU5UNCAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfRVBJTlQ1ICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KK0FUOTFDX1VEUF9SWFNVU1AgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KK0FUOTFDX1VEUF9SWFJTTSAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorQVQ5MUNfVURQX0VYVFJTTSAgICAgICAgICBFUVUgKDB4MSA8PCAxMCkgOy0gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfU09GSU5UICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorQVQ5MUNfVURQX1dBS0VVUCAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9FTkRCVVNSRVMgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0gLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX0VQMCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KK0FUOTFDX1VEUF9FUDEgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChVRFApIFJlc2V0IEVuZHBvaW50IDENCitBVDkxQ19VRFBfRVAyICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorQVQ5MUNfVURQX0VQMyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KK0FUOTFDX1VEUF9FUDQgICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCitBVDkxQ19VRFBfRVA1ICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLSAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX1RYQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCitBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwDQorQVQ5MUNfVURQX1JYU0VUVVAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KK0FUOTFDX1VEUF9JU09FUlJPUiAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5DQorQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCitBVDkxQ19VRFBfUlhfREFUQV9CSzEgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KK0FUOTFDX1VEUF9ESVIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbg0KK0FUOTFDX1VEUF9FUFRZUEUgICAgICAgICAgRVFVICgweDcgPDwgIDgpIDstIChVRFApIEVuZHBvaW50IHR5cGUNCitBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgIEVRVSAoMHgwIDw8ICA4KSA7LSAoVURQKSBDb250cm9sDQorQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICBFUVUgKDB4MSA8PCAgOCkgOy0gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCBFUVUgKDB4MiA8PCAgOCkgOy0gKFVEUCkgQnVsayBPVVQNCitBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgIEVRVSAoMHgzIDw8ICA4KSA7LSAoVURQKSBJbnRlcnJ1cHQgT1VUDQorQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICBFUVUgKDB4NSA8PCAgOCkgOy0gKFVEUCkgSXNvY2hyb25vdXMgSU4NCitBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gIEVRVSAoMHg2IDw8ICA4KSA7LSAoVURQKSBCdWxrIElODQorQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICBFUVUgKDB4NyA8PCAgOCkgOy0gKFVEUCkgSW50ZXJydXB0IElODQorQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKFVEUCkgRGF0YSBUb2dnbGUNCitBVDkxQ19VRFBfRVBFRFMgICAgICAgICAgIEVRVSAoMHgxIDw8IDE1KSA7LSAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KK0FUOTFDX1VEUF9SWEJZVEVDTlQgICAgICAgRVFVICgweDdGRiA8PCAxNikgOy0gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0gLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VRFBfVFhWRElTICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVURQKSANCitBVDkxQ19VRFBfUFVPTiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoVURQKSBQdWxsLXVwIE9ODQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFRDX0NDUiA6IChUQyBPZmZzZXQ6IDB4MCkgVEMgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RDX0NMS0VOICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KK0FUOTFDX1RDX0NMS0RJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCitBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZA0KKy8vIC0gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorQVQ5MUNfVENfQ0xLUyAgICAgICAgICAgICBFUVUgKDB4NyA8PCAgMCkgOy0gKFRDKSBDbG9jayBTZWxlY3Rpb24NCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgRVFVICgweDApIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgRVFVICgweDEpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgRVFVICgweDIpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgRVFVICgweDMpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgRVFVICgweDQpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgIEVRVSAoMHg1KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCitBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgIEVRVSAoMHg2KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCitBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgIEVRVSAoMHg3KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCitBVDkxQ19UQ19DTEtJICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoVEMpIENsb2NrIEludmVydA0KK0FUOTFDX1RDX0JVUlNUICAgICAgICAgICAgRVFVICgweDMgPDwgIDQpIDstIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KK0FUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgRVFVICgweDAgPDwgIDQpIDstIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCitBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KK0FUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgRVFVICgweDIgPDwgIDQpIDstIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCitBVDkxQ19UQ19DUENTVE9QICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCitBVDkxQ19UQ19MREJTVE9QICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCitBVDkxQ19UQ19DUENESVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCitBVDkxQ19UQ19MREJESVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorQVQ5MUNfVENfRVRSR0VER19OT05FICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KK0FUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgRVFVICgweDIgPDwgIDgpIDstIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCitBVDkxQ19UQ19FRVZURURHICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50IEVkZ2UgU2VsZWN0aW9uDQorQVQ5MUNfVENfRUVWVEVER19OT05FICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KK0FUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgRVFVICgweDIgPDwgIDgpIDstIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorQVQ5MUNfVENfRUVWVEVER19CT1RIICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCitBVDkxQ19UQ19FRVZUICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCitBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgIEVRVSAoMHgwIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCitBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgIEVRVSAoMHgyIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KK0FUOTFDX1RDX0VORVRSRyAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCitBVDkxQ19UQ19XQVZFU0VMICAgICAgICAgIEVRVSAoMHgzIDw8IDEzKSA7LSAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCitBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgIEVRVSAoMHgwIDw8IDEzKSA7LSAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCitBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgRVFVICgweDIgPDwgMTMpIDstIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCitBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPIEVRVSAoMHgzIDw8IDEzKSA7LSAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQ1RSRyAgICAgICAgICAgRVFVICgweDEgPDwgMTQpIDstIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KK0FUOTFDX1RDX1dBVkUgICAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChUQykgDQorQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICBFUVUgKDB4MCA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICBFUVUgKDB4MiA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0xEUkEgICAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCitBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgIEVRVSAoMHgwIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IE5vbmUNCitBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCitBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgIEVRVSAoMHgyIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KK0FUOTFDX1RDX0FDUEMgICAgICAgICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KK0FUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgRVFVICgweDAgPDwgMTgpIDstIChUQykgRWZmZWN0OiBub25lDQorQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBFZmZlY3Q6IHNldA0KK0FUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgRVFVICgweDIgPDwgMTgpIDstIChUQykgRWZmZWN0OiBjbGVhcg0KK0FUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgRWZmZWN0OiB0b2dnbGUNCitBVDkxQ19UQ19MRFJCICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDE4KSA7LSAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorQVQ5MUNfVENfTERSQl9OT05FICAgICAgICBFUVUgKDB4MCA8PCAxOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICBFUVUgKDB4MiA8PCAxOCkgOy0gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KK0FUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCitBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgIEVRVSAoMHgzIDw8IDIwKSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICBFUVUgKDB4MCA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICBFUVUgKDB4MiA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICBFUVUgKDB4MyA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0FTV1RSRyAgICAgICAgICAgRVFVICgweDMgPDwgMjIpIDstIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KK0FUOTFDX1RDX0FTV1RSR19OT05FICAgICAgRVFVICgweDAgPDwgMjIpIDstIChUQykgRWZmZWN0OiBub25lDQorQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICBFUVUgKDB4MSA8PCAyMikgOy0gKFRDKSBFZmZlY3Q6IHNldA0KK0FUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgRVFVICgweDIgPDwgMjIpIDstIChUQykgRWZmZWN0OiBjbGVhcg0KK0FUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgRVFVICgweDMgPDwgMjIpIDstIChUQykgRWZmZWN0OiB0b2dnbGUNCitBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCitBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgIEVRVSAoMHgwIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogbm9uZQ0KK0FUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChUQykgRWZmZWN0OiBzZXQNCitBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgIEVRVSAoMHgyIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogY2xlYXINCitBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogdG9nZ2xlDQorQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICBFUVUgKDB4MyA8PCAyNikgOy0gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICBFUVUgKDB4MCA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgIEVRVSAoMHgxIDw8IDI2KSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICBFUVUgKDB4MiA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICBFUVUgKDB4MyA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0JFRVZUICAgICAgICAgICAgRVFVICgweDMgPDwgMjgpIDstIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCitBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgIEVRVSAoMHgwIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogbm9uZQ0KK0FUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChUQykgRWZmZWN0OiBzZXQNCitBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgIEVRVSAoMHgyIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogY2xlYXINCitBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgIEVRVSAoMHgzIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogdG9nZ2xlDQorQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICBFUVUgKDB4MyA8PCAzMCkgOy0gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICBFUVUgKDB4MCA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgIEVRVSAoMHgxIDw8IDMwKSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICBFUVUgKDB4MiA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICBFUVUgKDB4MyA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoVEMpIENvdW50ZXIgT3ZlcmZsb3cNCitBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVEMpIExvYWQgT3ZlcnJ1bg0KK0FUOTFDX1RDX0NQQVMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChUQykgUkEgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQlMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChUQykgUkIgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChUQykgUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX0xEUkFTICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChUQykgUkEgTG9hZGluZw0KK0FUOTFDX1RDX0xEUkJTICAgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChUQykgUkIgTG9hZGluZw0KK0FUOTFDX1RDX0VUUkdTICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChUQykgRXh0ZXJuYWwgVHJpZ2dlcg0KK0FUOTFDX1RDX0NMS1NUQSAgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChUQykgQ2xvY2sgRW5hYmxpbmcNCitBVDkxQ19UQ19NVElPQSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoVEMpIFRJT0EgTWlycm9yDQorQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBUSU9BIE1pcnJvcg0KKy8vIC0gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLSAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVENCX1RDMFhDMFMgICAgICAgICBFUVUgKDB4MyA8PCAgMCkgOy0gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uDQorQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICBFUVUgKDB4MCkgOy0gKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMA0KK0FUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgRVFVICgweDEpIDstIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzANCitBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgIEVRVSAoMHgyKSA7LSAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwDQorQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICBFUVUgKDB4MykgOy0gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMA0KK0FUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgRVFVICgweDMgPDwgIDIpIDstIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbg0KK0FUOTFDX1RDQl9UQzFYQzFTX1RDTEsxICAgRVFVICgweDAgPDwgIDIpIDstIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzENCitBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxDQorQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICBFUVUgKDB4MiA8PCAgMikgOy0gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMQ0KK0FUOTFDX1RDQl9UQzFYQzFTX1RJT0EyICAgRVFVICgweDMgPDwgIDIpIDstIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzENCitBVDkxQ19UQ0JfVEMyWEMyUyAgICAgICAgIEVRVSAoMHgzIDw8ICA0KSA7LSAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCitBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgIEVRVSAoMHgwIDw8ICA0KSA7LSAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KK0FUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgRVFVICgweDIgPDwgIDQpIDstIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCitBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgIEVRVSAoMHgzIDw8ICA0KSA7LSAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgIEVRVSAoMHhGRkZGIDw8ICAwKSA7LSAoQ0FOX01CKSBNYWlsYm94IFRpbWVtYXJrDQorQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KK0FUOTFDX0NBTl9NT1QgICAgICAgICAgICAgRVFVICgweDcgPDwgMjQpIDstIChDQU5fTUIpIE1haWxib3ggT2JqZWN0IFR5cGUNCitBVDkxQ19DQU5fTU9UX0RJUyAgICAgICAgIEVRVSAoMHgwIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgIEVRVSAoMHgxIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFIEVRVSAoMHgyIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1RYICAgICAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgIEVRVSAoMHg0IDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgIEVRVSAoMHg1IDw8IDI0KSA7LSAoQ0FOX01CKSANCisvLyAtIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICBFUVUgKDB4M0ZGRkYgPDwgIDApIDstIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorQVQ5MUNfQ0FOX01JRHZBICAgICAgICAgICBFUVUgKDB4N0ZGIDw8IDE4KSA7LSAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICBFUVUgKDB4MSA8PCAyOSkgOy0gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLSAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9NVElNRVNUQU1QICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorQVQ5MUNfQ0FOX01ETEMgICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMCkgOy0gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCitBVDkxQ19DQU5fTUFCVCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCitBVDkxQ19DQU5fTVJEWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIzKSA7LSAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fTUFDUiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorQVQ5MUNfQ0FOX01UQ1IgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX0NBTkVOICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorQVQ5MUNfQ0FOX0xQTSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCitBVDkxQ19DQU5fQUJNICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZQ0KK0FUOTFDX0NBTl9PVkwgICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorQVQ5MUNfQ0FOX1RFT0YgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KK0FUOTFDX0NBTl9UVE0gICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQorQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KK0FUOTFDX0NBTl9EUlBUICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLSAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX01CMCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKENBTikgTWFpbGJveCAwIEZsYWcNCitBVDkxQ19DQU5fTUIxICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoQ0FOKSBNYWlsYm94IDEgRmxhZw0KK0FUOTFDX0NBTl9NQjIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChDQU4pIE1haWxib3ggMiBGbGFnDQorQVQ5MUNfQ0FOX01CMyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKENBTikgTWFpbGJveCAzIEZsYWcNCitBVDkxQ19DQU5fTUI0ICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoQ0FOKSBNYWlsYm94IDQgRmxhZw0KK0FUOTFDX0NBTl9NQjUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChDQU4pIE1haWxib3ggNSBGbGFnDQorQVQ5MUNfQ0FOX01CNiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKENBTikgTWFpbGJveCA2IEZsYWcNCitBVDkxQ19DQU5fTUI3ICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoQ0FOKSBNYWlsYm94IDcgRmxhZw0KK0FUOTFDX0NBTl9NQjggICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChDQU4pIE1haWxib3ggOCBGbGFnDQorQVQ5MUNfQ0FOX01COSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKENBTikgTWFpbGJveCA5IEZsYWcNCitBVDkxQ19DQU5fTUIxMCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoQ0FOKSBNYWlsYm94IDEwIEZsYWcNCitBVDkxQ19DQU5fTUIxMSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoQ0FOKSBNYWlsYm94IDExIEZsYWcNCitBVDkxQ19DQU5fTUIxMiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoQ0FOKSBNYWlsYm94IDEyIEZsYWcNCitBVDkxQ19DQU5fTUIxMyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoQ0FOKSBNYWlsYm94IDEzIEZsYWcNCitBVDkxQ19DQU5fTUIxNCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE0KSA7LSAoQ0FOKSBNYWlsYm94IDE0IEZsYWcNCitBVDkxQ19DQU5fTUIxNSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE1KSA7LSAoQ0FOKSBNYWlsYm94IDE1IEZsYWcNCitBVDkxQ19DQU5fRVJSQSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQorQVQ5MUNfQ0FOX1dBUk4gICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKENBTikgV2FybmluZyBMaW1pdCBGbGFnDQorQVQ5MUNfQ0FOX0VSUlAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKENBTikgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcNCitBVDkxQ19DQU5fQk9GRiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZw0KK0FUOTFDX0NBTl9TTEVFUCAgICAgICAgICAgRVFVICgweDEgPDwgMjApIDstIChDQU4pIFNsZWVwIEZsYWcNCitBVDkxQ19DQU5fV0FLRVVQICAgICAgICAgIEVRVSAoMHgxIDw8IDIxKSA7LSAoQ0FOKSBXYWtldXAgRmxhZw0KK0FUOTFDX0NBTl9UT1ZGICAgICAgICAgICAgRVFVICgweDEgPDwgMjIpIDstIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcNCitBVDkxQ19DQU5fVFNUUCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIzKSA7LSAoQ0FOKSBUaW1lc3RhbXAgRmxhZw0KK0FUOTFDX0NBTl9DRVJSICAgICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChDQU4pIENSQyBFcnJvcg0KK0FUOTFDX0NBTl9TRVJSICAgICAgICAgICAgRVFVICgweDEgPDwgMjUpIDstIChDQU4pIFN0dWZmaW5nIEVycm9yDQorQVQ5MUNfQ0FOX0FFUlIgICAgICAgICAgICBFUVUgKDB4MSA8PCAyNikgOy0gKENBTikgQWNrbm93bGVkZ21lbnQgRXJyb3INCitBVDkxQ19DQU5fRkVSUiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDI3KSA7LSAoQ0FOKSBGb3JtIEVycm9yDQorQVQ5MUNfQ0FOX0JFUlIgICAgICAgICAgICBFUVUgKDB4MSA8PCAyOCkgOy0gKENBTikgQml0IEVycm9yDQorLy8gLSAtLS0tLS0tLSBDQU5fSURSIDogKENBTiBPZmZzZXQ6IDB4OCkgQ0FOIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9TUiA6IChDQU4gT2Zmc2V0OiAweDEwKSBDQU4gU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9SQlNZICAgICAgICAgICAgRVFVICgweDEgPDwgMjkpIDstIChDQU4pIFJlY2VpdmVyIEJ1c3kNCitBVDkxQ19DQU5fVEJTWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDMwKSA7LSAoQ0FOKSBUcmFuc21pdHRlciBCdXN5DQorQVQ5MUNfQ0FOX09WTFkgICAgICAgICAgICBFUVUgKDB4MSA8PCAzMSkgOy0gKENBTikgT3ZlcmxvYWQgQnVzeQ0KKy8vIC0gLS0tLS0tLS0gQ0FOX0JSIDogKENBTiBPZmZzZXQ6IDB4MTQpIENBTiBCYXVkcmF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fUEhBU0UyICAgICAgICAgIEVRVSAoMHg3IDw8ICAwKSA7LSAoQ0FOKSBQaGFzZSAyIHNlZ21lbnQNCitBVDkxQ19DQU5fUEhBU0UxICAgICAgICAgIEVRVSAoMHg3IDw8ICA0KSA7LSAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCitBVDkxQ19DQU5fUFJPUEFHICAgICAgICAgIEVRVSAoMHg3IDw8ICA4KSA7LSAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudA0KK0FUOTFDX0NBTl9TWU5DICAgICAgICAgICAgRVFVICgweDMgPDwgMTIpIDstIChDQU4pIFJlLXN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoIHNlZ21lbnQNCitBVDkxQ19DQU5fQlJQICAgICAgICAgICAgIEVRVSAoMHg3RiA8PCAxNikgOy0gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorQVQ5MUNfQ0FOX1NNUCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKENBTikgU2FtcGxpbmcgbW9kZQ0KKy8vIC0gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX1RJTUVSICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKENBTikgVGltZXIgZmllbGQNCisvLyAtIC0tLS0tLS0tIENBTl9USU1FU1RQIDogKENBTiBPZmZzZXQ6IDB4MWMpIENBTiBUaW1lc3RhbXAgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9SRUMgICAgICAgICAgICAgRVFVICgweEZGIDw8ICAwKSA7LSAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCitBVDkxQ19DQU5fVEVDICAgICAgICAgICAgIEVRVSAoMHhGRiA8PCAxNikgOy0gKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlcg0KKy8vIC0gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fVElNUlNUICAgICAgICAgIEVRVSAoMHgxIDw8IDMxKSA7LSAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0gLS0tLS0tLS0gQ0FOX0FDUiA6IChDQU4gT2Zmc2V0OiAweDI4KSBDQU4gQWJvcnQgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfTEIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4NCitBVDkxQ19FTUFDX0xMQiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoRU1BQykgTG9vcGJhY2sgbG9jYWwuIA0KK0FUOTFDX0VNQUNfUkUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gDQorQVQ5MUNfRU1BQ19NUEUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuIA0KK0FUOTFDX0VNQUNfQ0xSU1RBVCAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorQVQ5MUNfRU1BQ19XRVNUQVQgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KK0FUOTFDX0VNQUNfQlAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCitBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiANCitBVDkxQ19FTUFDX1RIQUxUICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuIA0KK0FUOTFDX0VNQUNfVFBGUiAgICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCitBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lDQorLy8gLSAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgU3BlZWQuIA0KK0FUOTFDX0VNQUNfRkQgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSBGdWxsIGR1cGxleC4gDQorQVQ5MUNfRU1BQ19KRlJBTUUgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorQVQ5MUNfRU1BQ19OQkMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorQVQ5MUNfRU1BQ19NVEkgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KK0FUOTFDX0VNQUNfVU5JICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCitBVDkxQ19FTUFDX0JJRyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCitBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KK0FUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgRVFVICgweDMgPDwgMTApIDstIChFTUFDKSANCitBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgIEVRVSAoMHgwIDw8IDEwKSA7LSAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCitBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICBFUVUgKDB4MiA8PCAxMCkgOy0gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KK0FUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgRVFVICgweDMgPDwgMTApIDstIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCitBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19QQUUgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkJPRiAgICAgICAgICAgRVFVICgweDMgPDwgMTQpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgIEVRVSAoMHgwIDw8IDE0KSA7LSAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgIEVRVSAoMHgxIDw8IDE0KSA7LSAoRU1BQykgb25lIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgIEVRVSAoMHgyIDw8IDE0KSA7LSAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICBFUVUgKDB4MyA8PCAxNCkgOy0gKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorQVQ5MUNfRU1BQ19STENFICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIGZpZWxkIENoZWNraW5nIEVuYWJsZQ0KK0FUOTFDX0VNQUNfRFJGQ1MgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfSVJYRkNTICAgICAgICAgRVFVICgweDEgPDwgMTkpIDstIChFTUFDKSBJZ25vcmUgUlggRkNTDQorLy8gLSAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX0xJTktSICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19NRElPICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfSURMRSAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSANCisvLyAtIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfQ09MICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JMRVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIFRyYW5zbWl0IEdvDQorQVQ5MUNfRU1BQ19CRVggICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KK0FUOTFDX0VNQUNfQ09NUCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1VORCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkVDICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX09WUiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX01GRCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19SQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUlhVQlIgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UVU5EUiAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkxFWCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfTElOSyAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19IUkVTUCAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUEZSRSAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19EQVRBICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfQ09ERSAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JFR0EgICAgICAgICAgIEVRVSAoMHgxRiA8PCAxOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUEhZQSAgICAgICAgICAgRVFVICgweDFGIDw8IDIzKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19SVyAgICAgICAgICAgICBFUVUgKDB4MyA8PCAyOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfU09GICAgICAgICAgICAgRVFVICgweDMgPDwgMzApIDstIChFTUFDKSANCisvLyAtIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfUk1JSSAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChFTUFDKSBSZWR1Y2UgTUlJDQorLy8gLSAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19JUCAgICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MNCitBVDkxQ19FTUFDX01BRyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZQ0KK0FUOTFDX0VNQUNfQVJQICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCitBVDkxQ19FTUFDX1NBMSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfUkVWUkVGICAgICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1BBUlRSRUYgICAgICAgIEVRVSAoMHhGRkZGIDw8IDE2KSA7LSAoRU1BQykgDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFEQykgU29mdHdhcmUgUmVzZXQNCitBVDkxQ19BRENfU1RBUlQgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLSAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19BRENfVFJHRU4gICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KK0FUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgRVFVICgweDApIDstIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCitBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgIEVRVSAoMHgxKSA7LSAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KK0FUOTFDX0FEQ19UUkdTRUwgICAgICAgICAgRVFVICgweDcgPDwgIDEpIDstIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICBFUVUgKDB4MCA8PCAgMSkgOy0gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzANCitBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KK0FUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgRVFVICgweDIgPDwgIDEpIDstIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICBFUVUgKDB4MyA8PCAgMSkgOy0gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMNCitBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgIEVRVSAoMHg0IDw8ICAxKSA7LSAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KK0FUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgRVFVICgweDUgPDwgIDEpIDstIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICBFUVUgKDB4NiA8PCAgMSkgOy0gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KK0FUOTFDX0FEQ19MT1dSRVMgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChBREMpIFJlc29sdXRpb24uDQorQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICBFUVUgKDB4MCA8PCAgNCkgOy0gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCitBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorQVQ5MUNfQURDX1NMRUVQICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEFEQykgU2xlZXAgTW9kZQ0KK0FUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSBFUVUgKDB4MCA8PCAgNSkgOy0gKEFEQykgTm9ybWFsIE1vZGUNCitBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoQURDKSBTbGVlcCBNb2RlDQorQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICBFUVUgKDB4M0YgPDwgIDgpIDstIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KK0FUOTFDX0FEQ19TVEFSVFVQICAgICAgICAgRVFVICgweDFGIDw8IDE2KSA7LSAoQURDKSBTdGFydHVwIFRpbWUNCitBVDkxQ19BRENfU0hUSU0gICAgICAgICAgIEVRVSAoMHhGIDw8IDI0KSA7LSAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUNCisvLyAtIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFEQykgQ2hhbm5lbCAwDQorQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFEQykgQ2hhbm5lbCAxDQorQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKEFEQykgQ2hhbm5lbCAyDQorQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEFEQykgQ2hhbm5lbCAzDQorQVQ5MUNfQURDX0NINCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEFEQykgQ2hhbm5lbCA0DQorQVQ5MUNfQURDX0NINSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEFEQykgQ2hhbm5lbCA1DQorQVQ5MUNfQURDX0NINiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEFEQykgQ2hhbm5lbCA2DQorQVQ5MUNfQURDX0NINyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKEFEQykgQ2hhbm5lbCA3DQorLy8gLSAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19BRENfRU9DMCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19FT0MxICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorQVQ5MUNfQURDX0VPQzIgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCitBVDkxQ19BRENfRU9DMyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19FT0M0ICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorQVQ5MUNfQURDX0VPQzUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCitBVDkxQ19BRENfRU9DNiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19FT0M3ICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorQVQ5MUNfQURDX09WUkUwICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKEFEQykgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX0FEQ19PVlJFMSAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfT1ZSRTIgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoQURDKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfQURDX09WUkUzICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKEFEQykgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX0FEQ19PVlJFNCAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfT1ZSRTUgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoQURDKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfQURDX09WUkU2ICAgICAgICAgICBFUVUgKDB4MSA8PCAxNCkgOy0gKEFEQykgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX0FEQ19PVlJFNyAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfRFJEWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoQURDKSBEYXRhIFJlYWR5DQorQVQ5MUNfQURDX0dPVlJFICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorQVQ5MUNfQURDX0VORFJYICAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorQVQ5MUNfQURDX1JYQlVGRiAgICAgICAgICBFUVUgKDB4MSA8PCAxOSkgOy0gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0gLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQURDX0xEQVRBICAgICAgICAgICBFUVUgKDB4M0ZGIDw8ICAwKSA7LSAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLSAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCitBVDkxQ19BRENfREFUQSAgICAgICAgICAgIEVRVSAoMHgzRkYgPDwgIDApIDstIChBREMpIENvbnZlcnRlZCBEYXRhDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBBRVNfQ1IgOiAoQUVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FFU19TVEFSVCAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChBRVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKEFFUykgU29mdHdhcmUgUmVzZXQNCitBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoQUVTKSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBTZWVkIExvYWRpbmcNCisvLyAtIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQUVTX0NJUEhFUiAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFFUykgUHJvY2Vzc2luZyBNb2RlDQorQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICBFUVUgKDB4RiA8PCAgNCkgOy0gKEFFUykgUHJvY2Vzc2luZyBEZWxheQ0KK0FUOTFDX0FFU19TTU9EICAgICAgICAgICAgRVFVICgweDMgPDwgIDgpIDstIChBRVMpIFN0YXJ0IE1vZGUNCitBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgIEVRVSAoMHgwIDw8ICA4KSA7LSAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KK0FUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgRVFVICgweDEgPDwgIDgpIDstIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICBFUVUgKDB4MiA8PCAgOCkgOy0gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorQVQ5MUNfQUVTX09QTU9EICAgICAgICAgICBFUVUgKDB4NyA8PCAxMikgOy0gKEFFUykgT3BlcmF0aW9uIE1vZGUNCitBVDkxQ19BRVNfT1BNT0RfRUNCICAgICAgIEVRVSAoMHgwIDw8IDEyKSA7LSAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KK0FUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCitBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgIEVRVSAoMHgyIDw8IDEyKSA7LSAoQUVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorQVQ5MUNfQUVTX09QTU9EX0NGQiAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KK0FUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgRVFVICgweDQgPDwgMTIpIDstIChBRVMpIENUUiBDb3VudGVyIG1vZGUuDQorQVQ5MUNfQUVTX0xPRCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKEFFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICBFUVUgKDB4NyA8PCAxNikgOy0gKEFFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KK0FUOTFDX0FFU19DRkJTXzEyOF9CSVQgICAgRVFVICgweDAgPDwgMTYpIDstIChBRVMpIDEyOC1iaXQuDQorQVQ5MUNfQUVTX0NGQlNfNjRfQklUICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKEFFUykgNjQtYml0Lg0KK0FUOTFDX0FFU19DRkJTXzMyX0JJVCAgICAgRVFVICgweDIgPDwgMTYpIDstIChBRVMpIDMyLWJpdC4NCitBVDkxQ19BRVNfQ0ZCU18xNl9CSVQgICAgIEVRVSAoMHgzIDw8IDE2KSA7LSAoQUVTKSAxNi1iaXQuDQorQVQ5MUNfQUVTX0NGQlNfOF9CSVQgICAgICBFUVUgKDB4NCA8PCAxNikgOy0gKEFFUykgOC1iaXQuDQorQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICBFUVUgKDB4RiA8PCAyMCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgS2V5DQorQVQ5MUNfQUVTX0NUWVBFICAgICAgICAgICBFUVUgKDB4MUYgPDwgMjQpIDstIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUNCitBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gIEVRVSAoMHgxIDw8IDI0KSA7LSAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4NCitBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gIEVRVSAoMHgyIDw8IDI0KSA7LSAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCitBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gIEVRVSAoMHg0IDw8IDI0KSA7LSAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4NCitBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gIEVRVSAoMHg4IDw8IDI0KSA7LSAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4NCitBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gIEVRVSAoMHgxMCA8PCAyNCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLSAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQUVTX0RBVFJEWSAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFFUykgREFUUkRZDQorQVQ5MUNfQUVTX0VORFJYICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KK0FUOTFDX0FFU19FTkRUWCAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorQVQ5MUNfQUVTX1JYQlVGRiAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEFFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwNCitBVDkxQ19BRVNfVFhCVUZFICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorQVQ5MUNfQUVTX1VSQUQgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQUVTX1VSQVQgICAgICAgICAgICBFUVUgKDB4NyA8PCAxMikgOy0gKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzDQorQVQ5MUNfQUVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgRVFVICgweDAgPDwgMTIpIDstIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCitBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyBFUVUgKDB4MSA8PCAxMikgOy0gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCitBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgRVFVICgweDIgPDwgMTIpIDstIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCitBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfU1VCS0VZIEVRVSAoMHgzIDw8IDEyKSA7LSAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCitBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX1NVQktFWSBFUVUgKDB4NCA8PCAxMikgOy0gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCitBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCBFUVUgKDB4NSA8PCAxMikgOy0gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RERVNfU1RBUlQgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUREVTKSBTdGFydHMgUHJvY2Vzc2luZw0KK0FUOTFDX1RERVNfU1dSU1QgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChUREVTKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RERVNfQ0lQSEVSICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUREVTKSBQcm9jZXNzaW5nIE1vZGUNCitBVDkxQ19UREVTX1RERVNNT0QgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KK0FUOTFDX1RERVNfS0VZTU9EICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChUREVTKSBLZXkgTW9kZQ0KK0FUOTFDX1RERVNfU01PRCAgICAgICAgICAgRVFVICgweDMgPDwgIDgpIDstIChUREVTKSBTdGFydCBNb2RlDQorQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KK0FUOTFDX1RERVNfU01PRF9BVVRPICAgICAgRVFVICgweDEgPDwgIDgpIDstIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCitBVDkxQ19UREVTX1NNT0RfUERDICAgICAgIEVRVSAoMHgyIDw8ICA4KSA7LSAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorQVQ5MUNfVERFU19PUE1PRCAgICAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKFRERVMpIE9wZXJhdGlvbiBNb2RlDQorQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICBFUVUgKDB4MCA8PCAxMikgOy0gKFRERVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorQVQ5MUNfVERFU19PUE1PRF9DQkMgICAgICBFUVUgKDB4MSA8PCAxMikgOy0gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCitBVDkxQ19UREVTX09QTU9EX09GQiAgICAgIEVRVSAoMHgyIDw8IDEyKSA7LSAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KK0FUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgRVFVICgweDMgPDwgMTIpIDstIChUREVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorQVQ5MUNfVERFU19MT0QgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KK0FUOTFDX1RERVNfQ0ZCUyAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICBFUVUgKDB4MCA8PCAxNikgOy0gKFRERVMpIDY0LWJpdC4NCitBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVERFUykgMzItYml0Lg0KK0FUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgRVFVICgweDIgPDwgMTYpIDstIChUREVTKSAxNi1iaXQuDQorQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRERVMpIDgtYml0Lg0KKy8vIC0gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVERFU19EQVRSRFkgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFRERVMpIERBVFJEWQ0KK0FUOTFDX1RERVNfRU5EUlggICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorQVQ5MUNfVERFU19SWEJVRkYgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorQVQ5MUNfVERFU19UWEJVRkUgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCitBVDkxQ19UREVTX1VSQUQgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVERFU19VUkFUICAgICAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KK0FUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyBFUVUgKDB4MCA8PCAxMikgOy0gKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCitBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgRVFVICgweDEgPDwgMTIpIDstIChUREVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KK0FUOTFDX1RERVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgRVFVICgweDIgPDwgMTIpIDstIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEIEVRVSAoMHgzIDw8IDEyKSA7LSAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0FJQ19JVlIgICAgICAgICAgICAgRVFVICgweEZGRkZGMTAwKSA7LSAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX1NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYwMDApIDstIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMDQpIDstIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXINCitBVDkxQ19BSUNfRENSICAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEzOCkgOy0gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCitBVDkxQ19BSUNfRU9JQ1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjEzMCkgOy0gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYwODApIDstIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCitBVDkxQ19BSUNfRkZTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjE0OCkgOy0gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19JQ0NSICAgICAgICAgICAgRVFVICgweEZGRkZGMTI4KSA7LSAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19JU1IgICAgICAgICAgICAgRVFVICgweEZGRkZGMTA4KSA7LSAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMTApIDstIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMEMpIDstIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkYxNDApIDstIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19BSUNfSUVDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEyMCkgOy0gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lTQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMkMpIDstIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19GRkRSICAgICAgICAgICAgRVFVICgweEZGRkZGMTQ0KSA7LSAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19DSVNSICAgICAgICAgICAgRVFVICgweEZGRkZGMTE0KSA7LSAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19BSUNfSURDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEyNCkgOy0gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19TUFUgICAgICAgICAgICAgRVFVICgweEZGRkZGMTM0KSA7LSAoQUlDKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0RCR1VfVENSICAgICAgICAgICAgRVFVICgweEZGRkZGMzBDKSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JOUFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjMxMCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgRVFVICgweEZGRkZGMzE4KSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVFBSICAgICAgICAgICAgRVFVICgweEZGRkZGMzA4KSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjMwMCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjMwNCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JOQ1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjMxNCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkZGMzIwKSA7LSAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICBFUVUgKDB4RkZGRkYzMjQpIDstIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVE5DUiAgICAgICAgICAgRVFVICgweEZGRkZGMzFDKSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19EQkdVX0VYSUQgICAgICAgICAgIEVRVSAoMHhGRkZGRjI0NCkgOy0gKERCR1UpIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICBFUVUgKDB4RkZGRkYyMjApIDstIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9JRFIgICAgICAgICAgICBFUVUgKDB4RkZGRkYyMEMpIDstIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgRVFVICgweEZGRkZGMjE0KSA7LSAoREJHVSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjI0MCkgOy0gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCitBVDkxQ19EQkdVX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZGRjIwNCkgOy0gKERCR1UpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjIxMCkgOy0gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYyMDApIDstIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9GTlRSICAgICAgICAgICBFUVUgKDB4RkZGRkYyNDgpIDstIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVEhSICAgICAgICAgICAgRVFVICgweEZGRkZGMjFDKSA7LSAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfUkhSICAgICAgICAgICAgRVFVICgweEZGRkZGMjE4KSA7LSAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfSUVSICAgICAgICAgICAgRVFVICgweEZGRkZGMjA4KSA7LSAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QSU9BX09EUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQxNCkgOy0gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KK0FUOTFDX1BJT0FfU09EUiAgICAgICAgICAgRVFVICgweEZGRkZGNDMwKSA7LSAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NEMpIDstIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9BQlNSICAgICAgICAgICBFUVUgKDB4RkZGRkY0NzgpIDstIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NDApIDstIChQSU9BKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QUFVEUiAgICAgICAgICBFUVUgKDB4RkZGRkY0NjApIDstIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ0OCkgOy0gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY0MDApIDstIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JRkRSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MjQpIDstIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1dEUiAgICAgICAgICAgRVFVICgweEZGRkZGNEE0KSA7LSAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX01EU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ1OCkgOy0gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ0NCkgOy0gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9PRFNSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MzgpIDstIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgIEVRVSAoMHhGRkZGRjQ2OCkgOy0gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9PV1NSICAgICAgICAgICBFUVUgKDB4RkZGRkY0QTgpIDstIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9CU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NzQpIDstIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgRVFVICgweEZGRkZGNEEwKSA7LSAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfSUZFUiAgICAgICAgICAgRVFVICgweEZGRkZGNDIwKSA7LSAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfUERTUiAgICAgICAgICAgRVFVICgweEZGRkZGNDNDKSA7LSAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICBFUVUgKDB4RkZGRkY0NjQpIDstIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1NSICAgICAgICAgICAgRVFVICgweEZGRkZGNDE4KSA7LSAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfQVNSICAgICAgICAgICAgRVFVICgweEZGRkZGNDcwKSA7LSAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCitBVDkxQ19QSU9BX01ERFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ1NCkgOy0gKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9DT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MzQpIDstIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfTURFUiAgICAgICAgICAgRVFVICgweEZGRkZGNDUwKSA7LSAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfUERSICAgICAgICAgICAgRVFVICgweEZGRkZGNDA0KSA7LSAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lGU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjQyOCkgOy0gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX09FUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQxMCkgOy0gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQwOCkgOy0gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUElPQl9PV0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2QTQpIDstIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfTURFUiAgICAgICAgICAgRVFVICgweEZGRkZGNjUwKSA7LSAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgRVFVICgweEZGRkZGNjY4KSA7LSAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjY0OCkgOy0gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9BU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY2NzApIDstIChQSU9CKSBTZWxlY3QgQSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgRVFVICgweEZGRkZGNjYwKSA7LSAoUElPQikgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9QU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MDgpIDstIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9JRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2NDApIDstIChQSU9CKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2MzQpIDstIChQSU9CKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfT1dFUiAgICAgICAgICAgRVFVICgweEZGRkZGNkEwKSA7LSAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfQUJTUiAgICAgICAgICAgRVFVICgweEZGRkZGNjc4KSA7LSAoUElPQikgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgRVFVICgweEZGRkZGNjI0KSA7LSAoUElPQikgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BEU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYzQykgOy0gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSURSICAgICAgICAgICAgRVFVICgweEZGRkZGNjQ0KSA7LSAoUElPQikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9CX09XU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjZBOCkgOy0gKFBJT0IpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjYwNCkgOy0gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9PRFIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MTQpIDstIChQSU9CKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCitBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYyOCkgOy0gKFBJT0IpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BQVUVSICAgICAgICAgIEVRVSAoMHhGRkZGRjY2NCkgOy0gKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9TT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2MzApIDstIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCitBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjY0QykgOy0gKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX09EU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYzOCkgOy0gKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfT1NSICAgICAgICAgICAgRVFVICgweEZGRkZGNjE4KSA7LSAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfTURTUiAgICAgICAgICAgRVFVICgweEZGRkZGNjU4KSA7LSAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSUZFUiAgICAgICAgICAgRVFVICgweEZGRkZGNjIwKSA7LSAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfQlNSICAgICAgICAgICAgRVFVICgweEZGRkZGNjc0KSA7LSAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCitBVDkxQ19QSU9CX01ERFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjY1NCkgOy0gKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9PRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MTApIDstIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9QRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MDApIDstIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0NLR1JfTU9SICAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorQVQ5MUNfQ0tHUl9QTExSICAgICAgICAgICBFUVUgKDB4RkZGRkZDMkMpIDstIChDS0dSKSBQTEwgUmVnaXN0ZXINCitBVDkxQ19DS0dSX01DRlIgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyNCkgOy0gKENLR1IpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1BNQ19JRFIgICAgICAgICAgICAgRVFVICgweEZGRkZGQzY0KSA7LSAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19NT1IgICAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCitBVDkxQ19QTUNfUExMUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyQykgOy0gKFBNQykgUExMIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMTApIDstIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1BDS1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZDNDApIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19NQ0tSICAgICAgICAgICAgRVFVICgweEZGRkZGQzMwKSA7LSAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCitBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMwNCkgOy0gKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QTUNfUENEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMxNCkgOy0gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1NDU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDgpIDstIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QTUNfUENTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMxOCkgOy0gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QTUNfTUNGUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyNCkgOy0gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1NDRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDApIDstIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19QTUNfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkM2QykgOy0gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19QTUNfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkM2MCkgOy0gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19TUiAgICAgICAgICAgICAgRVFVICgweEZGRkZGQzY4KSA7LSAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDApIDstIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfUlNUQ19STVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDgpIDstIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUlNUQ19SU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDQpIDstIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMkMpIDstIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUlRUQ19SVE1SICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjApIDstIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1JUVENfUlRWUiAgICAgICAgICAgRVFVICgweEZGRkZGRDI4KSA7LSAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjQpIDstIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUElUQ19QSVZSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMzgpIDstIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCitBVDkxQ19QSVRDX1BJU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzNCkgOy0gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzQykgOy0gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KK0FUOTFDX1BJVENfUElNUiAgICAgICAgICAgRVFVICgweEZGRkZGRDMwKSA7LSAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfV0RUQ19XRENSICAgICAgICAgICBFUVUgKDB4RkZGRkZENDApIDstIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICBFUVUgKDB4RkZGRkZENDgpIDstIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19XRFRDX1dETVIgICAgICAgICAgIEVRVSAoMHhGRkZGRkQ0NCkgOy0gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVlJFR19NUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkZENjApIDstIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19NQ19BU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwNCkgOy0gKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19NQ19SQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwMCkgOy0gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRkNSICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjQpIDstIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX01DX0FBU1IgICAgICAgICAgICAgRVFVICgweEZGRkZGRjA4KSA7LSAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRlNSICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjgpIDstIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRk1SICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjApIDstIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMjApIDstIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDEwMCkgOy0gKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFNDExQykgOy0gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDEwOCkgOy0gKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9UTlBSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMTgpIDstIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9UQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRTQxMEMpIDstIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfUkNSICAgICAgICAgICAgRVFVICgweEZGRkU0MTA0KSA7LSAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfUk5QUiAgICAgICAgICAgRVFVICgweEZGRkU0MTEwKSA7LSAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9STkNSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMTQpIDstIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgIEVRVSAoMHhGRkZFNDEyNCkgOy0gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NQSTFfSU1SICAgICAgICAgICAgRVFVICgweEZGRkU0MDFDKSA7LSAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19TUEkxX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAxNCkgOy0gKFNQSTEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwNCkgOy0gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1JEUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwOCkgOy0gKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfSURSICAgICAgICAgICAgRVFVICgweEZGRkU0MDE4KSA7LSAoU1BJMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAxMCkgOy0gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfVERSICAgICAgICAgICAgRVFVICgweEZGRkU0MDBDKSA7LSAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfQ1IgICAgICAgICAgICAgRVFVICgweEZGRkU0MDAwKSA7LSAoU1BJMSkgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgRVFVICgweEZGRkU0MDMwKSA7LSAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NQSTBfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkUwMTIwKSA7LSAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9UUFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAxMDgpIDstIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfVENSICAgICAgICAgICAgRVFVICgweEZGRkUwMTBDKSA7LSAoUERDX1NQSTApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JDUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDEwNCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1BUU1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDEyNCkgOy0gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICBFUVUgKDB4RkZGRTAxMTApIDstIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDEwMCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDExQykgOy0gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDExNCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfVE5QUiAgICAgICAgICAgRVFVICgweEZGRkUwMTE4KSA7LSAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19TUEkwX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxNCkgOy0gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxMCkgOy0gKFNQSTApIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfSURSICAgICAgICAgICAgRVFVICgweEZGRkUwMDE4KSA7LSAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAwMCkgOy0gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19TUEkwX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAwNCkgOy0gKFNQSTApIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxQykgOy0gKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9URFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAwMEMpIDstIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAwMDgpIDstIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0NTUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAzMCkgOy0gKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1VTMV9STkNSICAgICAgICAgICAgRVFVICgweEZGRkM0MTE0KSA7LSAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEyMCkgOy0gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMEMpIDstIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMjQpIDstIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMTgpIDstIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUkNSICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEwNCkgOy0gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9STlBSICAgICAgICAgICAgRVFVICgweEZGRkM0MTEwKSA7LSAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUlBSICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEwMCkgOy0gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9UTkNSICAgICAgICAgICAgRVFVICgweEZGRkM0MTFDKSA7LSAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMDgpIDstIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwNEMpIDstIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX05FUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwNDQpIDstIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9SVE9SICAgICAgICAgICAgRVFVICgweEZGRkM0MDI0KSA7LSAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9DU1IgICAgICAgICAgICAgRVFVICgweEZGRkM0MDE0KSA7LSAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDBDKSA7LSAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDA4KSA7LSAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwMUMpIDstIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19VUzFfVFRHUiAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAyOCkgOy0gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9SSFIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDE4KSA7LSAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICBFUVUgKDB4RkZGQzQwMjApIDstIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19VUzFfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAxMCkgOy0gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19VUzFfRklESSAgICAgICAgICAgIEVRVSAoMHhGRkZDNDA0MCkgOy0gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCitBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAwMCkgOy0gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkM0MDA0KSA7LSAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1VTMF9UTlBSICAgICAgICAgICAgRVFVICgweEZGRkMwMTE4KSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICBFUVUgKDB4RkZGQzAxMTApIDstIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9UQ1IgICAgICAgICAgICAgRVFVICgweEZGRkMwMTBDKSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9QVENSICAgICAgICAgICAgRVFVICgweEZGRkMwMTIwKSA7LSAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDEyNCkgOy0gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19VUzBfVE5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDExQykgOy0gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9UUFIgICAgICAgICAgICAgRVFVICgweEZGRkMwMTA4KSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgRVFVICgweEZGRkMwMTA0KSA7LSAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JQUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAxMDApIDstIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzBfUk5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDExNCkgOy0gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMjApIDstIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19VUzBfTkVSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDA0NCkgOy0gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX0NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMDApIDstIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19VUzBfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAxMCkgOy0gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19VUzBfRklESSAgICAgICAgICAgIEVRVSAoMHhGRkZDMDA0MCkgOy0gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCitBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAyOCkgOy0gKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkMwMDA0KSA7LSAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JUT1IgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMjQpIDstIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMTQpIDstIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMTgpIDstIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19VUzBfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAwQykgOy0gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19VUzBfVEhSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAxQykgOy0gKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9JRiAgICAgICAgICAgICAgRVFVICgweEZGRkMwMDRDKSA7LSAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkMwMDA4KSA7LSAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NTQ19UTkNSICAgICAgICAgICAgRVFVICgweEZGRkQ0MTFDKSA7LSAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMDApIDstIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TU0NfUk5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDExNCkgOy0gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMDgpIDstIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMjApIDstIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UQ1IgICAgICAgICAgICAgRVFVICgweEZGRkQ0MTBDKSA7LSAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19SQ1IgICAgICAgICAgICAgRVFVICgweEZGRkQ0MTA0KSA7LSAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMTApIDstIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UTlBSICAgICAgICAgICAgRVFVICgweEZGRkQ0MTE4KSA7LSAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMjQpIDstIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMjApIDstIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19SU0hSICAgICAgICAgICAgRVFVICgweEZGRkQ0MDMwKSA7LSAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19URk1SICAgICAgICAgICAgRVFVICgweEZGRkQ0MDFDKSA7LSAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwNDgpIDstIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMjQpIDstIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19TU0NfUkNNUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDAxMCkgOy0gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCitBVDkxQ19TU0NfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZENDA0NCkgOy0gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UU0hSICAgICAgICAgICAgRVFVICgweEZGRkQ0MDM0KSA7LSAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19TU0NfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZENDA0MCkgOy0gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMDQpIDstIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TU0NfVENNUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDAxOCkgOy0gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19DUiAgICAgICAgICAgICAgRVFVICgweEZGRkQ0MDAwKSA7LSAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwNEMpIDstIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JGTVIgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMTQpIDstIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RXSV9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkI4MDI0KSA7LSAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMDApIDstIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19UV0lfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAyMCkgOy0gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMkMpIDstIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMzQpIDstIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19UV0lfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAyOCkgOy0gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgIEVRVSAoMHhGRkZCODAwQykgOy0gKFRXSSkgSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KK0FUOTFDX1RXSV9NTVIgICAgICAgICAgICAgRVFVICgweEZGRkI4MDA0KSA7LSAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1RXSV9DV0dSICAgICAgICAgICAgRVFVICgweEZGRkI4MDEwKSA7LSAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19UV0lfUkhSICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAzMCkgOy0gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzI3MCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICAgRVFVICgweEZGRkNDMjc0KSA7LSAoUFdNQ19DSDMpIFJlc2VydmVkDQorQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgICAgICBFUVUgKDB4RkZGQ0MyNjgpIDstIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgIEVRVSAoMHhGRkZDQzI2NCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DQ05UUiAgICAgIEVRVSAoMHhGRkZDQzI2QykgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DTVIgICAgICAgIEVRVSAoMHhGRkZDQzI2MCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgRVFVICgweEZGRkNDMjU0KSA7LSAoUFdNQ19DSDIpIFJlc2VydmVkDQorQVQ5MUNfUFdNQ19DSDJfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyNDApIDstIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgICAgICBFUVUgKDB4RkZGQ0MyNEMpIDstIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICBFUVUgKDB4RkZGQ0MyNDgpIDstIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIMl9DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzI1MCkgOy0gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gyX0NEVFlSICAgICAgRVFVICgweEZGRkNDMjQ0KSA7LSAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICBFUVUgKDB4RkZGQ0MyMzQpIDstIChQV01DX0NIMSkgUmVzZXJ2ZWQNCitBVDkxQ19QV01DX0NIMV9DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzIzMCkgOy0gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gxX0NQUkRSICAgICAgRVFVICgweEZGRkNDMjI4KSA7LSAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICBFUVUgKDB4RkZGQ0MyMkMpIDstIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgICAgICBFUVUgKDB4RkZGQ0MyMjQpIDstIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyMjApIDstIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgIEVRVSAoMHhGRkZDQzIxNCkgOy0gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KK0FUOTFDX1BXTUNfQ0gwX0NQUkRSICAgICAgRVFVICgweEZGRkNDMjA4KSA7LSAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgICAgICBFUVUgKDB4RkZGQ0MyMDQpIDstIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyMDApIDstIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgICAgICBFUVUgKDB4RkZGQ0MyMTApIDstIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIMF9DQ05UUiAgICAgIEVRVSAoMHhGRkZDQzIwQykgOy0gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMTQpIDstIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMDgpIDstIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAxMCkgOy0gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfVlIgICAgICAgICAgICAgRVFVICgweEZGRkNDMEZDKSA7LSAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMUMpIDstIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QV01DX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAwQykgOy0gKFBXTUMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMTgpIDstIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMDApIDstIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0VOQSAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAwNCkgOy0gKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMTgpIDstIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0ZBRERSICAgICAgICAgICBFUVUgKDB4RkZGQjAwMDgpIDstIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCitBVDkxQ19VRFBfTlVNICAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAwMCkgOy0gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwNTApIDstIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JU1IgICAgICAgICAgICAgRVFVICgweEZGRkIwMDFDKSA7LSAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMzApIDstIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkIwMDE0KSA7LSAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JQ1IgICAgICAgICAgICAgRVFVICgweEZGRkIwMDIwKSA7LSAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCitBVDkxQ19VRFBfUlNURVAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAyOCkgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCitBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgIEVRVSAoMHhGRkZCMDA3NCkgOy0gKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9HTEJTVEFURSAgICAgICAgRVFVICgweEZGRkIwMDA0KSA7LSAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCitBVDkxQ19VRFBfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAxMCkgOy0gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RDMF9TUiAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDIwKSA7LSAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19UQzBfUkMgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDAxQykgOy0gKFRDMCkgUmVnaXN0ZXIgQw0KK0FUOTFDX1RDMF9SQiAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDE4KSA7LSAoVEMwKSBSZWdpc3RlciBCDQorQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMDApIDstIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1RDMF9DTVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMDA0KSA7LSAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorQVQ5MUNfVEMwX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMjQpIDstIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19UQzBfUkEgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDAxNCkgOy0gKFRDMCkgUmVnaXN0ZXIgQQ0KK0FUOTFDX1RDMF9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkEwMDI4KSA7LSAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1RDMF9DViAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDEwKSA7LSAoVEMwKSBDb3VudGVyIFZhbHVlDQorQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMkMpIDstIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVEMxX1JCICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNTgpIDstIChUQzEpIFJlZ2lzdGVyIEINCitBVDkxQ19UQzFfQ0NSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA0MCkgOy0gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNjQpIDstIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19UQzFfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA2OCkgOy0gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UQzFfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA2MCkgOy0gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNDQpIDstIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCitBVDkxQ19UQzFfUkEgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA1NCkgOy0gKFRDMSkgUmVnaXN0ZXIgQQ0KK0FUOTFDX1RDMV9SQyAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDVDKSA7LSAoVEMxKSBSZWdpc3RlciBDDQorQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNkMpIDstIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0NWICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNTApIDstIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19UQzJfQ01SICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA4NCkgOy0gKFRDMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KK0FUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgRVFVICgweEZGRkEwMDgwKSA7LSAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19UQzJfQ1YgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA5MCkgOy0gKFRDMikgQ291bnRlciBWYWx1ZQ0KK0FUOTFDX1RDMl9SQSAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDk0KSA7LSAoVEMyKSBSZWdpc3RlciBBDQorQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwOTgpIDstIChUQzIpIFJlZ2lzdGVyIEINCitBVDkxQ19UQzJfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDBBOCkgOy0gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UQzJfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDBBQykgOy0gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19UQzJfUkMgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA5QykgOy0gKFRDMikgUmVnaXN0ZXIgQw0KK0FUOTFDX1RDMl9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMEE0KSA7LSAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwQTApIDstIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RDQl9CTVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMEM0KSA7LSAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfVENCX0JDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwQzApIDstIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMF9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyMTQpIDstIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyMDQpIDstIChDQU5fTUIwKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjBfTUNSICAgICAgICAgRVFVICgweEZGRkQwMjFDKSA7LSAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyMDgpIDstIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyMTApIDstIChDQU5fTUIwKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjBfTUZJRCAgICAgICAgRVFVICgweEZGRkQwMjBDKSA7LSAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIwX01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDIxOCkgOy0gKENBTl9NQjApIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyMDApIDstIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMV9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyMzQpIDstIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyMjgpIDstIChDQU5fTUIxKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyMjApIDstIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIxX01TUiAgICAgICAgIEVRVSAoMHhGRkZEMDIzMCkgOy0gKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyMjQpIDstIChDQU5fTUIxKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjFfTURIICAgICAgICAgRVFVICgweEZGRkQwMjM4KSA7LSAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIxX01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDIzQykgOy0gKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjFfTUZJRCAgICAgICAgRVFVICgweEZGRkQwMjJDKSA7LSAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyNUMpIDstIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIyX01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDI1OCkgOy0gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyNDgpIDstIChDQU5fTUIyKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyNTQpIDstIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyNDApIDstIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIyX01BTSAgICAgICAgIEVRVSAoMHhGRkZEMDI0NCkgOy0gKENBTl9NQjIpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyNEMpIDstIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjJfTVNSICAgICAgICAgRVFVICgweEZGRkQwMjUwKSA7LSAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CM19NRklEICAgICAgICBFUVUgKDB4RkZGRDAyNkMpIDstIChDQU5fTUIzKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgRVFVICgweEZGRkQwMjY0KSA7LSAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIzX01JRCAgICAgICAgIEVRVSAoMHhGRkZEMDI2OCkgOy0gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIzX01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDI3QykgOy0gKENBTl9NQjMpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgRVFVICgweEZGRkQwMjYwKSA7LSAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CM19NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyNzApIDstIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTURMICAgICAgICAgRVFVICgweEZGRkQwMjc0KSA7LSAoQ0FOX01CMykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTURIICAgICAgICAgRVFVICgweEZGRkQwMjc4KSA7LSAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNF9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyODgpIDstIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNF9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyODApIDstIChDQU5fTUI0KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDI5OCkgOy0gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNF9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyOEMpIDstIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTVNSICAgICAgICAgRVFVICgweEZGRkQwMjkwKSA7LSAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDI5QykgOy0gKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTURMICAgICAgICAgRVFVICgweEZGRkQwMjk0KSA7LSAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTUFNICAgICAgICAgRVFVICgweEZGRkQwMjg0KSA7LSAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyQjApIDstIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTUNSICAgICAgICAgRVFVICgweEZGRkQwMkJDKSA7LSAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNV9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyQUMpIDstIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTURIICAgICAgICAgRVFVICgweEZGRkQwMkI4KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI1X01JRCAgICAgICAgIEVRVSAoMHhGRkZEMDJBOCkgOy0gKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI1X01NUiAgICAgICAgIEVRVSAoMHhGRkZEMDJBMCkgOy0gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTURMICAgICAgICAgRVFVICgweEZGRkQwMkI0KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTUFNICAgICAgICAgRVFVICgweEZGRkQwMkE0KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNl9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyQ0MpIDstIChDQU5fTUI2KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgRVFVICgweEZGRkQwMkM4KSA7LSAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjZfTUFNICAgICAgICAgRVFVICgweEZGRkQwMkM0KSA7LSAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI2X01TUiAgICAgICAgIEVRVSAoMHhGRkZEMDJEMCkgOy0gKENBTl9NQjYpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyRDQpIDstIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyREMpIDstIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI2X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDJEOCkgOy0gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyQzApIDstIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CN19NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyRkMpIDstIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI3X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDJGOCkgOy0gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICBFUVUgKDB4RkZGRDAyRUMpIDstIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTURMICAgICAgICAgRVFVICgweEZGRkQwMkY0KSA7LSAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTUlEICAgICAgICAgRVFVICgweEZGRkQwMkU4KSA7LSAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgRVFVICgweEZGRkQwMkUwKSA7LSAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CN19NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyRTQpIDstIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTVNSICAgICAgICAgRVFVICgweEZGRkQwMkYwKSA7LSAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19DQU5fVENSICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAyNCkgOy0gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9JTVIgICAgICAgICAgICAgRVFVICgweEZGRkQwMDBDKSA7LSAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkQwMDA0KSA7LSAoQ0FOKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMjApIDstIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19DQU5fVElNRVNUUCAgICAgICAgIEVRVSAoMHhGRkZEMDAxQykgOy0gKENBTikgVGltZSBTdGFtcCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkQwMDAwKSA7LSAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMDgpIDstIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0FDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMjgpIDstIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCitBVDkxQ19DQU5fVElNICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAxOCkgOy0gKENBTikgVGltZXIgUmVnaXN0ZXINCitBVDkxQ19DQU5fU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAxMCkgOy0gKENBTikgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0JSICAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMTQpIDstIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX1ZSICAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwRkMpIDstIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgRU1BQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMjQpIDstIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTRIICAgICAgICAgICBFUVUgKDB4RkZGREMwQjQpIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCitBVDkxQ19FTUFDX1NBMUwgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5OCkgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCitBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA3OCkgOy0gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19MQ09MICAgICAgICAgICBFUVUgKDB4RkZGREMwNUMpIDstIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUkxFICAgICAgICAgICAgRVFVICgweEZGRkRDMDg4KSA7LSAoRU1BQykgUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCitBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBDNCkgOy0gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19EVEYgICAgICAgICAgICBFUVUgKDB4RkZGREMwNTgpIDstIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1RVTkQgICAgICAgICAgIEVRVSAoMHhGRkZEQzA2NCkgOy0gKEVNQUMpIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMDApIDstIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1NBNEwgICAgICAgICAgIEVRVSAoMHhGRkZEQzBCMCkgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCitBVDkxQ19FTUFDX1JTUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyMCkgOy0gKEVNQUMpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICBFUVUgKDB4RkZGREMwQTgpIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorQVQ5MUNfRU1BQ19UU1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMTQpIDstIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyQykgOy0gKEVNQUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICBFUVUgKDB4RkZGREMwNzQpIDstIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0VDT0wgICAgICAgICAgIEVRVSAoMHhGRkZEQzA2MCkgOy0gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCitBVDkxQ19FTUFDX1RJRCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBCOCkgOy0gKEVNQUMpIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5MCkgOy0gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCitBVDkxQ19FTUFDX1RCUVAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAxQykgOy0gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorQVQ5MUNfRU1BQ19VU1JJTyAgICAgICAgICBFUVUgKDB4RkZGREMwQzApIDstIChFTUFDKSBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUFRSICAgICAgICAgICAgRVFVICgweEZGRkRDMDM4KSA7LSAoRU1BQykgUGF1c2UgVGltZSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0EySCAgICAgICAgICAgRVFVICgweEZGRkRDMEE0KSA7LSAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorQVQ5MUNfRU1BQ19ST1YgICAgICAgICAgICBFUVUgKDB4RkZGREMwNzApIDstIChFTUFDKSBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICBFUVUgKDB4RkZGREMwNTQpIDstIChFTUFDKSBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1JKQSAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA3QykgOy0gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUkJRUCAgICAgICAgICAgRVFVICgweEZGRkRDMDE4KSA7LSAoRU1BQykgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KK0FUOTFDX0VNQUNfVFBGICAgICAgICAgICAgRVFVICgweEZGRkRDMDhDKSA7LSAoRU1BQykgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19OQ0ZHUiAgICAgICAgICBFUVUgKDB4RkZGREMwMDQpIDstIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCitBVDkxQ19FTUFDX0hSVCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5NCkgOy0gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICBFUVUgKDB4RkZGREMwODApIDstIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19GQ1NFICAgICAgICAgICBFUVUgKDB4RkZGREMwNTApIDstIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfVFBRICAgICAgICAgICAgRVFVICgweEZGRkRDMEJDKSA7LSAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfTUFOICAgICAgICAgICAgRVFVICgweEZGRkRDMDM0KSA7LSAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19GVE8gICAgICAgICAgICBFUVUgKDB4RkZGREMwNDApIDstIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1JFViAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBGQykgOy0gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGREMwMzApIDstIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0NGICAgICAgICAgICAgRVFVICgweEZGRkRDMDQ0KSA7LSAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUEZSICAgICAgICAgICAgRVFVICgweEZGRkRDMDNDKSA7LSAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICBFUVUgKDB4RkZGREMwNDgpIDstIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX05TUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAwOCkgOy0gKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTJMICAgICAgICAgICBFUVUgKDB4RkZGREMwQTApIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICBFUVUgKDB4RkZGREMwNEMpIDstIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyOCkgOy0gKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1NBMUggICAgICAgICAgIEVRVSAoMHhGRkZEQzA5QykgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KK0FUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgRVFVICgweEZGRkRDMDY4KSA7LSAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0EzSCAgICAgICAgICAgRVFVICgweEZGRkRDMEFDKSA7LSAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorQVQ5MUNfRU1BQ19SUkUgICAgICAgICAgICBFUVUgKDB4RkZGREMwNkMpIDstIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU1RFICAgICAgICAgICAgRVFVICgweEZGRkRDMDg0KSA7LSAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQURDX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMjQpIDstIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMjApIDstIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19UTlBSICAgICAgICAgICAgRVFVICgweEZGRkQ4MTE4KSA7LSAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMUMpIDstIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRENfUk5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZEODExMCkgOy0gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMTQpIDstIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19SUFIgICAgICAgICAgICAgRVFVICgweEZGRkQ4MTAwKSA7LSAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMEMpIDstIChQRENfQURDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMDgpIDstIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1JDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMDQpIDstIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19BRENfQ0RSMiAgICAgICAgICAgIEVRVSAoMHhGRkZEODAzOCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICBFUVUgKDB4RkZGRDgwM0MpIDstIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KK0FUOTFDX0FEQ19DRFIwICAgICAgICAgICAgRVFVICgweEZGRkQ4MDMwKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCitBVDkxQ19BRENfQ0RSNSAgICAgICAgICAgIEVRVSAoMHhGRkZEODA0NCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMTQpIDstIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19BRENfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAxQykgOy0gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DRFI0ICAgICAgICAgICAgRVFVICgweEZGRkQ4MDQwKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCitBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgIEVRVSAoMHhGRkZEODAzNCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorQVQ5MUNfQURDX0xDRFIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjApIDstIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfQURDX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjgpIDstIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DUiAgICAgICAgICAgICAgRVFVICgweEZGRkQ4MDAwKSA7LSAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DRFI3ICAgICAgICAgICAgRVFVICgweEZGRkQ4MDRDKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCitBVDkxQ19BRENfQ0RSNiAgICAgICAgICAgIEVRVSAoMHhGRkZEODA0OCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjQpIDstIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQURDX0NIRVIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMTApIDstIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DSFNSICAgICAgICAgICAgRVFVICgweEZGRkQ4MDE4KSA7LSAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19BRENfTVIgICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAwNCkgOy0gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19BRENfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAyQykgOy0gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0FFU19UUFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MTA4KSA7LSAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19QVENSICAgICAgICAgICAgRVFVICgweEZGRkE0MTIwKSA7LSAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19BRVNfUk5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZBNDExMCkgOy0gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX1ROQ1IgICAgICAgICAgICBFUVUgKDB4RkZGQTQxMUMpIDstIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfVENSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDEwQykgOy0gKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfUkNSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDEwNCkgOy0gKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19STkNSICAgICAgICAgICAgRVFVICgweEZGRkE0MTE0KSA7LSAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZBNDExOCkgOy0gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19SUFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MTAwKSA7LSAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGQTQxMjQpIDstIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICBFUVUgKDB4RkZGQTQwNjApIDstIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorQVQ5MUNfQUVTX01SICAgICAgICAgICAgICBFUVUgKDB4RkZGQTQwMDQpIDstIChBRVMpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19BRVNfVlIgICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDBGQykgOy0gKEFFUykgQUVTIFZlcnNpb24gUmVnaXN0ZXINCitBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgIEVRVSAoMHhGRkZBNDA1MCkgOy0gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JREFUQXhSICAgICAgICAgRVFVICgweEZGRkE0MDQwKSA7LSAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCitBVDkxQ19BRVNfQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAwMCkgOy0gKEFFUykgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JRFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDE0KSA7LSAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JTVIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDE4KSA7LSAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JRVIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDEwKSA7LSAoQUVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICBFUVUgKDB4RkZGQTQwMjApIDstIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCitBVDkxQ19BRVNfSVNSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAxQykgOy0gKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVERFU19STkNSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTQpIDstIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1RDUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwQykgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19SQ1IgICAgICAgICAgICBFUVUgKDB4RkZGQTgxMDQpIDstIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19UTlBSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTgpIDstIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19STlBSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTApIDstIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwMCkgOy0gKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZBODExQykgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1RQUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwOCkgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19QVFNSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMjQpIDstIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkE4MTIwKSA7LSAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RERVNfS0VZMld4UiAgICAgICAgRVFVICgweEZGRkE4MDI4KSA7LSAoVERFUykgS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19LRVkzV3hSICAgICAgICBFUVUgKDB4RkZGQTgwMzApIDstIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCitBVDkxQ19UREVTX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODAxNCkgOy0gKFRERVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19WUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTgwRkMpIDstIChUREVTKSBUREVTIFZlcnNpb24gUmVnaXN0ZXINCitBVDkxQ19UREVTX0lWeFIgICAgICAgICAgIEVRVSAoMHhGRkZBODA2MCkgOy0gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19PREFUQXhSICAgICAgICBFUVUgKDB4RkZGQTgwNTApIDstIChUREVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGQTgwMTgpIDstIChUREVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfTVIgICAgICAgICAgICAgRVFVICgweEZGRkE4MDA0KSA7LSAoVERFUykgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfQ1IgICAgICAgICAgICAgRVFVICgweEZGRkE4MDAwKSA7LSAoVERFUykgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSUVSICAgICAgICAgICAgRVFVICgweEZGRkE4MDEwKSA7LSAoVERFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSVNSICAgICAgICAgICAgRVFVICgweEZGRkE4MDFDKSA7LSAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSURBVEF4UiAgICAgICAgRVFVICgweEZGRkE4MDQwKSA7LSAoVERFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICBFUVUgKDB4RkZGQTgwMjApIDstIChUREVTKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK0FUOTFDX1BJT19QQTAgICAgICAgICAgICAgRVFVICgxIDw8ICAwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTANCitBVDkxQ19QQTBfUlhEMCAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMCkgOy0gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICBFUVUgKDEgPDwgIDEpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KK0FUOTFDX1BBMV9UWEQwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExKSA7LSAgVVNBUlQgMCBUcmFuc21pdCBEYXRhDQorQVQ5MUNfUElPX1BBMTAgICAgICAgICAgICBFUVUgKDEgPDwgMTApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCitBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTApIDstICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCitBVDkxQ19QSU9fUEExMSAgICAgICAgICAgIEVRVSAoMSA8PCAxMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExMQ0KK0FUOTFDX1BBMTFfVFdDSyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExMSkgOy0gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCitBVDkxQ19QSU9fUEExMiAgICAgICAgICAgIEVRVSAoMSA8PCAxMikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExMg0KK0FUOTFDX1BBMTJfTlBDUzAwICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExMikgOy0gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KK0FUOTFDX1BJT19QQTEzICAgICAgICAgICAgRVFVICgxIDw8IDEzKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorQVQ5MUNfUEExM19OUENTMDEgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTEzKSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTEzKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KK0FUOTFDX1BJT19QQTE0ICAgICAgICAgICAgRVFVICgxIDw8IDE0KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorQVQ5MUNfUEExNF9OUENTMDIgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE0KSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorQVQ5MUNfUEExNF9JUlExICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE0KSA7LSAgRXh0ZXJuYWwgSW50ZXJydXB0IDENCitBVDkxQ19QSU9fUEExNSAgICAgICAgICAgIEVRVSAoMSA8PCAxNSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KK0FUOTFDX1BBMTVfTlBDUzAzICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExNSkgOy0gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KK0FUOTFDX1BBMTVfVENMSzIgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExNSkgOy0gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KK0FUOTFDX1BJT19QQTE2ICAgICAgICAgICAgRVFVICgxIDw8IDE2KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE2KSA7LSAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICBFUVUgKDEgPDwgMTcpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcNCitBVDkxQ19QQTE3X01PU0kwICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTcpIDstICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorQVQ5MUNfUElPX1BBMTggICAgICAgICAgICBFUVUgKDEgPDwgMTgpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTgNCitBVDkxQ19QQTE4X1NQQ0swICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTgpIDstICBTUEkgMCBTZXJpYWwgQ2xvY2sNCitBVDkxQ19QSU9fUEExOSAgICAgICAgICAgIEVRVSAoMSA8PCAxOSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KK0FUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExOSkgOy0gIENBTiBSZWNlaXZlDQorQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICBFUVUgKDEgPDwgIDIpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMg0KK0FUOTFDX1BBMl9TQ0swICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyKSA7LSAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCitBVDkxQ19QQTJfTlBDUzExICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMikgOy0gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KK0FUOTFDX1BJT19QQTIwICAgICAgICAgICAgRVFVICgxIDw8IDIwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTIwDQorQVQ5MUNfUEEyMF9DQU5UWCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIwKSA7LSAgQ0FOIFRyYW5zbWl0DQorQVQ5MUNfUElPX1BBMjEgICAgICAgICAgICBFUVUgKDEgPDwgMjEpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjENCitBVDkxQ19QQTIxX1RGICAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjEpIDstICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KK0FUOTFDX1BBMjFfTlBDUzEwICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyMSkgOy0gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KK0FUOTFDX1BJT19QQTIyICAgICAgICAgICAgRVFVICgxIDw8IDIyKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIyKSA7LSAgU1NDIFRyYW5zbWl0IENsb2NrDQorQVQ5MUNfUEEyMl9TUENLMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIyKSA7LSAgU1BJIDEgU2VyaWFsIENsb2NrDQorQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICBFUVUgKDEgPDwgMjMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCitBVDkxQ19QQTIzX1REICAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjMpIDstICBTU0MgVHJhbnNtaXQgZGF0YQ0KK0FUOTFDX1BBMjNfTU9TSTEgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyMykgOy0gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCitBVDkxQ19QSU9fUEEyNCAgICAgICAgICAgIEVRVSAoMSA8PCAyNCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KK0FUOTFDX1BBMjRfUkQgICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNCkgOy0gIFNTQyBSZWNlaXZlIERhdGENCitBVDkxQ19QQTI0X01JU08xICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjQpIDstICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCitBVDkxQ19QSU9fUEEyNSAgICAgICAgICAgIEVRVSAoMSA8PCAyNSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyNQ0KK0FUOTFDX1BBMjVfUksgICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNSkgOy0gIFNTQyBSZWNlaXZlIENsb2NrDQorQVQ5MUNfUEEyNV9OUENTMTEgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI1KSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICBFUVUgKDEgPDwgMjYpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCitBVDkxQ19QQTI2X1JGICAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjYpIDstICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jDQorQVQ5MUNfUEEyNl9OUENTMTIgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI2KSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorQVQ5MUNfUElPX1BBMjcgICAgICAgICAgICBFUVUgKDEgPDwgMjcpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCitBVDkxQ19QQTI3X0RSWEQgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjcpIDstICBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YQ0KK0FUOTFDX1BBMjdfUENLMyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNykgOy0gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCitBVDkxQ19QSU9fUEEyOCAgICAgICAgICAgIEVRVSAoMSA8PCAyOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KK0FUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyOCkgOy0gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KK0FUOTFDX1BJT19QQTI5ICAgICAgICAgICAgRVFVICgxIDw8IDI5KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorQVQ5MUNfUEEyOV9GSVEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI5KSA7LSAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI5KSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorQVQ5MUNfUElPX1BBMyAgICAgICAgICAgICBFUVUgKDEgPDwgIDMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KK0FUOTFDX1BBM19SVFMwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEzKSA7LSAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTMpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QSU9fUEEzMCAgICAgICAgICAgIEVRVSAoMSA8PCAzMCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KK0FUOTFDX1BBMzBfSVJRMCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEzMCkgOy0gIEV4dGVybmFsIEludGVycnVwdCAwDQorQVQ5MUNfUEEzMF9QQ0syICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTMwKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KK0FUOTFDX1BJT19QQTQgICAgICAgICAgICAgRVFVICgxIDw8ICA0KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTQNCitBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBNCkgOy0gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KK0FUOTFDX1BBNF9OUENTMTMgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE0KSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICBFUVUgKDEgPDwgIDUpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KK0FUOTFDX1BBNV9SWEQxICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE1KSA7LSAgVVNBUlQgMSBSZWNlaXZlIERhdGENCitBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEE2DQorQVQ5MUNfUEE2X1RYRDEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTYpIDstICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCitBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTcpIDstICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KK0FUOTFDX1BBN19OUENTMDEgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE3KSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICBFUVUgKDEgPDwgIDgpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KK0FUOTFDX1BBOF9SVFMxICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE4KSA7LSAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kDQorQVQ5MUNfUEE4X05QQ1MwMiAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTgpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgIEVRVSAoMSA8PCAgOSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTkpIDstICBVU0FSVCAxIENsZWFyIFRvIFNlbmQNCitBVDkxQ19QQTlfTlBDUzAzICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBOSkgOy0gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KK0FUOTFDX1BJT19QQjAgICAgICAgICAgICAgRVFVICgxIDw8ICAwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjANCitBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgIEVRVSAoQVQ5MUNfUElPX1BCMCkgOy0gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jay9SZWZlcmVuY2UgQ2xvY2sNCitBVDkxQ19QQjBfUENLMCAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMCkgOy0gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCitBVDkxQ19QSU9fUEIxICAgICAgICAgICAgIEVRVSAoMSA8PCAgMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjEpIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlDQorQVQ5MUNfUElPX1BCMTAgICAgICAgICAgICBFUVUgKDEgPDwgMTApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCitBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTApIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjEwKSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUElPX1BCMTEgICAgICAgICAgICBFUVUgKDEgPDwgMTEpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCitBVDkxQ19QQjExX0VUWDMgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTEpIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAzDQorQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjExKSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorQVQ5MUNfUElPX1BCMTIgICAgICAgICAgICBFUVUgKDEgPDwgMTIpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCitBVDkxQ19QQjEyX0VUWEVSICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTIpIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvcg0KK0FUOTFDX1BCMTJfVENMSzAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxMikgOy0gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KK0FUOTFDX1BJT19QQjEzICAgICAgICAgICAgRVFVICgxIDw8IDEzKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjEzKSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjEzKSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUElPX1BCMTQgICAgICAgICAgICBFUVUgKDEgPDwgMTQpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCitBVDkxQ19QQjE0X0VSWDMgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTQpIDstICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDMNCitBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTQpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QSU9fUEIxNSAgICAgICAgICAgIEVRVSAoMSA8PCAxNSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KK0FUOTFDX1BCMTVfRVJYRFYgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNSkgOy0gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQNCitBVDkxQ19QSU9fUEIxNiAgICAgICAgICAgIEVRVSAoMSA8PCAxNikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxNg0KK0FUOTFDX1BCMTZfRUNPTCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNikgOy0gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCitBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTYpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCitBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgIEVRVSAoMSA8PCAxNykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxNw0KK0FUOTFDX1BCMTdfRVJYQ0sgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNykgOy0gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorQVQ5MUNfUEIxN19OUENTMDMgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE3KSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorQVQ5MUNfUElPX1BCMTggICAgICAgICAgICBFUVUgKDEgPDwgMTgpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCitBVDkxQ19QQjE4X0VGMTAwICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTgpIDstICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KK0FUOTFDX1BCMThfQURUUkcgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxOCkgOy0gIEFEQyBFeHRlcm5hbCBUcmlnZ2VyDQorQVQ5MUNfUElPX1BCMTkgICAgICAgICAgICBFUVUgKDEgPDwgMTkpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTkNCitBVDkxQ19QQjE5X1BXTTAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTkpIDstICBQV00gQ2hhbm5lbCAwDQorQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE5KSA7LSAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICBFUVUgKDEgPDwgIDIpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMg0KK0FUOTFDX1BCMl9FVFgwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyKSA7LSAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KK0FUOTFDX1BJT19QQjIwICAgICAgICAgICAgRVFVICgxIDw8IDIwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjIwDQorQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIwKSA7LSAgUFdNIENoYW5uZWwgMQ0KK0FUOTFDX1BCMjBfUENLMCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyMCkgOy0gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCitBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgIEVRVSAoMSA8PCAyMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyMQ0KK0FUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyMSkgOy0gIFBXTSBDaGFubmVsIDINCitBVDkxQ19QQjIxX1BDSzEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjEpIDstICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorQVQ5MUNfUElPX1BCMjIgICAgICAgICAgICBFUVUgKDEgPDwgMjIpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCitBVDkxQ19QQjIyX1BXTTMgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjIpIDstICBQV00gQ2hhbm5lbCAzDQorQVQ5MUNfUEIyMl9QQ0syICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIyKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KK0FUOTFDX1BJT19QQjIzICAgICAgICAgICAgRVFVICgxIDw8IDIzKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjIzDQorQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIzKSA7LSAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCitBVDkxQ19QQjIzX0RDRDEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjMpIDstICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCitBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgIEVRVSAoMSA8PCAyNCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyNA0KK0FUOTFDX1BCMjRfVElPQjAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyNCkgOy0gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorQVQ5MUNfUEIyNF9EU1IxICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI0KSA7LSAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KK0FUOTFDX1BJT19QQjI1ICAgICAgICAgICAgRVFVICgxIDw8IDI1KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorQVQ5MUNfUEIyNV9USU9BMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI1KSA7LSAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCitBVDkxQ19QQjI1X0RUUjEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjUpIDstICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCitBVDkxQ19QSU9fUEIyNiAgICAgICAgICAgIEVRVSAoMSA8PCAyNikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyNg0KK0FUOTFDX1BCMjZfVElPQjEgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyNikgOy0gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorQVQ5MUNfUEIyNl9SSTEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI2KSA7LSAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KK0FUOTFDX1BJT19QQjI3ICAgICAgICAgICAgRVFVICgxIDw8IDI3KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjI3DQorQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI3KSA7LSAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCitBVDkxQ19QQjI3X1BXTTAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjcpIDstICBQV00gQ2hhbm5lbCAwDQorQVQ5MUNfUElPX1BCMjggICAgICAgICAgICBFUVUgKDEgPDwgMjgpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCitBVDkxQ19QQjI4X1RJT0IyICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjgpIDstICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KK0FUOTFDX1BCMjhfUFdNMSAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyOCkgOy0gIFBXTSBDaGFubmVsIDENCitBVDkxQ19QSU9fUEIyOSAgICAgICAgICAgIEVRVSAoMSA8PCAyOSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyOQ0KK0FUOTFDX1BCMjlfUENLMSAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyOSkgOy0gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCitBVDkxQ19QQjI5X1BXTTIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjkpIDstICBQV00gQ2hhbm5lbCAyDQorQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICBFUVUgKDEgPDwgIDMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMw0KK0FUOTFDX1BCM19FVFgxICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIzKSA7LSAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMQ0KK0FUOTFDX1BJT19QQjMwICAgICAgICAgICAgRVFVICgxIDw8IDMwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjMwKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KK0FUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIzMCkgOy0gIFBXTSBDaGFubmVsIDMNCitBVDkxQ19QSU9fUEI0ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorQVQ5MUNfUEI0X0VDUlNfRUNSU0RWICAgICBFUVUgKEFUOTFDX1BJT19QQjQpIDstICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkDQorQVQ5MUNfUElPX1BCNSAgICAgICAgICAgICBFUVUgKDEgPDwgIDUpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCNQ0KK0FUOTFDX1BCNV9FUlgwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEI1KSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorQVQ5MUNfUElPX1BCNiAgICAgICAgICAgICBFUVUgKDEgPDwgIDYpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KK0FUOTFDX1BCNl9FUlgxICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEI2KSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxDQorQVQ5MUNfUElPX1BCNyAgICAgICAgICAgICBFUVUgKDEgPDwgIDcpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KK0FUOTFDX1BCN19FUlhFUiAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEI3KSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3INCitBVDkxQ19QSU9fUEI4ICAgICAgICAgICAgIEVRVSAoMSA8PCAgOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI4DQorQVQ5MUNfUEI4X0VNREMgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjgpIDstICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorQVQ5MUNfUElPX1BCOSAgICAgICAgICAgICBFUVUgKDEgPDwgIDkpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KK0FUOTFDX1BCOV9FTURJTyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEI5KSA7LSAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQNCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCitBVDkxQ19JRF9GSVEgICAgICAgICAgICAgIEVRVSAoIDApIDstIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorQVQ5MUNfSURfU1lTICAgICAgICAgICAgICBFUVUgKCAxKSA7LSBTeXN0ZW0gUGVyaXBoZXJhbA0KK0FUOTFDX0lEX1BJT0EgICAgICAgICAgICAgRVFVICggMikgOy0gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBDQorQVQ5MUNfSURfUElPQiAgICAgICAgICAgICBFUVUgKCAzKSA7LSBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCitBVDkxQ19JRF9TUEkwICAgICAgICAgICAgIEVRVSAoIDQpIDstIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwDQorQVQ5MUNfSURfU1BJMSAgICAgICAgICAgICBFUVUgKCA1KSA7LSBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMQ0KK0FUOTFDX0lEX1VTMCAgICAgICAgICAgICAgRVFVICggNikgOy0gVVNBUlQgMA0KK0FUOTFDX0lEX1VTMSAgICAgICAgICAgICAgRVFVICggNykgOy0gVVNBUlQgMQ0KK0FUOTFDX0lEX1NTQyAgICAgICAgICAgICAgRVFVICggOCkgOy0gU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXINCitBVDkxQ19JRF9UV0kgICAgICAgICAgICAgIEVRVSAoIDkpIDstIFR3by1XaXJlIEludGVyZmFjZQ0KK0FUOTFDX0lEX1BXTUMgICAgICAgICAgICAgRVFVICgxMCkgOy0gUFdNIENvbnRyb2xsZXINCitBVDkxQ19JRF9VRFAgICAgICAgICAgICAgIEVRVSAoMTEpIDstIFVTQiBEZXZpY2UgUG9ydA0KK0FUOTFDX0lEX1RDMCAgICAgICAgICAgICAgRVFVICgxMikgOy0gVGltZXIgQ291bnRlciAwDQorQVQ5MUNfSURfVEMxICAgICAgICAgICAgICBFUVUgKDEzKSA7LSBUaW1lciBDb3VudGVyIDENCitBVDkxQ19JRF9UQzIgICAgICAgICAgICAgIEVRVSAoMTQpIDstIFRpbWVyIENvdW50ZXIgMg0KK0FUOTFDX0lEX0NBTiAgICAgICAgICAgICAgRVFVICgxNSkgOy0gQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcg0KK0FUOTFDX0lEX0VNQUMgICAgICAgICAgICAgRVFVICgxNikgOy0gRXRoZXJuZXQgTUFDDQorQVQ5MUNfSURfQURDICAgICAgICAgICAgICBFUVUgKDE3KSA7LSBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXINCitBVDkxQ19JRF9BRVMgICAgICAgICAgICAgIEVRVSAoMTgpIDstIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdA0KK0FUOTFDX0lEX1RERVMgICAgICAgICAgICAgRVFVICgxOSkgOy0gVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KK0FUOTFDX0lEXzIwX1Jlc2VydmVkICAgICAgRVFVICgyMCkgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAgIEVRVSAoMjEpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjJfUmVzZXJ2ZWQgICAgICBFUVUgKDIyKSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzIzX1Jlc2VydmVkICAgICAgRVFVICgyMykgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAgIEVRVSAoMjQpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjVfUmVzZXJ2ZWQgICAgICBFUVUgKDI1KSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzI2X1Jlc2VydmVkICAgICAgRVFVICgyNikgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAgIEVRVSAoMjcpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjhfUmVzZXJ2ZWQgICAgICBFUVUgKDI4KSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzI5X1Jlc2VydmVkICAgICAgRVFVICgyOSkgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF9JUlEwICAgICAgICAgICAgIEVRVSAoMzApIDstIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KK0FUOTFDX0lEX0lSUTEgICAgICAgICAgICAgRVFVICgzMSkgOy0gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQorDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCitBVDkxQ19CQVNFX1NZUyAgICAgICAgICAgIEVRVSAoMHhGRkZGRjAwMCkgOy0gKFNZUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICBFUVUgKDB4RkZGRkYwMDApIDstIChBSUMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUERDX0RCR1UgICAgICAgRVFVICgweEZGRkZGMzAwKSA7LSAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfREJHVSAgICAgICAgICAgRVFVICgweEZGRkZGMjAwKSA7LSAoREJHVSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICBFUVUgKDB4RkZGRkY0MDApIDstIChQSU9BKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BJT0IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYwMCkgOy0gKFBJT0IpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0tHUiAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoQ0tHUikgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDApIDstIChQTUMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUlNUQyAgICAgICAgICAgRVFVICgweEZGRkZGRDAwKSA7LSAoUlNUQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9SVFRDICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjApIDstIChSVFRDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzMCkgOy0gKFBJVEMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfV0RUQyAgICAgICAgICAgRVFVICgweEZGRkZGRDQwKSA7LSAoV0RUQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9WUkVHICAgICAgICAgICBFUVUgKDB4RkZGRkZENjApIDstIChWUkVHKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX01DICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwMCkgOy0gKE1DKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BEQ19TUEkxICAgICAgIEVRVSAoMHhGRkZFNDEwMCkgOy0gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1NQSTEgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwMCkgOy0gKFNQSTEpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUERDX1NQSTAgICAgICAgRVFVICgweEZGRkUwMTAwKSA7LSAoUERDX1NQSTApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfU1BJMCAgICAgICAgICAgRVFVICgweEZGRkUwMDAwKSA7LSAoU1BJMCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVVMxICAgICAgICBFUVUgKDB4RkZGQzQxMDApIDstIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1VTMSAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAwMCkgOy0gKFVTMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVVMwICAgICAgICBFUVUgKDB4RkZGQzAxMDApIDstIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1VTMCAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAwMCkgOy0gKFVTMCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfU1NDICAgICAgICBFUVUgKDB4RkZGRDQxMDApIDstIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1NTQyAgICAgICAgICAgIEVRVSAoMHhGRkZENDAwMCkgOy0gKFNTQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UV0kgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMDApIDstIChUV0kpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDMgICAgICAgRVFVICgweEZGRkNDMjYwKSA7LSAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDIgICAgICAgRVFVICgweEZGRkNDMjQwKSA7LSAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDEgICAgICAgRVFVICgweEZGRkNDMjIwKSA7LSAoUFdNQ19DSDEpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDAgICAgICAgRVFVICgweEZGRkNDMjAwKSA7LSAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQyAgICAgICAgICAgRVFVICgweEZGRkNDMDAwKSA7LSAoUFdNQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9VRFAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMDApIDstIChVRFApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfVEMwICAgICAgICAgICAgRVFVICgweEZGRkEwMDAwKSA7LSAoVEMwKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1RDMSAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA0MCkgOy0gKFRDMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UQzIgICAgICAgICAgICBFUVUgKDB4RkZGQTAwODApIDstIChUQzIpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfVENCICAgICAgICAgICAgRVFVICgweEZGRkEwMDAwKSA7LSAoVENCKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjAgICAgICAgIEVRVSAoMHhGRkZEMDIwMCkgOy0gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CMSAgICAgICAgRVFVICgweEZGRkQwMjIwKSA7LSAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAgICBFUVUgKDB4RkZGRDAyNDApIDstIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjMgICAgICAgIEVRVSAoMHhGRkZEMDI2MCkgOy0gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CNCAgICAgICAgRVFVICgweEZGRkQwMjgwKSA7LSAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAgICBFUVUgKDB4RkZGRDAyQTApIDstIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjYgICAgICAgIEVRVSAoMHhGRkZEMDJDMCkgOy0gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CNyAgICAgICAgRVFVICgweEZGRkQwMkUwKSA7LSAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU4gICAgICAgICAgICBFUVUgKDB4RkZGRDAwMDApIDstIChDQU4pIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfRU1BQyAgICAgICAgICAgRVFVICgweEZGRkRDMDAwKSA7LSAoRU1BQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfQURDICAgICAgICBFUVUgKDB4RkZGRDgxMDApIDstIChQRENfQURDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgIEVRVSAoMHhGRkZEODAwMCkgOy0gKEFEQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfQUVTICAgICAgICBFUVUgKDB4RkZGQTQxMDApIDstIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0FFUyAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAwMCkgOy0gKEFFUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVERFUyAgICAgICBFUVUgKDB4RkZGQTgxMDApIDstIChQRENfVERFUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UREVTICAgICAgICAgICBFUVUgKDB4RkZGQTgwMDApIDstIChUREVTKSBCYXNlIEFkZHJlc3MNCisNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorQVQ5MUNfSVNSQU0gICAgICAgICAgICAgICBFUVUgKDB4MDAyMDAwMDApIDstIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorQVQ5MUNfSVNSQU1fU0laRSAgICAgICAgICBFUVUgKDB4MDAwMTAwMDApIDstIEludGVybmFsIFNSQU0gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCitBVDkxQ19JRkxBU0ggICAgICAgICAgICAgIEVRVSAoMHgwMDEwMDAwMCkgOy0gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KK0FUOTFDX0lGTEFTSF9TSVpFICAgICAgICAgRVFVICgweDAwMDQwMDAwKSA7LSBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICgyNTYgS2J5dGUpDQorDQorDQorDQorI2VuZGlmIC8qIEFUOTFTQU03WDI1Nl9IICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2xpYl9BVDkxU0FNN1gyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JkODIzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmMKQEAgLTAsMCArMSw1MSBAQAorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQorLy8qIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisvLyogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCisvLyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCisvLyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKy8vKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCisvLyogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KKy8vKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKy8vKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQorLy8qIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogRmlsZSBOYW1lICAgICAgICAgICA6IGxpYl9BVDkxU0FNN1gyNTYuaA0KKy8vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGlubGluZWQgZnVuY3Rpb25zDQorLy8qIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyoNCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGJndS5oLzEuMS9GcmkgSmFuIDMxIDEyOjE4OjQwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNN1guaC8xLjEvVHVlIEZlYiAgMSAwODozMjoxMCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfVlJFR182MDg1Qi5oLzEuMS9UdWUgRmViICAxIDE2OjIwOjQ3IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9yc3RjXzYwOThBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MjAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl93ZHRjXzYwODBBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzg6MzAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxNDoyMzo1MiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGl0Y182MDc5QS5oLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWNfNjA3NWIuaC8xLjEvRnJpIE1heSAyMCAxNDowMToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWVzXzYxNDlhLmgvMS4xL01vbiBKYW4gMTcgMDc6NDM6MDkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMy9Nb24gSnVsIDE5IDE0OjI3OjU4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnR0Y182MDgxQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjM4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjQvV2VkIEZlYiAxNiAwODozOTozNCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGVzM182MTUwYS5oLzEuMS9Nb24gSmFuIDE3IDA5OjE5OjE5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU03WC5oLzEuMS9UaHUgTWFyIDI1IDE1OjE5OjE0IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfY2FuX0FUOTEuaC8xLjQvRnJpIE9jdCAxNyAwOToxMjo1MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wZGMuaC8xLjIvVHVlIEp1bCAgMiAxMzoyOTo0MCAyMDAyLy8NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKw0KKyNpbmNsdWRlICJBVDkxU0FNN1gyNTYuaCINCisNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQNCisvLyogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvbGliX0FUOTFTQU03WDI1Ni5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2YjRlMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvbGliX0FUOTFTQU03WDI1Ni5oCkBAIC0wLDAgKzEsNDU1OCBAQAorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQorLy8qIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisvLyogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCisvLyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCisvLyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKy8vKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCisvLyogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KKy8vKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKy8vKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQorLy8qIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogRmlsZSBOYW1lICAgICAgICAgICA6IGxpYl9BVDkxU0FNN1gyNTYuaA0KKy8vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGlubGluZWQgZnVuY3Rpb25zDQorLy8qIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyoNCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGJndS5oLzEuMS9GcmkgSmFuIDMxIDEyOjE4OjQwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNN1guaC8xLjEvVHVlIEZlYiAgMSAwODozMjoxMCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfVlJFR182MDg1Qi5oLzEuMS9UdWUgRmViICAxIDE2OjIwOjQ3IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9yc3RjXzYwOThBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MjAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl93ZHRjXzYwODBBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzg6MzAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxNDoyMzo1MiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGl0Y182MDc5QS5oLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWNfNjA3NWIuaC8xLjEvRnJpIE1heSAyMCAxNDowMToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWVzXzYxNDlhLmgvMS4xL01vbiBKYW4gMTcgMDc6NDM6MDkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMy9Nb24gSnVsIDE5IDE0OjI3OjU4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnR0Y182MDgxQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjM4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjQvV2VkIEZlYiAxNiAwODozOTozNCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGVzM182MTUwYS5oLzEuMS9Nb24gSmFuIDE3IDA5OjE5OjE5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU03WC5oLzEuMS9UaHUgTWFyIDI1IDE1OjE5OjE0IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfY2FuX0FUOTEuaC8xLjQvRnJpIE9jdCAxNyAwOToxMjo1MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wZGMuaC8xLjIvVHVlIEp1bCAgMiAxMzoyOTo0MCAyMDAyLy8NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyNpZm5kZWYgbGliX0FUOTFTQU03WDI1Nl9IDQorI2RlZmluZSBsaWJfQVQ5MVNBTTdYMjU2X0gNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFJQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorI2RlZmluZSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSAoKHZvaWQgKCopICgpKSAweEU1MUZGRjIwKSAvLyBsZHIsIHBjLCBbcGMsICMtJkYyMF0NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQNCisvLyogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfQ29uZmlndXJlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCwgICAgIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorCXVuc2lnbmVkIGludCBwcmlvcml0eSwgICAvLyBcYXJnIHByaW9yaXR5IHRvIGdpdmUgdG8gdGhlIGludGVycnVwdA0KKwl1bnNpZ25lZCBpbnQgc3JjX3R5cGUsICAgLy8gXGFyZyBhY3RpdmF0aW9uIGFuZCBzZW5zZSBvZiBhY3RpdmF0aW9uDQorCXZvaWQgKCpuZXdIYW5kbGVyKSAodm9pZCkgKSAvLyBcYXJnIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyDQorew0KKwl1bnNpZ25lZCBpbnQgb2xkSGFuZGxlcjsNCisgICAgdW5zaWduZWQgaW50IG1hc2sgOw0KKw0KKyAgICBvbGRIYW5kbGVyID0gcEFpYy0+QUlDX1NWUltpcnFfaWRdOw0KKw0KKyAgICBtYXNrID0gMHgxIDw8IGlycV9pZCA7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRENSID0gbWFzayA7DQorICAgIC8vKiBTYXZlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lIHBvaW50ZXIgYW5kIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgICAgcEFpYy0+QUlDX1NWUltpcnFfaWRdID0gKHVuc2lnbmVkIGludCkgbmV3SGFuZGxlciA7DQorICAgIC8vKiBTdG9yZSB0aGUgU291cmNlIE1vZGUgUmVnaXN0ZXINCisgICAgcEFpYy0+QUlDX1NNUltpcnFfaWRdID0gc3JjX3R5cGUgfCBwcmlvcml0eSAgOw0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrIDsNCisNCisJcmV0dXJuIG9sZEhhbmRsZXI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCit7DQorICAgIC8vKiBFbmFibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lFQ1IgPSAweDEgPDwgaXJxX2lkIDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQgKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KK3sNCisgICAgdW5zaWduZWQgaW50IG1hc2sgPSAweDEgPDwgaXJxX2lkOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DbGVhckl0DQorLy8qIFxicmllZiBDbGVhciBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DbGVhckl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorew0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gKDB4MSA8PCBpcnFfaWQpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdA0KKy8vKiBcYnJpZWYgQWNrbm93bGVkZ2UgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdCAoDQorCUFUOTFQU19BSUMgcEFpYykgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KK3sNCisgICAgcEFpYy0+QUlDX0VPSUNSID0gcEFpYy0+QUlDX0VPSUNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yDQorLy8qIFxicmllZiBDb25maWd1cmUgdmVjdG9yIGhhbmRsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yICgNCisJdW5zaWduZWQgaW50ICpwVmVjdG9yLCAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKkhhbmRsZXIpICgpICkgICAvLyBcYXJnIEludGVycnVwdCBIYW5kbGVyDQorew0KKwl1bnNpZ25lZCBpbnQgb2xkVmVjdG9yID0gKnBWZWN0b3I7DQorDQorCWlmICgodW5zaWduZWQgaW50KSBIYW5kbGVyID09ICh1bnNpZ25lZCBpbnQpIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFKQ0KKwkJKnBWZWN0b3IgPSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERTsNCisJZWxzZQ0KKwkJKnBWZWN0b3IgPSAoKCgoKHVuc2lnbmVkIGludCkgSGFuZGxlcikgLSAoKHVuc2lnbmVkIGludCkgcFZlY3RvcikgLSAweDgpID4+IDIpICYgMHgwMEZGRkZGRikgfCAweEVBMDAwMDAwOw0KKw0KKwlyZXR1cm4gb2xkVmVjdG9yOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfVHJpZw0KKy8vKiBcYnJpZWYgVHJpZyBhbiBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkICBBVDkxRl9BSUNfVHJpZyAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXINCit7DQorCXBBaWMtPkFJQ19JU0NSID0gKDB4MSA8PCBpcnFfaWQpIDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzQWN0aXZlDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19Jc0FjdGl2ZSAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCit7DQorCXJldHVybiAocEFpYy0+QUlDX0lTUiAmICgweDEgPDwgaXJxX2lkKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Jc1BlbmRpbmcNCisvLyogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgcGVuZGluZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19Jc1BlbmRpbmcgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBJbnRlcnJ1cHQgTnVtYmVyDQorew0KKwlyZXR1cm4gKHBBaWMtPkFJQ19JUFIgJiAoMHgxIDw8IGlycV9pZCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfT3Blbg0KKy8vKiBcYnJpZWYgU2V0IGV4Y2VwdGlvbiB2ZWN0b3JzIGFuZCBBSUMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX09wZW4oDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl2b2lkICgqSXJxSGFuZGxlcikgKCksICAvLyBcYXJnIERlZmF1bHQgSVJRIHZlY3RvciBleGNlcHRpb24NCisJdm9pZCAoKkZpcUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IEZJUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpEZWZhdWx0SGFuZGxlcikgICgpLCAvLyBcYXJnIERlZmF1bHQgSGFuZGxlciBzZXQgaW4gSVNSDQorCXZvaWQgKCpTcHVyaW91c0hhbmRsZXIpICgpLCAvLyBcYXJnIERlZmF1bHQgU3B1cmlvdXMgSGFuZGxlcg0KKwl1bnNpZ25lZCBpbnQgcHJvdGVjdE1vZGUpICAgLy8gXGFyZyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyDQorew0KKwlpbnQgaTsNCisNCisJLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IElWUiB0byB0aGUgZGVmYXVsdCBoYW5kbGVyDQorCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7DQorCQlBVDkxRl9BSUNfRGlzYWJsZUl0KHBBaWMsIGkpOw0KKwkJQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KHBBaWMsIGksIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QsIEFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwsIERlZmF1bHRIYW5kbGVyKTsNCisJfQ0KKw0KKwkvLyBTZXQgdGhlIElSUSBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDE4LCBJcnFIYW5kbGVyKTsNCisJLy8gU2V0IHRoZSBGYXN0IEludGVycnVwdCBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDFDLCBGaXFIYW5kbGVyKTsNCisNCisJcEFpYy0+QUlDX1NQVSA9ICh1bnNpZ25lZCBpbnQpIFNwdXJpb3VzSGFuZGxlcjsNCisJcEFpYy0+QUlDX0RDUiA9IHByb3RlY3RNb2RlOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KK3sNCisJcFBEQy0+UERDX1JOUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUk5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFR4DQorLy8qIFxicmllZiBTZXQgdGhlIG5leHQgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0VHggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZA0KK3sNCisJcFBEQy0+UERDX1ROUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVE5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0UngNCisvLyogXGJyaWVmIFNldCB0aGUgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQNCit7DQorCXBQREMtPlBEQ19SUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCit7DQorCXBQREMtPlBEQ19UUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVENSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgcmVjZWl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UTkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19SQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19STkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX09wZW4NCisvLyogXGJyaWVmIE9wZW4gUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycywgcmUtZW5hYmxlIFJYIGFuZCBUWA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19PcGVuICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCisNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KKyAgICAvLyogRW5hYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19FbmFibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0VuYWJsZVR4KHBQREMpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfQ2xvc2UgKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRGlzYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRGlzYWJsZVR4KHBQREMpOw0KKw0KKwkvLyogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QNCisJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlpZiAoQVQ5MUZfUERDX0lzVHhFbXB0eShwUERDKSkgew0KKwkJLy8qIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyKTsNCisJCXJldHVybiAyOw0KKwl9DQorCWVsc2UgaWYgKEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KHBQREMpKSB7DQorCQkvLyogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKwllbHNlIHsNCisJCS8vKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4NCisJCXJldHVybiAwOw0KKwl9DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfUERDIHBQREMsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJaWYgKEFUOTFGX1BEQ19Jc1J4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0UnhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIERCR1UNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgREJHVSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcERiZ3UtPkRCR1VfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIERCR1UgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwRGJndSkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSU8NCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQZXJpcGgNCisvLyogXGJyaWVmIEVuYWJsZSBwaW5zIHRvIGJlIGRyaXZlZCBieSBwZXJpcGhlcmFsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQUVuYWJsZSwgIC8vIFxhcmcgUEVSSVBIIEEgdG8gZW5hYmxlDQorCXVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlKSAgLy8gXGFyZyBQRVJJUEggQiB0byBlbmFibGUNCisNCit7DQorCXBQaW8tPlBJT19BU1IgPSBwZXJpcGhBRW5hYmxlOw0KKwlwUGlvLT5QSU9fQlNSID0gcGVyaXBoQkVuYWJsZTsNCisJcFBpby0+UElPX1BEUiA9IChwZXJpcGhBRW5hYmxlIHwgcGVyaXBoQkVuYWJsZSk7IC8vIFNldCBpbiBQZXJpcGggbW9kZQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3V0cHV0DQorLy8qIFxicmllZiBFbmFibGUgUElPIGluIG91dHB1dCBtb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ091dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGlvRW5hYmxlKSAgICAgIC8vIFxhcmcgUElPIHRvIGJlIGVuYWJsZWQNCit7DQorCXBQaW8tPlBJT19QRVIgPSBwaW9FbmFibGU7IC8vIFNldCBpbiBQSU8gbW9kZQ0KKwlwUGlvLT5QSU9fT0VSID0gcGlvRW5hYmxlOyAvLyBDb25maWd1cmUgaW4gT3V0cHV0DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBpbnB1dCBtb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0lucHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBpbnB1dEVuYWJsZSkgICAgICAvLyBcYXJnIFBJTyB0byBiZSBlbmFibGVkDQorew0KKwkvLyBEaXNhYmxlIG91dHB1dA0KKwlwUGlvLT5QSU9fT0RSICA9IGlucHV0RW5hYmxlOw0KKwlwUGlvLT5QSU9fUEVSICA9IGlucHV0RW5hYmxlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGluIG9wZW4gZHJhaW4NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtdWx0aURydkVuYWJsZSkgLy8gXGFyZyBwaW8gdG8gYmUgY29uZmlndXJlZCBpbiBvcGVuIGRyYWluDQorew0KKwkvLyBDb25maWd1cmUgdGhlIG11bHRpLWRyaXZlIG9wdGlvbg0KKwlwUGlvLT5QSU9fTUREUiA9IH5tdWx0aURydkVuYWJsZTsNCisJcFBpby0+UElPX01ERVIgPSBtdWx0aURydkVuYWJsZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ1B1bGx1cA0KKy8vKiBcYnJpZWYgRW5hYmxlIHB1bGx1cCBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnUHVsbHVwKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwdWxsdXBFbmFibGUpICAgLy8gXGFyZyBlbmFibGUgcHVsbHVwIG9uIFBJTw0KK3sNCisJCS8vIENvbm5lY3Qgb3Igbm90IFB1bGx1cA0KKwlwUGlvLT5QSU9fUFBVRFIgPSB+cHVsbHVwRW5hYmxlOw0KKwlwUGlvLT5QSU9fUFBVRVIgPSBwdWxsdXBFbmFibGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIGRpcmVjdCBkcml2ZSBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGRpcmVjdERyaXZlKSAgICAvLyBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggZGlyZWN0IGRyaXZlDQorDQorew0KKwkvLyBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZQ0KKwlwUGlvLT5QSU9fT1dEUiAgPSB+ZGlyZWN0RHJpdmU7DQorCXBQaW8tPlBJT19PV0VSICA9IGRpcmVjdERyaXZlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXRGaWx0ZXINCisvLyogXGJyaWVmIEVuYWJsZSBpbnB1dCBmaWx0ZXIgb24gaW5wdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBpbnB1dEZpbHRlcikgICAgLy8gXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGlucHV0IGZpbHRlcg0KKw0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX0lGRFIgID0gfmlucHV0RmlsdGVyOw0KKwlwUGlvLT5QSU9fSUZFUiAgPSBpbnB1dEZpbHRlcjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0DQorLy8qIFxicmllZiBSZXR1cm4gUElPIGlucHV0IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXQoIC8vIFxyZXR1cm4gUElPIGlucHV0DQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBpby0+UElPX1BEU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBpbnB1dCBmbGFnIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRTZXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BJT19HZXRJbnB1dChwUGlvKSAmIGZsYWcpOw0KK30NCisNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIHNldA0KK3sNCisJcFBpby0+UElPX1NPRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQNCisvLyogXGJyaWVmIFNldCB0byAwIG91dHB1dCBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBjbGVhcmVkDQorew0KKwlwUGlvLT5QSU9fQ09EUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Gb3JjZU91dHB1dA0KKy8vKiBcYnJpZWYgRm9yY2Ugb3V0cHV0IHdoZW4gRGlyZWN0IGRyaXZlIG9wdGlvbiBpcyBlbmFibGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgZm9yY2VkDQorew0KKwlwUGlvLT5QSU9fT0RTUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19FbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkIA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19QRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQgDQorew0KKyAgICAgICAgcFBpby0+UElPX1BEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dEVuYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09EUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3VwdXRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRkVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZQ0KKy8vKiBcYnJpZWYgSW5wdXQgRmlsdGVyIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lGRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSUZTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIElucHV0IGZpbHRlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBEYXRhIFN0YXR1cyANCisJQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09EU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlDQorLy8qIFxicmllZiBNdWx0aSBEcml2ZXIgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19NREVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRGlzYWJsZQ0KKy8vKiBcYnJpZWYgTXVsdGkgRHJpdmVyIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fTUREUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uDQorLy8qIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0FfUmVnaXN0ZXJTZWxlY3Rpb24oDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIEEgcmVnaXN0ZXIgc2VsZWN0aW9uDQorew0KKyAgICAgICAgcFBpby0+UElPX0FTUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uDQorLy8qIFxicmllZiBQSU8gQiBSZWdpc3RlciBTZWxlY3Rpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24oDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIEIgcmVnaXN0ZXIgc2VsZWN0aW9uIA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19CU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEFCIFJlZ2lzdGVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0FCU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBBQiBSZWdpc3RlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB3cml0ZSB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlDQorLy8qIFxicmllZiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PV1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0V3JpdGUgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRDZmdQdWxsdXANCisvLyogXGJyaWVmIFJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRDZmdQdWxsdXAoIC8vIFxyZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwIA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX1BQVVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXREYXRhU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgaXMgU2V0IA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKH5BVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgU0NEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfU0NEUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwUE1DLT5QTUNfU0NTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCit7DQorCXBQTUMtPlBNQ19QQ0VSID0gcGVyaXBoSWRzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBEaXNhYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaElkcykgIC8vIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZQ0KK3sNCisJcFBNQy0+UE1DX1BDRFIgPSBwZXJpcGhJZHM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgR2V0IHBlcmlwaGVyYWwgY2xvY2sgc3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19QQ1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBDS0dSLT5DS0dSX01PUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3INCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvcigNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXBDS0dSLT5DS0dSX01PUiB8PSBBVDkxQ19DS0dSX01PU0NFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3INCisvLyogXGJyaWVmIERpc2FibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lDQorLy8qIFxicmllZiBDZmcgTU9SIFJlZ2lzdGVyIGFjY29yZGluZyB0byB0aGUgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAgLy8gXGFyZyBtYWluIG9zYyBzdGFydHVwIHRpbWUgaW4gbWljcm9zZWNvbmQgKHVzKQ0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9PU0NPVU5UOw0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gKChzbG93Q2xvY2sgKiBzdGFydHVwX3RpbWUpLyg4KjEwMDAwMDApKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBDS0dSLT5DS0dSX01DRlI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrDQorLy8qIFxicmllZiBSZXR1cm4gTWFpbiBjbG9jayBpbiBIeg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2sgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXJldHVybiAoKHBDS0dSLT5DS0dSX01DRlIgICYgQVQ5MUNfQ0tHUl9NQUlORikgKiBzbG93Q2xvY2spID4+IDQ7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdNQ0tSZWcNCisvLyogXGJyaWVmIENmZyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnTUNLUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUE1DLT5QTUNfTUNLUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNQ0tSZWcNCisvLyogXGJyaWVmIFJldHVybiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNQ0tSZWcoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX01DS1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrDQorLy8qIFxicmllZiBSZXR1cm4gbWFzdGVyIGNsb2NrIGluIEh6IHdoaWNoIGNvcnJlcG9uZHMgdG8gcHJvY2Vzc29yIGNsb2NrIGZvciBBUk03DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJdW5zaWduZWQgaW50IHJlZyA9IHBQTUMtPlBNQ19NQ0tSOw0KKwl1bnNpZ25lZCBpbnQgcHJlc2NhbGVyID0gKDEgPDwgKChyZWcgJiBBVDkxQ19QTUNfUFJFUykgPj4gMikpOw0KKwl1bnNpZ25lZCBpbnQgcGxsRGl2aWRlciwgcGxsTXVsdGlwbGllcjsNCisNCisJc3dpdGNoIChyZWcgJiBBVDkxQ19QTUNfQ1NTKSB7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfU0xPV19DTEs6IC8vIFNsb3cgY2xvY2sgc2VsZWN0ZWQNCisJCQlyZXR1cm4gc2xvd0Nsb2NrIC8gcHJlc2NhbGVyOw0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLOiAvLyBNYWluIGNsb2NrIGlzIHNlbGVjdGVkDQorCQkJcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKHBDS0dSLCBzbG93Q2xvY2spIC8gcHJlc2NhbGVyOw0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX1BMTF9DTEs6IC8vIFBMTEIgY2xvY2sgaXMgc2VsZWN0ZWQNCisJCQlyZWcgPSBwQ0tHUi0+Q0tHUl9QTExSOw0KKwkJCXBsbERpdmlkZXIgICAgPSAocmVnICAmIEFUOTFDX0NLR1JfRElWKTsNCisJCQlwbGxNdWx0aXBsaWVyID0gKChyZWcgICYgQVQ5MUNfQ0tHUl9NVUwpID4+IDE2KSArIDE7DQorCQkJcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKHBDS0dSLCBzbG93Q2xvY2spIC8gcGxsRGl2aWRlciAqIHBsbE11bHRpcGxpZXIgLyBwcmVzY2FsZXI7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQQ0sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2ssICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUE1DLT5QTUNfUENLUltwY2tdID0gbW9kZTsNCisJcFBNQy0+UE1DX1NDRVIgPSAoMSA8PCBwY2spIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUENLICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBjaykgIC8vIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNw0KK3sNCisJcFBNQy0+UE1DX1NDRFIgPSAoMSA8PCBwY2spIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsICAgICAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgUE1DIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BNQ19HZXRTdGF0dXMocFBNQykgJiBmbGFnKTsNCit9LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSU1RDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RTb2Z0UmVzZXQNCisvLyogXGJyaWVmIFN0YXJ0IFNvZnR3YXJlIFJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlNUU29mdFJlc2V0KA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXQpDQorew0KKwlwUlNUQy0+UlNUQ19SQ1IgPSAoMHhBNTAwMDAwMCB8IHJlc2V0KTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUU2V0TW9kZQ0KKy8vKiBcYnJpZWYgU2V0IFJlc2V0IE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RTZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBSU1RDLT5SU1RDX1JNUiA9ICgweEE1MDAwMDAwIHwgbW9kZSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVEdldE1vZGUNCisvLyogXGJyaWVmIEdldCBSZXNldCBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RHZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKHBSU1RDLT5SU1RDX1JNUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVEdldFN0YXR1cw0KKy8vKiBcYnJpZWYgR2V0IFJlc2V0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKHBSU1RDLT5SU1RDX1JTUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVElzU29mdFJzdEFjdGl2ZQ0KKy8vKiBcYnJpZWYgUmV0dXJuICE9MCBpZiBzb2Z0d2FyZSByZXNldCBpcyBzdGlsbCBub3QgY29tcGxldGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQykNCit7DQorCXJldHVybiAoKHBSU1RDLT5SU1RDX1JTUikgJiBBVDkxQ19SU1RDX1NSQ01QKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpDQorLy8qIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLCANCisgICAgICAgIHVuc2lnbmVkIGludCBtcykNCit7DQorCWlmIChtcyA+IDIwMDApDQorCQlyZXR1cm4gMTsgICAvLyBBVDkxQ19USU1FX09VVF9PRl9SQU5HRQ0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH4weEZGRkY7CQ0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9ICgoKG1zIDw8IDE1KSAvMTAwMCkgJiAweEZGRkYpOwkNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKCkNCisvLyogXGJyaWVmICBTZXQgdGhlIG5ldyBwcmVzY2FsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRQcmVzY2FsZXIoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQywgDQorICAgICAgICB1bnNpZ25lZCBpbnQgcnRwcmVzKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOwkNCisJcFJUVEMtPlJUVENfUlRNUiB8PSAocnRwcmVzICYgMHhGRkZGKTsJDQorCXJldHVybiAocFJUVEMtPlJUVENfUlRNUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUUmVzdGFydCgpDQorLy8qIFxicmllZiAgUmVzdGFydCB0aGUgUlRUIHByZXNjYWxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRSZXN0YXJ0KA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQorew0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfUlRUUlNUOwkNCit9DQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1JTlQoKQ0KKy8vKiBcYnJpZWYgIEVuYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldEFsYXJtSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQorew0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfQUxNSUVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhckFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBBbGFybSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ2xlYXJBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+QVQ5MUNfUlRUQ19BTE1JRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldFJ0dEluY0lOVCgpDQorLy8qIFxicmllZiAgRW5hYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldFJ0dEluY0lOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVElOQ0lFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfQ2xlYXJSdHRJbmNJTlQoKQ0KKy8vKiBcYnJpZWYgIERpc2FibGUgUlRUIElOQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ2xlYXJSdHRJbmNJTlQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfUlRUSU5DSUVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRBbGFybVZhbHVlKCkNCisvLyogXGJyaWVmICBTZXQgUlRUIEFsYXJtIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldEFsYXJtVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQywgdW5zaWduZWQgaW50IGFsYXJtKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRBUiA9IGFsYXJtOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9HZXRBbGFybVZhbHVlKCkNCisvLyogXGJyaWVmICBHZXQgUlRUIEFsYXJtIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUR2V0QWxhcm1WYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcmV0dXJuKHBSVFRDLT5SVFRDX1JUQVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVEdldFN0YXR1cygpDQorLy8qIFxicmllZiAgUmVhZCB0aGUgUlRUIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcmV0dXJuKHBSVFRDLT5SVFRDX1JUU1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9SZWFkVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFJlYWRWYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisgICAgICAgIHJlZ2lzdGVyIHZvbGF0aWxlIHVuc2lnbmVkIGludCB2YWwxLHZhbDI7DQorCWRvDQorCXsNCisJCXZhbDEgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwkJdmFsMiA9IHBSVFRDLT5SVFRDX1JUVlI7DQorCX0JDQorCXdoaWxlKHZhbDEgIT0gdmFsMik7DQorCXJldHVybih2YWwxKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSVRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRJbml0DQorLy8qIFxicmllZiBTeXN0ZW0gdGltZXIgaW5pdCA6IHBlcmlvZCBpbiC1c2Vjb25kLCBzeXN0ZW0gY2xvY2sgZnJlcSBpbiBNSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRJbml0KA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBpdF9mcmVxdWVuY3kpDQorew0KKwlwUElUQy0+UElUQ19QSU1SID0gcGVyaW9kPyAocGVyaW9kICogcGl0X2ZyZXF1ZW5jeSArIDgpID4+IDQgOiAwOyAvLyArOCB0byBhdm9pZCAlMTAgYW5kIC8xMA0KKwlwUElUQy0+UElUQ19QSU1SIHw9IEFUOTFDX1BJVENfUElURU47CSANCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUU2V0UElWDQorLy8qIFxicmllZiBTZXQgdGhlIFBJVCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRTZXRQSVYoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQywNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXYpDQorew0KKwlwUElUQy0+UElUQ19QSU1SID0gcGl2IHwgKHBQSVRDLT5QSVRDX1BJTVIgJiAoQVQ5MUNfUElUQ19QSVRFTiB8IEFUOTFDX1BJVENfUElUSUVOKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEVuYWJsZUludA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJVCBwZXJpb2RpYyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRFbmFibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXBQSVRDLT5QSVRDX1BJTVIgfD0gQVQ5MUNfUElUQ19QSVRJRU47CSANCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElURGlzYWJsZUludA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElURGlzYWJsZUludCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcFBJVEMtPlBJVENfUElNUiAmPSB+QVQ5MUNfUElUQ19QSVRJRU47CSANCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0TW9kZQ0KKy8vKiBcYnJpZWYgUmVhZCBQSVQgbW9kZSByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJTVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRTdGF0dXMNCisvLyogXGJyaWVmIFJlYWQgUElUIHN0YXR1cyByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQorew0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElTUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJSVINCisvLyogXGJyaWVmIFJlYWQgUElUIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJSVIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXJldHVybihwUElUQy0+UElUQ19QSUlSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0UElWUg0KKy8vKiBcYnJpZWYgUmVhZCBTeXN0ZW0gdGltZXIgQ1BJViBhbmQgUElDTlQgd2l0aG91dCByZXNzZXR0aW5nIHRoZSBjb3VudGVycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0UElWUigNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJVlIpOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFdEVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1dEVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IE1vZGUpDQorew0KKwlwV0RUQy0+V0RUQ19XRE1SID0gTW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUUmVzdGFydA0KKy8vKiBcYnJpZWYgUmVzdGFydCBXYXRjaGRvZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVFJlc3RhcnQoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQykNCit7DQorCXBXRFRDLT5XRFRDX1dEQ1IgPSAweEE1MDAwMDAxOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTR2V0dGF0dXMNCisvLyogXGJyaWVmIEdldCBXYXRjaGRvZyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVFNHZXR0YXR1cygNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KK3sNCisJcmV0dXJuKHBXRFRDLT5XRFRDX1dEU1IgJiAweDMpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRHZXRQZXJpb2QNCisvLyogXGJyaWVmIFRyYW5zbGF0ZSBtcyBpbnRvIFdhdGNoZG9nIENvbXBhdGlibGUgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVEdldFBlcmlvZCh1bnNpZ25lZCBpbnQgbXMpDQorew0KKwlpZiAoKG1zIDwgNCkgfHwgKG1zID4gMTYwMDApKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybigobXMgPDwgOCkgLyAxMDAwKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBWUkVHDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0VuYWJsZV9Mb3dQb3dlck1vZGUNCisvLyogXGJyaWVmIEVuYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1ZSRUcgcFZSRUcpDQorew0KKwlwVlJFRy0+VlJFR19NUiB8PSBBVDkxQ19WUkVHX1BTVERCWTsJIA0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlDQorLy8qIFxicmllZiBEaXNhYmxlIFZSRUcgTG93IFBvd2VyIE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1ZSRUcgcFZSRUcpDQorew0KKwlwVlJFRy0+VlJFR19NUiAmPSB+QVQ5MUNfVlJFR19QU1REQlk7CSANCit9LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorDQorI2RlZmluZSBBVDkxQ19NQ19DT1JSRUNUX0tFWSAgKCh1bnNpZ25lZCBpbnQpIDB4NUEgPDwgMjQpIC8vIChNQykgQ29ycmVjdCBQcm90ZWN0IEtleQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX1JlbWFwDQorLy8qIFxicmllZiBNYWtlIFJlbWFwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfUmVtYXAgKHZvaWQpICAgICAvLyAgDQorew0KKyAgICBBVDkxUFNfTUMgcE1DID0gKEFUOTFQU19NQykgQVQ5MUNfQkFTRV9NQzsNCisgICAgDQorICAgIHBNQy0+TUNfUkNSID0gQVQ5MUNfTUNfUkNCOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8gV3JpdGUgdG8gdGhlIEZNUiByZWdpc3Rlcg0KKwlwTUMtPk1DX0ZNUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKA0KKwlBVDkxUFNfTUMgcE1DKSAvLyBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBNQy0+TUNfRk1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04NCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOKA0KKwlpbnQgbWFzdGVyX2Nsb2NrKSAvLyBtYXN0ZXIgY2xvY2sgaW4gSHoNCit7DQorCXJldHVybiAobWFzdGVyX2Nsb2NrLzEwMDAwMDAgKzIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCit7DQorCXBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRTdGF0dXMoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcE1DLT5NQ19GU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19NQyBwTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyhwTUMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX01DIHBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRTdGF0dXMocE1DKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNQSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX09wZW4NCisvLyogXGJyaWVmIE9wZW4gYSBTUEkgUG9ydA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX09wZW4gKA0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bGwpICAvLyBcYXJnDQorew0KKyAgICAgICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCisgICAgICAgIHJldHVybiAoIDAgKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ0NzDQorLy8qIFxicmllZiBDb25maWd1cmUgU1BJIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ0NzICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBjcywgICAgIC8vIFNQSSBjcyBudW1iZXIgKDAgdG8gMykNCisgCWludCB2YWwpICAgLy8gIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENTUiByZWdpc3Rlcg0KKwkqKHBTUEktPlNQSV9DU1IgKyBjcykgPSB2YWw7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlSXQgKA0KKwlBVDkxUFNfU1BJIHBTUEksICAgICAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgU1BJIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9SZXNldCAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1dSU1Q7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9FbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGUgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUw0KKy8vKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJY2hhciBQQ1NfRGV2aWNlKSAvLyBQQ1Mgb2YgdGhlIERldmljZQ0KK3sJDQorIAkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KKwlwU1BJLT5TUElfTVIgfD0gKCAoUENTX0RldmljZTw8MTYpICYgQVQ5MUNfU1BJX1BDUyApOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYlNQSXkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9TZW5kRnJhbWUoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFNQSTogZGlzYWJsZSBJVCBkaXNhYmxlIHRyYW5zZmVydCwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Nsb3NlICgNCisJQVQ5MVBTX1NQSSBwU1BJKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBSZXNldCBhbGwgdGhlIENoaXAgU2VsZWN0IHJlZ2lzdGVyDQorICAgIHBTUEktPlNQSV9DU1JbMF0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsxXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzJdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbM10gPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBTUEkgbW9kZQ0KKyAgICBwU1BJLT5TUElfTVIgPSAwICA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGIDsNCisNCisgICAgLy8qIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzDQorICAgIEFUOTFGX1BEQ19DbG9zZSgoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSk7DQorDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCisgICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1B1dENoYXINCisvLyogXGJyaWVmIFNlbmQgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgcmVhZHkgdG8gc2VuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9QdXRDaGFyICgNCisJQVQ5MVBTX1NQSSBwU1BJLA0KKwl1bnNpZ25lZCBpbnQgY2hhcmFjdGVyLA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3NfbnVtYmVyICkNCit7DQorICAgIHVuc2lnbmVkIGludCB2YWx1ZV9mb3JfY3M7DQorICAgIHZhbHVlX2Zvcl9jcyA9ICh+KDEgPDwgY3NfbnVtYmVyKSkgJiAweEY7ICAvL1BsYWNlIGEgemVybyBhbW9uZyBhIDQgT05FcyBudW1iZXINCisgICAgcFNQSS0+U1BJX1REUiA9IChjaGFyYWN0ZXIgJiAweEZGRkYpIHwgKHZhbHVlX2Zvcl9jcyA8PCAxNik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRDaGFyDQorLy8qIFxicmllZiBSZWNlaXZlIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0dldENoYXIgKA0KKwljb25zdCBBVDkxUFNfU1BJIHBTUEkpDQorew0KKyAgICByZXR1cm4oKHBTUEktPlNQSV9SRFIpICYgMHhGRkZGKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfU1BJIHBTcGkpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwU3BpLT5TUElfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgU1BJIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1BJIHBTcGksICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTcGkpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlDQorLy8qIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorDQorLy8qIFN0YW5kYXJkIEV4dGVybmFsIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19TQ0tfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0VYVCApDQorDQorLy8qIFN0YW5kYXJkIFN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkNfTU9ERSAoIEFUOTFDX1VTX1NZTkMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKw0KKy8vKiBTQ0sgdXNlZCBMYWJlbA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgKEFUOTFDX1VTX0NLTE8gfCBBVDkxQ19VU19DTEtTX0VYVCkNCisNCisvLyogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KKwkJCQkJICAgCQkgQVQ5MUNfVVNfQ0xLU19DTE9DSyArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfUEFSX0VWRU4gKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX0NLTE8gK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX09WRVIpDQorDQorLy8qIFN0YW5kYXJkIElSREEgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFICggIEFUOTFDX1VTX1VTTU9ERV9JUkRBICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUNCisvLyogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlICgNCisJY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwljb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlKSAgLy8gXGFyZyBVQVJUIGJhdWRyYXRlDQorew0KKwl1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZSA9ICgobWFpbl9jbG9jayoxMCkvKGJhdWRfcmF0ZSAqIDE2KSk7DQorCWlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKwkJYmF1ZF92YWx1ZSA9IChiYXVkX3ZhbHVlIC8gMTApICsgMTsNCisJZWxzZQ0KKwkJYmF1ZF92YWx1ZSAvPSAxMDsNCisJcmV0dXJuIGJhdWRfdmFsdWU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwl1bnNpZ25lZCBpbnQgc3BlZWQpICAgICAvLyBcYXJnIFVBUlQgYmF1ZHJhdGUNCit7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKG1haW5DbG9jaywgc3BlZWQpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRUaW1lZ3VhcmQNCisvLyogXGJyaWVmIFNldCBVU0FSVCB0aW1lZ3VhcmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRUaW1lZ3VhcmQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQpIC8vIFxhcmcgdGltZWd1YXJkIHZhbHVlDQorew0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX1RUR1IgPSB0aW1lZ3VhcmQgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVVNBUlQgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVVNBUlQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBtb2RlICwgICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKwl1bnNpZ25lZCBpbnQgYmF1ZFJhdGUgLCAgLy8gXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvLyBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQorDQorICAgIC8vKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1RYRElTIDsNCisNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0QmF1ZHJhdGUocFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlKTsNCisNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0VGltZWd1YXJkKHBVU0FSVCwgdGltZWd1YXJkKTsNCisNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorICAgIEFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQorDQorICAgIC8vKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IG1vZGUgIDsNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgY2hhcmFjdGVycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UngNCisvLyogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorCS8vKiBSZXNldCByZWNlaXZlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlg7DQorICAgIC8vKiBSZS1FbmFibGUgcmVjZWl2ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0VHgNCisvLyogXGJyaWVmIFJlc2V0IFRyYW5zbWl0dGVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorCS8vKiBSZXNldCB0cmFuc21pdHRlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUVFg7DQorICAgIC8vKiBFbmFibGUgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBSZWNlaXZlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUcmFuc21pdHRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBVU0FSVDogZGlzYWJsZSBJVCBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ2xvc2UgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIFJlc2V0IHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICBwVVNBUlQtPlVTX0JSR1IgPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSAwICA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQorICAgIHBVU0FSVC0+VVNfVFRHUiA9IDA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gMHhGRkZGRkZGRiA7DQorDQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpKTsNCisNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseQ0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVMgfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlNUUlggOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19UeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiBpbiBVU19USFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1R4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1J4UmVhZHkNCisvLyogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSByZWFkIGluIFVTX1JIUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUnhSZWFkeSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1JYUkRZKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3INCisvLyogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJg0KKyAgICAJKEFUOTFDX1VTX09WUkUgfCAgLy8gT3ZlcnJ1biBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX0ZSQU1FIHwgLy8gRnJhbWluZyBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX1BBUkUpKTsgIC8vIFBhcml0eSBlcnJvcg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJaW50IGNoYXJhY3RlciApDQorew0KKyAgICBwVVNBUlQtPlVTX1RIUiA9IChjaGFyYWN0ZXIgJiAweDFGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0dldENoYXINCisvLyogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VU19HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCkNCit7DQorICAgIHJldHVybigocFVTQVJULT5VU19SSFIpICYgMHgxRkYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19TZW5kRnJhbWUoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldElyZGFGaWx0ZXINCisvLyogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgSXJEYSBmaWx0ZXIgdHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCXVuc2lnbmVkIGNoYXIgdmFsdWUNCispDQorew0KKwlwVVNBUlQtPlVTX0lGID0gdmFsdWU7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uDQorDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogIG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cw0KKy8vKiAJCQkgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMNCisjZGVmaW5lIEFUOTFDX0kyU19BU1lfTUFTVEVSX1RYX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCSAgIEFUOTFDX1NTQ19DS1NfRElWICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgQVQ5MUNfU1NDX0NLR19OT05FICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkgICBBVDkxQ19TU0NfU1RUT1VUICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoMTw8MTYpICYgQVQ5MUNfU1NDX1NUVERMWSkgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAoKCgobmJfYml0X2J5X3Nsb3QqbmJfc2xvdF9ieV9mcmFtZSkvMiktMSkgPDwyNCkpDQorDQorDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzDQorI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCShuYl9iaXRfYnlfc2xvdC0xKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfTVNCRiAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfc2xvdF9ieV9mcmFtZS0xKTw8OCkgJiBBVDkxQ19TU0NfREFUTkIpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX2JpdF9ieV9zbG90LTEpPDwxNikgJiBBVDkxQ19TU0NfRlNMRU4pICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUpDQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX1NldEJhdWRyYXRlICgNCisgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgU1NDIGJhdWRyYXRlDQorew0KKyAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfdmFsdWU7DQorICAgICAgICAvLyogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICAgICAgaWYgKHNwZWVkID09IDApDQorICAgICAgICAgICBiYXVkX3ZhbHVlID0gMDsNCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAodW5zaWduZWQgaW50KSAobWFpbkNsb2NrICogMTApLygyKnNwZWVkKTsNCisgICAgICAgICAgIGlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHBTU0MtPlNTQ19DTVIgPSBiYXVkX3ZhbHVlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAoDQorICAgICAgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssICAvLyBcYXJnIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgICAvLyBcYXJnIEV4cGVjdGVkIEJhdWQgUmF0ZSBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgICAvLyBcYXJnIFJlY2VpdmVyIENsb2NrIFBhcmFtZXRlcnMNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgIC8vIFxhcmcgVHJhbnNtaXR0ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCkgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBTU0MtPlNTQ19JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCisNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKwlwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVMgOw0KKw0KKyAgICAvLyogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFGX1NTQ19TZXRCYXVkcmF0ZShwU1NDLCBzeXN0X2Nsb2NrLCBiYXVkX3JhdGUpOw0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1JDTVIgPSAgY2xvY2tfcng7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RDTVIgPSAgY2xvY2tfdHg7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkZNUiA9ICBtb2RlX3J4Ow0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19URk1SID0gIG1vZGVfdHg7DQorDQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKwlBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSk7DQorDQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCisgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgIHRyYW5zbWl0dGVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHNlbmRpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlICB0cmFuc21pdHRlcg0KKyAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfVFhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCAoDQorCUFUOTFQU19TU0MgcFNTQywgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TU0MgcFNTQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfU2VuZEZyYW1lKA0KKwlBVDkxUFNfU1NDIHBTU0MsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwU3NjLT5TU0NfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgU1NDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTc2MpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVFdJDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBUV0kgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVFdJIHBUV0ksIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVFdJIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0Rpc2FibGVJdCAoDQorCUFUOTFQU19UV0kgcFRXSSwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBUV0kgaW4gbWFzdGVyIG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ29uZmlndXJlICggQVQ5MVBTX1RXSSBwVFdJICkgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFRXSS0+VFdJX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KKw0KKyAgICAvLyogUmVzZXQgcGVyaXBoZXJhbA0KKwlwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfU1dSU1Q7DQorDQorCS8vKiBTZXQgTWFzdGVyIG1vZGUNCisJcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX01TRU47DQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RXSSBwVHdpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFR3aS0+VFdJX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRXSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RXSSBwVHdpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVHdpKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BXTUMgcFBXTSkgLy8gcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBXTS0+UFdNQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFBXTSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQV00pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRTdGF0dXMocFBXTSkgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0NmZ0NoYW5uZWwNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ0NoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsIC8vIFxhcmcgIFBXTSBtb2RlDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLCAvLyBcYXJnIFBXTSBwZXJpb2QNCisgICAgICAgIHVuc2lnbmVkIGludCBkdXR5KSAvLyBcYXJnIFBXTSBkdXR5IGN5Y2xlDQorew0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DTVIgPSBtb2RlOw0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DRFRZUiA9IGR1dHk7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NQUkRSID0gcGVyaW9kOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fU3RhcnRDaGFubmVsDQorLy8qIFxicmllZiBFbmFibGUgY2hhbm5lbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RhcnRDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KK3sNCisJcFBXTS0+UFdNQ19FTkEgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fU3RvcENoYW5uZWwNCisvLyogXGJyaWVmIERpc2FibGUgY2hhbm5lbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RvcENoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQorew0KKwlwUFdNLT5QV01DX0RJUyA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsDQorLy8qIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IHVwZGF0ZSkgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCit7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NVUERSID0gdXBkYXRlOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVEUA0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVURQIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVURQLT5VRFBfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBVRFAgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9TZXRBZGRyZXNzDQorLy8qIFxicmllZiBTZXQgVURQIGZ1bmN0aW9uYWwgYWRkcmVzcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRBZGRyZXNzICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBhZGRyZXNzKSAgIC8vIFxhcmcgbmV3IFVEUCBhZGRyZXNzDQorew0KKwlwVURQLT5VRFBfRkFERFIgPSAoQVQ5MUNfVURQX0ZFTiB8IGFkZHJlc3MpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9FUEVEUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVFcA0KKy8vKiBcYnJpZWYgRW5hYmxlIEVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdICY9IH5BVDkxQ19VRFBfRVBFRFM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9TZXRTdGF0ZQ0KKy8vKiBcYnJpZWYgU2V0IFVEUCBEZXZpY2Ugc3RhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0U3RhdGUgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KK3sNCisJcFVEUC0+VURQX0dMQlNUQVRFICAmPSB+KEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcpOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgIHw9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9HZXRTdGF0ZQ0KKy8vKiBcYnJpZWYgcmV0dXJuIFVEUCBEZXZpY2Ugc3RhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRTdGF0ZSAoIC8vIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUNCisJQVQ5MVBTX1VEUCBwVURQKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAocFVEUC0+VURQX0dMQlNUQVRFICAmIChBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9SZXNldEVwDQorLy8qIFxicmllZiBSZXNldCBVRFAgZW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfUmVzZXRFcCAoIC8vIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBFbmRwb2ludHMgdG8gYmUgcmVzZXQNCit7DQorCXBVRFAtPlVEUF9SU1RFUCA9IGZsYWc7DQorCXBVRFAtPlVEUF9SU1RFUCA9IDA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFN0YWxsDQorLy8qIFxicmllZiBFbmRwb2ludCB3aWxsIFNUQUxMIHJlcXVlc3RzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwU3RhbGwoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9GT1JDRVNUQUxMOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBXcml0ZQ0KKy8vKiBcYnJpZWYgV3JpdGUgdmFsdWUgaW4gdGhlIERQUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFdyaXRlKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCwgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorCXVuc2lnbmVkIGNoYXIgdmFsdWUpICAgICAvLyBcYXJnIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIERQUg0KK3sNCisJcFVEUC0+VURQX0ZEUltlbmRwb2ludF0gPSB2YWx1ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwUmVhZA0KKy8vKiBcYnJpZWYgUmV0dXJuIHZhbHVlIGZyb20gdGhlIERQUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwUmVhZCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcmV0dXJuIHBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBFbmRPZldyDQorLy8qIFxicmllZiBOb3RpZnkgdGhlIFVEUCB0aGF0IHZhbHVlcyBpbiBEUFIgYXJlIHJlYWR5IHRvIGJlIHNlbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBFbmRPZldyKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcENsZWFyDQorLy8qIFxicmllZiBDbGVhciBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBDbGVhcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdICY9IH4oZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFNldA0KKy8vKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFN0YXR1cygNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcmV0dXJuIHBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMocFVkcCkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFRjLT5UQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFRDIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFRjLT5UQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFRjLT5UQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVGMpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQ0FODQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisjZGVmaW5lCVNUQU5EQVJEX0ZPUk1BVCAwDQorI2RlZmluZQlFWFRFTkRFRF9GT1JNQVQgMQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKCkNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwNCisJCQkJCQkJCWludCAgCQkJbW9kZV9yZWcsDQorCQkJCQkJCQlpbnQgCQkJYWNjZXB0YW5jZV9tYXNrX3JlZywNCisJCQkJCQkJCWludCAgCQkJaWRfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlkYXRhX2xvd19yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWRhdGFfaGlnaF9yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWNvbnRyb2xfcmVnKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgCT0gMHgwOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01NUiAJPSBtb2RlX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gCT0gYWNjZXB0YW5jZV9tYXNrX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgCT0gaWRfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ETCAJPSBkYXRhX2xvd19yZWc7IAkJDQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURIIAk9IGRhdGFfaGlnaF9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSIAk9IGNvbnRyb2xfcmVnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FbmFibGVDQU4oKQ0KKy8vKiBcYnJpZWYgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRW5hYmxlQ0FOKA0KKwlBVDkxUFNfQ0FOIHBDQU4pICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCit7DQorCXBDQU4tPkNBTl9NUiB8PSBBVDkxQ19DQU5fQ0FORU47DQorDQorCS8vIFdhaXQgZm9yIFdBS0VVUCBmbGFnIHJhaXNpbmcgPD0+IDExLXJlY2Vzc2l2ZS1iaXQgd2VyZSBzY2FubmVkIGJ5IHRoZSB0cmFuc2NlaXZlcg0KKwl3aGlsZSggKHBDQU4tPkNBTl9TUiAmIEFUOTFDX0NBTl9XQUtFVVApICE9IEFUOTFDX0NBTl9XQUtFVVAgKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfRGlzYWJsZUNBTigpDQorLy8qIFxicmllZiANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EaXNhYmxlQ0FOKA0KKwlBVDkxUFNfQ0FOIHBDQU4pICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCit7DQorCXBDQU4tPkNBTl9NUiAmPSB+QVQ5MUNfQ0FOX0NBTkVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBDQU4gaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0U3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19DQU4gcENBTikgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0NBTiBwQ0FOKSAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0FOLT5DQU5fSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQ0FOIHBDQU4sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMocENBTikgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQ0FOIHBDQU4sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQ0FOX0dldFN0YXR1cyhwQ0FOKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBDQU4gY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBDQU4gY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQ0FOLT5DQU5fTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBiYXVkcmF0ZV9jZmcpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIEJSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9CUiA9IGJhdWRyYXRlX2NmZzsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRCYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQ0FOLT5DQU5fQlI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVyIFJlZ3NpdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX1RJTTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRUaW1lc3RhbXANCisvLyogXGJyaWVmIFJldHVybiBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0VGltZXN0YW1wICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX1RJTUVTVFA7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRFcnJvckNvdW50ZXIgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQ0FOLT5DQU5fRUNSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QNCisvLyogXGJyaWVmIFJlcXVlc3QgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICB1bnNpZ25lZCBpbnQgdHJhbnNmZXJfY21kKQ0KK3sNCisJcENBTi0+Q0FOX1RDUiA9IHRyYW5zZmVyX2NtZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jbml0QWJvcnRSZXF1ZXN0DQorLy8qIFxicmllZiBBYm9ydCB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94ZXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdCAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorICAgIHVuc2lnbmVkIGludCBhYm9ydF9jbWQpDQorew0KKwlwQ0FOLT5DQU5fQUNSID0gYWJvcnRfY21kOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VNb2RlUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIE1vZGUgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZU1vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01NUiA9IG1vZGU7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcNCisvLyogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXINCisvLyogXGJyaWVmIFZlcnNpb24gPT0gMCBmb3IgU3RhbmRhcmQgbWVzc3NhZ2UsIFZlcnNpb24gPT0gMSBmb3IgRXh0ZW5kZWQgIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGlkLA0KKyAgICB1bnNpZ25lZCBjaGFyIHZlcnNpb24pDQorew0KKwlpZih2ZXJzaW9uPT0wKQkvLyBJRHZBIFN0YW5kYXJkIEZvcm1hdA0KKwkJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZDw8MTg7DQorCWVsc2UJLy8gSUR2QiBFeHRlbmRlZCBGb3JtYXQNCisJCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQgfCAoMTw8MjkpOwkvLyBzZXQgTUlERSBiaXQNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NSUQ7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcNCisvLyogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbWFzaykNCit7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUFNID0gbWFzazsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUFNOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0RmFtaWx5SUQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEZhbWlseUlEICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NRklEOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsDQorLy8qIFxicmllZiBSZXF1ZXN0IGFuZCBjb25maWcgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZV9jdHJsX2NtZCkNCit7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSID0gbWVzc2FnZV9jdHJsX2NtZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIE1haWxib3ggU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTVNSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93DQorLy8qIFxicmllZiBQcm9ncmFtIGRhdGEgbG93IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93ICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBkYXRhKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREwgPSBkYXRhOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93DQorLy8qIFxicmllZiBSZXR1cm4gZGF0YSBsb3cgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURMOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaA0KKy8vKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGhpZ2ggdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBkYXRhKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREggPSBkYXRhOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaA0KKy8vKiBcYnJpZWYgUmV0dXJuIGRhdGEgaGlnaCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURIOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX09wZW4NCisvLyogXGJyaWVmIE9wZW4gYSBDQU4gUG9ydA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX09wZW4gKA0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bGwpICAvLyBcYXJnDQorew0KKyAgICAgICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCisgICAgICAgIHJldHVybiAoIDAgKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBREMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIEFEQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQURDIHBBREMsICAgICAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQURDIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FEQyBwQURDKSAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQURDLT5BRENfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfQURDIHBBREMpIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBREMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19BREMgcEFEQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQURDIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19BREMgcEFEQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRENfR2V0U3RhdHVzKHBBREMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtY2tfY2xvY2ssIC8vIGluIE1IeiANCisJdW5zaWduZWQgaW50IGFkY19jbG9jaywgLy8gaW4gTUh6IA0KKwl1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvLyBpbiB1cyANCisJdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lKQkvLyBpbiBucyAgDQorew0KKwl1bnNpZ25lZCBpbnQgcHJlc2NhbCxzdGFydHVwLHNodGltOw0KKwkNCisJcHJlc2NhbCA9IG1ja19jbG9jay8oMiphZGNfY2xvY2spIC0gMTsNCisJc3RhcnR1cCA9IGFkY19jbG9jaypzdGFydHVwX3RpbWUvOCAtIDE7DQorCXNodGltID0gYWRjX2Nsb2NrKnNhbXBsZV9hbmRfaG9sZF90aW1lLzEwMDAgLSAxOw0KKwkNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfTVIgPSAoIChwcmVzY2FsPDw4KSAmIEFUOTFDX0FEQ19QUkVTQ0FMKSB8ICggKHN0YXJ0dXA8PDE2KSAmIEFUOTFDX0FEQ19TVEFSVFVQKSB8ICggKHNodGltPDwyNCkgJiBBVDkxQ19BRENfU0hUSU0pOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSEVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSEVSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSERSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSERSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NIU1I7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uDQorLy8qIFxicmllZiBTb2Z0d2FyZSByZXF1ZXN0IGZvciBhIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnNpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NUQVJUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX1NvZnRSZXNldA0KKy8vKiBcYnJpZWYgU29mdHdhcmUgcmVzZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfU29mdFJlc2V0ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1dSU1Q7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGENCisvLyogXGJyaWVmIFJldHVybiB0aGUgTGFzdCBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0xDRFI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDAgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjA7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDEgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDIgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDMgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjM7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDQgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDUgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjU7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDYgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjY7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDcgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjc7CQ0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFFUw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQUVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19FbmFibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgICAgIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQUVTLT5BRVNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBRVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBRVMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldFN0YXR1cyggLy8gXHJldHVybiBBRVMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQUVTIHBBRVMpIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBRVMtPkFFU19JU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfQUVTIHBBRVMpIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBRVMtPkFFU19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBRVMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQUVTKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQUVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0U3RhdHVzKHBBRVMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFFUyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBRVMtPkFFU19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcNCisvLyogXGJyaWVmIFN0YXJ0IEVuY3J5cHRpb24gb3IgRGVjcnlwdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IEFFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TV1JTVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Mb2FkTmV3U2VlZA0KKy8vKiBcYnJpZWYgTG9hZCBOZXcgU2VlZCBpbiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfTG9hZE5ld1NlZWQgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19MT0FEU0VFRDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkNCisvLyogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldENyeXB0b0tleSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBrZXl3b3JkDQorCSkNCit7DQorCXBBRVMtPkFFU19LRVlXeFJbaW5kZXhdID0ga2V5d29yZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19JbnB1dERhdGENCisvLyogXGJyaWVmIFNldCBJbnB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfSW5wdXREYXRhICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluZGF0YQ0KKwkpDQorew0KKwlwQUVTLT5BRVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YQ0KKy8vKiBcYnJpZWYgR2V0IE91dHB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRPdXRwdXREYXRhICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleA0KKwkpDQorew0KKwlyZXR1cm4gcEFFUy0+QUVTX09EQVRBeFJbaW5kZXhdOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yDQorLy8qIFxicmllZiBTZXQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChvciBDb3VudGVyKSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluaXR2ZWN0b3INCisJKQ0KK3sNCisJcEFFUy0+QUVTX0lWeFJbaW5kZXhdID0gaW5pdHZlY3RvcjsJDQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVERFUw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFRERVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19FbmFibGVJdCAoDQorCUFUOTFQU19UREVTIHBUREVTLCAgICAgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVERFUy0+VERFU19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUREVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwVERFUy0+VERFU19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19UREVTIHBUREVTKSAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFRERVMtPlRERVNfSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19UREVTIHBUREVTKSAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFRERVMtPlRERVNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRERVMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfVERFUyBwVERFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUREVTKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFRERVMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19UREVTIHBUREVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9UREVTX0dldFN0YXR1cyhwVERFUykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIFRERVMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwVERFUy0+VERFU19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU3RhcnRQcm9jZXNzaW5nDQorLy8qIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZyAoDQorCUFUOTFQU19UREVTIHBUREVTIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NUQVJUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IFRERVMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NvZnRSZXNldCAoDQorCUFUOTFQU19UREVTIHBUREVTIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQorew0KKwlwVERFUy0+VERFU19LRVkxV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTINCisvLyogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAyIFdvcmQgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MiAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBrZXl3b3JkDQorCSkNCit7DQorCXBUREVTLT5UREVTX0tFWTJXeFJbaW5kZXhdID0ga2V5d29yZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5Mw0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDMgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KK3sNCisJcFRERVMtPlRERVNfS0VZM1d4UltpbmRleF0gPSBrZXl3b3JkOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19JbnB1dERhdGENCisvLyogXGJyaWVmIFNldCBJbnB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0lucHV0RGF0YSAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbmRhdGENCisJKQ0KK3sNCisJcFRERVMtPlRERVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCit7DQorCXJldHVybiBwVERFUy0+VERFU19PREFUQXhSW2luZGV4XTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQorew0KKwlwVERFUy0+VERFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X0RSWEQgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOF9EVFhEICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQTUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUE1DIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjMwX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyOV9QQ0sxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMV9QQ0sxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEzX1BDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19QQ0szICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFZSRUcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUlNUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNTQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TU0MpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTU0Mgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfUksgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIyX1RLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9URiAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjRfUkQgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI2X1JGICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyM19URCAgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgV0RUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9SSTEgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfRFNSMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIzX0RDRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNV9EVFIxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfU0NLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfUlRTMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTZfVFhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTVfUlhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTlfQ1RTMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEwX1JYRDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X0NUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1JUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX1NDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExX1RYRDAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkxKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMV9OUENTMTIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9OUENTMTMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjlfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX05QQ1MxMCAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9TUENLMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X01JU08xICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX05QQ1MxMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfTU9TSTEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkwKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTNfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE3X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNF9OUENTMDIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE2X01JU08wICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTVfTlBDUzAzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE3X01PU0kwICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOF9TUENLMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTRfTlBDUzAyICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEyX05QQ1MwMCAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE3X05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE5X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE4X05QQ1MwMiAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFJQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9GSVEpIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTApIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBSUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X0ZJUSAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9JUlExICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FFUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUV0kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVFdJKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX1RXQ0sgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMF9UV0QgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfQURUUkcgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BXTTMgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzMF9QV00zICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gyIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjFfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BXTTIgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QV00xICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfUFdNMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE5X1BXTTAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19QV00wICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVURQKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UREVTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBFTUFDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRU1BQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9FTUFDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEVNQUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjJfRVRYMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX0VUWEVSICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNl9FQ09MICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTFfRVRYMyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjZfRVJYMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE1X0VSWERWICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxM19FUlgyICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCM19FVFgxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCOF9FTURDICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCNV9FUlgwICAgICkgfA0KKwkJLy8oKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOF9FRjEwMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTRfRVJYMyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYpIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjFfRVRYRU4gICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX0VUWDIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSykgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCOV9FTURJTyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCN19FUlhFUiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTdfRVJYQ0sgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyM19USU9BMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfVElPQjAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX1RDTEswICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMxKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI1X1RJT0ExICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9USU9CMSAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTlfVENMSzEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzIpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfVElPQjIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI3X1RJT0EyICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X1RDTEsyICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9BKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0JfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9CDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9CKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIENBTg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9DQU4pKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBDQU4gc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjBfQ0FOVFggICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE5X0NBTlJYICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQV01DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QV01DKSk7DQorfQ0KKw0KKyNlbmRpZiAvLyBsaWJfQVQ5MVNBTTdYMjU2X0gNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTMxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnQuYwpAQCAtMCwwICsxLDI1MiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk03IHBvcnQuDQorICoNCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gdGhpcyBmaWxlLiAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBQcm9jZXNzb3IgY29uc3RhbnRzLiAqLw0KKyNpbmNsdWRlICJBVDkxU0FNN1gyNTYuaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggcG9ydFNUQUNLX1RZUEUgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0aWNrIElTUi4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkoICggdW5zaWduZWQgY2hhciApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJMHgwMA0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAweDAxICkNCisjZGVmaW5lIHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSAkoICggdW5zaWduZWQgbG9uZyApIDB4MDIgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgUElULiAqLw0KKyNkZWZpbmUgcG9ydFBJVF9DTE9DS19ESVZJU09SCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSAxNiApDQorI2RlZmluZSBwb3J0UElUX0NPVU5URVJfVkFMVUUJCQkoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUkFURV9NUyApDQorDQorI2RlZmluZSBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSAgMA0KKyNkZWZpbmUgcG9ydFBJVF9FTkFCTEUgICAgICAJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgxIDw8IDI0ICkNCisjZGVmaW5lIHBvcnRQSVRfSU5UX0VOQUJMRSAgICAgCSggKCB1bnNpZ25lZCBzaG9ydCApIDB4MSA8PCAyNSApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIA0KKyAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBzbyANCisgKiB2UG9ydElTUlN0YXJ0Rmlyc3RTVGFzaygpIGlzIGRlZmluZWQgaW4gcG9ydElTUi5jLiANCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFICpweE9yaWdpbmFsVE9TOw0KKw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKw0KKwkvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQorCWlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcyANCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwMDAwMDAwOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgbGFzdCB0aGluZyBvbnRvIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQorCXN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKw0KKwkjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorCSNlbmRpZg0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU29tZSBvcHRpbWlzYXRpb24gbGV2ZWxzIHVzZSB0aGUgc3RhY2sgZGlmZmVyZW50bHkgdG8gb3RoZXJzLiAgVGhpcyANCisJbWVhbnMgdGhlIGludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCisJaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KKwl0YXNrcyBjb250ZXh0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0SVNSU3RhcnRGaXJzdFRhc2soKTsJDQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgMCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZCBmcmVxdWVuY3kuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK0FUOTFQU19QSVRDIHB4UElUID0gQVQ5MUNfQkFTRV9QSVRDOw0KKw0KKwkvKiBTZXR1cCB0aGUgQUlDIGZvciBQSVQgaW50ZXJydXB0cy4gIFRoZSBpbnRlcnJ1cHQgcm91dGluZSBjaG9zZW4gZGVwZW5kcw0KKwlvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSAoIHZvaWQgKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoKikodm9pZCkgKSB2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCisNCisJI2Vsc2UNCisJCQ0KKwkJZXh0ZXJuIHZvaWQgKCB2UHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KKwkJQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBBVDkxQ19JRF9TWVMsIEFUOTFDX0FJQ19QUklPUl9ISUdIRVNULCBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSwgKCB2b2lkICgqKSh2b2lkKSApIHZQcmVlbXB0aXZlVGljayApOw0KKw0KKwkjZW5kaWYNCisNCisJLyogQ29uZmlndXJlIHRoZSBQSVQgcGVyaW9kLiAqLw0KKwlweFBJVC0+UElUQ19QSU1SID0gcG9ydFBJVF9FTkFCTEUgfCBwb3J0UElUX0lOVF9FTkFCTEUgfCBwb3J0UElUX0NPVU5URVJfVkFMVUU7DQorDQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0LiAgR2xvYmFsIGludGVycnVwdHMgYXJlIGRpc2FibGVzIGF0IHRoaXMgcG9pbnQgc28gDQorCXRoaXMgaXMgc2FmZS4gKi8NCisgICAgQVQ5MUNfQkFTRV9BSUMtPkFJQ19JRUNSID0gMHgxIDw8IEFUOTFDX0lEX1NZUzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0SVNSLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnRJU1IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRhNThlCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0SVNSLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlLCBhcmUgY29udGFpbmVkIGluIHRoaXMgZmlsZS4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorCUNoYW5nZXMgZnJvbSBWMy4yLjQNCisNCisJKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQorCSAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KKyovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI2luY2x1ZGUgIkFUOTFTQU03WDI1Ni5oIg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUCQkoICggdW5zaWduZWQgY2hhciApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQJCSggKCB1bnNpZ25lZCBsb25nICkgMCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkoICggdW5zaWduZWQgbG9uZyApIDAgKQ0KK3ZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSVNSIHRvIGhhbmRsZSBtYW51YWwgY29udGV4dCBzd2l0Y2hlcyAoZnJvbSBhIGNhbGwgdG8gdGFza1lJRUxEKCkpLiAqLw0KK3ZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApIF9fYXR0cmlidXRlX18oKGludGVycnVwdCgiU1dJIiksIG5ha2VkKSk7DQorDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIGhlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcw0KKyAqIGZ1bmN0aW9uIGhlcmUuDQorICovDQordm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCit7DQorCS8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQorCWNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogQ2FsbGVkIGJ5IHBvcnRZSUVMRCgpIG9yIHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGZvcmNlIGEgY29udGV4dCBzd2l0Y2guDQorICoNCisgKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVyZm9ybWVkIGZyb20gdGhlIHRhc2sgbGV2ZWwgdGhlIHNhdmVkIHRhc2sgDQorICogY29udGV4dCBpcyBtYWRlIHRvIGxvb2sgYXMgaWYgaXQgb2NjdXJyZWQgZnJvbSB3aXRoaW4gdGhlIHRpY2sgSVNSLiAgVGhpcw0KKyAqIHdheSB0aGUgc2FtZSByZXN0b3JlIGNvbnRleHQgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgdGhlIGNvbnRleHQNCisgKiBzYXZlZCBmcm9tIHRoZSBJU1Igb3IgdGhhdCBzYXZlZCBmcm9tIGEgY2FsbCB0byB2UG9ydFlpZWxkUHJvY2Vzc29yLg0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApDQorew0KKwkvKiBXaXRoaW4gYW4gSVJRIElTUiB0aGUgbGluayByZWdpc3RlciBoYXMgYW4gb2Zmc2V0IGZyb20gdGhlIHRydWUgcmV0dXJuIA0KKwlhZGRyZXNzLCBidXQgYW4gU1dJIElTUiBkb2VzIG5vdC4gIEFkZCB0aGUgb2Zmc2V0IG1hbnVhbGx5IHNvIHRoZSBzYW1lIA0KKwlJU1IgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgaW4gYm90aCBjYXNlcy4gKi8NCisJYXNtIHZvbGF0aWxlICggIkFERAkJTFIsIExSLCAjNCIgKTsNCisNCisJLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2guICBGaXJzdCBzYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisNCisJLyogRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFRoZSBJU1IgdXNlZCBmb3IgdGhlIHNjaGVkdWxlciB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCisgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCisgKi8NCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKwkvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8gDQorCXNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQgKCJJUlEiKSkpOw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsJCQ0KKwkJdW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKwkJDQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB3aGljaCBtYXkgd2FrZSBzb21lIHRhc2tzIGJ1dCBhcyB0aGUNCisJCXByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KKwkJcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQkNCisJCS8qIENsZWFyIHRoZSBQSVQgaW50ZXJydXB0LiAqLw0KKwkJdWxEdW1teSA9IEFUOTFDX0JBU0VfUElUQy0+UElUQ19QSVZSOw0KKwkJDQorCQkvKiBFbmQgdGhlIGludGVycnVwdCBpbiB0aGUgQUlDLiAqLw0KKwkJQVQ5MUNfQkFTRV9BSUMtPkFJQ19FT0lDUiA9IHVsRHVtbXk7DQorCX0NCisNCisjZWxzZQ0KKw0KKwkvKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMNCisJc2F2ZWQgb24gZW50cnkgYXMgcGFydCBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQorCXZvaWQgdlByZWVtcHRpdmVUaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsNCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUKCk7CQkJDQorDQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB0aGlzIG1heSB3YWtlIGEgdGFzay4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKw0KKwkJLyogRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQkNCisJCS8qIEVuZCB0aGUgaW50ZXJydXB0IGluIHRoZSBBSUMuICovDQorCQlBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gQVQ5MUNfQkFTRV9QSVRDLT5QSVRDX1BJVlI7Ow0KKwkJDQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQVJNIG1vZGUuICBXaGVuDQorICogVEhVTUJfSU5URVJXT1JLIGlzIGRlZmluZWQgdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgaGVyZSB0bw0KKyAqIGVuc3VyZSBhIHN3aXRjaCB0byBBUk0gbW9kZS4gIFdoZW4gVEhVTUJfSU5URVJXT1JLIGlzIG5vdCBkZWZpbmVkIHRoZW4NCisgKiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBpbiBwb3J0bWFjcm8uaCAtIGFzIHBlciBvdGhlciBwb3J0cy4NCisgKi8NCit2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCit2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKw0KK3ZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorew0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkiQlgJCVIxNCIgKTsJCQkJCS8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCit9DQorCQkNCit2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorew0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8JDQorCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovCQ0KKwkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJCQkJKi8JDQorCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLwkNCisJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorfQ0KKw0KKw0KKy8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQorZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KK2JlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCitpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkJCQkJCQkqLw0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCANCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQorCQkJYXNtIHZvbGF0aWxlICggDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JDQorCQkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCQ0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwkNCisJCQkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCX0NCisJfQ0KK30NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWI0NjZlCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDI4NCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCisJQ2hhbmdlcyBmcm9tIFYzLjIuMw0KKwkNCisJKyBNb2RpZmllZCBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIHRvIGFsbG93IHVzZSB3aXRoIEdDQyBWNC4wLjEuDQorDQorCUNoYW5nZXMgZnJvbSBWMy4yLjQNCisNCisJKyBSZW1vdmVkIHRoZSB1c2Ugb2YgdGhlICUwIHBhcmFtZXRlciB3aXRoaW4gdGhlIGFzc2VtYmxlciBtYWNyb3MgYW5kIA0KKwkgIHJlcGxhY2VkIHRoZW0gd2l0aCBoYXJkIGNvZGVkIHJlZ2lzdGVycy4gIFRoaXMgd2lsbCBlbnN1cmUgdGhlDQorCSAgYXNzZW1ibGVyIGRvZXMgbm90IHNlbGVjdCB0aGUgbGluayByZWdpc3RlciBhcyB0aGUgdGVtcCByZWdpc3RlciBhcw0KKwkgIHdhcyBvY2Nhc2lvbmFsbHkgaGFwcGVuaW5nIHByZXZpb3VzbHkuDQorDQorCSsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KKwkgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCisNCisJQ2hhbmdlcyBmcm9tIFY0LjUuMA0KKw0KKwkrIFJlbW92ZWQgdGhlIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgYW5kIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKSBtYWNyb3MNCisJICBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIHBvcnRZSUVMRF9GUk9NX0lTUigpIG1hY3JvLiAgQXBwbGljYXRpb24gY29kZSANCisJICBzaG91bGQgbm93IG1ha2UgdXNlIG9mIHRoZSBwb3J0U0FWRV9DT05URVhUKCkgYW5kIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQ0KKwkgIG1hY3JvcyBhcyBwZXIgdGhlIFY0LjUuMSBkZW1vIGNvZGUuDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0TE9ORw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KKw0KKy8qDQorICogcG9ydFJFU1RPUkVfQ09OVEVYVCwgcG9ydFJFU1RPUkVfQ09OVEVYVCwgcG9ydEVOVEVSX1NXSVRDSElOR19JU1INCisgKiBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZSwgYnV0DQorICogYXJlIGluY2x1ZGVkIGhlcmUgZm9yIGVmZmljaWVuY3kuICBBbiBhdHRlbXB0IHRvIGNhbGwgb25lIGZyb20NCisgKiBUSFVNQiBtb2RlIGNvZGUgd2lsbCByZXN1bHQgaW4gYSBjb21waWxlIHRpbWUgZXJyb3IuDQorICovDQorDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gKi8JCQkJCQkJCQlcDQorCWFzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCSJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJTFIsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAqLwlcDQorCS8qIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuICovCQkJCQlcDQorCSJMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJXG5cdCIJXA0KKwkiTERNRkQJTFIhLCB7UjF9CQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCQkJCQlcDQorCSJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk1TUgkJU1BTUiwgUjAJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkiTERNRkQJTFIsIHtSMC1SMTR9XgkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLwkJCQkJCQkJCVwNCisJIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlICovCVwNCisJLyogY29ycmVjdCBhZGRyZXNzLiAqLwkJCQkJCQkJCQkJCVwNCisJIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuICovCQkJCQlcDQorCWFzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCSJTVE1EQglTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCBSMCB0byBwb2ludCB0byB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLwkJCQkJXA0KKwkiU1RNREIJU1Ase1NQfV4JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1VCCVNQLCBTUCwgIzQJCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxETUlBCVNQISx7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4gKi8JCQkJCQlcDQorCSJTVE1EQglSMCEsIHtMUn0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyB3ZSBoYXZlIHNhdmVkIExSIHdlIGNhbiB1c2UgaXQgaW5zdGVhZCBvZiBSMC4gKi8JCQkJXA0KKwkiTU9WCUxSLCBSMAkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4gKi8JCQlcDQorCSJMRE1JQQlTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gKi8JCVwNCisJIlNUTURCCUxSLHtSMC1MUn1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglMUiwgTFIsICM2MAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQlcDQorCSJNUlMJUjAsIFNQU1IJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJIkxEUglSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLwkJCQkJCVwNCisJIkxEUglSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RSCUxSLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCisNCisNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpCQl2VGFza1N3aXRjaENvbnRleHQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSB2b2xhdGlsZSAoICJTV0kgMCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisNCisvKg0KKyAqIFRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQVJNIG1vZGUuICBXaGVuDQorICogVEhVTUJfSU5URVJXT1JLIGlzIGRlZmluZWQgdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgaW4gDQorICogcG9ydElTUi5jIHRvIGVuc3VyZSBhIHN3aXRjaCB0byBBUk0gbW9kZS4gIFdoZW4gVEhVTUJfSU5URVJXT1JLIGlzIG5vdCANCisgKiBkZWZpbmVkIHRoZW4gdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MgaGVyZSAtIGFzIHBlciBvdGhlciBwb3J0cy4NCisgKi8NCisNCisjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorDQorCWV4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisJZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkNCisjZWxzZQ0KKw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJXA0KKwkJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KKwkJCQ0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQkJXA0KKwkJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KKw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExYTcyNgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnQuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk03IHBvcnQuDQorICoNCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gdGhpcyBmaWxlLiAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggcG9ydFNUQUNLX1RZUEUgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0aWNrIElTUi4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkoICggdW5zaWduZWQgY2hhciApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJMHgwMA0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAweDAxICkNCisjZGVmaW5lIHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSAkoICggdW5zaWduZWQgbG9uZyApIDB4MDIgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgVklDIGZvciB0aGUgdGljayBJU1IuICovDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwJCSggKCB1bnNpZ25lZCBsb25nICkgMHgwMDA0ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQJKCAoIHVuc2lnbmVkIGxvbmcgKSAweDAwMTAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19FTkFCTEUJCSggKCB1bnNpZ25lZCBsb25nICkgMHgwMDIwICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvIA0KKyAqIHZQb3J0SVNSU3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuIA0KKyAqLw0KK2V4dGVybiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4YWFhYWFhYWE7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisNCisJLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQorCVIwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCisJc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnRJTklUSUFMX1NQU1I7DQorDQorCWlmKCAoICggdW5zaWduZWQgbG9uZyApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDAgKQ0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU29tZSBvcHRpbWlzYXRpb24gbGV2ZWxzIHVzZSB0aGUgc3RhY2sgZGlmZmVyZW50bHkgdG8gb3RoZXJzLiAgVGhpcyANCisJbWVhbnMgdGhlIGludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCisJaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KKwl0YXNrcyBjb250ZXh0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0SVNSU3RhcnRGaXJzdFRhc2soKTsJDQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgMCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZCBmcmVxdWVuY3kuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxDb21wYXJlTWF0Y2g7DQorZXh0ZXJuIHZvaWQgKCB2VGlja0lTUiApKCB2b2lkICk7DQorDQorCS8qIEEgMW1zIHRpY2sgZG9lcyBub3QgcmVxdWlyZSB0aGUgdXNlIG9mIHRoZSB0aW1lciBwcmVzY2FsZS4gIFRoaXMgaXMNCisJZGVmYXVsdGVkIHRvIHplcm8gYnV0IGNhbiBiZSB1c2VkIGlmIG5lY2Vzc2FyeS4gKi8NCisJVDBfUFIgPSBwb3J0UFJFU0NBTEVfVkFMVUU7DQorDQorCS8qIENhbGN1bGF0ZSB0aGUgbWF0Y2ggdmFsdWUgcmVxdWlyZWQgZm9yIG91ciB3YW50ZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisNCisJLyogUHJvdGVjdCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvLiAgVXNpbmcgYW4gaWYoKSBzdGF0ZW1lbnQgc3RpbGwgcmVzdWx0cw0KKwlpbiBhIHdhcm5pbmcgLSBoZW5jZSB0aGUgI2lmLiAqLw0KKwkjaWYgcG9ydFBSRVNDQUxFX1ZBTFVFICE9IDANCisJew0KKwkJdWxDb21wYXJlTWF0Y2ggLz0gKCBwb3J0UFJFU0NBTEVfVkFMVUUgKyAxICk7DQorCX0NCisJI2VuZGlmDQorCVQwX01SMCA9IHVsQ29tcGFyZU1hdGNoOw0KKw0KKwkvKiBHZW5lcmF0ZSB0aWNrIHdpdGggdGltZXIgMCBjb21wYXJlIG1hdGNoLiAqLw0KKwlUMF9NQ1IgPSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggfCBwb3J0SU5URVJSVVBUX09OX01BVENIOw0KKw0KKwkvKiBTZXR1cCB0aGUgVklDIGZvciB0aGUgdGltZXIuICovDQorCVZJQ0ludFNlbGVjdCAmPSB+KCBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICk7DQorCVZJQ0ludEVuYWJsZSB8PSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUOw0KKwkNCisJLyogVGhlIElTUiBpbnN0YWxsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQorCXNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKw0KKwlWSUNWZWN0QWRkcjAgPSAoIGxvbmcgKSB2VGlja0lTUjsNCisJVklDVmVjdENudGwwID0gcG9ydFRJTUVSX1ZJQ19DSEFOTkVMIHwgcG9ydFRJTUVSX1ZJQ19FTkFCTEU7DQorDQorCS8qIFN0YXJ0IHRoZSB0aW1lciAtIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQNCisJc28gaXQgaXMgb2theSB0byBkbyB0aGlzIGhlcmUuICovDQorCVQwX1RDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnRJU1IuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnRJU1IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQyNWYwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydElTUi5jCkBAIC0wLDAgKzEsMjUxIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQorICogY29udGFpbmVkIGluIHBvcnQuYyAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSwgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKwlDaGFuZ2VzIGZyb20gVjIuNS4yDQorCQkNCisJKyBUaGUgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoYXZlIGJlZW4gY2hhbmdlZC4gIFRoZXNlIG5vDQorCSAgbG9uZ2VyIG1vZGlmeSB0aGUgc3RhY2sgYW5kIGFyZSBzYWZlIHRvIHVzZSBhdCBhbGwgb3B0aW1pc2F0aW9uIGxldmVscy4NCisJICBUaGUgZnVuY3Rpb25zIGFyZSBub3cgYWxzbyB0aGUgc2FtZSBmb3IgYm90aCBBUk0gYW5kIFRIVU1CIG1vZGVzLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjIuNi4wDQorDQorCSsgUmVtb3ZlZCB0aGUgJ3N0YXRpYycgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB2Tm9uUHJlZW1wdGl2ZVRpY2soKSB0byANCisJICBhbGxvdyB0aGUgZGVtbyB0byBsaW5rIHdoZW4gdXNpbmcgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4NCisNCisJQ2hhbmdlcyBmcm9tIFYzLjIuNA0KKw0KKwkrIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCisJICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQorKi8NCisNCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiAqLw0KKyNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQJCSggKCB1bnNpZ25lZCBjaGFyICkgMHgwMSApDQorI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcJCSggKCB1bnNpZ25lZCBsb25nICkgMCApDQordm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBJU1IgdG8gaGFuZGxlIG1hbnVhbCBjb250ZXh0IHN3aXRjaGVzIChmcm9tIGEgY2FsbCB0byB0YXNrWUlFTEQoKSkuICovDQordm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KCJTV0kiKSwgbmFrZWQpKTsNCisNCisvKiANCisgKiBUaGUgc2NoZWR1bGVyIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgZnJvbSBBUk0gbW9kZSwgaGVuY2UgdGhlIGluY2x1c2lvbiBvZiB0aGlzDQorICogZnVuY3Rpb24gaGVyZS4NCisgKi8NCit2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCisJY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBDYWxsZWQgYnkgcG9ydFlJRUxEKCkgb3IgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4NCisgKg0KKyAqIFdoZW4gYSBjb250ZXh0IHN3aXRjaCBpcyBwZXJmb3JtZWQgZnJvbSB0aGUgdGFzayBsZXZlbCB0aGUgc2F2ZWQgdGFzayANCisgKiBjb250ZXh0IGlzIG1hZGUgdG8gbG9vayBhcyBpZiBpdCBvY2N1cnJlZCBmcm9tIHdpdGhpbiB0aGUgdGljayBJU1IuICBUaGlzDQorICogd2F5IHRoZSBzYW1lIHJlc3RvcmUgY29udGV4dCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aGVuIHJlc3RvcmluZyB0aGUgY29udGV4dA0KKyAqIHNhdmVkIGZyb20gdGhlIElTUiBvciB0aGF0IHNhdmVkIGZyb20gYSBjYWxsIHRvIHZQb3J0WWllbGRQcm9jZXNzb3IuDQorICovDQordm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkNCit7DQorCS8qIFdpdGhpbiBhbiBJUlEgSVNSIHRoZSBsaW5rIHJlZ2lzdGVyIGhhcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJ1ZSByZXR1cm4gDQorCWFkZHJlc3MsIGJ1dCBhbiBTV0kgSVNSIGRvZXMgbm90LiAgQWRkIHRoZSBvZmZzZXQgbWFudWFsbHkgc28gdGhlIHNhbWUgDQorCUlTUiByZXR1cm4gY29kZSBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiICk7DQorDQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQorDQorCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiYmwgdlRhc2tTd2l0Y2hDb250ZXh0IiApOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOwkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogVGhlIElTUiB1c2VkIGZvciB0aGUgc2NoZWR1bGVyIHRpY2suDQorICovDQordm9pZCB2VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCB2VGlja0lTUiggdm9pZCApDQorew0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7CQ0KKw0KKwkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljayBjb3VudCwgdGhlbiBsb29rIGZvciB0aGUgaGlnaGVzdCBwcmlvcml0eSANCisJdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJX19hc20gdm9sYXRpbGUoICJibCB2VGFza0luY3JlbWVudFRpY2siICk7DQorDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQlfX2FzbSB2b2xhdGlsZSggImJsIHZUYXNrU3dpdGNoQ29udGV4dCIgKTsNCisJI2VuZGlmDQorDQorCS8qIFJlYWR5IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuICovDQorCVQwX0lSID0gcG9ydFRJTUVSX01BVENIX0lTUl9CSVQ7DQorCVZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7DQorCQ0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQVJNIG1vZGUuICBXaGVuDQorICogVEhVTUJfSU5URVJXT1JLIGlzIGRlZmluZWQgdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgaGVyZSB0bw0KKyAqIGVuc3VyZSBhIHN3aXRjaCB0byBBUk0gbW9kZS4gIFdoZW4gVEhVTUJfSU5URVJXT1JLIGlzIG5vdCBkZWZpbmVkIHRoZW4NCisgKiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBpbiBwb3J0bWFjcm8uaCAtIGFzIHBlciBvdGhlciBwb3J0cy4NCisgKi8NCisjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorDQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwl2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKw0KKwl2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KKwl7DQorCQlfX2FzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQorCQkJDQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCisJew0KKwkJX19hc20gdm9sYXRpbGUgKCANCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJCSovCQ0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8JDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJCQkJKi8JDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8JDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCisNCisjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQorDQorLyogVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBHQ0MgY29tcGlsZXIgdXNlcyB0aGUgc3RhY2sgaW4gZGlmZmVyZW50IHdheXMgYXQNCitkaWZmZXJlbnQgb3B0aW1pc2F0aW9uIGxldmVscy4gIFRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2FuIHRoZXJlZm9yZSBub3QgYWx3YXlzDQorYmUgc2F2ZWQgdG8gdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGxldmVsIGlzIHN0b3JlZA0KK2luIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2sgY29udGV4dC4gKi8NCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgCQkJCQkJCSovDQorCV9fYXNtIHZvbGF0aWxlICggDQorCQkiU1RNREIJU1AhLCB7UjB9CQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCSovDQorCQkiTVJTCVIwLCBDUFNSCQkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCSovDQorCQkiT1JSCVIwLCBSMCwgIzB4QzAJCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkqLw0KKwkJIk1TUglDUFNSLCBSMAkJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCisJCSJMRE1JQQlTUCEsIHtSMH0iICk7CQkJCS8qIFBvcCBSMC4JCQkJCQkJCSovDQorDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQorfQ0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCisNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuCQkJCQkqLw0KKwkJCV9fYXNtIHZvbGF0aWxlICggDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JDQorCQkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCQ0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwkNCisJCQkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCX0NCisJfQ0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNmI2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDI2MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KKw0KKy8qDQorICogcG9ydFJFU1RPUkVfQ09OVEVYVCwgcG9ydFJFU1RPUkVfQ09OVEVYVCwgcG9ydEVOVEVSX1NXSVRDSElOR19JU1INCisgKiBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZSwgYnV0DQorICogYXJlIGluY2x1ZGVkIGhlcmUgZm9yIGVmZmljaWVuY3kuICBBbiBhdHRlbXB0IHRvIGNhbGwgb25lIGZyb20NCisgKiBUSFVNQiBtb2RlIGNvZGUgd2lsbCByZXN1bHQgaW4gYSBjb21waWxlIHRpbWUgZXJyb3IuDQorICovDQorDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gKi8JCQkJCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJXA0KKwkiTERSCQlSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlSMCwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCUxSLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gKi8JXA0KKwkvKiBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAqLwkJCQkJXA0KKwkiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiCVwNCisJIkxETUZECUxSISwge1IxfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RSCQlSMSwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suICovCQkJCQkJCQkJXA0KKwkiTERNRkQJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCSJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suICovCQkJCVwNCisJIkxETUZECUxSLCB7UjAtUjE0fV4JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8JCQkJCQkJCQlcDQorCSJMRFIJCUxSLCBbTFIsICMrNjBdCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLwlcDQorCS8qIGNvcnJlY3QgYWRkcmVzcy4gKi8JCQkJCQkJCQkJCQlcDQorCSJTVUJTCVBDLCBMUiwgIzQJCQkJCQkJCQkJCVxuXHQiCVwNCisJKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAqLwkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCVwNCisJIlNUTURCCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovCQkJCQlcDQorCSJTVE1EQglTUCx7U1B9XgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVUIJU1AsIFNQLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERNSUEJU1AhLHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAqLwkJCQkJCVwNCisJIlNUTURCCVIwISwge0xSfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAqLwkJCQlcDQorCSJNT1YJTFIsIFIwCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAqLwkJCVwNCisJIkxETUlBCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJXA0KKwkiU1RNREIJTFIse1IwLUxSfV4JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1VCCUxSLCBMUiwgIzYwCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suICovCQkJCQkJCVwNCisJIk1SUwlSMCwgU1BTUgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkiTERSCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJCVxuXHQiCVwNCisJIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suICovCQkJCQkJXA0KKwkiTERSCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJTFIsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorfQ0KKw0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkJCXZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJX19hc20gdm9sYXRpbGUgKCAiU1dJIDAiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorLyoNCisgKiBUaGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAgV2hlbg0KKyAqIFRIVU1CX0lOVEVSV09SSyBpcyBkZWZpbmVkIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zIGluIA0KKyAqIHBvcnRJU1IuYyB0byBlbnN1cmUgYSBzd2l0Y2ggdG8gQVJNIG1vZGUuICBXaGVuIFRIVU1CX0lOVEVSV09SSyBpcyBub3QgDQorICogZGVmaW5lZCB0aGVuIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGhlcmUgLSBhcyBwZXIgb3RoZXIgcG9ydHMuDQorICovDQorDQorI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKw0KKwlleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCWV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJDQorI2Vsc2UNCisNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCVwNCisJCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQorCQkJDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCQlcDQorCQlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KKw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhMDMxZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnQuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk03IHBvcnQuDQorICoNCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gdGhpcyBmaWxlLiAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggcG9ydFNUQUNLX1RZUEUgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0aWNrIElTUi4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIHBvcnRDSEFSICkgMHgwMSApDQorI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUgICAgICAgICAgICAgIDB4MDANCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfT05fTUFUQ0ggICAgICAgICAgKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMHgwMSApDQorI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggICAgICAgICggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDB4MDIgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgVklDIGZvciB0aGUgdGljayBJU1IuICovDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwgICAgICAgICAgICggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDB4MDAwNCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICAgICAgICggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDB4MDAxMCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0VOQUJMRSAgICAgICAgICAgICggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDB4MDAyMCApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIA0KKyAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBzbyANCisgKiB2UG9ydElTUlN0YXJ0Rmlyc3RTVGFzaygpIGlzIGRlZmluZWQgaW4gcG9ydElTUi5jLiANCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFICpweE9yaWdpbmFsVE9TOw0KKw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwkNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMgDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMDsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydElOSVRJQUxfU1BTUjsNCisNCisJaWYoICggKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMCApDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBTb21lIG9wdGltaXNhdGlvbiBsZXZlbHMgdXNlIHRoZSBzdGFjayBkaWZmZXJlbnRseSB0byBvdGhlcnMuICBUaGlzIA0KKwltZWFucyB0aGUgaW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRJU1JTdGFydEZpcnN0VGFzaygpOwkNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIHRoZSB0aW1lciAwIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMgYXQgdGhlIHJlcXVpcmVkIGZyZXF1ZW5jeS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQordW5zaWduZWQgcG9ydExPTkcgdWxDb21wYXJlTWF0Y2g7DQorDQorCVBDTEtTRUwwID0gKFBDTEtTRUwwICYgKH4oMHgzPDwyKSkpIHwgKDB4MDEgPDwgMik7DQorCVQwVENSICA9IDI7ICAgICAgICAgLyogU3RvcCBhbmQgcmVzZXQgdGhlIHRpbWVyICovDQorCVQwQ1RDUiA9IDA7ICAgICAgICAgLyogVGltZXIgbW9kZSAgICAgICAgICAgICAgICovDQorCQ0KKwkvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQorCWRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQorCVQwUFIgPSBwb3J0UFJFU0NBTEVfVkFMVUU7DQorDQorCS8qIENhbGN1bGF0ZSB0aGUgbWF0Y2ggdmFsdWUgcmVxdWlyZWQgZm9yIG91ciB3YW50ZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisNCisJLyogUHJvdGVjdCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvLiAgVXNpbmcgYW4gaWYoKSBzdGF0ZW1lbnQgc3RpbGwgcmVzdWx0cw0KKwlpbiBhIHdhcm5pbmcgLSBoZW5jZSB0aGUgI2lmLiAqLw0KKwkjaWYgcG9ydFBSRVNDQUxFX1ZBTFVFICE9IDANCisJew0KKwkJdWxDb21wYXJlTWF0Y2ggLz0gKCBwb3J0UFJFU0NBTEVfVkFMVUUgKyAxICk7DQorCX0NCisJI2VuZGlmDQorCVQwTVIxID0gdWxDb21wYXJlTWF0Y2g7DQorDQorCS8qIEdlbmVyYXRlIHRpY2sgd2l0aCB0aW1lciAwIGNvbXBhcmUgbWF0Y2guICovDQorCVQwTUNSICA9ICgzIDw8IDMpOyAgLyogUmVzZXQgdGltZXIgb24gbWF0Y2ggYW5kIGdlbmVyYXRlIGludGVycnVwdCAqLw0KKw0KKwkvKiBTZXR1cCB0aGUgVklDIGZvciB0aGUgdGltZXIuICovDQorCVZJQ0ludEVuYWJsZSA9IDB4MDAwMDAwMTA7DQorCQ0KKwkvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsNCisJCWV4dGVybiB2b2lkICggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCisJCVZJQ1ZlY3RBZGRyNCA9ICggcG9ydExPTkcgKSB2UHJlZW1wdGl2ZVRpY2s7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KKwkJVklDVmVjdEFkZHI0ID0gKCBwb3J0TE9ORyApIHZOb25QcmVlbXB0aXZlVGljazsNCisJfQ0KKwkjZW5kaWYNCisNCisJVklDVmVjdENudGw0ID0gMTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIC0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZA0KKwlzbyBpdCBpcyBva2F5IHRvIGRvIHRoaXMgaGVyZS4gKi8NCisJVDBUQ1IgPSBwb3J0RU5BQkxFX1RJTUVSOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0SVNSLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0SVNSLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljYzc0MgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnRJU1IuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KKyAqIGNvbnRhaW5lZCBpbiBwb3J0LmMgIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQorICogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiAqLw0KKyNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQJCSggKCB1bnNpZ25lZCBwb3J0Q0hBUiApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQJCSggKCB1bnNpZ25lZCBwb3J0TE9ORyApIDAgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMCApDQordm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSVNSIHRvIGhhbmRsZSBtYW51YWwgY29udGV4dCBzd2l0Y2hlcyAoZnJvbSBhIGNhbGwgdG8gdGFza1lJRUxEKCkpLiAqLw0KK3ZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApIF9fYXR0cmlidXRlX18oKGludGVycnVwdCgiU1dJIiksIG5ha2VkKSk7DQorDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIGhlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcw0KKyAqIGZ1bmN0aW9uIGhlcmUuDQorICovDQordm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCit7DQorCS8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQorCWNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogQ2FsbGVkIGJ5IHBvcnRZSUVMRCgpIG9yIHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGZvcmNlIGEgY29udGV4dCBzd2l0Y2guDQorICoNCisgKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVyZm9ybWVkIGZyb20gdGhlIHRhc2sgbGV2ZWwgdGhlIHNhdmVkIHRhc2sgDQorICogY29udGV4dCBpcyBtYWRlIHRvIGxvb2sgYXMgaWYgaXQgb2NjdXJyZWQgZnJvbSB3aXRoaW4gdGhlIHRpY2sgSVNSLiAgVGhpcw0KKyAqIHdheSB0aGUgc2FtZSByZXN0b3JlIGNvbnRleHQgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgdGhlIGNvbnRleHQNCisgKiBzYXZlZCBmcm9tIHRoZSBJU1Igb3IgdGhhdCBzYXZlZCBmcm9tIGEgY2FsbCB0byB2UG9ydFlpZWxkUHJvY2Vzc29yLg0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApDQorew0KKwkvKiBXaXRoaW4gYW4gSVJRIElTUiB0aGUgbGluayByZWdpc3RlciBoYXMgYW4gb2Zmc2V0IGZyb20gdGhlIHRydWUgcmV0dXJuIA0KKwlhZGRyZXNzLCBidXQgYW4gU1dJIElTUiBkb2VzIG5vdC4gIEFkZCB0aGUgb2Zmc2V0IG1hbnVhbGx5IHNvIHRoZSBzYW1lIA0KKwlJU1IgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgaW4gYm90aCBjYXNlcy4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiQURECQlMUiwgTFIsICM0IiApOw0KKw0KKwkvKiBQZXJmb3JtIHRoZSBjb250ZXh0IHN3aXRjaC4gIEZpcnN0IHNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKw0KKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCV9fYXNtIHZvbGF0aWxlKCAiYmwJCQl2VGFza1N3aXRjaENvbnRleHQiICk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7CQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBUaGUgSVNSIHVzZWQgZm9yIHRoZSBzY2hlZHVsZXIgdGljayBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGNvb3BlcmF0aXZlIG9yDQorICogdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuDQorICovDQorDQorDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisNCisJLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvIA0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiSVJRIikpKTsNCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7CQ0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQlUMElSID0gMjsNCisJCVZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7DQorCX0NCisNCisjZWxzZQ0KKw0KKwkvKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMNCisJc2F2ZWQgb24gZW50cnkgYXMgcGFydCBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQorCXZvaWQgdlByZWVtcHRpdmVUaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsNCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOwkNCisNCisJCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIGNvdW50LCB0aGVuIGxvb2sgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IA0KKwkJdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCV9fYXNtIHZvbGF0aWxlKCAiYmwgdlRhc2tJbmNyZW1lbnRUaWNrIiApOw0KKwkJX19hc20gdm9sYXRpbGUoICJibCB2VGFza1N3aXRjaENvbnRleHQiICk7DQorDQorCQkvKiBSZWFkeSBmb3IgdGhlIG5leHQgaW50ZXJydXB0LiAqLw0KKwkJVDBJUiA9IDI7DQorCQlWSUNWZWN0QWRkciA9IHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUOw0KKwkJDQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogVGhlIGludGVycnVwdCBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZS4gIFdoZW4NCisgKiBUSFVNQl9JTlRFUldPUksgaXMgZGVmaW5lZCB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucyBoZXJlIHRvDQorICogZW5zdXJlIGEgc3dpdGNoIHRvIEFSTSBtb2RlLiAgV2hlbiBUSFVNQl9JTlRFUldPUksgaXMgbm90IGRlZmluZWQgdGhlbg0KKyAqIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGluIHBvcnRtYWNyby5oIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KKyAqLw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisNCisJdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorDQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCV9fYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCQkqLw0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCisJCQkNCisJdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KKwl7DQorCQlfX2FzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8JDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCQkqLwkNCisJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLwkNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLwkNCisJCQkiTERNSUEJU1AhLCB7UjB9CQlcblx0IgkvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCisJCQkiQlgJCVIxNCIgKTsJCQkJCS8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCisJfQ0KKw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCisNCisvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEdDQyBjb21waWxlciB1c2VzIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgd2F5cyBhdA0KK2RpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCitiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQoraW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAJCQkJCQkJKi8NCisJX19hc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCANCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQorCQkJX19hc20gdm9sYXRpbGUgKCANCisJCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwkNCisJCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwkNCisJCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JDQorCQkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCQ0KKwkJCQkiTERNSUEJU1AhLCB7UjB9IiApOwkJCS8qIFBvcCBSMC4JCQkJCQkqLw0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIzeHgvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwN2QyMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMjg0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKg0KKwlDaGFuZ2VzIGZyb20gVjMuMi4zDQorCQ0KKwkrIE1vZGlmaWVkIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgdG8gYWxsb3cgdXNlIHdpdGggR0NDIFY0LjAuMS4NCisNCisJQ2hhbmdlcyBmcm9tIFYzLjIuNA0KKw0KKwkrIFJlbW92ZWQgdGhlIHVzZSBvZiB0aGUgJTAgcGFyYW1ldGVyIHdpdGhpbiB0aGUgYXNzZW1ibGVyIG1hY3JvcyBhbmQgDQorCSAgcmVwbGFjZWQgdGhlbSB3aXRoIGhhcmQgY29kZWQgcmVnaXN0ZXJzLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGUNCisJICBhc3NlbWJsZXIgZG9lcyBub3Qgc2VsZWN0IHRoZSBsaW5rIHJlZ2lzdGVyIGFzIHRoZSB0ZW1wIHJlZ2lzdGVyIGFzDQorCSAgd2FzIG9jY2FzaW9uYWxseSBoYXBwZW5pbmcgcHJldmlvdXNseS4NCisNCisJKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQorCSAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjQuNS4wDQorDQorCSsgUmVtb3ZlZCB0aGUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpIG1hY3Jvcw0KKwkgIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggcG9ydFlJRUxEX0ZST01fSVNSKCkgbWFjcm8uICBBcHBsaWNhdGlvbiBjb2RlIA0KKwkgIHNob3VsZCBub3cgbWFrZSB1c2Ugb2YgdGhlIHBvcnRTQVZFX0NPTlRFWFQoKSBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCgpDQorCSAgbWFjcm9zIGFzIHBlciB0aGUgVjQuNS4xIGRlbW8gY29kZS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fYXNtIHZvbGF0aWxlICggIk5PUCIgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorDQorLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCisNCisvKg0KKyAqIHBvcnRSRVNUT1JFX0NPTlRFWFQsIHBvcnRSRVNUT1JFX0NPTlRFWFQsIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSDQorICogYW5kIHBvcnRFWElUX1NXSVRDSElOR19JU1IgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQVJNIG1vZGUsIGJ1dA0KKyAqIGFyZSBpbmNsdWRlZCBoZXJlIGZvciBlZmZpY2llbmN5LiAgQW4gYXR0ZW1wdCB0byBjYWxsIG9uZSBmcm9tDQorICogVEhVTUIgbW9kZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZSB0aW1lIGVycm9yLg0KKyAqLw0KKw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suICovCQkJCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCVwNCisJIkxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJUjAsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovCVwNCisJLyogTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gKi8JCQkJCVwNCisJIkxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQlcblx0IglcDQorCSJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUgkJUjEsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJIkxETUZECUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTVNSCQlTUFNSLCBSMAkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLiAqLwkJCQlcDQorCSJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovCQkJCQkJCQkJXA0KKwkiTERSCQlMUiwgW0xSLCAjKzYwXQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUgKi8JXA0KKwkvKiBjb3JyZWN0IGFkZHJlc3MuICovCQkJCQkJCQkJCQkJXA0KKwkiU1VCUwlQQywgTFIsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gKi8JCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQlcDQorCSJTVE1EQglTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCBSMCB0byBwb2ludCB0byB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLwkJCQkJXA0KKwkiU1RNREIJU1Ase1NQfV4JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1VCCVNQLCBTUCwgIzQJCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxETUlBCVNQISx7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4gKi8JCQkJCQlcDQorCSJTVE1EQglSMCEsIHtMUn0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyB3ZSBoYXZlIHNhdmVkIExSIHdlIGNhbiB1c2UgaXQgaW5zdGVhZCBvZiBSMC4gKi8JCQkJXA0KKwkiTU9WCUxSLCBSMAkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4gKi8JCQlcDQorCSJMRE1JQQlTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gKi8JCVwNCisJIlNUTURCCUxSLHtSMC1MUn1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglMUiwgTFIsICM2MAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQlcDQorCSJNUlMJUjAsIFNQU1IJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJIkxEUglSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLwkJCQkJCVwNCisJIkxEUglSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RSCUxSLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCisNCisNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpCQl2VGFza1N3aXRjaENvbnRleHQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtIHZvbGF0aWxlICggIlNXSSAwIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KKy8qDQorICogVGhlIGludGVycnVwdCBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZS4gIFdoZW4NCisgKiBUSFVNQl9JTlRFUldPUksgaXMgZGVmaW5lZCB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucyBpbiANCisgKiBwb3J0SVNSLmMgdG8gZW5zdXJlIGEgc3dpdGNoIHRvIEFSTSBtb2RlLiAgV2hlbiBUSFVNQl9JTlRFUldPUksgaXMgbm90IA0KKyAqIGRlZmluZWQgdGhlbiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBoZXJlIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KKyAqLw0KKw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisNCisJZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwlleHRlcm4gdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCQ0KKyNlbHNlDQorDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCQlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQkJXA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JXA0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JXA0KKwkJCSJPUlIJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCSovCVwNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwlcDQorCQkJIkxETUlBCVNQISwge1IwfQkJCSIgKQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCQkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJCVwNCisJCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KKw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTAvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00wL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjM4ZWQxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00wL3BvcnQuYwpAQCAtMCwwICsxLDMwNSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTSBDTTAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBOVklDLiAqLw0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DVFJMCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZTAxNCApDQorI2RlZmluZSBwb3J0TlZJQ19JTlRfQ1RSTAkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMDQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTUFJJMgkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE1JTl9JTlRFUlJVUFRfUFJJT1JJVFkJKCAyNTVVTCApDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCBwb3J0TUlOX0lOVEVSUlVQVF9QUklPUklUWSA8PCAxNlVMICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfUFJJCQkoIHBvcnRNSU5fSU5URVJSVVBUX1BSSU9SSVRZIDw8IDI0VUwgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGluaXRpYWwgc3RhY2suICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9YUFNSCQkJKCAweDAxMDAwMDAwICkNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cyBpbiB0aGUgY3JpdGljYWwgbmVzdGluZw0KK3ZhcmlhYmxlLiAqLw0KK3N0YXRpYyB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHhhYWFhYWFhYTsNCisNCisvKg0KKyAqIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICk7DQordm9pZCB2UG9ydFNWQ0hhbmRsZXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoIG5ha2VkICkpOw0KKw0KKy8qDQorICogU3RhcnQgZmlyc3QgdGFzayBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgaW4gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoIG5ha2VkICkpOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQorCWludGVycnVwdC4gKi8NCisJcHhUb3BPZlN0YWNrLS07IC8qIE9mZnNldCBhZGRlZCB0byBhY2NvdW50IGZvciB0aGUgd2F5IHRoZSBNQ1UgdXNlcyB0aGUgc3RhY2sgb24gZW50cnkvZXhpdCBvZiBpbnRlcnJ1cHRzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfWFBTUjsJLyogeFBTUiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFBDICovDQorCXB4VG9wT2ZTdGFjayAtPSA2OwkvKiBMUiwgUjEyLCBSMy4uUjEgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjayAtPSA4OyAvKiBSMTEuLlI0LiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZSAoDQorCQkJCQkiCWxkcglyMywgcHhDdXJyZW50VENCQ29uc3QyCQlcbiIgLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCisJCQkJCSIJbGRyIHIxLCBbcjNdCQkJCQlcbiIgLyogVXNlIHB4Q3VycmVudFRDQkNvbnN0IHRvIGdldCB0aGUgcHhDdXJyZW50VENCIGFkZHJlc3MuICovDQorCQkJCQkiCWxkciByMCwgW3IxXQkJCQkJXG4iIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCQkJCQkiCWFkZCByMCwgcjAsICMxNgkJCQkJXG4iIC8qIE1vdmUgdG8gdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwkJCQkJIglsZG1pYSByMCEsIHtyNC1yN30JCQkJXG4iIC8qIFBvcCB0aGUgaGlnaCByZWdpc3RlcnMuICovDQorCQkJCQkiIAltb3YgcjgsIHI0CQkJCQkJXG4iDQorCQkJCQkiIAltb3YgcjksIHI1CQkJCQkJXG4iDQorCQkJCQkiIAltb3YgcjEwLCByNgkJCQkJCVxuIg0KKwkJCQkJIiAJbW92IHIxMSwgcjcJCQkJCQlcbiINCisJCQkJCSIJCQkJCQkJCQlcbiINCisJCQkJCSIJbXNyIHBzcCwgcjAJCQkJCQlcbiIgLyogUmVtZW1iZXIgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwkJCQkJIgkJCQkJCQkJCVxuIg0KKwkJCQkJIglzdWIgcjAsIHIwLCAjMzIJCQkJCVxuIiAvKiBHbyBiYWNrIGZvciB0aGUgbG93IHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSByZXN0b3JlZC4gKi8NCisJCQkJCSIgCWxkbWlhIHIwISwge3I0LXI3fSAgICAgICAgICAgICAgXG4iIC8qIFBvcCBsb3cgcmVnaXN0ZXJzLiAgKi8NCisJCQkJCSIJbW92IHIxLCByMTQJCQkJCQlcbiIgLyogT1IgUjE0IHdpdGggMHgwZC4gKi8NCisJCQkJCSIJbW92cyByMCwgIzB4MGQJCQkJCVxuIg0KKwkJCQkJIglvcnIgcjEsIHIwCQkJCQkJXG4iDQorCQkJCQkiCWJ4IHIxCQkJCQkJCVxuIg0KKwkJCQkJIgkJCQkJCQkJCVxuIg0KKwkJCQkJIgkuYWxpZ24gMgkJCQkJCVxuIg0KKwkJCQkJInB4Q3VycmVudFRDQkNvbnN0MjogLndvcmQgcHhDdXJyZW50VENCCVxuIg0KKwkJCQkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUoDQorCQkJCQkiIG1vdnMgcjAsICMweDAwIAlcbiIgLyogTG9jYXRlIHRoZSB0b3Agb2Ygc3RhY2suICovDQorCQkJCQkiIGxkciByMCwgW3IwXSAJCVxuIg0KKwkJCQkJIiBtc3IgbXNwLCByMAkJXG4iIC8qIFNldCB0aGUgbXNwIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCisJCQkJCSIgY3BzaWUgaQkJCVxuIiAvKiBHbG9iYWxseSBlbmFibGUgaW50ZXJydXB0cy4gKi8NCisJCQkJCSIgc3ZjIDAJCQkJXG4iIC8qIFN5c3RlbSBjYWxsIHRvIHN0YXJ0IGZpcnN0IHRhc2suICovDQorCQkJCQkiIG5vcAkJCQlcbiINCisJCQkJKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBNYWtlIFBlbmRTViwgQ2FsbFNWIGFuZCBTeXNUaWNrIHRoZSBzYW1lIHByaXJvaXR5IGFzIHRoZSBrZXJuZWwuICovDQorCSoocG9ydE5WSUNfU1lTUFJJMikgfD0gcG9ydE5WSUNfUEVORFNWX1BSSTsNCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19TWVNUSUNLX1BSSTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKyAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQ00wIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisgICAgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkNCit7DQorCS8qIFNldCBhIFBlbmRTViB0byByZXF1ZXN0IGEgY29udGV4dCBzd2l0Y2guICovDQorCSooIHBvcnROVklDX0lOVF9DVFJMICkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisgICAgdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKyAgICB1eENyaXRpY2FsTmVzdGluZy0tOw0KKyAgICBpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorICAgIHsNCisgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKyAgICB9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRQZW5kU1ZIYW5kbGVyKCB2b2lkICkNCit7DQorCS8qIFRoaXMgaXMgYSBuYWtlZCBmdW5jdGlvbi4gKi8NCisNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkiCW1ycyByMCwgcHNwCQkJCQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCWxkcglyMywgcHhDdXJyZW50VENCQ29uc3QJCQlcbiIgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQorCSIJbGRyCXIyLCBbcjNdCQkJCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJc3ViIHIwLCByMCwgIzMyCQkJCQkJXG4iIC8qIE1ha2Ugc3BhY2UgZm9yIHRoZSByZW1haW5pbmcgbG93IHJlZ2lzdGVycy4gKi8NCisJIglzdHIgcjAsIFtyMl0JCQkJCQlcbiIgLyogU2F2ZSB0aGUgbmV3IHRvcCBvZiBzdGFjay4gKi8NCisJIglzdG1pYSByMCEsIHtyNC1yN30JCQkJCVxuIiAvKiBTdG9yZSB0aGUgbG93IHJlZ2lzdGVycyB0aGF0IGFyZSBub3Qgc2F2ZWQgYXV0b21hdGljYWxseS4gKi8NCisJIiAJbW92IHI0LCByOAkJCQkJCQlcbiIgLyogU3RvcmUgdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwkiIAltb3YgcjUsIHI5CQkJCQkJCVxuIg0KKwkiIAltb3YgcjYsIHIxMAkJCQkJCQlcbiINCisJIiAJbW92IHI3LCByMTEJCQkJCQkJXG4iDQorCSIgCXN0bWlhIHIwISwge3I0LXI3fSAgICAgICAgICAgICAgCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXB1c2gge3IzLCByMTR9CQkJCQkJXG4iDQorCSIJY3BzaWQgaQkJCQkJCQkJXG4iDQorCSIJYmwgdlRhc2tTd2l0Y2hDb250ZXh0CQkJCVxuIg0KKwkiCWNwc2llIGkJCQkJCQkJCVxuIg0KKwkiCXBvcCB7cjIsIHIzfQkJCQkJCVxuIiAvKiBsciBnb2VzIGluIHIzLiByMiBub3cgaG9sZHMgdGNiIHBvaW50ZXIuICovDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJbGRyIHIxLCBbcjJdCQkJCQkJXG4iDQorCSIJbGRyIHIwLCBbcjFdCQkJCQkJXG4iIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCSIJYWRkIHIwLCByMCwgIzE2CQkJCQkJXG4iIC8qIE1vdmUgdG8gdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwkiCWxkbWlhIHIwISwge3I0LXI3fQkJCQkJXG4iIC8qIFBvcCB0aGUgaGlnaCByZWdpc3RlcnMuICovDQorCSIgCW1vdiByOCwgcjQJCQkJCQkJXG4iDQorCSIgCW1vdiByOSwgcjUJCQkJCQkJXG4iDQorCSIgCW1vdiByMTAsIHI2CQkJCQkJCVxuIg0KKwkiIAltb3YgcjExLCByNwkJCQkJCQlcbiINCisJIgkJCQkJCQkJCQlcbiINCisJIgltc3IgcHNwLCByMAkJCQkJCQlcbiIgLyogUmVtZW1iZXIgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXN1YiByMCwgcjAsICMzMgkJCQkJCVxuIiAvKiBHbyBiYWNrIGZvciB0aGUgbG93IHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSByZXN0b3JlZC4gKi8NCisJIiAJbGRtaWEgcjAhLCB7cjQtcjd9ICAgICAgICAgICAgICAJXG4iIC8qIFBvcCBsb3cgcmVnaXN0ZXJzLiAgKi8NCisJIgkJCQkJCQkJCQlcbiINCisJIglieCByMwkJCQkJCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJLmFsaWduIDIJCQkJCQkJXG4iDQorCSJweEN1cnJlbnRUQ0JDb25zdDogLndvcmQgcHhDdXJyZW50VENCCSAgIg0KKwkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsRHVtbXk7DQorDQorCS8qIElmIHVzaW5nIHByZWVtcHRpb24sIGFsc28gZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCSoocG9ydE5WSUNfSU5UX0NUUkwpID0gcG9ydE5WSUNfUEVORFNWU0VUOw0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00wL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00wL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMGI4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTAvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCQkJCXZQb3J0WWllbGRGcm9tSVNSKCkNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgCWlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkJCQkJX19hc20gdm9sYXRpbGUgCSggIiBjcHNpZCBpICIgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkJCQkJX19hc20gdm9sYXRpbGUgCSggIiBjcHNpZSBpICIgKQ0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCQkwO3BvcnRTRVRfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOyh2b2lkKXgNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQlwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnROT1AoKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTMvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZhY2EyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zL3BvcnQuYwpAQCAtMCwwICsxLDMwMSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTSBDTTMgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBlbnN1cmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSBpcw0KK2RlZmluZWQuICBUaGUgdmFsdWUgc2hvdWxkIGFsc28gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQorRnJlZVJUT1Mub3JnIHZlcnNpb25zIHByaW9yIHRvIFY0LjQuMCBkaWQgbm90IGluY2x1ZGUgdGhpcyBkZWZpbml0aW9uLiAqLw0KKyNpZm5kZWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkjZGVmaW5lIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgMjU1DQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGUwMTAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19MT0FECQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDE0ICkNCisjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQyMCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NMSwkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19JTlQJCTB4MDAwMDAwMDINCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFCQkweDAwMDAwMDAxDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVQJCQkweDEwMDAwMDAwDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAxNiApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX1BSSQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAyNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKw0KKy8qIFRoZSBwcmlvcml0eSB1c2VkIGJ5IHRoZSBrZXJuZWwgaXMgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSB0byBtYWtlIGFjY2Vzcw0KK2Zyb20gaW5saW5lIGFzc2VtYmxlciBlYXNpZXIuICovDQorY29uc3QgdW5zaWduZWQgbG9uZyB1bEtlcm5lbFByaW9yaXR5ID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cyBpbiB0aGUgY3JpdGljYWwgbmVzdGluZw0KK3ZhcmlhYmxlLiAqLw0KK3N0YXRpYyB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHhhYWFhYWFhYTsNCisNCisvKg0KKyAqIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICk7DQordm9pZCB2UG9ydFNWQ0hhbmRsZXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoIG5ha2VkICkpOw0KKw0KKy8qDQorICogU3RhcnQgZmlyc3QgdGFzayBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgaW4gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCisJaW50ZXJydXB0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsgLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0IG9mIGludGVycnVwdHMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9YUFNSOwkvKiB4UFNSICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsJLyogUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAwOwkvKiBMUiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gNTsJLyogUjEyLCBSMywgUjIgYW5kIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrIC09IDg7CS8qIFIxMSwgUjEwLCBSOSwgUjgsIFI3LCBSNiwgUjUgYW5kIFI0LiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZSAoDQorCQkJCQkiCWxkcglyMywgcHhDdXJyZW50VENCQ29uc3QyCQlcbiIgLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCisJCQkJCSIJbGRyIHIxLCBbcjNdCQkJCQlcbiIgLyogVXNlIHB4Q3VycmVudFRDQkNvbnN0IHRvIGdldCB0aGUgcHhDdXJyZW50VENCIGFkZHJlc3MuICovDQorCQkJCQkiCWxkciByMCwgW3IxXQkJCQkJXG4iIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCQkJCQkiCWxkbWlhIHIwISwge3I0LXIxMX0JCQkJXG4iIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeSBhbmQgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQuICovDQorCQkJCQkiCW1zciBwc3AsIHIwCQkJCQkJXG4iIC8qIFJlc3RvcmUgdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8NCisJCQkJCSIJbW92IHIwLCAjMCAJCQkJCQlcbiINCisJCQkJCSIJbXNyCWJhc2VwcmksIHIwCQkJCQlcbiINCisJCQkJCSIJb3JyIHIxNCwgIzB4ZAkJCQkJXG4iDQorCQkJCQkiCWJ4IHIxNAkJCQkJCQlcbiINCisJCQkJCSIJCQkJCQkJCQlcbiINCisJCQkJCSIJLmFsaWduIDQJCQkJCQlcbiINCisJCQkJCSJweEN1cnJlbnRUQ0JDb25zdDI6IC53b3JkIHB4Q3VycmVudFRDQlxuIg0KKwkJCQkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUoDQorCQkJCQkiIGxkciByMCwgPTB4RTAwMEVEMDggCVxuIiAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorCQkJCQkiIGxkciByMCwgW3IwXSAJCQlcbiINCisJCQkJCSIgbGRyIHIwLCBbcjBdIAkJCVxuIg0KKwkJCQkJIiBtc3IgbXNwLCByMAkJCVxuIiAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQorCQkJCQkiIGNwc2llIGkJCQkJXG4iIC8qIEdsb2JhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwkJCQkJIiBzdmMgMAkJCQkJXG4iIC8qIFN5c3RlbSBjYWxsIHRvIHN0YXJ0IGZpcnN0IHRhc2suICovDQorCQkJCQkiIG5vcAkJCQkJXG4iDQorCQkJCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwLiAgDQorCVNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQorCWNvbmZpZ0FTU0VSVCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorDQorCS8qIE1ha2UgUGVuZFNWLCBDYWxsU1YgYW5kIFN5c1RpY2sgdGhlIHNhbWUgcHJpcm9pdHkgYXMgdGhlIGtlcm5lbC4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEluaXRpYWxpc2UgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgcmVhZHkgZm9yIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl1eENyaXRpY2FsTmVzdGluZyA9IDA7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwcnZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQ00zIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkNCit7DQorCS8qIFNldCBhIFBlbmRTViB0byByZXF1ZXN0IGEgY29udGV4dCBzd2l0Y2guICovDQorCSoocG9ydE5WSUNfSU5UX0NUUkwpID0gcG9ydE5WSUNfUEVORFNWU0VUOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXV4Q3JpdGljYWxOZXN0aW5nKys7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJdXhDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApDQorew0KKwkvKiBUaGlzIGlzIGEgbmFrZWQgZnVuY3Rpb24uICovDQorDQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJIgljbHJleAkJCQkJCQkJXG4iDQorCSIJbXJzIHIwLCBwc3AJCQkJCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJbGRyCXIzLCBweEN1cnJlbnRUQ0JDb25zdAkJCVxuIiAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisJIglsZHIJcjIsIFtyM10JCQkJCQlcbiINCisJIgkJCQkJCQkJCQlcbiINCisJIglzdG1kYiByMCEsIHtyNC1yMTF9CQkJCQlcbiIgLyogU2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJIglzdHIgcjAsIFtyMl0JCQkJCQlcbiIgLyogU2F2ZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBpbnRvIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIFRDQi4gKi8NCisJIgkJCQkJCQkJCQlcbiINCisJIglzdG1kYiBzcCEsIHtyMywgcjE0fQkJCQlcbiINCisJIgltb3YgcjAsICUwCQkJCQkJCVxuIg0KKwkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkiCWJsIHZUYXNrU3dpdGNoQ29udGV4dAkJCQlcbiINCisJIgltb3YgcjAsICMwCQkJCQkJCVxuIg0KKwkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkiCWxkbWlhIHNwISwge3IzLCByMTR9CQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIgkvKiBSZXN0b3JlIHRoZSBjb250ZXh0LCBpbmNsdWRpbmcgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQuICovDQorCSIJbGRyIHIxLCBbcjNdCQkJCQkJXG4iDQorCSIJbGRyIHIwLCBbcjFdCQkJCQkJXG4iIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCSIJbGRtaWEgcjAhLCB7cjQtcjExfQkJCQkJXG4iIC8qIFBvcCB0aGUgcmVnaXN0ZXJzLiAqLw0KKwkiCW1zciBwc3AsIHIwCQkJCQkJCVxuIg0KKwkiCWJ4IHIxNAkJCQkJCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJLmFsaWduIDIJCQkJCQkJXG4iDQorCSJweEN1cnJlbnRUQ0JDb25zdDogLndvcmQgcHhDdXJyZW50VENCCVxuIg0KKwk6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpDQorCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorCSNlbmRpZg0KKw0KKwl1bER1bW15ID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgc3lzdGljayB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZA0KKyAqIGZyZXF1ZW5jeS4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogQ29uZmlndXJlIFN5c1RpY2sgdG8gaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZS4gKi8NCisJKihwb3J0TlZJQ19TWVNUSUNLX0xPQUQpID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTDsNCisJKihwb3J0TlZJQ19TWVNUSUNLX0NUUkwpID0gcG9ydE5WSUNfU1lTVElDS19DTEsgfCBwb3J0TlZJQ19TWVNUSUNLX0lOVCB8IHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTMvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTMvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlMmQ2NwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNMy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE3MyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJdlBvcnRZaWVsZEZyb21JU1IoKQ0KKw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBpZiggeFN3aXRjaFJlcXVpcmVkICkgdlBvcnRZaWVsZEZyb21JU1IoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisNCisvKiANCisgKiBTZXQgYmFzZXByaSB0byBwb3J0TUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdpdGhvdXQgZWZmZWN0aW5nIG90aGVyDQorICogcmVnaXN0ZXJzLiAgcjAgaXMgY2xvYmJlcmVkLg0KKyAqLyANCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0soKQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUJCQkJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCQkJCVwNCisJCSIJbW92IHIwLCAlMAkJCQkJCQkJXG4iCVwNCisJCSIJbXNyIGJhc2VwcmksIHIwCQkJCQkJCVxuIiBcDQorCQk6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpOiJyMCIJXA0KKwkpDQorCQ0KKy8qDQorICogU2V0IGJhc2VwcmkgYmFjayB0byAwIHdpdGhvdXQgZWZmZWN0aXZlIG90aGVyIHJlZ2lzdGVycy4NCisgKiByMCBpcyBjbG9iYmVyZWQuICBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KKyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLg0KKyAqLw0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkJCQlcDQorCV9fYXNtIHZvbGF0aWxlCQkJCQkJCVwNCisJKAkJCQkJCQkJCQlcDQorCQkiCW1vdiByMCwgIzAJCQkJCVxuIglcDQorCQkiCW1zciBiYXNlcHJpLCByMAkJCQlcbiIJXA0KKwkJOjo6InIwIgkJCQkJCQkJXA0KKwkpDQorDQorLyogRkFROiAgU2V0dGluZyBCQVNFUFJJIHRvIDAgaW4gcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgaXMgbm90IGEgDQorYnVnLiAgUGxlYXNlIHNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSANCitkaXNhZ3JlZWluZy4gKi8NCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJMDtwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsodm9pZCl4DQorDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnROT1AoKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTNfS1hYL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNM19LWFgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDYyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTNfS1hYL3BvcnQuYwpAQCAtMCwwICsxLDQxNCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwNCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXINCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVJNIENNMyBwb3J0Lg0KKyAqDQorICogVGhpcyBpcyBhIHNwZWNpYWxpemF0aW9uIGZvciB0aGUgRnJlZXNjYWxlIEt4eCBzZXJpZXMgdGhhdCB1c2VzDQorICogTFBUTVIgaW5zdGVhZCBvZiBTWVNUSUNLIHRvIGdlbmVyYXRlIHBvcnRUSUNLcy4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbmZpZ3VyYXRpb24gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZW5zdXJlIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMNCitkZWZpbmVkLiAgVGhlIHZhbHVlIHNob3VsZCBhbHNvIGVuc3VyZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KK0ZyZWVSVE9TLm9yZyB2ZXJzaW9ucyBwcmlvciB0byBWNC40LjAgZGlkIG5vdCBpbmNsdWRlIHRoaXMgZGVmaW5pdGlvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJI2RlZmluZSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIDI1NQ0KKyNlbmRpZg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBOVklDLiAqLw0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DVFJMCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZTAxNCApDQorI2RlZmluZSBwb3J0TlZJQ19JTlRfQ1RSTAkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMDQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTUFJJMgkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWX1BSSQkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMTYgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19QUkkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMjQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGluaXRpYWwgc3RhY2suICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9YUFNSCQkJKCAweDAxMDAwMDAwICkNCisNCisvKiBUaGUgcHJpb3JpdHkgdXNlZCBieSB0aGUga2VybmVsIGlzIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgdG8gbWFrZSBhY2Nlc3MNCitmcm9tIGlubGluZSBhc3NlbWJsZXIgZWFzaWVyLiAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgdWxLZXJuZWxQcmlvcml0eSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIGNyaXRpY2FsIG5lc3RpbmcNCit2YXJpYWJsZS4gKi8NCitzdGF0aWMgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IDB4YWFhYWFhYWE7DQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICk7DQordm9pZCB2UG9ydFNWQ0hhbmRsZXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoIG5ha2VkICkpOw0KKw0KKy8qDQorICogU3RhcnQgZmlyc3QgdGFzayBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgaW4gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCisJaW50ZXJydXB0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsgLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0IG9mIGludGVycnVwdHMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9YUFNSOwkvKiB4UFNSICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsJLyogUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAwOwkvKiBMUiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gNTsJLyogUjEyLCBSMywgUjIgYW5kIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrIC09IDg7CS8qIFIxMSwgUjEwLCBSOSwgUjgsIFI3LCBSNiwgUjUgYW5kIFI0LiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZSAoDQorCQkJCQkiCWxkcglyMywgcHhDdXJyZW50VENCQ29uc3QyCQlcbiIgLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCisJCQkJCSIJbGRyIHIxLCBbcjNdCQkJCQlcbiIgLyogVXNlIHB4Q3VycmVudFRDQkNvbnN0IHRvIGdldCB0aGUgcHhDdXJyZW50VENCIGFkZHJlc3MuICovDQorCQkJCQkiCWxkciByMCwgW3IxXQkJCQkJXG4iIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCQkJCQkiCWxkbWlhIHIwISwge3I0LXIxMX0JCQkJXG4iIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeSBhbmQgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQuICovDQorCQkJCQkiCW1zciBwc3AsIHIwCQkJCQkJXG4iIC8qIFJlc3RvcmUgdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8NCisJCQkJCSIJbW92IHIwLCAjMCAJCQkJCQlcbiINCisJCQkJCSIJbXNyCWJhc2VwcmksIHIwCQkJCQlcbiINCisJCQkJCSIJb3JyIHIxNCwgIzB4ZAkJCQkJXG4iDQorCQkJCQkiCWJ4IHIxNAkJCQkJCQlcbiINCisJCQkJCSIJCQkJCQkJCQlcbiINCisJCQkJCSIJLmFsaWduIDQJCQkJCQlcbiINCisJCQkJCSJweEN1cnJlbnRUQ0JDb25zdDI6IC53b3JkIHB4Q3VycmVudFRDQlxuIg0KKwkJCQkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUoDQorCQkJCQkiIGxkciByMCwgPTB4RTAwMEVEMDggCVxuIiAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorCQkJCQkiIGxkciByMCwgW3IwXSAJCQlcbiINCisJCQkJCSIgbGRyIHIwLCBbcjBdIAkJCVxuIg0KKwkJCQkJIiBtc3IgbXNwLCByMAkJCVxuIiAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQorCQkJCQkiIGNwc2llIGkJCQkJXG4iIC8qIEdsb2JhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwkJCQkJIiBzdmMgMAkJCQkJXG4iIC8qIFN5c3RlbSBjYWxsIHRvIHN0YXJ0IGZpcnN0IHRhc2suICovDQorCQkJCQkiIG5vcAkJCQkJXG4iDQorCQkJCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwLg0KKwlTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCAqLw0KKwljb25maWdBU1NFUlQoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKw0KKwkvKiBNYWtlIFBlbmRTViwgQ2FsbFNWIGFuZCBTeXNUaWNrIHRoZSBzYW1lIHByaXJvaXR5IGFzIHRoZSBrZXJuZWwuICovDQorCSoocG9ydE5WSUNfU1lTUFJJMikgfD0gcG9ydE5WSUNfUEVORFNWX1BSSTsNCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19TWVNUSUNLX1BSSTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJcHJ2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIENNMyBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApDQorew0KKwkvKiBTZXQgYSBQZW5kU1YgdG8gcmVxdWVzdCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCXV4Q3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkNCisJew0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4UG9ydFBlbmRTVkhhbmRsZXIoIHZvaWQgKQ0KK3sNCisJLyogVGhpcyBpcyBhIG5ha2VkIGZ1bmN0aW9uLiAqLw0KKw0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorICAgICIgICBjbHJleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiINCisJIgltcnMgcjAsIHBzcAkJCQkJCQlcbiINCisJIgkJCQkJCQkJCQlcbiINCisJIglsZHIJcjMsIHB4Q3VycmVudFRDQkNvbnN0CQkJXG4iIC8qIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLiAqLw0KKwkiCWxkcglyMiwgW3IzXQkJCQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXN0bWRiIHIwISwge3I0LXIxMX0JCQkJCVxuIiAvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwkiCXN0ciByMCwgW3IyXQkJCQkJCVxuIiAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXN0bWRiIHNwISwge3IzLCByMTR9CQkJCVxuIg0KKwkiCW1vdiByMCwgJTAJCQkJCQkJXG4iDQorCSIJbXNyIGJhc2VwcmksIHIwCQkJCQkJXG4iDQorCSIJYmwgdlRhc2tTd2l0Y2hDb250ZXh0CQkJCVxuIg0KKwkiCW1vdiByMCwgIzAJCQkJCQkJXG4iDQorCSIJbXNyIGJhc2VwcmksIHIwCQkJCQkJXG4iDQorCSIJbGRtaWEgc3AhLCB7cjMsIHIxNH0JCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQsIGluY2x1ZGluZyB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudC4gKi8NCisJIglsZHIgcjEsIFtyM10JCQkJCQlcbiINCisJIglsZHIgcjAsIFtyMV0JCQkJCQlcbiIgLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCisJIglsZG1pYSByMCEsIHtyNC1yMTF9CQkJCQlcbiIgLyogUG9wIHRoZSByZWdpc3RlcnMuICovDQorCSIJbXNyIHBzcCwgcjAJCQkJCQkJXG4iDQorCSIJYnggcjE0CQkJCQkJCQlcbiINCisJIgkJCQkJCQkJCQlcbiINCisJIgkuYWxpZ24gMgkJCQkJCQlcbiINCisJInB4Q3VycmVudFRDQkNvbnN0OiAud29yZCBweEN1cnJlbnRUQ0IJXG4iDQorCTo6ImkiKGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSkNCisJKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIExQVE1SLiAqLw0KKw0KKyNkZWZpbmUgU0lNX0JBU0UJCQkJKDB4NDAwNDcwMDApDQorI2RlZmluZSBTSU1fUkVHSVNURVIocikJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoU0lNX0JBU0UrKHIpKSApDQorI2RlZmluZSBwb3J0U0lNX1NPUFQxCQkJU0lNX1JFR0lTVEVSKCAweDAwMDAgKQ0KKyNkZWZpbmUgcG9ydFNJTV9TQ0dDNQkJCVNJTV9SRUdJU1RFUiggMHgxMDM4ICkNCisNCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktTRUxfTUFTSwkoICggKHVuc2lnbmVkIGxvbmcpIDB4MykgPDwgMTgpDQorI2RlZmluZSBTSU1fU09QVDFfT1NDMzJLU0VMX1JUQwkoICggKHVuc2lnbmVkIGxvbmcpIDB4MikgPDwgMTgpDQorI2RlZmluZSBTSU1fU09QVDFfT1NDMzJLU0VMX0xQTwkoICggKHVuc2lnbmVkIGxvbmcpIDB4MykgPDwgMTgpDQorDQorI2RlZmluZSBTSU1fU0NHQzVfTFBUSU1FUgkJKCAoICh1bnNpZ25lZCBsb25nKSAxKSA8PCAwKQ0KKw0KKyNkZWZpbmUgTFBUX0JBU0UJCQkJKDB4NDAwNDAwMDApDQorI2RlZmluZSBMUFRfUkVHSVNURVIocikJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTFBUX0JBU0UrKHIpKSApDQorI2RlZmluZSBwb3J0TFBUTVJfQ1NSCQkJTFBUX1JFR0lTVEVSKCAweDAwICkNCisjZGVmaW5lIHBvcnRMUFRNUl9QU1IJCQlMUFRfUkVHSVNURVIoIDB4MDQgKQ0KKyNkZWZpbmUgcG9ydExQVE1SX0NNUgkJCUxQVF9SRUdJU1RFUiggMHgwOCApDQorI2RlZmluZSBwb3J0TFBUTVJfQ05SCQkJTFBUX1JFR0lTVEVSKCAweDBDICkNCisNCisjZGVmaW5lIExQVE1SX0NTUl9URU4JCQkoICggKHVuc2lnbmVkIGxvbmcpIDEpIDw8IDAgKQ0KKyNkZWZpbmUgTFBUTVJfQ1NSX1RJRQkJCSggKCAodW5zaWduZWQgbG9uZykgMSkgPDwgNiApDQorI2RlZmluZSBMUFRNUl9DU1JfVENGCQkJKCAoICh1bnNpZ25lZCBsb25nKSAxKSA8PCA3ICkNCisNCisjZGVmaW5lIExQVE1SX1BTUl9QUkVTQ0FMRV9ESVZfMgkoICggKHVuc2lnbmVkIGxvbmcpIDB4MCkgPDwgMyApDQorI2RlZmluZSBMUFRNUl9QU1JfUEJZUAkgICAgICAgICggKCAodW5zaWduZWQgbG9uZykgMHgxKSA8PCAyICkNCisjZGVmaW5lIExQVE1SX1BTUl9QQ1NfRVJDTEszMksJKCAoICh1bnNpZ25lZCBsb25nKSAweDIpIDw8IDAgKQ0KKyNkZWZpbmUgTFBUTVJfUFNSX1BDU19MUE8JICAgICggKCAodW5zaWduZWQgbG9uZykgMHgxKSA8PCAwICkNCisNCisNCisvKiBUaGUgaW50ZXJydXB0IHZlY3RvciBudW1iZXIgZm9yIExQVE1SIGRpZmZlcnMgYmV0d2VlbiBLMjQgYW5kIEs2MDoNCisgICBLNjAgaXMgODUgKDB4NTUpID0gMiozMiArIDIxLCAgSzI0IGlzIDU4ICgweDNBKSA9IDEqMzIgKyAyNiAqLw0KKw0KKyNpZmRlZiBLSU5FVElTX0syNA0KKyNkZWZpbmUgTFBUTVJfSVNSCQkJKDB4M0EpDQorI2Vsc2UNCisjaWZkZWYgS0lORVRJU19LNjANCisjZGVmaW5lIExQVE1SX0lTUgkJCSgweDU1KQ0KKyNlbHNlDQorI2Vycm9yIE5vIHJlY29nbml6ZWQgS0lORVRJU188TUNVPg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTlZJQ19JU0VSCQkJCSgweGUwMDBlMTAwKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSVNFUlcJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTlZJQ19JU0VSKzQqKExQVE1SX0lTUi8zMikpICkNCisjZGVmaW5lIE5WSUNfSVNFUldfTFBUTVIJCSggKCAodW5zaWduZWQgbG9uZykgMSkgPDwgKExQVE1SX0lTUiUzMikgKQ0KKw0KKyNkZWZpbmUgTlZJQ19QUkkJCQkJKDB4ZTAwMGU0MDApDQorI2RlZmluZSBwb3J0TlZJQ19MUFRNUl9QUkkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChOVklDX1BSSStMUFRNUl9JU1IpICkNCisNCit2b2lkIGxwdG1yX2lzciggdm9pZCApOw0KK3ZvaWQgbHB0bXJfaXNyKCB2b2lkICkNCit7DQorCXVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJKihwb3J0TFBUTVJfQ1NSKSB8PSBMUFRNUl9DU1JfVENGOw0KKw0KKwkvKiBJZiB1c2luZyBwcmVlbXB0aW9uLCBhbHNvIGZvcmNlIGEgY29udGV4dCBzd2l0Y2guICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsNCisJI2VuZGlmDQorDQorCXVsRHVtbXkgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXsNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwl9DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxEdW1teSApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIHRoZSBMUFRNUiB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZA0KKyAqIGZyZXF1ZW5jeS4gIEFzc3VtZXMgMzJrSHogUlRDIGNsb2NrIGFscmVhZHkgZW5hYmxlZC4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJdW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKwl1bnNpZ25lZCBsb25nIHNvcHQxOw0KKw0KKwkvKiBFbmFibGUgYWNjZXNzIHRvIExQVE1SICovDQorCSoocG9ydFNJTV9TQ0dDNSkgfD0gU0lNX1NDR0M1X0xQVElNRVI7DQorDQorCSoocG9ydE5WSUNfTFBUTVJfUFJJKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorDQorCS8qIFJvdXRlIHRoZSAzMmtIeiBSVENfWFRBTCB0byBFUkNMSzMySyAqLw0KKwlzb3B0MSA9ICoocG9ydFNJTV9TT1BUMSk7DQorCXNvcHQxICY9IH5TSU1fU09QVDFfT1NDMzJLU0VMX01BU0s7DQorCXNvcHQxIHw9ICBTSU1fU09QVDFfT1NDMzJLU0VMX1JUQzsNCisJKihwb3J0U0lNX1NPUFQxKSA9IHNvcHQxOw0KKw0KKwkvKiBDb25maWd1cmUgTFBUTVIgdG8gaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZS4gKi8NCisJKihwb3J0TFBUTVJfQ1NSKSAmPSB+TFBUTVJfQ1NSX1RFTjsNCisJdWxEdW1teSA9ICoocG9ydExQVE1SX0NTUik7ICh2b2lkKXVsRHVtbXk7DQorCSoocG9ydExQVE1SX0NTUikgfD0gKExQVE1SX0NTUl9UQ0YgfCBMUFRNUl9DU1JfVElFKTsNCisJKihwb3J0TFBUTVJfUFNSKSA9ICAoTFBUTVJfUFNSX1BSRVNDQUxFX0RJVl8yIHwgTFBUTVJfUFNSX1BDU19FUkNMSzMySyk7DQorCSoocG9ydExQVE1SX0NNUikgPSAoMzI3NjgvMTAyNCkvMiAtIDE7DQorCSoocG9ydE5WSUNfSVNFUlcpIHw9IE5WSUNfSVNFUldfTFBUTVI7DQorCSoocG9ydExQVE1SX0NTUikgfD0gIExQVE1SX0NTUl9URU47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIExQVE1SIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMgYXQgdGhlIHJlcXVpcmVkDQorICogZnJlcXVlbmN5LiAgVXNlIHRoZSBpbnRlcm5hbCAxSyBMUE8gY2xvY2sgZm9yIERpYWdzDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0THBvKCB2b2lkICk7DQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0THBvKCB2b2lkICkNCit7DQorCXVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisJdW5zaWduZWQgbG9uZyBzb3B0MTsNCisNCisJLyogRW5hYmxlIGFjY2VzcyB0byBMUFRNUiAqLw0KKwkqKHBvcnRTSU1fU0NHQzUpIHw9IFNJTV9TQ0dDNV9MUFRJTUVSOw0KKw0KKwkqKHBvcnROVklDX0xQVE1SX1BSSSkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKwkvKiBSb3V0ZSB0aGUgTFBPIDFrSFogdG8gRVJDTEszMksgKi8NCisJc29wdDEgPSAqKHBvcnRTSU1fU09QVDEpOw0KKwlzb3B0MSAmPSB+U0lNX1NPUFQxX09TQzMyS1NFTF9NQVNLOw0KKwlzb3B0MSB8PSAgU0lNX1NPUFQxX09TQzMyS1NFTF9MUE87DQorCSoocG9ydFNJTV9TT1BUMSkgPSBzb3B0MTsNCisNCisJLyogQ29uZmlndXJlIExQVE1SIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydExQVE1SX0NTUikgJj0gfkxQVE1SX0NTUl9URU47DQorCXVsRHVtbXkgPSAqKHBvcnRMUFRNUl9DU1IpOyAodm9pZCl1bER1bW15Ow0KKwkqKHBvcnRMUFRNUl9DU1IpIHw9IChMUFRNUl9DU1JfVENGIHwgTFBUTVJfQ1NSX1RJRSk7DQorCSoocG9ydExQVE1SX1BTUikgPSAoTFBUTVJfUFNSX1BCWVAgfCBMUFRNUl9QU1JfUENTX0xQTyk7DQorCSoocG9ydExQVE1SX0NNUikgPSAwOw0KKwkqKHBvcnROVklDX0lTRVJXKSB8PSBOVklDX0lTRVJXX0xQVE1SOw0KKwkqKHBvcnRMUFRNUl9DU1IpIHw9ICBMUFRNUl9DU1JfVEVOOw0KKw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTNfS1hYL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zX0tYWC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTRlNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zX0tYWC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE5MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKw0KKy8qDQorICogQWRkaXRpb25zIHRvIGRlYWwgYmV0dGVyIHdpdGggVElDS19SQVRFX0haIHZhbHVlcyB0aGF0IGFyZSBub3QNCisgKiBleGFjdCBkaXZpc29ycyBvZiAxMDAwIGZvciBwb3J0VElDS19SQVRFX01TIChhYm92ZSkuDQorICoNCisgKiBGb3IgdGhlIEtpbmV0aXMgTFBUTVIgd2l0aCAzMmtIeiBjbG9jaywgaW50ZXJydXB0cyBoYXBwZW4gYXQgMTAyNCBIei4NCisgKiAgIDEwMjQ6MTAwMCBpcyAxMjg6MTI1IGFuZCAxMjggPSAyKio3Lg0KKyAqIFRvIGF2b2lkIG92ZXJmbG93IHdoZW4gY29udmVydGluZyBsYXJnZSB2YWx1ZXMsIHdlIG9ic2VydmUgdGhhdA0KKyAqICAoMSkgMzM1NTQzNzUqMTI4ID0gMzQzNTk2ODAqMTI1DQorICogICgyKSB0aGUgcHJvZHVjZXMgYWJvdmUgYXJlIGxlc3MgdGhhbiAyKiozMg0KKyAqIFhYWGVoczogTmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpcyByYXRpbyBpbiB0aGUgbG9jYWwgY29uZmlnIGZpbGUuDQorICovDQorI2RlZmluZSBwb3J0VElDS1NfVE9fTVNFQyhuKSBcDQorICAgICgobikgPj0gMzQzNTk2ODBVID8gKChuKS8zNDM1OTY4MFUpKjMzNTU0Mzc1VSArICgoKChuKSUzNDM1OTY4MFUpKjEyNSk+PjcpIFwNCisgICAgICAgICAgICAgICAgICAgICAgOiAoKG4pKjEyNSk+PjcpDQorI2RlZmluZSBwb3J0TVNFQ19UT19USUNLUyhuKSBcDQorICAgICgobikgPj0gMzM1NTQzNzVVID8gKChuKS8zMzU1NDM3NVUpKjM0MzU5NjgwVSArICgoKG4pJTMzNTU0Mzc1VSk8PDcpLzEyNSBcDQorICAgICAgICAgICAgICAgICAgICAgIDogKChuKTw8NykvMTI1KQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJdlBvcnRZaWVsZEZyb21JU1IoKQ0KKw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBpZiggeFN3aXRjaFJlcXVpcmVkICkgdlBvcnRZaWVsZEZyb21JU1IoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisNCisvKiANCisgKiBTZXQgYmFzZXByaSB0byBwb3J0TUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdpdGhvdXQgZWZmZWN0aW5nIG90aGVyDQorICogcmVnaXN0ZXJzLiAgcjAgaXMgY2xvYmJlcmVkLg0KKyAqLyANCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0soKQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUJCQkJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCQkJCVwNCisJCSIJbW92IHIwLCAlMAkJCQkJCQkJXG4iCVwNCisJCSIJbXNyIGJhc2VwcmksIHIwCQkJCQkJCVxuIiBcDQorCQk6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpOiJyMCIJXA0KKwkpDQorCQ0KKy8qDQorICogU2V0IGJhc2VwcmkgYmFjayB0byAwIHdpdGhvdXQgZWZmZWN0aXZlIG90aGVyIHJlZ2lzdGVycy4NCisgKiByMCBpcyBjbG9iYmVyZWQuICBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KKyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLg0KKyAqLw0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkJCQlcDQorCV9fYXNtIHZvbGF0aWxlCQkJCQkJCVwNCisJKAkJCQkJCQkJCQlcDQorCQkiCW1vdiByMCwgIzAJCQkJCVxuIglcDQorCQkiCW1zciBiYXNlcHJpLCByMAkJCQlcbiIJXA0KKwkJOjo6InIwIgkJCQkJCQkJXA0KKwkpDQorDQorLyogRkFROiAgU2V0dGluZyBCQVNFUFJJIHRvIDAgaW4gcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgaXMgbm90IGEgDQorYnVnLiAgUGxlYXNlIHNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSANCitkaXNhZ3JlZWluZy4gKi8NCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJMDtwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsodm9pZCl4DQorDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnROT1AoKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTNfTVBVL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNM19NUFUvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDAxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTNfTVBVL3BvcnQuYwpAQCAtMCwwICsxLDEwOTkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwNCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKw0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlcg0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTSBDTTMgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCithbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KK3Rhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQorI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJxdWV1ZS5oIg0KKw0KKyN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGUwMTQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTUFJJMgkJCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlZDIwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1BSSTEJCQkJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqICkgMHhlMDAwZWQxYyApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNfQ1RSTF9TVEFURQkJCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkMjQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfTUVNX0ZBVUxUX0VOQUJMRQkJCQkoIDFVTCA8PCAxNlVMICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoZSBNUFUuICovDQorI2RlZmluZSBwb3J0TVBVX1RZUEUJCQkJCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkOTAgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fQkFTRV9BRERSRVNTCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlZDlDICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0FUVFJJQlVURQkJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqICkgMHhlMDAwZWRBMCApDQorI2RlZmluZSBwb3J0TVBVX0NUUkwJCQkJCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkOTQgKQ0KKyNkZWZpbmUgcG9ydEVYUEVDVEVEX01QVV9UWVBFX1ZBTFVFCQkJCSggOFVMIDw8IDhVTCApIC8qIDggcmVnaW9ucywgdW5pZmllZC4gKi8NCisjZGVmaW5lIHBvcnRNUFVfRU5BQkxFCQkJCQkJCSggMHgwMVVMICkNCisjZGVmaW5lIHBvcnRNUFVfQkFDS0dST1VORF9FTkFCTEUJCQkJKCAxVUwgPDwgMlVMICkNCisjZGVmaW5lIHBvcnRQUklWSUxFR0VEX0VYRUNVVElPTl9TVEFSVF9BRERSRVNTCSggMFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1ZBTElECQkJCQkoIDB4MTBVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9FTkFCTEUJCQkJCSggMHgwMVVMICkNCisjZGVmaW5lIHBvcnRQRVJJUEhFUkFMU19TVEFSVF9BRERSRVNTCQkJMHg0MDAwMDAwMFVMDQorI2RlZmluZSBwb3J0UEVSSVBIRVJBTFNfRU5EX0FERFJFU1MJCQkJMHg1RkZGRkZGRlVMDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGFjY2VzcyBhbmQgbWFuaXB1bGF0ZSB0aGUgU3lzVGljay4gKi8NCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfQ0xLCQkJCQkoIDB4MDAwMDAwMDRVTCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0lOVAkJCQkJKCAweDAwMDAwMDAyVUwgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19FTkFCTEUJCQkJCSggMHgwMDAwMDAwMVVMICkNCisjZGVmaW5lIHBvcnROVklDX1BFTkRTVl9QUkkJCQkJCQkoICggKCB1bnNpZ25lZCBsb25nICkgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApIDw8IDE2VUwgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19QUkkJCQkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMjRVTCApDQorI2RlZmluZSBwb3J0TlZJQ19TVkNfUFJJCQkJCQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAyNFVMICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfWFBTUgkJCQkJCSggMHgwMTAwMDAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9DT05UUk9MX0lGX1VOUFJJVklMRUdFRAkJKCAweDAzICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0NPTlRST0xfSUZfUFJJVklMRUdFRAkJKCAweDAyICkNCisNCisvKiBPZmZzZXRzIGluIHRoZSBzdGFjayB0byB0aGUgcGFyYW1ldGVycyB3aGVuIGluc2lkZSB0aGUgU1ZDIGhhbmRsZXIuICovDQorI2RlZmluZSBwb3J0T0ZGU0VUX1RPX1BDCQkJCQkJKCA2ICkNCisNCisvKiBTZXQgdGhlIHByaXZpbGVnZSBsZXZlbCB0byB1c2VyIG1vZGUgaWYgeFJ1bm5pbmdQcml2aWxlZ2VkIGlzIGZhbHNlLiAqLw0KKyNkZWZpbmUgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICkgaWYoIHhSdW5uaW5nUHJpdmlsZWdlZCAhPSBwZFRSVUUgKSBfX2FzbSB2b2xhdGlsZSAoICIgbXJzIHIwLCBjb250cm9sIFxuIG9yciByMCwgIzEgXG4gbXNyIGNvbnRyb2wsIHIwIiA6OjoicjAiICkNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cyBpbiB0aGUgY3JpdGljYWwgbmVzdGluZw0KK3ZhcmlhYmxlLiAgTm90ZSB0aGlzIGlzIG5vdCBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYXMgY29udGV4dA0KK3N3aXRjaGVzIGNhbiBvbmx5IG9jY3VyIHdoZW4gdXhDcml0aWNhbE5lc3RpbmcgaXMgemVyby4gKi8NCitzdGF0aWMgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IDB4YWFhYWFhYWE7DQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIENvbmZpZ3VyZSBhIG51bWJlciBvZiBzdGFuZGFyZCBNUFUgcmVnaW9ucyB0aGF0IGFyZSB1c2VkIGJ5IGFsbCB0YXNrcy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cE1QVSggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBSZXR1cm4gdGhlIHNtYWxsZXN0IE1QVSByZWdpb24gc2l6ZSB0aGF0IGEgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIHdpbGwgZml0DQorICogaW50by4gIFRoZSByZWdpb24gc2l6ZSBpcyByZXR1cm5lZCBhcyB0aGUgdmFsdWUgdGhhdCBzaG91bGQgYmUgcHJvZ3JhbW1lZA0KKyAqIGludG8gdGhlIHJlZ2lvbiBhdHRyaWJ1dGUgcmVnaXN0ZXIgZm9yIHRoYXQgcmVnaW9uLg0KKyAqLw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBydkdldE1QVVJlZ2lvblNpemVTZXR0aW5nKCB1bnNpZ25lZCBsb25nIHVsQWN0dWFsU2l6ZUluQnl0ZXMgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogQ2hlY2tzIHRvIHNlZSBpZiBiZWluZyBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBvZiBhbiB1bnByaXZpbGVnZWQgdGFzaywgYW5kDQorICogaWYgc28gcmFpc2VzIHRoZSBwcml2aWxlZ2UgbGV2ZWwgYW5kIHJldHVybnMgZmFsc2UgLSBvdGhlcndpc2UgZG9lcyBub3RoaW5nDQorICogb3RoZXIgdGhhbiByZXR1cm4gdHJ1ZS4NCisgKi8NCitzdGF0aWMgcG9ydEJBU0VfVFlQRSBwcnZSYWlzZVByaXZpbGVnZSggdm9pZCApIF9fYXR0cmlidXRlX18oKCBuYWtlZCApKTsNCisNCisvKg0KKyAqIFN0YW5kYXJkIEZyZWVSVE9TIGV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSkgUFJJVklMRUdFRF9GVU5DVElPTjsNCit2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKSAgX19hdHRyaWJ1dGVfXyAoKG9wdGltaXplKCIzIikpKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3ZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKCBuYWtlZCApKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogU3RhcnRzIHRoZSBzY2hlZHVsZXIgYnkgcmVzdG9yaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRvIHJ1bi4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZSZXN0b3JlQ29udGV4dE9mRmlyc3RUYXNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoIG5ha2VkICkpIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBDIHBvcnRpb24gb2YgdGhlIFNWQyBoYW5kbGVyLiAgVGhlIFNWQyBoYW5kbGVyIGlzIHNwbGl0IGJldHdlZW4gYW4gYXNtIGVudHJ5DQorICogYW5kIGEgQyB3cmFwcGVyIGZvciBzaW1wbGljaXR5IG9mIGNvZGluZyBhbmQgbWFpbnRlbmFuY2UuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U1ZDSGFuZGxlciggdW5zaWduZWQgbG9uZyAqcHVsUmVnaXN0ZXJzICkgX19hdHRyaWJ1dGVfXygoIG5vaW5saW5lICkpIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBQcm90b3R5cGVzIGZvciBhbGwgdGhlIE1QVSB3cmFwcGVycy4NCisgKi8NCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tHZW5lcmljQ3JlYXRlKCBwZFRBU0tfQ09ERSBwdlRhc2tDb2RlLCBjb25zdCBzaWduZWQgY2hhciAqIGNvbnN0IHBjTmFtZSwgdW5zaWduZWQgc2hvcnQgdXNTdGFja0RlcHRoLCB2b2lkICpwdlBhcmFtZXRlcnMsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQcmlvcml0eSwgeFRhc2tIYW5kbGUgKnB4Q3JlYXRlZFRhc2ssIHBvcnRTVEFDS19UWVBFICpwdXhTdGFja0J1ZmZlciwgY29uc3QgeE1lbW9yeVJlZ2lvbiAqIGNvbnN0IHhSZWdpb25zICk7DQordm9pZCBNUFVfdlRhc2tBbGxvY2F0ZU1QVVJlZ2lvbnMoIHhUYXNrSGFuZGxlIHhUYXNrLCBjb25zdCB4TWVtb3J5UmVnaW9uICogY29uc3QgeFJlZ2lvbnMgKTsNCit2b2lkIE1QVV92VGFza0RlbGV0ZSggeFRhc2tIYW5kbGUgcHhUYXNrVG9EZWxldGUgKTsNCit2b2lkIE1QVV92VGFza0RlbGF5VW50aWwoIHBvcnRUaWNrVHlwZSAqIGNvbnN0IHB4UHJldmlvdXNXYWtlVGltZSwgcG9ydFRpY2tUeXBlIHhUaW1lSW5jcmVtZW50ICk7DQordm9pZCBNUFVfdlRhc2tEZWxheSggcG9ydFRpY2tUeXBlIHhUaWNrc1RvRGVsYXkgKTsNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIE1QVV91eFRhc2tQcmlvcml0eUdldCggeFRhc2tIYW5kbGUgcHhUYXNrICk7DQordm9pZCBNUFVfdlRhc2tQcmlvcml0eVNldCggeFRhc2tIYW5kbGUgcHhUYXNrLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4TmV3UHJpb3JpdHkgKTsNCit2b2lkIE1QVV92VGFza1N1c3BlbmQoIHhUYXNrSGFuZGxlIHB4VGFza1RvU3VzcGVuZCApOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIE1QVV94VGFza0lzVGFza1N1c3BlbmRlZCggeFRhc2tIYW5kbGUgeFRhc2sgKTsNCit2b2lkIE1QVV92VGFza1Jlc3VtZSggeFRhc2tIYW5kbGUgcHhUYXNrVG9SZXN1bWUgKTsNCit2b2lkIE1QVV92VGFza1N1c3BlbmRBbGwoIHZvaWQgKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tSZXN1bWVBbGwoIHZvaWQgKTsNCitwb3J0VGlja1R5cGUgTVBVX3hUYXNrR2V0VGlja0NvdW50KCB2b2lkICk7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcyggdm9pZCApOw0KK3ZvaWQgTVBVX3ZUYXNrTGlzdCggc2lnbmVkIGNoYXIgKnBjV3JpdGVCdWZmZXIgKTsNCit2b2lkIE1QVV92VGFza0dldFJ1blRpbWVTdGF0cyggc2lnbmVkIGNoYXIgKnBjV3JpdGVCdWZmZXIgKTsNCit2b2lkIE1QVV92VGFza1NldEFwcGxpY2F0aW9uVGFza1RhZyggeFRhc2tIYW5kbGUgeFRhc2ssIHBkVEFTS19IT09LX0NPREUgcHhUYWdWYWx1ZSApOw0KK3BkVEFTS19IT09LX0NPREUgTVBVX3hUYXNrR2V0QXBwbGljYXRpb25UYXNrVGFnKCB4VGFza0hhbmRsZSB4VGFzayApOw0KK3BvcnRCQVNFX1RZUEUgTVBVX3hUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2soIHhUYXNrSGFuZGxlIHhUYXNrLCB2b2lkICpwdlBhcmFtZXRlciApOw0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgTVBVX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayggeFRhc2tIYW5kbGUgeFRhc2sgKTsNCit4VGFza0hhbmRsZSBNUFVfeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSggdm9pZCApOw0KK3BvcnRCQVNFX1RZUEUgTVBVX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUoIHZvaWQgKTsNCit4UXVldWVIYW5kbGUgTVBVX3hRdWV1ZUdlbmVyaWNDcmVhdGUoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhRdWV1ZUxlbmd0aCwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEl0ZW1TaXplLCB1bnNpZ25lZCBjaGFyIHVjUXVldWVUeXBlICk7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgTVBVX3hRdWV1ZUdlbmVyaWNTZW5kKCB4UXVldWVIYW5kbGUgeFF1ZXVlLCBjb25zdCB2b2lkICogY29uc3QgcHZJdGVtVG9RdWV1ZSwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwgcG9ydEJBU0VfVFlQRSB4Q29weVBvc2l0aW9uICk7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZyggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlR2VuZXJpY1JlY2VpdmUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeEp1c3RQZWVraW5nICk7DQoreFF1ZXVlSGFuZGxlIE1QVV94UXVldWVDcmVhdGVNdXRleCggdm9pZCApOw0KK3hRdWV1ZUhhbmRsZSBNUFVfeFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDb3VudFZhbHVlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5pdGlhbENvdW50ICk7DQorcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlKCB4UXVldWVIYW5kbGUgeE11dGV4LCBwb3J0VGlja1R5cGUgeEJsb2NrVGltZSApOw0KK3BvcnRCQVNFX1RZUEUgTVBVX3hRdWV1ZUdpdmVNdXRleFJlY3Vyc2l2ZSggeFF1ZXVlSGFuZGxlIHhNdXRleCApOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIE1QVV94UXVldWVBbHRHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhDb3B5UG9zaXRpb24gKTsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeEp1c3RQZWVraW5nICk7DQordm9pZCBNUFVfdlF1ZXVlQWRkVG9SZWdpc3RyeSggeFF1ZXVlSGFuZGxlIHhRdWV1ZSwgc2lnbmVkIGNoYXIgKnBjTmFtZSApOw0KK3ZvaWQgTVBVX3ZRdWV1ZURlbGV0ZSggeFF1ZXVlSGFuZGxlIHhRdWV1ZSApOw0KK3ZvaWQgKk1QVV9wdlBvcnRNYWxsb2MoIHNpemVfdCB4U2l6ZSApOw0KK3ZvaWQgTVBVX3ZQb3J0RnJlZSggdm9pZCAqcHYgKTsNCit2b2lkIE1QVV92UG9ydEluaXRpYWxpc2VCbG9ja3MoIHZvaWQgKTsNCitzaXplX3QgTVBVX3hQb3J0R2V0RnJlZUhlYXBTaXplKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzLCBwb3J0QkFTRV9UWVBFIHhSdW5Qcml2aWxlZ2VkICkNCit7DQorCS8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCisJaW50ZXJydXB0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsgLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0IG9mIGludGVycnVwdHMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9YUFNSOwkvKiB4UFNSICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsJLyogUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAwOwkvKiBMUiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gNTsJLyogUjEyLCBSMywgUjIgYW5kIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrIC09IDk7CS8qIFIxMSwgUjEwLCBSOSwgUjgsIFI3LCBSNiwgUjUgYW5kIFI0LiAqLw0KKw0KKwlpZiggeFJ1blByaXZpbGVnZWQgPT0gcGRUUlVFICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0NPTlRST0xfSUZfUFJJVklMRUdFRDsNCisJfQ0KKwllbHNlDQorCXsNCisJCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9DT05UUk9MX0lGX1VOUFJJVklMRUdFRDsNCisJfQ0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApDQorew0KKwkvKiBBc3N1bWVzIHBzcCB3YXMgaW4gdXNlLiAqLw0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkjaWZuZGVmIFVTRV9QUk9DRVNTX1NUQUNLCS8qIENvZGUgc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBpZiBhIG1haW4oKSBpcyB1c2luZyB0aGUgcHJvY2VzcyBzdGFjay4gKi8NCisJCQkiCXRzdCBsciwgIzQJCQkJCQlcbiINCisJCQkiCWl0ZSBlcQkJCQkJCQlcbiINCisJCQkiCW1yc2VxIHIwLCBtc3AJCQkJCVxuIg0KKwkJCSIJbXJzbmUgcjAsIHBzcAkJCQkJXG4iDQorCQkjZWxzZQ0KKwkJCSIJbXJzIHIwLCBwc3AJCQkJCQlcbiINCisJCSNlbmRpZg0KKwkJCSIJYiAlMAkJCQkJCQlcbiINCisJCQk6OiJpIihwcnZTVkNIYW5kbGVyKToicjAiDQorCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNWQ0hhbmRsZXIoCXVuc2lnbmVkIGxvbmcgKnB1bFBhcmFtICkNCit7DQordW5zaWduZWQgY2hhciB1Y1NWQ051bWJlcjsNCisNCisJLyogVGhlIHN0YWNrIGNvbnRhaW5zOiByMCwgcjEsIHIyLCByMywgcjEyLCByMTQsIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQNCisJeFBTUi4gIFRoZSBmaXJzdCBhcmd1bWVudCAocjApIGlzIHB1bFBhcmFtWyAwIF0uICovDQorCXVjU1ZDTnVtYmVyID0gKCAoIHVuc2lnbmVkIGNoYXIgKiApIHB1bFBhcmFtWyBwb3J0T0ZGU0VUX1RPX1BDIF0gKVsgLTIgXTsNCisJc3dpdGNoKCB1Y1NWQ051bWJlciApDQorCXsNCisJCWNhc2UgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVIJOgkqKHBvcnROVklDX1NZU1BSSTEpIHw9IHBvcnROVklDX1NWQ19QUkk7DQorCQkJCQkJCQkJCQlwcnZSZXN0b3JlQ29udGV4dE9mRmlyc3RUYXNrKCk7DQorCQkJCQkJCQkJCQlicmVhazsNCisNCisJCWNhc2UgcG9ydFNWQ19ZSUVMRAkJCQk6CSoocG9ydE5WSUNfSU5UX0NUUkwpID0gcG9ydE5WSUNfUEVORFNWU0VUOw0KKwkJCQkJCQkJCQkJYnJlYWs7DQorDQorCQljYXNlIHBvcnRTVkNfUkFJU0VfUFJJVklMRUdFCToJX19hc20gdm9sYXRpbGUNCisJCQkJCQkJCQkJCSgNCisJCQkJCQkJCQkJCQkiCW1ycyByMSwgY29udHJvbAkJXG4iIC8qIE9idGFpbiBjdXJyZW50IGNvbnRyb2wgdmFsdWUuICovDQorCQkJCQkJCQkJCQkJIgliaWMgcjEsICMxCQkJXG4iIC8qIFNldCBwcml2aWxlZ2UgYml0LiAqLw0KKwkJCQkJCQkJCQkJCSIJbXNyIGNvbnRyb2wsIHIxCQlcbiIgLyogV3JpdGUgYmFjayBuZXcgY29udHJvbCB2YWx1ZS4gKi8NCisJCQkJCQkJCQkJCQk6OjoicjEiDQorCQkJCQkJCQkJCQkpOw0KKwkJCQkJCQkJCQkJYnJlYWs7DQorDQorCQlkZWZhdWx0CQkJCQkJCToJLyogVW5rbm93biBTVkMgY2FsbC4gKi8NCisJCQkJCQkJCQkJCWJyZWFrOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlJlc3RvcmVDb250ZXh0T2ZGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIglsZHIgcjAsID0weEUwMDBFRDA4CQkJCVxuIiAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorCQkiCWxkciByMCwgW3IwXQkJCQkJXG4iDQorCQkiCWxkciByMCwgW3IwXQkJCQkJXG4iDQorCQkiCW1zciBtc3AsIHIwCQkJCQkJXG4iIC8qIFNldCB0aGUgbXNwIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCisJCSIJbGRyCXIzLCBweEN1cnJlbnRUQ0JDb25zdDIJCVxuIiAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KKwkJIglsZHIgcjEsIFtyM10JCQkJCVxuIg0KKwkJIglsZHIgcjAsIFtyMV0JCQkJCVxuIiAvKiBUaGUgZmlyc3QgaXRlbSBpbiB0aGUgVENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCisJCSIJYWRkIHIxLCByMSwgIzQJCQkJCVxuIiAvKiBNb3ZlIG9udG8gdGhlIHNlY29uZCBpdGVtIGluIHRoZSBUQ0IuLi4gKi8NCisJCSIJbGRyIHIyLCA9MHhlMDAwZWQ5YwkJCQlcbiIgLyogUmVnaW9uIEJhc2UgQWRkcmVzcyByZWdpc3Rlci4gKi8NCisJCSIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQlcbiIgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gKi8NCisJCSIJc3RtaWEgcjIhLCB7cjQtcjExfQkJCQlcbiIgLyogV3JpdGUgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMuICovDQorCQkiCWxkbWlhIHIwISwge3IzLCByNC1yMTF9CQkJXG4iIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeS4gKi8NCisJCSIJbXNyIGNvbnRyb2wsIHIzCQkJCQlcbiINCisJCSIJbXNyIHBzcCwgcjAJCQkJCQlcbiIgLyogUmVzdG9yZSB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLw0KKwkJIgltb3YgcjAsICMwCQkJCQkJXG4iDQorCQkiCW1zcgliYXNlcHJpLCByMAkJCQkJXG4iDQorCQkiCWxkciByMTQsID0weGZmZmZmZmZkCQkJXG4iIC8qIExvYWQgZXhlYyByZXR1cm4gY29kZS4gKi8NCisJCSIJYnggcjE0CQkJCQkJCVxuIg0KKwkJIgkJCQkJCQkJCVxuIg0KKwkJIgkuYWxpZ24gMgkJCQkJCVxuIg0KKwkJInB4Q3VycmVudFRDQkNvbnN0MjogLndvcmQgcHhDdXJyZW50VENCCVxuIg0KKwkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IG5vdCBiZSBzZXQgdG8gMC4gIFNlZQ0KKwlodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQorCWNvbmZpZ0FTU0VSVCggKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApOw0KKw0KKwkvKiBNYWtlIFBlbmRTViBhbmQgU3lzVGljayB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUga2VybmVsLiAqLw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1BFTkRTVl9QUkk7DQorCSoocG9ydE5WSUNfU1lTUFJJMikgfD0gcG9ydE5WSUNfU1lTVElDS19QUkk7DQorDQorCS8qIENvbmZpZ3VyZSB0aGUgcmVnaW9ucyBpbiB0aGUgTVBVIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgdGFza3MuICovDQorCXBydlNldHVwTVBVKCk7DQorDQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogSW5pdGlhbGlzZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCByZWFkeSBmb3IgdGhlIGZpcnN0IHRhc2suICovDQorCXV4Q3JpdGljYWxOZXN0aW5nID0gMDsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCV9fYXNtIHZvbGF0aWxlKCAiCXN2YyAlMAkJCVxuIg0KKwkJCQkJOjogImkiIChwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUikgKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQ00zIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KKw0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJdXhDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4UG9ydFBlbmRTVkhhbmRsZXIoIHZvaWQgKQ0KK3sNCisJLyogVGhpcyBpcyBhIG5ha2VkIGZ1bmN0aW9uLiAqLw0KKw0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkiCW1ycyByMCwgcHNwCQkJCQkJCVxuIg0KKwkJIgkJCQkJCQkJCQlcbiINCisJCSIJbGRyCXIzLCBweEN1cnJlbnRUQ0JDb25zdAkJCVxuIiAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisJCSIJbGRyCXIyLCBbcjNdCQkJCQkJXG4iDQorCQkiCQkJCQkJCQkJCVxuIg0KKwkJIgltcnMgcjEsIGNvbnRyb2wJCQkJCQlcbiINCisJCSIJc3RtZGIgcjAhLCB7cjEsIHI0LXIxMX0JCQkJXG4iIC8qIFNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCQkiCXN0ciByMCwgW3IyXQkJCQkJCVxuIiAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKwkJIgkJCQkJCQkJCQlcbiINCisJCSIJc3RtZGIgc3AhLCB7cjMsIHIxNH0JCQkJXG4iDQorCQkiCW1vdiByMCwgJTAJCQkJCQkJXG4iDQorCQkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkJIglibCB2VGFza1N3aXRjaENvbnRleHQJCQkJXG4iDQorCQkiCW1vdiByMCwgIzAJCQkJCQkJXG4iDQorCQkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkJIglsZG1pYSBzcCEsIHtyMywgcjE0fQkJCQlcbiINCisJCSIJCQkJCQkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQuICovDQorCQkiCWxkciByMSwgW3IzXQkJCQkJCVxuIg0KKwkJIglsZHIgcjAsIFtyMV0JCQkJCQlcbiIgLyogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCQkiCWFkZCByMSwgcjEsICM0CQkJCQkJXG4iIC8qIE1vdmUgb250byB0aGUgc2Vjb25kIGl0ZW0gaW4gdGhlIFRDQi4uLiAqLw0KKwkJIglsZHIgcjIsID0weGUwMDBlZDljCQkJCQlcbiIgLyogUmVnaW9uIEJhc2UgQWRkcmVzcyByZWdpc3Rlci4gKi8NCisJCSIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQkJXG4iIC8qIFJlYWQgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMuICovDQorCQkiCXN0bWlhIHIyISwge3I0LXIxMX0JCQkJCVxuIiAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gKi8NCisJCSIJbGRtaWEgcjAhLCB7cjMsIHI0LXIxMX0JCQkJXG4iIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeS4gKi8NCisJCSIJbXNyIGNvbnRyb2wsIHIzCQkJCQkJXG4iDQorCQkiCQkJCQkJCQkJCVxuIg0KKwkJIgltc3IgcHNwLCByMAkJCQkJCQlcbiINCisJCSIJYnggcjE0CQkJCQkJCQlcbiINCisJCSIJCQkJCQkJCQkJXG4iDQorCQkiCS5hbGlnbiAyCQkJCQkJCVxuIg0KKwkJInB4Q3VycmVudFRDQkNvbnN0OiAud29yZCBweEN1cnJlbnRUQ0IJXG4iDQorCQk6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpDQorCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorCSNlbmRpZg0KKw0KKwl1bER1bW15ID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgc3lzdGljayB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZA0KKyAqIGZyZXF1ZW5jeS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBNUFUoIHZvaWQgKQ0KK3sNCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX2VuZF9fW107DQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19GTEFTSF9zZWdtZW50X3N0YXJ0X19bXTsNCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX0ZMQVNIX3NlZ21lbnRfZW5kX19bXTsNCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3ByaXZpbGVnZWRfZGF0YV9zdGFydF9fW107DQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wcml2aWxlZ2VkX2RhdGFfZW5kX19bXTsNCisNCisJLyogQ2hlY2sgdGhlIGV4cGVjdGVkIE1QVSBpcyBwcmVzZW50LiAqLw0KKwlpZiggKnBvcnRNUFVfVFlQRSA9PSBwb3J0RVhQRUNURURfTVBVX1RZUEVfVkFMVUUgKQ0KKwl7DQorCQkvKiBGaXJzdCBzZXR1cCB0aGUgZW50aXJlIGZsYXNoIGZvciB1bnByaXZpbGVnZWQgcmVhZCBvbmx5IGFjY2Vzcy4gKi8NCisgICAgICAgICpwb3J0TVBVX1JFR0lPTl9CQVNFX0FERFJFU1MgPQkoICggdW5zaWduZWQgbG9uZyApIF9fRkxBU0hfc2VnbWVudF9zdGFydF9fICkgfCAvKiBCYXNlIGFkZHJlc3MuICovDQorCQkJCQkJCQkJCSggcG9ydE1QVV9SRUdJT05fVkFMSUQgKSB8DQorCQkJCQkJCQkJCSggcG9ydFVOUFJJVklMRUdFRF9GTEFTSF9SRUdJT04gKTsNCisNCisJCSpwb3J0TVBVX1JFR0lPTl9BVFRSSUJVVEUgPQkJKCBwb3J0TVBVX1JFR0lPTl9SRUFEX09OTFkgKSB8DQorCQkJCQkJCQkJCSggcG9ydE1QVV9SRUdJT05fQ0FDSEVBQkxFX0JVRkZFUkFCTEUgKSB8DQorCQkJCQkJCQkJCSggcHJ2R2V0TVBVUmVnaW9uU2l6ZVNldHRpbmcoICggdW5zaWduZWQgbG9uZyApIF9fRkxBU0hfc2VnbWVudF9lbmRfXyAtICggdW5zaWduZWQgbG9uZyApIF9fRkxBU0hfc2VnbWVudF9zdGFydF9fICkgKSB8DQorCQkJCQkJCQkJCSggcG9ydE1QVV9SRUdJT05fRU5BQkxFICk7DQorDQorCQkvKiBTZXR1cCB0aGUgZmlyc3QgMTZLIGZvciBwcml2aWxlZ2VkIG9ubHkgYWNjZXNzIChldmVuIHRob3VnaCBsZXNzDQorCQl0aGFuIDEwSyBpcyBhY3R1YWxseSBiZWluZyB1c2VkKS4gIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjb2RlIGlzDQorCQlwbGFjZWQuICovDQorICAgICAgICAqcG9ydE1QVV9SRUdJT05fQkFTRV9BRERSRVNTID0JKCAoIHVuc2lnbmVkIGxvbmcgKSBfX0ZMQVNIX3NlZ21lbnRfc3RhcnRfXyApIHwgLyogQmFzZSBhZGRyZXNzLiAqLw0KKwkJCQkJCQkJCQkoIHBvcnRNUFVfUkVHSU9OX1ZBTElEICkgfA0KKwkJCQkJCQkJCQkoIHBvcnRQUklWSUxFR0VEX0ZMQVNIX1JFR0lPTiApOw0KKw0KKwkJKnBvcnRNUFVfUkVHSU9OX0FUVFJJQlVURSA9CQkoIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9PTkxZICkgfA0KKwkJCQkJCQkJCQkoIHBvcnRNUFVfUkVHSU9OX0NBQ0hFQUJMRV9CVUZGRVJBQkxFICkgfA0KKwkJCQkJCQkJCQkoIHBydkdldE1QVVJlZ2lvblNpemVTZXR0aW5nKCAoIHVuc2lnbmVkIGxvbmcgKSBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX2VuZF9fIC0gKCB1bnNpZ25lZCBsb25nICkgX19GTEFTSF9zZWdtZW50X3N0YXJ0X18gKSApIHwNCisJCQkJCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9FTkFCTEUgKTsNCisNCisJCS8qIFNldHVwIHRoZSBwcml2aWxlZ2VkIGRhdGEgUkFNIHJlZ2lvbi4gIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBkYXRhDQorCQlpcyBwbGFjZWQuICovDQorCQkqcG9ydE1QVV9SRUdJT05fQkFTRV9BRERSRVNTID0JKCAoIHVuc2lnbmVkIGxvbmcgKSBfX3ByaXZpbGVnZWRfZGF0YV9zdGFydF9fICkgfCAvKiBCYXNlIGFkZHJlc3MuICovDQorCQkJCQkJCQkJCSggcG9ydE1QVV9SRUdJT05fVkFMSUQgKSB8DQorCQkJCQkJCQkJCSggcG9ydFBSSVZJTEVHRURfUkFNX1JFR0lPTiApOw0KKw0KKwkJKnBvcnRNUFVfUkVHSU9OX0FUVFJJQlVURSA9CQkoIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURSApIHwNCisJCQkJCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9DQUNIRUFCTEVfQlVGRkVSQUJMRSApIHwNCisJCQkJCQkJCQkJcHJ2R2V0TVBVUmVnaW9uU2l6ZVNldHRpbmcoICggdW5zaWduZWQgbG9uZyApIF9fcHJpdmlsZWdlZF9kYXRhX2VuZF9fIC0gKCB1bnNpZ25lZCBsb25nICkgX19wcml2aWxlZ2VkX2RhdGFfc3RhcnRfXyApIHwNCisJCQkJCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9FTkFCTEUgKTsNCisNCisJCS8qIEJ5IGRlZmF1bHQgYWxsb3cgZXZlcnl0aGluZyB0byBhY2Nlc3MgdGhlIGdlbmVyYWwgcGVyaXBoZXJhbHMuICBUaGUNCisJCXN5c3RlbSBwZXJpcGhlcmFscyBhbmQgcmVnaXN0ZXJzIGFyZSBwcm90ZWN0ZWQuICovDQorCQkqcG9ydE1QVV9SRUdJT05fQkFTRV9BRERSRVNTID0JKCBwb3J0UEVSSVBIRVJBTFNfU1RBUlRfQUREUkVTUyApIHwNCisJCQkJCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9WQUxJRCApIHwNCisJCQkJCQkJCQkJKCBwb3J0R0VORVJBTF9QRVJJUEhFUkFMU19SRUdJT04gKTsNCisNCisJCSpwb3J0TVBVX1JFR0lPTl9BVFRSSUJVVEUgPQkJKCBwb3J0TVBVX1JFR0lPTl9SRUFEX1dSSVRFIHwgcG9ydE1QVV9SRUdJT05fRVhFQ1VURV9ORVZFUiApIHwNCisJCQkJCQkJCQkJKCBwcnZHZXRNUFVSZWdpb25TaXplU2V0dGluZyggcG9ydFBFUklQSEVSQUxTX0VORF9BRERSRVNTIC0gcG9ydFBFUklQSEVSQUxTX1NUQVJUX0FERFJFU1MgKSApIHwNCisJCQkJCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9FTkFCTEUgKTsNCisNCisJCS8qIEVuYWJsZSB0aGUgbWVtb3J5IGZhdWx0IGV4Y2VwdGlvbi4gKi8NCisJCSpwb3J0TlZJQ19TWVNfQ1RSTF9TVEFURSB8PSBwb3J0TlZJQ19NRU1fRkFVTFRfRU5BQkxFOw0KKw0KKwkJLyogRW5hYmxlIHRoZSBNUFUgd2l0aCB0aGUgYmFja2dyb3VuZCByZWdpb24gY29uZmlndXJlZC4gKi8NCisJCSpwb3J0TVBVX0NUUkwgfD0gKCBwb3J0TVBVX0VOQUJMRSB8IHBvcnRNUFVfQkFDS0dST1VORF9FTkFCTEUgKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcnZHZXRNUFVSZWdpb25TaXplU2V0dGluZyggdW5zaWduZWQgbG9uZyB1bEFjdHVhbFNpemVJbkJ5dGVzICkNCit7DQordW5zaWduZWQgbG9uZyB1bFJlZ2lvblNpemUsIHVsUmV0dXJuVmFsdWUgPSA0Ow0KKw0KKwkvKiAzMiBpcyB0aGUgc21hbGxlc3QgcmVnaW9uIHNpemUsIDMxIGlzIHRoZSBsYXJnZXN0IHZhbGlkIHZhbHVlIGZvcg0KKwl1bFJldHVyblZhbHVlLiAqLw0KKwlmb3IoIHVsUmVnaW9uU2l6ZSA9IDMyVUw7IHVsUmV0dXJuVmFsdWUgPCAzMVVMOyAoIHVsUmVnaW9uU2l6ZSA8PD0gMVVMICkgKQ0KKwl7DQorCQlpZiggdWxBY3R1YWxTaXplSW5CeXRlcyA8PSB1bFJlZ2lvblNpemUgKQ0KKwkJew0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXVsUmV0dXJuVmFsdWUrKzsNCisJCX0NCisJfQ0KKw0KKwkvKiBTaGlmdCB0aGUgY29kZSBieSBvbmUgYmVmb3JlIHJldHVybmluZyBzbyBpdCBjYW4gYmUgd3JpdHRlbiBkaXJlY3RseQ0KKwlpbnRvIHRoZSB0aGUgY29ycmVjdCBiaXQgcG9zaXRpb24gb2YgdGhlIGF0dHJpYnV0ZSByZWdpc3Rlci4gKi8NCisJcmV0dXJuICggdWxSZXR1cm5WYWx1ZSA8PCAxVUwgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHBvcnRCQVNFX1RZUEUgcHJ2UmFpc2VQcml2aWxlZ2UoIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIgltcnMgcjAsIGNvbnRyb2wJCQkJCQlcbiINCisJCSIJdHN0IHIwLCAjMQkJCQkJCQlcbiIgLyogSXMgdGhlIHRhc2sgcnVubmluZyBwcml2aWxlZ2VkPyAqLw0KKwkJIglpdHRlIG5lCQkJCQkJCQlcbiINCisJCSIJbW92bmUgcjAsICMwCQkJCQkJXG4iIC8qIENPTlRST0xbMF0hPTAsIHJldHVybiBmYWxzZS4gKi8NCisJCSIJc3ZjbmUgJTAJCQkJCQkJXG4iIC8qIFN3aXRjaCB0byBwcml2aWxlZ2VkLiAqLw0KKwkJIgltb3ZlcSByMCwgIzEJCQkJCQlcbiIgLyogQ09OVFJPTFswXT09MCwgcmV0dXJuIHRydWUuICovDQorCQkiCWJ4IGxyCQkJCQkJCQlcbiINCisJCTo6ICJpIiAocG9ydFNWQ19SQUlTRV9QUklWSUxFR0UpIDogInIwIg0KKwkpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFN0b3JlVGFza01QVVNldHRpbmdzKCB4TVBVX1NFVFRJTkdTICp4TVBVU2V0dGluZ3MsIGNvbnN0IHN0cnVjdCB4TUVNT1JZX1JFR0lPTiAqIGNvbnN0IHhSZWdpb25zLCBwb3J0U1RBQ0tfVFlQRSAqcHhCb3R0b21PZlN0YWNrLCB1bnNpZ25lZCBzaG9ydCB1c1N0YWNrRGVwdGggKQ0KK3sNCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX1NSQU1fc2VnbWVudF9zdGFydF9fW107DQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19TUkFNX3NlZ21lbnRfZW5kX19bXTsNCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3ByaXZpbGVnZWRfZGF0YV9zdGFydF9fW107DQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wcml2aWxlZ2VkX2RhdGFfZW5kX19bXTsNCitsb25nIGxJbmRleDsNCit1bnNpZ25lZCBsb25nIHVsOw0KKw0KKwlpZiggeFJlZ2lvbnMgPT0gTlVMTCApDQorCXsNCisJCS8qIE5vIE1QVSByZWdpb25zIGFyZSBzcGVjaWZpZWQgc28gYWxsb3cgYWNjZXNzIHRvIGFsbCBSQU0uICovDQorICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25bIDAgXS51bFJlZ2lvbkJhc2VBZGRyZXNzID0NCisJCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSBfX1NSQU1fc2VnbWVudF9zdGFydF9fICkgfCAvKiBCYXNlIGFkZHJlc3MuICovDQorCQkJCSggcG9ydE1QVV9SRUdJT05fVkFMSUQgKSB8DQorCQkJCSggcG9ydFNUQUNLX1JFR0lPTiApOw0KKw0KKwkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyAwIF0udWxSZWdpb25BdHRyaWJ1dGUgPQ0KKwkJCQkoIHBvcnRNUFVfUkVHSU9OX1JFQURfV1JJVEUgKSB8DQorCQkJCSggcG9ydE1QVV9SRUdJT05fQ0FDSEVBQkxFX0JVRkZFUkFCTEUgKSB8DQorCQkJCSggcHJ2R2V0TVBVUmVnaW9uU2l6ZVNldHRpbmcoICggdW5zaWduZWQgbG9uZyApIF9fU1JBTV9zZWdtZW50X2VuZF9fIC0gKCB1bnNpZ25lZCBsb25nICkgX19TUkFNX3NlZ21lbnRfc3RhcnRfXyApICkgfA0KKwkJCQkoIHBvcnRNUFVfUkVHSU9OX0VOQUJMRSApOw0KKw0KKwkJLyogUmUtaW5zdGF0ZSB0aGUgcHJpdmlsZWdlZCBvbmx5IFJBTSByZWdpb24gYXMgeFJlZ2lvblsgMCBdIHdpbGwgaGF2ZQ0KKwkJanVzdCByZW1vdmVkIHRoZSBwcml2aWxlZ2VkIG9ubHkgcGFyYW1ldGVycy4gKi8NCisJCXhNUFVTZXR0aW5ncy0+eFJlZ2lvblsgMSBdLnVsUmVnaW9uQmFzZUFkZHJlc3MgPQ0KKwkJCQkoICggdW5zaWduZWQgbG9uZyApIF9fcHJpdmlsZWdlZF9kYXRhX3N0YXJ0X18gKSB8IC8qIEJhc2UgYWRkcmVzcy4gKi8NCisJCQkJKCBwb3J0TVBVX1JFR0lPTl9WQUxJRCApIHwNCisJCQkJKCBwb3J0U1RBQ0tfUkVHSU9OICsgMSApOw0KKw0KKwkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyAxIF0udWxSZWdpb25BdHRyaWJ1dGUgPQ0KKwkJCQkoIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURSApIHwNCisJCQkJKCBwb3J0TVBVX1JFR0lPTl9DQUNIRUFCTEVfQlVGRkVSQUJMRSApIHwNCisJCQkJcHJ2R2V0TVBVUmVnaW9uU2l6ZVNldHRpbmcoICggdW5zaWduZWQgbG9uZyApIF9fcHJpdmlsZWdlZF9kYXRhX2VuZF9fIC0gKCB1bnNpZ25lZCBsb25nICkgX19wcml2aWxlZ2VkX2RhdGFfc3RhcnRfXyApIHwNCisJCQkJKCBwb3J0TVBVX1JFR0lPTl9FTkFCTEUgKTsNCisNCisJCS8qIEludmFsaWRhdGUgYWxsIG90aGVyIHJlZ2lvbnMuICovDQorCQlmb3IoIHVsID0gMjsgdWwgPD0gcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUzsgdWwrKyApDQorCQl7DQorCQkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyB1bCBdLnVsUmVnaW9uQmFzZUFkZHJlc3MgPSAoIHBvcnRTVEFDS19SRUdJT04gKyB1bCApIHwgcG9ydE1QVV9SRUdJT05fVkFMSUQ7DQorCQkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyB1bCBdLnVsUmVnaW9uQXR0cmlidXRlID0gMFVMOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0YXNrIGlzIGNyZWF0ZWQgLSBpbg0KKwkJd2hpY2ggY2FzZSB0aGUgc3RhY2sgcmVnaW9uIHBhcmFtZXRlcnMgd2lsbCBiZSB2YWxpZC4gIEF0IGFsbCBvdGhlcg0KKwkJdGltZXMgdGhlIHN0YWNrIHBhcmFtZXRlcnMgd2lsbCBub3QgYmUgdmFsaWQgYW5kIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUNCisJCXN0YWNrIHJlZ2lvbiBoYXMgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQuICovDQorCQlpZiggdXNTdGFja0RlcHRoID4gMCApDQorCQl7DQorCQkJLyogRGVmaW5lIHRoZSByZWdpb24gdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHRoZSBzdGFjay4gKi8NCisJCQl4TVBVU2V0dGluZ3MtPnhSZWdpb25bIDAgXS51bFJlZ2lvbkJhc2VBZGRyZXNzID0NCisJCQkJCSggKCB1bnNpZ25lZCBsb25nICkgcHhCb3R0b21PZlN0YWNrICkgfA0KKwkJCQkJKCBwb3J0TVBVX1JFR0lPTl9WQUxJRCApIHwNCisJCQkJCSggcG9ydFNUQUNLX1JFR0lPTiApOyAvKiBSZWdpb24gbnVtYmVyLiAqLw0KKw0KKwkJCXhNUFVTZXR0aW5ncy0+eFJlZ2lvblsgMCBdLnVsUmVnaW9uQXR0cmlidXRlID0NCisJCQkJCSggcG9ydE1QVV9SRUdJT05fUkVBRF9XUklURSApIHwgLyogUmVhZCBhbmQgd3JpdGUuICovDQorCQkJCQkoIHBydkdldE1QVVJlZ2lvblNpemVTZXR0aW5nKCAoIHVuc2lnbmVkIGxvbmcgKSB1c1N0YWNrRGVwdGggKiAoIHVuc2lnbmVkIGxvbmcgKSBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKSApIHwNCisJCQkJCSggcG9ydE1QVV9SRUdJT05fQ0FDSEVBQkxFX0JVRkZFUkFCTEUgKSB8DQorCQkJCQkoIHBvcnRNUFVfUkVHSU9OX0VOQUJMRSApOw0KKwkJfQ0KKw0KKwkJbEluZGV4ID0gMDsNCisNCisJCWZvciggdWwgPSAxOyB1bCA8PSBwb3J0TlVNX0NPTkZJR1VSQUJMRV9SRUdJT05TOyB1bCsrICkNCisJCXsNCisJCQlpZiggKCB4UmVnaW9uc1sgbEluZGV4IF0gKS51bExlbmd0aEluQnl0ZXMgPiAwVUwgKQ0KKwkJCXsNCisJCQkJLyogVHJhbnNsYXRlIHRoZSBnZW5lcmljIHJlZ2lvbiBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbg0KKwkJCQl4UmVnaW9ucyBpbnRvIHRoZSBDTTMgc3BlY2lmaWMgTVBVIHNldHRpbmdzIHRoYXQgYXJlIHRoZW4NCisJCQkJc3RvcmVkIGluIHhNUFVTZXR0aW5ncy4gKi8NCisJCQkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyB1bCBdLnVsUmVnaW9uQmFzZUFkZHJlc3MgPQ0KKwkJCQkJCSggKCB1bnNpZ25lZCBsb25nICkgeFJlZ2lvbnNbIGxJbmRleCBdLnB2QmFzZUFkZHJlc3MgKSB8DQorCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9WQUxJRCApIHwNCisJCQkJCQkoIHBvcnRTVEFDS19SRUdJT04gKyB1bCApOyAvKiBSZWdpb24gbnVtYmVyLiAqLw0KKw0KKwkJCQl4TVBVU2V0dGluZ3MtPnhSZWdpb25bIHVsIF0udWxSZWdpb25BdHRyaWJ1dGUgPQ0KKwkJCQkJCSggcHJ2R2V0TVBVUmVnaW9uU2l6ZVNldHRpbmcoIHhSZWdpb25zWyBsSW5kZXggXS51bExlbmd0aEluQnl0ZXMgKSApIHwNCisJCQkJCQkoIHhSZWdpb25zWyBsSW5kZXggXS51bFBhcmFtZXRlcnMgKSB8DQorCQkJCQkJKCBwb3J0TVBVX1JFR0lPTl9FTkFCTEUgKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogSW52YWxpZGF0ZSB0aGUgcmVnaW9uLiAqLw0KKwkJCQl4TVBVU2V0dGluZ3MtPnhSZWdpb25bIHVsIF0udWxSZWdpb25CYXNlQWRkcmVzcyA9ICggcG9ydFNUQUNLX1JFR0lPTiArIHVsICkgfCBwb3J0TVBVX1JFR0lPTl9WQUxJRDsNCisJCQkJeE1QVVNldHRpbmdzLT54UmVnaW9uWyB1bCBdLnVsUmVnaW9uQXR0cmlidXRlID0gMFVMOw0KKwkJCX0NCisNCisJCQlsSW5kZXgrKzsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tHZW5lcmljQ3JlYXRlKCBwZFRBU0tfQ09ERSBwdlRhc2tDb2RlLCBjb25zdCBzaWduZWQgY2hhciAqIGNvbnN0IHBjTmFtZSwgdW5zaWduZWQgc2hvcnQgdXNTdGFja0RlcHRoLCB2b2lkICpwdlBhcmFtZXRlcnMsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQcmlvcml0eSwgeFRhc2tIYW5kbGUgKnB4Q3JlYXRlZFRhc2ssIHBvcnRTVEFDS19UWVBFICpwdXhTdGFja0J1ZmZlciwgY29uc3QgeE1lbW9yeVJlZ2lvbiAqIGNvbnN0IHhSZWdpb25zICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCXhSZXR1cm4gPSB4VGFza0dlbmVyaWNDcmVhdGUoIHB2VGFza0NvZGUsIHBjTmFtZSwgdXNTdGFja0RlcHRoLCBwdlBhcmFtZXRlcnMsIHV4UHJpb3JpdHksIHB4Q3JlYXRlZFRhc2ssIHB1eFN0YWNrQnVmZmVyLCB4UmVnaW9ucyApOw0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgTVBVX3ZUYXNrQWxsb2NhdGVNUFVSZWdpb25zKCB4VGFza0hhbmRsZSB4VGFzaywgY29uc3QgeE1lbW9yeVJlZ2lvbiAqIGNvbnN0IHhSZWdpb25zICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwl2VGFza0FsbG9jYXRlTVBVUmVnaW9ucyggeFRhc2ssIHhSZWdpb25zICk7DQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KKwl2b2lkIE1QVV92VGFza0RlbGV0ZSggeFRhc2tIYW5kbGUgcHhUYXNrVG9EZWxldGUgKQ0KKwl7DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXZUYXNrRGVsZXRlKCBweFRhc2tUb0RlbGV0ZSApOw0KKyAgICAgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrRGVsYXlVbnRpbCA9PSAxICkNCisJdm9pZCBNUFVfdlRhc2tEZWxheVVudGlsKCBwb3J0VGlja1R5cGUgKiBjb25zdCBweFByZXZpb3VzV2FrZVRpbWUsIHBvcnRUaWNrVHlwZSB4VGltZUluY3JlbWVudCApDQorCXsNCisgICAgcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJdlRhc2tEZWxheVVudGlsKCBweFByZXZpb3VzV2FrZVRpbWUsIHhUaW1lSW5jcmVtZW50ICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfdlRhc2tEZWxheSA9PSAxICkNCisJdm9pZCBNUFVfdlRhc2tEZWxheSggcG9ydFRpY2tUeXBlIHhUaWNrc1RvRGVsYXkgKQ0KKwl7DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXZUYXNrRGVsYXkoIHhUaWNrc1RvRGVsYXkgKTsNCisgICAgICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCA9PSAxICkNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfdXhUYXNrUHJpb3JpdHlHZXQoIHhUYXNrSGFuZGxlIHB4VGFzayApDQorCXsNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFJldHVybjsNCisgICAgcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJdXhSZXR1cm4gPSB1eFRhc2tQcmlvcml0eUdldCggcHhUYXNrICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJCXJldHVybiB1eFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfdlRhc2tQcmlvcml0eVNldCA9PSAxICkNCisJdm9pZCBNUFVfdlRhc2tQcmlvcml0eVNldCggeFRhc2tIYW5kbGUgcHhUYXNrLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4TmV3UHJpb3JpdHkgKQ0KKwl7DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXZUYXNrUHJpb3JpdHlTZXQoIHB4VGFzaywgdXhOZXdQcmlvcml0eSApOw0KKyAgICAgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCisJdm9pZCBNUFVfdlRhc2tTdXNwZW5kKCB4VGFza0hhbmRsZSBweFRhc2tUb1N1c3BlbmQgKQ0KKwl7DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXZUYXNrU3VzcGVuZCggcHhUYXNrVG9TdXNwZW5kICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tJc1Rhc2tTdXNwZW5kZWQoIHhUYXNrSGFuZGxlIHhUYXNrICkNCisJew0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKyAgICBwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFRhc2tJc1Rhc2tTdXNwZW5kZWQoIHhUYXNrICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQorCXZvaWQgTVBVX3ZUYXNrUmVzdW1lKCB4VGFza0hhbmRsZSBweFRhc2tUb1Jlc3VtZSApDQorCXsNCisgICAgcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJdlRhc2tSZXN1bWUoIHB4VGFza1RvUmVzdW1lICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgTVBVX3ZUYXNrU3VzcGVuZEFsbCggdm9pZCApDQorew0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tSZXN1bWVBbGwoIHZvaWQgKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJeFJldHVybiA9IHhUYXNrUmVzdW1lQWxsKCk7DQorICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKyAgICByZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydFRpY2tUeXBlIE1QVV94VGFza0dldFRpY2tDb3VudCggdm9pZCApDQorew0KK3BvcnRUaWNrVHlwZSB4UmV0dXJuOw0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJeFJldHVybiA9IHhUYXNrR2V0VGlja0NvdW50KCk7DQorICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcyggdm9pZCApDQorew0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhSZXR1cm47DQorcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwl1eFJldHVybiA9IHV4VGFza0dldE51bWJlck9mVGFza3MoKTsNCisgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCXJldHVybiB1eFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KKwl2b2lkIE1QVV92VGFza0xpc3QoIHNpZ25lZCBjaGFyICpwY1dyaXRlQnVmZmVyICkNCisJew0KKwlwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl2VGFza0xpc3QoIHBjV3JpdGVCdWZmZXIgKTsNCisJCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQorCXZvaWQgTVBVX3ZUYXNrR2V0UnVuVGltZVN0YXRzKCBzaWduZWQgY2hhciAqcGNXcml0ZUJ1ZmZlciApDQorCXsNCisgICAgcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJdlRhc2tHZXRSdW5UaW1lU3RhdHMoIHBjV3JpdGVCdWZmZXIgKTsNCisgICAgICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHID09IDEgKQ0KKwl2b2lkIE1QVV92VGFza1NldEFwcGxpY2F0aW9uVGFza1RhZyggeFRhc2tIYW5kbGUgeFRhc2ssIHBkVEFTS19IT09LX0NPREUgcHhUYWdWYWx1ZSApDQorCXsNCisgICAgcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJdlRhc2tTZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrLCBweFRhZ1ZhbHVlICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCisJcGRUQVNLX0hPT0tfQ09ERSBNUFVfeFRhc2tHZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrSGFuZGxlIHhUYXNrICkNCisJew0KKwlwZFRBU0tfSE9PS19DT0RFIHhSZXR1cm47DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXhSZXR1cm4gPSB4VGFza0dldEFwcGxpY2F0aW9uVGFza1RhZyggeFRhc2sgKTsNCisgICAgICAgIHBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQorCXBvcnRCQVNFX1RZUEUgTVBVX3hUYXNrQ2FsbEFwcGxpY2F0aW9uVGFza0hvb2soIHhUYXNrSGFuZGxlIHhUYXNrLCB2b2lkICpwdlBhcmFtZXRlciApDQorCXsNCisJcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKyAgICBwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFRhc2tDYWxsQXBwbGljYXRpb25UYXNrSG9vayggeFRhc2ssIHB2UGFyYW1ldGVyICk7DQorICAgICAgICBwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApDQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgTVBVX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayggeFRhc2tIYW5kbGUgeFRhc2sgKQ0KKwl7DQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhSZXR1cm47DQorICAgIHBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXV4UmV0dXJuID0gdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrKCB4VGFzayApOw0KKyAgICAgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCQlyZXR1cm4gdXhSZXR1cm47DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgPT0gMSApDQorCXhUYXNrSGFuZGxlIE1QVV94VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCB2b2lkICkNCisJew0KKwl4VGFza0hhbmRsZSB4UmV0dXJuOw0KKyAgICBwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpOw0KKyAgICAgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSA9PSAxICkNCisJcG9ydEJBU0VfVFlQRSBNUFVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSggdm9pZCApDQorCXsNCisJcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKyAgICBwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSgpOw0KKyAgICAgICAgcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3hRdWV1ZUhhbmRsZSBNUFVfeFF1ZXVlR2VuZXJpY0NyZWF0ZSggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTGVuZ3RoLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SXRlbVNpemUsIHVuc2lnbmVkIGNoYXIgdWNRdWV1ZVR5cGUgKQ0KK3sNCit4UXVldWVIYW5kbGUgeFJldHVybjsNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCXhSZXR1cm4gPSB4UXVldWVHZW5lcmljQ3JlYXRlKCB1eFF1ZXVlTGVuZ3RoLCB1eEl0ZW1TaXplLCB1Y1F1ZXVlVHlwZSApOw0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIE1QVV94UXVldWVHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeENvcHlQb3NpdGlvbiApDQorew0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhSZXR1cm47DQorcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwl4UmV0dXJuID0geFF1ZXVlR2VuZXJpY1NlbmQoIHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeFRpY2tzVG9XYWl0LCB4Q29weVBvc2l0aW9uICk7DQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZyggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFJldHVybjsNCisNCisJdXhSZXR1cm4gPSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nKCBweFF1ZXVlICk7DQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwlyZXR1cm4gdXhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIE1QVV94UXVldWVHZW5lcmljUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwgcG9ydEJBU0VfVFlQRSB4SnVzdFBlZWtpbmcgKQ0KK3sNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJeFJldHVybiA9IHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCBweFF1ZXVlLCBwdkJ1ZmZlciwgeFRpY2tzVG9XYWl0LCB4SnVzdFBlZWtpbmcgKTsNCisJcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCXJldHVybiB4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJeFF1ZXVlSGFuZGxlIE1QVV94UXVldWVDcmVhdGVNdXRleCggdm9pZCApDQorCXsNCisgICAgeFF1ZXVlSGFuZGxlIHhSZXR1cm47DQorCXBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXhSZXR1cm4gPSB4UXVldWVDcmVhdGVNdXRleCggcXVldWVRVUVVRV9UWVBFX01VVEVYICk7DQorCQlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTID09IDENCisJeFF1ZXVlSGFuZGxlIE1QVV94UXVldWVDcmVhdGVDb3VudGluZ1NlbWFwaG9yZSggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENvdW50VmFsdWUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJbml0aWFsQ291bnQgKQ0KKwl7DQorICAgIHhRdWV1ZUhhbmRsZSB4UmV0dXJuOw0KKwlwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoIHV4Q291bnRWYWx1ZSwgdXhJbml0aWFsQ291bnQgKTsNCisJCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlKCB4UXVldWVIYW5kbGUgeE11dGV4LCBwb3J0VGlja1R5cGUgeEJsb2NrVGltZSApDQorCXsNCisJcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKwlwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlKCB4TXV0ZXgsIHhCbG9ja1RpbWUgKTsNCisJCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlR2l2ZU11dGV4UmVjdXJzaXZlKCB4UXVldWVIYW5kbGUgeE11dGV4ICkNCisJew0KKwlwb3J0QkFTRV9UWVBFIHhSZXR1cm47DQorCXBvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJCXhSZXR1cm4gPSB4UXVldWVHaXZlTXV0ZXhSZWN1cnNpdmUoIHhNdXRleCApOw0KKwkJcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiBjb25maWdVU0VfQUxURVJOQVRJVkVfQVBJID09IDENCisJc2lnbmVkIHBvcnRCQVNFX1RZUEUgTVBVX3hRdWV1ZUFsdEdlbmVyaWNTZW5kKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeENvcHlQb3NpdGlvbiApDQorCXsNCisgICAJc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisJcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwkJeFJldHVybiA9IAlzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljU2VuZCggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeFRpY2tzVG9XYWl0LCB4Q29weVBvc2l0aW9uICk7DQorCQlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgPT0gMQ0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSBNUFVfeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeEp1c3RQZWVraW5nICkNCisJew0KKyAgICBzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKwlwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl4UmV0dXJuID0geFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUoIHB4UXVldWUsIHB2QnVmZmVyLCB4VGlja3NUb1dhaXQsIHhKdXN0UGVla2luZyApOw0KKwkJcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFID4gMA0KKwl2b2lkIE1QVV92UXVldWVBZGRUb1JlZ2lzdHJ5KCB4UXVldWVIYW5kbGUgeFF1ZXVlLCBzaWduZWQgY2hhciAqcGNOYW1lICkNCisJew0KKwlwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCQl2UXVldWVBZGRUb1JlZ2lzdHJ5KCB4UXVldWUsIHBjTmFtZSApOw0KKw0KKwkJcG9ydFJFU0VUX1BSSVZJTEVHRSggeFJ1bm5pbmdQcml2aWxlZ2VkICk7DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIE1QVV92UXVldWVEZWxldGUoIHhRdWV1ZUhhbmRsZSB4UXVldWUgKQ0KK3sNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCXZRdWV1ZURlbGV0ZSggeFF1ZXVlICk7DQorDQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkICpNUFVfcHZQb3J0TWFsbG9jKCBzaXplX3QgeFNpemUgKQ0KK3sNCit2b2lkICpwdlJldHVybjsNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCXB2UmV0dXJuID0gcHZQb3J0TWFsbG9jKCB4U2l6ZSApOw0KKw0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCisNCisJcmV0dXJuIHB2UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIE1QVV92UG9ydEZyZWUoIHZvaWQgKnB2ICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UnVubmluZ1ByaXZpbGVnZWQgPSBwcnZSYWlzZVByaXZpbGVnZSgpOw0KKw0KKwl2UG9ydEZyZWUoIHB2ICk7DQorDQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIE1QVV92UG9ydEluaXRpYWxpc2VCbG9ja3MoIHZvaWQgKQ0KK3sNCitwb3J0QkFTRV9UWVBFIHhSdW5uaW5nUHJpdmlsZWdlZCA9IHBydlJhaXNlUHJpdmlsZWdlKCk7DQorDQorCXZQb3J0SW5pdGlhbGlzZUJsb2NrcygpOw0KKw0KKwlwb3J0UkVTRVRfUFJJVklMRUdFKCB4UnVubmluZ1ByaXZpbGVnZWQgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc2l6ZV90IE1QVV94UG9ydEdldEZyZWVIZWFwU2l6ZSggdm9pZCApDQorew0KK3NpemVfdCB4UmV0dXJuOw0KK3BvcnRCQVNFX1RZUEUgeFJ1bm5pbmdQcml2aWxlZ2VkID0gcHJ2UmFpc2VQcml2aWxlZ2UoKTsNCisNCisJeFJldHVybiA9IHhQb3J0R2V0RnJlZUhlYXBTaXplKCk7DQorDQorCXBvcnRSRVNFVF9QUklWSUxFR0UoIHhSdW5uaW5nUHJpdmlsZWdlZCApOw0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ00zX01QVS9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNM19NUFUvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNWRjYwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNM19NUFUvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogTVBVIHNwZWNpZmljIGNvbnN0YW50cy4gKi8NCisjZGVmaW5lIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMJCTENCisjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUCQkJKCAweDgwMDAwMDAwVUwgKQ0KKw0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fUkVBRF9XUklURQkJCQkoIDB4MDNVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9PTkxZCQkoIDB4MDVVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1JFQURfT05MWQkJCQkoIDB4MDZVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURQkoIDB4MDFVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0NBQ0hFQUJMRV9CVUZGRVJBQkxFCQkoIDB4MDdVTCA8PCAxNlVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0VYRUNVVEVfTkVWRVIJCQkoIDB4MDFVTCA8PCAyOFVMICkNCisNCisjZGVmaW5lIHBvcnRVTlBSSVZJTEVHRURfRkxBU0hfUkVHSU9OCQkoIDBVTCApDQorI2RlZmluZSBwb3J0UFJJVklMRUdFRF9GTEFTSF9SRUdJT04JCQkoIDFVTCApDQorI2RlZmluZSBwb3J0UFJJVklMRUdFRF9SQU1fUkVHSU9OCQkJKCAyVUwgKQ0KKyNkZWZpbmUgcG9ydEdFTkVSQUxfUEVSSVBIRVJBTFNfUkVHSU9OCQkoIDNVTCApDQorI2RlZmluZSBwb3J0U1RBQ0tfUkVHSU9OCQkJCQkoIDRVTCApDQorI2RlZmluZSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTgkgICAgKCA1VUwgKQ0KKyNkZWZpbmUgcG9ydExBU1RfQ09ORklHVVJBQkxFX1JFR0lPTgkJKCA3VUwgKQ0KKyNkZWZpbmUgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUwkJKCAoIHBvcnRMQVNUX0NPTkZJR1VSQUJMRV9SRUdJT04gLSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiApICsgMSApDQorI2RlZmluZSBwb3J0VE9UQUxfTlVNX1JFR0lPTlMJCQkJKCBwb3J0TlVNX0NPTkZJR1VSQUJMRV9SRUdJT05TICsgMSApIC8qIFBsdXMgb25lIHRvIG1ha2Ugc3BhY2UgZm9yIHRoZSBzdGFjayByZWdpb24uICovDQorDQorI2RlZmluZSBwb3J0U1dJVENIX1RPX1VTRVJfTU9ERSgpIF9fYXNtIHZvbGF0aWxlICggIiBtcnMgcjAsIGNvbnRyb2wgXG4gb3JyIHIwLCAjMSBcbiBtc3IgY29udHJvbCwgcjAgIiA6OjoicjAiICkNCisNCit0eXBlZGVmIHN0cnVjdCBNUFVfUkVHSU9OX1JFR0lTVEVSUw0KK3sNCisJdW5zaWduZWQgcG9ydExPTkcgdWxSZWdpb25CYXNlQWRkcmVzczsNCisJdW5zaWduZWQgcG9ydExPTkcgdWxSZWdpb25BdHRyaWJ1dGU7DQorfSB4TVBVX1JFR0lPTl9SRUdJU1RFUlM7DQorDQorLyogUGx1cyAxIHRvIGNyZWF0ZSBzcGFjZSBmb3IgdGhlIHN0YWNrIHJlZ2lvbi4gKi8NCit0eXBlZGVmIHN0cnVjdCBNUFVfU0VUVElOR1MNCit7DQorCXhNUFVfUkVHSU9OX1JFR0lTVEVSUyB4UmVnaW9uWyBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgXTsNCit9IHhNUFVfU0VUVElOR1M7DQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU1ZDIG51bWJlcnMgZm9yIHZhcmlvdXMgc2VydmljZXMuICovDQorI2RlZmluZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUgkJCQkwDQorI2RlZmluZSBwb3J0U1ZDX1lJRUxECQkJCQkJMQ0KKyNkZWZpbmUgcG9ydFNWQ19SQUlTRV9QUklWSUxFR0UJCQkJMg0KKw0KKy8qIFNjaGVkdWxlciB1dGlsaXRpZXMuICovDQorDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQlfX2FzbSB2b2xhdGlsZSAoICIJU1ZDCSUwCVxuIiA6OiAiaSIgKHBvcnRTVkNfWUlFTEQpICkNCisjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQNCisNCisjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HICopIDB4ZTAwMGVkMDQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBpZiggeFN3aXRjaFJlcXVpcmVkICkgKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorLyoNCisgKiBTZXQgYmFzZXByaSB0byBwb3J0TUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdpdGhvdXQgZWZmZWN0aW5nIG90aGVyDQorICogcmVnaXN0ZXJzLiAgcjAgaXMgY2xvYmJlcmVkLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZQkJCQkJCQkJCQlcDQorCSgJCQkJCQkJCQkJCQkJXA0KKwkJIgltb3YgcjAsICUwCQkJCQkJCQlcbiIJXA0KKwkJIgltc3IgYmFzZXByaSwgcjAJCQkJCQkJXG4iIFwNCisJCTo6ImkiKGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSk6InIwIglcDQorCSkNCisNCisvKg0KKyAqIFNldCBiYXNlcHJpIGJhY2sgdG8gMCB3aXRob3V0IGVmZmVjdGl2ZSBvdGhlciByZWdpc3RlcnMuDQorICogcjAgaXMgY2xvYmJlcmVkLiAgRkFROiAgU2V0dGluZyBCQVNFUFJJIHRvIDAgaXMgbm90IGEgYnVnLiAgUGxlYXNlIHNlZSANCisgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSBkaXNhZ3JlZWluZy4NCisgKi8NCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpCQkJXA0KKwlfX2FzbSB2b2xhdGlsZQkJCQkJCQlcDQorCSgJCQkJCQkJCQkJXA0KKwkJIgltb3YgcjAsICMwCQkJCQlcbiIJXA0KKwkJIgltc3IgYmFzZXByaSwgcjAJCQkJXG4iCVwNCisJCTo6OiJyMCIJCQkJCQkJCVwNCisJKQ0KKw0KKy8qIEZBUTogIFNldHRpbmcgQkFTRVBSSSB0byAwIGlzIG5vdCBhIGJ1Zy4gIFBsZWFzZSBzZWUgDQoraHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBiZWZvcmUgZGlzYWdyZWVpbmcuICovDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCTA7cG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCk7KHZvaWQpeA0KKw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJcG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2RlZmluZSBwb3J0Tk9QKCkNCisNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ000Ri9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTRGL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMxNDNmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BUk1fQ000Ri9wb3J0LmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk0gQ000RiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI2lmbmRlZiBfX1ZGUF9GUF9fDQorCSNlcnJvciBUaGlzIHBvcnQgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBwcm9qZWN0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQgdG8gZW5hYmxlIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQuDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGUwMTQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkwJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqICkgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWX1BSSQkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMTYgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19QUkkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMjQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBWRlAuICovDQorI2RlZmluZSBwb3J0RlBDQ1IJCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlZjM0ICkgLyogRmxvYXRpbmcgcG9pbnQgY29udGV4dCBjb250cm9sIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgcG9ydEFTUEVOX0FORF9MU1BFTl9CSVRTCSggMHgzVUwgPDwgMzBVTCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRVhFQ19SRVRVUk4JCSggMHhmZmZmZmZmZCApDQorDQorLyogVGhlIHByaW9yaXR5IHVzZWQgYnkgdGhlIGtlcm5lbCBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIHRvIG1ha2UgYWNjZXNzDQorZnJvbSBpbmxpbmUgYXNzZW1ibGVyIGVhc2llci4gKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIHVsS2VybmVsUHJpb3JpdHkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzIGluIHRoZSBjcml0aWNhbCBuZXN0aW5nDQordmFyaWFibGUuICovDQorc3RhdGljIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3RpbmcgPSAweGFhYWFhYWFhOw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qDQorICogRXhjZXB0aW9uIGhhbmRsZXJzLg0KKyAqLw0KK3ZvaWQgeFBvcnRQZW5kU1ZIYW5kbGVyKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKCBuYWtlZCApKTsNCit2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKTsNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQorDQorLyoNCisgKiBTdGFydCBmaXJzdCB0YXNrIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHRlc3RlZCBpbiBpc29sYXRpb24uDQorICovDQorc3RhdGljIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18gKCggbmFrZWQgKSk7DQorDQorLyoNCisgKiBGdW5jdGlvbiB0byBlbmFibGUgdGhlIFZGUC4NCisgKi8NCisgc3RhdGljIHZvaWQgdlBvcnRFbmFibGVWRlAoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoIG5ha2VkICkpOw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQorCWludGVycnVwdC4gKi8NCisNCisJLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0DQorCW9mIGludGVycnVwdHMsIGFuZCB0byBlbnN1cmUgYWxpZ25tZW50LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1hQU1I7CS8qIHhQU1IgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOwkvKiBQQyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDA7CS8qIExSICovDQorDQorCS8qIFNhdmUgY29kZSBzcGFjZSBieSBza2lwcGluZyByZWdpc3RlciBpbml0aWFsaXNhdGlvbi4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDU7CS8qIFIxMiwgUjMsIFIyIGFuZCBSMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CS8qIFIwICovDQorDQorCS8qIEEgc2F2ZSBtZXRob2QgaXMgYmVpbmcgdXNlZCB0aGF0IHJlcXVpcmVzIGVhY2ggdGFzayB0byBtYWludGFpbiBpdHMNCisJb3duIGV4ZWMgcmV0dXJuIHZhbHVlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VYRUNfUkVUVVJOOw0KKw0KKwlweFRvcE9mU3RhY2sgLT0gODsJLyogUjExLCBSMTAsIFI5LCBSOCwgUjcsIFI2LCBSNSBhbmQgUjQuICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICkNCit7DQorCV9fYXNtIHZvbGF0aWxlICgNCisJCQkJCSIJbGRyCXIzLCBweEN1cnJlbnRUQ0JDb25zdDIJCVxuIiAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KKwkJCQkJIglsZHIgcjEsIFtyM10JCQkJCVxuIiAvKiBVc2UgcHhDdXJyZW50VENCQ29uc3QgdG8gZ2V0IHRoZSBweEN1cnJlbnRUQ0IgYWRkcmVzcy4gKi8NCisJCQkJCSIJbGRyIHIwLCBbcjFdCQkJCQlcbiIgLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCisJCQkJCSIJbGRtaWEgcjAhLCB7cjQtcjExLCByMTR9CQlcbiIgLyogUG9wIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgc2F2ZWQgb24gZXhjZXB0aW9uIGVudHJ5IGFuZCB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudC4gKi8NCisJCQkJCSIJbXNyIHBzcCwgcjAJCQkJCQlcbiIgLyogUmVzdG9yZSB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLw0KKwkJCQkJIgltb3YgcjAsICMwIAkJCQkJCVxuIg0KKwkJCQkJIgltc3IJYmFzZXByaSwgcjAJCQkJCVxuIg0KKwkJCQkJIglieCByMTQJCQkJCQkJXG4iDQorCQkJCQkiCQkJCQkJCQkJXG4iDQorCQkJCQkiCS5hbGlnbiAyCQkJCQkJXG4iDQorCQkJCQkicHhDdXJyZW50VENCQ29uc3QyOiAud29yZCBweEN1cnJlbnRUQ0IJCQkJXG4iDQorCQkJCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUoDQorCQkJCQkiIGxkciByMCwgPTB4RTAwMEVEMDggCVxuIiAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorCQkJCQkiIGxkciByMCwgW3IwXSAJCQlcbiINCisJCQkJCSIgbGRyIHIwLCBbcjBdIAkJCVxuIg0KKwkJCQkJIiBtc3IgbXNwLCByMAkJCVxuIiAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQorCQkJCQkiIGNwc2llIGkJCQkJXG4iIC8qIEdsb2JhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwkJCQkJIiBzdmMgMAkJCQkJXG4iIC8qIFN5c3RlbSBjYWxsIHRvIHN0YXJ0IGZpcnN0IHRhc2suICovDQorCQkJCQkiIG5vcAkJCQkJXG4iDQorCQkJCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwLiAgDQorCVNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQorCWNvbmZpZ0FTU0VSVCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorDQorCS8qIE1ha2UgUGVuZFNWIGFuZCBTeXNUaWNrIHRoZSBsb3dlc3QgcHJpb3JpdHkgaW50ZXJydXB0cy4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEluaXRpYWxpc2UgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgcmVhZHkgZm9yIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl1eENyaXRpY2FsTmVzdGluZyA9IDA7DQorDQorCS8qIEVuc3VyZSB0aGUgVkZQIGlzIGVuYWJsZWQgLSBpdCBzaG91bGQgYmUgYW55d2F5LiAqLw0KKwl2UG9ydEVuYWJsZVZGUCgpOw0KKw0KKwkvKiBMYXp5IHNhdmUgYWx3YXlzLiAqLw0KKwkqKCBwb3J0RlBDQ1IgKSB8PSBwb3J0QVNQRU5fQU5EX0xTUEVOX0JJVFM7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIENNNEYgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKQ0KK3sNCisJLyogU2V0IGEgUGVuZFNWIHRvIHJlcXVlc3QgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1eENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRQZW5kU1ZIYW5kbGVyKCB2b2lkICkNCit7DQorCS8qIFRoaXMgaXMgYSBuYWtlZCBmdW5jdGlvbi4gKi8NCisNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkiCW1ycyByMCwgcHNwCQkJCQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCWxkcglyMywgcHhDdXJyZW50VENCQ29uc3QJCQkJXG4iIC8qIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLiAqLw0KKwkiCWxkcglyMiwgW3IzXQkJCQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXRzdCByMTQsICMweDEwCQkJCQkJXG4iIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCisJIglpdCBlcQkJCQkJCQkJXG4iDQorCSIJdnN0bWRiZXEgcjAhLCB7czE2LXMzMX0JCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJc3RtZGIgcjAhLCB7cjQtcjExLCByMTR9CQkJXG4iIC8qIFNhdmUgdGhlIGNvcmUgcmVnaXN0ZXJzLiAqLw0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXN0ciByMCwgW3IyXQkJCQkJCVxuIiAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXN0bWRiIHNwISwge3IzLCByMTR9CQkJCVxuIg0KKwkiCW1vdiByMCwgJTAgCQkJCQkJCVxuIg0KKwkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkiCWJsIHZUYXNrU3dpdGNoQ29udGV4dAkJCQlcbiINCisJIgltb3YgcjAsICMwCQkJCQkJCVxuIg0KKwkiCW1zciBiYXNlcHJpLCByMAkJCQkJCVxuIg0KKwkiCWxkbWlhIHNwISwge3IzLCByMTR9CQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCWxkciByMSwgW3IzXQkJCQkJCVxuIiAvKiBUaGUgZmlyc3QgaXRlbSBpbiBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgdG9wIG9mIHN0YWNrLiAqLw0KKwkiCWxkciByMCwgW3IxXQkJCQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCWxkbWlhIHIwISwge3I0LXIxMSwgcjE0fQkJCVxuIiAvKiBQb3AgdGhlIGNvcmUgcmVnaXN0ZXJzLiAqLw0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCXRzdCByMTQsICMweDEwCQkJCQkJXG4iIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwb3AgdGhlIGhpZ2ggdmZwIHJlZ2lzdGVycyB0b28uICovDQorCSIJaXQgZXEJCQkJCQkJCVxuIg0KKwkiCXZsZG1pYWVxIHIwISwge3MxNi1zMzF9CQkJCVxuIg0KKwkiCQkJCQkJCQkJCVxuIg0KKwkiCW1zciBwc3AsIHIwCQkJCQkJCVxuIg0KKwkiCWJ4IHIxNAkJCQkJCQkJXG4iDQorCSIJCQkJCQkJCQkJXG4iDQorCSIJLmFsaWduIDIJCQkJCQkJXG4iDQorCSJweEN1cnJlbnRUQ0JDb25zdDogLndvcmQgcHhDdXJyZW50VENCCVxuIg0KKwk6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpDQorCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorCSNlbmRpZg0KKw0KKwl1bER1bW15ID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgc3lzdGljayB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZA0KKyAqIGZyZXF1ZW5jeS4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogQ29uZmlndXJlIFN5c1RpY2sgdG8gaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZS4gKi8NCisJKihwb3J0TlZJQ19TWVNUSUNLX0xPQUQpID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTDsNCisJKihwb3J0TlZJQ19TWVNUSUNLX0NUUkwpID0gcG9ydE5WSUNfU1lTVElDS19DTEsgfCBwb3J0TlZJQ19TWVNUSUNLX0lOVCB8IHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGlzIGlzIGEgbmFrZWQgZnVuY3Rpb24uICovDQorc3RhdGljIHZvaWQgdlBvcnRFbmFibGVWRlAoIHZvaWQgKQ0KK3sNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIglsZHIudyByMCwgPTB4RTAwMEVEODgJCVxuIiAvKiBUaGUgRlBVIGVuYWJsZSBiaXRzIGFyZSBpbiB0aGUgQ1BBQ1IuICovDQorCQkiCWxkciByMSwgW3IwXQkJCQlcbiINCisJCSIJCQkJCQkJCVxuIg0KKwkJIglvcnIgcjEsIHIxLCAjKCAweGYgPDwgMjAgKQlcbiIgLyogRW5hYmxlIENQMTAgYW5kIENQMTEgY29wcm9jZXNzb3JzLCB0aGVuIHNhdmUgYmFjay4gKi8NCisJCSIJc3RyIHIxLCBbcjBdCQkJCVxuIg0KKwkJIglieCByMTQJCQkJCQkiDQorCSk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVJNX0NNNEYvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTRGL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGJlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FSTV9DTTRGL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTc4IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKw0KKy8qIFNjaGVkdWxlciB1dGlsaXRpZXMuICovDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkRnJvbUlTUigpDQorDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KKy8qIA0KKyAqIFNldCBiYXNlcHJpIHRvIHBvcnRNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2l0aG91dCBlZmZlY3Rpbmcgb3RoZXINCisgKiByZWdpc3RlcnMuICByMCBpcyBjbG9iYmVyZWQuDQorICovIA0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZQkJCQkJCQkJCQlcDQorCSgJCQkJCQkJCQkJCQkJXA0KKwkJIgltb3YgcjAsICUwCQkJCQkJCQlcbiIJXA0KKwkJIgltc3IgYmFzZXByaSwgcjAJCQkJCQkJXG4iIFwNCisJCTo6ImkiKGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSk6InIwIglcDQorCSkNCisJDQorLyoNCisgKiBTZXQgYmFzZXByaSBiYWNrIHRvIDAgd2l0aG91dCBlZmZlY3RpdmUgb3RoZXIgcmVnaXN0ZXJzLg0KKyAqIHIwIGlzIGNsb2JiZXJlZC4gIEZBUTogIFNldHRpbmcgQkFTRVBSSSB0byAwIGlzIG5vdCBhIGJ1Zy4gIFBsZWFzZSBzZWUgDQorICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBiZWZvcmUgZGlzYWdyZWVpbmcuDQorICovDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQkJCVwNCisJX19hc20gdm9sYXRpbGUJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCVwNCisJCSIJbW92IHIwLCAjMAkJCQkJXG4iCVwNCisJCSIJbXNyIGJhc2VwcmksIHIwCQkJCVxuIglcDQorCQk6OjoicjAiCQkJCQkJCQlcDQorCSkNCisNCisvKiBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpbiBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSBpcyBub3QgYSANCitidWcuICBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIA0KK2Rpc2FncmVlaW5nLiAqLw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCQkwO3BvcnRTRVRfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOyh2b2lkKXgNCisNCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXBvcnRTRVRfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorDQorLyogVGhlcmUgYXJlIGFuIHVuZXZlbiBudW1iZXIgb2YgaXRlbXMgb24gdGhlIGluaXRpYWwgc3RhY2ssIHNvIA0KK3BvcnRBTElHTk1FTlRfQVNTRVJUX3B4Q3VycmVudFRDQigpIHdpbGwgdHJpZ2dlciBmYWxzZSBwb3NpdGl2ZSBhc3NlcnRzLiAqLw0KKyNkZWZpbmUgcG9ydEFMSUdOTUVOVF9BU1NFUlRfcHhDdXJyZW50VENCICggdm9pZCApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVRNZWdhMzIzL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVRNZWdhMzIzL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ2ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BVE1lZ2EzMjMvcG9ydC5jCkBAIC0wLDAgKzEsNDYzIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiANCisNCitDaGFuZ2VzIGZyb20gVjIuNi4wDQorDQorCSsgQVZSIHBvcnQgLSBSZXBsYWNlZCB0aGUgaW5iKCkgYW5kIG91dGIoKSBmdW5jdGlvbnMgd2l0aCBkaXJlY3QgbWVtb3J5DQorCSAgYWNjZXNzLiAgVGhpcyBhbGxvd3MgdGhlIHBvcnQgdG8gYmUgYnVpbHQgd2l0aCB0aGUgMjAwNTA0MTQgYnVpbGQgb2YNCisJICBXaW5BVlIuDQorKi8NCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGF2ci9pbnRlcnJ1cHQuaD4NCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTdGFydCB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlcy4gKi8NCisjZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRAkJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHg4MCApDQorDQorLyogSGFyZHdhcmUgY29uc3RhbnRzIGZvciB0aW1lciAxLiAqLw0KKyNkZWZpbmUgcG9ydENMRUFSX0NPVU5URVJfT05fTUFUQ0gJCQkJKCAoIHVuc2lnbmVkIGNoYXIgKSAweDA4ICkNCisjZGVmaW5lIHBvcnRQUkVTQ0FMRV82NAkJCQkJCQkoICggdW5zaWduZWQgY2hhciApIDB4MDMgKQ0KKyNkZWZpbmUgcG9ydENMT0NLX1BSRVNDQUxFUgkJCQkJCSggKCB1bnNpZ25lZCBsb25nICkgNjQgKQ0KKyNkZWZpbmUgcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFCSggKCB1bnNpZ25lZCBjaGFyICkgMHgxMCApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIE1hY3JvIHRvIHNhdmUgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLCB0aGUgc2F2ZSB0aGUgc3RhY2sgcG9pbnRlcg0KKyAqIGludG8gdGhlIFRDQi4gIA0KKyAqIA0KKyAqIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSBmbGFncyB0aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gIFRoaXMgaXMgdG8gDQorICogZ3VhcmQgb3VyIHN0YWNrIGFnYWluc3QgaGF2aW5nIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeSANCisgKiBwdXNoZWQgdGhlIHJlZ2lzdGVycyBvbnRvIHRoZSBzdGFjayAtIGNhdXNpbmcgdGhlIDMyIHJlZ2lzdGVycyB0byBiZSBvbiB0aGUgDQorICogc3RhY2sgdHdpY2UuIA0KKyAqIA0KKyAqIHIxIGlzIHNldCB0byB6ZXJvIGFzIHRoZSBjb21waWxlciBleHBlY3RzIGl0IHRvIGJlIHRodXMsIGhvd2V2ZXIgc29tZQ0KKyAqIG9mIHRoZSBtYXRoIHJvdXRpbmVzIG1ha2UgdXNlIG9mIFIxLiANCisgKiANCisgKiBUaGUgaW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpDQorICogc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgcmVhZGluZy93cml0aW5nIHRvIHRoZSBzdGFjayBwb2ludGVyLiANCisgKi8NCisNCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCVwNCisJYXNtIHZvbGF0aWxlICgJInB1c2gJcjAJCQkJCQlcblx0IglcDQorCQkJCQkiaW4JCXIwLCBfX1NSRUdfXwkJCVxuXHQiCVwNCisJCQkJCSJjbGkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjAJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJjbHIJcjEJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXIzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjQJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjcJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyOAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjExCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIxCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjMwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjMxCQkJCQkJXG5cdCIJXA0KKwkJCQkJImxkcwlyMjYsIHB4Q3VycmVudFRDQgkJXG5cdCIJXA0KKwkJCQkJImxkcwlyMjcsIHB4Q3VycmVudFRDQiArIDEJXG5cdCIJXA0KKwkJCQkJImluCQlyMCwgMHgzZAkJCQlcblx0IglcDQorCQkJCQkic3QJCXgrLCByMAkJCQkJXG5cdCIJXA0KKwkJCQkJImluCQlyMCwgMHgzZQkJCQlcblx0IglcDQorCQkJCQkic3QJCXgrLCByMAkJCQkJXG5cdCIJXA0KKwkJCQkpOw0KKw0KKy8qIA0KKyAqIE9wcG9zaXRlIHRvIHBvcnRTQVZFX0NPTlRFWFQoKS4gIEludGVycnVwdHMgd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgZHVyaW5nDQorICogdGhlIGNvbnRleHQgc2F2ZSBzbyB3ZSBjYW4gd3JpdGUgdG8gdGhlIHN0YWNrIHBvaW50ZXIuIA0KKyAqLw0KKw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQlcDQorCWFzbSB2b2xhdGlsZSAoCSJsZHMJcjI2LCBweEN1cnJlbnRUQ0IJCVxuXHQiCVwNCisJCQkJCSJsZHMJcjI3LCBweEN1cnJlbnRUQ0IgKyAxCVxuXHQiCVwNCisJCQkJCSJsZAkJcjI4LCB4KwkJCQkJXG5cdCIJXA0KKwkJCQkJIm91dAlfX1NQX0xfXywgcjI4CQkJXG5cdCIJXA0KKwkJCQkJImxkCQlyMjksIHgrCQkJCQlcblx0IglcDQorCQkJCQkib3V0CV9fU1BfSF9fLCByMjkJCQlcblx0IglcDQorCQkJCQkicG9wCXIzMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjMwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyOAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjI3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjI0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjMJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyMgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjIxCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjAJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxOQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTcJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxNgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTEJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjMJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjAJCQkJCQlcblx0IglcDQorCQkJCQkib3V0CV9fU1JFR19fLCByMAkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjAJCQkJCQlcblx0IglcDQorCQkJCSk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBQZXJmb3JtIGhhcmR3YXJlIHNldHVwIHRvIGVuYWJsZSB0aWNrcyBmcm9tIHRpbWVyIDEsIGNvbXBhcmUgbWF0Y2ggQS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCit1bnNpZ25lZCBzaG9ydCB1c0FkZHJlc3M7DQorDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkgZ2VuZXJhdGVkIGJ5IA0KKwl0aGUgY29tcGlsZXIuICovDQorDQorCS8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCisNCisJLyogVGhlIHN0YXJ0IG9mIHRoZSB0YXNrIGNvZGUgd2lsbCBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBsYXN0LCBzbyBwbGFjZQ0KKwlpdCBvbiBmaXJzdC4gKi8NCisJdXNBZGRyZXNzID0gKCB1bnNpZ25lZCBzaG9ydCApIHB4Q29kZTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVzQWRkcmVzcyAmICggdW5zaWduZWQgc2hvcnQgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCXVzQWRkcmVzcyA+Pj0gODsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVzQWRkcmVzcyAmICggdW5zaWduZWQgc2hvcnQgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuICANCisJcG9ydFNBVkVfQ09OVEVYVCBwbGFjZXMgdGhlIGZsYWdzIG9uIHRoZSBzdGFjayBpbW1lZGlhdGVseSBhZnRlciByMA0KKwl0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZw0KKwl0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDA7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisNCisJLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAgIFRoZSBjb21waWxlciBleHBlY3RzIFIxIHRvIGJlIDAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMzsJLyogUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTQ7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE1OwkvKiBSMTUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxNjsJLyogUjE2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTc7CS8qIFIxNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE4OwkvKiBSMTggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxOTsJLyogUjE5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjA7CS8qIFIyMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIxOwkvKiBSMjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjsJLyogUjIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjM7CS8qIFIyMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLw0KKwl1c0FkZHJlc3MgPSAoIHVuc2lnbmVkIHNob3J0ICkgcHZQYXJhbWV0ZXJzOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdXNBZGRyZXNzICYgKCB1bnNpZ25lZCBzaG9ydCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJdXNBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdXNBZGRyZXNzICYgKCB1bnNpZ25lZCBzaG9ydCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDI2OwkvKiBSMjYgWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDI3OwkvKiBSMjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyODsJLyogUjI4IFkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyOTsJLyogUjI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MzA7CS8qIFIzMCBaICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMxOwkvKiBSMzEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cNCisJanVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLw0KKwlhc20gdm9sYXRpbGUgKCAicmV0IiApOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFWUiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2guICBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gaXMgc2F2ZSB0aGUgcmVnaXN0ZXJzIHNvIHdlDQorICogY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZS4NCisgKi8NCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7DQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCit7DQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJYXNtIHZvbGF0aWxlICggInJldCIgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBDb250ZXh0IHN3aXRjaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSB0aWNrLiAgVGhpcyBtdXN0IGJlIGlkZW50aWNhbCB0byANCisgKiB2UG9ydFlpZWxkKCkgZnJvbSB0aGUgY2FsbCB0byB2VGFza1N3aXRjaENvbnRleHQoKSBvbndhcmRzLiAgVGhlIG9ubHkNCisgKiBkaWZmZXJlbmNlIGZyb20gdlBvcnRZaWVsZCgpIGlzIHRoZSB0aWNrIGNvdW50IGlzIGluY3JlbWVudGVkIGFzIHRoZQ0KKyAqIGNhbGwgY29tZXMgZnJvbSB0aGUgdGljayBJU1IuDQorICovDQordm9pZCB2UG9ydFlpZWxkRnJvbVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7DQordm9pZCB2UG9ydFlpZWxkRnJvbVRpY2soIHZvaWQgKQ0KK3sNCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJYXNtIHZvbGF0aWxlICggInJldCIgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aW1lciAxIGNvbXBhcmUgbWF0Y2ggQSB0byBnZW5lcmF0ZSBhIHRpY2sgaW50ZXJydXB0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsQ29tcGFyZU1hdGNoOw0KK3Vuc2lnbmVkIGNoYXIgdWNIaWdoQnl0ZSwgdWNMb3dCeXRlOw0KKw0KKwkvKiBVc2luZyAxNmJpdCB0aW1lciAxIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgQ29ycmVjdCBmdXNlcyBtdXN0IGJlDQorCXNlbGVjdGVkIGZvciB0aGUgY29uZmlnQ1BVX0NMT0NLX0haIGNsb2NrLiAqLw0KKw0KKwl1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisNCisJLyogV2Ugb25seSBoYXZlIDE2IGJpdHMgc28gaGF2ZSB0byBzY2FsZSB0byBnZXQgb3VyIHJlcXVpcmVkIHRpY2sgcmF0ZS4gKi8NCisJdWxDb21wYXJlTWF0Y2ggLz0gcG9ydENMT0NLX1BSRVNDQUxFUjsNCisNCisJLyogQWRqdXN0IGZvciBjb3JyZWN0IHZhbHVlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCAtPSAoIHVuc2lnbmVkIGxvbmcgKSAxOw0KKw0KKwkvKiBTZXR1cCBjb21wYXJlIG1hdGNoIHZhbHVlIGZvciBjb21wYXJlIG1hdGNoIEEuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCANCisJYmVmb3JlIHRoaXMgaXMgY2FsbGVkIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGhlcmUuICovDQorCXVjTG93Qnl0ZSA9ICggdW5zaWduZWQgY2hhciApICggdWxDb21wYXJlTWF0Y2ggJiAoIHVuc2lnbmVkIGxvbmcgKSAweGZmICk7DQorCXVsQ29tcGFyZU1hdGNoID4+PSA4Ow0KKwl1Y0hpZ2hCeXRlID0gKCB1bnNpZ25lZCBjaGFyICkgKCB1bENvbXBhcmVNYXRjaCAmICggdW5zaWduZWQgbG9uZyApIDB4ZmYgKTsNCisJT0NSMUFIID0gdWNIaWdoQnl0ZTsNCisJT0NSMUFMID0gdWNMb3dCeXRlOw0KKw0KKwkvKiBTZXR1cCBjbG9jayBzb3VyY2UgYW5kIGNvbXBhcmUgbWF0Y2ggYmVoYXZpb3VyLiAqLw0KKwl1Y0xvd0J5dGUgPSBwb3J0Q0xFQVJfQ09VTlRFUl9PTl9NQVRDSCB8IHBvcnRQUkVTQ0FMRV82NDsNCisJVENDUjFCID0gdWNMb3dCeXRlOw0KKw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdCAtIHRoaXMgaXMgb2theSBhcyBpbnRlcnJ1cHQgYXJlIGN1cnJlbnRseSBnbG9iYWxseQ0KKwlkaXNhYmxlZC4gKi8NCisJdWNMb3dCeXRlID0gVElNU0s7DQorCXVjTG93Qnl0ZSB8PSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEU7DQorCVRJTVNLID0gdWNMb3dCeXRlOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKw0KKwkvKg0KKwkgKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlIGFzDQorCSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrDQorCSAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLg0KKwkgKi8NCisJdm9pZCBTSUdfT1VUUFVUX0NPTVBBUkUxQSggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIHNpZ25hbCwgbmFrZWQgKSApOw0KKwl2b2lkIFNJR19PVVRQVVRfQ09NUEFSRTFBKCB2b2lkICkNCisJew0KKwkJdlBvcnRZaWVsZEZyb21UaWNrKCk7DQorCQlhc20gdm9sYXRpbGUgKCAicmV0aSIgKTsNCisJfQ0KKyNlbHNlDQorDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQorCSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCisJICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOw0KKwkgKi8NCisJdm9pZCBTSUdfT1VUUFVUX0NPTVBBUkUxQSggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIHNpZ25hbCApICk7DQorCXZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKyNlbmRpZg0KKw0KKw0KKwkNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVRNZWdhMzIzL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjE3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0MiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCitDaGFuZ2VzIGZyb20gVjEuMi4zDQorDQorCSsgcG9ydENQVV9DTE9TS19IWiBkZWZpbml0aW9uIGNoYW5nZWQgdG8gOE1IeiBiYXNlIDEwLCBwcmV2aW91c2x5IGl0IA0KKwkgIGJhc2UgMTYuDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCWludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydENIQVINCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJYXNtIHZvbGF0aWxlICggImluCQlfX3RtcF9yZWdfXywgX19TUkVHX18iIDo6ICk7CVwNCisJCQkJCQkJCQlhc20gdm9sYXRpbGUgKCAiY2xpIiA6OiApOwkJCQkJCQkJXA0KKwkJCQkJCQkJCWFzbSB2b2xhdGlsZSAoICJwdXNoCV9fdG1wX3JlZ19fIiA6OiApDQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJYXNtIHZvbGF0aWxlICggInBvcAkJX190bXBfcmVnX18iIDo6ICk7CQkJCVwNCisJCQkJCQkJCQlhc20gdm9sYXRpbGUgKCAib3V0CQlfX1NSRUdfXywgX190bXBfcmVnX18iIDo6ICkNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlhc20gdm9sYXRpbGUgKCAiY2xpIiA6OiApOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCWFzbSB2b2xhdGlsZSAoICJzZWkiIDo6ICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTENCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIm5vcCIgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBLZXJuZWwgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJdlBvcnRZaWVsZCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9leGNlcHRpb24uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQVZSMzJfVUMzL2V4Y2VwdGlvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjgzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9leGNlcHRpb24uUwpAQCAtMCwwICsxLDI5NyBAQAorLypUaGlzIGZpbGUgaXMgcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KKy8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKg0KKyAqIFxicmllZiBFeGNlcHRpb24gYW5kIGludGVycnVwdCB2ZWN0b3JzLg0KKyAqDQorICogVGhpcyBmaWxlIG1hcHMgYWxsIGV2ZW50cyBzdXBwb3J0ZWQgYnkgYW4gQVZSMzJVQy4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBHTlUgR0NDIGZvciBBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzJVQyBkZXZpY2VzIHdpdGggYW4gSU5UQyBtb2R1bGUgY2FuIGJlIHVzZWQuDQorICogLSBBcHBOb3RlOg0KKyAqDQorICogXGF1dGhvciAgICAgICAgICAgICAgIEF0bWVsIENvcnBvcmF0aW9uOiBodHRwOi8vd3d3LmF0bWVsLmNvbSBcbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGFuZCBGQVE6IGh0dHA6Ly9zdXBwb3J0LmF0bWVsLm5vLw0KKyAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEF0bWVsIENvcnBvcmF0aW9uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqIDMuIFRoZSBuYW1lIG9mIEFUTUVMIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KKyAqIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBFWFBSRVNTTFkgQU5EDQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwNCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YNCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKw0KKyNpbmNsdWRlIDxhdnIzMi9pby5oPg0KKyNpbmNsdWRlICJpbnRjLmgiDQorDQorDQorLy8hIEB7DQorLy8hIFx2ZXJiYXRpbQ0KKw0KKw0KKyAgLnNlY3Rpb24gIC5leGNlcHRpb24sICJheCIsIEBwcm9nYml0cw0KKw0KKw0KKy8vIFN0YXJ0IG9mIEV4Y2VwdGlvbiBWZWN0b3IgVGFibGUuDQorDQorICAvLyBFVkJBIG11c3QgYmUgYWxpZ25lZCB3aXRoIGEgcG93ZXIgb2YgdHdvIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgRVZCQS0NCisgIC8vIHJlbGF0aXZlIG9mZnNldCBvZiB0aGUgbGFzdCB2ZWN0b3IuDQorICAuYmFsaWduIDB4MjAwDQorDQorICAvLyBFeHBvcnQgc3ltYm9sLg0KKyAgLmdsb2JhbCBfZXZiYQ0KKyAgLnR5cGUgX2V2YmEsIEBmdW5jdGlvbg0KK19ldmJhOg0KKw0KKyAgICAgICAgLm9yZyAgMHgwMDANCisgICAgICAgIC8vIFVucmVjb3ZlcmFibGUgRXhjZXB0aW9uLg0KK19oYW5kbGVfVW5yZWNvdmVyYWJsZV9FeGNlcHRpb246DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDA0DQorICAgICAgICAvLyBUTEIgTXVsdGlwbGUgSGl0OiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX1RMQl9NdWx0aXBsZV9IaXQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDA4DQorICAgICAgICAvLyBCdXMgRXJyb3IgRGF0YSBGZXRjaC4NCitfaGFuZGxlX0J1c19FcnJvcl9EYXRhX0ZldGNoOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAwQw0KKyAgICAgICAgIC8vIEJ1cyBFcnJvciBJbnN0cnVjdGlvbiBGZXRjaC4NCitfaGFuZGxlX0J1c19FcnJvcl9JbnN0cnVjdGlvbl9GZXRjaDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwMTANCisgICAgICAgIC8vIE5NSS4NCitfaGFuZGxlX05NSToNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwMTQNCisgICAgICAgIC8vIEluc3RydWN0aW9uIEFkZHJlc3MuDQorX2hhbmRsZV9JbnN0cnVjdGlvbl9BZGRyZXNzOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAxOA0KKyAgICAgICAgLy8gSVRMQiBQcm90ZWN0aW9uLg0KK19oYW5kbGVfSVRMQl9Qcm90ZWN0aW9uOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAxQw0KKyAgICAgICAgLy8gQnJlYWtwb2ludC4NCitfaGFuZGxlX0JyZWFrcG9pbnQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDIwDQorICAgICAgICAvLyBJbGxlZ2FsIE9wY29kZS4NCitfaGFuZGxlX0lsbGVnYWxfT3Bjb2RlOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAyNA0KKyAgICAgICAgLy8gVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbi4NCitfaGFuZGxlX1VuaW1wbGVtZW50ZWRfSW5zdHJ1Y3Rpb246DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDI4DQorICAgICAgICAvLyBQcml2aWxlZ2UgVmlvbGF0aW9uLg0KK19oYW5kbGVfUHJpdmlsZWdlX1Zpb2xhdGlvbjoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwMkMNCisgICAgICAgIC8vIEZsb2F0aW5nLVBvaW50OiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX0Zsb2F0aW5nX1BvaW50Og0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAzMA0KKyAgICAgICAgLy8gQ29wcm9jZXNzb3IgQWJzZW50OiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX0NvcHJvY2Vzc29yX0Fic2VudDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwMzQNCisgICAgICAgIC8vIERhdGEgQWRkcmVzcyAoUmVhZCkuDQorX2hhbmRsZV9EYXRhX0FkZHJlc3NfUmVhZDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwMzgNCisgICAgICAgIC8vIERhdGEgQWRkcmVzcyAoV3JpdGUpLg0KK19oYW5kbGVfRGF0YV9BZGRyZXNzX1dyaXRlOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDAzQw0KKyAgICAgICAgLy8gRFRMQiBQcm90ZWN0aW9uIChSZWFkKS4NCitfaGFuZGxlX0RUTEJfUHJvdGVjdGlvbl9SZWFkOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDA0MA0KKyAgICAgICAgLy8gRFRMQiBQcm90ZWN0aW9uIChXcml0ZSkuDQorX2hhbmRsZV9EVExCX1Byb3RlY3Rpb25fV3JpdGU6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDQ0DQorICAgICAgICAvLyBEVExCIE1vZGlmaWVkOiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX0RUTEJfTW9kaWZpZWQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIC5vcmcgIDB4MDUwDQorICAgICAgICAvLyBJVExCIE1pc3M6IFVOVVNFRCBJTiBBVlIzMlVDLg0KK19oYW5kbGVfSVRMQl9NaXNzOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICAub3JnICAweDA2MA0KKyAgICAgICAgLy8gRFRMQiBNaXNzIChSZWFkKTogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9EVExCX01pc3NfUmVhZDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgwNzANCisgICAgICAgIC8vIERUTEIgTWlzcyAoV3JpdGUpOiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX0RUTEJfTWlzc19Xcml0ZToNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgLm9yZyAgMHgxMDANCisgICAgICAgIC8vIFN1cGVydmlzb3IgQ2FsbC4NCitfaGFuZGxlX1N1cGVydmlzb3JfQ2FsbDoNCisgICAgICAgIGxkYS53ICAgcGMsIFNDQUxMWWllbGQNCisNCisNCisvLyBJbnRlcnJ1cHQgc3VwcG9ydC4NCisvLyBUaGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgbXVzdCBwcm92aWRlIHRoZSBvZmZzZXQgYWRkcmVzcyByZWxhdGl2ZSB0byBFVkJBLg0KKy8vIEltcG9ydGFudCBub3RlOg0KKy8vICAgQWxsIGludGVycnVwdHMgY2FsbCBhIEMgZnVuY3Rpb24gbmFtZWQgX2dldF9pbnRlcnJ1cHRfaGFuZGxlci4NCisvLyAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGdyb3VwIGFuZCBpbnRlcnJ1cHQgbGluZSBudW1iZXIgdG8gdGhlbiByZXR1cm4gaW4NCisvLyAgIFIxMiBhIHBvaW50ZXIgdG8gYSB1c2VyLXByb3ZpZGVkIGludGVycnVwdCBoYW5kbGVyLg0KKw0KKyAgLmJhbGlnbiA0DQorDQorX2ludDA6DQorICAvLyBSOC1SMTIsIExSLCBQQyBhbmQgU1IgYXJlIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIHN5c3RlbSBzdGFjayBieSB0aGUNCisgIC8vIENQVSB1cG9uIGludGVycnVwdCBlbnRyeS4NCisjaWYgMSAvLyBCMTgzMjogaW50ZXJydXB0IHN0YWNrIGNoYW5nZWQgdG8gZXhjZXB0aW9uIHN0YWNrIGlmIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4NCisgIG1mc3IgICAgcjEyLCBBVlIzMl9TUg0KKyAgYmZleHR1ICByMTIsIHIxMiwgQVZSMzJfU1JfTTBfT0ZGU0VULCBBVlIzMl9TUl9NMF9TSVpFICsgQVZSMzJfU1JfTTFfU0laRSArIEFWUjMyX1NSX00yX1NJWkUNCisgIGNwLncgICAgcjEyLCAwYjExMA0KKyAgYnJsbyAgICBfaW50MF9ub3JtYWwNCisgIGxkZHNwICAgcjEyLCBzcFswICogNF0NCisgIHN0ZHNwICAgc3BbNiAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFsxICogNF0NCisgIHN0ZHNwICAgc3BbNyAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFszICogNF0NCisgIHN1YiAgICAgc3AsIC02ICogNA0KKyAgcmV0ZQ0KK19pbnQwX25vcm1hbDoNCisjZW5kaWYNCisgIG1vdiAgICAgcjEyLCAwICAvLyBQYXNzIHRoZSBpbnRfbGV2IHBhcmFtZXRlciB0byB0aGUgX2dldF9pbnRlcnJ1cHRfaGFuZGxlciBmdW5jdGlvbi4NCisgIGNhbGwgICAgX2dldF9pbnRlcnJ1cHRfaGFuZGxlcg0KKyAgY3AudyAgICByMTIsIDAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLg0KKyAgbW92bmUgICBwYywgcjEyIC8vIElmIHRoaXMgd2FzIG5vdCBhIHNwdXJpb3VzIGludGVycnVwdCAoUjEyICE9IE5VTEwpLCBqdW1wIHRvIHRoZSBoYW5kbGVyLg0KKyAgcmV0ZSAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgPT0gTlVMTCksIHJldHVybiBmcm9tIGV2ZW50IGhhbmRsZXIuDQorDQorX2ludDE6DQorICAvLyBSOC1SMTIsIExSLCBQQyBhbmQgU1IgYXJlIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIHN5c3RlbSBzdGFjayBieSB0aGUNCisgIC8vIENQVSB1cG9uIGludGVycnVwdCBlbnRyeS4NCisjaWYgMSAvLyBCMTgzMjogaW50ZXJydXB0IHN0YWNrIGNoYW5nZWQgdG8gZXhjZXB0aW9uIHN0YWNrIGlmIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4NCisgIG1mc3IgICAgcjEyLCBBVlIzMl9TUg0KKyAgYmZleHR1ICByMTIsIHIxMiwgQVZSMzJfU1JfTTBfT0ZGU0VULCBBVlIzMl9TUl9NMF9TSVpFICsgQVZSMzJfU1JfTTFfU0laRSArIEFWUjMyX1NSX00yX1NJWkUNCisgIGNwLncgICAgcjEyLCAwYjExMA0KKyAgYnJsbyAgICBfaW50MV9ub3JtYWwNCisgIGxkZHNwICAgcjEyLCBzcFswICogNF0NCisgIHN0ZHNwICAgc3BbNiAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFsxICogNF0NCisgIHN0ZHNwICAgc3BbNyAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFszICogNF0NCisgIHN1YiAgICAgc3AsIC02ICogNA0KKyAgcmV0ZQ0KK19pbnQxX25vcm1hbDoNCisjZW5kaWYNCisgIG1vdiAgICAgcjEyLCAxICAvLyBQYXNzIHRoZSBpbnRfbGV2IHBhcmFtZXRlciB0byB0aGUgX2dldF9pbnRlcnJ1cHRfaGFuZGxlciBmdW5jdGlvbi4NCisgIGNhbGwgICAgX2dldF9pbnRlcnJ1cHRfaGFuZGxlcg0KKyAgY3AudyAgICByMTIsIDAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLg0KKyAgbW92bmUgICBwYywgcjEyIC8vIElmIHRoaXMgd2FzIG5vdCBhIHNwdXJpb3VzIGludGVycnVwdCAoUjEyICE9IE5VTEwpLCBqdW1wIHRvIHRoZSBoYW5kbGVyLg0KKyAgcmV0ZSAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgPT0gTlVMTCksIHJldHVybiBmcm9tIGV2ZW50IGhhbmRsZXIuDQorDQorX2ludDI6DQorICAvLyBSOC1SMTIsIExSLCBQQyBhbmQgU1IgYXJlIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIHN5c3RlbSBzdGFjayBieSB0aGUNCisgIC8vIENQVSB1cG9uIGludGVycnVwdCBlbnRyeS4NCisjaWYgMSAvLyBCMTgzMjogaW50ZXJydXB0IHN0YWNrIGNoYW5nZWQgdG8gZXhjZXB0aW9uIHN0YWNrIGlmIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4NCisgIG1mc3IgICAgcjEyLCBBVlIzMl9TUg0KKyAgYmZleHR1ICByMTIsIHIxMiwgQVZSMzJfU1JfTTBfT0ZGU0VULCBBVlIzMl9TUl9NMF9TSVpFICsgQVZSMzJfU1JfTTFfU0laRSArIEFWUjMyX1NSX00yX1NJWkUNCisgIGNwLncgICAgcjEyLCAwYjExMA0KKyAgYnJsbyAgICBfaW50Ml9ub3JtYWwNCisgIGxkZHNwICAgcjEyLCBzcFswICogNF0NCisgIHN0ZHNwICAgc3BbNiAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFsxICogNF0NCisgIHN0ZHNwICAgc3BbNyAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFszICogNF0NCisgIHN1YiAgICAgc3AsIC02ICogNA0KKyAgcmV0ZQ0KK19pbnQyX25vcm1hbDoNCisjZW5kaWYNCisgIG1vdiAgICAgcjEyLCAyICAvLyBQYXNzIHRoZSBpbnRfbGV2IHBhcmFtZXRlciB0byB0aGUgX2dldF9pbnRlcnJ1cHRfaGFuZGxlciBmdW5jdGlvbi4NCisgIGNhbGwgICAgX2dldF9pbnRlcnJ1cHRfaGFuZGxlcg0KKyAgY3AudyAgICByMTIsIDAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLg0KKyAgbW92bmUgICBwYywgcjEyIC8vIElmIHRoaXMgd2FzIG5vdCBhIHNwdXJpb3VzIGludGVycnVwdCAoUjEyICE9IE5VTEwpLCBqdW1wIHRvIHRoZSBoYW5kbGVyLg0KKyAgcmV0ZSAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgPT0gTlVMTCksIHJldHVybiBmcm9tIGV2ZW50IGhhbmRsZXIuDQorDQorX2ludDM6DQorICAvLyBSOC1SMTIsIExSLCBQQyBhbmQgU1IgYXJlIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIHN5c3RlbSBzdGFjayBieSB0aGUNCisgIC8vIENQVSB1cG9uIGludGVycnVwdCBlbnRyeS4NCisjaWYgMSAvLyBCMTgzMjogaW50ZXJydXB0IHN0YWNrIGNoYW5nZWQgdG8gZXhjZXB0aW9uIHN0YWNrIGlmIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4NCisgIG1mc3IgICAgcjEyLCBBVlIzMl9TUg0KKyAgYmZleHR1ICByMTIsIHIxMiwgQVZSMzJfU1JfTTBfT0ZGU0VULCBBVlIzMl9TUl9NMF9TSVpFICsgQVZSMzJfU1JfTTFfU0laRSArIEFWUjMyX1NSX00yX1NJWkUNCisgIGNwLncgICAgcjEyLCAwYjExMA0KKyAgYnJsbyAgICBfaW50M19ub3JtYWwNCisgIGxkZHNwICAgcjEyLCBzcFswICogNF0NCisgIHN0ZHNwICAgc3BbNiAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFsxICogNF0NCisgIHN0ZHNwICAgc3BbNyAqIDRdLCByMTINCisgIGxkZHNwICAgcjEyLCBzcFszICogNF0NCisgIHN1YiAgICAgc3AsIC02ICogNA0KKyAgcmV0ZQ0KK19pbnQzX25vcm1hbDoNCisjZW5kaWYNCisgIG1vdiAgICAgcjEyLCAzICAvLyBQYXNzIHRoZSBpbnRfbGV2IHBhcmFtZXRlciB0byB0aGUgX2dldF9pbnRlcnJ1cHRfaGFuZGxlciBmdW5jdGlvbi4NCisgIGNhbGwgICAgX2dldF9pbnRlcnJ1cHRfaGFuZGxlcg0KKyAgY3AudyAgICByMTIsIDAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLg0KKyAgbW92bmUgICBwYywgcjEyIC8vIElmIHRoaXMgd2FzIG5vdCBhIHNwdXJpb3VzIGludGVycnVwdCAoUjEyICE9IE5VTEwpLCBqdW1wIHRvIHRoZSBoYW5kbGVyLg0KKyAgcmV0ZSAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgPT0gTlVMTCksIHJldHVybiBmcm9tIGV2ZW50IGhhbmRsZXIuDQorDQorDQorLy8gQ29uc3RhbnQgZGF0YSBhcmVhLg0KKw0KKyAgLmJhbGlnbiA0DQorDQorICAvLyBWYWx1ZXMgdG8gc3RvcmUgaW4gdGhlIGludGVycnVwdCBwcmlvcml0eSByZWdpc3RlcnMgZm9yIHRoZSB2YXJpb3VzIGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMuDQorICAvLyBUaGUgaW50ZXJydXB0IHByaW9yaXR5IHJlZ2lzdGVycyBjb250YWluIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgYW5kDQorICAvLyB0aGUgRVZCQS1yZWxhdGl2ZSBpbnRlcnJ1cHQgdmVjdG9yIG9mZnNldC4NCisgIC5nbG9iYWwgaXByX3ZhbA0KKyAgLnR5cGUgaXByX3ZhbCwgQG9iamVjdA0KK2lwcl92YWw6DQorICAud29yZCAoSU5UMCA8PCBBVlIzMl9JTlRDX0lQUjBfSU5UTEVWX09GRlNFVCkgfCAoX2ludDAgLSBfZXZiYSksXA0KKyAgICAgICAgKElOVDEgPDwgQVZSMzJfSU5UQ19JUFIwX0lOVExFVl9PRkZTRVQpIHwgKF9pbnQxIC0gX2V2YmEpLFwNCisgICAgICAgIChJTlQyIDw8IEFWUjMyX0lOVENfSVBSMF9JTlRMRVZfT0ZGU0VUKSB8IChfaW50MiAtIF9ldmJhKSxcDQorICAgICAgICAoSU5UMyA8PCBBVlIzMl9JTlRDX0lQUjBfSU5UTEVWX09GRlNFVCkgfCAoX2ludDMgLSBfZXZiYSkNCisNCisNCisvLyEgXGVuZHZlcmJhdGltDQorLy8hIEB9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOWJhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0LmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qVGhpcyBmaWxlIGhhcyBiZWVuIHByZXBhcmVkIGZvciBEb3h5Z2VuIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uKi8NCisvKiEgXGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICoNCisgKiBcYnJpZWYgRnJlZVJUT1MgcG9ydCBzb3VyY2UgZm9yIEFWUjMyIFVDMy4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBHTlUgR0NDIGZvciBBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyBjYW4gYmUgdXNlZC4NCisgKiAtIEFwcE5vdGU6DQorICoNCisgKiBcYXV0aG9yICAgICAgICAgICAgICAgQXRtZWwgQ29ycG9yYXRpb246IGh0dHA6Ly93d3cuYXRtZWwuY29tIFxuDQorICogICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgYW5kIEZBUTogaHR0cDovL3N1cHBvcnQuYXRtZWwubm8vDQorICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHN5cy9jcHUuaD4NCisjaW5jbHVkZSA8c3lzL3VzYXJ0Lmg+DQorI2luY2x1ZGUgPG1hbGxvYy5oPg0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIEFWUjMyIFVDMyBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8YXZyMzIvaW8uaD4NCisjaW5jbHVkZSAiZ3Bpby5oIg0KKyNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwkjaW5jbHVkZSAidGMuaCINCisjZW5kaWYNCisNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICAgICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDQwMDAwMCApIC8qIEFWUjMyIDogW00yOk0wXT0wMDEgSTFNPTAgSTBNPTAsIEdNPTAgKi8NCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcgdmFyaWFibGUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICggKCB1bnNpZ25lZCBsb25nICkgMCApDQordm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCisNCisjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0wICkNCisJc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayggdm9pZCApOw0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIHBydkNsZWFyVGNJbnQoIHZvaWQgKTsNCisjZW5kaWYNCisNCisvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBMb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSB0aGUgbWFpbg0KKyAqIGZ1bmN0aW9uLg0KKyAqIFRoaXMgdmVyc2lvbiBjb21lcyBpbiByZXBsYWNlbWVudCB0byB0aGUgZGVmYXVsdCBvbmUgcHJvdmlkZWQgYnkgTmV3bGliLg0KKyAqIE5ld2xpYidzIF9pbml0X3N0YXJ0dXAgb25seSBjYWxscyBpbml0X2V4Y2VwdGlvbnMsIGJ1dCBOZXdsaWIncyBleGNlcHRpb24NCisgKiB2ZWN0b3JzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBTQ0FMTCBtYW5hZ2VtZW50IGluIHRoZSBjdXJyZW50IEZyZWVSVE9TDQorICogcG9ydC4gTW9yZSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zIGFyZSBiZXNpZGVzIGFkZGVkIGhlcmUuDQorICovDQordm9pZCBfaW5pdF9zdGFydHVwKHZvaWQpDQorew0KKwkvKiBJbXBvcnQgdGhlIEV4Y2VwdGlvbiBWZWN0b3IgQmFzZSBBZGRyZXNzLiAqLw0KKwlleHRlcm4gdm9pZCBfZXZiYTsNCisNCisJI2lmIGNvbmZpZ0hFQVBfSU5JVA0KKwkJZXh0ZXJuIHZvaWQgX19oZWFwX3N0YXJ0X187DQorCQlleHRlcm4gdm9pZCBfX2hlYXBfZW5kX187DQorCQlwb3J0QkFTRV9UWVBFICpweE1lbTsNCisJI2VuZGlmDQorDQorCS8qIExvYWQgdGhlIEV4Y2VwdGlvbiBWZWN0b3IgQmFzZSBBZGRyZXNzIGluIHRoZSBjb3JyZXNwb25kaW5nIHN5c3RlbSByZWdpc3Rlci4gKi8NCisJU2V0X3N5c3RlbV9yZWdpc3RlciggQVZSMzJfRVZCQSwgKCBpbnQgKSAmX2V2YmEgKTsNCisNCisJLyogRW5hYmxlIGV4Y2VwdGlvbnMuICovDQorCUVOQUJMRV9BTExfRVhDRVBUSU9OUygpOw0KKw0KKwkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZy4gKi8NCisJSU5UQ19pbml0X2ludGVycnVwdHMoKTsNCisNCisJI2lmIGNvbmZpZ0hFQVBfSU5JVA0KKw0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgaGVhcCB1c2VkIGJ5IG1hbGxvYy4gKi8NCisJCWZvciggcHhNZW0gPSAmX19oZWFwX3N0YXJ0X187IHB4TWVtIDwgKCBwb3J0QkFTRV9UWVBFICogKSZfX2hlYXBfZW5kX187ICkNCisJCXsNCisJCQkqcHhNZW0rKyA9IDB4QTVBNUE1QTU7DQorCQl9DQorDQorCSNlbmRpZg0KKw0KKwkvKiBHaXZlIHRoZSB1c2VkIENQVSBjbG9jayBmcmVxdWVuY3kgdG8gTmV3bGliLCBzbyBpdCBjYW4gd29yayBwcm9wZXJseS4gKi8NCisJc2V0X2NwdV9oeiggY29uZmlnQ1BVX0NMT0NLX0haICk7DQorDQorCS8qIENvZGUgc2VjdGlvbiBwcmVzZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBkZWJ1ZyB0cmFjZSBpcyBhY3RpdmF0ZWQuICovDQorCSNpZiBjb25maWdEQkcNCisJew0KKwkJc3RhdGljIGNvbnN0IGdwaW9fbWFwX3QgREJHX1VTQVJUX0dQSU9fTUFQID0NCisJCXsNCisJCQl7IGNvbmZpZ0RCR19VU0FSVF9SWF9QSU4sIGNvbmZpZ0RCR19VU0FSVF9SWF9GVU5DVElPTiB9LA0KKwkJCXsgY29uZmlnREJHX1VTQVJUX1RYX1BJTiwgY29uZmlnREJHX1VTQVJUX1RYX0ZVTkNUSU9OIH0NCisJCX07DQorDQorCQkvKiBJbml0aWFsaXplIHRoZSBVU0FSVCB1c2VkIGZvciB0aGUgZGVidWcgdHJhY2Ugd2l0aCB0aGUgY29uZmlndXJlZCBwYXJhbWV0ZXJzLiAqLw0KKwkJc2V0X3VzYXJ0X2Jhc2UoICggdm9pZCAqICkgY29uZmlnREJHX1VTQVJUICk7DQorCQlncGlvX2VuYWJsZV9tb2R1bGUoIERCR19VU0FSVF9HUElPX01BUCwNCisJCSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBEQkdfVVNBUlRfR1BJT19NQVAgKSAvIHNpemVvZiggREJHX1VTQVJUX0dQSU9fTUFQWzBdICkgKTsNCisJCXVzYXJ0X2luaXQoIGNvbmZpZ0RCR19VU0FSVF9CQVVEUkFURSApOw0KKwl9DQorCSNlbmRpZg0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIG1hbGxvYywgcmVhbGxvYyBhbmQgZnJlZSBhcmUgbWVhbnQgdG8gYmUgY2FsbGVkIHRocm91Z2ggcmVzcGVjdGl2ZWx5DQorICogcHZQb3J0TWFsbG9jLCBwdlBvcnRSZWFsbG9jIGFuZCB2UG9ydEZyZWUuDQorICogVGhlIGxhdHRlciBmdW5jdGlvbnMgY2FsbCB0aGUgZm9ybWVyIG9uZXMgZnJvbSB3aXRoaW4gc2VjdGlvbnMgd2hlcmUgdGFza3MNCisgKiBhcmUgc3VzcGVuZGVkLCBzbyB0aGUgbGF0dGVyIGZ1bmN0aW9ucyBhcmUgdGFzay1zYWZlLiBfX21hbGxvY19sb2NrIGFuZA0KKyAqIF9fbWFsbG9jX3VubG9jayB1c2UgdGhlIHNhbWUgbWVjaGFuaXNtIHRvIGFsc28ga2VlcCB0aGUgZm9ybWVyIGZ1bmN0aW9ucw0KKyAqIHRhc2stc2FmZSBhcyB0aGV5IG1heSBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBOZXdsaWIncyBmdW5jdGlvbnMuDQorICogSG93ZXZlciwgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJydXB0LXVuc2FmZSBhbmQgU0hBTEwgVEhFUkVGT1JFIE5PVCBCRQ0KKyAqIENBTExFRCBGUk9NIFdJVEhJTiBBTiBJTlRFUlJVUFQsIGJlY2F1c2UgX19tYWxsb2NfbG9jayBhbmQgX19tYWxsb2NfdW5sb2NrIGRvDQorICogbm90IGNhbGwgcG9ydEVOVEVSX0NSSVRJQ0FMIGFuZCBwb3J0RVhJVF9DUklUSUNBTCBpbiBvcmRlciBub3QgdG8gZGlzYWJsZQ0KKyAqIGludGVycnVwdHMgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIG1hbmFnZW1lbnQgYXMgdGhpcyBtYXkgYmUgYSB2ZXJ5IHRpbWUtDQorICogY29uc3VtaW5nIHByb2Nlc3MuDQorICovDQorDQorLyoNCisgKiBMb2NrIHJvdXRpbmUgY2FsbGVkIGJ5IE5ld2xpYiBvbiBtYWxsb2MgLyByZWFsbG9jIC8gZnJlZSBlbnRyeSB0byBndWFyYW50ZWUgYQ0KKyAqIHNhZmUgc2VjdGlvbiBhcyBtZW1vcnkgYWxsb2NhdGlvbiBtYW5hZ2VtZW50IHVzZXMgZ2xvYmFsIGRhdGEuDQorICogU2VlIHRoZSBhZm9yZW1lbnRpb25lZCBkZXRhaWxzLg0KKyAqLw0KK3ZvaWQgX19tYWxsb2NfbG9jayhzdHJ1Y3QgX3JlZW50ICpwdHIpDQorew0KKwl2VGFza1N1c3BlbmRBbGwoKTsNCit9DQorDQorLyoNCisgKiBVbmxvY2sgcm91dGluZSBjYWxsZWQgYnkgTmV3bGliIG9uIG1hbGxvYyAvIHJlYWxsb2MgLyBmcmVlIGV4aXQgdG8gZ3VhcmFudGVlDQorICogYSBzYWZlIHNlY3Rpb24gYXMgbWVtb3J5IGFsbG9jYXRpb24gbWFuYWdlbWVudCB1c2VzIGdsb2JhbCBkYXRhLg0KKyAqIFNlZSB0aGUgYWZvcmVtZW50aW9uZWQgZGV0YWlscy4NCisgKi8NCit2b2lkIF9fbWFsbG9jX3VubG9jayhzdHJ1Y3QgX3JlZW50ICpwdHIpDQorew0KKwl4VGFza1Jlc3VtZUFsbCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBZGRlZCBhcyB0aGVyZSBpcyBubyBzdWNoIGZ1bmN0aW9uIGluIEZyZWVSVE9TLiAqLw0KK3ZvaWQgKnB2UG9ydFJlYWxsb2MoIHZvaWQgKnB2LCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KK3sNCit2b2lkICpwdlJldHVybjsNCisNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorCXsNCisJCXB2UmV0dXJuID0gcmVhbGxvYyggcHYsIHhXYW50ZWRTaXplICk7DQorCX0NCisJeFRhc2tSZXN1bWVBbGwoKTsNCisNCisJcmV0dXJuIHB2UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8NCitzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisvKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMgc2F2ZWQNCitvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCitfX2F0dHJpYnV0ZV9fKChfX25ha2VkX18pKSBzdGF0aWMgdm9pZCB2VGljayggdm9pZCApDQorew0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpOw0KKw0KKwkjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0xICkNCisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4gKi8NCisJCXBydkNsZWFyVGNJbnQoKTsNCisJI2Vsc2UNCisJCS8qIFNjaGVkdWxlIHRoZSBDT1VOVCZDT01QQVJFIG1hdGNoIGludGVycnVwdCBpbiAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWikNCisJCWNsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCisJCXBydlNjaGVkdWxlTmV4dFRpY2soKTsNCisJI2VuZGlmDQorDQorCS8qIEJlY2F1c2UgRnJlZVJUT1MgaXMgbm90IHN1cHBvc2VkIHRvIHJ1biB3aXRoIG5lc3RlZCBpbnRlcnJ1cHRzLCBwdXQgYWxsIE9TDQorCWNhbGxzIGluIGEgY3JpdGljYWwgc2VjdGlvbiAuICovDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlICJlbGVjdGVkIHRhc2siLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2F0dHJpYnV0ZV9fKChfX25ha2VkX18pKSB2b2lkIFNDQUxMWWllbGQoIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpOw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEdDQyBjb21waWxlciB1c2VzIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgd2F5cyBhdA0KK2RpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCitiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQoraW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KK19fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwkgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKSB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcpDQorCXsNCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0L2V4Y2VwdGlvbi4gKi8NCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzLCBpdCB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUjEyLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDgwODA4MDg7CQkJCQkvKiBSOCAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwOTA5MDkwOTsJCQkJCS8qIFI5ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDBBMEEwQTBBOwkJCQkJLyogUjEwICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDBCMEIwQjBCOwkJCQkJLyogUjExICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CQkJCQkvKiBSMTIgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4REVBREJFRUY7CQkJCQkvKiBSMTQvTFIgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOyAvKiBSMTUvUEMgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnRJTklUSUFMX1NSOwkJCQkvKiBTUiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHhGRjAwMDBGRjsJCQkJCS8qIFIwICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAxMDEwMTAxOwkJCQkJLyogUjEgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMjAyMDI7CQkJCQkvKiBSMiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMzAzMDMwMzsJCQkJCS8qIFIzICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA0MDQwNDA0OwkJCQkJLyogUjQgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDUwNTA1MDU7CQkJCQkvKiBSNSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNjA2MDYwNjsJCQkJCS8qIFI2ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA3MDcwNzA3OwkJCQkJLyogUjcgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsJCQkvKiB1bENyaXRpY2FsTmVzdGluZyAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBVlIzMiBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGUgdGhlIENPVU5UJkNPTVBBUkUgbWF0Y2ggaW50ZXJydXB0IGluIChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKQ0KK2Nsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCisjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0wICkNCisJc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVGaXJzdFRpY2sodm9pZCkNCisJew0KKwkJdW5zaWduZWQgbG9uZyBsQ3ljbGVzOw0KKw0KKwkJbEN5Y2xlcyA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09VTlQpOw0KKwkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQkvLyBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbg0KKwkJLy8gZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4NCisJCWlmKDAgPT0gbEN5Y2xlcykNCisJCXsNCisJCQlsQ3ljbGVzKys7DQorCQl9DQorCQlTZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMpOw0KKwl9DQorCQ0KKwlfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKSBzdGF0aWMgdm9pZCBwcnZTY2hlZHVsZU5leHRUaWNrKHZvaWQpDQorCXsNCisJCXVuc2lnbmVkIGxvbmcgbEN5Y2xlcywgbENvdW50Ow0KKw0KKwkJbEN5Y2xlcyA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09NUEFSRSk7DQorCQlsQ3ljbGVzICs9IChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKTsNCisJCS8vIElmIGxDeWNsZXMgZW5kcyB1cCB0byBiZSAwLCBtYWtlIGl0IDEgc28gdGhhdCB0aGUgQ09NUEFSRSBhbmQgZXhjZXB0aW9uDQorCQkvLyBnZW5lcmF0aW9uIGZlYXR1cmUgZG9lcyBub3QgZ2V0IGRpc2FibGVkLg0KKwkJaWYoMCA9PSBsQ3ljbGVzKQ0KKwkJew0KKwkJCWxDeWNsZXMrKzsNCisJCX0NCisJCWxDb3VudCA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09VTlQpOw0KKwkJaWYoIGxDeWNsZXMgPCBsQ291bnQgKQ0KKwkJewkJLy8gV2UgbWlzc2VkIGEgdGljaywgcmVjb3ZlciBmb3IgdGhlIG5leHQuDQorCQkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQl9DQorCQlTZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMpOw0KKwl9DQorI2Vsc2UNCisJX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3RhdGljIHZvaWQgcHJ2Q2xlYXJUY0ludCh2b2lkKQ0KKwl7DQorCQlBVlIzMl9UQy5jaGFubmVsW2NvbmZpZ1RJQ0tfVENfQ0hBTk5FTF0uc3I7DQorCX0NCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KHZvaWQpDQorew0KKyNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKw0KKwl2b2xhdGlsZSBhdnIzMl90Y190ICp0YyA9ICZBVlIzMl9UQzsNCisNCisJLy8gT3B0aW9ucyBmb3Igd2F2ZWZvcm0gZ2VucmF0aW9uLg0KKwl0Y193YXZlZm9ybV9vcHRfdCB3YXZlZm9ybV9vcHQgPQ0KKwl7DQorCS5jaGFubmVsICA9IGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCwgICAgICAgICAgICAgLyogQ2hhbm5lbCBzZWxlY3Rpb24uICovDQorDQorCS5ic3d0cmcgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQi4gKi8NCisJLmJlZXZ0ICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZmZlY3Qgb24gVElPQi4gKi8NCisJLmJjcGMgICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9CLiAqLw0KKwkuYmNwYiAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJCIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQorDQorCS5hc3d0cmcgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQS4gKi8NCisJLmFlZXZ0ICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZmZlY3Qgb24gVElPQS4gKi8NCisJLmFjcGMgICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUuICovDQorCS5hY3BhICAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogUkEgY29tcGFyZSBlZmZlY3Qgb24gVElPQTogdG9nZ2xlIChvdGhlciBwb3NzaWJpbGl0aWVzIGFyZSBub25lLCBzZXQgYW5kIGNsZWFyKS4gKi8NCisNCisJLndhdnNlbCAgID0gVENfV0FWRUZPUk1fU0VMX1VQX01PREVfUkNfVFJJR0dFUiwvKiBXYXZlZm9ybSBzZWxlY3Rpb246IFVwIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBjb21wYXJlLiAqLw0KKwkuZW5ldHJnICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IHRyaWdnZXIgZW5hYmxlLiAqLw0KKwkuZWV2dCAgICAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IHNlbGVjdGlvbi4gKi8NCisJLmVldnRlZGcgID0gVENfU0VMX05PX0VER0UsICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZGdlIHNlbGVjdGlvbi4gKi8NCisJLmNwY2RpcyAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGRpc2FibGUgd2hlbiBSQyBjb21wYXJlLiAqLw0KKwkuY3Bjc3RvcCAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgY2xvY2sgc3RvcHBlZCB3aXRoIFJDIGNvbXBhcmUuICovDQorDQorCS5idXJzdCAgICA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVyc3Qgc2lnbmFsIHNlbGVjdGlvbi4gKi8NCisJLmNsa2kgICAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9jayBpbnZlcnNpb24uICovDQorCS50Y2Nsa3MgICA9IFRDX0NMT0NLX1NPVVJDRV9UQzIgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgc291cmNlIGNsb2NrIDIuICovDQorCX07DQorDQorCXRjX2ludGVycnVwdF90IHRjX2ludGVycnVwdCA9DQorCXsNCisJCS5ldHJncz0wLA0KKwkJLmxkcmJzPTAsDQorCQkubGRyYXM9MCwNCisJCS5jcGNzID0xLA0KKwkJLmNwYnMgPTAsDQorCQkuY3BhcyA9MCwNCisJCS5sb3Zycz0wLA0KKwkJLmNvdmZzPTAsDQorCX07DQorDQorI2VuZGlmDQorDQorCS8qIERpc2FibGUgYWxsIGludGVycnVwdC9leGNlcHRpb24uICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJLyogUmVnaXN0ZXIgdGhlIGNvbXBhcmUgaW50ZXJydXB0IGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCBjb250cm9sbGVyIGFuZA0KKwllbmFibGUgdGhlIGNvbXBhcmUgaW50ZXJydXB0LiAqLw0KKw0KKwkjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0xICkNCisJew0KKwkJSU5UQ19yZWdpc3Rlcl9pbnRlcnJ1cHQoJnZUaWNrLCBjb25maWdUSUNLX1RDX0lSUSwgSU5UMCk7DQorDQorCQkvKiBJbml0aWFsaXplIHRoZSB0aW1lci9jb3VudGVyLiAqLw0KKwkJdGNfaW5pdF93YXZlZm9ybSh0YywgJndhdmVmb3JtX29wdCk7DQorDQorCQkvKiBTZXQgdGhlIGNvbXBhcmUgdHJpZ2dlcnMuDQorCQlSZW1lbWJlciBUQyBjb3VudGVyIGlzIDE2LWJpdHMsIHNvIGNvdW50aW5nIHNlY29uZCBpcyBub3QgcG9zc2libGUhDQorCQlUaGF0J3Mgd2h5IHdlIGNvbmZpZ3VyZSBpdCB0byBjb3VudCBtcy4gKi8NCisJCXRjX3dyaXRlX3JjKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAoIGNvbmZpZ1BCQV9DTE9DS19IWiAvIDQpIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorDQorCQl0Y19jb25maWd1cmVfaW50ZXJydXB0cyggdGMsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCwgJnRjX2ludGVycnVwdCApOw0KKw0KKwkJLyogU3RhcnQgdGhlIHRpbWVyL2NvdW50ZXIuICovDQorCQl0Y19zdGFydCh0YywgY29uZmlnVElDS19UQ19DSEFOTkVMKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlJTlRDX3JlZ2lzdGVyX2ludGVycnVwdCgmdlRpY2ssIEFWUjMyX0NPUkVfQ09NUEFSRV9JUlEsIElOVDApOw0KKwkJcHJ2U2NoZWR1bGVGaXJzdFRpY2soKTsNCisJfQ0KKwkjZW5kaWYNCit9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWNlYjRkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSw3MDIgQEAKKy8qVGhpcyBmaWxlIGhhcyBiZWVuIHByZXBhcmVkIGZvciBEb3h5Z2VuIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uKi8NCisvKiEgXGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICoNCisgKiBcYnJpZWYgRnJlZVJUT1MgcG9ydCBzb3VyY2UgZm9yIEFWUjMyIFVDMy4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBHTlUgR0NDIGZvciBBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyBjYW4gYmUgdXNlZC4NCisgKiAtIEFwcE5vdGU6DQorICoNCisgKiBcYXV0aG9yICAgICAgICAgICAgICAgQXRtZWwgQ29ycG9yYXRpb246IGh0dHA6Ly93d3cuYXRtZWwuY29tIFxuDQorICogICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgYW5kIEZBUTogaHR0cDovL3N1cHBvcnQuYXRtZWwubm8vDQorICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisjaW5jbHVkZSA8YXZyMzIvaW8uaD4NCisjaW5jbHVkZSAiaW50Yy5oIg0KKyNpbmNsdWRlICJjb21waWxlci5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBwb3J0TE9ORw0KKw0KKyNkZWZpbmUgVEFTS19ERUxBWV9NUyh4KSAgICggKHgpICAgICAgICAvcG9ydFRJQ0tfUkFURV9NUyApDQorI2RlZmluZSBUQVNLX0RFTEFZX1MoeCkgICAgKCAoeCkqMTAwMCAgIC9wb3J0VElDS19SQVRFX01TICkNCisjZGVmaW5lIFRBU0tfREVMQVlfTUlOKHgpICAoICh4KSo2MCoxMDAwL3BvcnRUSUNLX1JBVEVfTVMgKQ0KKw0KKyNkZWZpbmUgY29uZmlnVElDS19UQ19JUlEgICAgICAgICAgICAgQVRQQVNURTIoQVZSMzJfVENfSVJRLCBjb25maWdUSUNLX1RDX0NIQU5ORUwpDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMgICAgICAoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KKyNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgIHtfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpO30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBJTlRDLXNwZWNpZmljLiAqLw0KKyNkZWZpbmUgRElTQUJMRV9BTExfRVhDRVBUSU9OUygpICAgIERpc2FibGVfZ2xvYmFsX2V4Y2VwdGlvbigpDQorI2RlZmluZSBFTkFCTEVfQUxMX0VYQ0VQVElPTlMoKSAgICAgRW5hYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KKw0KKyNkZWZpbmUgRElTQUJMRV9BTExfSU5URVJSVVBUUygpICAgIERpc2FibGVfZ2xvYmFsX2ludGVycnVwdCgpDQorI2RlZmluZSBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICAgRW5hYmxlX2dsb2JhbF9pbnRlcnJ1cHQoKQ0KKw0KKyNkZWZpbmUgRElTQUJMRV9JTlRfTEVWRUwoaW50X2xldikgIERpc2FibGVfaW50ZXJydXB0X2xldmVsKGludF9sZXYpDQorI2RlZmluZSBFTkFCTEVfSU5UX0xFVkVMKGludF9sZXYpICAgRW5hYmxlX2ludGVycnVwdF9sZXZlbChpbnRfbGV2KQ0KKw0KKw0KKy8qDQorICogRGVidWcgdHJhY2UuDQorICogQWN0aXZhdGVkIGlmIGFuZCBvbmx5IGlmIGNvbmZpZ0RCRyBpcyBub256ZXJvLg0KKyAqIFByaW50cyBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gc3Rkb3V0Lg0KKyAqIFRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIGFyZSBvdXRwdXQgd2l0aCBhIGNvbG9uIGJlZm9yZQ0KKyAqIHRoZSBmb3JtYXR0ZWQgc3RyaW5nLg0KKyAqIEEgY2FycmlhZ2UgcmV0dXJuIGFuZCBhIGxpbmVmZWVkIGFyZSBhcHBlbmRlZCB0byB0aGUgb3V0cHV0Lg0KKyAqIHN0ZG91dCBpcyByZWRpcmVjdGVkIHRvIHRoZSBVU0FSVCBjb25maWd1cmVkIGJ5IGNvbmZpZ0RCR19VU0FSVC4NCisgKiBUaGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBzdGFuZGFyZCBwcmludGYgZnVuY3Rpb24uDQorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLg0KKyAqIFNIQUxMIE5PVCBCRSBDQUxMRUQgRlJPTSBXSVRISU4gQU4gSU5URVJSVVBUIGFzIGZwdXRzIGFuZCBwcmludGYgdXNlIG1hbGxvYywNCisgKiB3aGljaCBpcyBpbnRlcnJ1cHQtdW5zYWZlIHdpdGggdGhlIGN1cnJlbnQgX19tYWxsb2NfbG9jayBhbmQgX19tYWxsb2NfdW5sb2NrLg0KKyAqLw0KKyNpZiBjb25maWdEQkcNCisjZGVmaW5lIHBvcnREQkdfVFJBQ0UoLi4uKSBcDQore1wNCisgIGZwdXRzKF9fRklMRV9fICI6IiBBU1RSSU5HWihfX0xJTkVfXykgIjogIiwgc3Rkb3V0KTtcDQorICBwcmludGYoX19WQV9BUkdTX18pO1wNCisgIGZwdXRzKCJcclxuIiwgc3Rkb3V0KTtcDQorfQ0KKyNlbHNlDQorI2RlZmluZSBwb3J0REJHX1RSQUNFKC4uLikNCisjZW5kaWYNCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KKw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KKw0KKw0KKy8qIEFkZGVkIGFzIHRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gRnJlZVJUT1MuICovDQorZXh0ZXJuIHZvaWQgKnB2UG9ydFJlYWxsb2MoIHZvaWQgKnB2LCBzaXplX3QgeFNpemUgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQorDQorLyoNCisgKiBSZXN0b3JlIENvbnRleHQgZm9yIGNhc2VzIG90aGVyIHRoYW4gSU5UaS4NCisgKi8NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSEkoJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUjAtUjcgc2hvdWxkIG5vdCBiZSB1c2VkIGJlbG93IHRoaXMgbGluZSAqLwkJCQkJCQkJCQlcDQorICAgIC8qIFNraXAgUEMgYW5kIFNSICh3aWxsIGRvIGl0IGF0IHRoZSBlbmQpICovCQkJCQkJCQkJCVwNCisgICAgInN1YiAgICAgc3AsIC0yKjQJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFI4Li5SMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHI4LXIxMiwgbHIJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSBTUiAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbLTgqNF1cblx0IiAvKiBSMCBpcyBtb2RpZmllZCwgaXMgcmVzdG9yZWQgbGF0ZXIuICovCQkJCQlcDQorICAgICJtdHNyICAgICVbU1JdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgcjAgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWy05KjRdCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFBDICovCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHBjLCBzcFstNyo0XSIgLyogR2V0IFBDIGZyb20gc3RhY2sgLSBQQyBpcyB0aGUgN3RoIHJlZ2lzdGVyIHNhdmVkICovCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW3VsQ3JpdGljYWxOZXN0aW5nXSAiaSIgKCZ1bENyaXRpY2FsTmVzdGluZyksCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCVwNCisgICAgICBbU1JdICJpIiAoQVZSMzJfU1IpCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisNCisvKg0KKyAqIHBvcnRTQVZFX0NPTlRFWFRfSU5UKCkgYW5kIHBvcnRSRVNUT1JFX0NPTlRFWFRfSU5UKCk6IGZvciBJTlQwLi4zIGV4Y2VwdGlvbnMuDQorICogcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpIGFuZCBwb3J0UkVTVE9SRV9DT05URVhUX1NDQUxMKCk6IGZvciB0aGUgc2NhbGwgZXhjZXB0aW9uLg0KKyAqDQorICogSGFkIHRvIG1ha2UgZGlmZmVyZW50IHZlcnNpb25zIGJlY2F1c2UgcmVnaXN0ZXJzIHNhdmVkIG9uIHRoZSBzeXN0ZW0gc3RhY2sNCisgKiBhcmUgbm90IHRoZSBzYW1lIGJldHdlZW4gSU5UMC4uMyBleGNlcHRpb25zIGFuZCB0aGUgc2NhbGwgZXhjZXB0aW9uLg0KKyAqLw0KKw0KKy8vIFRhc2sgY29udGV4dCBzdGFjayBsYXlvdXQ6DQorICAvLyBSOCAgKCopDQorICAvLyBSOSAgKCopDQorICAvLyBSMTAgKCopDQorICAvLyBSMTEgKCopDQorICAvLyBSMTIgKCopDQorICAvLyBSMTQvTFIgKCopDQorICAvLyBSMTUvUEMgKCopDQorICAvLyBTUiAoKikNCisgIC8vIFIwDQorICAvLyBSMQ0KKyAgLy8gUjINCisgIC8vIFIzDQorICAvLyBSNA0KKyAgLy8gUjUNCisgIC8vIFI2DQorICAvLyBSNw0KKyAgLy8gdWxDcml0aWNhbE5lc3RpbmcNCisvLyAoKikgYXV0b21hdGljYWxseSBkb25lIGZvciBJTlQwLi5JTlQzLCBidXQgbm90IGZvciBTQ0FMTA0KKw0KKy8qDQorICogVGhlIElTUiB1c2VkIGZvciB0aGUgc2NoZWR1bGVyIHRpY2sgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBjb29wZXJhdGl2ZSBvcg0KKyAqIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLg0KKyAqLw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQorDQorLyoNCisgKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpIGZvciBPUyBUaWNrIGV4Y2VwdGlvbi4NCisgKi8NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG0gICAgIC0tc3AsIHIwLXI3Iik7CQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJXA0KKyAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHNhdmUuICovCQkJCQkJCQkJCQkJCVwNCit9DQorDQorLyoNCisgKiBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpIGZvciBUaWNrIGV4Y2VwdGlvbi4NCisgKi8NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjdcblx0IgkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JXA0KKyAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgcmVzdG9yZS4gKi8JCQkJCQkJCQkJCQlcDQorICAgICJyZXRlIgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNlbHNlDQorDQorLyoNCisgKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpIGZvciBPUyBUaWNrIGV4Y2VwdGlvbi4NCisgKi8NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXaGVuIHdlIGNvbWUgaGVyZSAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZWdpc3RlcnMgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiBoYWQgYWxyZWFkeSBiZWVuIHB1c2hlZCB0byBzeXN0ZW0gc3RhY2sgKi8JCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8JCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pXG5cdCIJCQkJCQkJCQkJCQkJCVwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKVxuXHQiCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIC0tc3AsIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCVwNCisgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJXA0KKyAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRhc2sgc3dpdGNoIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzdGFjayAqLwkJXA0KKyAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLwlcDQorICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQlcDQorICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8JCQkJCQkJCQlcDQorICAgIC8qIFNvLCBzaW5jZSB3ZSB3b24ndCBkbyBhIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBpdCdzIG9mIG5vIHVzZSB0byBzYXZlIFNQLiAqLwkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbOSo0XVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi8JCQkJCQkJCQkJCQlcDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDNcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovCQkJCQkJCQkJXA0KKyAgICAiY3AudyAgICByMCwgMVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi8JCQkJCQlcDQorICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLwkJCQkJXA0KKyAgICAvKiBOT1RFOiB3ZSBkb24ndCBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gaGVyZSBiZWNhdXNlIGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8JCQkJXA0KKyAgICAvKiBNVVNUIHBlcmZvcm0gYSBTQVZFX0NPTlRFWFQvUkVTVE9SRV9DT05URVhUIGluIHRoZSBzYW1lIHdheSBhcyAqLwkJCQkJCQlcDQorICAgIC8qIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UL3BvcnRfUkVTVE9SRV9DT05URVhUX09TX0lOVCBpZiB0aGV5IGNhbGwgT1MgZnVuY3Rpb25zLiAqLwkJCVwNCisgICAgLyogPT4gYWxsIGludGVycnVwdCBoYW5kbGVycyBtdXN0IHVzZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUi9wb3J0RVhJVF9TV0lUQ0hJTkdfSVNSLiAqLwkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKVxuXHQiCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKVxuXHQiCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjhbMF1cblx0IgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcFxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdOiIJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW3VsQ3JpdGljYWxOZXN0aW5nXSAiaSIgKCZ1bENyaXRpY2FsTmVzdGluZyksCQkJCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCQkJCVwNCisgICAgICBbTElORV0gImkiIChfX0xJTkVfXykJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKy8qDQorICogcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKSBmb3IgVGljayBleGNlcHRpb24uDQorICovDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwkJXA0KKyAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8JXA0KKyAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJCVwNCisgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovCQkJXA0KKyAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JCVwNCisgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQkJXA0KKyAgLyogd2lsbCBqdXN0IGJlIHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIG5vIHdheSEhISAqLwkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF1cblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovCQkJCQkJCQkJCQkJXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzXG5cdCIgLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLwkJCQkJCQkJCVwNCisgICAgImNwLncgICAgcjAsIDFcblx0IiAvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovCQkJCQkJXA0KKyAgICAiYnJoaSAgICBMQUJFTF9JTlRfU0tJUF9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXSIJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW0xJTkVdICJpIiAoX19MSU5FX18pCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBFbHNlICovCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIGJlY2F1c2UgaXQgaXMgaGVyZSBzYWZlLCBhbHdheXMgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKSBzaW5jZSBhbiBPUyB0aWNrIG9jY3VycmVkLiAqLwkJXA0KKyAgLyogQSBjcml0aWNhbCBzZWN0aW9uIGhhcyB0byBiZSB1c2VkIGhlcmUgYmVjYXVzZSB2VGFza1N3aXRjaENvbnRleHQgaGFuZGxlcyBGcmVlUlRPUyBsaW5rZWQgbGlzdHMuICovXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHBvcnRFWElUX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JTlRfU0tJUF9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXToJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSEkoJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBOb3csIHRoZSBzdGFjayBzaG91bGQgYmUgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQiksCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtMSU5FXSAiaSIgKF9fTElORV9fKQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorI2VuZGlmDQorDQorDQorLyoNCisgKiBwb3J0U0FWRV9DT05URVhUX1NDQUxMKCkgZm9yIFN1cGVydmlzb3JDQUxMIGV4Y2VwdGlvbi4NCisgKg0KKyAqIE5PVEU6IHRhc2tZSUVMRCgpKD09IFNDQUxMKSBNVVNUIE5PVCBiZSBjYWxsZWQgaW4gYSBtb2RlID4gc3VwZXJ2aXNvciBtb2RlLg0KKyAqDQorICovDQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX1NDQUxMKCkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdhcm5pbmc6IHRoZSBzdGFjayBsYXlvdXQgYWZ0ZXIgU0NBTEwgZG9lc24ndCBtYXRjaCB0aGUgb25lIGFmdGVyIGFuIGludGVycnVwdC4gKi8JCVwNCisgIC8qIElmIFNSW00yOk0wXSA9PSAwMDEgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qICAgIFBDIGFuZCBTUiBhcmUgb24gdGhlIHN0YWNrLiAgKi8JCQkJCQkJCQkJCQkJCVwNCisgIC8qIEVsc2UgKG90aGVyIG1vZGVzKSAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogICAgTm90aGluZyBvbiB0aGUgc3RhY2suICovCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV0FSTklORyBOT1RFOiB0aGUgZWxzZSBjYXNlIGNhbm5vdCBoYXBwZW4gYXMgaXQgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIHRvIGNhbGwgKi8JCVwNCisgIC8qIHZUYXNrRGVsYXkoKSBhbmQgdlRhc2tEZWxheVVudGlsKCkgT1MgZnVuY3Rpb25zICh0aGF0IHJlc3VsdCBpbiBhIHRhc2tZaWVsZCgpKSAqLwkJXA0KKyAgLyogaW4gYW4gaW50ZXJydXB0fGV4Y2VwdGlvbiBoYW5kbGVyLiAqLwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGluIG9yZGVyIHRvIHNhdmUgUjAtUjcgKi8JCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdWIgICAgIHNwLCA2KjQJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogU2F2ZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogaW4gb3JkZXIgdG8gc2F2ZSBSOC1SMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCVwNCisgICAgLyogZG8gbm90IHVzZSBTUCBpZiBpbnRlcnJ1cHRzIG9jY3VycywgU1AgbXVzdCBiZSBsZWZ0IGF0IGJvdHRvbSBvZiBzdGFjayAqLwkJCVwNCisgICAgInN1YiAgICAgcjcsIHNwLC0xNio0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogQ29weSBQQyBhbmQgU1IgaW4gb3RoZXIgcGxhY2VzIGluIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjdbLTIqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgKi9cDQorICAgICJzdC53ICAgIHI3Wy04KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBTUiAqL1wNCisgICAgImxkLncgICAgcjAsIHI3Wy0xKjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFBDICovXA0KKyAgICAic3QudyAgICByN1stNyo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvcHkgUEMgKi9cDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjguLlIxMiBhbmQgTFIgb24gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tcjcsIHI4LXIxMiwgbHIJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIEFycml2aW5nIGhlcmUgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YWNrIG9yZ2FuaXphdGlvbnM6ICovCQkJCQkJCVwNCisgICAgLyogUjguLlIxMiwgTFIsIFBDLCBTUiwgUjAuLlI3LiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBOb3cgd2UgY2FuIGZpbmFsaXplIHRoZSBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFt1bENyaXRpY2FsTmVzdGluZ10gImkiICgmdWxDcml0aWNhbE5lc3RpbmcpCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBEaXNhYmxlIHRoZSBpdHMgd2hpY2ggbWF5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2ggKGkuZS4gY2F1c2UgYSBjaGFuZ2Ugb2YgKi8JCQlcDQorICAvKiBweEN1cnJlbnRUQ0IpLiAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEJhc2ljYWxseSwgYWxsIGFjY2Vzc2VzIHRvIHRoZSBweEN1cnJlbnRUQ0Igc3RydWN0dXJlIHNob3VsZCBiZSBwdXQgaW4gYSAqLwkJCVwNCisgIC8qIGNyaXRpY2FsIHNlY3Rpb24gYmVjYXVzZSBpdCBpcyBhIGdsb2JhbCBzdHJ1Y3R1cmUuICovCQkJCQkJCQkJXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU3RvcmUgU1AgaW4gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHhDdXJyZW50VENCICovCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQikJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKg0KKyAqIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBmb3IgU3VwZXJ2aXNvckNBTEwgZXhjZXB0aW9uLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXSIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQikJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogTGVhdmUgcHhDdXJyZW50VENCIHZhcmlhYmxlIGFjY2VzcyBjcml0aWNhbCBzZWN0aW9uICovCQkJCQkJCQkJXA0KKyAgcG9ydEVYSVRfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBza2lwIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBkbyBub3QgdXNlIFNQIGlmIGludGVycnVwdHMgb2NjdXJzLCBTUCBtdXN0IGJlIGxlZnQgYXQgYm90dG9tIG9mIHN0YWNrICovCQkJXA0KKyAgICAic3ViICAgICByNywgc3AsIC0xMCo0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSByOC1yMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgcjcrKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUkVUUyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZXh0cmEgUEMgYW5kIFNSIHJlc3RvcmUuICovCQkJCQkJCQlcDQorICAgIC8qIFNvLCB3ZSBoYXZlIHRvIHByZXBhcmUgdGhlIHN0YWNrIGZvciB0aGlzLiAqLwkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCByN1stOCo0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiAqL1wNCisgICAgInN0LncgICAgcjdbLTIqNF0sIHIwCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb3B5IFNSICovXA0KKyAgICAibGQudyAgICByMCwgcjdbLTcqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgUEMgKi9cDQorICAgICJzdC53ICAgIHI3Wy0xKjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBQQyAqL1wNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3ViICAgICBzcCwgLTYqNAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0cyIJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFt1bENyaXRpY2FsTmVzdGluZ10gImkiICgmdWxDcml0aWNhbE5lc3RpbmcpCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKw0KKy8qDQorICogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCisgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCisgKi8NCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKy8qDQorICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCisgKiBpcyByZXF1aXJlZCBmcm9tIHRoZSBJU1IuDQorICovDQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RtICAgICAtLXNwLCByMC1yNyIpOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJCVwNCisgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKg0KKyAqIElucHV0IHBhcmFtZXRlcjogaW4gUjEyLCBib29sZWFuLiBQZXJmb3JtIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCkgaWYgMQ0KKyAqLw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZWxzZQ0KKw0KKy8qDQorICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCisgKiBpcyByZXF1aXJlZCBmcm9tIHRoZSBJU1IuDQorICovDQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXaGVuIHdlIGNvbWUgaGVyZSAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVnaXN0ZXJzIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgaGFkIGFscmVhZHkgYmVlbiBwdXNoZWQgdG8gc3lzdGVtIHN0YWNrICovCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgInN0bSAgICAgLS1zcCwgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovCVwNCisgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8JXA0KKyAgICAvKiBsZXZlbCBhbmQgYWxsb3cgb3RoZXIgbG93ZXIgaW50ZXJydXB0IGxldmVsIHRvIG9jY3VyKS4gKi8JCQkJCQkJCQlcDQorICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovCQlcDQorICAgIC8qIGN1cnJlbnRseSBsb29rcyBsaWtlICh3ZSBkb24ndCBrbm93IHdoYXQgdGhlIGludGVycnVwdGVkIGludGVycnVwdCBoYW5kbGVyIHdhcyBkb2luZykuICovCVwNCisgICAgLyogU2F2aW5nIFNQIGluIHB4Q3VycmVudFRDQiBhbmQgdGhlbiBsYXRlciByZXN0b3JpbmcgaXQgKHRoaW5raW5nIHJlc3RvcmluZyB0aGUgdGFzaykgKi8JCVwNCisgICAgLyogd2lsbCBqdXN0IGJlIHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIG5vIHdheSEhISAqLwkJCQkJCQkJCVwNCisgICAgLyogU28sIHNpbmNlIHdlIHdvbid0IGRvIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCksIGl0J3Mgb2Ygbm8gdXNlIHRvIHNhdmUgU1AuICovCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcFs5KjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KKyAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovXA0KKyAgICAiYnJoaSAgICBMQUJFTF9JU1JfU0tJUF9TQVZFX0NPTlRFWFRfJVtMSU5FXQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLwkJCVwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByMFswXSwgc3AJCQkJCQkJCQkJCQkJCQkJCQlcbiJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JU1JfU0tJUF9TQVZFX0NPTlRFWFRfJVtMSU5FXToiCQkJCQkJCQkJCQkJCVwNCisgICAgOgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW3VsQ3JpdGljYWxOZXN0aW5nXSAiaSIgKCZ1bENyaXRpY2FsTmVzdGluZyksCQkJCQkJCQkJCQlcDQorICAgICAgW3B4Q3VycmVudFRDQl0gImkiICgmcHhDdXJyZW50VENCKSwJCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtMSU5FXSAiaSIgKF9fTElORV9fKQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKg0KKyAqIElucHV0IHBhcmFtZXRlcjogaW4gUjEyLCBib29sZWFuLiBQZXJmb3JtIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCkgaWYgMQ0KKyAqLw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovCQlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCQlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCQlcDQorICAgIC8qIEluIHRoaXMgY2FzZSBpdCdzIG9mIG5vIHVzZSB0byBzd2l0Y2ggY29udGV4dCBhbmQgcmVzdG9yZSBhIG5ldyBTUCBiZWNhdXNlIHdlIHB1cnBvc2VkbHkgKi8JCVwNCisgICAgLyogZGlkIG5vdCBwcmV2aW91c2x5IHNhdmUgU1AgaW4gaXRzIFRDQi4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi9cDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDMJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lTUl9TS0lQX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gY2FsbCAqLwkJCQkJCQkJCVwNCisgICAgLyogdlRhc2tTd2l0Y2hDb250ZXh0KCkgYXMgdGhlIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiAqLwkJCQkJCQkJXA0KKyAgICAvKiBzYXZlZC4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiY3AudyAgICByMTIsIDEJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ2hlY2sgaWYgU3dpdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQuICovXA0KKyAgICAiYnJuZSAgICBMQUJFTF9JU1JfUkVTVE9SRV9DT05URVhUXyVbTElORV0iCQkJCQkJCQkJCQkJXA0KKyAgICA6CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbTElORV0gImkiIChfX0xJTkVfXykJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqLwlcDQorICBwb3J0RU5URVJfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBwb3J0RVhJVF9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lTUl9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXToJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoIGV2ZXIgdGFzayBpcyBub3cgdGhlIGhpZ2hlc3QgKi8JCQkJCQkJXA0KKyAgICAvKiBwcmlvcml0eSB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8JCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyVbTElORV06CQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIE5vdywgdGhlIHN0YWNrIHNob3VsZCBiZSBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSICAqLwkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCQlcDQorICAgICAgW0xJTkVdICJpIiAoX19MSU5FX18pCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNlbmRpZg0KKw0KKw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgIHtfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNjYWxsIik7fQ0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0NPUlRVU19BUFMzL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThjZmRmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0LmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBLZXJuZWwgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBNYWNoaW5lIGluY2x1ZGVzICovDQorI2luY2x1ZGUgPG1hY2hpbmUvY291bnRlci5oPg0KKyNpbmNsdWRlIDxtYWNoaW5lL2ljLmg+DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIGluaXRpYWwgUFNSIGhhcyB0aGUgUHJldmlvdXMgSW50ZXJydXB0IEVuYWJsZWQgKFBJRU4pIGZsYWcgc2V0LiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfUFNSCQkJKCAweDAwMDIwMDAwICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFBlcmZvcm0gYW55IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKiBweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIE1ha2Ugc3BhY2Ugb24gdGhlIHN0YWNrIGZvciB0aGUgY29udGV4dCAtIHRoaXMgbGVhdmVzIGEgY291cGxlIG9mIHNwYWNlcw0KKwllbXB0eS4gICovDQorCXB4VG9wT2ZTdGFjayAtPSAyMDsNCisNCisJLyogRmlsbCB0aGUgcmVnaXN0ZXJzIHdpdGgga25vd24gdmFsdWVzIHRvIGFzc2lzdCBkZWJ1Z2dpbmcuICovDQorCXB4VG9wT2ZTdGFja1sgMTYgXSA9IHBvcnRLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZX0xFVkVMOw0KKwlweFRvcE9mU3RhY2tbIDE1IF0gPSBwb3J0SU5JVElBTF9QU1I7DQorCXB4VG9wT2ZTdGFja1sgMTQgXSA9ICggdW5zaWduZWQgbG9uZyApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrWyAxMyBdID0gMHgwMDAwMDAwMFVMOyAvKiBSMTUuICovDQorCXB4VG9wT2ZTdGFja1sgMTIgXSA9IDB4MDAwMDAwMDBVTDsgLyogUjE0LiAqLw0KKwlweFRvcE9mU3RhY2tbIDExIF0gPSAweDBkMGQwZDBkVUw7DQorCXB4VG9wT2ZTdGFja1sgMTAgXSA9IDB4MGMwYzBjMGNVTDsNCisJcHhUb3BPZlN0YWNrWyA5IF0gPSAweDBiMGIwYjBiVUw7DQorCXB4VG9wT2ZTdGFja1sgOCBdID0gMHgwYTBhMGEwYVVMOw0KKwlweFRvcE9mU3RhY2tbIDcgXSA9IDB4MDkwOTA5MDlVTDsNCisJcHhUb3BPZlN0YWNrWyA2IF0gPSAweDA4MDgwODA4VUw7DQorCXB4VG9wT2ZTdGFja1sgNSBdID0gMHgwNzA3MDcwN1VMOw0KKwlweFRvcE9mU3RhY2tbIDQgXSA9IDB4MDYwNjA2MDZVTDsNCisJcHhUb3BPZlN0YWNrWyAzIF0gPSAweDA1MDUwNTA1VUw7DQorCXB4VG9wT2ZTdGFja1sgMiBdID0gMHgwNDA0MDQwNFVMOw0KKwlweFRvcE9mU3RhY2tbIDEgXSA9IDB4MDMwMzAzMDNVTDsNCisJcHhUb3BPZlN0YWNrWyAwIF0gPSAoIHVuc2lnbmVkIGxvbmcgKSBwdlBhcmFtZXRlcnM7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBFbmFibGUgdGhlIFRSQVAgeWllbGQuICovDQorCWlycVsgcG9ydElSUV9UUkFQX1lJRUxEIF0uaWVuID0gMTsNCisJaXJxWyBwb3J0SVJRX1RSQVBfWUlFTEQgXS5pcGwgPSBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWV9MRVZFTDsNCisNCisJLyogSW50ZWdyYXRlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcjogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLw0KKwlpYy0+aWVuID0gMTsNCisNCisJLyogUmVzdG9yZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHRzICovDQorCWNvdW50ZXIxLT5yZWxvYWQgPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMTsNCisJY291bnRlcjEtPnZhbHVlID0gY291bnRlcjEtPnJlbG9hZDsNCisJY291bnRlcjEtPm1hc2sgPSAxOw0KKw0KKwkvKiBTZXQgdGhlIElSUSBIYW5kbGVyIHByaW9yaXR5IGFuZCBlbmFibGUgaXQuICovDQorCWlycVsgSVJRX0NPVU5URVIxIF0uaWVuID0gMTsNCisJaXJxWyBJUlFfQ09VTlRFUjEgXS5pcGwgPSBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWV9MRVZFTDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVHJhcCAzMSBoYW5kbGVyLiAqLw0KK3ZvaWQgaW50ZXJydXB0MzFfaGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCBpbnRlcnJ1cHQzMV9oYW5kbGVyKCB2b2lkICkNCit7DQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJX19hc20gdm9sYXRpbGUgKCAiY2FsbCB2VGFza1N3aXRjaENvbnRleHQiICk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc1RpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpOw0KK3N0YXRpYyB2b2lkIHBydlByb2Nlc3NUaWNrKCB2b2lkICkNCit7DQorCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCSNlbmRpZg0KKw0KKwkvKiBDbGVhciB0aGUgVGljayBJbnRlcnJ1cHQuICovDQorCWNvdW50ZXIxLT5leHBpcmVkID0gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGltZXIgMSBpbnRlcnJ1cHQgaGFuZGxlciwgdXNlZCBmb3IgdGljayBpbnRlcnJ1cHQuICovDQordm9pZCBpbnRlcnJ1cHQ3X2hhbmRsZXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KK3ZvaWQgaW50ZXJydXB0N19oYW5kbGVyKCB2b2lkICkNCit7DQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJcHJ2UHJvY2Vzc1RpY2soKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdGhpbmcgdG8gZG8uIFVubGlrZWx5IHRvIHdhbnQgdG8gZW5kLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0NPUlRVU19BUFMzL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzAwNzNkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE4OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaW5jbHVkZSA8bWFjaGluZS9pYy5oPg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQkJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkJCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCQkJCTQNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJCQkJCV9fYXNtX18gdm9sYXRpbGUgKCAibW92IHIwLCByMCIgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCCQkJCQkxDQorI2RlZmluZSBwb3J0SVJRX1RSQVBfWUlFTEQJCQkJCQkJMzENCisjZGVmaW5lIHBvcnRLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZX0xFVkVMCQkJMA0KKyNkZWZpbmUgcG9ydFNZU1RFTV9JTlRFUlJVUFRfUFJJT1JJVFlfTEVWRUwJCQkwDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQlhc20gX192b2xhdGlsZV9fKCAiIHRyYXAgIyUwICI6OiJpIihwb3J0SVJRX1RSQVBfWUlFTEQpOiJtZW1vcnkiKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgaWMtPmNwbCA9ICggcG9ydFNZU1RFTV9JTlRFUlJVUFRfUFJJT1JJVFlfTEVWRUwgKyAxICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIGljLT5jcGwgPSBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWV9MRVZFTA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJXA0KKwlhc20gX192b2xhdGlsZV9fCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJzdWIJcjEsICM2OAkJCQkJXG4iIC8qIE1ha2Ugc3BhY2Ugb24gdGhlIHN0YWNrIGZvciB0aGUgY29udGV4dC4gKi8JCQkJCQkJXA0KKwkJInN0ZAlyMiwgW3IxXSArIAkwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJzdHEJcjQsIFtyMV0gKwk4CQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJzdHEJcjgsIFtyMV0gKwkyNAkJCVxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkic3RxCXIxMiwgW3IxXSArCTQwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcjYsIHJ0dAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcjcsIHBzcgkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJzdGQJcjYsIFtyMV0gKwk1NgkJCVxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkibW92aGkJcjIsICMxNjM4NAkJCQlcbiIJLyogU2V0IHRoZSBwb2ludGVyIHRvIHRoZSBJQy4gKi8JCQkJCQkJCQkJXA0KKwkJImxkdWIJcjMsIFtyMl0gKyAyCQkJXG4iCS8qIExvYWQgdGhlIGN1cnJlbnQgaW50ZXJydXB0IG1hc2suICovCQkJCQkJCQkJXA0KKwkJInN0CQlyMywgW3IxXSsgNjQJCQlcbiIJLyogU3RvcmUgdGhlIGludGVycnVwdCBtYXNrIG9uIHRoZSBzdGFjay4gKi8gCQkJCQkJCVwNCisJCSJsZAkJcjIsIFtyMF0rc2hvcnQocHhDdXJyZW50VENCKQlcbiIJLyogTG9hZCB0aGUgcG9pbnRlciB0byB0aGUgVENCLiAqLwkJCQkJCQkJXA0KKwkJInN0CQlyMSwgW3IyXQkJCQlcbiIJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciBpbnRvIHRoZSBUQ0IuICovCQkJCQkJCQlcDQorCQkibW92CXIxNCwgcjEJCQkJCVxuIgkvKiBDb21waWxlciBleHBlY3RzIHIxNCB0byBiZSBzZXQgdG8gdGhlIGZ1bmN0aW9uIHN0YWNrLiAqLwkJCQlcDQorCSk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJYXNtIF9fdm9sYXRpbGVfXygJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkibGQJCXIyLCBbcjBdK3Nob3J0KHB4Q3VycmVudFRDQikJXG4iCS8qIExvYWQgdGhlIFRDQiB0byBmaW5kIHRoZSBzdGFjayBwb2ludGVyIGFuZCBjb250ZXh0LiAqLwkJXA0KKwkJImxkCQlyMSwgW3IyXQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJIm1vdmhpCXIyLCAjMTYzODQJCQkJXG4iCS8qIFNldCB0aGUgcG9pbnRlciB0byB0aGUgSUMuICovCQkJCQkJCQkJCVwNCisJCSJsZAkJcjMsIFtyMV0gKyA2NAkJCVxuIgkvKiBMb2FkIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzay4gKi8JCQkJCQkJCQlcDQorCQkic3RiCXIzLCBbcjJdICsgMiAgCQkJXG4iCS8qIFNldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgbWFzayB0byBiZSB0aGUgcHJldmlvdXMuICovCQkJCVwNCisJCSJsZGQJcjYsIFtyMV0gKyA1NgkJCVxuIgkvKiBSZXN0b3JlIGNvbnRleHQuICovCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcnR0LCByNgkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcHNyLCByNwkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZGQJcjIsIFtyMV0gKyAwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZHEJcjQsIFtyMV0gKwk4CQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZHEJcjgsIFtyMV0gKwkyNAkJCVxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkibGRxCXIxMiwgW3IxXSArCTQwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJhZGQJcjEsICM2OAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJydGkJCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzODcyMAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydC5jCkBAIC0wLDAgKzEsMTczIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBLZXJuZWwgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisjZGVmaW5lIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4NDAwMCApDQorDQorLyogU3VwZXJ2aXNvciBtb2RlIHNldC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NUQVRVU19SRUdJU1RFUgkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMDAwKQ0KKw0KKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIG5lc3RlZCBjYWxscyB0byB0YXNrRU5URVJfQ1JJVElDQUwoKS4gIFRoaXMNCit3aWxsIGJlIHNldCB0byAwIHByaW9yIHRvIHRoZSBmaXJzdCB0YXNrIGJlaW5nIHN0YXJ0ZWQuICovDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdWxDcml0aWNhbE5lc3RpbmcgPSAweDk5OTlVTDsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqIHB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKHBvcnRTVEFDS19UWVBFKSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogRXhjZXB0aW9uIHN0YWNrIGZyYW1lIHN0YXJ0cyB3aXRoIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0SU5JVElBTF9GT1JNQVRfVkVDVE9SIDw8IDE2VUwgKSB8ICggcG9ydElOSVRJQUxfU1RBVFVTX1JFR0lTVEVSICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDsgLypGUCovDQorCXB4VG9wT2ZTdGFjayAtPSAxNDsgLyogQTUgdG8gRDAuICovDQorDQorICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisJdWxDcml0aWNhbE5lc3RpbmcgPSAwVUw7DQorDQorCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoaXMgcG9ydC4gKi8NCisJdkFwcGxpY2F0aW9uU2V0dXBJbnRlcnJ1cHRzKCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwlyZXR1cm4gcGRGQUxTRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KKwl7DQorCQkvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KKwkJY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KKwkJZG8NCisJCXsNCisJCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJaWYoIE1DRl9JTlRDMF9JTlRGUkNMID09IDBVTCApDQorCQkJew0KKwkJCQlicmVhazsNCisJCQl9DQorDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCQl9IHdoaWxlKCAxICk7DQorCX0NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEhhbmRsZXIoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KKw0KKwl1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJCS8qIE5vdGUgdGhpcyB3aWxsIGNsZWFyIGFsbCBmb3JjZWQgaW50ZXJydXB0cyAtIHRoaXMgaXMgZG9uZSBmb3Igc3BlZWQuICovDQorCQlNQ0ZfSU5UQzBfSU5URlJDTCA9IDA7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KK30NCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0NvbGRGaXJlX1YyL3BvcnRhc20uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydGFzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0NvbGRGaXJlX1YyL3BvcnRhc20uUwpAQCAtMCwwICsxLDE1OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCisgKiBQdXJwb3NlOiBMb3dlc3QgbGV2ZWwgcm91dGluZXMgZm9yIGFsbCBDb2xkRmlyZSBwcm9jZXNzb3JzLg0KKyAqDQorICogTm90ZXM6DQorICogDQorICogdWxQb3J0U2V0SVBMKCkgYW5kIG1jZjV4eHhfd3JfY2FjcigpIGNvcGllZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBGcmVlU2NhbGUNCisgKiBzdXBwbGllZCBzb3VyY2UgZmlsZXMuDQorICovDQorDQorICAgIC5nbG9iYWwgdWxQb3J0U2V0SVBMDQorICAgIC5nbG9iYWwgbWNmNXh4eF93cl9jYWNyDQorICAgIC5nbG9iYWwgX19jczNfaXNyX2ludGVycnVwdF84MA0KKyAgICAuZ2xvYmFsIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisNCisgICAgLnRleHQNCisNCisubWFjcm8gcG9ydFNBVkVfQ09OVEVYVA0KKw0KKwlsZWEubAkJKC02MCwgJXNwKSwgJXNwDQorCW1vdmVtLmwJCSVkMC0lZnAsICglc3ApDQorCW1vdmUubAkJcHhDdXJyZW50VENCLCAlYTANCisJbW92ZS5sCQklc3AsICglYTApDQorDQorCS5lbmRtDQorDQorLm1hY3JvIHBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisJbW92ZS5sCQlweEN1cnJlbnRUQ0IsICVhMA0KKwltb3ZlLmwJCSglYTApLCAlc3ANCisJbW92ZW0ubAkJKCVzcCksICVkMC0lZnANCisJbGVhLmwJCSVzcEAoNjApLCAlc3ANCisJcnRlDQorDQorCS5lbmRtDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qDQorICogVGhpcyByb3V0aW5lcyBjaGFuZ2VzIHRoZSBJUEwgdG8gdGhlIHZhbHVlIHBhc3NlZCBpbnRvIHRoZSByb3V0aW5lLg0KKyAqIEl0IGFsc28gcmV0dXJucyB0aGUgb2xkIElQTCB2YWx1ZSBiYWNrLg0KKyAqIENhbGxpbmcgY29udmVudGlvbiBmcm9tIEM6DQorICogICBvbGRfaXBsID0gYXNtX3NldF9pcGwobmV3X2lwbCk7DQorICogRm9yIHRoZSBEaWFiIERhdGEgQyBjb21waWxlciwgaXQgcGFzc2VzIHJldHVybiB2YWx1ZSB0aHJ1IEQwLg0KKyAqIE5vdGUgdGhhdCBvbmx5IHRoZSBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzIG9mIHRoZSBwYXNzZWQNCisgKiB2YWx1ZSBhcmUgdXNlZC4NCisgKi8NCisNCit1bFBvcnRTZXRJUEw6DQorICAgIGxpbmsgICAgQTYsIy04DQorICAgIG1vdmVtLmwgRDYtRDcsKFNQKQ0KKw0KKyAgICBtb3ZlLncgIFNSLEQ3ICAgICAgIC8qIGN1cnJlbnQgc3IgICAgKi8NCisNCisgICAgbW92ZS5sICBENyxEMCAgICAgICAvKiBwcmVwYXJlIHJldHVybiB2YWx1ZSAgKi8NCisgICAgYW5kaS5sICAjMHgwNzAwLEQwICAvKiBtYXNrIG91dCBJUEwgICovDQorICAgIGxzci5sICAgIzgsRDAgICAgICAgLyogSVBMICAgKi8NCisNCisgICAgbW92ZS5sICA4KEE2KSxENiAgICAvKiBnZXQgYXJndW1lbnQgICovDQorICAgIGFuZGkubCAgIzB4MDcsRDYgICAgLyogbGVhc3Qgc2lnbmlmaWNhbnQgdGhyZWUgYml0cyAgKi8NCisgICAgbHNsLmwgICAjOCxENiAgICAgICAvKiBtb3ZlIG92ZXIgdG8gbWFrZSBtYXNrICAgICovDQorDQorICAgIGFuZGkubCAgIzB4MDAwMEY4RkYsRDcgIC8qIHplcm8gb3V0IGN1cnJlbnQgSVBMICAqLw0KKyAgICBvci5sICAgIEQ2LEQ3ICAgICAgICAgICAvKiBwbGFjZSBuZXcgSVBMIGluIHNyICAgKi8NCisgICAgbW92ZS53ICBENyxTUg0KKw0KKyAgICBtb3ZlbS5sIChTUCksRDYtRDcNCisgICAgbGVhICAgICA4KFNQKSxTUA0KKyAgICB1bmxrICAgIEE2DQorICAgIHJ0cw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCittY2Y1eHh4X3dyX2NhY3I6DQorICAgIG1vdmUubCAgNChzcCksZDANCisgICAgLmxvbmcgICAweDRlN2IwMDAyICAvKiBtb3ZlYyBkMCxjYWNyICAgKi8NCisgICAgbm9wDQorICAgIHJ0cw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKiBZaWVsZCBpbnRlcnJ1cHQuICovDQorX19jczNfaXNyX2ludGVycnVwdF84MDoNCisJcG9ydFNBVkVfQ09OVEVYVA0KKwlqc3IgdlBvcnRZaWVsZEhhbmRsZXINCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorICAgIC5lbmQNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM4ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIGxvbmcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTQNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCit1bnNpZ25lZCBwb3J0TE9ORyB1bFBvcnRTZXRJUEwoIHVuc2lnbmVkIHBvcnRMT05HICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXVsUG9ydFNldElQTCggMCApDQorDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisNCitleHRlcm4gdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCXVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdWxQb3J0U2V0SVBMKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpCWFzbSB2b2xhdGlsZSAoIAkibm9wIiApDQorDQorLyogTm90ZSB0aGlzIHdpbGwgb3ZlcndyaXRlIGFsbCBvdGhlciBiaXRzIGluIHRoZSBmb3JjZSByZWdpc3RlciwgaXQgaXMgZG9uZSB0aGlzIHdheSBmb3Igc3BlZWQuICovDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCU1DRl9JTlRDMF9JTlRGUkNMID0gKCAxVUwgPDwgY29uZmlnWUlFTERfSU5URVJSVVBUX1ZFQ1RPUiApOyBwb3J0Tk9QKCk7IHBvcnROT1AoKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKQlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQlcDQorCQkJCQkJCQkJCQkJCXsJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQlwb3J0WUlFTEQoKTsJCQkJCVwNCisJCQkJCQkJCQkJCQkJfQ0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0g4UzIzMjkvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWM2OWRiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnQuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBIOFMgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGludGVycnVwdHMgc2hvdWxkIGJlIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9DQ1IJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAwICkNCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpYyBjb25zdGFudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrIGZyb20gdGhlIFRQVS4gKi8NCisjZGVmaW5lIHBvcnRDTEVBUl9PTl9UR1JBX0NPTVBBUkVfTUFUQ0ggKCAoIHVuc2lnbmVkIGNoYXIgKSAweDIwICkNCisjZGVmaW5lIHBvcnRDTE9DS19ESVZfNjQJCQkJKCAoIHVuc2lnbmVkIGNoYXIgKSAweDAzICkNCisjZGVmaW5lIHBvcnRDTE9DS19ESVYJCQkJCSggKCB1bnNpZ25lZCBsb25nICkgNjQgKQ0KKyNkZWZpbmUgcG9ydFRHUkFfSU5URVJSVVBUX0VOQUJMRQkJKCAoIHVuc2lnbmVkIGNoYXIgKSAweDAxICkNCisjZGVmaW5lIHBvcnRUSU1FUl9DSEFOTkVMCQkJCSggKCB1bnNpZ25lZCBjaGFyICkgMHgwMiApDQorI2RlZmluZSBwb3J0TVNUUDEzCQkJCQkJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgyMDAwICkNCisNCisvKg0KKyAqIFNldHVwIFRQVSBjaGFubmVsIG9uZSBmb3IgdGhlIFJUT1MgdGljayBhdCB0aGUgcmVxdWVzdGVkIGZyZXF1ZW5jeS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgSVNSIHVzZWQgYnkgcG9ydFlJRUxEKCkuIFRoaXMgaXMgaW5zdGFsbGVkIGFzIGEgdHJhcCBoYW5kbGVyLg0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIHNhdmVhbGwsIGludGVycnVwdF9oYW5kbGVyICkgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxWYWx1ZTsNCisNCisJLyogVGhpcyByZXF1aXJlcyBhbiBldmVuIGFkZHJlc3MuICovDQorCXVsVmFsdWUgPSAoIHVuc2lnbmVkIGxvbmcgKSBweFRvcE9mU3RhY2s7DQorCWlmKCB1bFZhbHVlICYgMVVMICkNCisJew0KKwkJcHhUb3BPZlN0YWNrID0gcHhUb3BPZlN0YWNrIC0gMTsNCisJfQ0KKw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHhhYTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweGJiOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4Y2M7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHhkZDsNCisNCisJLyogVGhlIGluaXRpYWwgc3RhY2sgbWltaWNzIGFuIGludGVycnVwdCBzdGFjay4gIEZpcnN0IHRoZXJlIGlzIHRoZSBwcm9ncmFtDQorCWNvdW50ZXIgKDI0IGJpdHMpLiAqLw0KKwl1bFZhbHVlID0gKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlOw0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVsVmFsdWUgJiAweGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwl1bFZhbHVlID4+PSA4VUw7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJdWxWYWx1ZSA+Pj0gOFVMOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCisNCisJLyogRm9sbG93ZWQgYnkgdGhlIENDUi4gKi8JDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfQ0NSOw0KKw0KKwkvKiBOZXh0IGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAtIHdpdGggdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkDQorCWluIEVSMC4gIFRoZSBwYXJhbWV0ZXIgb3JkZXIgbXVzdCBtYXRjaCB0aGF0IHVzZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gdGhlDQorCSJzYXZlYWxsIiBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgdXNlZC4gKi8NCisNCisJLyogRVI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg2NjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDY2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NjY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg2NjsNCisJDQorCS8qIEVSMCAqLw0KKwl1bFZhbHVlID0gKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzOw0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVsVmFsdWUgJiAweGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwl1bFZhbHVlID4+PSA4VUw7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJdWxWYWx1ZSA+Pj0gOFVMOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCXVsVmFsdWUgPj49IDhVTDsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVsVmFsdWUgJiAweGZmICk7DQorCQ0KKwkvKiBFUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExOw0KKw0KKwkvKiBFUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKw0KKwkvKiBFUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKw0KKwkvKiBFUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NDQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KKw0KKwkvKiBFUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1Ow0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCAqIHB4Q3VycmVudFRDQjsNCisNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICBUaGlzDQorCW1pcnJvcnMgdGhlIGZ1bmN0aW9uIGVwaWxvZ3VlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGVuIHRoZQ0KKwkic2F2ZWFsbCIgZnVuY3Rpb24gYXR0cmlidXRlIGlzIHVzZWQuICovDQorCWFzbSB2b2xhdGlsZSAoIA0KKwkJCQkJIk1PVi5MCQlAX3B4Q3VycmVudFRDQiwgRVI2CQkJXG5cdCINCisJCQkJCSJNT1YuTAkJQEVSNiwgRVI3CQkJCQlcblx0Ig0KKwkJCQkJIkxETS5MICAgICAJQFNQKywgKEVSNC1FUjUpCQkJCVxuXHQiDQorCQkJCQkiTERNLkwgICAgIAlAU1ArLCAoRVIwLUVSMykJCQkJXG5cdCINCisJCQkJCSJNT1YuTCAgICAgCUBFUjcrLCBFUjYJCQkJCVxuXHQiDQorCQkJCQkiUlRFCQkJCQkJCQkJXG5cdCINCisJCQkJKTsNCisNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGg4IHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2guICBUaGlzIGlzIGEgdHJhcCBoYW5kbGVyLiAgVGhlICJzYXZlYWxsIiBmdW5jdGlvbg0KKyAqIGF0dHJpYnV0ZSBpcyB1c2VkIHNvIHRoZSBjb250ZXh0IGlzIHNhdmVkIGJ5IHRoZSBjb21waWxlciBwcm9sb2d1ZS4gIEFsbA0KKyAqIHdlIGhhdmUgdG8gZG8gaXMgc2F2ZSB0aGUgc3RhY2sgcG9pbnRlci4NCisgKi8NCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUigpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogVGhlIGludGVycnVwdCBoYW5kbGVyIGluc3RhbGxlZCBmb3IgdGhlIFJUT1MgdGljayBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIA0KKyAqIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuIA0KKyAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorDQorCS8qIA0KKwkgKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgdXNlZCBzbyB0aGUgSVNSIGNhbGxzIHZUYXNrU3dpdGNoQ29udGV4dCgpLg0KKwkgKiBUaGUgZnVuY3Rpb24gcHJvbG9ndWUgc2F2ZXMgdGhlIGNvbnRleHQgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2F2ZQ0KKwkgKiB0aGUgc3RhY2sgcG9pbnRlci4NCisJICovDQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBzYXZlYWxsLCBpbnRlcnJ1cHRfaGFuZGxlciApICk7DQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KKwl7DQorCQlwb3J0U0FWRV9TVEFDS19QT0lOVEVSKCk7DQorCQkNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0LiAqLw0KKwkJVFNSMSAmPSB+MHgwMTsNCisNCisJCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCisJfQ0KKw0KKyNlbHNlDQorDQorCS8qDQorCSAqIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZCBzbyBhbGwgd2UgaGF2ZSB0byBkbyBpcyANCisJICogcGVyaW9kaWNhbGx5IGluY3JlbWVudCB0aGUgdGljay4gIFRoaXMgY2FuIGp1c3QgYmUgYSBub3JtYWwgSVNSIGFuZA0KKwkgKiB0aGUgInNhdmVhbGwiIGF0dHJpYnV0ZSBpcyBub3QgcmVxdWlyZWQuDQorCSAqLw0KKwl2b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggaW50ZXJydXB0X2hhbmRsZXIgKSApOw0KKwl2b2lkIHZUaWNrSVNSKCB2b2lkICkNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0LiAqLw0KKwkJVFNSMSAmPSB+MHgwMTsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGltZXIgMSBjb21wYXJlIG1hdGNoIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgdWxDb21wYXJlTWF0Y2ggPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC8gcG9ydENMT0NLX0RJVjsNCisNCisJLyogVHVybiB0aGUgbW9kdWxlIG9uLiAqLw0KKwlNU1RQQ1IgJj0gfnBvcnRNU1RQMTM7DQorDQorCS8qIENvbmZpZ3VyZSB0aW1lciAxLiAqLw0KKwlUQ1IxID0gcG9ydENMRUFSX09OX1RHUkFfQ09NUEFSRV9NQVRDSCB8IHBvcnRDTE9DS19ESVZfNjQ7DQorDQorCS8qIENvbmZpZ3VyZSB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBmb3IgYSB0aWNrIG9mIGNvbmZpZ1RJQ0tfUkFURV9IWi4gKi8NCisJVEdSMUEgPSB1bENvbXBhcmVNYXRjaDsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIGFuZCBlbmFibGUgdGhlIGludGVycnVwdCAtIHdlIGNhbiBkbyB0aGlzIGhlcmUgYXMgDQorCWludGVycnVwdHMgYXJlIGdsb2JhbGx5IGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCVRJRVIxIHw9IHBvcnRUR1JBX0lOVEVSUlVQVF9FTkFCTEU7DQorCVRTVFIgfD0gcG9ydFRJTUVSX0NIQU5ORUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvSDhTMjMyOS9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvSDhTMjMyOS9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVmMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTczIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0Q0hBUg0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSB2b2xhdGlsZSggIlRSQVBBICMwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSB2b2xhdGlsZSggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJYXNtIHZvbGF0aWxlKCAiQU5EQwkjMHg3RiwgQ0NSIiApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCWFzbSB2b2xhdGlsZSggIk9SQyAgIzB4ODAsIENDUiIgKTsNCisNCisvKiBQdXNoIHRoZSBDQ1IgdGhlbiBkaXNhYmxlIGludGVycnVwdHMuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgCQlhc20gdm9sYXRpbGUoICJTVEMJQ0NSLCBALUVSNyIgKTsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisNCisvKiBQb3AgdGhlIENDUiB0byBzZXQgdGhlIGludGVycnVwdCBtYXNraW5nIGJhY2sgdG8gaXRzIHByZXZpb3VzIHN0YXRlLiAqLw0KKyNkZWZpbmUgIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgCWFzbSB2b2xhdGlsZSggIkxEQyAgQEVSNyssIENDUiIgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKiBDb250ZXh0IHN3aXRjaCBtYWNyb3MuICBUaGVzZSBtYWNyb3MgYXJlIHZlcnkgc2ltcGxlIGFzIHRoZSBjb250ZXh0IA0KK2lzIHNhdmVkIHNpbXBseSBieSBzZWxlY3RpbmcgdGhlIHNhdmVhbGwgYXR0cmlidXRlIG9mIHRoZSBjb250ZXh0IHN3aXRjaCANCitpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcy4gIFRoZXNlIG1hY3JvcyBzYXZlIGFuZCByZXN0b3JlIHRoZSBzdGFjaw0KK3BvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCisNCisjZGVmaW5lIHBvcnRTQVZFX1NUQUNLX1BPSU5URVIoKQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkKiBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUoCQkJCQkJCQkJCQkJXA0KKwkJCQkJIk1PVi5MCUBfcHhDdXJyZW50VENCLCBFUjUJCQlcblx0IiAJXA0KKwkJCQkJIk1PVi5MCUVSNywgQEVSNQkJCQkJXG5cdCIJXA0KKwkJCQkpOwkJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOw0KKw0KKw0KKyNkZWZpbmUJcG9ydFJFU1RPUkVfU1RBQ0tfUE9JTlRFUigpCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQqIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQlcDQorCWFzbSB2b2xhdGlsZSgJCQkJCQkJCQkJCQlcDQorCQkJCQkiTU9WLkwJQF9weEN1cnJlbnRUQ0IsIEVSNQkJCVxuXHQiCVwNCisJCQkJCSJNT1YuTAlARVI1LCBFUjcJCQkJCVxuXHQiCVwNCisJCQkJKTsJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBNYWNyb3MgdG8gYWxsb3cgYSBjb250ZXh0IHN3aXRjaCBmcm9tIHdpdGhpbiBhbiBhcHBsaWNhdGlvbiBJU1IuICovDQorDQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIHBvcnRTQVZFX1NUQUNLX1BPSU5URVIoKTsgew0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUiggeCApCQkJCQkJCVwNCisJaWYoIHggKQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJXA0KKwl9IHBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IQ1MxMi9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhOGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydC5jCkBAIC0wLDAgKzEsMjc2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBHQ0MvSENTMTIgcG9ydCBieSBKZWZmZXJzb24gTCBTbWl0aCwgMjAwNSAqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIFBvcnQgaW5jbHVkZXMgKi8NCisjaW5jbHVkZSA8c3lzL3BvcnRzX2RlZi5oPg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgSENTMTIgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qDQorICogQ29uZmlndXJlIGEgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljayBhdCB0aGUgZnJlcXVlbmN5IHNwZWNpZmllZCANCisgKiB3aXRoaW4gRnJlZVJUT1NDb25maWcuaC4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogTk9URTogSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgbXVzdCBiZSBpbiBub24tYmFua2VkIG1lbW9yeSAtIGFzIGRvZXMgdGhlDQorc2NoZWR1bGVyIHN0YXJ0dXAgZnVuY3Rpb24uICovDQorI2RlZmluZSBBVFRSX05FQVIJX19hdHRyaWJ1dGVfXygobmVhcikpDQorDQorLyogTWFudWFsIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgU1dJIElTUi4gKi8NCisvLyBfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKQ0KK3ZvaWQgQVRUUl9ORUFSIHZQb3J0WWllbGQoIHZvaWQgKTsNCisNCisvKiBUaWNrIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgdGltZXIgSVNSLiAqLw0KKy8vIF9fYXR0cmlidXRlX18oKGludGVycnVwdCkpDQordm9pZCBBVFRSX05FQVIgdlBvcnRUaWNrSW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogRnVuY3Rpb24gaW4gbm9uLWJhbmtlZCBtZW1vcnkgd2hpY2ggYWN0dWFsbHkgc3dpdGNoZXMgdG8gZmlyc3QgdGFzay4gKi8NCitwb3J0QkFTRV9UWVBFIEFUVFJfTkVBUiB4U3RhcnRTY2hlZHVsZXJOZWFyKCB2b2lkICk7DQorDQorLyogQ2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkgY2FuIGJlIG5lc3RlZC4gIFdoZW4gdGhleSBhcmUgbmVzdGVkIHRoZSANCitjcml0aWNhbCBzZWN0aW9uIHNob3VsZCBub3QgYmUgbGVmdCAoaS5lLiBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgcmUtZW5hYmxlZCkNCit1bnRpbCB0aGUgbmVzdGluZyBkZXB0aCByZWFjaGVzIDAuICBUaGlzIHZhcmlhYmxlIHNpbXBseSB0cmFja3MgdGhlIG5lc3RpbmcgDQorZGVwdGguICBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0J3Mgb3duIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggdmFyaWFibGUgc28gDQordXhDcml0aWNhbE5lc3RpbmcgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGZyb20gdGhlIHRhc2sgc3RhY2sgZHVyaW5nIGEgY29udGV4dA0KK3N3aXRjaC4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHg4MDsgIC8vIHVuLWluaXRpYWxpemVkDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisNCisNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMgDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICBJbiB0aGlzIGNhc2UgdGhlIHN0YWNrIGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBIQ1MxMiBSVEkgaW5zdHJ1Y3Rpb24uICovDQorDQorDQorCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSB0YXNrIGZ1bmN0aW9uIGlzIHBsYWNlZCBpbiB0aGUgc3RhY2sgYnl0ZSBhdCBhIHRpbWUuICovDQorCSpweFRvcE9mU3RhY2sgICA9ICggcG9ydFNUQUNLX1RZUEUgKSAqKCAoKHBvcnRTVEFDS19UWVBFICopICgmcHhDb2RlKSApICsgMSApOw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKiggKChwb3J0U1RBQ0tfVFlQRSAqKSAoJnB4Q29kZSkgKSArIDAgKTsNCisNCisJLyogTmV4dCBhcmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gKi8NCisNCisJLyogWSByZWdpc3RlciAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhmZjsNCisJKi0tcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZWU7DQorDQorCS8qIFggcmVnaXN0ZXIgKi8NCisJKi0tcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZGQ7DQorCSotLXB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGNjOw0KKyANCisJLyogQSByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgaGlnaCBieXRlLiAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKiggKChwb3J0U1RBQ0tfVFlQRSAqKSAoJnB2UGFyYW1ldGVycykgKSArIDAgKTsNCisNCisJLyogQiByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgbG93IGJ5dGUuICovDQorCSotLXB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAqKCAoKHBvcnRTVEFDS19UWVBFICopICgmcHZQYXJhbWV0ZXJzKSApICsgMSApOw0KKw0KKwkvKiBDQ1I6IE5vdGUgdGhhdCB3aGVuIHRoZSB0YXNrIHN0YXJ0cyBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBzaW5jZQ0KKwkiSSIgYml0IG9mIENDUiBpcyBjbGVhcmVkICovDQorCSotLXB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDgwOwkJLy8ga2VlcHMgU3RvcCBkaXNhYmxlZCAoTUNVIGRlZmF1bHQpDQorCQ0KKwkvKiB0bXAgc29mdHJlZ3MgdXNlZCBieSBHQ0MuIFZhbHVlcyByaWdodCBub3cgZG9uJ3QJbWF0dGVyLiAqLw0KKwlfX2FzbSgiXG5cDQorCQltb3Z3IF8uZnJhbWUsIDIsLSUwCQkJCQkJCVxuXA0KKwkJbW92dyBfLnRtcCwgMiwtJTAJCQkJCQkJXG5cDQorCQltb3Z3IF8ueiwgMiwtJTAJCQkJCQkJCVxuXA0KKwkJbW92dyBfLnh5LCAyLC0lMAkJCQkJCQlcblwNCisJCTttb3Z3IF8uZDIsIDIsLSUwCQkJCQkJCVxuXA0KKwkJO21vdncgXy5kMSwgMiwtJTAJCQkJCQkJXG5cDQorCSI6ICI9QSIocHhUb3BPZlN0YWNrKSA6ICIwIihweFRvcE9mU3RhY2spICk7DQorDQorCSNpZmRlZiBCQU5LRURfTU9ERUwNCisJCS8qIFRoZSBwYWdlIG9mIHRoZSB0YXNrLiAqLw0KKwkJKi0tcHhUb3BPZlN0YWNrID0gMHgzMDsgICAgICAvLyBjYW4gb25seSBkaXJlY3RseSBzdGFydCBpbiBQUEFHRSAweDMwDQorCSNlbmRpZg0KKwkNCisJLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgaW5pdGlhbGlzZWQgd2l0aCAwIChtZWFuaW5nIG5vdCBpbg0KKwlhIGNyaXRpY2FsIHNlY3Rpb24pLiAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDsNCisNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBIQ1MxMiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogRW5hYmxlIGhhcmR3YXJlIFJUSSB0aW1lciAqLw0KKwkvKiBJZ25vcmVzIGNvbmZpZ1RJQ0tfUkFURV9IWiAqLw0KKwlSVElDVEwgPSAweDUwOwkJCS8vIDE2IE1IeiB4dGFsOiA5NzYuNTYgSHosIDEwMjRtUyANCisJQ1JHSU5UIHw9IDB4ODA7CQkJLy8gUlRJRQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogeFBvcnRTdGFydFNjaGVkdWxlcigpIGRvZXMgbm90IHN0YXJ0IHRoZSBzY2hlZHVsZXIgZGlyZWN0bHkgYmVjYXVzZSANCisJdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSBwcm90b3R5cGUgaXMgcGFydCANCisJb2YgdGhlIGNvbW1vbiBrZXJuZWwgY29kZSwgYW5kIHRoZXJlZm9yZSBjYW5ub3QgdXNlIHRoZSBDT0RFX1NFRyBwcmFnbWEuIA0KKwlJbnN0ZWFkIGl0IHNpbXBseSBjYWxscyB0aGUgbG9jYWxseSBkZWZpbmVkIHhOZWFyU3RhcnRTY2hlZHVsZXIoKSAtIA0KKwl3aGljaCBkb2VzIHVzZSB0aGUgQ09ERV9TRUcgcHJhZ21hLiAqLw0KKw0KKwlzaG9ydCByZWdpc3RlciBkOw0KKwlfX2FzbSAoImptcCAgeFN0YXJ0U2NoZWR1bGVyTmVhcgkJOyB3aWxsIG5ldmVyIHJldHVybiI6ICI9ZCIoZCkpOw0KKwlyZXR1cm4gZDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4U3RhcnRTY2hlZHVsZXJOZWFyKCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICBJbnRlcnJ1cHRzIGFyZQ0KKwlkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJcG9ydElTUl9UQUlMKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZEZBTFNFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIENvbnRleHQgc3dpdGNoIGZ1bmN0aW9ucy4gIFRoZXNlIGFyZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcy4NCisgKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBmb3JjZWQgYnkgY2FsbGluZyBwb3J0WUlFTEQoKS4gIFRoaXMgaXMgdGhlIFNXSQ0KKyAqIGhhbmRsZXIuDQorICovDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCit7DQorCXBvcnRJU1JfSEVBRCgpOw0KKwkvKiBOT1RFOiBUaGlzIGlzIHRoZSB0cmFwIHJvdXRpbmUgKHN3aSkgYWx0aG91Z2ggbm90IGRlZmluZWQgYXMgYSB0cmFwLg0KKwkgICBJdCB3aWxsIGZpbGwgdGhlIHN0YWNrIHRoZSBzYW1lIHdheSBhcyBhbiBJU1IgaW4gb3JkZXIgdG8gbWl4IHByZWVtdGlvbg0KKwkgICBhbmQgY29vcGVyYXRpdmUgeWllbGQuICovDQorDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJcG9ydElTUl9UQUlMKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogUlRPUyB0aWNrIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuICBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIA0KKyAqIGJlaW5nIHVzZWQgdGhlbiB0aGlzIHNpbXBseSBpbmNyZW1lbnRzIHRoZSB0aWNrIGNvdW50LiAgSWYgdGhlIA0KKyAqIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgYSBjb250ZXh0IHN3aXRjaCBjYW4gb2NjdXIuDQorICovDQordm9pZCB2UG9ydFRpY2tJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJcG9ydElTUl9IRUFEKCk7DQorDQorCS8qIENsZWFyIHRpY2sgdGltZXIgZmxhZyAqLw0KKwlDUkdGTEcgPSAweDgwOw0KKw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7DQorCQkvKiBBIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhcHBlbiBzbyBzYXZlIHRoZSBjb250ZXh0LiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKw0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIC4uLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiAuLi4gdGhlbiBzZWUgaWYgdGhlIG5ldyB0aWNrIHZhbHVlIGhhcyBuZWNlc3NpdGF0ZWQgYQ0KKwkJY29udGV4dCBzd2l0Y2guICovDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrIC0gd2hpY2ggbWF5IGJlIGEgZGlmZmVyZW50IHRhc2sNCisJCXRvIHRoYXQgaW50ZXJydXB0ZWQuICovDQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJI2VuZGlmDQorDQorCXBvcnRJU1JfVEFJTCgpOw0KK30NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL0hDUzEyL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IQ1MxMi9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgyNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9IQ1MxMi9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDI4MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydENIQVINCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTENCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJX19hc20oICJzd2kiICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCV9fYXNtKCAiY2xpIiApCQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJX19hc20oICJzZWkiICkNCisNCisvKg0KKyAqIERpc2FibGUgaW50ZXJydXB0cyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBjb3VudCBvZiBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQorICogVGhlIG5lc3RpbmcgY291bnQgaXMgbWFpbnRhaW5lZCBzbyB3ZSBrbm93IHdoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisgKiByZS1lbmFibGVkLiAgT25jZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB0aGUgbmVzdGluZyBjb3VudCBjYW4gYmUgYWNjZXNzZWQNCisgKiBkaXJlY3RseS4gIEVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBuZXN0aW5nIGNvdW50Lg0KKyAqLw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgIAkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCVwNCisJZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJXA0KKwl1eENyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQlcDQorfQ0KKw0KKy8qDQorICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgc28gd2UgY2FuIGFjY2VzcyB0aGUgbmVzdGluZyBjb3VudCBkaXJlY3RseS4gIElmIHRoZQ0KKyAqIG5lc3RpbmcgaXMgZm91bmQgdG8gYmUgMCAobm8gbmVzdGluZykgdGhlbiB3ZSBhcmUgbGVhdmluZyB0aGUgY3JpdGljYWwgDQorICogc2VjdGlvbiBhbmQgaW50ZXJydXB0cyBjYW4gYmUgcmUtZW5hYmxlZC4NCisgKi8NCisjZGVmaW5lICBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJXA0KKwlleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQlcDQorCXV4Q3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCVwNCisJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKw0KKy8qIA0KKyAqIFRoZXNlIG1hY3JvcyBhcmUgdmVyeSBzaW1wbGUgYXMgdGhlIHByb2Nlc3NvciBhdXRvbWF0aWNhbGx5IHNhdmVzIGFuZCANCisgKiByZXN0b3JlcyBpdHMgcmVnaXN0ZXJzIGFzIGludGVycnVwdHMgYXJlIGVudGVyZWQgYW5kIGV4aXRlZC4gIEluDQorICogYWRkaXRpb24gdG8gdGhlIChhdXRvbWF0aWNhbGx5IHN0YWNrZWQpIHJlZ2lzdGVycyB3ZSBhbHNvIHN0YWNrIHRoZSANCisgKiBjcml0aWNhbCBuZXN0aW5nIGNvdW50LiAgRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcNCisgKiBjb3VudCBhcyBpdCBpcyBsZWdpdGltYXRlIGZvciBhIHRhc2sgdG8geWllbGQgZnJvbSB3aXRoaW4gYSBjcml0aWNhbA0KKyAqIHNlY3Rpb24uICBJZiB0aGUgYmFua2VkIG1lbW9yeSBtb2RlbCBpcyBiZWluZyB1c2VkIHRoZW4gdGhlIFBQQUdFDQorICogcmVnaXN0ZXIgaXMgYWxzbyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFza3MgY29udGV4dC4NCisgKi8NCisNCisjaWZkZWYgQkFOS0VEX01PREVMDQorCS8qIA0KKwkgKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzaywgdGhlbiBwdWxsIHRoZSBjcml0aWNhbCBuZXN0aW5nDQorCSAqIGNvdW50IGFuZCBQUEFHRSByZWdpc3RlciBmcm9tIHRoZSBzdGFjay4gIFRoZSByZW1haW5zIG9mIHRoZSANCisJICogY29udGV4dCBhcmUgcmVzdG9yZWQgYnkgdGhlIFJUSSBpbnN0cnVjdGlvbi4NCisJICovDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCVwNCisJewkJCQkJCQkJCQlcDQorCQlfX2FzbSggIgkJCQkJCQkJXG5cDQorCQkuZ2xvYmwgcHhDdXJyZW50VENCCQkJOyB2b2lkICoJCQlcblwNCisJCS5nbG9ibCB1eENyaXRpY2FsTmVzdGluZwkJOyBjaGFyCQkJCVxuXA0KKwkJCQkJCQkJCQkJXG5cDQorCQlsZHggIHB4Q3VycmVudFRDQgkJCQkJCQlcblwNCisJCWxkcyAgMCx4CQkJCTsgU3RhY2sJCQkJXG5cDQorCQkJCQkJCQkJCQlcblwNCisJCW1vdmIgMSxzcCssdXhDcml0aWNhbE5lc3RpbmcJCQkJCQlcblwNCisJCW1vdmIgMSxzcCssMHgzMAkJCQk7IFBQQUdFCQkJCVxuXA0KKwkJIiApOwkJCQkJCQkJCVwNCisJfQ0KKw0KKwkvKiANCisJICogQnkgdGhlIHRpbWUgdGhpcyBtYWNybyBpcyBjYWxsZWQgdGhlIHByb2Nlc3NvciBoYXMgYWxyZWFkeSBzdGFja2VkIHRoZQ0KKwkgKiByZWdpc3RlcnMuICBTaW1wbHkgc3RhY2sgdGhlIG5lc3RpbmcgY291bnQgYW5kIFBQQUdFIHZhbHVlLCB0aGVuIHNhdmUgDQorCSAqIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQorCSAqLw0KKwkjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJXA0KKwkJX19hc20oICIJCQkJCQkJCVxuXA0KKwkJLmdsb2JsIHB4Q3VycmVudFRDQgkJCTsgdm9pZCAqCQkJXG5cDQorCQkuZ2xvYmwgdXhDcml0aWNhbE5lc3RpbmcJCTsgY2hhcgkJCQlcblwNCisJCQkJCQkJCQkJCVxuXA0KKwkJbW92YiAweDMwLCAxLC1zcAkJCTsgUFBBR0UJCQkJXG5cDQorCQltb3ZiIHV4Q3JpdGljYWxOZXN0aW5nLCAxLC1zcAkJCQkJCVxuXA0KKwkJCQkJCQkJCQkJXG5cDQorCQlsZHggIHB4Q3VycmVudFRDQgkJCQkJCQlcblwNCisJCXN0cyAgMCx4CQkJCTsgU3RhY2sJCQkJXG5cDQorCQkiICk7CQkJCQkJCQkJXA0KKwl9DQorI2Vsc2UNCisNCisJLyogDQorCSAqIFRoZXNlIG1hY3JvcyBhcmUgYXMgcGVyIHRoZSBCQU5LRUQgdmVyc2lvbnMgYWJvdmUsIGJ1dCB3aXRob3V0IHNhdmluZw0KKwkgKiBhbmQgcmVzdG9yaW5nIHRoZSBQUEFHRSByZWdpc3Rlci4NCisJICovDQorDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCVwNCisJewkJCQkJCQkJCQlcDQorCQlfX2FzbSggIgkJCQkJCQkJXG5cDQorCQkuZ2xvYmwgcHhDdXJyZW50VENCCQkJOyB2b2lkICoJCQlcblwNCisJCS5nbG9ibCB1eENyaXRpY2FsTmVzdGluZwkJOyBjaGFyCQkJCVxuXA0KKwkJCQkJCQkJCQkJXG5cDQorCQlsZHggIHB4Q3VycmVudFRDQgkJCQkJCQlcblwNCisJCWxkcyAgMCx4CQkJCTsgU3RhY2sJCQkJXG5cDQorCQkJCQkJCQkJCQlcblwNCisJCW1vdmIgMSxzcCssdXhDcml0aWNhbE5lc3RpbmcJCQkJCQlcblwNCisJCSIgKTsJCQkJCQkJCQlcDQorCX0NCisNCisJI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCVwNCisJCV9fYXNtKCAiCQkJCQkJCQlcblwNCisJCS5nbG9ibCBweEN1cnJlbnRUQ0IJCQk7IHZvaWQgKgkJCVxuXA0KKwkJLmdsb2JsIHV4Q3JpdGljYWxOZXN0aW5nCQk7IGNoYXIJCQkJXG5cDQorCQkJCQkJCQkJCQlcblwNCisJCW1vdmIgdXhDcml0aWNhbE5lc3RpbmcsIDEsLXNwCQkJCQkJXG5cDQorCQkJCQkJCQkJCQlcblwNCisJCWxkeCAgcHhDdXJyZW50VENCCQkJCQkJCVxuXA0KKwkJc3RzICAwLHgJCQkJOyBTdGFjawkJCQlcblwNCisJCSIgKTsJCQkJCQkJCQlcDQorCX0NCisjZW5kaWYNCisNCisvKg0KKyAqIFV0aWxpdHkgbWFjcm9zIHRvIHNhdmUvcmVzdG9yZSBjb3JyZWN0IHNvZnR3YXJlIHJlZ2lzdGVycyBmb3IgR0NDLiBUaGlzIGlzDQorICogdXNlZnVsIHdoZW4gR0NDIGRvZXMgbm90IGdlbmVyYXRlIGFwcHJvcHJpYXRlIElTUiBoZWFkL3RhaWwgY29kZS4NCisgKi8NCisjZGVmaW5lIHBvcnRJU1JfSEVBRCgpCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCIJCQkJCQkJCQlcblwNCisJCW1vdncgXy5mcmFtZSwgMiwtc3AJCQkJCQkJXG5cDQorCQltb3Z3IF8udG1wLCAyLC1zcAkJCQkJCQlcblwNCisJCW1vdncgXy56LCAyLC1zcAkJCQkJCQkJXG5cDQorCQltb3Z3IF8ueHksIDIsLXNwCQkJCQkJCVxuXA0KKwkJO21vdncgXy5kMiwgMiwtc3AJCQkJCQkJXG5cDQorCQk7bW92dyBfLmQxLCAyLC1zcAkJCQkJCQlcblwNCisJCSIpOwkJCQkJCQkJCVwNCit9DQorDQorI2RlZmluZSBwb3J0SVNSX1RBSUwoKQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQlcDQorCQlfX2FzbSgiCQkJCQkJCQkJXG5cDQorCQltb3Z3IDIsc3ArLCBfLnh5CQkJCQkJCVxuXA0KKwkJbW92dyAyLHNwKywgXy56CQkJCQkJCQlcblwNCisJCW1vdncgMixzcCssIF8udG1wCQkJCQkJCVxuXA0KKwkJbW92dyAyLHNwKywgXy5mcmFtZQkJCQkJCQlcblwNCisJCTttb3Z3IDIsc3ArLCBfLmQxCQkJCQkJCVxuXA0KKwkJO21vdncgMixzcCssIF8uZDIJCQkJCQkJXG5cDQorCQlydGkJCQkJCQkJCQlcblwNCisJCSIpOwkJCQkJCQkJCVwNCit9DQorDQorLyoNCisgKiBVdGlsaXR5IG1hY3JvIHRvIGNhbGwgbWFjcm9zIGFib3ZlIGluIGNvcnJlY3Qgb3JkZXIgaW4gb3JkZXIgdG8gcGVyZm9ybSBhDQorICogdGFzayBzd2l0Y2ggZnJvbSB3aXRoaW4gYSBzdGFuZGFyZCBJU1IuICBUaGlzIG1hY3JvIGNhbiBvbmx5IGJlIHVzZWQgaWYNCisgKiB0aGUgSVNSIGRvZXMgbm90IHVzZSBhbnkgbG9jYWwgKHN0YWNrKSB2YXJpYWJsZXMuICBJZiB0aGUgSVNSIHVzZXMgc3RhY2sNCisgKiB2YXJpYWJsZXMgcG9ydFlJRUxEKCkgc2hvdWxkIGJlIHVzZWQgaW4gaXQncyBwbGFjZS4NCisgKi8NCisNCisjZGVmaW5lIHBvcnRUQVNLX1NXSVRDSF9GUk9NX0lTUigpCQkJCQkJCQlcDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsJCQkJCQkJCQkJCVwNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJCQkJCVwNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NQ0Y1MjM1L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTUNGNTIzNS9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3YWQ0NAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTUNGNTIzNS9wb3J0LmMKQEAgLTAsMCArMSwyODMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY0LjEuMSAtIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFJpY2hhcmQgQmFycnkuDQorICAgIE1DRjUyMzUgUG9ydCAtIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gV2FsdGVyLg0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UqKiBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCisNCisgICAgQSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGNhbiBiZSBhcHBsaWVkIHNob3VsZCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlDQorICAgIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TLCB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8gcHJvdmlkZQ0KKyAgICB0aGUgc291cmNlIGNvZGUgZm9yIGFueSBwcm9wcmlldGFyeSBjb21wb25lbnRzLiAgU2VlIHRoZSBsaWNlbnNpbmcgc2VjdGlvbg0KKyAgICBvZiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBmb3IgZnVsbCBkZXRhaWxzIG9mIGhvdyBhbmQgd2hlbiB0aGUgZXhjZXB0aW9uDQorICAgIGNhbiBiZSBhcHBsaWVkLg0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorCSogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KKwkqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCisJKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQorCSogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KKwkqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisJUGxlYXNlIGVuc3VyZSB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWxldmFudCBwb3J0IHNlY3Rpb25zIG9mIHRoZQ0KKwlvbmxpbmUgZG9jdW1lbnRhdGlvbi4NCisNCisJaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kIA0KKwljb250YWN0IGRldGFpbHMuDQorDQorCWh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5IA0KKwljcml0aWNhbCBzeXN0ZW1zLg0KKw0KKwlodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsIA0KKwlsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKyovDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHZ1aW50MzI7DQordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB2dWludDE2Ow0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB2dWludDg7DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2RlZmluZSBwb3J0VkVDVE9SX1RBQkxFICAgICAgICAgICAgICAgIF9fUkFNVkVDDQorI2RlZmluZSBwb3J0VkVDVE9SX1NZU0NBTEwgICAgICAgICAgICAgICggMzIgKyBwb3J0VFJBUF9ZSUVMRCApDQorI2RlZmluZSBwb3J0VkVDVE9SX1RJTUVSICAgICAgICAgICAgICAgICggNjQgKyAzNiApDQorDQorI2RlZmluZSBNQ0ZfUElUX1BSRVNDQUxFUiAgICAgICAgICAgICAgIDUxMlVMDQorI2RlZmluZSBNQ0ZfUElUX1RJTUVSX1RJQ0tTICAgICAgICAgICAgICggRlNZU18yIC8gTUNGX1BJVF9QUkVTQ0FMRVIgKQ0KKyNkZWZpbmUgTUNGX1BJVF9NT0RVTFVTX1JFR0lTVEVSKGZyZXEpICAoIE1DRl9QSVRfVElNRVJfVElDS1MgLyAoIGZyZXEgKSAtIDFVTCkNCisNCisjZGVmaW5lIE1DRl9QSVRfUE1SMCAgICAgICAgICAgICAgICAgICAgKCAqKCB2dWludDE2ICogKSggdm9pZCAqICkoICZfX0lQU0JBUlsgMHgxNTAwMDIgXSApICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUjAgICAgICAgICAgICAgICAgICAgKCAqKCB2dWludDE2ICogKSggdm9pZCAqICkoICZfX0lQU0JBUlsgMHgxNTAwMDAgXSApICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9QUkUoeCkgICAgICAgICAgICAgKCAoICggeCApICYgMHgwMDBGICkgPDwgOCApDQorI2RlZmluZSBNQ0ZfUElUX1BDU1JfRU4gICAgICAgICAgICAgICAgICggMHgwMDAxICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9STEQgICAgICAgICAgICAgICAgKCAweDAwMDIgKQ0KKyNkZWZpbmUgTUNGX1BJVF9QQ1NSX1BJRiAgICAgICAgICAgICAgICAoIDB4MDAwNCApDQorI2RlZmluZSBNQ0ZfUElUX1BDU1JfUElFICAgICAgICAgICAgICAgICggMHgwMDA4ICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9PVlcgICAgICAgICAgICAgICAgKCAweDAwMTAgKQ0KKyNkZWZpbmUgTUNGX0lOVEMwX0lDUjM2ICAgICAgICAgICAgICAgICAoICooIHZ1aW50OCAqICkoIHZvaWQgKiApKCAmX19JUFNCQVJbIDB4MDAwQzY0IF0gKSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSCAgICAgICAgICAgICAgICAgICggKiggdnVpbnQzMiAqICkoIHZvaWQgKiApKCAmX19JUFNCQVJbIDB4MDAwQzA4IF0gKSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSF9JTlRfTUFTSzM2ICAgICAgICggMHgwMDAwMDAxMCApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSF9NQVNLQUxMICAgICAgICAgICggMHgwMDAwMDAwMSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSUNSbl9JUCh4KSAgICAgICAgICAgICggKCAoIHggKSAmIDB4MDcgKSA8PCAwICkNCisjZGVmaW5lIE1DRl9JTlRDMF9JQ1JuX0lMKHgpICAgICAgICAgICAgKCAoICggeCApICYgMHgwNyApIDw8IDMgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAoICggdW5zaWduZWQgbG9uZyApIDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgICAoICggdW5zaWduZWQgbG9uZyApIDEwICkNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdGljIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICB1bENyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YXRpYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCitzdGF0aWMgdm9pZCBwcnZQb3J0UHJlZW1wdGl2ZVRpY2sgKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdF9oYW5kbGVyKSk7DQorI2Vsc2UNCitzdGF0aWMgdm9pZCBwcnZQb3J0UHJlZW1wdGl2ZVRpY2sgKCB2b2lkICk7DQorI2VuZGlmDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IGltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorcG9ydFNUQUNLX1RZUEUgKg0KK3B4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKiBweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwNCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKyAgICAvKiBQbGFjZSB0aGUgcGFyYW1ldGVyIG9uIHRoZSBzdGFjayBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICovDQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOw0KKyAgICBweFRvcE9mU3RhY2stLTsNCisNCisgICAgLyogUGxhY2UgZHVtbXkgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2suIFRhc2tzIHNob3VsZCBuZXZlciB0ZXJtaW5hdGUgc28NCisgICAgICogd2UgY2FuIHNldCB0aGlzIHRvIGFueXRoaW5nLiAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDA7DQorICAgIHB4VG9wT2ZTdGFjay0tOw0KKw0KKyAgICAvKiBDcmVhdGUgYSBNb3Rvcm9sYSBDb2xkZmlyZSBleGNlcHRpb24gc3RhY2sgZnJhbWUuIEZpcnN0IGNvbWVzIHRoZSByZXR1cm4NCisgICAgICogYWRkcmVzcy4gKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorICAgIHB4VG9wT2ZTdGFjay0tOw0KKw0KKyAgICAvKiBGb3JtYXQsIGZhdWx0LXN0YXR1cywgdmVjdG9yIG51bWJlciBmb3IgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLiBUYXNrDQorICAgICAqIHJ1biBpbiBzdXBlcnZpc29yIG1vZGUuICovDQorICAgICpweFRvcE9mU3RhY2sgPSAweDQwMDAyMDAwVUwgfCAoIHBvcnRWRUNUT1JfU1lTQ0FMTCArIDMyICkgPDwgMTg7DQorICAgIHB4VG9wT2ZTdGFjay0tOw0KKw0KKyAgICAvKiBTZXQgdGhlIGluaXRpYWwgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50ZXIgdG8gemVyby4gVGhpcyB2YWx1ZQ0KKyAgICAgKiBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIHZhbHVlIG9mIHVsQ3JpdGljYWxOZXN0aW5nLiAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gMDsNCisgICAgKnB4VG9wT2ZTdGFjay0tOw0KKw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4QTY7ICAgIC8qIEE2IC8gRlAgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBNTsgICAgLyogQTUgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBNDsgICAgLyogQTQgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBMzsgICAgLyogQTMgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBMjsgICAgLyogQTIgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBMTsgICAgLyogQTEgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBMDsgICAgLyogQTAgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhENzsgICAgLyogRDcgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhENjsgICAgLyogRDYgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhENTsgICAgLyogRDUgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhENDsgICAgLyogRDQgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEMzsgICAgLyogRDMgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEMjsgICAgLyogRDIgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEMTsgICAgLyogRDEgKi8NCisgICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEMDsgICAgLyogRDAgKi8NCisNCisgICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorDQorLyoNCisgKiBDYWxsZWQgYnkgcG9ydFlJRUxEKCkgb3IgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4NCisgKi8NCitzdGF0aWMgdm9pZA0KK3BydlBvcnRZaWVsZCggdm9pZCApDQorew0KKyAgICBhc20gdm9sYXRpbGUgKCAibW92ZS53ICAjMHgyNzAwLCAlc3Jcblx0IiApOw0KKyNpZiBfR0NDX1VTRVNfRlAgPT0gMQ0KKyAgICBhc20gdm9sYXRpbGUgKCAidW5sayAlZnBcblx0IiApOw0KKyNlbmRpZg0KKyAgICAgLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2guICBGaXJzdCBzYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQorICAgIHBvcnRTQVZFX0NPTlRFWFQoICApOw0KKw0KKyAgICAvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorICAgIHZUYXNrU3dpdGNoQ29udGV4dCggICk7DQorDQorICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUKCAgKTsNCit9DQorDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisvKg0KKyAqIFRoZSBJU1IgdXNlZCBmb3IgdGhlIHNjaGVkdWxlciB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCisgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCisgKi8NCitzdGF0aWMgdm9pZA0KK3BydlBvcnRQcmVlbXB0aXZlVGljayAoIHZvaWQgKQ0KK3sNCisgICAgLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQorICAgICAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLg0KKyAgICAgKi8NCisNCisgICAgdlRhc2tJbmNyZW1lbnRUaWNrKCAgKTsNCisgICAgTUNGX1BJVF9QQ1NSMCB8PSBNQ0ZfUElUX1BDU1JfUElGOw0KK30NCisNCisjZWxzZQ0KKw0KK3N0YXRpYyB2b2lkDQorcHJ2UG9ydFByZWVtcHRpdmVUaWNrKCB2b2lkICkNCit7DQorICAgIGFzbSB2b2xhdGlsZSAoICJtb3ZlLncgICMweDI3MDAsICVzclxuXHQiICk7DQorI2lmIF9HQ0NfVVNFU19GUCA9PSAxDQorICAgIGFzbSB2b2xhdGlsZSAoICJ1bmxrICVmcFxuXHQiICk7DQorI2VuZGlmDQorICAgIHBvcnRTQVZFX0NPTlRFWFQoICApOw0KKyAgICBNQ0ZfUElUX1BDU1IwIHw9IE1DRl9QSVRfUENTUl9QSUY7DQorICAgIHZUYXNrSW5jcmVtZW50VGljayggICk7DQorICAgIHZUYXNrU3dpdGNoQ29udGV4dCggICk7DQorICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoICApOw0KK30NCisjZW5kaWYNCisNCit2b2lkDQordlBvcnRFbnRlckNyaXRpY2FsKCkNCit7DQorICAgIC8qIEZJWE1FOiBXZSBzaG91bGQgc3RvcmUgdGhlIG9sZCBJUEwgaGVyZSAtIEhvdyBhcmUgd2Ugc3VwcG9zZWQgdG8gZG8NCisgICAgICogdGhpcy4NCisgICAgICovDQorICAgICggdm9pZCApcG9ydFNFVF9JUEwoIHBvcnRJUExfTUFYICk7DQorDQorICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisgICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisgICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorDQordm9pZA0KK3ZQb3J0RXhpdENyaXRpY2FsKCkNCit7DQorICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisgICAgew0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisgICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisgICAgICAgIHJlLWVuYWJsZWQuICovDQorICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgICggdm9pZCApcG9ydFNFVF9JUEwoIDAgKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitwb3J0QkFTRV9UWVBFDQoreFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKyAgICBleHRlcm4gdm9pZCAgICAgKCAqcG9ydFZFQ1RPUl9UQUJMRVsgIF0gKSAoICApOw0KKw0KKyAgICAvKiBBZGQgZW50cnkgaW4gdmVjdG9yIHRhYmxlIGZvciB5aWVsZCBzeXN0ZW0gY2FsbC4gKi8NCisgICAgcG9ydFZFQ1RPUl9UQUJMRVsgcG9ydFZFQ1RPUl9TWVNDQUxMIF0gPSBwcnZQb3J0WWllbGQ7DQorICAgIC8qIEFkZCBlbnRyeSBpbiB2ZWN0b3IgdGFibGUgZm9yIHBlcmlvZGljIHRpbWVyLiAqLw0KKyAgICBwb3J0VkVDVE9SX1RBQkxFWyBwb3J0VkVDVE9SX1RJTUVSIF0gPSBwcnZQb3J0UHJlZW1wdGl2ZVRpY2s7DQorDQorICAgIC8qIENvbmZpZ3VyZSB0aGUgdGltZXIgZm9yIHRoZSBzeXN0ZW0gY2xvY2suICovDQorICAgIGlmICggY29uZmlnVElDS19SQVRFX0haID4gMCkNCisgICAgew0KKyAgICAgICAgLyogQ29uZmlndXJlIHByZXNjYWxlciAqLw0KKyAgICAgICAgTUNGX1BJVF9QQ1NSMCA9IE1DRl9QSVRfUENTUl9QUkUoIDB4OSApIHwgTUNGX1BJVF9QQ1NSX1JMRCB8IE1DRl9QSVRfUENTUl9PVlc7DQorICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBwZXJpb2RpYyB0aW1lciBpbnRlcnJ1cHQuICovDQorICAgICAgICBNQ0ZfUElUX1BNUjAgPSBNQ0ZfUElUX01PRFVMVVNfUkVHSVNURVIoIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKyAgICAgICAgLyogQ29uZmlndXJlIGludGVycnVwdCBwcmlvcml0eSBhbmQgbGV2ZWwgYW5kIHVubWFzayBpbnRlcnJ1cHQuICovDQorICAgICAgICBNQ0ZfSU5UQzBfSUNSMzYgPSBNQ0ZfSU5UQzBfSUNSbl9JTCggMHgxICkgfCBNQ0ZfSU5UQzBfSUNSbl9JUCggMHgxICk7DQorICAgICAgICBNQ0ZfSU5UQzBfSU1SSCAmPSB+KCBNQ0ZfSU5UQzBfSU1SSF9JTlRfTUFTSzM2IHwgTUNGX0lOVEMwX0lNUkhfTUFTS0FMTCApOw0KKyAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgKi8NCisgICAgICAgIE1DRl9QSVRfUENTUjAgfD0gTUNGX1BJVF9QQ1NSX1BJRSB8IE1DRl9QSVRfUENTUl9FTiB8IE1DRl9QSVRfUENTUl9QSUY7DQorICAgIH0NCisNCisgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCggICk7DQorDQorICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorICAgIHJldHVybiBwZFRSVUU7DQorfQ0KKw0KK3ZvaWQNCit2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlY2Y3OAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTUNGNTIzNS9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE3OCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjQuMS4xIC0gQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYgUmljaGFyZCBCYXJyeS4NCisgICAgTUNGNTIzNSBQb3J0IC0gQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdGlhbiBXYWx0ZXIuDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSoqIGFzIHB1Ymxpc2hlZCBieQ0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKw0KKyAgICBBIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgY2FuIGJlIGFwcGxpZWQgc2hvdWxkIHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUNCisgICAgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1MsIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0byBwcm92aWRlDQorICAgIHRoZSBzb3VyY2UgY29kZSBmb3IgYW55IHByb3ByaWV0YXJ5IGNvbXBvbmVudHMuICBTZWUgdGhlIGxpY2Vuc2luZyBzZWN0aW9uDQorICAgIG9mIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIGZvciBmdWxsIGRldGFpbHMgb2YgaG93IGFuZCB3aGVuIHRoZSBleGNlcHRpb24NCisgICAgY2FuIGJlIGFwcGxpZWQuDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICogR2V0IHRoZSBGcmVlUlRPUyBlQm9vayEgIFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgKg0KKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisJKiBUaGlzIGlzIGEgY29uY2lzZSwgc3RlcCBieSBzdGVwLCAnaGFuZHMgb24nIGd1aWRlIHRoYXQgZGVzY3JpYmVzIGJvdGggICAqDQorCSogZ2VuZXJhbCBtdWx0aXRhc2tpbmcgY29uY2VwdHMgYW5kIEZyZWVSVE9TIHNwZWNpZmljcy4gSXQgcHJlc2VudHMgYW5kICAgKg0KKwkqIGV4cGxhaW5zIG51bWVyb3VzIGV4YW1wbGVzIHRoYXQgYXJlIHdyaXR0ZW4gdXNpbmcgdGhlIEZyZWVSVE9TIEFQSS4gICAgICoNCisJKiBGdWxsIHNvdXJjZSBjb2RlIGZvciBhbGwgdGhlIGV4YW1wbGVzIGlzIHByb3ZpZGVkIGluIGFuIGFjY29tcGFueWluZyAgICAqDQorCSogLnppcCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKwlQbGVhc2UgZW5zdXJlIHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlbGV2YW50IHBvcnQgc2VjdGlvbnMgb2YgdGhlDQorCW9ubGluZSBkb2N1bWVudGF0aW9uLg0KKw0KKwlodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQgDQorCWNvbnRhY3QgZGV0YWlscy4NCisNCisJaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkgDQorCWNyaXRpY2FsIHN5c3RlbXMuDQorDQorCWh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywgDQorCWxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEYXRhIHR5cGVzIGZvciBDb2xkZmlyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICBmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVuc2lnbmVkIGludA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgIGludA0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgICAgdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKyAgICB0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgICAgICAoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMgICAgICAgICAgICAgICAgKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgICAgICA0DQorDQorI2RlZmluZSBwb3J0VFJBUF9ZSUVMRCAgICAgICAgICAgICAgICAgIDAgICAvKiBUcmFwIDAgKi8NCisjZGVmaW5lIHBvcnRJUExfTUFYICAgICAgICAgICAgICAgICAgICAgNyAgIC8qIE9ubHkgTk1JIGludGVycnVwdCA3IGFsbG93ZWQuICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZyZWVSVE9TIG1hY3JvcyBmb3IgcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFjdGl2ZSB0YXNrDQorICogc2hvdWxkIGJlIHN0b3JlZC4gSXQgbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXhjZXB0aW9uDQorICogcHJvY2Vzc2luZyBmcm9tIHRoZSBDUFUsIGkuZS4gdGhlcmUgZXhpc3RzIGEgQ29sZGZpcmUgZXhjZXB0aW9uIGZyYW1lIGF0DQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0YWNrLiBUaGUgZnVuY3Rpb24gcmVzZXJ2ZXMgc3BhY2Ugb24NCisgKiB0aGUgc3RhY2sgZm9yIHRoZSBDUFUgcmVnaXN0ZXJzIGFuZCBvdGhlciB0YXNrIGRlcGVuZGVudCB2YWx1ZXMgKGUuZw0KKyAqIHVsQ3JpdGljYWxOZXN0aW5nKSBhbmQgdXBkYXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjayBpbiB0aGUgVENCLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc20gdm9sYXRpbGUgKCAvKiByZXNlcnZlIHNwYWNlIGZvciB0YXNrIHN0YXRlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibGVhLmwgICAoLTY0LCAlc3ApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBwdXNoIGRhdGEgcmVnaXN0ZXIgJWQwLSVkNy8lYTAtJWE2IG9uIHN0YWNrLiAqLyAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZW0ubCAlZDAtJWQ3LyVhMC0lYTYsICglc3ApXG5cdCIgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBwdXNoIHVsQ3JpdGljYWxOZXN0aW5nIGNvdW50ZXIgb24gc3RhY2suICovICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibGVhLmwgICg2MCwgJXNwKSwgJWEwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICB1bENyaXRpY2FsTmVzdGluZywgKCVhMClcblx0IiAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBzZXQgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIGluIHRoZSBUQ0IuICovICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICBweEN1cnJlbnRUQ0IsICVhMFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICAlc3AsICglYTApIik7DQorDQorLyouDQorICogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyB0aGUgY3VycmVudCBhY3RpdmUgYW5kIGNvbnRpbnVlcyBpdHMgZXhlY3V0aW9uLg0KKyAqIEl0IGxvYWRzIHRoZSBjdXJyZW50IFRDQiBhbmQgcmVzdG9yZXMgdGhlIHByb2Nlc3NvciByZWdpc3RlcnMsIHRoZQ0KKyAqIHRhc2sgZGVwZW5kZW50IHZhbHVlcyAoZS5nIHVsQ3JpdGljYWxOZXN0aW5nKS4gRmluYWxseSBleGVjdXRpb24NCisgKiBpcyBjb250aW51ZWQgYnkgZXhlY3V0aW5nIGFuIHJ0ZSBpbnN0cnVjdGlvbi4NCisgKi8NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgYXNtIHZvbGF0aWxlICggIm1vdmUubCAgcHhDdXJyZW50VENCLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgIm1vdmUubCAgKCVzcCksICVzcFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciBub3cgcG9pbnRzIHRvIHRoZSBzYXZlZCByZWdpc3RlcnMuICovICAgIFwNCisgICAgICAgICAgICAgICAgICAgIm1vdmVtLmwgKCVzcCksICVkMC0lZDcvJWEwLSVhNlxuXHQiICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyBjb3VudGVyIGZyb20gc3RhY2suICovICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgImxlYS5sICAgKCVzcCwgNjApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgIm1vdmUubCAgKCVzcCkrLCB1bENyaXRpY2FsTmVzdGluZ1xuXHQiICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciBub3cgcG9pbnRzIHRvIGV4Y2VwdGlvbiBmcmFtZS4gKi8gICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgInJ0ZVxuXHQiICk7DQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KKw0KKyNkZWZpbmUgcG9ydFNFVF9JUEwoIHhJUEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc21fc2V0X2lwbCggeElQTCApDQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgXA0KKyAgICBkbyB7ICggdm9pZCApcG9ydFNFVF9JUEwoIHBvcnRJUExfTUFYICk7IH0gd2hpbGUoIDAgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgXA0KKyAgICBkbyB7ICggdm9pZCApcG9ydFNFVF9JUEwoIDAgKTsgfSB3aGlsZSggMCApDQorDQorI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIGFzbSB2b2xhdGlsZSAoICIgdHJhcCAgICUwXG5cdCIgOiA6ICJpIihwb3J0VFJBUF9ZSUVMRCkgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc20gdm9sYXRpbGUgKCAibm9wXG5cdCIgKQ0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc20gdm9sYXRpbGUgKCAibW92ZS53ICAjMHgyNzAwLCAlc3IiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBwb3J0U0FWRV9DT05URVhUKCAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB7DQorDQorI2RlZmluZSBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCBTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAvKiBJZiBhIHN3aXRjaCBpcyByZXF1aXJlZCB3ZSBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpLiAqLyAgICAgICAgICBcDQorICAgICAgICBpZiggU3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoICApOw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2ludCBhc21fc2V0X2lwbCggdW5zaWduZWQgbG9uZyBpbnQgdWlOZXdJUEwgKTsNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29tcGlsZXIgc3BlY2lmaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgICAgICAgICAgIFwNCisgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01TUDQzMEY0NDkvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NU1A0MzBGNDQ5L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMzNTMxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NU1A0MzBGNDQ5L3BvcnQuYwpAQCAtMCwwICsxLDM2NSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCisJQ2hhbmdlcyBmcm9tIFYyLjUuMg0KKwkJDQorCSsgdXNDcml0aWNhbE5lc3Rpbmcgbm93IGhhcyBhIHZvbGF0aWxlIHF1YWxpZmllci4NCisqLw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c2lnbmFsLmg+DQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCBmb3IgaGFyZHdhcmUgc2V0dXAuICBUaGUgdGljayBJU1IgcnVucyBvZmYgdGhlIEFDTEssIA0KK25vdCB0aGUgTUNMSy4gKi8NCisjZGVmaW5lIHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWgkJCSggKCBwb3J0VGlja1R5cGUgKSAzMjc2OCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HCSggKCB1bnNpZ25lZCBzaG9ydCApIDEwICkNCisjZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRAkoICggcG9ydFNUQUNLX1RZUEUgKSAweDA4ICkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogTW9zdCBwb3J0cyBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMgYnkgcGxhY2luZyB0aGUgaW50ZXJydXB0IGZsYWdzIG9uDQordGhlIHN0YWNrIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy4gIEV4aXRpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgdGhlbg0KK3NpbXBseSBhIGNhc2Ugb2YgcG9wcGluZyB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suICBBcyBtc3BnY2MgZG9lcyBub3QgdXNlDQorYSBmcmFtZSBwb2ludGVyIHRoaXMgY2Fubm90IGJlIGRvbmUgYXMgbW9kaWZ5aW5nIHRoZSBzdGFjayB3aWxsIGNsb2JiZXIgYWxsDQordGhlIHN0YWNrIHZhcmlhYmxlcy4gIEluc3RlYWQgZWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbA0KK3NlY3Rpb24gbmVzdGluZyBkZXB0aC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMNCitpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgbGVmdCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLQ0KK3dpdGggaW50ZXJydXB0cyBvbmx5IGJlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQordm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIE1hY3JvIHRvIHNhdmUgYSB0YXNrIGNvbnRleHQgdG8gdGhlIHRhc2sgc3RhY2suICBUaGlzIHNpbXBseSBwdXNoZXMgYWxsIHRoZSANCisgKiBnZW5lcmFsIHB1cnBvc2UgbXNwNDMwIHJlZ2lzdGVycyBvbnRvIHRoZSBzdGFjaywgZm9sbG93ZWQgYnkgdGhlIA0KKyAqIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlIHVzZWQgYnkgdGhlIHRhc2suICBGaW5hbGx5IHRoZSByZXN1bHRhbnQgc3RhY2sgDQorICogcG9pbnRlciB2YWx1ZSBpcyBzYXZlZCBpbnRvIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgc28gaXQgY2FuIGJlIHJldHJpZXZlZCANCisgKiB0aGUgbmV4dCB0aW1lIHRoZSB0YXNrIGV4ZWN1dGVzLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUgKAkicHVzaAlyNAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjYJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyNwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjkJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTAJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTEJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTIJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTMJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMTUJCQkJCQlcblx0IglcDQorCQkJCQkibW92LncJdXNDcml0aWNhbE5lc3RpbmcsIHIxNAlcblx0IglcDQorCQkJCQkicHVzaAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkibW92LncJcHhDdXJyZW50VENCLCByMTIJCVxuXHQiCVwNCisJCQkJCSJtb3YudwlyMSwgQHIxMgkJCQlcblx0IglcDQorCQkJCSk7DQorDQorLyogDQorICogTWFjcm8gdG8gcmVzdG9yZSBhIHRhc2sgY29udGV4dCBmcm9tIHRoZSB0YXNrIHN0YWNrLiAgVGhpcyBpcyBlZmZlY3RpdmVseQ0KKyAqIHRoZSByZXZlcnNlIG9mIHBvcnRTQVZFX0NPTlRFWFQoKS4gIEZpcnN0IHRoZSBzdGFjayBwb2ludGVyIHZhbHVlIGlzDQorICogbG9hZGVkIGZyb20gdGhlIHRhc2sgY29udHJvbCBibG9jay4gIE5leHQgdGhlIHZhbHVlIGZvciB1c0NyaXRpY2FsTmVzdGluZw0KKyAqIHVzZWQgYnkgdGhlIHRhc2sgaXMgcmV0cmlldmVkIGZyb20gdGhlIHN0YWNrIC0gZm9sbG93ZWQgYnkgdGhlIHZhbHVlIG9mIGFsbA0KKyAqIHRoZSBnZW5lcmFsIHB1cnBvc2UgbXNwNDMwIHJlZ2lzdGVycy4NCisgKg0KKyAqIFRoZSBiaWMgaW5zdHJ1Y3Rpb24gZW5zdXJlcyB0aGVyZSBhcmUgbm8gbG93IHBvd2VyIGJpdHMgc2V0IGluIHRoZSBzdGF0dXMNCisgKiByZWdpc3RlciB0aGF0IGlzIGFib3V0IHRvIGJlIHBvcHBlZCBmcm9tIHRoZSBzdGFjay4NCisgKi8NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUgKAkibW92LncJcHhDdXJyZW50VENCLCByMTIJCVxuXHQiCVwNCisJCQkJCSJtb3YudwlAcjEyLCByMQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJtb3YudwlyMTUsIHVzQ3JpdGljYWxOZXN0aW5nCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTEJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNAkJCQkJCVxuXHQiCVwNCisJCQkJCSJiaWMJIygweGYwKSwwKHIxKQkJCVxuXHQiCVwNCisJCQkJCSJyZXRpCQkJCQkJCVxuXHQiCVwNCisJCQkJKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHMgdXAgdGhlIHBlcmlvZGljIElTUiB1c2VkIGZvciB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDAsIGJ1dA0KKyAqIGNvdWxkIGhhdmUgYWx0ZXJuYXRpdmVseSB1c2VkIHRoZSB3YXRjaGRvZyB0aW1lciBvciB0aW1lciAxLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKiANCisgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwkJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBjYW4gYmUgaW5jbHVkZWQgaWYgcmVxdWlyZWQuDQorDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07IA0KKwkqLw0KKw0KKwkvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZSANCisJZXhlY3V0aW5nIGFuIElTUi4gIFdlIHdhbnQgdGhlIHN0YWNrIHRvIGxvb2sganVzdCBhcyBpZiB0aGlzIGhhcyBoYXBwZW5lZA0KKwlzbyBwbGFjZSBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIG9uIHRoZSBzdGFjayBmaXJzdCAtIGZvbGxvd2VkDQorCWJ5IHRoZSBmbGFncyB3ZSB3YW50IHRoZSB0YXNrIHRvIHVzZSB3aGVuIGl0IHN0YXJ0cyB1cC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0NDQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NTU1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg2NjY2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDc3Nzc7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ODg4ODsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg5OTk5Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGFhYWE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4YmJiYjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhjY2NjOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGRkZGQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZWVlZTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMTUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBtc3BnY2MgY29tcGlsZXIgZG9lcyBub3QgbWFpbnRhaW4gc2VwYXJhdGUNCisJc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCisJdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQorCXRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCisJYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KKwl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCisJcmV0dXJuIHBkVFJVRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBNU1A0MzAgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQorCWRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoIGNhbGxlZCBieSBwb3J0WUlFTEQgb3IgdGFza1lJRUxELiAgDQorICoNCisgKiBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gaXMgc2F2ZSB0aGUgcmVnaXN0ZXJzIHNvIHdlIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUuDQorICovDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggbmFrZWQgKSApOw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQorew0KKwkvKiBXZSB3YW50IHRoZSBzdGFjayBvZiB0aGUgdGFzayBiZWluZyBzYXZlZCB0byBsb29rIGV4YWN0bHkgYXMgaWYgdGhlIHRhc2sNCisJd2FzIHNhdmVkIGR1cmluZyBhIHByZS1lbXB0aXZlIFJUT1MgdGljayBJU1IuICBCZWZvcmUgY2FsbGluZyBhbiBJU1IgdGhlIA0KKwltc3A0MzAgcGxhY2VzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgb250byB0aGUgc3RhY2suICBBcyB0aGlzIGlzIGEgZnVuY3Rpb24gDQorCWNhbGwgYW5kIG5vdCBhbiBJU1Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LiAqLw0KKwlhc20gdm9sYXRpbGUgKCAicHVzaAlyMiIgKTsNCisJX0RJTlQoKTsNCisNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQorDQorCS8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDANCisgKiBidXQgY291bGQgYWx0ZXJuYXRpdmVseSB1c2UgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuIA0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogRW5zdXJlIHRoZSB0aW1lciBpcyBzdG9wcGVkLiAqLw0KKwlUQUNUTCA9IDA7DQorDQorCS8qIFJ1biB0aGUgdGltZXIgb2YgdGhlIEFDTEsuICovDQorCVRBQ1RMID0gVEFTU0VMXzE7DQorDQorCS8qIENsZWFyIGV2ZXJ5dGhpbmcgdG8gc3RhcnQgd2l0aC4gKi8NCisJVEFDVEwgfD0gVEFDTFI7DQorDQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KKwlUQUNDUjAgPSBwb3J0QUNMS19GUkVRVUVOQ1lfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorDQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cy4gKi8NCisJVEFDQ1RMMCA9IENDSUU7DQorDQorCS8qIFN0YXJ0IHVwIGNsZWFuLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCisNCisJLyogVXAgbW9kZS4gKi8NCisJVEFDVEwgfD0gTUNfMTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZS1lbXB0aXZlDQorICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgb3Igbm90Lg0KKyAqLw0KKw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciBwcmVlbXB0aXZlIHNjaGVkdWxlci4gIFdlIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUgYXMNCisJICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sNCisJICogY291bnQgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuDQorCSAqLw0KKwlpbnRlcnJ1cHQgKFRJTUVSQTBfVkVDVE9SKSBwcnZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggbmFrZWQgKSApOw0KKwlpbnRlcnJ1cHQgKFRJTUVSQTBfVkVDVE9SKSBwcnZUaWNrSVNSKCB2b2lkICkNCisJew0KKwkJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisNCisJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCB0aGVuIHN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrDQorCQl0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJfQ0KKw0KKyNlbHNlDQorDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQorCSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCisJICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOw0KKwkgKi8NCisJaW50ZXJydXB0IChUSU1FUkEwX1ZFQ1RPUikgcHJ2VGlja0lTUiggdm9pZCApOw0KKwlpbnRlcnJ1cHQgKFRJTUVSQTBfVkVDVE9SKSBwcnZUaWNrSVNSKCB2b2lkICkNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisjZW5kaWYNCisNCisNCisJDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NU1A0MzBGNDQ5L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NU1A0MzBGNDQ5L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmM0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01TUDQzMEY0NDkvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0U0hPUlQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlhc20gdm9sYXRpbGUgKCAiRElOVCIgKTsgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCWFzbSB2b2xhdGlsZSAoICJFSU5UIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1bnNpZ25lZCBwb3J0U0hPUlQgKSAwICkNCisNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRTSE9SVCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydFNIT1JUIHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCVwNCisJCXVzQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwlcDQorCQkvKiByZS1lbmFibGVkLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCXZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3d2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3NTBjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplL3BvcnQuYwpAQCAtMCwwICsxLDM3MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorLyogSGFyZHdhcmUgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHhpbnRjLmg+DQorI2luY2x1ZGUgPHhpbnRjX2kuaD4NCisjaW5jbHVkZSA8eHRtcmN0ci5oPg0KKw0KKy8qIFRhc2tzIGFyZSBzdGFydGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfTVNSX1NUQVRFCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAyICkNCisNCisvKiBUYXNrcyBhcmUgc3RhcnRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIG9mIDAgLSBob3dldmVyIHByaW9yDQordG8gdGhlIHNjaGVkdWxlciBiZWluZyBjb21tZW5jZWQgd2UgZG9uJ3Qgd2FudCB0aGUgY3JpdGljYWwgbmVzdGluZyBsZXZlbA0KK3RvIHJlYWNoIHplcm8sIHNvIGl0IGlzIGluaXRpYWxpc2VkIHRvIGEgaGlnaCB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUUJKCAweGZmICkNCisNCisvKiBPdXIgaGFyZHdhcmUgc2V0dXAgb25seSB1c2VzIG9uZSBjb3VudGVyLiAqLw0KKyNkZWZpbmUgcG9ydENPVU5URVJfMCAJCQkJMA0KKw0KKy8qIFRoZSBzdGFjayB1c2VkIGJ5IHRoZSBJU1IgaXMgZmlsbGVkIHdpdGggYSBrbm93biB2YWx1ZSB0byBhc3Npc3QgaW4NCitkZWJ1Z2dpbmcuICovDQorI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfVkFMVUUJMHg1NTU1NTU1NQ0KKw0KKy8qIENvdW50cyB0aGUgbmVzdGluZyBkZXB0aCBvZiBjYWxscyB0byBwb3J0RU5URVJfQ1JJVElDQUwoKS4gIEVhY2ggdGFzayANCittYWludGFpbnMgaXQncyBvd24gY291bnQsIHNvIHRoaXMgdmFyaWFibGUgaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzaw0KK2NvbnRleHQuICovDQordm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUU7DQorDQorLyogVG8gbGltaXQgdGhlIGFtb3VudCBvZiBzdGFjayByZXF1aXJlZCBieSBlYWNoIHRhc2ssIHRoaXMgcG9ydCB1c2VzIGENCitzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4gKi8NCit1bnNpZ25lZCBsb25nICpwdWxJU1JTdGFjazsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHMgdXAgdGhlIHBlcmlvZGljIElTUiB1c2VkIGZvciB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDAsIGJ1dA0KKyAqIGNvdWxkIGhhdmUgYWx0ZXJuYXRpdmVseSB1c2VkIHRoZSB3YXRjaGRvZyB0aW1lciBvciB0aW1lciAxLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIG1hZGUuDQorICogDQorICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorZXh0ZXJuIHZvaWQgKl9TREEyX0JBU0VfLCAqX1NEQV9CQVNFXzsNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsUjIgPSAoIHVuc2lnbmVkIGxvbmcgKSAmX1NEQTJfQkFTRV87DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFIxMyA9ICggdW5zaWduZWQgbG9uZyApICZfU0RBX0JBU0VfOw0KKw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGVzc2VudGlhbCBmb3IgdGhlIE1pY3JvYmxhemUgcG9ydCBhbmQgdGhlc2UgbGluZXMgbXVzdA0KKwlub3QgYmUgb21pdHRlZC4gIFRoZSBwYXJhbWV0ZXIgdmFsdWUgd2lsbCBvdmVyd3JpdGUgdGhlIA0KKwkweDIyMjIyMjIyIHZhbHVlIGR1cmluZyB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjIyMjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgzMzMzMzMzMzsNCisJcHhUb3BPZlN0YWNrLS07IA0KKw0KKwkvKiBGaXJzdCBzdGFjayBhbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcw0KKwlpcyBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRhc2tzIGFyZSBzdGFydGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDA7CS8qIFIwLiAqLw0KKw0KKwkvKiBQbGFjZSBhbiBpbml0aWFsIHZhbHVlIGZvciBhbGwgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHVsUjI7CS8qIFIyIC0gc21hbGwgZGF0YSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAzOwkvKiBSMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDsJLyogUjQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsvKiBSNSBjb250YWlucyB0aGUgZnVuY3Rpb24gY2FsbCBwYXJhbWV0ZXJzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA2OwkvKiBSNi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzsJLyogUjcuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDg7CS8qIFI4LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA5OwkvKiBSOS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwYTsJLyogUjEwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDBiOwkvKiBSMTEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MGM7CS8qIFIxMi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdWxSMTM7CS8qIFIxMyAtIHNtYWxsIGRhdGEgcmVhZCB3cml0ZSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFIxNC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwZjsJLyogUjE1LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwOwkvKiBSMTYuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTE7CS8qIFIxNy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjsJLyogUjE4LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEzOwkvKiBSMTkuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTQ7CS8qIFIyMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxNTsJLyogUjIxLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE2OwkvKiBSMjIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTc7CS8qIFIyMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxODsJLyogUjI0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE5OwkvKiBSMjUuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWE7CS8qIFIyNi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxYjsJLyogUjI3LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDFjOwkvKiBSMjguICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWQ7CS8qIFIyOS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxZTsJLyogUjMwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIE1TUiBpcyBzdGFja2VkIGJldHdlZW4gUjMwIGFuZCBSMzEuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9NU1JfU1RBVEU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWY7CS8qIFIzMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCAoIF9fRnJlZVJUT1NfaW50ZXJydXB0X0hhbmRsZXIgKSggdm9pZCApOw0KK2V4dGVybiB2b2lkICggdlN0YXJ0Rmlyc3RUYXNrICkoIHZvaWQgKTsNCisNCisNCisJLyogU2V0dXAgdGhlIEZyZWVSVE9TIGludGVycnVwdCBoYW5kbGVyLiAgQ29kZSBjb3BpZWQgZnJvbSBjcnQwLnMuICovDQorCWFzbSB2b2xhdGlsZSAoIAkibGEJcjYsIHIwLCBfX0ZyZWVSVE9TX2ludGVycnVwdF9oYW5kbGVyCQlcblx0IiBcDQorCQkJCQkic3cJcjYsIHIxLCByMAkJCQkJCQkJCVxuXHQiIFwNCisJCQkJCSJsaHUgcjcsIHIxLCByMAkJCQkJCQkJCVxuXHQiIFwNCisJCQkJCSJzaGkgcjcsIHIwLCAweDEyCQkJCQkJCQlcblx0IiBcDQorCQkJCQkic2hpIHI2LCByMCwgMHgxNiAiICk7DQorDQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogQWxsb2NhdGUgdGhlIHN0YWNrIHRvIGJlIHVzZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLiAqLw0KKwlwdWxJU1JTdGFjayA9ICggdW5zaWduZWQgbG9uZyAqICkgcHZQb3J0TWFsbG9jKCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKTsNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJaWYoIHB1bElTUlN0YWNrICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBGaWxsIHRoZSBJU1Igc3RhY2sgd2l0aCBhIGtub3duIHZhbHVlIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLiAqLw0KKwkJbWVtc2V0KCBwdWxJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX1ZBTFVFLCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKTsNCisJCXB1bElTUlN0YWNrICs9ICggY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFIC0gMSApOw0KKw0KKwkJLyogS2ljayBvZmYgdGhlIGZpcnN0IHRhc2suICovDQorCQl2U3RhcnRGaXJzdFRhc2soKTsNCisJfQ0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZEZBTFNFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGVkIGJ5IHBvcnRZSUVMRCBvciB0YXNrWUlFTEQuICANCisgKi8NCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCBWUG9ydFlpZWxkQVNNKCB2b2lkICk7DQorDQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0byBhc3N1cmUgaXQgaXMNCisJbm90IGludGVycnVwdGVkIGJ5IHRoZSB0aWNrIElTUi4gIEl0IGlzIG5vdCBhIHByb2JsZW0gdG8gZG8gdGhpcyBhcw0KKwllYWNoIHRhc2sgbWFpbnRhaW5zIGl0J3Mgb3duIGludGVycnVwdCBzdGF0dXMuICovDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwkJLyogSnVtcCBkaXJlY3RseSB0byB0aGUgeWllbGQgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGlzIG5vDQorCQljb21waWxlciBnZW5lcmF0ZWQgcHJvbG9ndWUgY29kZS4gKi8NCisJCWFzbSB2b2xhdGlsZSAoCSJicmFsaWQgcjE0LCBWUG9ydFlpZWxkQVNNCQlcblx0IiBcDQorCQkJCQkJIm9yIHIwLCByMCwgcjAJCQkJCVxuXHQiICk7DQorCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gICANCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorWFRtckN0ciB4VGltZXI7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bENvdW50ZXJWYWx1ZSA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4TWFzazsNCisNCisJLyogVGhlIE9QQiB0aW1lcjEgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljay4gIFVzZSB0aGUgcHJvdmlkZWQgbGlicmFyeQ0KKwlmdW5jdGlvbnMgdG8gZW5hYmxlIHRoZSB0aW1lciBhbmQgc2V0IHRoZSB0aWNrIGZyZXF1ZW5jeS4gKi8NCisJWFRtckN0cl9tRGlzYWJsZSggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgWFBBUl9PUEJfVElNRVJfMV9ERVZJQ0VfSUQgKTsNCisJWFRtckN0cl9Jbml0aWFsaXplKCAmeFRpbWVyLCBYUEFSX09QQl9USU1FUl8xX0RFVklDRV9JRCApOw0KKyAgIAlYVG1yQ3RyX21TZXRMb2FkUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCB1bENvdW50ZXJWYWx1ZSApOw0KKwlYVG1yQ3RyX21TZXRDb250cm9sU3RhdHVzUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCBYVENfQ1NSX0xPQURfTUFTSyB8IFhUQ19DU1JfSU5UX09DQ1VSRURfTUFTSyApOw0KKw0KKwkvKiBTZXQgdGhlIHRpbWVyIGludGVycnVwdCBlbmFibGUgYml0IHdoaWxlIG1haW50YWluaW5nIHRoZSBvdGhlciBiaXQgDQorCXN0YXRlcy4gKi8NCisJdXhNYXNrID0gWEludGNfSW4zMiggKCBYUEFSX09QQl9JTlRDXzBfQkFTRUFERFIgKyBYSU5fSUVSX09GRlNFVCApICk7DQorCXV4TWFzayB8PSBYUEFSX09QQl9USU1FUl8xX0lOVEVSUlVQVF9NQVNLOw0KKwlYSW50Y19PdXQzMiggKCBYUEFSX09QQl9JTlRDXzBfQkFTRUFERFIgKyBYSU5fSUVSX09GRlNFVCApLCAoIHV4TWFzayApICk7CQ0KKwkNCisJWFRtckN0cl9TdGFydCggJnhUaW1lciwgWFBBUl9PUEJfVElNRVJfMV9ERVZJQ0VfSUQgKTsNCisJWFRtckN0cl9tU2V0Q29udHJvbFN0YXR1c1JlZyhYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCBYVENfQ1NSX0VOQUJMRV9UTVJfTUFTSyB8IFhUQ19DU1JfRU5BQkxFX0lOVF9NQVNLIHwgWFRDX0NTUl9BVVRPX1JFTE9BRF9NQVNLIHwgWFRDX0NTUl9ET1dOX0NPVU5UX01BU0sgfCBYVENfQ1NSX0lOVF9PQ0NVUkVEX01BU0sgKTsNCisJWEludGNfbUFja0ludHIoIFhQQVJfSU5UQ19TSU5HTEVfQkFTRUFERFIsIDEgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgcGxhY2VkIGluIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHdoZW4gdGhlIHNjaGVkdWxlciBpcw0KKyAqIHN0YXJ0ZWQuICBUaGUgdGFzayBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgd2hlbiB0aGlzIGlzIGNhbGxlZC4NCisgKiBUaGlzIGhhbmRsZXIgZGV0ZXJtaW5lcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBhbmQgY2FsbHMgdGhlIHJlbGV2YW50IA0KKyAqIHBlcmlwaGVyYWwgaGFuZGxlci4NCisgKi8NCit2b2lkIHZUYXNrSVNSSGFuZGxlciggdm9pZCApDQorew0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVsUGVuZGluZzsgICAgDQorDQorCS8qIFdoaWNoIGludGVycnVwdHMgYXJlIHBlbmRpbmc/ICovDQorCXVsUGVuZGluZyA9IFhJbnRjX0luMzIoICggWFBBUl9JTlRDX1NJTkdMRV9CQVNFQUREUiArIFhJTl9JVlJfT0ZGU0VUICkgKTsNCisNCisJaWYoIHVsUGVuZGluZyA8IFhQQVJfSU5UQ19NQVhfTlVNX0lOVFJfSU5QVVRTICkNCisJew0KKwkJc3RhdGljIFhJbnRjX1ZlY3RvclRhYmxlRW50cnkgKnB4VGFibGVQdHI7DQorCQlzdGF0aWMgWEludGNfQ29uZmlnICpweENvbmZpZzsNCisJCXN0YXRpYyB1bnNpZ25lZCBsb25nIHVsSW50ZXJydXB0TWFzazsNCisNCisJCXVsSW50ZXJydXB0TWFzayA9ICggdW5zaWduZWQgbG9uZyApIDEgPDwgdWxQZW5kaW5nOw0KKw0KKwkJLyogR2V0IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgdXNpbmcgdGhlIGRldmljZSBJRCAqLw0KKwkJcHhDb25maWcgPSAmWEludGNfQ29uZmlnVGFibGVbICggdW5zaWduZWQgbG9uZyApIFhQQVJfSU5UQ19TSU5HTEVfREVWSUNFX0lEIF07DQorDQorCQlweFRhYmxlUHRyID0gJiggcHhDb25maWctPkhhbmRsZXJUYWJsZVsgdWxQZW5kaW5nIF0gKTsNCisJCWlmKCBweENvbmZpZy0+QWNrQmVmb3JlU2VydmljZSAmICggdWxJbnRlcnJ1cHRNYXNrICApICkNCisJCXsNCisJCQlYSW50Y19tQWNrSW50ciggcHhDb25maWctPkJhc2VBZGRyZXNzLCB1bEludGVycnVwdE1hc2sgKTsNCisJCQlweFRhYmxlUHRyLT5IYW5kbGVyKCBweFRhYmxlUHRyLT5DYWxsQmFja1JlZiApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXB4VGFibGVQdHItPkhhbmRsZXIoIHB4VGFibGVQdHItPkNhbGxCYWNrUmVmICk7DQorCQkJWEludGNfbUFja0ludHIoIHB4Q29uZmlnLT5CYXNlQWRkcmVzcywgdWxJbnRlcnJ1cHRNYXNrICk7DQorCQl9DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSGFuZGxlciBmb3IgdGhlIHRpbWVyIGludGVycnVwdC4NCisgKi8NCit2b2lkIHZUaWNrSVNSKCB2b2lkICpwdkJhc2VBZGRyZXNzICkNCit7DQordW5zaWduZWQgbG9uZyB1bENTUjsNCisNCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgLSB0aGlzIG1pZ2h0IGNhdXNlIGEgdGFzayB0byB1bmJsb2NrLiAqLw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJLyogQ2xlYXIgdGhlIHRpbWVyIGludGVycnVwdCAqLw0KKwl1bENTUiA9IFhUbXJDdHJfbUdldENvbnRyb2xTdGF0dXNSZWcoWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgMCk7CQ0KKwlYVG1yQ3RyX21TZXRDb250cm9sU3RhdHVzUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCB1bENTUiApOw0KKw0KKwkvKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGRldGVybWluZQ0KKwlpZiB0aGlzIHRpY2sgc2hvdWxkIGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJI2VuZGlmDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0YXNtLnMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydGFzbS5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmJhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydGFzbS5zCkBAIC0wLDAgKzEsMjM2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKwkuZXh0ZXJuIHB4Q3VycmVudFRDQg0KKwkuZXh0ZXJuIHZUYXNrSVNSSGFuZGxlcg0KKwkuZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dA0KKwkuZXh0ZXJuIHV4Q3JpdGljYWxOZXN0aW5nDQorCS5leHRlcm4gcHVsSVNSU3RhY2sNCisNCisJLmdsb2JhbCBfX0ZyZWVSVE9TX2ludGVycnVwdF9oYW5kbGVyDQorCS5nbG9iYWwgVlBvcnRZaWVsZEFTTQ0KKwkuZ2xvYmFsIHZTdGFydEZpcnN0VGFzaw0KKw0KKw0KKy5tYWNybyBwb3J0U0FWRV9DT05URVhUDQorCS8qIE1ha2Ugcm9vbSBmb3IgdGhlIGNvbnRleHQgb24gdGhlIHN0YWNrLiAqLw0KKwlhZGRpayByMSwgcjEsIC0xMzINCisJLyogU2F2ZSByMzEgc28gaXQgY2FuIHRoZW4gYmUgdXNlZC4gKi8NCisJc3dpIHIzMSwgcjEsIDQNCisJLyogQ29weSB0aGUgbXNyIGludG8gcjMxIC0gdGhpcyBpcyBzdGFja2VkIGxhdGVyLiAqLw0KKwltZnMgcjMxLCBybXNyDQorCS8qIFN0YWNrIGdlbmVyYWwgcmVnaXN0ZXJzLiAqLw0KKwlzd2kgcjMwLCByMSwgMTINCisJc3dpIHIyOSwgcjEsIDE2DQorCXN3aSByMjgsIHIxLCAyMA0KKwlzd2kgcjI3LCByMSwgMjQNCisJc3dpIHIyNiwgcjEsIDI4DQorCXN3aSByMjUsIHIxLCAzMg0KKwlzd2kgcjI0LCByMSwgMzYNCisJc3dpIHIyMywgcjEsIDQwDQorCXN3aSByMjIsIHIxLCA0NA0KKwlzd2kgcjIxLCByMSwgNDgNCisJc3dpIHIyMCwgcjEsIDUyDQorCXN3aSByMTksIHIxLCA1Ng0KKwlzd2kgcjE4LCByMSwgNjANCisJc3dpIHIxNywgcjEsIDY0DQorCXN3aSByMTYsIHIxLCA2OA0KKwlzd2kgcjE1LCByMSwgNzINCisJc3dpIHIxMywgcjEsIDgwDQorCXN3aSByMTIsIHIxLCA4NA0KKwlzd2kgcjExLCByMSwgODgNCisJc3dpIHIxMCwgcjEsIDkyDQorCXN3aSByOSwgcjEsIDk2DQorCXN3aSByOCwgcjEsIDEwMA0KKwlzd2kgcjcsIHIxLCAxMDQNCisJc3dpIHI2LCByMSwgMTA4DQorCXN3aSByNSwgcjEsIDExMg0KKwlzd2kgcjQsIHIxLCAxMTYNCisJc3dpIHIzLCByMSwgMTIwDQorCXN3aSByMiwgcjEsIDEyNA0KKwkvKiBTdGFjayB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIHZhbHVlLiAqLw0KKwlsd2kgcjMsIHIwLCB1eENyaXRpY2FsTmVzdGluZw0KKwlzd2kgcjMsIHIxLCAxMjgNCisJLyogU2F2ZSB0aGUgdG9wIG9mIHN0YWNrIHZhbHVlIHRvIHRoZSBUQ0IuICovDQorCWx3aSByMywgcjAsIHB4Q3VycmVudFRDQg0KKwlzdwlyMSwgcjAsIHIzDQorCQ0KKwkuZW5kbQ0KKw0KKy5tYWNybyBwb3J0UkVTVE9SRV9DT05URVhUDQorCS8qIExvYWQgdGhlIHRvcCBvZiBzdGFjayB2YWx1ZSBmcm9tIHRoZSBUQ0IuICovDQorCWx3aSByMywgcjAsIHB4Q3VycmVudFRDQg0KKwlsdwlyMSwgcjAsIHIzCQ0KKwkvKiBSZXN0b3JlIHRoZSBnZW5lcmFsIHJlZ2lzdGVycy4gKi8NCisJbHdpIHIzMSwgcjEsIDQJCQ0KKwlsd2kgcjMwLCByMSwgMTIJCQ0KKwlsd2kgcjI5LCByMSwgMTYJDQorCWx3aSByMjgsIHIxLCAyMAkNCisJbHdpIHIyNywgcjEsIDI0CQ0KKwlsd2kgcjI2LCByMSwgMjgJDQorCWx3aSByMjUsIHIxLCAzMgkNCisJbHdpIHIyNCwgcjEsIDM2CQ0KKwlsd2kgcjIzLCByMSwgNDAJDQorCWx3aSByMjIsIHIxLCA0NAkNCisJbHdpIHIyMSwgcjEsIDQ4CQ0KKwlsd2kgcjIwLCByMSwgNTIJDQorCWx3aSByMTksIHIxLCA1NgkNCisJbHdpIHIxOCwgcjEsIDYwCQ0KKwlsd2kgcjE3LCByMSwgNjQJDQorCWx3aSByMTYsIHIxLCA2OAkNCisJbHdpIHIxNSwgcjEsIDcyCQ0KKwlsd2kgcjE0LCByMSwgNzYJDQorCWx3aSByMTMsIHIxLCA4MAkNCisJbHdpIHIxMiwgcjEsIDg0CQ0KKwlsd2kgcjExLCByMSwgODgJDQorCWx3aSByMTAsIHIxLCA5MgkNCisJbHdpIHI5LCByMSwgOTYJDQorCWx3aSByOCwgcjEsIDEwMAkNCisJbHdpIHI3LCByMSwgMTA0DQorCWx3aSByNiwgcjEsIDEwOA0KKwlsd2kgcjUsIHIxLCAxMTINCisJbHdpIHI0LCByMSwgMTE2DQorCWx3aSByMiwgcjEsIDEyNA0KKw0KKwkvKiBMb2FkIHRoZSBjcml0aWNhbCBuZXN0aW5nIHZhbHVlLiAqLw0KKwlsd2kgcjMsIHIxLCAxMjgNCisJc3dpIHIzLCByMCwgdXhDcml0aWNhbE5lc3RpbmcNCisNCisJLyogT2J0YWluIHRoZSBNU1IgdmFsdWUgZnJvbSB0aGUgc3RhY2suICovDQorCWx3aSByMywgcjEsIDgNCisNCisJLyogQXJlIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgTVNSPyAgSWYgc28gcmV0dXJuIHVzaW5nIGFuIHJldHVybiBmcm9tIA0KKwlpbnRlcnJ1cHQgaW5zdHJ1Y3Rpb24gdG8gZW5zdXJlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgb25seSBvbmNlIHRoZSB0YXNrDQorCWlzIHJ1bm5pbmcgYWdhaW4uICovDQorCWFuZGkgcjMsIHIzLCAyDQorCWJlcWlkIHIzLCAzNg0KKwlvciByMCwgcjAsIHIwDQorDQorCS8qIFJlbG9hZCB0aGUgcm1zciBmcm9tIHRoZSBzdGFjaywgY2xlYXIgdGhlIGVuYWJsZSBpbnRlcnJ1cHQgYml0IGluIHRoZQ0KKwl2YWx1ZSBiZWZvcmUgc2F2aW5nIGJhY2sgdG8gcm1zciByZWdpc3RlciwgdGhlbiByZXR1cm4gZW5hYmxpbmcgaW50ZXJydXB0cw0KKwlhcyB3ZSByZXR1cm4uICovDQorCWx3aSByMywgcjEsIDgNCisJYW5kaSByMywgcjMsIH4yDQorCW10cyBybXNyLCByMw0KKwlsd2kgcjMsIHIxLCAxMjANCisJYWRkaWsgcjEsIHIxLCAxMzINCisJcnRpZCByMTQsIDANCisJb3IgcjAsIHIwLCByMA0KKw0KKwkvKiBSZWxvYWQgdGhlIHJtc3IgZnJvbSB0aGUgc3RhY2ssIHBsYWNlIGl0IGluIHRoZSBybXNyIHJlZ2lzdGVyLCBhbmQNCisJcmV0dXJuIHdpdGhvdXQgZW5hYmxpbmcgaW50ZXJydXB0cy4gKi8NCisJbHdpIHIzLCByMSwgOA0KKwltdHMgcm1zciwgcjMNCisJbHdpIHIzLCByMSwgMTIwDQorCWFkZGlrIHIxLCByMSwgMTMyDQorCXJ0c2QgcjE0LCAwDQorCW9yIHIwLCByMCwgcjANCisNCisJLmVuZG0NCisNCisJLnRleHQNCisJLmFsaWduICAyDQorDQorDQorX19GcmVlUlRPU19pbnRlcnJ1cHRfaGFuZGxlcjoNCisJcG9ydFNBVkVfQ09OVEVYVA0KKwkvKiBFbnRlcmVkIHZpYSBhbiBpbnRlcnJ1cHQgc28gaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgaW4gbXNyLiAqLw0KKwlvcmkgcjMxLCByMzEsIDINCisJLyogU3RhY2sgbXNyLiAqLw0KKwlzd2kgcjMxLCByMSwgOA0KKwkvKiBTdGFjayB0aGUgcmV0dXJuIGFkZHJlc3MuICBBcyB3ZSBlbnRlcmVkIHZpYSBhbiBpbnRlcnJ1cHQgd2UgZG8NCisJbm90IG5lZWQgdG8gbW9kaWZ5IHRoZSByZXR1cm4gYWRkcmVzcyBwcmlvciB0byBzdGFja2luZy4gKi8NCisJc3dpIHIxNCwgcjEsIDc2DQorCS8qIE5vdyBzd2l0Y2ggdG8gdXNlIHRoZSBJU1Igc3RhY2suICovDQorCWx3aSByMywgcjAsIHB1bElTUlN0YWNrDQorCWFkZCByMSwgcjMsIHIwDQorCWJyYWxpZCByMTUsIHZUYXNrSVNSSGFuZGxlcg0KKwlvciByMCwgcjAsIHIwDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisNCitWUG9ydFlpZWxkQVNNOg0KKwlwb3J0U0FWRV9DT05URVhUDQorCS8qIFN0YWNrIG1zci4gKi8NCisJc3dpIHIzMSwgcjEsIDgNCisJLyogTW9kaWZ5IHRoZSByZXR1cm4gYWRkcmVzcyBzbyB3ZSByZXR1cm4gdG8gdGhlIGluc3RydWN0aW9uIGFmdGVyIHRoZQ0KKwlleGNlcHRpb24uICovDQorCWFkZGkgcjE0LCByMTQsIDgNCisJc3dpIHIxNCwgcjEsIDc2DQorCS8qIE5vdyBzd2l0Y2ggdG8gdXNlIHRoZSBJU1Igc3RhY2suICovDQorCWx3aSByMywgcjAsIHB1bElTUlN0YWNrDQorCWFkZCByMSwgcjMsIHIwDQorCWJyYWxpZCByMTUsIHZUYXNrU3dpdGNoQ29udGV4dA0KKwlvciByMCwgcjAsIHIwDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCit2U3RhcnRGaXJzdFRhc2s6DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisJDQorCQ0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM1OWZiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTU3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0TE9ORw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQordm9pZCBtaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cyggdm9pZCApOw0KK3ZvaWQgbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cyggdm9pZCApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCW1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQltaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hY3Jvcy4gKi8NCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWV4dGVybiB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCW1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CQkJCQlcDQorCQkJCQkJCQkJCXV4Q3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJZXh0ZXJuIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIHdlIGNhbiAqLwkJCVwNCisJCQkJCQkJCQkJLyogYWNjZXNzIHRoZSB2YXJpYWJsZSBkaXJlY3RseS4gKi8JCQkJCVwNCisJCQkJCQkJCQkJdXhDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCVwNCisJCQkJCQkJCQkJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQkJCVwNCisJCQkJCQkJCQkJewkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkvKiBUaGUgbmVzdGluZyBoYXMgdW53b3VuZCBhbmQgd2UgCQkJCVwNCisJCQkJCQkJCQkJCWNhbiBlbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8JCQkJCVwNCisJCQkJCQkJCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCVwNCisJCQkJCQkJCQkJfQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgdlBvcnRZaWVsZCgpDQorDQordm9pZCB2VGFza1N3aXRjaENvbnRleHQoKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYWQzYQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnQuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorLyogSGFyZHdhcmUgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHhpbnRjX2kuaD4NCisjaW5jbHVkZSA8eGlsX2V4Y2VwdGlvbi5oPg0KKyNpbmNsdWRlIDxtaWNyb2JsYXplX2V4Y2VwdGlvbnNfZy5oPg0KKw0KKy8qIFRhc2tzIGFyZSBzdGFydGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uIG5lc3Rpbmcgb2YgMCAtIGhvd2V2ZXIsIHByaW9yIHRvIA0KK3RoZSBzY2hlZHVsZXIgYmVpbmcgY29tbWVuY2VkIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBlbmFibGVkLCBzbyB0aGUgY3JpdGljYWwgDQorbmVzdGluZyB2YXJpYWJsZSBpcyBpbml0aWFsaXNlZCB0byBhIG5vbi16ZXJvIHZhbHVlLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfTkVTVElOR19WQUxVRQkoIDB4ZmYgKQ0KKw0KKy8qIFRoZSBiaXQgd2l0aGluIHRoZSBNU1IgcmVnaXN0ZXIgdGhhdCBlbmFibGVkL2Rpc2FibGVzIGludGVycnVwdHMuICovDQorI2RlZmluZSBwb3J0TVNSX0lFCQkJCQkoIDB4MDJVICkNCisNCisvKiBJZiB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdCBpcyBpbmNsdWRlZCBpbiB0aGUgTWljcm9CbGF6ZSBidWlsZCwgdGhlbiB0aGUNCitGU1IgcmVnaXN0ZXIgaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgcG9ydElOSVRJQUxfRlNSIGlzIHRoZSB2YWx1ZQ0KK2dpdmVuIHRvIHRoZSBGU1IgcmVnaXN0ZXIgd2hlbiB0aGUgaW5pdGlhbCBjb250ZXh0IGlzIHNldCB1cCBmb3IgYSB0YXNrIGJlaW5nDQorY3JlYXRlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX0ZTUgkJCQkoIDBVICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlLg0KKyAqLw0KK3N0YXRpYyBsb25nIHBydkluaXRpYWxpc2VJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICk7DQorDQorLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnN0YW5jZSB2YXJpYWJsZSBpcyBpbml0aWFsaXNlZCBiZWZvcmUgaXQgaXMgDQorICogdXNlZCwgYW5kIHRoYXQgdGhlIGluaXRpYWxpc2F0aW9uIG9ubHkgaGFwcGVucyBvbmNlLiANCisgKi8NCitzdGF0aWMgbG9uZyBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvdW50cyB0aGUgbmVzdGluZyBkZXB0aCBvZiBjYWxscyB0byBwb3J0RU5URVJfQ1JJVElDQUwoKS4gIEVhY2ggdGFzayANCittYWludGFpbnMgaXRzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQorY29udGV4dC4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gcG9ydElOSVRJQUxfTkVTVElOR19WQUxVRTsNCisNCisvKiBUaGlzIHBvcnQgdXNlcyBhIHNlcGFyYXRlIHN0YWNrIGZvciBpbnRlcnJ1cHRzLiAgVGhpcyBwcmV2ZW50cyB0aGUgc3RhY2sgb2YNCitldmVyeSB0YXNrIG5lZWRpbmcgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW4gZW50aXJlIGludGVycnVwdCBzdGFjayBvbiB0b3ANCitvZiB0aGUgdGFzayBzdGFjay4gKi8NCit1bnNpZ25lZCBsb25nICpwdWxJU1JTdGFjazsNCisNCisvKiBJZiBhbiBpbnRlcnJ1cHQgcmVxdWVzdHMgYSBjb250ZXh0IHN3aXRjaCwgdGhlbiB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgd2lsbA0KK2dldCBzZXQgdG8gMS4gIHVsVGFza1N3aXRjaFJlcXVlc3RlZCBpcyBpbnNwZWN0ZWQganVzdCBiZWZvcmUgdGhlIG1haW4gaW50ZXJydXB0DQoraGFuZGxlciBleGl0cy4gIElmLCBhdCB0aGF0IHRpbWUsIHVsVGFza1N3aXRjaFJlcXVlc3RlZCBpcyBzZXQgdG8gMSwgdGhlIGtlcm5lbA0KK3dpbGwgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKSB0byBlbnN1cmUgdGhlIHRhc2sgdGhhdCBydW5zIGltbWVkaWF0ZWx5IGFmdGVyDQordGhlIGludGVycnVwdCBleGlzdHMgaXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIGFibGUgdG8gcnVuLiAgVGhpcyBpcyANCithbiB1bnVzdWFsIG1lY2hhbmlzbSwgYnV0IGlzIHVzZWQgZm9yIHRoaXMgcG9ydCBiZWNhdXNlIGEgc2luZ2xlIGludGVycnVwdCBjYW4gDQorY2F1c2UgdGhlIHNlcnZpY2luZyBvZiBtdWx0aXBsZSBwZXJpcGhlcmFscyAtIGFuZCBpdCBpcyBpbmVmZmljaWVudCB0byBjYWxsDQordlRhc2tTd2l0Y2hDb250ZXh0KCkgbXVsdGlwbGUgdGltZXMgYXMgZWFjaCBwZXJpcGhlcmFsIGlzIHNlcnZpY2VkLiAqLw0KK3ZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMFVMOw0KKw0KKy8qIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdXNlZCBieSB0aGlzIHBvcnQuICBUaGlzIGlzIHJlcXVpcmVkDQorYnkgdGhlIFhpbGlueCBsaWJyYXJ5IEFQSSBmdW5jdGlvbnMuICovDQorc3RhdGljIFhJbnRjIHhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2U7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBtYWRlLg0KKyAqIA0KKyAqIFNlZSB0aGUgcG9ydGFibGUuaCBoZWFkZXIgZmlsZS4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK2V4dGVybiB2b2lkICpfU0RBMl9CQVNFXywgKl9TREFfQkFTRV87DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFIyID0gKCB1bnNpZ25lZCBsb25nICkgJl9TREEyX0JBU0VfOw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgdWxSMTMgPSAoIHVuc2lnbmVkIGxvbmcgKSAmX1NEQV9CQVNFXzsNCisNCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHRoZSBNaWNyb2JsYXplIHBvcnQgYW5kIHRoZXNlIGxpbmVzIG11c3QNCisJbm90IGJlIG9taXR0ZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9VU0VfRlBVID09IDENCisJCS8qIFRoZSBGU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBpcyBqdXN0IDAuICovDQorCQkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRlNSOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbmRpZg0KKw0KKwkvKiBUaGUgTVNSIHZhbHVlIHBsYWNlZCBpbiB0aGUgaW5pdGlhbCB0YXNrIGNvbnRleHQgc2hvdWxkIGhhdmUgaW50ZXJydXB0cw0KKwlkaXNhYmxlZC4gIEVhY2ggdGFzayB3aWxsIGVuYWJsZSBpbnRlcnJ1cHRzIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBlbnRlcnMNCisJdGhlIHJ1bm5pbmcgc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gbWZtc3IoKSAmIH5wb3J0TVNSX0lFOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogRmlyc3Qgc3RhY2sgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCisJaXMgaW5pdGlhbGlzZWQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwOw0KKwkNCisJLyogUjAgaXMgYWx3YXlzIHplcm8uICovDQorCS8qIFIxIGlzIHRoZSBTUC4gKi8NCisNCisJLyogUGxhY2UgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSB1bFIyOwkvKiBSMiAtIHJlYWQgb25seSBzbWFsbCBkYXRhIGFyZWEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDM7CS8qIFIzIC0gcmV0dXJuIHZhbHVlcyBhbmQgdGVtcG9yYXJpZXMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDQ7CS8qIFI0IC0gcmV0dXJuIHZhbHVlcyBhbmQgdGVtcG9yYXJpZXMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsvKiBSNSBjb250YWlucyB0aGUgZnVuY3Rpb24gY2FsbCBwYXJhbWV0ZXJzLiAqLw0KKw0KKwkjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA2OwkvKiBSNiAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAgVXNlZCBhcyB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSB2UG9ydFRhc2tFbnRyeVBvaW50LiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDc7CS8qIFI3IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwODsJLyogUjggLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA5OwkvKiBSOSAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MGE7CS8qIFIxMCAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MGI7CS8qIFIxMSAtIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MGM7CS8qIFIxMiAtIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbHNlDQorCQlweFRvcE9mU3RhY2stPSA4Ow0KKwkjZW5kaWYNCisJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdWxSMTM7CS8qIFIxMyAtIHJlYWQvd3JpdGUgc21hbGwgZGF0YSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFIxNCAtIHJldHVybiBhZGRyZXNzIGZvciBpbnRlcnJ1cHQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIE5VTEw7CS8qIFIxNSAtIHJldHVybiBhZGRyZXNzIGZvciBzdWJyb3V0aW5lLiAqLw0KKwkNCisJI2lmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMDsJLyogUjE2IC0gcmV0dXJuIGFkZHJlc3MgZm9yIHRyYXAgKGRlYnVnZ2VyKS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExOwkvKiBSMTcgLSByZXR1cm4gYWRkcmVzcyBmb3IgZXhjZXB0aW9ucywgaWYgY29uZmlndXJlZC4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEyOwkvKiBSMTggLSByZXNlcnZlZCBmb3IgYXNzZW1ibGVyIGFuZCBjb21waWxlciB0ZW1wb3Jhcmllcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDQ7DQorCSNlbmRpZg0KKwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwOwkvKiBSMTkgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICBTZWVtcyB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZnJhbWUgcG9pbnRlci4gKi8NCisJDQorCSNpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORwkNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE0OwkvKiBSMjAgLSByZXNlcnZlZCBmb3Igc3RvcmluZyBhIHBvaW50ZXIgdG8gdGhlIEdsb2JhbCBPZmZzZXQgVGFibGUgKEdPVCkgaW4gUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKS4gTm9uLXZvbGF0aWxlIGluIG5vbi1QSUMgY29kZS4gTXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAgTm90IHVzZWQgYnkgRnJlZVJUT1MuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxNTsJLyogUjIxIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTY7CS8qIFIyMiAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE3OwkvKiBSMjMgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxODsJLyogUjI0IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTk7CS8qIFIyNSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDFhOwkvKiBSMjYgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxYjsJLyogUjI3IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWM7CS8qIFIyOCAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDFkOwkvKiBSMjkgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxZTsJLyogUjMwIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWY7CS8qIFIzMSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDEzOw0KKwkjZW5kaWYNCisNCisJLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBzbyB0aGlzIA0KKwljYW4JYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCAoIHZQb3J0U3RhcnRGaXJzdFRhc2sgKSggdm9pZCApOw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9zdGFja1tdOw0KKw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQorCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgDQorCQ0KKwlUaGlzIHBvcnQgdXNlcyBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluc3RhbGwgdGhlIHRpY2sNCisJaW50ZXJydXB0IGhhbmRsZXIgYmVjYXVzZSB0aGUga2VybmVsIHdpbGwgcnVuIG9uIGxvdHMgb2YgZGlmZmVyZW50IA0KKwlNaWNyb0JsYXplIGFuZCBGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IGFsbCBvZgl3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgDQorCXRpbWVyIHBlcmlwaGVyYWxzIGRlZmluZWQgb3IgYXZhaWxhYmxlLiAgQW4gZXhhbXBsZSBkZWZpbml0aW9uIG9mDQorCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBwcm92aWRlZCBpbiB0aGUgb2ZmaWNpYWwgZGVtbw0KKwlhcHBsaWNhdGlvbiB0aGF0IGFjY29tcGFuaWVzIHRoaXMgcG9ydC4gKi8NCisJdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBSZXVzZSB0aGUgc3RhY2sgZnJvbSBtYWluKCkgYXMgdGhlIHN0YWNrIGZvciB0aGUgaW50ZXJydXB0cy9leGNlcHRpb25zLiAqLw0KKwlwdWxJU1JTdGFjayA9ICggdW5zaWduZWQgbG9uZyAqICkgX3N0YWNrOw0KKw0KKwkvKiBFbnN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQNCisJc2VydmljZSByb3V0aW5lcyB0byB3cml0ZSBiYWNrIGludG8gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBjYWxsZXIuICovDQorCXB1bElTUlN0YWNrIC09IDI7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICBGcm9tIGhlcmUNCisJb24sIHRoZSBjcmVhdGVkIHRhc2tzIHdpbGwgYmUgZXhlY3V0aW5nLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4gIA0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIFZQb3J0WWllbGRBU00oIHZvaWQgKTsNCisNCisJLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2ggaW4gYSBjcml0aWNhbCBzZWN0aW9uIHRvIGFzc3VyZSBpdCBpcw0KKwlub3QgaW50ZXJydXB0ZWQgYnkgdGhlIHRpY2sgSVNSLiAgSXQgaXMgbm90IGEgcHJvYmxlbSB0byBkbyB0aGlzIGFzDQorCWVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzLiAqLw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJew0KKwkJLyogSnVtcCBkaXJlY3RseSB0byB0aGUgeWllbGQgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGlzIG5vDQorCQljb21waWxlciBnZW5lcmF0ZWQgcHJvbG9ndWUgY29kZS4gKi8NCisJCWFzbSB2b2xhdGlsZSAoCSJicmFsaWQgcjE0LCBWUG9ydFlpZWxkQVNNCQlcblx0IiBcDQorCQkJCQkJIm9yIHIwLCByMCwgcjAJCQkJCVxuXHQiICk7DQorCX0NCisJcG9ydEVYSVRfQ1JJVElDQUwoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuYWJsZUludGVycnVwdCggdW5zaWduZWQgY2hhciB1Y0ludGVycnVwdElEICkNCit7DQorbG9uZyBsUmV0dXJuOw0KKw0KKwkvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZW5hYmxlIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0DQorCWNvbnRyb2xsZXIgYmVjYXVzZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZQ0KKwl0byB0aGlzIGZpbGUuICovDQorCWxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwl7DQorCQlYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElEICk7DQorCX0NCisJDQorCWNvbmZpZ0FTU0VSVCggbFJldHVybiApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdCggdW5zaWduZWQgY2hhciB1Y0ludGVycnVwdElEICkNCit7DQorbG9uZyBsUmV0dXJuOw0KKw0KKwkvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZGlzYWJsZSBhbiBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdA0KKwljb250cm9sbGVyIGJlY2F1c2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIHByaXZhdGUNCisJdG8gdGhpcyBmaWxlLiAqLw0KKwlsUmV0dXJuID0gcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoKTsNCisJDQorCWlmKCBsUmV0dXJuID09IHBkUEFTUyApDQorCXsNCisJCVhJbnRjX0Rpc2FibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElEICk7DQorCX0NCisJDQorCWNvbmZpZ0FTU0VSVCggbFJldHVybiApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVuc2lnbmVkIGNoYXIgdWNJbnRlcnJ1cHRJRCwgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLCB2b2lkICpwdkNhbGxCYWNrUmVmICkNCit7DQorbG9uZyBsUmV0dXJuOw0KKw0KKwkvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gaW5zdGFsbCBhbiBpbnRlcnJ1cHQgaGFuZGxlciBiZWNhdXNlIHRoZSANCisJaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZSB0byB0aGlzIGZpbGUuICovDQorDQorCWxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwkNCisJaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCisJew0KKwkJbFJldHVybiA9IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElELCBweEhhbmRsZXIsIHB2Q2FsbEJhY2tSZWYgKTsNCisJfQ0KKw0KKwlpZiggbFJldHVybiA9PSBYU1RfU1VDQ0VTUyApDQorCXsNCisJCWxSZXR1cm4gPSBwZFBBU1M7DQorCX0NCisJDQorCWNvbmZpZ0FTU0VSVCggbFJldHVybiA9PSBwZFBBU1MgKTsNCisNCisJcmV0dXJuIGxSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBsb25nIHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCB2b2lkICkNCit7DQorc3RhdGljIGxvbmcgbEludGVycnVwdENvbnRyb2xsZXJJbml0aWFsaXNlZCA9IHBkRkFMU0U7DQorbG9uZyBsUmV0dXJuOw0KKw0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIGluaXRpYWxpc2VkIGJlZm9yZQ0KKwlpdCBpcyB1c2VkLCBhbmQgdGhhdCB0aGUgaW5pdGlhbGlzYXRpb24gb25seSBoYXBwZW5zIG9uY2UuICovDQorCWlmKCBsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkICE9IHBkVFJVRSApDQorCXsNCisJCWxSZXR1cm4gPSBwcnZJbml0aWFsaXNlSW50ZXJydXB0Q29udHJvbGxlcigpOw0KKwkJDQorCQlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwkJew0KKwkJCWxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgPSBwZFRSVUU7DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQlsUmV0dXJuID0gcGRQQVNTOw0KKwl9DQorDQorCXJldHVybiBsUmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBIYW5kbGVyIGZvciB0aGUgdGltZXIgaW50ZXJydXB0LiAgVGhpcyBpcyB0aGUgaGFuZGxlciB0aGF0IHRoZSBhcHBsaWNhdGlvbg0KKyAqIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpIHNob3VsZCBpbnN0YWxsLg0KKyAqLw0KK3ZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICpwdlVudXNlZCApDQorew0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisJLyogRW5zdXJlIHRoZSB1bnVzZWQgcGFyYW1ldGVyIGRvZXMgbm90IGdlbmVyYXRlIGEgY29tcGlsZXIgd2FybmluZy4gKi8NCisJKCB2b2lkICkgcHZVbnVzZWQ7DQorDQorCS8qIFRoaXMgcG9ydCB1c2VzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHRpY2sNCisJaW50ZXJydXB0IGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudCBNaWNyb0JsYXplIGFuZCANCisJRlBHQSBjb25maWd1cmF0aW9ucyAtIG5vdCBhbGwgb2Ygd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lIHRpbWVyIHBlcmlwaGVyYWxzIA0KKwlkZWZpbmVkIG9yIGF2YWlsYWJsZS4gIEFuIGV4YW1wbGUgZGVmaW5pdGlvbiBvZg0KKwl2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCkgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8NCisJYXBwbGljYXRpb24gdGhhdCBhY2NvbXBhbmllcyB0aGlzIHBvcnQuICovCQ0KKwl2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIC0gdGhpcyBtaWdodCBjYXVzZSBhIHRhc2sgdG8gdW5ibG9jay4gKi8NCisJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCS8qIElmIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIHRoZW4gYSBjb250ZXh0IHN3aXRjaCBzaG91bGQgYmUNCisJcmVxdWVzdGVkIGluIGNhc2UgaW5jcmVtZW50aW5nIHRoZSB0aWNrIHVuYmxvY2tlZCBhIHRhc2ssIG9yIGEgdGltZSBzbGljZQ0KKwlzaG91bGQgY2F1c2UgYW5vdGhlciB0YXNrIHRvIGVudGVyIHRoZSBSdW5uaW5nIHN0YXRlLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJLyogRm9yY2UgdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gYmUgY2FsbGVkIGFzIHRoZSBpbnRlcnJ1cHQgZXhpdHMuICovDQorCQl1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgPSAxOw0KKwkjZW5kaWYNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIGxvbmcgcHJ2SW5pdGlhbGlzZUludGVycnVwdENvbnRyb2xsZXIoIHZvaWQgKQ0KK3sNCitsb25nIGxTdGF0dXM7DQorDQorCWxTdGF0dXMgPSBYSW50Y19Jbml0aWFsaXplKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfVE9fVVNFICk7DQorDQorCWlmKCBsU3RhdHVzID09IFhTVF9TVUNDRVNTICkNCisJew0KKwkJLyogSW5pdGlhbGlzZSB0aGUgZXhjZXB0aW9uIHRhYmxlLiAqLw0KKwkJWGlsX0V4Y2VwdGlvbkluaXQoKTsNCisNCisJICAgIC8qIFNlcnZpY2UgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyBlYWNoIHRpbWUgdGhlIGhhbmRsZXIgaXMgZW50ZXJlZC4gKi8NCisJICAgIFhJbnRjX1NldEludHJTdmNPcHRpb24oIHhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UuQmFzZUFkZHJlc3MsIFhJTl9TVkNfQUxMX0lTUlNfT1BUSU9OICk7DQorDQorCSAgICAvKiBJbnN0YWxsIGV4Y2VwdGlvbiBoYW5kbGVycyBpZiB0aGUgTWljcm9CbGF6ZSBpcyBjb25maWd1cmVkIHRvIGhhbmRsZQ0KKwkgICAgZXhjZXB0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbnN0YW50DQorCSAgICBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyBpcyBzZXQgdG8gMS4gKi8NCisJCSNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKQ0KKwkgICAgew0KKwkgICAgCXZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycygpOw0KKwkgICAgfQ0KKwkJI2VuZGlmIC8qIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEICovDQorDQorCQkvKiBTdGFydCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIHdoZW4gdGhlDQorCQlzY2hlZHVsZXIgc3RhcnRzLiAqLw0KKwkJbFN0YXR1cyA9IFhJbnRjX1N0YXJ0KCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgWElOX1JFQUxfTU9ERSApOw0KKw0KKwkJaWYoIGxTdGF0dXMgPT0gWFNUX1NVQ0NFU1MgKQ0KKwkJew0KKwkJCWxTdGF0dXMgPSBwZFBBU1M7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJbFN0YXR1cyA9IHBkRkFJTDsNCisJCX0NCisJfQ0KKw0KKwljb25maWdBU1NFUlQoIGxTdGF0dXMgPT0gcGRQQVNTICk7DQorDQorCXJldHVybiBsU3RhdHVzOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0X2V4Y2VwdGlvbnMuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnRfZXhjZXB0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Y2E1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0X2V4Y2VwdGlvbnMuYwpAQCAtMCwwICsxLDMxOSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogSGFyZHdhcmUgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPG1pY3JvYmxhemVfZXhjZXB0aW9uc19pLmg+DQorI2luY2x1ZGUgPG1pY3JvYmxhemVfZXhjZXB0aW9uc19nLmg+DQorDQorLyogVGhlIFhpbGlueCBsaWJyYXJ5IGRlZmluZWQgZXhjZXB0aW9uIGVudHJ5IHBvaW50IHN0YWNrcyBhIG51bWJlciBvZg0KK3JlZ2lzdGVycy4gIFRoZXNlIGRlZmluaXRpb25zIGFyZSBvZmZzZXRzIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIHZhcmlvdXMNCitzdGFja2VkIHJlZ2lzdGVyIHZhbHVlcy4gKi8NCisjZGVmaW5lIHBvcnRleFIzX1NUQUNLX09GRlNFVAk0DQorI2RlZmluZSBwb3J0ZXhSNF9TVEFDS19PRkZTRVQJNQ0KKyNkZWZpbmUgcG9ydGV4UjVfU1RBQ0tfT0ZGU0VUCTYNCisjZGVmaW5lIHBvcnRleFI2X1NUQUNLX09GRlNFVAk3DQorI2RlZmluZSBwb3J0ZXhSN19TVEFDS19PRkZTRVQJOA0KKyNkZWZpbmUgcG9ydGV4UjhfU1RBQ0tfT0ZGU0VUCTkNCisjZGVmaW5lIHBvcnRleFI5X1NUQUNLX09GRlNFVAkxMA0KKyNkZWZpbmUgcG9ydGV4UjEwX1NUQUNLX09GRlNFVAkxMQ0KKyNkZWZpbmUgcG9ydGV4UjExX1NUQUNLX09GRlNFVAkxMg0KKyNkZWZpbmUgcG9ydGV4UjEyX1NUQUNLX09GRlNFVAkxMw0KKyNkZWZpbmUgcG9ydGV4UjE1X1NUQUNLX09GRlNFVAkxNg0KKyNkZWZpbmUgcG9ydGV4UjE4X1NUQUNLX09GRlNFVCAgMTkNCisjZGVmaW5lIHBvcnRleE1TUl9TVEFDS19PRkZTRVQJMjANCisjZGVmaW5lIHBvcnRleFIxOV9TVEFDS19PRkZTRVQgIC0xDQorDQorLyogVGhpcyBpcyBkZWZpbmVkIHRvIGVxdWFsIHRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIHN0YWNrIGZyYW1lIGdlbmVyYXRlZCBieQ0KK3RoZSBYaWxpbnggc3RhbmRhcmQgbGlicmFyeSBleGNlcHRpb24gZW50cnkgcG9pbnQuICBJdCBpcyByZXF1aXJlZCB0byBkZXRlcm1pbmUNCit0aGUgc3RhY2sgcG9pbnRlciB2YWx1ZSBwcmlvciB0byB0aGUgZXhjZXB0aW9uIGJlaW5nIGVudGVyZWQuICovDQorI2RlZmluZSBwb3J0ZXhBU01fSEFORExFUl9TVEFDS19GUkFNRV9TSVpFIDg0VUwNCisNCisvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGEgTWljcm9CbGF6ZSBpbnN0cnVjdGlvbiBjb25zdW1lcy4gKi8NCisjZGVmaW5lIHBvcnRleElOU1RSVUNUSU9OX1NJWkUJNA0KKw0KKy8qIEV4Y2x1ZGUgdGhpcyBlbnRpcmUgZmlsZSBpZiB0aGUgTWljcm9CbGF6ZSBpcyBub3QgY29uZmlndXJlZCB0byBoYW5kbGUNCitleGNlcHRpb25zLCBvciB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25maWd1cmF0aW9uIGNvbnN0YW50DQorY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgbm90IHNldCB0byAxLiAqLw0KKyNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKQ0KKw0KKy8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBleGNlcHRpb24gZW50cnkgY29kZSwgYmVmb3JlDQordlBvcnRFeGNlcHRpb25IYW5kbGVyIGlzIGNhbGxlZC4gKi8NCit1bnNpZ25lZCBsb25nICpwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgPSBOVUxMOw0KKw0KKy8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQgYXMgaXQNCitleGlzdGVkIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBleGNlcHRpb24gb2NjdXJyZW5jZS4gIEEgcG9pbnRlciB0byB0aGlzDQorc3RydWN0dXJlIGlzIHBhc3NlZCBpbnRvIHRoZSB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBjYWxsYmFjaw0KK2Z1bmN0aW9uLCBpZiBvbmUgaXMgZGVmaW5lZC4gKi8NCitzdGF0aWMgeFBvcnRSZWdpc3RlckR1bXAgeFJlZ2lzdGVyRHVtcDsNCisNCisvKiBUaGlzIGlzIHRoZSBGcmVlUlRPUyBleGNlcHRpb24gaGFuZGxlciB0aGF0IGlzIGluc3RhbGxlZCBmb3IgYWxsIGV4Y2VwdGlvbg0KK3R5cGVzLiAgSXQgaXMgY2FsbGVkIGZyb20gdlBvcnRFeGNlcHRpb25IYW5sZGVyRW50cnkoKSAtIHdoaWNoIGlzIGl0c2VsZiBkZWZpbmVkDQoraW4gcG9ydGFzbS5TLiAqLw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyKCB2b2lkICpwdkV4Y2VwdGlvbklEICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnkoIHZvaWQgKnB2RXhjZXB0aW9uSUQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdGhlIA0KK2FwcGxpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0byByZWNlaXZlIGEgcG9wdWxhdGVkIHhQb3J0UmVnaXN0ZXJEdW1wDQorc3RydWN0dXJlLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgbm90IHRvIGRlZmluZSBhIHZlcnNpb24gb2YgDQordkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgdGhlbiB0aGlzIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQgDQoraW1wbGVtZW50YXRpb24gd2lsbCBiZSBjYWxsZWQgaW5zdGVhZC4gKi8NCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoIHhQb3J0UmVnaXN0ZXJEdW1wICp4UmVnaXN0ZXJEdW1wICkgX19hdHRyaWJ1dGVfXygod2VhaykpOw0KK3ZvaWQgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCB4UG9ydFJlZ2lzdGVyRHVtcCAqeFJlZ2lzdGVyRHVtcCApDQorew0KKwkoIHZvaWQgKSB4UmVnaXN0ZXJEdW1wOw0KKw0KKwlmb3IoIDs7ICkNCisJew0KKwkJcG9ydE5PUCgpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyKCB2b2lkICpwdkV4Y2VwdGlvbklEICkNCit7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCisNCisJLyogRmlsbCBhbiB4UG9ydFJlZ2lzdGVyRHVtcCBzdHJ1Y3R1cmUgd2l0aCB0aGUgTWljcm9CbGF6ZSBjb250ZXh0IGFzIGl0DQorCXdhcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlbmNlLiAqLw0KKwkNCisJLyogRmlyc3QgZmlsbCBpbiB0aGUgbmFtZSBhbmQgaGFuZGxlIG9mIHRoZSB0YXNrIHRoYXQgd2FzIGluIHRoZSBSdW5uaW5nIA0KKwlzdGF0ZSB3aGVuIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICovDQorCXhSZWdpc3RlckR1bXAueEN1cnJlbnRUYXNrSGFuZGxlID0gcHhDdXJyZW50VENCOw0KKwl4UmVnaXN0ZXJEdW1wLnBjQ3VycmVudFRhc2tOYW1lID0gcGNUYXNrR2V0VGFza05hbWUoIE5VTEwgKTsNCisNCisJY29uZmlnQVNTRVJUKCBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgKTsNCisNCisJLyogT2J0YWluIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2VyZSBzdGFja2VkIHByaW9yIHRvIHRoaXMgZnVuY3Rpb24NCisJYmVpbmcgY2FsbGVkLCBhbmQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGV5IHdlcmUgc3RhY2tlZC4gKi8NCisJeFJlZ2lzdGVyRHVtcC51bFIzID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSM19TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI0ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSNF9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI1ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSNV9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI2ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSNl9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI3ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSN19TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI4ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSOF9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFI5ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSOV9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxMCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjEwX1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjExID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTFfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTIgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMl9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxNV9yZXR1cm5fYWRkcmVzc19mcm9tX3N1YnJvdXRpbmUgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxNV9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxOCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE4X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE5ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTlfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxNU1IgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleE1TUl9TVEFDS19PRkZTRVQgXTsNCisJDQorCS8qIE9idGFpbiB0aGUgdmFsdWUgb2YgYWxsIG90aGVyIHJlZ2lzdGVycy4gKi8NCisJeFJlZ2lzdGVyRHVtcC51bFIyX3NtYWxsX2RhdGFfYXJlYSA9IG1mZ3ByKCBSMiApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjEzX3JlYWRfd3JpdGVfc21hbGxfZGF0YV9hcmVhID0gbWZncHIoIFIxMyApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE0X3JldHVybl9hZGRyZXNzX2Zyb21faW50ZXJydXB0ID0gbWZncHIoIFIxNCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcCA9IG1mZ3ByKCBSMTYgKTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnMgPSBtZmdwciggUjE3ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjAgPSBtZmdwciggUjIwICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjEgPSBtZmdwciggUjIxICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjIgPSBtZmdwciggUjIyICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjMgPSBtZmdwciggUjIzICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjQgPSBtZmdwciggUjI0ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjUgPSBtZmdwciggUjI1ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjYgPSBtZmdwciggUjI2ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjcgPSBtZmdwciggUjI3ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjggPSBtZmdwciggUjI4ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjkgPSBtZmdwciggUjI5ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMzAgPSBtZmdwciggUjMwICk7DQorCXhSZWdpc3RlckR1bXAudWxSMzEgPSBtZmdwciggUjMxICk7DQorCXhSZWdpc3RlckR1bXAudWxSMV9TUCA9ICggKCB1bnNpZ25lZCBsb25nICkgcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5ICkgKyBwb3J0ZXhBU01fSEFORExFUl9TVEFDS19GUkFNRV9TSVpFOw0KKwl4UmVnaXN0ZXJEdW1wLnVsRUFSID0gbWZlYXIoKTsNCisJeFJlZ2lzdGVyRHVtcC51bEVTUiA9IG1mZXNyKCk7DQorCXhSZWdpc3RlckR1bXAudWxFRFIgPSBtZmVkcigpOw0KKwkNCisJLyogTW92ZSB0aGUgc2F2ZWQgcHJvZ3JhbSBjb3VudGVyIGJhY2sgdG8gdGhlIGluc3RydWN0aW9uIHRoYXQgd2FzIGV4ZWN1dGVkDQorCXdoZW4gdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZg0KKwlleGNlcHRpb24uICovDQorCXhSZWdpc3RlckR1bXAudWxQQyA9IHhSZWdpc3RlckR1bXAudWxSMTdfcmV0dXJuX2FkZHJlc3NfZnJvbV9leGNlcHRpb25zIC0gcG9ydGV4SU5TVFJVQ1RJT05fU0laRTsNCisNCisJI2lmIFhQQVJfTUlDUk9CTEFaRV8wX1VTRV9GUFUgPT0gMQ0KKwl7DQorCQl4UmVnaXN0ZXJEdW1wLnVsRlNSID0gbWZmc3IoKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQl4UmVnaXN0ZXJEdW1wLnVsRlNSID0gMFVMOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkvKiBBbHNvIGZpbGwgaW4gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgd2hhdCB0eXBlIG9mIGV4Y2VwdGlvbiB0aGlzIGlzLg0KKwlUaGUgc3RyaW5nIHVzZXMgdGhlIHNhbWUgSUQgbmFtZXMgYXMgZGVmaW5lZCBpbiB0aGUgTWljcm9CbGF6ZSBzdGFuZGFyZA0KKwlsaWJyYXJ5IGV4Y2VwdGlvbiBoZWFkZXIgZmlsZXMuICovDQorCXN3aXRjaCggKCB1bnNpZ25lZCBsb25nICkgcHZFeGNlcHRpb25JRCApDQorCXsNCisJCWNhc2UgWEVYQ19JRF9GU0wgOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIHNpZ25lZCBjaGFyICogY29uc3QgKSAiWEVYQ19JRF9GU0wiOw0KKwkJCQlicmVhazsNCisNCisJCWNhc2UgWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBzaWduZWQgY2hhciAqIGNvbnN0ICkgIlhFWENfSURfVU5BTElHTkVEX0FDQ0VTUyI7DQorCQkJCWJyZWFrOw0KKw0KKwkJY2FzZSBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBzaWduZWQgY2hhciAqIGNvbnN0ICkgIlhFWENfSURfSUxMRUdBTF9PUENPREUiOw0KKwkJCQlicmVhazsNCisNCisJCWNhc2UgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggc2lnbmVkIGNoYXIgKiBjb25zdCApICJYRVhDX0lEX01fQVhJX0lfRVhDRVBUSU9OIG9yIFhFWENfSURfSVBMQl9FWENFUFRJT04iOw0KKwkJCQlicmVhazsNCisNCisJCWNhc2UgWEVYQ19JRF9NX0FYSV9EX0VYQ0VQVElPTiA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggc2lnbmVkIGNoYXIgKiBjb25zdCApICJYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OIG9yIFhFWENfSURfRFBMQl9FWENFUFRJT04iOw0KKwkJCQlicmVhazsNCisNCisJCWNhc2UgWEVYQ19JRF9ESVZfQllfWkVSTyA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggc2lnbmVkIGNoYXIgKiBjb25zdCApICJYRVhDX0lEX0RJVl9CWV9aRVJPIjsNCisJCQkJYnJlYWs7DQorDQorCQljYXNlIFhFWENfSURfU1RBQ0tfVklPTEFUSU9OIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBzaWduZWQgY2hhciAqIGNvbnN0ICkgIlhFWENfSURfU1RBQ0tfVklPTEFUSU9OIG9yIFhFWENfSURfTU1VIjsNCisJCQkJYnJlYWs7DQorDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFXzBfVVNFX0ZQVSA9PSAxDQorDQorCQkJY2FzZSBYRVhDX0lEX0ZQVSA6DQorCQkJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBzaWduZWQgY2hhciAqIGNvbnN0ICkgIlhFWENfSURfRlBVIHNlZSB1bEZTUiB2YWx1ZSI7DQorCQkJCQkJYnJlYWs7DQorDQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFXzBfVVNFX0ZQVSAqLw0KKwl9DQorDQorCS8qIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0aGUgDQorCWFwcGxpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0byByZWNlaXZlIHRoZSBwb3B1bGF0ZWQgeFBvcnRSZWdpc3RlckR1bXANCisJc3RydWN0dXJlLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgbm90IHRvIGRlZmluZSBhIHZlcnNpb24gb2YgDQorCXZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIHRoZW4gdGhlIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQgDQorCWltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGZpbGUgd2lsbCBiZSBjYWxsZWQgaW5zdGVhZC4gKi8NCisJdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCAmeFJlZ2lzdGVyRHVtcCApOw0KKw0KKwkvKiBNdXN0IG5vdCBhdHRlbXB0IHRvIGxlYXZlIHRoaXMgZnVuY3Rpb24hICovDQorCWZvciggOzsgKQ0KKwl7DQorCQlwb3J0Tk9QKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKQ0KK3sNCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9IHBkRkFMU0U7DQorDQorCWlmKCB1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9PSBwZEZBTFNFICkNCisJew0KKwkJdWxIYW5kbGVyc0FscmVhZHlJbnN0YWxsZWQgPSBwZFRSVUU7DQorDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFXzBfVU5BTElHTkVEX0VYQ0VQVElPTlMgPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfVU5BTElHTkVEX0FDQ0VTUywgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFXzBfVU5BTElHTkVEX0VYQ0VQVElPTlMqLw0KKw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV8wX0lMTF9PUENPREVfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFXzBfSUxMX09QQ09ERV9FWENFUFRJT04qLw0KKw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV8wX01fQVhJX0lfQlVTX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV8wX01fQVhJX0lfQlVTX0VYQ0VQVElPTiovDQorDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFXzBfTV9BWElfRF9CVVNfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFXzBfTV9BWElfRF9CVVNfRVhDRVBUSU9OKi8NCisNCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9JUExCX0JVU19FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfSVBMQl9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfSVBMQl9FWENFUFRJT04gKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfMF9JUExCX0JVU19FWENFUFRJT04qLw0KKw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV8wX0RQTEJfQlVTX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9EUExCX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9EUExCX0VYQ0VQVElPTiApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV8wX0RQTEJfQlVTX0VYQ0VQVElPTiovDQorDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFXzBfRElWX1pFUk9fRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0RJVl9CWV9aRVJPLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0RJVl9CWV9aRVJPICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFXzBfRElWX1pFUk9fRVhDRVBUSU9OKi8NCisNCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9GUFVfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0ZQVSwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9GUFUgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfMF9GUFVfRVhDRVBUSU9OKi8NCisNCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9GU0xfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0ZTTCwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9GU0wgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfMF9GU0xfRVhDRVBUSU9OKi8NCisJfQ0KK30NCisNCisvKiBFeGNsdWRlIHRoZSBlbnRpcmUgZmlsZSBpZiB0aGUgTWljcm9CbGF6ZSBpcyBub3QgY29uZmlndXJlZCB0byBoYW5kbGUNCitleGNlcHRpb25zLCBvciB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25maWd1cmF0aW9uIGl0ZW0gDQorY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgbm90IHNldCB0byAxLiAqLw0KKyNlbmRpZiAvKiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKSAqLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnRhc20uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnRhc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg4NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydGFzbS5TCkBAIC0wLDAgKzEsMzY3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIEZyZWVSVE9TIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKw0KKy8qIFhpbGlueCBsaWJyYXJ5IGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJtaWNyb2JsYXplX2V4Y2VwdGlvbnNfZy5oIg0KKyNpbmNsdWRlICJ4cGFyYW1ldGVycy5oIg0KKw0KKy8qIFRoZSBjb250ZXh0IGlzIG92ZXJzaXplZCB0byBhbGxvdyBmdW5jdGlvbnMgY2FsbGVkIGZyb20gdGhlIElTUiB0byB3cml0ZQ0KK2JhY2sgaW50byB0aGUgY2FsbGVyIHN0YWNrLiAqLw0KKyNpZiBYUEFSX01JQ1JPQkxBWkVfMF9VU0VfRlBVID09IDENCisJI2RlZmluZSBwb3J0Q09OVEVYVF9TSVpFIDEzNg0KKwkjZGVmaW5lIHBvcnRNSU5VU19DT05URVhUX1NJWkUgLTEzNg0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydENPTlRFWFRfU0laRSAxMzINCisJI2RlZmluZSBwb3J0TUlOVVNfQ09OVEVYVF9TSVpFIC0xMzINCisjZW5kaWYNCisNCisvKiBPZmZzZXRzIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgYXQgd2hpY2ggc2F2ZWQgcmVnaXN0ZXJzIGFyZSBwbGFjZWQuICovDQorI2RlZmluZSBwb3J0UjMxX09GRlNFVAk0DQorI2RlZmluZSBwb3J0UjMwX09GRlNFVAk4DQorI2RlZmluZSBwb3J0UjI5X09GRlNFVAkxMg0KKyNkZWZpbmUgcG9ydFIyOF9PRkZTRVQJMTYNCisjZGVmaW5lIHBvcnRSMjdfT0ZGU0VUCTIwDQorI2RlZmluZSBwb3J0UjI2X09GRlNFVAkyNA0KKyNkZWZpbmUgcG9ydFIyNV9PRkZTRVQJMjgNCisjZGVmaW5lIHBvcnRSMjRfT0ZGU0VUCTMyDQorI2RlZmluZSBwb3J0UjIzX09GRlNFVAkzNg0KKyNkZWZpbmUgcG9ydFIyMl9PRkZTRVQJNDANCisjZGVmaW5lIHBvcnRSMjFfT0ZGU0VUCTQ0DQorI2RlZmluZSBwb3J0UjIwX09GRlNFVAk0OA0KKyNkZWZpbmUgcG9ydFIxOV9PRkZTRVQJNTINCisjZGVmaW5lIHBvcnRSMThfT0ZGU0VUCTU2DQorI2RlZmluZSBwb3J0UjE3X09GRlNFVAk2MA0KKyNkZWZpbmUgcG9ydFIxNl9PRkZTRVQJNjQNCisjZGVmaW5lIHBvcnRSMTVfT0ZGU0VUCTY4DQorI2RlZmluZSBwb3J0UjE0X09GRlNFVAk3Mg0KKyNkZWZpbmUgcG9ydFIxM19PRkZTRVQJNzYNCisjZGVmaW5lIHBvcnRSMTJfT0ZGU0VUCTgwDQorI2RlZmluZSBwb3J0UjExX09GRlNFVAk4NA0KKyNkZWZpbmUgcG9ydFIxMF9PRkZTRVQJODgNCisjZGVmaW5lIHBvcnRSOV9PRkZTRVQJOTINCisjZGVmaW5lIHBvcnRSOF9PRkZTRVQJOTYNCisjZGVmaW5lIHBvcnRSN19PRkZTRVQJMTAwDQorI2RlZmluZSBwb3J0UjZfT0ZGU0VUCTEwNA0KKyNkZWZpbmUgcG9ydFI1X09GRlNFVAkxMDgNCisjZGVmaW5lIHBvcnRSNF9PRkZTRVQJMTEyDQorI2RlZmluZSBwb3J0UjNfT0ZGU0VUCTExNg0KKyNkZWZpbmUgcG9ydFIyX09GRlNFVAkxMjANCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX09GRlNFVCAxMjQNCisjZGVmaW5lIHBvcnRNU1JfT0ZGU0VUIDEyOA0KKyNkZWZpbmUgcG9ydEZTUl9PRkZTRVQgMTMyDQorDQorCS5leHRlcm4gcHhDdXJyZW50VENCDQorCS5leHRlcm4gWEludGNfRGV2aWNlSW50ZXJydXB0SGFuZGxlcg0KKwkuZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dA0KKwkuZXh0ZXJuIHV4Q3JpdGljYWxOZXN0aW5nDQorCS5leHRlcm4gcHVsSVNSU3RhY2sNCisJLmV4dGVybiB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQNCisJLmV4dGVybiB2UG9ydEV4Y2VwdGlvbkhhbmRsZXINCisJLmV4dGVybiBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkNCisNCisJLmdsb2JhbCBfaW50ZXJydXB0X2hhbmRsZXINCisJLmdsb2JhbCBWUG9ydFlpZWxkQVNNDQorCS5nbG9iYWwgdlBvcnRTdGFydEZpcnN0VGFzaw0KKwkuZ2xvYmFsIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5DQorDQorDQorLm1hY3JvIHBvcnRTQVZFX0NPTlRFWFQNCisNCisJLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dCBvbiB0aGUgc3RhY2suICovDQorCWFkZGlrIHIxLCByMSwgcG9ydE1JTlVTX0NPTlRFWFRfU0laRQ0KKw0KKwkvKiBTdGFjayBnZW5lcmFsIHJlZ2lzdGVycy4gKi8NCisJc3dpIHIzMSwgcjEsIHBvcnRSMzFfT0ZGU0VUDQorCXN3aSByMzAsIHIxLCBwb3J0UjMwX09GRlNFVA0KKwlzd2kgcjI5LCByMSwgcG9ydFIyOV9PRkZTRVQNCisJc3dpIHIyOCwgcjEsIHBvcnRSMjhfT0ZGU0VUDQorCXN3aSByMjcsIHIxLCBwb3J0UjI3X09GRlNFVA0KKwlzd2kgcjI2LCByMSwgcG9ydFIyNl9PRkZTRVQNCisJc3dpIHIyNSwgcjEsIHBvcnRSMjVfT0ZGU0VUDQorCXN3aSByMjQsIHIxLCBwb3J0UjI0X09GRlNFVA0KKwlzd2kgcjIzLCByMSwgcG9ydFIyM19PRkZTRVQNCisJc3dpIHIyMiwgcjEsIHBvcnRSMjJfT0ZGU0VUDQorCXN3aSByMjEsIHIxLCBwb3J0UjIxX09GRlNFVA0KKwlzd2kgcjIwLCByMSwgcG9ydFIyMF9PRkZTRVQNCisJc3dpIHIxOSwgcjEsIHBvcnRSMTlfT0ZGU0VUDQorCXN3aSByMTgsIHIxLCBwb3J0UjE4X09GRlNFVA0KKwlzd2kgcjE3LCByMSwgcG9ydFIxN19PRkZTRVQNCisJc3dpIHIxNiwgcjEsIHBvcnRSMTZfT0ZGU0VUDQorCXN3aSByMTUsIHIxLCBwb3J0UjE1X09GRlNFVA0KKwkvKiBSMTQgaXMgc2F2ZWQgbGF0ZXIgYXMgaXQgbmVlZHMgYWRqdXN0bWVudCBpZiBhIHlpZWxkIGlzIHBlcmZvcm1lZC4gKi8NCisJc3dpIHIxMywgcjEsIHBvcnRSMTNfT0ZGU0VUDQorCXN3aSByMTIsIHIxLCBwb3J0UjEyX09GRlNFVA0KKwlzd2kgcjExLCByMSwgcG9ydFIxMV9PRkZTRVQNCisJc3dpIHIxMCwgcjEsIHBvcnRSMTBfT0ZGU0VUDQorCXN3aSByOSwgcjEsIHBvcnRSOV9PRkZTRVQNCisJc3dpIHI4LCByMSwgcG9ydFI4X09GRlNFVA0KKwlzd2kgcjcsIHIxLCBwb3J0UjdfT0ZGU0VUDQorCXN3aSByNiwgcjEsIHBvcnRSNl9PRkZTRVQNCisJc3dpIHI1LCByMSwgcG9ydFI1X09GRlNFVA0KKwlzd2kgcjQsIHIxLCBwb3J0UjRfT0ZGU0VUDQorCXN3aSByMywgcjEsIHBvcnRSM19PRkZTRVQNCisJc3dpIHIyLCByMSwgcG9ydFIyX09GRlNFVA0KKw0KKwkvKiBTdGFjayB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIHZhbHVlLiAqLw0KKwlsd2kgcjE4LCByMCwgdXhDcml0aWNhbE5lc3RpbmcNCisJc3dpIHIxOCwgcjEsIHBvcnRDUklUSUNBTF9ORVNUSU5HX09GRlNFVA0KKw0KKwkvKiBTdGFjayBNU1IuICovDQorCW1mcyByMTgsIHJtc3INCisJc3dpIHIxOCwgcjEsIHBvcnRNU1JfT0ZGU0VUDQorDQorCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9VU0VfRlBVID09IDENCisJCS8qIFN0YWNrIEZTUi4gKi8NCisJCW1mcyByMTgsIHJmc3INCisJCXN3aSByMTgsIHIxLCBwb3J0RlNSX09GRlNFVA0KKwkjZW5kaWYNCisNCisJLyogU2F2ZSB0aGUgdG9wIG9mIHN0YWNrIHZhbHVlIHRvIHRoZSBUQ0IuICovDQorCWx3aSByMywgcjAsIHB4Q3VycmVudFRDQg0KKwlzdwlyMSwgcjAsIHIzDQorCQ0KKwkuZW5kbQ0KKw0KKy5tYWNybyBwb3J0UkVTVE9SRV9DT05URVhUDQorDQorCS8qIExvYWQgdGhlIHRvcCBvZiBzdGFjayB2YWx1ZSBmcm9tIHRoZSBUQ0IuICovDQorCWx3aSByMTgsIHIwLCBweEN1cnJlbnRUQ0INCisJbHcJcjEsIHIwLCByMTgNCisNCisJLyogUmVzdG9yZSB0aGUgZ2VuZXJhbCByZWdpc3RlcnMuICovDQorCWx3aSByMzEsIHIxLCBwb3J0UjMxX09GRlNFVA0KKwlsd2kgcjMwLCByMSwgcG9ydFIzMF9PRkZTRVQNCisJbHdpIHIyOSwgcjEsIHBvcnRSMjlfT0ZGU0VUDQorCWx3aSByMjgsIHIxLCBwb3J0UjI4X09GRlNFVA0KKwlsd2kgcjI3LCByMSwgcG9ydFIyN19PRkZTRVQNCisJbHdpIHIyNiwgcjEsIHBvcnRSMjZfT0ZGU0VUDQorCWx3aSByMjUsIHIxLCBwb3J0UjI1X09GRlNFVA0KKwlsd2kgcjI0LCByMSwgcG9ydFIyNF9PRkZTRVQNCisJbHdpIHIyMywgcjEsIHBvcnRSMjNfT0ZGU0VUDQorCWx3aSByMjIsIHIxLCBwb3J0UjIyX09GRlNFVA0KKwlsd2kgcjIxLCByMSwgcG9ydFIyMV9PRkZTRVQNCisJbHdpIHIyMCwgcjEsIHBvcnRSMjBfT0ZGU0VUDQorCWx3aSByMTksIHIxLCBwb3J0UjE5X09GRlNFVA0KKwlsd2kgcjE3LCByMSwgcG9ydFIxN19PRkZTRVQNCisJbHdpIHIxNiwgcjEsIHBvcnRSMTZfT0ZGU0VUDQorCWx3aSByMTUsIHIxLCBwb3J0UjE1X09GRlNFVA0KKwlsd2kgcjE0LCByMSwgcG9ydFIxNF9PRkZTRVQNCisJbHdpIHIxMywgcjEsIHBvcnRSMTNfT0ZGU0VUDQorCWx3aSByMTIsIHIxLCBwb3J0UjEyX09GRlNFVA0KKwlsd2kgcjExLCByMSwgcG9ydFIxMV9PRkZTRVQNCisJbHdpIHIxMCwgcjEsIHBvcnRSMTBfT0ZGU0VUDQorCWx3aSByOSwgcjEsIHBvcnRSOV9PRkZTRVQNCisJbHdpIHI4LCByMSwgcG9ydFI4X09GRlNFVA0KKwlsd2kgcjcsIHIxLCBwb3J0UjdfT0ZGU0VUDQorCWx3aSByNiwgcjEsIHBvcnRSNl9PRkZTRVQNCisJbHdpIHI1LCByMSwgcG9ydFI1X09GRlNFVA0KKwlsd2kgcjQsIHIxLCBwb3J0UjRfT0ZGU0VUDQorCWx3aSByMywgcjEsIHBvcnRSM19PRkZTRVQNCisJbHdpIHIyLCByMSwgcG9ydFIyX09GRlNFVA0KKw0KKwkvKiBSZWxvYWQgdGhlIHJtc3IgZnJvbSB0aGUgc3RhY2suICovDQorCWx3aSByMTgsIHIxLCBwb3J0TVNSX09GRlNFVA0KKwltdHMgcm1zciwgcjE4DQorDQorCSNpZiBYUEFSX01JQ1JPQkxBWkVfMF9VU0VfRlBVID09IDENCisJCS8qIFJlbG9hZCB0aGUgRlNSIGZyb20gdGhlIHN0YWNrLiAqLw0KKwkJbHdpIHIxOCwgcjEsIHBvcnRGU1JfT0ZGU0VUDQorCQltdHMgcmZzciwgcjE4DQorCSNlbmRpZg0KKw0KKwkvKiBMb2FkIHRoZSBjcml0aWNhbCBuZXN0aW5nIHZhbHVlLiAqLw0KKwlsd2kgcjE4LCByMSwgcG9ydENSSVRJQ0FMX05FU1RJTkdfT0ZGU0VUDQorCXN3aSByMTgsIHIwLCB1eENyaXRpY2FsTmVzdGluZw0KKw0KKwkvKiBUZXN0IHRoZSBjcml0aWNhbCBuZXN0aW5nIHZhbHVlLiAgSWYgaXQgaXMgbm9uIHplcm8gdGhlbiB0aGUgdGFzayBsYXN0DQorCWV4aXRlZCB0aGUgcnVubmluZyBzdGF0ZSB1c2luZyBhIHlpZWxkLiAgSWYgaXQgaXMgemVybywgdGhlbiB0aGUgdGFzaw0KKwlsYXN0IGV4aXRlZCB0aGUgcnVubmluZyBzdGF0ZSB0aHJvdWdoIGFuIGludGVycnVwdC4gKi8NCisJeG9yaSByMTgsIHIxOCwgMA0KKwlibmVpIHIxOCwgZXhpdF9mcm9tX3lpZWxkDQorDQorCS8qIHIxOCB3YXMgYmVpbmcgdXNlZCBhcyBhIHRlbXBvcmFyeS4gIE5vdyByZXN0b3JlIGl0cyB0cnVlIHZhbHVlIGZyb20gdGhlDQorCXN0YWNrLiAqLw0KKwlsd2kgcjE4LCByMSwgcG9ydFIxOF9PRkZTRVQNCisNCisJLyogUmVtb3ZlIHRoZSBzdGFjayBmcmFtZS4gKi8NCisJYWRkaWsgcjEsIHIxLCBwb3J0Q09OVEVYVF9TSVpFDQorDQorCS8qIFJldHVybiB1c2luZyBydGlkIHNvIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQgYXMgdGhpcyBmdW5jdGlvbiBpcw0KKwlleGl0ZWQuICovDQorCXJ0aWQgcjE0LCAwDQorCW9yIHIwLCByMCwgcjANCisNCisJLmVuZG0NCisNCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXhpdCBwb3J0UkVTVE9SRV9DT05URVhUKCkgaWYgdGhlIHRhc2sgYmVpbmcNCityZXR1cm5lZCB0byBsYXN0IGxlZnQgdGhlIFJ1bm5pbmcgc3RhdGUgYnkgY2FsbGluZyB0YXNrWUlFTEQoKSAocmF0aGVyIHRoYW4NCitiZWluZyBwcmVlbXB0ZWQgYnkgYW4gaW50ZXJydXB0KS4gKi8NCisJLnRleHQNCisJLmFsaWduICAyDQorZXhpdF9mcm9tX3lpZWxkOg0KKw0KKwkvKiByMTggd2FzIGJlaW5nIHVzZWQgYXMgYSB0ZW1wb3JhcnkuICBOb3cgcmVzdG9yZSBpdHMgdHJ1ZSB2YWx1ZSBmcm9tIHRoZQ0KKwlzdGFjay4gKi8NCisJbHdpIHIxOCwgcjEsIHBvcnRSMThfT0ZGU0VUDQorDQorCS8qIFJlbW92ZSB0aGUgc3RhY2sgZnJhbWUuICovDQorCWFkZGlrIHIxLCByMSwgcG9ydENPTlRFWFRfU0laRQ0KKw0KKwkvKiBSZXR1cm4gdG8gdGhlIHRhc2suICovDQorCXJ0c2QgcjE0LCAwDQorCW9yIHIwLCByMCwgcjANCisNCisNCisJLnRleHQNCisJLmFsaWduICAyDQorX2ludGVycnVwdF9oYW5kbGVyOg0KKw0KKwlwb3J0U0FWRV9DT05URVhUDQorDQorCS8qIFN0YWNrIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8NCisJc3dpIHIxNCwgcjEsIHBvcnRSMTRfT0ZGU0VUDQorDQorCS8qIFN3aXRjaCB0byB0aGUgSVNSIHN0YWNrLiAqLw0KKwlsd2kgcjEsIHIwLCBwdWxJU1JTdGFjaw0KKw0KKwkvKiBUaGUgcGFyYW1ldGVyIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8NCisJb3JpIHI1LCByMCwgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfVE9fVVNFDQorDQorCS8qIEV4ZWN1dGUgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8NCisJYnJhbGlkIHIxNSwgWEludGNfRGV2aWNlSW50ZXJydXB0SGFuZGxlcg0KKwlvciByMCwgcjAsIHIwDQorDQorCS8qIFNlZSBpZiBhIG5ldyB0YXNrIHNob3VsZCBiZSBzZWxlY3RlZCB0byBleGVjdXRlLiAqLw0KKwlsd2kgcjE4LCByMCwgdWxUYXNrU3dpdGNoUmVxdWVzdGVkDQorCW9yIHIxOCwgcjE4LCByMA0KKw0KKwkvKiBJZiB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgaXMgYWxyZWFkeSB6ZXJvLCB0aGVuIGp1bXAgc3RyYWlnaHQgdG8NCisJcmVzdG9yaW5nIHRoZSB0YXNrIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgUnVubmluZyBzdGF0ZS4gKi8NCisJYmVxaSByMTgsIHRhc2tfc3dpdGNoX25vdF9yZXF1ZXN0ZWQNCisNCisJLyogU2V0IHVsVGFza1N3aXRjaFJlcXVlc3RlZCBiYWNrIHRvIHplcm8gYXMgYSB0YXNrIHN3aXRjaCBpcyBhYm91dCB0byBiZQ0KKwlwZXJmb3JtZWQuICovDQorCXN3aSByMCwgcjAsIHVsVGFza1N3aXRjaFJlcXVlc3RlZA0KKw0KKwkvKiB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgd2FzIG5vdCAwIHdoZW4gdGVzdGVkLiAgU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8NCisJZXhlY3V0ZS4gKi8NCisJYnJhbGlkIHIxNSwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCW9yIHIwLCByMCwgcjANCisNCit0YXNrX3N3aXRjaF9ub3RfcmVxdWVzdGVkOg0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgc2NoZWR1bGVkIHRvIGV4ZWN1dGUuICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisNCisJLnRleHQNCisJLmFsaWduICAyDQorVlBvcnRZaWVsZEFTTToNCisNCisJcG9ydFNBVkVfQ09OVEVYVA0KKw0KKwkvKiBNb2RpZnkgdGhlIHJldHVybiBhZGRyZXNzIHNvIGEgcmV0dXJuIGlzIGRvbmUgdG8gdGhlIGluc3RydWN0aW9uIGFmdGVyDQorCXRoZSBjYWxsIHRvIFZQb3J0WWllbGRBU00uICovDQorCWFkZGkgcjE0LCByMTQsIDgNCisJc3dpIHIxNCwgcjEsIHBvcnRSMTRfT0ZGU0VUDQorDQorCS8qIFN3aXRjaCB0byB1c2UgdGhlIElTUiBzdGFjay4gKi8NCisJbHdpIHIxLCByMCwgcHVsSVNSU3RhY2sNCisNCisJLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4gKi8NCisJYnJhbGlkIHIxNSwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCW9yIHIwLCByMCwgcjANCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHNjaGVkdWxlZCB0byBleGVjdXRlLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorCS50ZXh0DQorCS5hbGlnbiAgMg0KK3ZQb3J0U3RhcnRGaXJzdFRhc2s6DQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisJDQorDQorDQorI2lmIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDENCisJDQorCS50ZXh0DQorCS5hbGlnbiAyDQordlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnk6DQorDQorCS8qIFRha2UgYSBjb3B5IG9mIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSB2UG9ydEV4ZWNwdGlvbkhhbmRsZXIgaXMgY2FsbGVkLA0KKwlzdG9yaW5nIGl0cyB2YWx1ZSBwcmlvciB0byB0aGUgZnVuY3Rpb24gc3RhY2sgZnJhbWUgYmVpbmcgY3JlYXRlZC4gKi8NCisJc3dpIHIxLCByMCwgcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5DQorCWJyYWxpZCByMTUsIHZQb3J0RXhjZXB0aW9uSGFuZGxlcg0KKwlvciByMCwgcjAsIHIwDQorDQorI2VuZGlmIC8qIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEICovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTk3ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwzNzQgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogQlNQIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxtYl9pbnRlcmZhY2UuaD4NCisjaW5jbHVkZSA8eHBhcmFtZXRlcnMuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgbG9uZw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3JvcyBhbmQgZnVuY3Rpb25zLiAqLw0KK3ZvaWQgbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCit2b2lkIG1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQltaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cygpDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYWNyb3MuICovDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJewkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCW1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CQkJCQkJCVwNCisJCQkJCQkJCQkJdXhDcml0aWNhbE5lc3RpbmcrKzsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIHdlIGNhbiAqLwkJCQkJXA0KKwkJCQkJCQkJCQkvKiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGRpcmVjdGx5LiAqLwkJCQkJCQlcDQorCQkJCQkJCQkJCXV4Q3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQkJCQkJCQkJXA0KKwkJCQkJCQkJCQl7CQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJLyogVGhlIG5lc3RpbmcgaGFzIHVud291bmQgYW5kIHdlIAkJCQkJCVwNCisJCQkJCQkJCQkJCWNhbiBlbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8JCQkJCQkJXA0KKwkJCQkJCQkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQlcDQorCQkJCQkJCQkJCX0JCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSB5aWVsZCBtYWNybyBtYXBzIGRpcmVjdGx5IHRvIHRoZSB2UG9ydFlpZWxkKCkgZnVuY3Rpb24uICovDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCisNCisvKiBwb3J0WUlFTERfRlJPTV9JU1IoKSBkb2VzIG5vdCBkaXJlY3RseSBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBidXQgaW5zdGVhZA0KK3NldHMgYSBmbGFnIHRvIHNheSB0aGF0IGEgeWllbGQgaGFzIGJlZW4gcmVxdWVzdGVkLiAgVGhlIGludGVycnVwdCBleGl0IGNvZGUNCit0aGVuIGNoZWNrcyB0aGlzIGZsYWcsIGFuZCBjYWxscyB2VGFza1N3aXRjaENvbnRleHQoKSBiZWZvcmUgcmVzdG9yaW5nIGEgdGFzaw0KK2NvbnRleHQsIGlmIHRoZSBmbGFnIGlzIG5vdCBmYWxzZS4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIHRvDQordlRhc2tTd2l0Y2hDb250ZXh0KCkgYmVpbmcgbWFkZSBmcm9tIGEgc2luZ2xlIGludGVycnVwdCwgYXMgYSBzaW5nbGUgaW50ZXJydXB0DQorY2FuIHJlc3VsdCBpbiBtdWx0aXBsZSBwZXJpcGhlcmFscyBiZWluZyBzZXJ2aWNlZC4gKi8NCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQ7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBpZiggeCAhPSBwZEZBTFNFICkgdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTQNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSB2b2xhdGlsZSAoICJOT1AiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXIuICBJdCBpcw0KK2ZpbGxlZCB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQgYXMgaXQgd2FzIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuDQorVGhpcyBpcyBkb25lIGFzIGFuIGFpZCB0byBkZWJ1Z2dpbmcgZXhjZXB0aW9uIG9jY3VycmVuY2VzLiAqLw0KK3R5cGVkZWYgc3RydWN0IFBPUlRfUkVHSVNURVJfRFVNUA0KK3sNCisJLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgbWVtYmVycyBob2xkIHRoZSB2YWx1ZXMgb2YgdGhlIE1pY3JvQmxhemUNCisJcmVnaXN0ZXJzIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gd2FzIHJhaXNlZC4gKi8NCisJdW5zaWduZWQgbG9uZyB1bFIxX1NQOw0KKwl1bnNpZ25lZCBsb25nIHVsUjJfc21hbGxfZGF0YV9hcmVhOw0KKwl1bnNpZ25lZCBsb25nIHVsUjM7DQorCXVuc2lnbmVkIGxvbmcgdWxSNDsNCisJdW5zaWduZWQgbG9uZyB1bFI1Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjY7DQorCXVuc2lnbmVkIGxvbmcgdWxSNzsNCisJdW5zaWduZWQgbG9uZyB1bFI4Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjk7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTA7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTE7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTI7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTNfcmVhZF93cml0ZV9zbWFsbF9kYXRhX2FyZWE7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTRfcmV0dXJuX2FkZHJlc3NfZnJvbV9pbnRlcnJ1cHQ7DQorCXVuc2lnbmVkIGxvbmcgdWxSMTVfcmV0dXJuX2FkZHJlc3NfZnJvbV9zdWJyb3V0aW5lOw0KKwl1bnNpZ25lZCBsb25nIHVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcDsNCisJdW5zaWduZWQgbG9uZyB1bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnM7IC8qIFRoZSBleGNlcHRpb24gZW50cnkgY29kZSB3aWxsIGNvcHkgdGhlIEJUUiBpbnRvIFIxNyBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBkZWxheSBzbG90IG9mIGEgYnJhbmNoIGluc3RydWN0aW9uLiAqLw0KKwl1bnNpZ25lZCBsb25nIHVsUjE4Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjE5Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjIwOw0KKwl1bnNpZ25lZCBsb25nIHVsUjIxOw0KKwl1bnNpZ25lZCBsb25nIHVsUjIyOw0KKwl1bnNpZ25lZCBsb25nIHVsUjIzOw0KKwl1bnNpZ25lZCBsb25nIHVsUjI0Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjI1Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjI2Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjI3Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjI4Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjI5Ow0KKwl1bnNpZ25lZCBsb25nIHVsUjMwOw0KKwl1bnNpZ25lZCBsb25nIHVsUjMxOw0KKwl1bnNpZ25lZCBsb25nIHVsUEM7DQorCXVuc2lnbmVkIGxvbmcgdWxFU1I7DQorCXVuc2lnbmVkIGxvbmcgdWxNU1I7DQorCXVuc2lnbmVkIGxvbmcgdWxFQVI7DQorCXVuc2lnbmVkIGxvbmcgdWxGU1I7DQorCXVuc2lnbmVkIGxvbmcgdWxFRFI7DQorDQorCS8qIEEgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGV4Y2VwdGlvbiBjYXVzZS4gIFRoZSBzdHJpbmdzIHVzZWQNCisJYXJlIHRoZSBzYW1lIGFzIHRoZSAjZGVmaW5lIGNvbnN0YW50IG5hbWVzIGZvdW5kIGluIHRoZQ0KKwltaWNyb2JsYXplX2V4Y2VwdGlvbnNfaS5oIGhlYWRlciBmaWxlICovDQorCXNpZ25lZCBjaGFyICpwY0V4Y2VwdGlvbkNhdXNlOw0KKw0KKwkvKiBUaGUgaHVtYW4gcmVhZGFibGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIHRoZQ0KKwlleGNlcHRpb24gb2NjdXJyZWQuICBUaGlzIGlzIHRoZSBuYW1lIHRoYXQgd2FzIGdpdmVuIHRvIHRoZSB0YXNrIHdoZW4gdGhlDQorCXRhc2sgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIEZyZWVSVE9TIHhUYXNrQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uLiAqLw0KKwlzaWduZWQgY2hhciAqcGNDdXJyZW50VGFza05hbWU7DQorDQorCS8qIFRoZSBoYW5kbGUgb2YgdGhlIHRhc2sgdGhhdCB3YXMgcnVubmluZyBhIHRoZSB0aW1lIHRoZSBleGNlcHRpb24NCisJb2NjdXJyZWQuICovDQorCXZvaWQgKiB4Q3VycmVudFRhc2tIYW5kbGU7DQorDQorfSB4UG9ydFJlZ2lzdGVyRHVtcDsNCisNCisNCisvKg0KKyAqIEluc3RhbGxzIHB4SGFuZGxlciBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBwZXJpcGhlcmFsIHNwZWNpZmllZCBieSANCisgKiB0aGUgdWNJbnRlcnJ1cHRJRCBwYXJhbWV0ZXIuDQorICoNCisgKiB1Y0ludGVycnVwdElEOg0KKyAqIA0KKyAqIFRoZSBJRCBvZiB0aGUgcGVyaXBoZXJhbCB0aGF0IHdpbGwgaGF2ZSBweEhhbmRsZXIgYXNzaWduZWQgYXMgaXRzIGludGVycnVwdA0KKyAqIGhhbmRsZXIuICBQZXJpcGhlcmFsIElEcyBhcmUgZGVmaW5lZCBpbiB0aGUgeHBhcmFtZXRlcnMuaCBoZWFkZXIgZmlsZSwgd2hpY2ggDQorICogaXMgaXRzZWxmIHBhcnQgb2YgdGhlIEJTUCBwcm9qZWN0LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBvZmZpY2lhbCBkZW1vIA0KKyAqIGFwcGxpY2F0aW9uIGZvciB0aGlzIHBvcnQsIHhwYXJhbWV0ZXJzLmggZGVmaW5lcyB0aGUgZm9sbG93aW5nIElEcyBmb3IgdGhlIA0KKyAqIGZvdXIgcG9zc2libGUgaW50ZXJydXB0IHNvdXJjZXM6DQorICoNCisgKiBYUEFSX0lOVENfMF9VQVJUTElURV8xX1ZFQ19JRCAgLSAgZm9yIHRoZSBVQVJUbGl0ZSBwZXJpcGhlcmFsLg0KKyAqIFhQQVJfSU5UQ18wX1RNUkNUUl8wX1ZFQ19JRCAgICAtICBmb3IgdGhlIEFYSSBUaW1lciAwIHBlcmlwaGVyYWwuDQorICogWFBBUl9JTlRDXzBfRU1BQ0xJVEVfMF9WRUNfSUQgIC0gIGZvciB0aGUgRXRoZXJuZXQgbGl0ZSBwZXJpcGhlcmFsLg0KKyAqIFhQQVJfSU5UQ18wX0dQSU9fMV9WRUNfSUQgICAgICAtICBmb3IgdGhlIGJ1dHRvbiBpbnB1dHMuDQorICoNCisgKg0KKyAqIHB4SGFuZGxlcjoNCisgKiANCisgKiBBIHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZi4gIFRoaXMgbXVzdCBiZSBhIHZvaWQNCisgKiBmdW5jdGlvbiB0aGF0IHRha2VzIGEgKHZvaWQgKikgcGFyYW1ldGVyLg0KKyAqDQorICoNCisgKiBwdkNhbGxCYWNrUmVmOg0KKyAqDQorICogVGhlIHBhcmFtZXRlciBwYXNzZWQgaW50byB0aGUgaGFuZGxlciBmdW5jdGlvbi4gIEluIG1hbnkgY2FzZXMgdGhpcyB3aWxsIG5vdA0KKyAqIGJlIHVzZWQgYW5kIGNhbiBiZSBOVUxMLiAgU29tZSB0aW1lcyBpdCBpcyB1c2VkIHRvIHBhc3MgaW4gYSByZWZlcmVuY2UgdG8NCisgKiB0aGUgcGVyaXBoZXJhbCBpbnN0YW5jZSB2YXJpYWJsZSwgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gaW5zaWRlIHRoZQ0KKyAqIGhhbmRsZXIgZnVuY3Rpb24uDQorICoNCisgKiANCisgKiBwZFBBU1MgaXMgcmV0dXJuZWQgaWYgdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseS4gIEFueSBvdGhlciB2YWx1ZQ0KKyAqIGJlaW5nIHJldHVybmVkIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBkaWQgbm90IGV4ZWN1dGUgY29ycmVjdGx5Lg0KKyAqLw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdW5zaWduZWQgY2hhciB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKTsNCisNCisNCisvKg0KKyAqIEVuYWJsZXMgdGhlIGludGVycnVwdCwgd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciwgZm9yIHRoZSBwZXJpcGhlcmFsIA0KKyAqIHNwZWNpZmllZCBieSB0aGUgdWNJbnRlcnJ1cHRJRCBwYXJhbWV0ZXIuDQorICoNCisgKiB1Y0ludGVycnVwdElEOg0KKyAqIA0KKyAqIFRoZSBJRCBvZiB0aGUgcGVyaXBoZXJhbCB0aGF0IHdpbGwgaGF2ZSBpdHMgaW50ZXJydXB0IGVuYWJsZWQgaW4gdGhlDQorICogaW50ZXJydXB0IGNvbnRyb2xsZXIuICBQZXJpcGhlcmFsIElEcyBhcmUgZGVmaW5lZCBpbiB0aGUgeHBhcmFtZXRlcnMuaCBoZWFkZXIgDQorICogZmlsZSwgd2hpY2ggaXMgaXRzZWxmIHBhcnQgb2YgdGhlIEJTUCBwcm9qZWN0LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBvZmZpY2lhbCANCisgKiBkZW1vIGFwcGxpY2F0aW9uIGZvciB0aGlzIHBvcnQsIHhwYXJhbWV0ZXJzLmggZGVmaW5lcyB0aGUgZm9sbG93aW5nIElEcyBmb3IgDQorICogdGhlIGZvdXIgcG9zc2libGUgaW50ZXJydXB0IHNvdXJjZXM6DQorICoNCisgKiBYUEFSX0lOVENfMF9VQVJUTElURV8xX1ZFQ19JRCAgLSAgZm9yIHRoZSBVQVJUbGl0ZSBwZXJpcGhlcmFsLg0KKyAqIFhQQVJfSU5UQ18wX1RNUkNUUl8wX1ZFQ19JRCAgICAtICBmb3IgdGhlIEFYSSBUaW1lciAwIHBlcmlwaGVyYWwuDQorICogWFBBUl9JTlRDXzBfRU1BQ0xJVEVfMF9WRUNfSUQgIC0gIGZvciB0aGUgRXRoZXJuZXQgbGl0ZSBwZXJpcGhlcmFsLg0KKyAqIFhQQVJfSU5UQ18wX0dQSU9fMV9WRUNfSUQgICAgICAtICBmb3IgdGhlIGJ1dHRvbiBpbnB1dHMuDQorICoNCisgKi8NCit2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0KCB1bnNpZ25lZCBjaGFyIHVjSW50ZXJydXB0SUQgKTsNCisNCisvKg0KKyAqIERpc2FibGVzIHRoZSBpbnRlcnJ1cHQsIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIsIGZvciB0aGUgcGVyaXBoZXJhbCANCisgKiBzcGVjaWZpZWQgYnkgdGhlIHVjSW50ZXJydXB0SUQgcGFyYW1ldGVyLg0KKyAqDQorICogdWNJbnRlcnJ1cHRJRDoNCisgKiANCisgKiBUaGUgSUQgb2YgdGhlIHBlcmlwaGVyYWwgdGhhdCB3aWxsIGhhdmUgaXRzIGludGVycnVwdCBkaXNhYmxlZCBpbiB0aGUNCisgKiBpbnRlcnJ1cHQgY29udHJvbGxlci4gIFBlcmlwaGVyYWwgSURzIGFyZSBkZWZpbmVkIGluIHRoZSB4cGFyYW1ldGVycy5oIGhlYWRlciANCisgKiBmaWxlLCB3aGljaCBpcyBpdHNlbGYgcGFydCBvZiB0aGUgQlNQIHByb2plY3QuICBGb3IgZXhhbXBsZSwgaW4gdGhlIG9mZmljaWFsIA0KKyAqIGRlbW8gYXBwbGljYXRpb24gZm9yIHRoaXMgcG9ydCwgeHBhcmFtZXRlcnMuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgSURzIGZvciANCisgKiB0aGUgZm91ciBwb3NzaWJsZSBpbnRlcnJ1cHQgc291cmNlczoNCisgKg0KKyAqIFhQQVJfSU5UQ18wX1VBUlRMSVRFXzFfVkVDX0lEICAtICBmb3IgdGhlIFVBUlRsaXRlIHBlcmlwaGVyYWwuDQorICogWFBBUl9JTlRDXzBfVE1SQ1RSXzBfVkVDX0lEICAgIC0gIGZvciB0aGUgQVhJIFRpbWVyIDAgcGVyaXBoZXJhbC4NCisgKiBYUEFSX0lOVENfMF9FTUFDTElURV8wX1ZFQ19JRCAgLSAgZm9yIHRoZSBFdGhlcm5ldCBsaXRlIHBlcmlwaGVyYWwuDQorICogWFBBUl9JTlRDXzBfR1BJT18xX1ZFQ19JRCAgICAgIC0gIGZvciB0aGUgYnV0dG9uIGlucHV0cy4NCisgKg0KKyAqLw0KK3ZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0KCB1bnNpZ25lZCBjaGFyIHVjSW50ZXJydXB0SUQgKTsNCisNCisvKg0KKyAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIGluc3RhbGwgdGhlIHRpY2sNCisgKiBpbnRlcnJ1cHQgaGFuZGxlci4gIEl0IGlzIHByb3ZpZGVkIGFzIGFuIGFwcGxpY2F0aW9uIGNhbGxiYWNrIGJlY2F1c2UgdGhlIA0KKyAqIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudCBNaWNyb0JsYXplIGFuZCBGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IA0KKyAqIGFsbCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgdGltZXIgcGVyaXBoZXJhbHMgZGVmaW5lZCBvciBhdmFpbGFibGUuICBUaGlzIA0KKyAqIGV4YW1wbGUgdXNlcyB0aGUgQVhJIFRpbWVyIDAuICBJZiB0aGF0IGlzIGF2YWlsYWJsZSBvbiB5b3VyIGhhcmR3YXJlIHBsYXRmb3JtIA0KKyAqIHRoZW4gdGhpcyBleGFtcGxlIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgcmVxdWlyZSBtb2RpZmljYXRpb24uICANCisgKiBUaGUgbmFtZSBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGlzIHZQb3J0VGlja0lTUigpLCANCisgKiB3aGljaCB0aGUgZnVuY3Rpb24gYmVsb3cgZGVjbGFyZXMgYXMgYW4gZXh0ZXJuLg0KKyAqLyANCit2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiANCisgKiBUaGlzIGlzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBjbGVhciB3aGljaGV2ZXINCisgKiBpbnRlcnJ1cHQgd2FzIGluc3RhbGxlZCBieSB0aGUgdGhlIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKSBjYWxsYmFjaw0KKyAqIGZ1bmN0aW9uIC0gaW4gdGhpcyBjYXNlIHRoZSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IHRoZSBBWEkgdGltZXIuICBJdCBpcyANCisgKiBwcm92aWRlZCBhcyBhbiBhcHBsaWNhdGlvbiBjYWxsYmFjayBiZWNhdXNlIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gbG90cyBvZiANCisgKiBkaWZmZXJlbnQgTWljcm9CbGF6ZSBhbmQgRlBHQSBjb25maWd1cmF0aW9ucyAtIG5vdCBhbGwgb2Ygd2hpY2ggd2lsbCBoYXZlIHRoZSANCisgKiBzYW1lIHRpbWVyIHBlcmlwaGVyYWxzIGRlZmluZWQgb3IgYXZhaWxhYmxlLiAgVGhpcyBleGFtcGxlIHVzZXMgdGhlIEFYSSBUaW1lciAwLiAgDQorICogSWYgdGhhdCBpcyBhdmFpbGFibGUgb24geW91ciBoYXJkd2FyZSBwbGF0Zm9ybSB0aGVuIHRoaXMgZXhhbXBsZSBjYWxsYmFjayANCisgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IHJlcXVpcmUgbW9kaWZpY2F0aW9uIHByb3ZpZGVkIHRoZSBleGFtcGxlIGRlZmluaXRpb24NCisgKiBvZiB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCkgaXMgYWxzbyBub3QgbW9kaWZpZWQuIA0KKyAqLw0KK3ZvaWQgdkFwcGxpY2F0aW9uQ2xlYXJUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qDQorICogdlBvcnRFeGNlcHRpb25zSW5zdGFsbEhhbmRsZXJzKCkgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgTWljcm9CbGF6ZQ0KKyAqIGlzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBleGNlcHRpb24gZnVuY3Rpb25hbGl0eSwgYW5kIA0KKyAqIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTIGlzIHNldCB0byAxIGluIEZyZWVSVE9TQ29uZmlnLmguDQorICoNCisgKiB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoKSBpbnN0YWxscyB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXINCisgKiBmb3IgZXZlcnkgcG9zc2libGUgZXhjZXB0aW9uIGNhdXNlLiAgDQorICoNCisgKiB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoKSBjYW4gYmUgY2FsbGVkIGV4cGxpY2l0bHkgZnJvbSBhcHBsaWNhdGlvbg0KKyAqIGNvZGUuICBBZnRlciB0aGF0IGlzIGRvbmUsIHRoZSBkZWZhdWx0IEZyZWVSVE9TIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQgd2lsbA0KKyAqIGhhdmUgYmVlbiBpbnN0YWxsZWQgY2FuIGJlIHJlcGxhY2VkIGZvciBhbnkgc3BlY2lmaWMgZXhjZXB0aW9uIGNhdXNlIGJ5IHVzaW5nIA0KKyAqIHRoZSBzdGFuZGFyZCBYaWxpbnggbGlicmFyeSBmdW5jdGlvbiBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCkuDQorICoNCisgKiBJZiB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoKSBpcyBub3QgY2FsbGVkIGV4cGxpY2l0bHkgYnkgdGhlIA0KKyAqIGFwcGxpY2F0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBrZXJuZWwgdGhlIGZpcnN0IHRpbWUNCisgKiB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCkgaXMgY2FsbGVkLiAgQXQgdGhhdCB0aW1lLCBhbnkgZXhjZXB0aW9uIA0KKyAqIGhhbmRsZXJzIHRoYXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGluc3RhbGxlZCB3aWxsIGJlIHJlcGxhY2VkLg0KKyAqDQorICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBmb3IgaW5mb3JtYXRpb24NCisgKiBvbiB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbiBoYW5kbGVyLg0KKyAqLw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25zSW5zdGFsbEhhbmRsZXJzKCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXIgZmlsbHMgYW4geFBvcnRSZWdpc3RlckR1bXAgc3RydWN0dXJlIChkZWZpbmVkIA0KKyAqIGluIHBvcnRtYWNyby5oKSB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQsIGFzIGl0IHdhcyBhdCB0aGUgdGltZSB0aGUgDQorICogZXhjZXB0aW9uIG9jY3VycmVkLiAgVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHRoZW4gY2FsbHMNCisgKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSwgcGFzc2luZyBpbiB0aGUgY29tcGxldGVkDQorICogeFBvcnRSZWdpc3RlckR1bXAgc3RydWN0dXJlIGFzIGl0cyBwYXJhbWV0ZXIuDQorICoNCisgKiBUaGUgRnJlZVJUT1Mga2VybmVsIHByb3ZpZGVzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YNCisgKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSwgYnV0IHRoZSBrZXJuZWwgcHJvdmlkZWQgaW1wbGVtZW50YXRpb24gDQorICogaXMgZGVjbGFyZWQgYXMgYmVpbmcgJ3dlYWsnLiAgVGhlIHdlYWsgZGVmaW5pdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIA0KKyAqIHdyaXRlciB0byBwcm92aWRlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiwgc2hvdWxkIHRoZXkgd2lzaCB0byB1c2UgdGhlIA0KKyAqIHJlZ2lzdGVyIGR1bXAgaW5mb3JtYXRpb24uICBGb3IgZXhhbXBsZSwgYW4gaW1wbGVtZW50YXRpb24gY291bGQgYmUgcHJvdmlkZWQNCisgKiB0aGF0IHdyb3RlIHRoZSByZWdpc3RlciBkdW1wIGRhdGEgdG8gYSBkaXNwbGF5LCBvciBhIFVBUlQgcG9ydC4NCisgKi8NCit2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKnhSZWdpc3RlckR1bXAgKTsNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzQ5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL05pb3NJSS9wb3J0LmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTklPUzIgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFN0YW5kYXJkIEluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisNCisvKiBBbHRlcmEgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgInN5cy9hbHRfaXJxLmgiDQorI2luY2x1ZGUgImFsdGVyYV9hdmFsb25fdGltZXJfcmVncy5oIg0KKyNpbmNsdWRlICJwcml2L2FsdF9pcnFfdGFibGUuaCINCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRVNUQVRVUyAgICAgKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDEgDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qDQorICogQ2FsbCBiYWNrIGZvciB0aGUgYWxhcm0gZnVuY3Rpb24uDQorICovDQordm9pZCB2UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICogY29udGV4dCwgYWx0X3UzMiBpZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlJlYWRHcCggdW5zaWduZWQgbG9uZyAqdWxWYWx1ZSApDQorew0KKwlhc20oICJzdHcgZ3AsICglMCkiIDo6ICJyIih1bFZhbHVlKSApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQoreyAgICANCitwb3J0U1RBQ0tfVFlQRSAqcHhGcmFtZVBvaW50ZXIgPSBweFRvcE9mU3RhY2sgLSAxOw0KK3BvcnRTVEFDS19UWVBFIHhHbG9iYWxQb2ludGVyOw0KKw0KKyAgICBwcnZSZWFkR3AoICZ4R2xvYmFsUG9pbnRlciApOyANCisNCisgICAgLyogRW5kIG9mIHN0YWNrIG1hcmtlci4gKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZGVhZGJlZWY7DQorICAgIHB4VG9wT2ZTdGFjay0tOw0KKyAgICANCisgICAgKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweEZyYW1lUG9pbnRlcjsgDQorICAgIHB4VG9wT2ZTdGFjay0tOw0KKyAgICANCisgICAgKnB4VG9wT2ZTdGFjayA9IHhHbG9iYWxQb2ludGVyOyANCisgICAgDQorICAgIC8qIFNwYWNlIGZvciBSMjMgdG8gUjE2LiAqLw0KKyAgICBweFRvcE9mU3RhY2sgLT0gOTsNCisNCisgICAgKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7IA0KKyAgICBweFRvcE9mU3RhY2stLTsNCisNCisgICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VTVEFUVVM7IA0KKw0KKyAgICAvKiBTcGFjZSBmb3IgUjE1IHRvIFI1LiAqLyAgICANCisgICAgcHhUb3BPZlN0YWNrIC09IDEyOw0KKyAgICANCisgICAgKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IA0KKw0KKyAgICAvKiBTcGFjZSBmb3IgUjMgdG8gUjEsIG11bGRpdiBhbmQgUkEuICovDQorICAgIHB4VG9wT2ZTdGFjayAtPSA1Ow0KKyAgICANCisgICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKyAgICBhc20gdm9sYXRpbGUgKCAgIiBtb3ZpYSByMiwgcmVzdG9yZV9zcF9mcm9tX3B4Q3VycmVudFRDQiAgICAgICAgXG4iDQorICAgICAgICAgICAgICAgICAgICAiIGptcCByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTklPUzIgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIFRyeSB0byByZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICovDQorCWlmICggLUVJTlZBTCA9PSBhbHRfaXJxX3JlZ2lzdGVyKCBTWVNfQ0xLX0lSUSwgMHgwLCB2UG9ydFN5c1RpY2tIYW5kbGVyICkgKQ0KKwl7IA0KKwkJLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIEludGVycnVwdCBIYW5kbGVyLiAqLw0KKwkJYXNtKCAiYnJlYWsiICk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBDb25maWd1cmUgU3lzVGljayB0byBpbnRlcnJ1cHQgYXQgdGhlIHJlcXVlc3RlZCByYXRlLiAqLw0KKwkJSU9XUl9BTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0woIFNZU19DTEtfQkFTRSwgQUxURVJBX0FWQUxPTl9USU1FUl9DT05UUk9MX1NUT1BfTVNLICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfUEVSSU9ETCggU1lTX0NMS19CQVNFLCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICYgMHhGRkZGICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfUEVSSU9ESCggU1lTX0NMS19CQVNFLCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApID4+IDE2ICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfQ09OVFJPTCggU1lTX0NMS19CQVNFLCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfQ09OVF9NU0sgfCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfU1RBUlRfTVNLIHwgQUxURVJBX0FWQUxPTl9USU1FUl9DT05UUk9MX0lUT19NU0sgKTsJDQorCX0gDQorDQorCS8qIENsZWFyIGFueSBhbHJlYWR5IHBlbmRpbmcgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgdGhlIFRpbWVyLiAqLw0KKwlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTKCBTWVNfQ0xLX0JBU0UsIH5BTFRFUkFfQVZBTE9OX1RJTUVSX1NUQVRVU19UT19NU0sgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICogY29udGV4dCwgYWx0X3UzMiBpZCApDQorew0KKwkvKiBJbmNyZW1lbnQgdGhlIEtlcm5lbCBUaWNrLiAqLw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKyAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCSNlbmRpZg0KKw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0LiAqLw0KKwlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTKCBTWVNfQ0xLX0JBU0UsIH5BTFRFUkFfQVZBTE9OX1RJTUVSX1NUQVRVU19UT19NU0sgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIFRoaXMgZnVuY3Rpb24gaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWx0ZXJhIHByb3ZpZGVkIGZ1bmN0aW9uLg0KKyAqIFRoZSBmdW5jdGlvbiBpcyByZS1pbXBsZW1lbnRlZCB0byBwcmV2ZW50IGl0IGZyb20gZW5hYmxpbmcgYW4gaW50ZXJydXB0DQorICogd2hlbiBpdCBpcyByZWdpc3RlcmVkLiBJbnRlcnJ1cHRzIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgYWZ0ZXIgdGhlIEZyZWVSVE9TLm9yZw0KKyAqIGtlcm5lbCBoYXMgaXRzIHNjaGVkdWxlciBzdGFydGVkIHNvIHRoYXQgY29udGV4dHMgYXJlIHNhdmVkIGFuZCBzd2l0Y2hlZCANCisgKiBjb3JyZWN0bHkuDQorICovDQoraW50IGFsdF9pcnFfcmVnaXN0ZXIoIGFsdF91MzIgaWQsIHZvaWQqIGNvbnRleHQsIHZvaWQgKCpoYW5kbGVyKSh2b2lkKiwgYWx0X3UzMikgKQ0KK3sNCisJaW50IHJjID0gLUVJTlZBTDsgIA0KKwlhbHRfaXJxX2NvbnRleHQgc3RhdHVzOw0KKw0KKwlpZiAoaWQgPCBBTFRfTklSUSkNCisJew0KKwkJLyogDQorCQkgKiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGlsZSB0aGUgaGFuZGxlciB0YWJsZXMgYXJlIHVwZGF0ZWQgdG8gZW5zdXJlDQorCQkgKiB0aGF0IGFuIGludGVycnVwdCBkb2Vzbid0IG9jY3VyIHdoaWxlIHRoZSB0YWJsZXMgYXJlIGluIGFuIGluY29uc2lzdGVudA0KKwkJICogc3RhdGUuDQorCQkgKi8NCisJDQorCQlzdGF0dXMgPSBhbHRfaXJxX2Rpc2FibGVfYWxsICgpOw0KKwkNCisJCWFsdF9pcnFbaWRdLmhhbmRsZXIgPSBoYW5kbGVyOw0KKwkJYWx0X2lycVtpZF0uY29udGV4dCA9IGNvbnRleHQ7DQorCQ0KKwkJcmMgPSAoaGFuZGxlcikgPyBhbHRfaXJxX2VuYWJsZSAoaWQpOiBhbHRfaXJxX2Rpc2FibGUgKGlkKTsNCisJDQorCQkvKiBhbHRfaXJxX2VuYWJsZV9hbGwoc3RhdHVzKTsgVGhpcyBsaW5lIGlzIHJlbW92ZWQgdG8gcHJldmVudCB0aGUgaW50ZXJydXB0IGZyb20gYmVpbmcgaW1tZWRpYXRlbHkgZW5hYmxlZC4gKi8NCisJfQ0KKyAgICANCisJcmV0dXJuIHJjOyANCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydF9hc20uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTmlvc0lJL3BvcnRfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4NWYwMgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTmlvc0lJL3BvcnRfYXNtLlMKQEAgLTAsMCArMSwxODggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy5leHRlcm4JCXZUYXNrU3dpdGNoQ29udGV4dA0KKwkNCisuc2V0IG5vYXQNCisNCisjIEV4cG9ydGVkIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrLg0KKy5nbG9ibCByZXN0b3JlX3NwX2Zyb21fcHhDdXJyZW50VENCCQkNCisJDQorIyBFbnRyeSBwb2ludCBmb3IgZXhjZXB0aW9ucy4NCisuc2VjdGlvbiAuZXhjZXB0aW9ucy5lbnRyeSwgInhhIgkJDQorDQorIyBTYXZlIHRoZSBlbnRpcmUgY29udGV4dCBvZiBhIHRhc2suDQorc2F2ZV9jb250ZXh0Og0KKwlhZGRpCWVhLCBlYSwgLTQJCQkjIFBvaW50IHRvIHRoZSBuZXh0IGluc3RydWN0aW9uLg0KKwlhZGRpCXNwLAlzcCwgLTExNgkJIyBDcmVhdGUgc3BhY2Ugb24gdGhlIHN0YWNrLg0KKwlzdHcJCXJhLCAwKHNwKQ0KKwkJCQkJCQkJIyBMZWF2ZSBhIGdhcCBmb3IgbXVsZGl2IDANCisJc3R3CQlhdCwgOChzcCkJCSANCisJc3R3CQlyMiwgMTIoc3ApDQorCXN0dwkJcjMsIDE2KHNwKQ0KKwlzdHcJCXI0LCAyMChzcCkNCisJc3R3CQlyNSwgMjQoc3ApIA0KKwlzdHcJCXI2LCAyOChzcCkgDQorCXN0dwkJcjcsIDMyKHNwKSANCisJc3R3CQlyOCwgMzYoc3ApIA0KKwlzdHcJCXI5LCA0MChzcCkgDQorCXN0dwkJcjEwLCA0NChzcCkNCisJc3R3CQlyMTEsIDQ4KHNwKQ0KKwlzdHcJCXIxMiwgNTIoc3ApDQorCXN0dwkJcjEzLCA1NihzcCkNCisJc3R3CQlyMTQsIDYwKHNwKQ0KKwlzdHcJCXIxNSwgNjQoc3ApDQorCXJkY3RsCXI1LCBlc3RhdHVzIAkJIyBTYXZlIHRoZSBlU3RhdHVzDQorCXN0dwkJcjUsIDY4KHNwKQ0KKwlzdHcJCWVhLCA3MihzcCkJCQkjIFNhdmUgdGhlIFBDDQorCXN0dwkJcjE2LCA3NihzcCkJCQkjIFNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMNCisJc3R3CQlyMTcsIDgwKHNwKQ0KKwlzdHcJCXIxOCwgODQoc3ApDQorCXN0dwkJcjE5LCA4OChzcCkNCisJc3R3CQlyMjAsIDkyKHNwKQ0KKwlzdHcJCXIyMSwgOTYoc3ApDQorCXN0dwkJcjIyLCAxMDAoc3ApDQorCXN0dwkJcjIzLCAxMDQoc3ApDQorCXN0dwkJZ3AsIDEwOChzcCkNCisJc3R3CQlmcCwgMTEyKHNwKQ0KKw0KK3NhdmVfc3BfdG9fcHhDdXJyZW50VENCOg0KKwltb3ZpYQlldCwgcHhDdXJyZW50VENCCSMgTG9hZCB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHBvaW50ZXINCisJbGR3CQlldCwgKGV0KQkJCSMgTG9hZCB0aGUgdmFsdWUgb2YgdGhlIHB4Q3VycmVudFRDQiBwb2ludGVyDQorCXN0dwkJc3AsIChldCkJCQkjIFN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIHRvcCBvZiB0aGUgVENCDQorCQ0KKwkuc2VjdGlvbiAuZXhjZXB0aW9ucy5pcnF0ZXN0LCAieGEiCQ0KK2h3X2lycV90ZXN0Og0KKwkvKg0KKyAgICAgKiBUZXN0IHRvIHNlZSBpZiB0aGUgZXhjZXB0aW9uIHdhcyBhIHNvZnR3YXJlIGV4Y2VwdGlvbiBvciBjYXVzZWQgDQorICAgICAqIGJ5IGFuIGV4dGVybmFsIGludGVycnVwdCwgYW5kIHZlY3RvciBhY2NvcmRpbmdseS4NCisgICAgICovDQorICAgIHJkY3RsCXI0LCBpcGVuZGluZwkJIyBMb2FkIHRoZSBQZW5kaW5nIEludGVycnVwdHMgaW5kaWNhdGlvbg0KKwlyZGN0bAlyNSwgZXN0YXR1cyAJCSMgTG9hZCB0aGUgZVN0YXR1cyAoZW5hYmxlZCBpbnRlcnJ1cHRzKS4NCisgICAgYW5kaQlyMiwgcjUsIDEJCQkjIEFyZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZ2xvYmFsbHkuDQorICAgIGJlcQkJcjIsIHplcm8sIHNvZnRfZXhjZXB0aW9ucwkJIyBJbnRlcnJ1cHRzIGFyZSBub3QgZW5hYmxlZC4NCisgICAgYmVxCQlyNCwgemVybywgc29mdF9leGNlcHRpb25zCQkjIFRoZXJlIGFyZSBubyBpbnRlcnJ1cHRzIHRyaWdnZXJlZC4NCisNCisJLnNlY3Rpb24gLmV4Y2VwdGlvbnMuaXJxaGFuZGxlciwgInhhIg0KK2h3X2lycV9oYW5kbGVyOg0KKwljYWxsCWFsdF9pcnFfaGFuZGxlcgkJCQkJIyBDYWxsIHRoZSBhbHRfaXJxX2hhbmRsZXIgdG8gZGVsaXZlciB0byB0aGUgcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlci4NCisNCisgICAgLnNlY3Rpb24gLmV4Y2VwdGlvbnMuaXJxcmV0dXJuLCAieGEiDQorcmVzdG9yZV9zcF9mcm9tX3B4Q3VycmVudFRDQjoNCisJbW92aWEJZXQsIHB4Q3VycmVudFRDQgkJIyBMb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgcG9pbnRlcg0KKwlsZHcJCWV0LCAoZXQpCQkJCSMgTG9hZCB0aGUgdmFsdWUgb2YgdGhlIHB4Q3VycmVudFRDQiBwb2ludGVyDQorCWxkdwkJc3AsIChldCkJCQkJIyBMb2FkIHRoZSBzdGFjayBwb2ludGVyIHdpdGggdGhlIHRvcCB2YWx1ZSBvZiB0aGUgVENCDQorDQorcmVzdG9yZV9jb250ZXh0Og0KKwlsZHcJCXJhLCAwKHNwKQkJIyBSZXN0b3JlIHRoZSByZWdpc3RlcnMuDQorCQkJCQkJCSMgTGVhdmUgYSBnYXAgZm9yIG11bGRpdiAwLg0KKwlsZHcJCWF0LCA4KHNwKQ0KKwlsZHcJCXIyLCAxMihzcCkNCisJbGR3CQlyMywgMTYoc3ApDQorCWxkdwkJcjQsIDIwKHNwKQ0KKwlsZHcJCXI1LCAyNChzcCkgDQorCWxkdwkJcjYsIDI4KHNwKSANCisJbGR3CQlyNywgMzIoc3ApIA0KKwlsZHcJCXI4LCAzNihzcCkgDQorCWxkdwkJcjksIDQwKHNwKSANCisJbGR3CQlyMTAsIDQ0KHNwKQ0KKwlsZHcJCXIxMSwgNDgoc3ApDQorCWxkdwkJcjEyLCA1MihzcCkNCisJbGR3CQlyMTMsIDU2KHNwKQ0KKwlsZHcJCXIxNCwgNjAoc3ApDQorCWxkdwkJcjE1LCA2NChzcCkNCisJbGR3CQlldCwgNjgoc3ApCQkjIExvYWQgdGhlIGVTdGF0dXMNCisJd3JjdGwJZXN0YXR1cywgZXQgCSMgV3JpdGUgdGhlIGVTdGF0dXMNCisJbGR3CQllYSwgNzIoc3ApCQkjIExvYWQgdGhlIFByb2dyYW0gQ291bnRlcg0KKwlsZHcJCXIxNiwgNzYoc3ApDQorCWxkdwkJcjE3LCA4MChzcCkNCisJbGR3CQlyMTgsIDg0KHNwKQ0KKwlsZHcJCXIxOSwgODgoc3ApDQorCWxkdwkJcjIwLCA5MihzcCkNCisJbGR3CQlyMjEsIDk2KHNwKQ0KKwlsZHcJCXIyMiwgMTAwKHNwKQ0KKwlsZHcJCXIyMywgMTA0KHNwKQ0KKwlsZHcJCWdwLCAxMDgoc3ApDQorCWxkdwkJZnAsIDExMihzcCkNCisJYWRkaQlzcCwJc3AsIDExNgkJIyBSZWxlYXNlIHN0YWNrIHNwYWNlDQorDQorICAgIGVyZXQJCQkJCSMgUmV0dXJuIHRvIGFkZHJlc3MgZWEsIGxvYWRpbmcgZVN0YXR1cyBpbnRvIFN0YXR1cy4NCisgICANCisJLnNlY3Rpb24gLmV4Y2VwdGlvbnMuc29mdCwgInhhIg0KK3NvZnRfZXhjZXB0aW9uczoNCisJbGR3CQlldCwgMChlYSkJCQkJIyBMb2FkIHRoZSBpbnN0cnVjdGlvbiB3aGVyZSB0aGUgaW50ZXJydXB0IG9jY3VyZWQuDQorCW1vdmhpCWF0LCAlaGkoMHgwMDNCNjgzQSkJCSMgTG9hZCB0aGUgcmVnaXN0ZXJzIHdpdGggdGhlIHRyYXAgaW5zdHJ1Y3Rpb24gY29kZQ0KKwlvcmkJCWF0LCBhdCwgJWxvKDB4MDAzQjY4M0EpDQorICAgCWNtcG5lCWV0LCBldCwgYXQJCQkJIyBDb21wYXJlIHRoZSB0cmFwIGluc3RydWN0aW9uIGNvZGUgdG8gdGhlIGxhc3QgZXhjdXRlZCBpbnN0cnVjdGlvbg0KKyAgCWJlcQkJZXQsIHIwLCBjYWxsX3NjaGVkdWxlcgkjIGl0cyBhIHRyYXAgc28gc3dpdGNoY29udGV4dA0KKyAgCWJyZWFrCQkJCQkJCSMgVGhpcyBpcyBhbiB1bi1pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiBvciBtdWxkaXYgcHJvYmxlbS4NCisgIAlicgkJcmVzdG9yZV9jb250ZXh0CQkJIyBpdHMgc29tZXRoaW5nIGVsc2UNCisNCitjYWxsX3NjaGVkdWxlcjoNCisJYWRkaQllYSwgZWEsIDQJCQkJCQkjIEEgdHJhcCB3YXMgY2FsbGVkLCBpbmNyZW1lbnQgdGhlIHByb2dyYW0gY291bnRlciBzbyBpdCBpcyBub3QgY2FsbGVkIGFnYWluLg0KKwlzdHcJCWVhLCA3MihzcCkJCQkJCQkjIFNhdmUgdGhlIG5ldyBwcm9ncmFtIGNvdW50ZXIgdG8gdGhlIGNvbnRleHQuDQorCWNhbGwJdlRhc2tTd2l0Y2hDb250ZXh0CQkJCSMgUGljayB0aGUgbmV4dCBjb250ZXh0Lg0KKwlicgkJcmVzdG9yZV9zcF9mcm9tX3B4Q3VycmVudFRDQgkjIFN3aXRjaCBpbiB0aGUgdGFzayBjb250ZXh0IGFuZCByZXN0b3JlLiANCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL05pb3NJSS9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvTmlvc0lJL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL05pb3NJSS9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaW5jbHVkZSAic3lzL2FsdF9pcnEuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJNA0KKyNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgIAlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJCTENCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCQkJCWFzbSB2b2xhdGlsZSAoICJ0cmFwIiApOw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAl2VGFza1N3aXRjaENvbnRleHQoKQ0KKw0KKw0KKy8qIEluY2x1ZGUgdGhlIHBvcnRfYXNtLlMgZmlsZSB3aGVyZSB0aGUgQ29udGV4dCBzYXZpbmcvcmVzdG9yaW5nIGlzIGRlZmluZWQuICovDQorX19hc21fXyggIlxuXHQuZ2xvYmwJc2F2ZV9jb250ZXh0IiApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJYWx0X2lycV9kaXNhYmxlX2FsbCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJYWx0X2lycV9lbmFibGVfYWxsKCAweDAxICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvRlBVX01hY3Jvcy5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L0ZQVV9NYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUyOWYyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L0ZQVV9NYWNyb3MuaApAQCAtMCwwICsxLDg0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBXaGVuIHN3aXRjaGluZyBvdXQgYSB0YXNrLCBpZiB0aGUgdGFzayB0YWcgY29udGFpbnMgYSBidWZmZXIgYWRkcmVzcyB0aGVuDQorc2F2ZSB0aGUgZmxvcCBjb250ZXh0IGludG8gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9PVVQoKQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRTYXZlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFNhdmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KKw0KKy8qIFdoZW4gc3dpdGNoaW5nIGluIGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KK2xvYWQgdGhlIGZsb3AgY29udGV4dCBmcm9tIHRoZSBidWZmZXIuICovDQorI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKQkJCQkJCQkJCQkJCVwNCisJaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2lkIHZQb3J0UmVzdG9yZUZQVVJlZ2lzdGVycyggdm9pZCAqICk7CQkJCQkJXA0KKwkJdlBvcnRSZXN0b3JlRlBVUmVnaXN0ZXJzKCAoIHZvaWQgKiApICggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgKSApOwlcDQorCX0NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGRkMWIzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnQuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQUEM0MDUgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgInh0aW1lX2wuaCINCisjaW5jbHVkZSAieGludGMuaCINCisjaW5jbHVkZSAieGludGNfaS5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIERlZmluaXRpb25zIHRvIHNldCB0aGUgaW5pdGlhbCBNU1Igb2YgZWFjaCB0YXNrLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUJKCAxVUwgPDwgMTdVTCApDQorI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRQkoIDFVTCA8PCAxNVVMICkNCisjZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRQkJKCAxVUwgPDwgMTJVTCApDQorDQorI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KKwkjZGVmaW5lIHBvcnRBUFVfUFJFU0VOVAkJCQkoIDFVTCA8PCAyNVVMICkNCisJI2RlZmluZSBwb3J0RkNNX0ZQVV9QUkVTRU5UCQkJKCAxVUwgPDwgMTNVTCApDQorI2Vsc2UNCisJI2RlZmluZSBwb3J0QVBVX1BSRVNFTlQJCQkJKCAwVUwgKQ0KKwkjZGVmaW5lIHBvcnRGQ01fRlBVX1BSRVNFTlQJCQkoIDBVTCApDQorI2VuZGlmDQorDQorI2RlZmluZSBwb3J0SU5JVElBTF9NU1IJCSggcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgfCBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSB8IHBvcnRBUFVfUFJFU0VOVCB8IHBvcnRGQ01fRlBVX1BSRVNFTlQgKQ0KKw0KKw0KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBX0JBU0VfOw0KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBMl9CQVNFXzsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIHRoZSBzeXN0ZW0gdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIFRoZSBoYW5kbGVyIGZvciB0aGUgdGljayBpbnRlcnJ1cHQgLSBkZWZpbmVkIGluIHBvcnRhc20ucy4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKTsNCisNCisvKg0KKyAqIFRoZSBoYW5kbGVyIGZvciB0aGUgeWllbGQgZnVuY3Rpb24gLSBkZWZpbmVkIGluIHBvcnRhc20ucy4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorDQorLyoNCisgKiBGdW5jdGlvbiB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHJ1bm5pbmcgYnkgc3RhcnRpbmcgdGhlIGhpZ2hlc3QNCisgKiBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIHRodXMgZmFyIGJlZW4gY3JlYXRlZC4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU3RydWN0dXJlIHVzZWQgdG8gaG9sZCB0aGUgc3RhdGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAqLw0KK3N0YXRpYyBYSW50YyB4SW50ZXJydXB0Q29udHJvbGxlcjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIHRoZSB0YXNrIGhhZCBiZWVuDQorICogaW50ZXJydXB0ZWQuDQorICogDQorICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFBsYWNlIGEga25vd24gdmFsdWUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgZm9yIGRlYnVnZ2luZy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4REVBREJFRUY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBFQUJJIHN0YWNrIGZyYW1lLiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gMjA7CS8qIFByZXZpb3VzIGJhY2tjaGFpbiBhbmQgTFIsIFIzMSB0byBSNCBpbmNsdXNpdmUuICovDQorDQorCS8qIFBhcmFtZXRlcnMgaW4gUjEzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICZfU0RBX0JBU0VfOyAvKiBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzbWFsbCBkYXRhIGFyZWEgKi8NCisJcHhUb3BPZlN0YWNrIC09IDEwOw0KKw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFBhcmFtZXRlcnMgaW4gUjIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgJl9TREEyX0JBU0VfOwkvKiBhZGRyZXNzIG9mIHRoZSBzZWNvbmQgc21hbGwgZGF0YSBhcmVhICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSMSBpcyB0aGUgc3RhY2sgcG9pbnRlciBzbyBpcyBvbWl0dGVkLiAqLw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMDAwMDAwMVVMOzsJLyogUjAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBVU1BSRzAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBDUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIFhFUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIENUUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdlBvcnRFbmRTY2hlZHVsZXI7CS8qIExSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7IC8qIFNSUjAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfTVNSOy8qIFNSUjEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHZQb3J0RW5kU2NoZWR1bGVyOy8qIE5leHQgTFIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOy8qIEJhY2tjaGFpbi4gKi8NCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfU1lTVEVNX0NBTEwsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydFlpZWxkLCAoIHZvaWQgKiApIDAgKTsNCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZEZBTFNFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCisJZm9yKCA7OyApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEhhcmR3YXJlIGluaXRpYWxpc2F0aW9uIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICAgDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgdWxJbnRlcnZhbCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTCApOw0KKw0KKwlYVGltZV9QSVRDbGVhckludGVycnVwdCgpOw0KKwlYVGltZV9GSVRDbGVhckludGVycnVwdCgpOw0KKwlYVGltZV9XRFRDbGVhckludGVycnVwdCgpOw0KKwlYVGltZV9XRFREaXNhYmxlSW50ZXJydXB0KCk7DQorCVhUaW1lX0ZJVERpc2FibGVJbnRlcnJ1cHQoKTsNCisNCisJWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfUElUX0lOVCwgKCBYRXhjZXB0aW9uSGFuZGxlciApIHZQb3J0VGlja0lTUiwgKCB2b2lkICogKSAwICk7DQorDQorCVhUaW1lX1BJVEVuYWJsZUF1dG9SZWxvYWQoKTsNCisJWFRpbWVfUElUU2V0SW50ZXJ2YWwoIHVsSW50ZXJ2YWwgKTsNCisJWFRpbWVfUElURW5hYmxlSW50ZXJydXB0KCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRJU1JIYW5kbGVyKCB2b2lkICpwdk51bGxEb05vdFVzZSApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxJbnRlcnJ1cHRTdGF0dXMsIHVsSW50ZXJydXB0TWFzayA9IDFVTDsNCitwb3J0QkFTRV9UWVBFIHhJbnRlcnJ1cHROdW1iZXI7DQorWEludGNfQ29uZmlnICpweEludGVycnVwdENvbnRyb2xsZXI7DQorWEludGNfVmVjdG9yVGFibGVFbnRyeSAqcHhUYWJsZTsNCisNCisJLyogSnVzdCB0byByZW1vdmUgY29tcGlsZXIgd2FybmluZy4gKi8NCisJKCB2b2lkICkgcHZOdWxsRG9Ob3RVc2U7CQ0KKw0KKwkvKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlIGRldmljZSBJRCAtIGluIHRoaXMgY2FzZSBpdCBpcw0KKwlhc3N1bWVkIHRoYXQgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJcHhJbnRlcnJ1cHRDb250cm9sbGVyID0gJlhJbnRjX0NvbmZpZ1RhYmxlWyBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEIF07DQorICANCisJLyogV2hpY2ggaW50ZXJydXB0cyBhcmUgcGVuZGluZz8gKi8NCisJdWxJbnRlcnJ1cHRTdGF0dXMgPSBYSW50Y19tR2V0SW50clN0YXR1cyggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5CYXNlQWRkcmVzcyApOw0KKyAgDQorCWZvciggeEludGVycnVwdE51bWJlciA9IDA7IHhJbnRlcnJ1cHROdW1iZXIgPCBYUEFSX0lOVENfTUFYX05VTV9JTlRSX0lOUFVUUzsgeEludGVycnVwdE51bWJlcisrICkNCisJew0KKwkJaWYoIHVsSW50ZXJydXB0U3RhdHVzICYgMHgwMVVMICkNCisJCXsNCisJCQkvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHQuICovDQorCQkJWEludGNfbUFja0ludHIoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+QmFzZUFkZHJlc3MsIHVsSW50ZXJydXB0TWFzayApOw0KKw0KKwkJCS8qIENhbGwgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlci4gKi8NCisJCQlweFRhYmxlID0gJiggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5IYW5kbGVyVGFibGVbIHhJbnRlcnJ1cHROdW1iZXIgXSApOw0KKwkJCXB4VGFibGUtPkhhbmRsZXIoIHB4VGFibGUtPkNhbGxCYWNrUmVmICk7DQorCQl9DQorICAgICAgICANCisJCS8qIENoZWNrIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJCXVsSW50ZXJydXB0TWFzayA8PD0gMHgwMVVMOw0KKwkJdWxJbnRlcnJ1cHRTdGF0dXMgPj49IDB4MDFVTDsNCisNCisJCS8qIEhhdmUgd2Ugc2VydmljZWQgYWxsIGludGVycnVwdHM/ICovDQorCQlpZiggdWxJbnRlcnJ1cHRTdGF0dXMgPT0gMFVMICkNCisJCXsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U2V0dXBJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRJU1JXcmFwcGVyKCB2b2lkICk7DQorDQorCS8qIFBlcmZvcm0gYWxsIGxpYnJhcnkgY2FsbHMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpc2UgdGhlIGV4Y2VwdGlvbiB0YWJsZQ0KKwlhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBUaGlzIGFzc3VtZXMgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgaW4NCisJdXNlLiAqLw0KKwlYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisJWEV4Y19Jbml0KCk7DQorDQorCS8qIFRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyBzYXZlIHRoZSBjb250ZXh0IC0gd2UgdGhlbiBqdW1wIHRvIGEgd3JhcHBlciB0bw0KKwlzYXZlIHRoZSBzdGFjayBpbnRvIHRoZSBUQ0IuICBUaGUgd3JhcHBlciB0aGVuIGNhbGxzIHRoZSBoYW5kbGVyIGRlZmluZWQNCisJYWJvdmUuICovDQorCVhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX05PTl9DUklUSUNBTF9JTlQsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydElTUldyYXBwZXIsIE5VTEwgKTsNCisJWEludGNfSW5pdGlhbGl6ZSggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEICk7DQorCVhJbnRjX1N0YXJ0KCAmeEludGVycnVwdENvbnRyb2xsZXIsIFhJTl9SRUFMX01PREUgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1bnNpZ25lZCBjaGFyIHVjSW50ZXJydXB0SUQsIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwgdm9pZCAqcHZDYWxsQmFja1JlZiApDQorew0KK3BvcnRCQVNFX1RZUEUgeFJldHVybiA9IHBkRkFJTDsNCisNCisJLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gdGhlIHNjb3BlIG9mIHhJbnRlcnJ1cHRDb250cm9sbGVyIGNhbg0KKwlyZW1haW4gd2l0aGluIHRoaXMgZmlsZS4gKi8NCisNCisJaWYoIFhTVF9TVUNDRVNTID09IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCwgcHhIYW5kbGVyLCBwdkNhbGxCYWNrUmVmICkgKQ0KKwl7DQorCQlYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCApOw0KKwkJeFJldHVybiA9IHBkUEFTUzsNCisJfQ0KKw0KKwlyZXR1cm4geFJldHVybjsJCQ0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvcG9ydGFzbS5TIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRhc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJmZjgwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRhc20uUwpAQCAtMCwwICsxLDQyMSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorDQorCS5leHRlcm4gcHhDdXJyZW50VENCDQorCS5leHRlcm4gdlRhc2tTd2l0Y2hDb250ZXh0DQorCS5leHRlcm4gdlRhc2tJbmNyZW1lbnRUaWNrDQorCS5leHRlcm4gdlBvcnRJU1JIYW5kbGVyDQorDQorCS5nbG9iYWwgdlBvcnRTdGFydEZpcnN0VGFzaw0KKwkuZ2xvYmFsIHZQb3J0WWllbGQNCisJLmdsb2JhbCB2UG9ydFRpY2tJU1INCisJLmdsb2JhbCB2UG9ydElTUldyYXBwZXINCisJLmdsb2JhbCB2UG9ydFNhdmVGUFVSZWdpc3RlcnMNCisJLmdsb2JhbCB2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnMNCisNCisuc2V0CUJDaGFpbkZpZWxkLCAwDQorLnNldAlOZXh0TFJGaWVsZCwgQkNoYWluRmllbGQgKyA0DQorLnNldAlNU1JGaWVsZCwgICAgTmV4dExSRmllbGQgKyA0DQorLnNldAlQQ0ZpZWxkLCAgICAgTVNSRmllbGQgICAgKyA0DQorLnNldAlMUkZpZWxkLCAgICAgUENGaWVsZCAgICAgKyA0DQorLnNldAlDVFJGaWVsZCwgICAgTFJGaWVsZCAgICAgKyA0DQorLnNldAlYRVJGaWVsZCwgICAgQ1RSRmllbGQgICAgKyA0DQorLnNldAlDUkZpZWxkLCAgICAgWEVSRmllbGQgICAgKyA0DQorLnNldAlVU1BSRzBGaWVsZCwgQ1JGaWVsZCAgICAgKyA0DQorLnNldAlyMEZpZWxkLCAgICAgVVNQUkcwRmllbGQgKyA0DQorLnNldAlyMkZpZWxkLCAgICAgcjBGaWVsZCAgICAgKyA0DQorLnNldAlyM3IzMUZpZWxkLCAgcjJGaWVsZCAgICAgKyA0DQorLnNldAlJRnJhbWVTaXplLCAgcjNyMzFGaWVsZCAgKyAoICggMzEgLSAzICkgKyAxICkgKiA0DQorDQorDQorLm1hY3JvIHBvcnRTQVZFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorDQorCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgVENCLiAqLw0KKwl4b3IJCVIwLCBSMCwgUjANCisJYWRkaXMJUjIsIFIwLCBweEN1cnJlbnRUQ0JAaGENCisJbHd6CQlSMiwJcHhDdXJyZW50VENCQGwoIFIyICkNCisNCisJLyogU3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCICovDQorCXN0dwkJU1AsCTAoIFIyICkNCisNCisJLyogU2F2ZSB0aGUgbGluayByZWdpc3RlciAqLw0KKwlzdHd1CVIxLCAtMjQoIFIxICkNCisJbWZscglSMA0KKwlzdHcJCVIzMSwgMjAoIFIxICkNCisJc3R3CQlSMCwgMjgoIFIxICkNCisJbXIJCVIzMSwgcjENCisNCisuZW5kbQ0KKw0KKy5tYWNybyBwb3J0UkVTVE9SRV9TVEFDS19QT0lOVEVSX0FORF9MUg0KKw0KKwkvKiBSZXN0b3JlIHRoZSBsaW5rIHJlZ2lzdGVyICovDQorCWx3egkJUjExLCAwKCBSMSApDQorCWx3egkJUjAsIDQoIFIxMSApDQorCW10bHIJUjANCisJbHd6CQlSMzEsIC00KCBSMTEgKQ0KKwltcgkJUjEsIFIxMQ0KKw0KKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFRDQi4gKi8NCisJeG9yCQlSMCwgUjAsIFIwDQorCWFkZGlzICAgU1AsIFIwLCBweEN1cnJlbnRUQ0JAaGENCisJbHd6CQlTUCwJcHhDdXJyZW50VENCQGwoIFIxICkNCisNCisJLyogR2V0IHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLw0KKwlsd3oJCVNQLCAwKCBTUCApDQorDQorLmVuZG0NCisNCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKw0KKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFRDQi4gKi8NCisJeG9yCQlSMCwgUjAsIFIwDQorICAgIGFkZGlzICAgU1AsIFIwLCBweEN1cnJlbnRUQ0JAaGENCisgICAgbHd6CQlTUCwJcHhDdXJyZW50VENCQGwoIFNQICkNCisNCisJLyogR2V0IHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLw0KKwlsd3oJCVNQLCAwKCBTUCApDQorCQ0KKwkvKiBSZXN0b3JlIE1TUiByZWdpc3RlciB0byBTUlIxLiAqLw0KKwlsd3oJCVIwLCBNU1JGaWVsZChSMSkNCisJbXRzcnIxCVIwDQorCQ0KKwkvKiBSZXN0b3JlIGN1cnJlbnQgUEMgbG9jYXRpb24gdG8gU1JSMC4gKi8NCisJbHd6CQlSMCwgUENGaWVsZChSMSkNCisJbXRzcnIwCVIwDQorDQorCS8qIFNhdmUgIFVTUFJHMCByZWdpc3RlciAqLw0KKwlsd3oJCVIwLCBVU1BSRzBGaWVsZChSMSkNCisJbXRzcHIJMHgxMDAsUjANCisJDQorCS8qIFJlc3RvcmUgQ29uZGl0aW9uIHJlZ2lzdGVyICovDQorCWx3egkJUjAsIENSRmllbGQoUjEpDQorCW10Y3IJUjANCisJDQorCS8qIFJlc3RvcmUgRml4ZWQgUG9pbnQgRXhjZXB0aW9uIHJlZ2lzdGVyICovDQorCWx3egkJUjAsIFhFUkZpZWxkKFIxKQ0KKwltdHhlcglSMA0KKwkNCisJLyogUmVzdG9yZSBDb3VudGVyIHJlZ2lzdGVyICovDQorCWx3egkJUjAsIENUUkZpZWxkKFIxKQ0KKwltdGN0cglSMA0KKwkNCisJLyogUmVzdG9yZSBMaW5rIHJlZ2lzdGVyICovDQorCWx3egkJUjAsIExSRmllbGQoUjEpDQorCW10bHIJUjANCisJDQorCS8qIFJlc3RvcmUgcmVtYWluaW5nIEdQUiByZWdpc3RlcnMuICovDQorCWxtdwlSMyxyM3IzMUZpZWxkKFIxKQ0KKwkNCisJLyogUmVzdG9yZSByMCBhbmQgcjIuICovDQorCWx3egkJUjAsIHIwRmllbGQoUjEpDQorCWx3egkJUjIsIHIyRmllbGQoUjEpDQorCQ0KKwkvKiBSZW1vdmUgZnJhbWUgZnJvbSBzdGFjayAqLw0KKwlhZGRpCVIxLFIxLElGcmFtZVNpemUNCisNCisJLyogUmV0dXJuIGludG8gdGhlIGZpcnN0IHRhc2sgKi8NCisJcmZpDQorDQorDQorDQordlBvcnRZaWVsZDoNCisNCisJcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisJYmwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorCWJscg0KKw0KK3ZQb3J0VGlja0lTUjoNCisNCisJcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisJYmwgdlRhc2tJbmNyZW1lbnRUaWNrDQorCQ0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJYmwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCSNlbmRpZg0KKw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovDQorCWxpcwkJUjAsIDIwNDgNCisJbXR0c3IJUjANCisNCisJcG9ydFJFU1RPUkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisJYmxyDQorDQordlBvcnRJU1JXcmFwcGVyOg0KKw0KKwlwb3J0U0FWRV9TVEFDS19QT0lOVEVSX0FORF9MUg0KKwlibCB2UG9ydElTUkhhbmRsZXINCisJcG9ydFJFU1RPUkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisJYmxyDQorDQorI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KKw0KK3ZQb3J0U2F2ZUZQVVJlZ2lzdGVyczoNCisNCisJLyogRW5hYmxlIEFQVSBhbmQgbWFyayBGUFUgYXMgcHJlc2VudC4gKi8NCisJbWZtc3IJcjANCisJeG9yCQlyMzAsIHIzMCwgcjMwDQorCW9yaXMJcjMwLCByMzAsIDUxMg0KKwlvcmkJCXIzMCwgcjMwLCA4MTkyDQorCW9yCQlyMCwgcjAsIHIzMA0KKwltdG1zcglyMA0KKw0KKyNpZmRlZiBVU0VfRFBfRlBVDQorDQorCS8qIEJ1ZmZlciBhZGRyZXNzIGlzIGluIHIzLiAgU2F2ZSBlYWNoIGZsb3AgcmVnaXN0ZXIgaW50byBhbiBvZmZzZXQgZnJvbQ0KKwl0aGlzIGJ1ZmZlciBhZGRyZXNzLiAqLw0KKwlzdGZkCWYwLCAwKHIzKQ0KKwlzdGZkCWYxLCA4KHIzKQ0KKwlzdGZkCWYyLCAxNihyMykNCisJc3RmZAlmMywgMjQocjMpDQorCXN0ZmQJZjQsIDMyKHIzKQ0KKwlzdGZkCWY1LCA0MChyMykNCisJc3RmZAlmNiwgNDgocjMpDQorCXN0ZmQJZjcsIDU2KHIzKQ0KKwlzdGZkCWY4LCA2NChyMykNCisJc3RmZAlmOSwgNzIocjMpDQorCXN0ZmQJZjEwLCA4MChyMykNCisJc3RmZAlmMTEsIDg4KHIzKQ0KKwlzdGZkCWYxMiwgOTYocjMpDQorCXN0ZmQJZjEzLCAxMDQocjMpDQorCXN0ZmQJZjE0LCAxMTIocjMpDQorCXN0ZmQJZjE1LCAxMjAocjMpDQorCXN0ZmQJZjE2LCAxMjgocjMpDQorCXN0ZmQJZjE3LCAxMzYocjMpDQorCXN0ZmQJZjE4LCAxNDQocjMpDQorCXN0ZmQJZjE5LCAxNTIocjMpDQorCXN0ZmQJZjIwLCAxNjAocjMpDQorCXN0ZmQJZjIxLCAxNjgocjMpDQorCXN0ZmQJZjIyLCAxNzYocjMpDQorCXN0ZmQJZjIzLCAxODQocjMpDQorCXN0ZmQJZjI0LCAxOTIocjMpDQorCXN0ZmQJZjI1LCAyMDAocjMpDQorCXN0ZmQJZjI2LCAyMDgocjMpDQorCXN0ZmQJZjI3LCAyMTYocjMpDQorCXN0ZmQJZjI4LCAyMjQocjMpDQorCXN0ZmQJZjI5LCAyMzIocjMpDQorCXN0ZmQJZjMwLCAyNDAocjMpDQorCXN0ZmQJZjMxLCAyNDgocjMpCQ0KKwkNCisJLyogQWxzbyBzYXZlIHRoZSBGUFNDUi4gKi8NCisJbWZmcwlmMzENCisJc3RmcwlmMzEsIDI1NihyMykNCisNCisjZWxzZQ0KKw0KKwkvKiBCdWZmZXIgYWRkcmVzcyBpcyBpbiByMy4gIFNhdmUgZWFjaCBmbG9wIHJlZ2lzdGVyIGludG8gYW4gb2Zmc2V0IGZyb20NCisJdGhpcyBidWZmZXIgYWRkcmVzcy4gKi8NCisJc3RmcwlmMCwgMChyMykNCisJc3RmcwlmMSwgNChyMykNCisJc3RmcwlmMiwgOChyMykNCisJc3RmcwlmMywgMTIocjMpDQorCXN0ZnMJZjQsIDE2KHIzKQ0KKwlzdGZzCWY1LCAyMChyMykNCisJc3RmcwlmNiwgMjQocjMpDQorCXN0ZnMJZjcsIDI4KHIzKQ0KKwlzdGZzCWY4LCAzMihyMykNCisJc3RmcwlmOSwgMzYocjMpDQorCXN0ZnMJZjEwLCA0MChyMykNCisJc3RmcwlmMTEsIDQ0KHIzKQ0KKwlzdGZzCWYxMiwgNDgocjMpDQorCXN0ZnMJZjEzLCA1MihyMykNCisJc3RmcwlmMTQsIDU2KHIzKQ0KKwlzdGZzCWYxNSwgNjAocjMpDQorCXN0ZnMJZjE2LCA2NChyMykNCisJc3RmcwlmMTcsIDY4KHIzKQ0KKwlzdGZzCWYxOCwgNzIocjMpDQorCXN0ZnMJZjE5LCA3NihyMykNCisJc3RmcwlmMjAsIDgwKHIzKQ0KKwlzdGZzCWYyMSwgODQocjMpDQorCXN0ZnMJZjIyLCA4OChyMykNCisJc3RmcwlmMjMsIDkyKHIzKQ0KKwlzdGZzCWYyNCwgOTYocjMpDQorCXN0ZnMJZjI1LCAxMDAocjMpDQorCXN0ZnMJZjI2LCAxMDQocjMpDQorCXN0ZnMJZjI3LCAxMDgocjMpDQorCXN0ZnMJZjI4LCAxMTIocjMpDQorCXN0ZnMJZjI5LCAxMTYocjMpDQorCXN0ZnMJZjMwLCAxMjAocjMpDQorCXN0ZnMJZjMxLCAxMjQocjMpDQorCQ0KKwkvKiBBbHNvIHNhdmUgdGhlIEZQU0NSLiAqLw0KKwltZmZzCWYzMQ0KKwlzdGZzCWYzMSwgMTI4KHIzKQ0KKwkNCisjZW5kaWYNCisNCisJYmxyDQorDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9GUFUuICovDQorDQorDQorI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KKw0KK3ZQb3J0UmVzdG9yZUZQVVJlZ2lzdGVyczoNCisNCisJLyogRW5hYmxlIEFQVSBhbmQgbWFyayBGUFUgYXMgcHJlc2VudC4gKi8NCisJbWZtc3IJcjANCisJeG9yCQlyMzAsIHIzMCwgcjMwDQorCW9yaXMJcjMwLCByMzAsIDUxMg0KKwlvcmkJCXIzMCwgcjMwLCA4MTkyDQorCW9yCQlyMCwgcjAsIHIzMA0KKwltdG1zcglyMA0KKw0KKyNpZmRlZiBVU0VfRFBfRlBVDQorDQorCS8qIEJ1ZmZlciBhZGRyZXNzIGlzIGluIHIzLiAgUmVzdG9yZSBlYWNoIGZsb3AgcmVnaXN0ZXIgZnJvbSBhbiBvZmZzZXQNCisJaW50byB0aGlzIGJ1ZmZlci4gDQorCQ0KKwlGaXJzdCB0aGUgRlBTQ1IuICovDQorCWxmcwkJZjMxLCAyNTYocjMpDQorCW10ZnNmCWYzMSwgNw0KKw0KKwlsZmQJCWYwLCAwKHIzKQ0KKwlsZmQJICAgIGYxLCA4KHIzKQ0KKwlsZmQJCWYyLCAxNihyMykNCisJbGZkCQlmMywgMjQocjMpDQorCWxmZAkJZjQsIDMyKHIzKQ0KKwlsZmQJCWY1LCA0MChyMykNCisJbGZkCQlmNiwgNDgocjMpDQorCWxmZAkJZjcsIDU2KHIzKQ0KKwlsZmQJCWY4LCA2NChyMykNCisJbGZkCQlmOSwgNzIocjMpDQorCWxmZAkJZjEwLCA4MChyMykNCisJbGZkCQlmMTEsIDg4KHIzKQ0KKwlsZmQJCWYxMiwgOTYocjMpDQorCWxmZAkJZjEzLCAxMDQocjMpDQorCWxmZAkJZjE0LCAxMTIocjMpDQorCWxmZAkJZjE1LCAxMjAocjMpDQorCWxmZAkJZjE2LCAxMjgocjMpDQorCWxmZAkJZjE3LCAxMzYocjMpDQorCWxmZAkJZjE4LCAxNDQocjMpDQorCWxmZAkJZjE5LCAxNTIocjMpDQorCWxmZAkJZjIwLCAxNjAocjMpDQorCWxmZAkJZjIxLCAxNjgocjMpDQorCWxmZAkJZjIyLCAxNzYocjMpDQorCWxmZAkJZjIzLCAxODQocjMpDQorCWxmZAkJZjI0LCAxOTIocjMpDQorCWxmZAkJZjI1LCAyMDAocjMpDQorCWxmZAkJZjI2LCAyMDgocjMpDQorCWxmZAkJZjI3LCAyMTYocjMpDQorCWxmZAkJZjI4LCAyMjQocjMpDQorCWxmZAkJZjI5LCAyMzIocjMpDQorCWxmZAkJZjMwLCAyNDAocjMpDQorCWxmZAkJZjMxLCAyNDgocjMpDQorDQorI2Vsc2UNCisNCisJLyogQnVmZmVyIGFkZHJlc3MgaXMgaW4gcjMuICBSZXN0b3JlIGVhY2ggZmxvcCByZWdpc3RlciBmcm9tIGFuIG9mZnNldA0KKwlpbnRvIHRoaXMgYnVmZmVyLiANCisJDQorCUZpcnN0IHRoZSBGUFNDUi4gKi8NCisJbGZzCQlmMzEsIDEyOChyMykNCisJbXRmc2YJZjMxLCA3DQorDQorCWxmcwkJZjAsIDAocjMpDQorCWxmcwkJZjEsIDQocjMpDQorCWxmcwkJZjIsIDgocjMpDQorCWxmcwkJZjMsIDEyKHIzKQ0KKwlsZnMJCWY0LCAxNihyMykNCisJbGZzCQlmNSwgMjAocjMpDQorCWxmcwkJZjYsIDI0KHIzKQ0KKwlsZnMJCWY3LCAyOChyMykNCisJbGZzCQlmOCwgMzIocjMpDQorCWxmcwkJZjksIDM2KHIzKQ0KKwlsZnMJCWYxMCwgNDAocjMpDQorCWxmcwkJZjExLCA0NChyMykNCisJbGZzCQlmMTIsIDQ4KHIzKQ0KKwlsZnMJCWYxMywgNTIocjMpDQorCWxmcwkJZjE0LCA1NihyMykNCisJbGZzCQlmMTUsIDYwKHIzKQ0KKwlsZnMJCWYxNiwgNjQocjMpDQorCWxmcwkJZjE3LCA2OChyMykNCisJbGZzCQlmMTgsIDcyKHIzKQ0KKwlsZnMJCWYxOSwgNzYocjMpDQorCWxmcwkJZjIwLCA4MChyMykNCisJbGZzCQlmMjEsIDg0KHIzKQ0KKwlsZnMJCWYyMiwgODgocjMpDQorCWxmcwkJZjIzLCA5MihyMykNCisJbGZzCQlmMjQsIDk2KHIzKQ0KKwlsZnMJCWYyNSwgMTAwKHIzKQ0KKwlsZnMJCWYyNiwgMTA0KHIzKQ0KKwlsZnMJCWYyNywgMTA4KHIzKQ0KKwlsZnMJCWYyOCwgMTEyKHIzKQ0KKwlsZnMJCWYyOSwgMTE2KHIzKQ0KKwlsZnMJCWYzMCwgMTIwKHIzKQ0KKwlsZnMJCWYzMSwgMTI0KHIzKQ0KKw0KKyNlbmRpZg0KKw0KKwlibHINCisNCisjZW5kaWYgLyogY29uZmlnVVNFX0ZQVS4gKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkMzZhZAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUFBDNDA1X1hpbGlueC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE1MyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaW5jbHVkZSAieGV4Y2VwdGlvbl9sLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIFRoaXMgcG9ydCB1c2VzIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IGZyb20gdGhlIFRDQiByYXRoZXIgdGhhbg0KK21haW50YWluaW5nIGEgc2VwYXJhdGUgdmFsdWUgYW5kIHRoZW4gc2F2aW5nIHRoaXMgdmFsdWUgaW4gdGhlIHRhc2sgc3RhY2suICovDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJCTENCisNCisvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCVhFeGNfbURpc2FibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQlYRXhjX21FbmFibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFjcm9zLiAqLw0KK3ZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQordm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQl2VGFza0V4aXRDcml0aWNhbCgpDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSBhc20gdm9sYXRpbGUgKCAiU0MgXG5cdCBOT1AiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorDQorLyogVGhlcmUgYXJlIDMyICogMzJiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaWV0ZXJzLCBwbHVzIHRoZSBGUFNDUiB0byBzYXZlLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0ZMT1BfUkVHSVNURVJTX1RPX1NBVkUgICggMzIgKyAxICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorLyogUG9ydCBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zLiAqLw0KK3ZvaWQgdlBvcnRTZXR1cEludGVycnVwdENvbnRyb2xsZXIoIHZvaWQgKTsNCitwb3J0QkFTRV9UWVBFIHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVuc2lnbmVkIHBvcnRDSEFSIHVjSW50ZXJydXB0SUQsIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwgdm9pZCAqcHZDYWxsQmFja1JlZiApOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvRlBVX01hY3Jvcy5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L0ZQVV9NYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUyOWYyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L0ZQVV9NYWNyb3MuaApAQCAtMCwwICsxLDg0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBXaGVuIHN3aXRjaGluZyBvdXQgYSB0YXNrLCBpZiB0aGUgdGFzayB0YWcgY29udGFpbnMgYSBidWZmZXIgYWRkcmVzcyB0aGVuDQorc2F2ZSB0aGUgZmxvcCBjb250ZXh0IGludG8gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9PVVQoKQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRTYXZlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFNhdmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KKw0KKy8qIFdoZW4gc3dpdGNoaW5nIGluIGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KK2xvYWQgdGhlIGZsb3AgY29udGV4dCBmcm9tIHRoZSBidWZmZXIuICovDQorI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKQkJCQkJCQkJCQkJCVwNCisJaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2lkIHZQb3J0UmVzdG9yZUZQVVJlZ2lzdGVycyggdm9pZCAqICk7CQkJCQkJXA0KKwkJdlBvcnRSZXN0b3JlRlBVUmVnaXN0ZXJzKCAoIHZvaWQgKiApICggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgKSApOwlcDQorCX0NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VkZDgxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnQuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQUEM0NDAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgInh0aW1lX2wuaCINCisjaW5jbHVkZSAieGludGMuaCINCisjaW5jbHVkZSAieGludGNfaS5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIERlZmluaXRpb25zIHRvIHNldCB0aGUgaW5pdGlhbCBNU1Igb2YgZWFjaCB0YXNrLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUJKCAxVUwgPDwgMTdVTCApDQorI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRQkoIDFVTCA8PCAxNVVMICkNCisjZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRQkJKCAxVUwgPDwgMTJVTCApDQorDQorI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KKwkjZGVmaW5lIHBvcnRBUFVfUFJFU0VOVAkJCQkoIDFVTCA8PCAyNVVMICkNCisJI2RlZmluZSBwb3J0RkNNX0ZQVV9QUkVTRU5UCQkJKCAxVUwgPDwgMTNVTCApDQorI2Vsc2UNCisJI2RlZmluZSBwb3J0QVBVX1BSRVNFTlQJCQkJKCAwVUwgKQ0KKwkjZGVmaW5lIHBvcnRGQ01fRlBVX1BSRVNFTlQJCQkoIDBVTCApDQorI2VuZGlmDQorDQorI2RlZmluZSBwb3J0SU5JVElBTF9NU1IJCSggcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgfCBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSB8IHBvcnRBUFVfUFJFU0VOVCB8IHBvcnRGQ01fRlBVX1BSRVNFTlQgKQ0KKw0KKw0KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBX0JBU0VfOw0KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBMl9CQVNFXzsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIHRoZSBzeXN0ZW0gdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIFRoZSBoYW5kbGVyIGZvciB0aGUgdGljayBpbnRlcnJ1cHQgLSBkZWZpbmVkIGluIHBvcnRhc20ucy4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKTsNCisNCisvKg0KKyAqIFRoZSBoYW5kbGVyIGZvciB0aGUgeWllbGQgZnVuY3Rpb24gLSBkZWZpbmVkIGluIHBvcnRhc20ucy4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorDQorLyoNCisgKiBGdW5jdGlvbiB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHJ1bm5pbmcgYnkgc3RhcnRpbmcgdGhlIGhpZ2hlc3QNCisgKiBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIHRodXMgZmFyIGJlZW4gY3JlYXRlZC4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU3RydWN0dXJlIHVzZWQgdG8gaG9sZCB0aGUgc3RhdGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAqLw0KK3N0YXRpYyBYSW50YyB4SW50ZXJydXB0Q29udHJvbGxlcjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgdGhlIHRhc2sgaGFkIGJlZW4NCisgKiBpbnRlcnJ1cHRlZC4NCisgKg0KKyAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBQbGFjZSBhIGtub3duIHZhbHVlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIGZvciBkZWJ1Z2dpbmcuICovDQorCSpweFRvcE9mU3RhY2sgPSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogRUFCSSBzdGFjayBmcmFtZS4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDIwOwkvKiBQcmV2aW91cyBiYWNrY2hhaW4gYW5kIExSLCBSMzEgdG8gUjQgaW5jbHVzaXZlLiAqLw0KKw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIxMy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAmX1NEQV9CQVNFXzsgLyogYWRkcmVzcyBvZiB0aGUgZmlyc3Qgc21hbGwgZGF0YSBhcmVhICovDQorCXB4VG9wT2ZTdGFjayAtPSAxMDsNCisNCisJLyogUGFyYW1ldGVycyBpbiBSMy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICZfU0RBMl9CQVNFXzsJLyogYWRkcmVzcyBvZiB0aGUgc2Vjb25kIHNtYWxsIGRhdGEgYXJlYSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjEgaXMgdGhlIHN0YWNrIHBvaW50ZXIgc28gaXMgb21pdHRlZC4gKi8NCisNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTAwMDAwMDFVTDs7CS8qIFIwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsJLyogVVNQUkcwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsJLyogQ1IuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBYRVIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBDVFIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHZQb3J0RW5kU2NoZWR1bGVyOwkvKiBMUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOyAvKiBTUlIwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX01TUjsvKiBTUlIxLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSB2UG9ydEVuZFNjaGVkdWxlcjsvKiBOZXh0IExSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsvKiBCYWNrY2hhaW4uICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCVhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX1NZU1RFTV9DQUxMLCAoIFhFeGNlcHRpb25IYW5kbGVyICkgdlBvcnRZaWVsZCwgKCB2b2lkICogKSAwICk7DQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KKwlyZXR1cm4gcGRGQUxTRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBOb3QgaW1wbGVtZW50ZWQuICovDQorCWZvciggOzsgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsSW50ZXJ2YWwgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUwgKTsNCisNCisJWFRpbWVfREVDQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfRklUQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfV0RUQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfV0RURGlzYWJsZUludGVycnVwdCgpOw0KKwlYVGltZV9GSVREaXNhYmxlSW50ZXJydXB0KCk7DQorDQorCVhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX0RFQ19JTlQsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydFRpY2tJU1IsICggdm9pZCAqICkgMCApOw0KKw0KKwlYVGltZV9ERUNFbmFibGVBdXRvUmVsb2FkKCk7DQorCVhUaW1lX0RFQ1NldEludGVydmFsKCB1bEludGVydmFsICk7DQorCVhUaW1lX0RFQ0VuYWJsZUludGVycnVwdCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0SVNSSGFuZGxlciggdm9pZCAqcHZOdWxsRG9Ob3RVc2UgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsSW50ZXJydXB0U3RhdHVzLCB1bEludGVycnVwdE1hc2sgPSAxVUw7DQorcG9ydEJBU0VfVFlQRSB4SW50ZXJydXB0TnVtYmVyOw0KK1hJbnRjX0NvbmZpZyAqcHhJbnRlcnJ1cHRDb250cm9sbGVyOw0KK1hJbnRjX1ZlY3RvclRhYmxlRW50cnkgKnB4VGFibGU7DQorDQorCS8qIEp1c3QgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuICovDQorCSggdm9pZCApIHB2TnVsbERvTm90VXNlOw0KKw0KKwkvKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlIGRldmljZSBJRCAtIGluIHRoaXMgY2FzZSBpdCBpcw0KKwlhc3N1bWVkIHRoYXQgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJcHhJbnRlcnJ1cHRDb250cm9sbGVyID0gJlhJbnRjX0NvbmZpZ1RhYmxlWyBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEIF07DQorDQorCS8qIFdoaWNoIGludGVycnVwdHMgYXJlIHBlbmRpbmc/ICovDQorCXVsSW50ZXJydXB0U3RhdHVzID0gWEludGNfbUdldEludHJTdGF0dXMoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+QmFzZUFkZHJlc3MgKTsNCisNCisJZm9yKCB4SW50ZXJydXB0TnVtYmVyID0gMDsgeEludGVycnVwdE51bWJlciA8IFhQQVJfSU5UQ19NQVhfTlVNX0lOVFJfSU5QVVRTOyB4SW50ZXJydXB0TnVtYmVyKysgKQ0KKwl7DQorCQlpZiggdWxJbnRlcnJ1cHRTdGF0dXMgJiAweDAxVUwgKQ0KKwkJew0KKwkJCS8qIENsZWFyIHRoZSBwZW5kaW5nIGludGVycnVwdC4gKi8NCisJCQlYSW50Y19tQWNrSW50ciggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5CYXNlQWRkcmVzcywgdWxJbnRlcnJ1cHRNYXNrICk7DQorDQorCQkJLyogQ2FsbCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyLiAqLw0KKwkJCXB4VGFibGUgPSAmKCBweEludGVycnVwdENvbnRyb2xsZXItPkhhbmRsZXJUYWJsZVsgeEludGVycnVwdE51bWJlciBdICk7DQorCQkJcHhUYWJsZS0+SGFuZGxlciggcHhUYWJsZS0+Q2FsbEJhY2tSZWYgKTsNCisJCX0NCisNCisJCS8qIENoZWNrIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJCXVsSW50ZXJydXB0TWFzayA8PD0gMHgwMVVMOw0KKwkJdWxJbnRlcnJ1cHRTdGF0dXMgPj49IDB4MDFVTDsNCisNCisJCS8qIEhhdmUgd2Ugc2VydmljZWQgYWxsIGludGVycnVwdHM/ICovDQorCQlpZiggdWxJbnRlcnJ1cHRTdGF0dXMgPT0gMFVMICkNCisJCXsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0U2V0dXBJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRJU1JXcmFwcGVyKCB2b2lkICk7DQorDQorCS8qIFBlcmZvcm0gYWxsIGxpYnJhcnkgY2FsbHMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpc2UgdGhlIGV4Y2VwdGlvbiB0YWJsZQ0KKwlhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBUaGlzIGFzc3VtZXMgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgaW4NCisJdXNlLiAqLw0KKwlYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisJWEV4Y19Jbml0KCk7DQorDQorCS8qIFRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyBzYXZlIHRoZSBjb250ZXh0IC0gd2UgdGhlbiBqdW1wIHRvIGEgd3JhcHBlciB0bw0KKwlzYXZlIHRoZSBzdGFjayBpbnRvIHRoZSBUQ0IuICBUaGUgd3JhcHBlciB0aGVuIGNhbGxzIHRoZSBoYW5kbGVyIGRlZmluZWQNCisJYWJvdmUuICovDQorCVhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX05PTl9DUklUSUNBTF9JTlQsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydElTUldyYXBwZXIsIE5VTEwgKTsNCisJWEludGNfSW5pdGlhbGl6ZSggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEICk7DQorCVhJbnRjX1N0YXJ0KCAmeEludGVycnVwdENvbnRyb2xsZXIsIFhJTl9SRUFMX01PREUgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1bnNpZ25lZCBjaGFyIHVjSW50ZXJydXB0SUQsIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwgdm9pZCAqcHZDYWxsQmFja1JlZiApDQorew0KK3BvcnRCQVNFX1RZUEUgeFJldHVybiA9IHBkRkFJTDsNCisNCisJLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gdGhlIHNjb3BlIG9mIHhJbnRlcnJ1cHRDb250cm9sbGVyIGNhbg0KKwlyZW1haW4gd2l0aGluIHRoaXMgZmlsZS4gKi8NCisNCisJaWYoIFhTVF9TVUNDRVNTID09IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCwgcHhIYW5kbGVyLCBwdkNhbGxCYWNrUmVmICkgKQ0KKwl7DQorCQlYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCApOw0KKwkJeFJldHVybiA9IHBkUEFTUzsNCisJfQ0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnRhc20uUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUFBDNDQwX1hpbGlueC9wb3J0YXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiZmY4MAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUFBDNDQwX1hpbGlueC9wb3J0YXNtLlMKQEAgLTAsMCArMSw0MjEgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKw0KKwkuZXh0ZXJuIHB4Q3VycmVudFRDQg0KKwkuZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dA0KKwkuZXh0ZXJuIHZUYXNrSW5jcmVtZW50VGljaw0KKwkuZXh0ZXJuIHZQb3J0SVNSSGFuZGxlcg0KKw0KKwkuZ2xvYmFsIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisJLmdsb2JhbCB2UG9ydFlpZWxkDQorCS5nbG9iYWwgdlBvcnRUaWNrSVNSDQorCS5nbG9iYWwgdlBvcnRJU1JXcmFwcGVyDQorCS5nbG9iYWwgdlBvcnRTYXZlRlBVUmVnaXN0ZXJzDQorCS5nbG9iYWwgdlBvcnRSZXN0b3JlRlBVUmVnaXN0ZXJzDQorDQorLnNldAlCQ2hhaW5GaWVsZCwgMA0KKy5zZXQJTmV4dExSRmllbGQsIEJDaGFpbkZpZWxkICsgNA0KKy5zZXQJTVNSRmllbGQsICAgIE5leHRMUkZpZWxkICsgNA0KKy5zZXQJUENGaWVsZCwgICAgIE1TUkZpZWxkICAgICsgNA0KKy5zZXQJTFJGaWVsZCwgICAgIFBDRmllbGQgICAgICsgNA0KKy5zZXQJQ1RSRmllbGQsICAgIExSRmllbGQgICAgICsgNA0KKy5zZXQJWEVSRmllbGQsICAgIENUUkZpZWxkICAgICsgNA0KKy5zZXQJQ1JGaWVsZCwgICAgIFhFUkZpZWxkICAgICsgNA0KKy5zZXQJVVNQUkcwRmllbGQsIENSRmllbGQgICAgICsgNA0KKy5zZXQJcjBGaWVsZCwgICAgIFVTUFJHMEZpZWxkICsgNA0KKy5zZXQJcjJGaWVsZCwgICAgIHIwRmllbGQgICAgICsgNA0KKy5zZXQJcjNyMzFGaWVsZCwgIHIyRmllbGQgICAgICsgNA0KKy5zZXQJSUZyYW1lU2l6ZSwgIHIzcjMxRmllbGQgICsgKCAoIDMxIC0gMyApICsgMSApICogNA0KKw0KKw0KKy5tYWNybyBwb3J0U0FWRV9TVEFDS19QT0lOVEVSX0FORF9MUg0KKw0KKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFRDQi4gKi8NCisJeG9yCQlSMCwgUjAsIFIwDQorCWFkZGlzCVIyLCBSMCwgcHhDdXJyZW50VENCQGhhDQorCWx3egkJUjIsCXB4Q3VycmVudFRDQkBsKCBSMiApDQorDQorCS8qIFN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQiAqLw0KKwlzdHcJCVNQLAkwKCBSMiApDQorDQorCS8qIFNhdmUgdGhlIGxpbmsgcmVnaXN0ZXIgKi8NCisJc3R3dQlSMSwgLTI0KCBSMSApDQorCW1mbHIJUjANCisJc3R3CQlSMzEsIDIwKCBSMSApDQorCXN0dwkJUjAsIDI4KCBSMSApDQorCW1yCQlSMzEsIHIxDQorDQorLmVuZG0NCisNCisubWFjcm8gcG9ydFJFU1RPUkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisNCisJLyogUmVzdG9yZSB0aGUgbGluayByZWdpc3RlciAqLw0KKwlsd3oJCVIxMSwgMCggUjEgKQ0KKwlsd3oJCVIwLCA0KCBSMTEgKQ0KKwltdGxyCVIwDQorCWx3egkJUjMxLCAtNCggUjExICkNCisJbXIJCVIxLCBSMTENCisNCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBUQ0IuICovDQorCXhvcgkJUjAsIFIwLCBSMA0KKwlhZGRpcyAgIFNQLCBSMCwgcHhDdXJyZW50VENCQGhhDQorCWx3egkJU1AsCXB4Q3VycmVudFRDQkBsKCBSMSApDQorDQorCS8qIEdldCB0aGUgdGFzayBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8NCisJbHd6CQlTUCwgMCggU1AgKQ0KKw0KKy5lbmRtDQorDQorDQordlBvcnRTdGFydEZpcnN0VGFzazoNCisNCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBUQ0IuICovDQorCXhvcgkJUjAsIFIwLCBSMA0KKyAgICBhZGRpcyAgIFNQLCBSMCwgcHhDdXJyZW50VENCQGhhDQorICAgIGx3egkJU1AsCXB4Q3VycmVudFRDQkBsKCBTUCApDQorDQorCS8qIEdldCB0aGUgdGFzayBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8NCisJbHd6CQlTUCwgMCggU1AgKQ0KKwkNCisJLyogUmVzdG9yZSBNU1IgcmVnaXN0ZXIgdG8gU1JSMS4gKi8NCisJbHd6CQlSMCwgTVNSRmllbGQoUjEpDQorCW10c3JyMQlSMA0KKwkNCisJLyogUmVzdG9yZSBjdXJyZW50IFBDIGxvY2F0aW9uIHRvIFNSUjAuICovDQorCWx3egkJUjAsIFBDRmllbGQoUjEpDQorCW10c3JyMAlSMA0KKw0KKwkvKiBTYXZlICBVU1BSRzAgcmVnaXN0ZXIgKi8NCisJbHd6CQlSMCwgVVNQUkcwRmllbGQoUjEpDQorCW10c3ByCTB4MTAwLFIwDQorCQ0KKwkvKiBSZXN0b3JlIENvbmRpdGlvbiByZWdpc3RlciAqLw0KKwlsd3oJCVIwLCBDUkZpZWxkKFIxKQ0KKwltdGNyCVIwDQorCQ0KKwkvKiBSZXN0b3JlIEZpeGVkIFBvaW50IEV4Y2VwdGlvbiByZWdpc3RlciAqLw0KKwlsd3oJCVIwLCBYRVJGaWVsZChSMSkNCisJbXR4ZXIJUjANCisJDQorCS8qIFJlc3RvcmUgQ291bnRlciByZWdpc3RlciAqLw0KKwlsd3oJCVIwLCBDVFJGaWVsZChSMSkNCisJbXRjdHIJUjANCisJDQorCS8qIFJlc3RvcmUgTGluayByZWdpc3RlciAqLw0KKwlsd3oJCVIwLCBMUkZpZWxkKFIxKQ0KKwltdGxyCVIwDQorCQ0KKwkvKiBSZXN0b3JlIHJlbWFpbmluZyBHUFIgcmVnaXN0ZXJzLiAqLw0KKwlsbXcJUjMscjNyMzFGaWVsZChSMSkNCisJDQorCS8qIFJlc3RvcmUgcjAgYW5kIHIyLiAqLw0KKwlsd3oJCVIwLCByMEZpZWxkKFIxKQ0KKwlsd3oJCVIyLCByMkZpZWxkKFIxKQ0KKwkNCisJLyogUmVtb3ZlIGZyYW1lIGZyb20gc3RhY2sgKi8NCisJYWRkaQlSMSxSMSxJRnJhbWVTaXplDQorDQorCS8qIFJldHVybiBpbnRvIHRoZSBmaXJzdCB0YXNrICovDQorCXJmaQ0KKw0KKw0KKw0KK3ZQb3J0WWllbGQ6DQorDQorCXBvcnRTQVZFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorCWJsIHZUYXNrU3dpdGNoQ29udGV4dA0KKwlwb3J0UkVTVE9SRV9TVEFDS19QT0lOVEVSX0FORF9MUg0KKwlibHINCisNCit2UG9ydFRpY2tJU1I6DQorDQorCXBvcnRTQVZFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorCWJsIHZUYXNrSW5jcmVtZW50VGljaw0KKwkNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCWJsIHZUYXNrU3dpdGNoQ29udGV4dA0KKwkjZW5kaWYNCisNCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLw0KKwlsaXMJCVIwLCAyMDQ4DQorCW10dHNyCVIwDQorDQorCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorCWJscg0KKw0KK3ZQb3J0SVNSV3JhcHBlcjoNCisNCisJcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUl9BTkRfTFINCisJYmwgdlBvcnRJU1JIYW5kbGVyDQorCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVJfQU5EX0xSDQorCWJscg0KKw0KKyNpZiBjb25maWdVU0VfRlBVID09IDENCisNCit2UG9ydFNhdmVGUFVSZWdpc3RlcnM6DQorDQorCS8qIEVuYWJsZSBBUFUgYW5kIG1hcmsgRlBVIGFzIHByZXNlbnQuICovDQorCW1mbXNyCXIwDQorCXhvcgkJcjMwLCByMzAsIHIzMA0KKwlvcmlzCXIzMCwgcjMwLCA1MTINCisJb3JpCQlyMzAsIHIzMCwgODE5Mg0KKwlvcgkJcjAsIHIwLCByMzANCisJbXRtc3IJcjANCisNCisjaWZkZWYgVVNFX0RQX0ZQVQ0KKw0KKwkvKiBCdWZmZXIgYWRkcmVzcyBpcyBpbiByMy4gIFNhdmUgZWFjaCBmbG9wIHJlZ2lzdGVyIGludG8gYW4gb2Zmc2V0IGZyb20NCisJdGhpcyBidWZmZXIgYWRkcmVzcy4gKi8NCisJc3RmZAlmMCwgMChyMykNCisJc3RmZAlmMSwgOChyMykNCisJc3RmZAlmMiwgMTYocjMpDQorCXN0ZmQJZjMsIDI0KHIzKQ0KKwlzdGZkCWY0LCAzMihyMykNCisJc3RmZAlmNSwgNDAocjMpDQorCXN0ZmQJZjYsIDQ4KHIzKQ0KKwlzdGZkCWY3LCA1NihyMykNCisJc3RmZAlmOCwgNjQocjMpDQorCXN0ZmQJZjksIDcyKHIzKQ0KKwlzdGZkCWYxMCwgODAocjMpDQorCXN0ZmQJZjExLCA4OChyMykNCisJc3RmZAlmMTIsIDk2KHIzKQ0KKwlzdGZkCWYxMywgMTA0KHIzKQ0KKwlzdGZkCWYxNCwgMTEyKHIzKQ0KKwlzdGZkCWYxNSwgMTIwKHIzKQ0KKwlzdGZkCWYxNiwgMTI4KHIzKQ0KKwlzdGZkCWYxNywgMTM2KHIzKQ0KKwlzdGZkCWYxOCwgMTQ0KHIzKQ0KKwlzdGZkCWYxOSwgMTUyKHIzKQ0KKwlzdGZkCWYyMCwgMTYwKHIzKQ0KKwlzdGZkCWYyMSwgMTY4KHIzKQ0KKwlzdGZkCWYyMiwgMTc2KHIzKQ0KKwlzdGZkCWYyMywgMTg0KHIzKQ0KKwlzdGZkCWYyNCwgMTkyKHIzKQ0KKwlzdGZkCWYyNSwgMjAwKHIzKQ0KKwlzdGZkCWYyNiwgMjA4KHIzKQ0KKwlzdGZkCWYyNywgMjE2KHIzKQ0KKwlzdGZkCWYyOCwgMjI0KHIzKQ0KKwlzdGZkCWYyOSwgMjMyKHIzKQ0KKwlzdGZkCWYzMCwgMjQwKHIzKQ0KKwlzdGZkCWYzMSwgMjQ4KHIzKQkNCisJDQorCS8qIEFsc28gc2F2ZSB0aGUgRlBTQ1IuICovDQorCW1mZnMJZjMxDQorCXN0ZnMJZjMxLCAyNTYocjMpDQorDQorI2Vsc2UNCisNCisJLyogQnVmZmVyIGFkZHJlc3MgaXMgaW4gcjMuICBTYXZlIGVhY2ggZmxvcCByZWdpc3RlciBpbnRvIGFuIG9mZnNldCBmcm9tDQorCXRoaXMgYnVmZmVyIGFkZHJlc3MuICovDQorCXN0ZnMJZjAsIDAocjMpDQorCXN0ZnMJZjEsIDQocjMpDQorCXN0ZnMJZjIsIDgocjMpDQorCXN0ZnMJZjMsIDEyKHIzKQ0KKwlzdGZzCWY0LCAxNihyMykNCisJc3RmcwlmNSwgMjAocjMpDQorCXN0ZnMJZjYsIDI0KHIzKQ0KKwlzdGZzCWY3LCAyOChyMykNCisJc3RmcwlmOCwgMzIocjMpDQorCXN0ZnMJZjksIDM2KHIzKQ0KKwlzdGZzCWYxMCwgNDAocjMpDQorCXN0ZnMJZjExLCA0NChyMykNCisJc3RmcwlmMTIsIDQ4KHIzKQ0KKwlzdGZzCWYxMywgNTIocjMpDQorCXN0ZnMJZjE0LCA1NihyMykNCisJc3RmcwlmMTUsIDYwKHIzKQ0KKwlzdGZzCWYxNiwgNjQocjMpDQorCXN0ZnMJZjE3LCA2OChyMykNCisJc3RmcwlmMTgsIDcyKHIzKQ0KKwlzdGZzCWYxOSwgNzYocjMpDQorCXN0ZnMJZjIwLCA4MChyMykNCisJc3RmcwlmMjEsIDg0KHIzKQ0KKwlzdGZzCWYyMiwgODgocjMpDQorCXN0ZnMJZjIzLCA5MihyMykNCisJc3RmcwlmMjQsIDk2KHIzKQ0KKwlzdGZzCWYyNSwgMTAwKHIzKQ0KKwlzdGZzCWYyNiwgMTA0KHIzKQ0KKwlzdGZzCWYyNywgMTA4KHIzKQ0KKwlzdGZzCWYyOCwgMTEyKHIzKQ0KKwlzdGZzCWYyOSwgMTE2KHIzKQ0KKwlzdGZzCWYzMCwgMTIwKHIzKQ0KKwlzdGZzCWYzMSwgMTI0KHIzKQ0KKwkNCisJLyogQWxzbyBzYXZlIHRoZSBGUFNDUi4gKi8NCisJbWZmcwlmMzENCisJc3RmcwlmMzEsIDEyOChyMykNCisJDQorI2VuZGlmDQorDQorCWJscg0KKw0KKyNlbmRpZiAvKiBjb25maWdVU0VfRlBVLiAqLw0KKw0KKw0KKyNpZiBjb25maWdVU0VfRlBVID09IDENCisNCit2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnM6DQorDQorCS8qIEVuYWJsZSBBUFUgYW5kIG1hcmsgRlBVIGFzIHByZXNlbnQuICovDQorCW1mbXNyCXIwDQorCXhvcgkJcjMwLCByMzAsIHIzMA0KKwlvcmlzCXIzMCwgcjMwLCA1MTINCisJb3JpCQlyMzAsIHIzMCwgODE5Mg0KKwlvcgkJcjAsIHIwLCByMzANCisJbXRtc3IJcjANCisNCisjaWZkZWYgVVNFX0RQX0ZQVQ0KKw0KKwkvKiBCdWZmZXIgYWRkcmVzcyBpcyBpbiByMy4gIFJlc3RvcmUgZWFjaCBmbG9wIHJlZ2lzdGVyIGZyb20gYW4gb2Zmc2V0DQorCWludG8gdGhpcyBidWZmZXIuIA0KKwkNCisJRmlyc3QgdGhlIEZQU0NSLiAqLw0KKwlsZnMJCWYzMSwgMjU2KHIzKQ0KKwltdGZzZglmMzEsIDcNCisNCisJbGZkCQlmMCwgMChyMykNCisJbGZkCSAgICBmMSwgOChyMykNCisJbGZkCQlmMiwgMTYocjMpDQorCWxmZAkJZjMsIDI0KHIzKQ0KKwlsZmQJCWY0LCAzMihyMykNCisJbGZkCQlmNSwgNDAocjMpDQorCWxmZAkJZjYsIDQ4KHIzKQ0KKwlsZmQJCWY3LCA1NihyMykNCisJbGZkCQlmOCwgNjQocjMpDQorCWxmZAkJZjksIDcyKHIzKQ0KKwlsZmQJCWYxMCwgODAocjMpDQorCWxmZAkJZjExLCA4OChyMykNCisJbGZkCQlmMTIsIDk2KHIzKQ0KKwlsZmQJCWYxMywgMTA0KHIzKQ0KKwlsZmQJCWYxNCwgMTEyKHIzKQ0KKwlsZmQJCWYxNSwgMTIwKHIzKQ0KKwlsZmQJCWYxNiwgMTI4KHIzKQ0KKwlsZmQJCWYxNywgMTM2KHIzKQ0KKwlsZmQJCWYxOCwgMTQ0KHIzKQ0KKwlsZmQJCWYxOSwgMTUyKHIzKQ0KKwlsZmQJCWYyMCwgMTYwKHIzKQ0KKwlsZmQJCWYyMSwgMTY4KHIzKQ0KKwlsZmQJCWYyMiwgMTc2KHIzKQ0KKwlsZmQJCWYyMywgMTg0KHIzKQ0KKwlsZmQJCWYyNCwgMTkyKHIzKQ0KKwlsZmQJCWYyNSwgMjAwKHIzKQ0KKwlsZmQJCWYyNiwgMjA4KHIzKQ0KKwlsZmQJCWYyNywgMjE2KHIzKQ0KKwlsZmQJCWYyOCwgMjI0KHIzKQ0KKwlsZmQJCWYyOSwgMjMyKHIzKQ0KKwlsZmQJCWYzMCwgMjQwKHIzKQ0KKwlsZmQJCWYzMSwgMjQ4KHIzKQ0KKw0KKyNlbHNlDQorDQorCS8qIEJ1ZmZlciBhZGRyZXNzIGlzIGluIHIzLiAgUmVzdG9yZSBlYWNoIGZsb3AgcmVnaXN0ZXIgZnJvbSBhbiBvZmZzZXQNCisJaW50byB0aGlzIGJ1ZmZlci4gDQorCQ0KKwlGaXJzdCB0aGUgRlBTQ1IuICovDQorCWxmcwkJZjMxLCAxMjgocjMpDQorCW10ZnNmCWYzMSwgNw0KKw0KKwlsZnMJCWYwLCAwKHIzKQ0KKwlsZnMJCWYxLCA0KHIzKQ0KKwlsZnMJCWYyLCA4KHIzKQ0KKwlsZnMJCWYzLCAxMihyMykNCisJbGZzCQlmNCwgMTYocjMpDQorCWxmcwkJZjUsIDIwKHIzKQ0KKwlsZnMJCWY2LCAyNChyMykNCisJbGZzCQlmNywgMjgocjMpDQorCWxmcwkJZjgsIDMyKHIzKQ0KKwlsZnMJCWY5LCAzNihyMykNCisJbGZzCQlmMTAsIDQwKHIzKQ0KKwlsZnMJCWYxMSwgNDQocjMpDQorCWxmcwkJZjEyLCA0OChyMykNCisJbGZzCQlmMTMsIDUyKHIzKQ0KKwlsZnMJCWYxNCwgNTYocjMpDQorCWxmcwkJZjE1LCA2MChyMykNCisJbGZzCQlmMTYsIDY0KHIzKQ0KKwlsZnMJCWYxNywgNjgocjMpDQorCWxmcwkJZjE4LCA3MihyMykNCisJbGZzCQlmMTksIDc2KHIzKQ0KKwlsZnMJCWYyMCwgODAocjMpDQorCWxmcwkJZjIxLCA4NChyMykNCisJbGZzCQlmMjIsIDg4KHIzKQ0KKwlsZnMJCWYyMywgOTIocjMpDQorCWxmcwkJZjI0LCA5NihyMykNCisJbGZzCQlmMjUsIDEwMChyMykNCisJbGZzCQlmMjYsIDEwNChyMykNCisJbGZzCQlmMjcsIDEwOChyMykNCisJbGZzCQlmMjgsIDExMihyMykNCisJbGZzCQlmMjksIDExNihyMykNCisJbGZzCQlmMzAsIDEyMChyMykNCisJbGZzCQlmMzEsIDEyNChyMykNCisNCisjZW5kaWYNCisNCisJYmxyDQorDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9GUFUuICovDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDM2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2luY2x1ZGUgInhleGNlcHRpb25fbC5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0TE9ORw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUaGlzIHBvcnQgdXNlcyB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBmcm9tIHRoZSBUQ0IgcmF0aGVyIHRoYW4NCittYWludGFpbmluZyBhIHNlcGFyYXRlIHZhbHVlIGFuZCB0aGVuIHNhdmluZyB0aGlzIHZhbHVlIGluIHRoZSB0YXNrIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCCQkxDQorDQorLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJWEV4Y19tRW5hYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hY3Jvcy4gKi8NCit2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK3ZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgYXNtIHZvbGF0aWxlICggIlNDIFxuXHQgTk9QIiApDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKw0KKy8qIFRoZXJlIGFyZSAzMiAqIDMyYml0IGZsb2F0aW5nIHBvaW50IHJlZ2lldGVycywgcGx1cyB0aGUgRlBTQ1IgdG8gc2F2ZS4gKi8NCisjZGVmaW5lIHBvcnROT19GTE9QX1JFR0lTVEVSU19UT19TQVZFICAoIDMyICsgMSApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKy8qIFBvcnQgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucy4gKi8NCit2b2lkIHZQb3J0U2V0dXBJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICk7DQorcG9ydEJBU0VfVFlQRSB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1bnNpZ25lZCBwb3J0Q0hBUiB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Qb3NpeC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTYwMTMyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Qb3NpeC9wb3J0LmMKQEAgLTAsMCArMSwxMjAxIEBACisvKgorCUNvcHlyaWdodCAoQykgMjAxMSBDb3J2dXMgQ29yYXggZnJvbSBPcGVuUGlsb3Qub3JnCisJYmFzZWQgb24gbGludXggcG9ydCBmcm9tIFdpbGxpYW0gRGF2eQorCisJVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TLm9yZyBkaXN0cmlidXRpb24uCisKKwlGcmVlUlRPUy5vcmcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkCisJYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgbW9kaWZpZWQgYnkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4KKworCUZyZWVSVE9TLm9yZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAlidXQgV0lUSE9VVAorCUFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorCUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKwltb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworCXdpdGggRnJlZVJUT1Mub3JnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisJVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQS4KKworCUEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gZGlzdHJpYnV0ZSBhCisJY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TLm9yZyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8gcHJvdmlkZQorCXRoZSBzb3VyY2UgY29kZSBmb3IgYW55IHByb3ByaWV0YXJ5IGNvbXBvbmVudHMuICBTZWUgdGhlIGxpY2Vuc2luZyBzZWN0aW9uCisJb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIGZ1bGwgZGV0YWlscy4KKworCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJKiBHZXQgdGhlIEZyZWVSVE9TIGVCb29rISAgU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gICAgICAqCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJKiBUaGlzIGlzIGEgY29uY2lzZSwgc3RlcCBieSBzdGVwLCAnaGFuZHMgb24nIGd1aWRlIHRoYXQgZGVzY3JpYmVzIGJvdGggICAqCisJKiBnZW5lcmFsIG11bHRpdGFza2luZyBjb25jZXB0cyBhbmQgRnJlZVJUT1Mgc3BlY2lmaWNzLiBJdCBwcmVzZW50cyBhbmQgICAqCisJKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqCisJKiBGdWxsIHNvdXJjZSBjb2RlIGZvciBhbGwgdGhlIGV4YW1wbGVzIGlzIHByb3ZpZGVkIGluIGFuIGFjY29tcGFueWluZyAgICAqCisJKiAuemlwIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwkxIHRhYiA9PSA0IHNwYWNlcyEKKworCVBsZWFzZSBlbnN1cmUgdG8gcmVhZCB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVsZXZhbnQgcG9ydCBzZWN0aW9ucyBvZiB0aGUKKwlvbmxpbmUgZG9jdW1lbnRhdGlvbi4KKworCWh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZAorCWNvbnRhY3QgZGV0YWlscy4KKworCWh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5CisJY3JpdGljYWwgc3lzdGVtcy4KKworCWh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywKKwlsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLgorKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBvc2l4IHBvcnQuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKiBEZXNjcmlwdGlvbiBvZiBzY2hlZHVsZXI6CisKK1RoaXMgc2NoZWR1bGVyIGlzIGJhc2VkIG9uIHBvc2l4IHNpZ25hbHMgdG8gaGFsdCBvciBwcmVlbXB0IHRhc2tzLCBhbmQgb24KK3B0aHJlYWQgY29uZGl0aW9ucyB0byByZXN1bWUgdGhlbS4KKworRWFjaCBGcmVlUlRPUyB0aHJlYWQgaXMgY3JlYXRlZCBhcyBhIHBvc2l4IHRocmVhZCwgd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvCitTSUdVU1IxIChTSUdfU1VTUEVORCkgc2lnbmFscy4KKworU3VzcGVuc2lvbiBvZiBhIHRocmVhZCBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIHRocmVhZHMgc3RhdGUgdG8KKyJZSUVMRElORy9QUkVFTVBUSU5HIiwgdGhlbiBzaWduYWxpbmcgdGhlIHRocmVhZCB1bnRpbCB0aGUgc2lnbmFsIGhhbmRsZXIKK2NoYW5nZXMgdGhhdCBzdGF0ZSB0byAiU0xFRVBJTkciLCB0aHVzIGFja25vd2xlZGdpbmcgdGhlIHN1c3BlbmQuCisKK1RoZSB0aHJlYWQgd2lsbCB0aGVuIHdhaXQgd2l0aGluIHRoZSBzaWduYWwgaGFuZGxlciBmb3IgYSB0aHJlYWQgc3BlY2lmaWMKK2NvbmRpdGlvbiB0byBiZSBzZXQsIHdoaWNoIGFsbG93cyBpdCB0byByZXN1bWUgb3BlcmF0aW9uLCBzZXR0aW5nIGl0cyBzdGF0ZSB0bworIlJVTk5JTkciCisKK1RoZSBydW5uaW5nIHRocmVhZCBhbHNvIGFsd2F5cyBob2xkcyBhIG11dGV4ICh4UnVubmluZ1RocmVhZE11dGV4KSB3aGljaCBpcworZ2l2ZW4gdXAgb25seSB3aGVuIHRoZSB0aHJlYWQgc3VzcGVuZHMuCisKK09uIHRocmVhZCBjcmVhdGlvbiB0aGUgbmV3IHRocmVhZCB3aWxsIGFjcXVpcmUgdGhpcyBtdXRleCwgdGhlbiB5aWVsZC4KKworQm90aCBwcmVlbXB0aW9uIGFuZCB5aWVsZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSwgc2VuZGluZyBhCitTSUdfU1VTUEVORCB0byB0aGUgcHJlZW1wdGVkIHRocmVhZCByZXNwZWN0aXZlbHkgdG8gaXRzZWxmLCBob3dldmVyIGRpZmZlcmVudAorc3luY2hyb25pemF0aW9uIHNhZmVndWFyZHMgYXBwbHkgZGVwZW5kaW5nIGlmIGEgdGhyZWFkIHN1c3BlbmRzIGl0c2VsZiBvciBpcworc3VzcGVuZGVkIHJlbW90ZWx5CisKK1ByZWVtcHRpb24gaXMgZG9uZSBieSB0aGUgbWFpbiBzY2hlZHVsZXIgdGhyZWFkIHdoaWNoIGF0dGVtcHRzIHRvIHJ1biBhIHRpY2sKK2hhbmRsZXIgYXQgYWNjdXJhdGUgaW50ZXJ2YWxzIHVzaW5nIG5hbm9zbGVlcCBhbmQgZ2V0dGltZW9mZGF5LCB3aGljaCBhbGxvd3MKK21vcmUgYWNjdXJhdGUgaGlnaCBmcmVxdWVuY3kgdGlja3MgdGhhbiBhIHRpbWVyIHNpZ25hbCBoYW5kbGVyLgorCitBbGwgcHVibGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBvcnQgYXJlIHByb3RlY3RlZCBieSBhIHNhZmVndWFyZCBtdXRleCB3aGljaAorYXNzdXJlcyBwcmlvcml0eSBhY2Nlc3Mgb24gYWxsIGRhdGEgb2JqZWN0cworCitUaGlzIGFwcHJvYWNoIGlzIHRlc3RlZCBhbmQgd29ya3MgYm90aCBvbiBMaW51eCBhbmQgQlNEIHN0eWxlIFVuaXggKE1BQyBPUyBYKQorCisqLworCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovCisjaW5jbHVkZSAiRnJlZVJUT1MuaCIKKyNpbmNsdWRlICJ0YXNrLmgiCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNQVhfTlVNQkVSX09GX1RBU0tTIAkJKCBfUE9TSVhfVEhSRUFEX1RIUkVBRFNfTUFYICkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBPUlRfUFJJTlQoLi4uKSBmcHJpbnRmKHN0ZGVycixfX1ZBX0FSR1NfXykKKyNkZWZpbmUgUE9SVF9BU1NFUlQoYXNzZXJ0aW9uKSAgICBpZiAoICEoYXNzZXJ0aW9uKSApIHsgUE9SVF9QUklOVCgiQXNzZXJ0aW9uIGZhaWxlZCBpbiAlczolaSAgIiAjYXNzZXJ0aW9uICJcbiIsX19GSUxFX18sX19MSU5FX18pOyBpbnQgdm9sYXRpbGUgYXNzZmFpbD0wOyBhc3NmYWlsPWFzc2ZhaWwvYXNzZmFpbDsgfQorCisjaWZkZWYgREVCVUdfU0NIRURVTEVSCisjZGVmaW5lIFBPUlRfTE9DSyhtdXRleCkgcHJpbnRmKCJMb2NraW5nICVsbHggYnkgJWxseCBhdCAlZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykmbXV0ZXgsICh1bnNpZ25lZCBsb25nIGxvbmcpcHRocmVhZF9zZWxmKCksIF9fTElORV9fKTtQT1JUX0FTU0VSVCggMCA9PSBwdGhyZWFkX211dGV4X2xvY2soJihtdXRleCkpICk7IHByaW50ZigiTG9ja2VkICVsbHggYnkgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykmbXV0ZXgsICh1bnNpZ25lZCBsb25nIGxvbmcpcHRocmVhZF9zZWxmKCkpOworI2RlZmluZSBQT1JUX1RSWUxPQ0sobXV0ZXgpIHByaW50ZigiVHJ5IExvY2tpbmcgJWxseCBieSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSZtdXRleCwgKHVuc2lnbmVkIGxvbmcgbG9uZylwdGhyZWFkX3NlbGYoKSk7cHRocmVhZF9tdXRleF90cnlsb2NrKCYobXV0ZXgpKTsgcHJpbnRmKCJMb2NrZWQgJWxseCBieSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSZtdXRleCwgKHVuc2lnbmVkIGxvbmcgbG9uZylwdGhyZWFkX3NlbGYoKSk7CisjZGVmaW5lIFBPUlRfVU5MT0NLKG11dGV4KSBwcmludGYoIlVubG9ja2luZyAlbGx4IGJ5ICVsbHggYXQgJWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpJm11dGV4LCAodW5zaWduZWQgbG9uZyBsb25nKXB0aHJlYWRfc2VsZigpLCBfX0xJTkVfXyk7IFBPUlRfQVNTRVJUKCAwID09IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYobXV0ZXgpKSApOyBwcmludGYoIlVubG9ja2VkICVsbHggYnkgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykmbXV0ZXgsICh1bnNpZ25lZCBsb25nIGxvbmcpcHRocmVhZF9zZWxmKCkpOworI2Vsc2UKKyNkZWZpbmUgUE9SVF9MT0NLKG11dGV4KSBQT1JUX0FTU0VSVCggMCA9PSBwdGhyZWFkX211dGV4X2xvY2soJihtdXRleCkpICk7CisjZGVmaW5lIFBPUlRfVFJZTE9DSyhtdXRleCkgcHRocmVhZF9tdXRleF90cnlsb2NrKCYobXV0ZXgpKTsKKyNkZWZpbmUgUE9SVF9VTkxPQ0sobXV0ZXgpIFBPUlRfQVNTRVJUKCAwID09IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYobXV0ZXgpKSApOworI2VuZGlmCisKKy8qIFBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBwdGhyZWFkLiAqLwordHlwZWRlZiBzdHJ1Y3QgWFBBUkFNUworeworCXBkVEFTS19DT0RFIHB4Q29kZTsKKwl2b2lkICpwdlBhcmFtczsKK30geFBhcmFtczsKKworLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIGNyaXRpY2FsIG5lc3RpbmcgdmFyaWFibGUuICovCit0eXBlZGVmIHN0cnVjdCBUSFJFQURfU1VTUEVOU0lPTlMKK3sKKwlwdGhyZWFkX3QgaFRocmVhZDsKKwl4VGFza0hhbmRsZSBoVGFzazsKKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOworCXB0aHJlYWRfbXV0ZXhfdCB0aHJlYWRTbGVlcE11dGV4OworCXB0aHJlYWRfY29uZF90IHRocmVhZFNsZWVwQ29uZDsKKyAgICB2b2xhdGlsZSBlbnVtIHtUSFJFQURfU0xFRVBJTkcsVEhSRUFEX1JVTk5JTkcsVEhSRUFEX1NUQVJUSU5HLFRIUkVBRF9ZSUVMRElORyxUSFJFQURfUFJFRU1QVElORyxUSFJFQURfV0FLSU5HfSB0aHJlYWRTdGF0dXM7Cit9IHhUaHJlYWRTdGF0ZTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOZWVkZWQgdG8ga2VlcCB0cmFjayBvZiBjcml0aWNhbCBzZWN0aW9uIGRlcHRoIGJlZm9yZSBzY2hlZHVsZXIgZ290IHN0YXJ0ZWQgKi8KK3N0YXRpYyB4VGhyZWFkU3RhdGUgeER1bW15VGhyZWFkID0geyAudXhDcml0aWNhbE5lc3Rpbmc9MCwgLnRocmVhZFN0YXR1cz1USFJFQURfUlVOTklORyB9OworCitzdGF0aWMgeFRocmVhZFN0YXRlICpweFRocmVhZHMgPSBOVUxMOworc3RhdGljIHB0aHJlYWRfb25jZV90IGhTaWdTZXR1cFRocmVhZCA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIHB0aHJlYWRfYXR0cl90IHhUaHJlYWRBdHRyaWJ1dGVzOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB4UnVubmluZ1RocmVhZE11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgeFlpZWxkaW5nVGhyZWFkTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB4UmVzdW1pbmdUaHJlYWRNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IHhHdWFyZE11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9sYXRpbGUgcG9ydEJBU0VfVFlQRSB4U2NoZWR1bGVyRW5kID0gcGRGQUxTRTsKK3N0YXRpYyB2b2xhdGlsZSBwb3J0QkFTRV9UWVBFIHhTY2hlZHVsZXJTdGFydGVkID0gcGRGQUxTRTsKK3N0YXRpYyB2b2xhdGlsZSBwb3J0QkFTRV9UWVBFIHhJbnRlcnJ1cHRzRW5hYmxlZCA9IHBkRkFMU0U7CitzdGF0aWMgdm9sYXRpbGUgcG9ydEJBU0VfVFlQRSB4U2NoZWR1bGVyTmVzdGluZyA9IDA7CitzdGF0aWMgdm9sYXRpbGUgcG9ydEJBU0VfVFlQRSB4UGVuZFlpZWxkID0gcGRGQUxTRTsKK3N0YXRpYyB2b2xhdGlsZSBwb3J0TE9ORyBsSW5kZXhPZkxhc3RBZGRlZFRhc2sgPSAwOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgKnBydldhaXRGb3JTdGFydCggdm9pZCAqIHB2UGFyYW1zICk7CitzdGF0aWMgdm9pZCBwcnZTdXNwZW5kU2lnbmFsSGFuZGxlcihpbnQgc2lnKTsKK3N0YXRpYyB2b2lkIHBydlNldHVwU2lnbmFsc0FuZFNjaGVkdWxlclBvbGljeSggdm9pZCApOworc3RhdGljIHZvaWQgcHJ2UmVzdW1lVGhyZWFkKCB4VGhyZWFkU3RhdGUqIHhUaHJlYWRJZCApOworc3RhdGljIHhUaHJlYWRTdGF0ZSogcHJ2R2V0VGhyZWFkSGFuZGxlKCB4VGFza0hhbmRsZSBoVGFzayApOworc3RhdGljIHhUaHJlYWRTdGF0ZSogcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQoIHB0aHJlYWRfdCBoVGhyZWFkICk7CitzdGF0aWMgcG9ydExPTkcgcHJ2R2V0RnJlZVRocmVhZFN0YXRlKCB2b2lkICk7CitzdGF0aWMgdm9pZCBwcnZEZWxldGVUaHJlYWQoIHZvaWQgKnhUaHJlYWRJZCApOworc3RhdGljIHZvaWQgcHJ2UG9ydFlpZWxkKCB2b2lkICk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4KKyAqLwordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7Cit2b2lkIHZQb3J0U3lzdGVtVGlja0hhbmRsZXIoIHZvaWQgKTsKKworLyoKKyAqIFN0YXJ0IGZpcnN0IHRhc2sgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIGlzb2xhdGlvbi4KKyAqLwordm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBpbmxpbmUgbWFjcm8gZnVuY3Rpb25zCisgKiAoZWFzaWVydG8gZGVidWcgdGhhbiBtYWNyb3MpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX0VOVEVSKCB2b2lkICkgeworICAgIAorICAgIHhUaHJlYWRTdGF0ZSAqc2VsZlRocmVhZFN0YXRlID0gcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpOworCXdoaWxlKCBzZWxmVGhyZWFkU3RhdGUgJiYgc2VsZlRocmVhZFN0YXRlLT50aHJlYWRTdGF0dXMhPVRIUkVBRF9SVU5OSU5HKSBzY2hlZF95aWVsZCgpOworICAgIAorICAgIC8vIEJsb2NrIFNVU1BFTkQgZnJvbSBpbnRlcnJ1cHRpbmcKKwlzaWdzZXRfdCB4U2lnbmFsVG9CbG9jazsKKwlzaWdlbXB0eXNldCgmeFNpZ25hbFRvQmxvY2spOworCXNpZ2FkZHNldCgmeFNpZ25hbFRvQmxvY2ssU0lHX1NVU1BFTkQpOworCSh2b2lkKXB0aHJlYWRfc2lnbWFzayhTSUdfQkxPQ0ssICZ4U2lnbmFsVG9CbG9jaywgTlVMTCk7CisgICAgCisgICAgd2hpbGUgKDEpCisgICAgeworI2lmZGVmIERFQlVHX1NDSEVEVUxFUgorICAgICAgICBwcmludGYoIkxvY2tpbmcgeEd1YXJkTXV0ZXggYnkgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwdGhyZWFkX3NlbGYoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmKHhHdWFyZE11dGV4KSkgPT0gMCkKKyAgICAgICAgeworI2lmZGVmIERFQlVHX1NDSEVEVUxFUgorICAgICAgICAgICAgcHJpbnRmKCJMb2NrZWQgeEd1YXJkTXV0ZXggYnkgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwdGhyZWFkX3NlbGYoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBbGxvdyBpdCB0byBpbnRlcnJ1cHQgYWdhaW4KKyAgICAgICAgKHZvaWQpcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmeFNpZ25hbFRvQmxvY2ssIE5VTEwpOworICAgICAgICAKKyAgICAgICAgLy8gWWllbGQKKyAgICAgICAgc2NoZWRfeWllbGQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJsb2NrIFNVU1BFTkQgZnJvbSBpbnRlcnJ1cHRpbmcKKyAgICAgICAgKHZvaWQpcHRocmVhZF9zaWdtYXNrKFNJR19CTE9DSywgJnhTaWduYWxUb0Jsb2NrLCBOVUxMKTsKKyAgICB9CisgICAgCisgICAgLy8gQWxsb3cgaXQgdG8gaW50ZXJydXB0IGFnYWluCisJKHZvaWQpcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmeFNpZ25hbFRvQmxvY2ssIE5VTEwpOworICAgIAorCVBPUlRfQVNTRVJUKCB4U2NoZWR1bGVyU3RhcnRlZD8oIChzZWxmVGhyZWFkU3RhdGU9PU5VTEwpIHx8IChzZWxmVGhyZWFkU3RhdGU9PXBydkdldFRocmVhZEhhbmRsZSh4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkpKSApOnBkVFJVRSApCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX0xFQVZFKCB2b2lkICkgeworICAgIHhUaHJlYWRTdGF0ZSAqc2VsZlRocmVhZFN0YXRlID0gcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpOworCVBPUlRfQVNTRVJUKCB4U2NoZWR1bGVyU3RhcnRlZD8oIChzZWxmVGhyZWFkU3RhdGU9PU5VTEwpIHx8IChzZWxmVGhyZWFkU3RhdGU9PXBydkdldFRocmVhZEhhbmRsZSh4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkpKSApOnBkVFJVRSApOworCVBPUlRfQVNTRVJUKCBzZWxmVGhyZWFkU3RhdGUgPT0gTlVMTCB8fCBzZWxmVGhyZWFkU3RhdGUtPnRocmVhZFN0YXR1cz09VEhSRUFEX1JVTk5JTkcgKTsKKwlQT1JUX1VOTE9DSyggeEd1YXJkTXV0ZXggKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyB0aHJlYWQuCisgKi8KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkKK3sKKwkvKiBTaG91bGQgYWN0dWFsbHkga2VlcCB0aGlzIHN0cnVjdCBvbiB0aGUgc3RhY2suICovCisJeFBhcmFtcyAqcHhUaGlzVGhyZWFkUGFyYW1zID0gcHZQb3J0TWFsbG9jKCBzaXplb2YoIHhQYXJhbXMgKSApOworCQorCS8qIEluaXRpYWxpemUgc2NoZWR1bGVyIGR1cmluZyBmaXJzdCBjYWxsICovCisJKHZvaWQpcHRocmVhZF9vbmNlKCAmaFNpZ1NldHVwVGhyZWFkLCBwcnZTZXR1cFNpZ25hbHNBbmRTY2hlZHVsZXJQb2xpY3kgKTsKKworCS8qKgorCSAqIHBvcnQgZW50ZXIgbmVlZHMgdG8gYmUgZGVsYXllZCBzaW5jZSBwdlBvcnRNYWxsb2MoKSBhbmQKKwkgKiBTZXR1cFNpZ25hbHNBbmRTY2hlZHVsZXJQb2xpY3koKSBib3RoIGNhbGwgY3JpdGljYWwgc2VjdGlvbiBjb2RlCisJICovCisJUE9SVF9FTlRFUigpOworCisJLyogTm8gbmVlZCB0byBqb2luIHRoZSB0aHJlYWRzLiAqLworCXB0aHJlYWRfYXR0cl9pbml0KCAmeFRocmVhZEF0dHJpYnV0ZXMgKTsKKwlwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoICZ4VGhyZWFkQXR0cmlidXRlcywgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQgKTsKKworCS8qIEFkZCB0aGUgdGFzayBwYXJhbWV0ZXJzLiAqLworCXB4VGhpc1RocmVhZFBhcmFtcy0+cHhDb2RlID0gcHhDb2RlOworCXB4VGhpc1RocmVhZFBhcmFtcy0+cHZQYXJhbXMgPSBwdlBhcmFtZXRlcnM7CisKKwlsSW5kZXhPZkxhc3RBZGRlZFRhc2sgPSBwcnZHZXRGcmVlVGhyZWFkU3RhdGUoKTsKKwkKKwlQT1JUX0xPQ0soIHhZaWVsZGluZ1RocmVhZE11dGV4ICk7CisKKwlweFRocmVhZHNbIGxJbmRleE9mTGFzdEFkZGVkVGFzayBdLnRocmVhZFN0YXR1cyA9IFRIUkVBRF9TVEFSVElORzsKKwlweFRocmVhZHNbIGxJbmRleE9mTGFzdEFkZGVkVGFzayBdLnV4Q3JpdGljYWxOZXN0aW5nID0gMDsKKworI2lmZGVmIERFQlVHX1NDSEVEVUxFUgorICAgIHByaW50ZigiQmxlaCBTZXQgdGhyZWFkU3RhdHVzID0gJWQgZm9yICVsbHhcbiIsIHB4VGhyZWFkc1sgbEluZGV4T2ZMYXN0QWRkZWRUYXNrIF0udGhyZWFkU3RhdHVzLCAodW5zaWduZWQgbG9uZyBsb25nKSZweFRocmVhZHNbIGxJbmRleE9mTGFzdEFkZGVkVGFzayBdKTsKKyNlbmRpZgorICAgIAorCS8qIGNyZWF0ZSB0aGUgdGhlYWQgKi8KKwlQT1JUX0FTU0VSVCggMCA9PSBwdGhyZWFkX2NyZWF0ZSggJiggcHhUaHJlYWRzWyBsSW5kZXhPZkxhc3RBZGRlZFRhc2sgXS5oVGhyZWFkICksICZ4VGhyZWFkQXR0cmlidXRlcywgcHJ2V2FpdEZvclN0YXJ0LCAodm9pZCAqKXB4VGhpc1RocmVhZFBhcmFtcyApICk7CisKKwkvKiBMZXQgdGhlIHRhc2sgcnVuIGEgYml0IGFuZCB3YWl0IHVudGlsIGl0IHN1c3BlbmRzLiAqLworCXdoaWxlICggcHhUaHJlYWRzWyBsSW5kZXhPZkxhc3RBZGRlZFRhc2sgXS50aHJlYWRTdGF0dXMgPT0gVEhSRUFEX1NUQVJUSU5HICkgc2NoZWRfeWllbGQoKTsKKworCS8qIHRoaXMgZW5zdXJlcyB0aGUgc2xlZXBpbmcgdGhyZWFkIHJlYWNoZWQgZGVlcCBzbGVlcCAoYW5kIG5vdCBtb3JlKSAqLworCVBPUlRfVU5MT0NLKCB4WWllbGRpbmdUaHJlYWRNdXRleCApOworCisJUE9SVF9MRUFWRSgpOworCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIEluaXRpYWxseSB0aGUgc2NoZWR1bGVycyBtYWluIHRocmVhZCBob2xkcyB0aGUgcnVubmluZyB0aHJlYWQgbXV0ZXguCisgKiBpdCBuZWVkcyB0byBiZSBnaXZlbiB1cCwgdG8gYWxsb3cgdGhlIGZpcnN0IHJ1bm5pbmcgdGFzayB0byBleGVjdXRlCisgKi8KK3ZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApCit7CisJLyogTWFyayBzY2hlZHVsZXIgYXMgc3RhcnRlZCAqLworCXhTY2hlZHVsZXJTdGFydGVkID0gcGRUUlVFOworCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovCisJcHJ2UmVzdW1lVGhyZWFkKCBwcnZHZXRUaHJlYWRIYW5kbGUoIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApICk7CisKKwkvKiBHaXZlIHVwIHJ1bm5pbmcgdGhyZWFkIGhhbmRsZSAqLworCVBPUlRfVU5MT0NLKHhSdW5uaW5nVGhyZWFkTXV0ZXgpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogQWZ0ZXIgdGFza3MgaGF2ZSBiZWVuIHNldCB1cCB0aGUgbWFpbiB0aHJlYWQgZ29lcyBpbnRvIGEgc2xlZXBpbmcgbG9vcCwgYnV0CisgKiBhbGxvd3MgdG8gYmUgaW50ZXJydXB0ZWQgYnkgdGltZXIgdGlja3MuCisgKi8KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApCit7CisJc2lnc2V0X3QgeFNpZ25hbFRvQmxvY2s7CisKKyNpZmRlZiBERUJVR19TQ0hFRFVMRVIKKyAgICBwcmludGYoInhHdWFyZE11dGV4ID0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykmeEd1YXJkTXV0ZXgpOworI2VuZGlmCisgICAgCisJLyoqCisJICogbm90ZTogTk8gUE9SVF9FTlRFUiAhIC0gdGhpcyBpcyB0aGUgc3VwZXJ2aXNvciB0aHJlYWQgd2hpY2ggcnVucyBvdXRzaWRlCisJICogb2YgdGhlIHNjaGVkdWxlcnMgY29udGV4dAorCSAqLworCisJLyogZG8gbm90IHJlc3BvbmQgdG8gU1VTUEVORCBzaWduYWwgKGJ1dCBhbGwgb3RoZXJzKSAqLworCXNpZ2VtcHR5c2V0KCAmeFNpZ25hbFRvQmxvY2sgKTsKKwkodm9pZClwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmeFNpZ25hbFRvQmxvY2ssIE5VTEwgKTsKKwlzaWdlbXB0eXNldCgmeFNpZ25hbFRvQmxvY2spOworCXNpZ2FkZHNldCgmeFNpZ25hbFRvQmxvY2ssU0lHX1NVU1BFTkQpOworCSh2b2lkKXB0aHJlYWRfc2lnbWFzayhTSUdfQkxPQ0ssICZ4U2lnbmFsVG9CbG9jaywgTlVMTCk7CisKKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gVGhpcyBnaXZlcyB1cCB0aGUgUnVubmluZ1RocmVhZE11dGV4Ki8KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7CisKKwkvKioKKwkgKiBNYWluIHNjaGVkdWxpbmcgbG9vcC4gQ2FsbCB0aGUgdGljayBoYW5kbGVyIGV2ZXJ5CisJICogcG9ydFRJQ0tfUkFURV9NSUNST1NFQ09ORFMKKwkgKi8KKwlwb3J0VGlja1R5cGUgc2xlZXBUaW1lVVMgPSBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUzsKKyAgICBwb3J0VGlja1R5cGUgYWN0dWFsU2xlZXBUaW1lOworCXN0cnVjdCB0aW1ldmFsIGxhc3RUaW1lLGN1cnJlbnRUaW1lOworCWdldHRpbWVvZmRheSggJmxhc3RUaW1lLCBOVUxMICk7CisJc3RydWN0IHRpbWVzcGVjIHdhaXQ7CisJCisJd2hpbGUgKCBwZFRSVUUgIT0geFNjaGVkdWxlckVuZCApCisJeworCQkvKiB3YWl0IGZvciB0aGUgc3BlY2lmaWVkIHdhaXQgdGltZSAqLworCQl3YWl0LnR2X3NlYyA9IHNsZWVwVGltZVVTIC8gMTAwMDAwMDsKKwkJd2FpdC50dl9uc2VjID0gMTAwMCAqICggc2xlZXBUaW1lVVMgJSAxMDAwMDAwICk7CisJCW5hbm9zbGVlcCggJndhaXQsIE5VTEwgKTsKKworCQkvKiBjaGVjayB0aGUgdGltZSAqLworCQlnZXR0aW1lb2ZkYXkoICZjdXJyZW50VGltZSwgTlVMTCk7CisJCWFjdHVhbFNsZWVwVGltZSA9IDEwMDAwMDAgKiAoIGN1cnJlbnRUaW1lLnR2X3NlYyAtIGxhc3RUaW1lLnR2X3NlYyApICsgKCBjdXJyZW50VGltZS50dl91c2VjIC0gbGFzdFRpbWUudHZfdXNlYyApOworCisJCS8qIG9ubHkgaGl0IHRoZSB0aWNrIGlmIHdlIHNsZXB0IGF0IGxlYXN0IGhhbGYgdGhlIHBlcmlvZCAqLworCQlpZiAoIGFjdHVhbFNsZWVwVGltZSA+PSBzbGVlcFRpbWVVUy8yICkgeworCisJCQl2UG9ydFN5c3RlbVRpY2tIYW5kbGVyKCk7CisKKwkJCS8qIGNoZWNrIHRoZSB0aW1lIGFnYWluICovCisJCQlnZXR0aW1lb2ZkYXkoICZjdXJyZW50VGltZSwgTlVMTCk7CisJCQlhY3R1YWxTbGVlcFRpbWUgPSAxMDAwMDAwICogKCBjdXJyZW50VGltZS50dl9zZWMgLSBsYXN0VGltZS50dl9zZWMgKSArICggY3VycmVudFRpbWUudHZfdXNlYyAtIGxhc3RUaW1lLnR2X3VzZWMgKTsKKworCQkJLyogc2xlZXAgdW50aWwgdGhlIG5leHQgdGljayBpcyBkdWUgKi8KKwkJCXNsZWVwVGltZVVTICs9IHBvcnRUSUNLX1JBVEVfTUlDUk9TRUNPTkRTOworCQl9CisKKwkJLyogcmVkdWNlIHJlbWFpbmluZyBzbGVlcCB0aW1lIGJ5IHRoZSBzbGVwdCB0aW1lICovCisJCXNsZWVwVGltZVVTIC09IGFjdHVhbFNsZWVwVGltZTsKKwkJbGFzdFRpbWUgPSBjdXJyZW50VGltZTsKKworCQkvKiBzYWZldHkgY2hlY2tzICovCisJCWlmIChzbGVlcFRpbWVVUyA8PTAgfHwgc2xlZXBUaW1lVVMgPj0gMyAqIHBvcnRUSUNLX1JBVEVfTUlDUk9TRUNPTkRTKSBzbGVlcFRpbWVVUyA9IHBvcnRUSUNLX1JBVEVfTUlDUk9TRUNPTkRTOworCisJfQorCisJUE9SVF9QUklOVCggIkNsZWFuaW5nIFVwLCBFeGl0aW5nLlxuIiApOworCS8qIENsZWFudXAgdGhlIG11dGV4ZXMgKi8KKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koICZ4UnVubmluZ1RocmVhZE11dGV4ICk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCAmeFlpZWxkaW5nVGhyZWFkTXV0ZXggKTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koICZ4R3VhcmRNdXRleCApOworCXZQb3J0RnJlZSggKHZvaWQgKilweFRocmVhZHMgKTsKKworCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovCisJcmV0dXJuIDA7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBxdWlja2x5IGNsZWFuIHVwIGFsbCBydW5uaW5nIHRocmVhZHMsIHdpdGhvdXQgYXNraW5nIHRoZW0gZmlyc3QKKyAqLwordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApCit7Citwb3J0QkFTRV9UWVBFIHhOdW1iZXJPZlRocmVhZHM7CisJZm9yICggeE51bWJlck9mVGhyZWFkcyA9IDA7IHhOdW1iZXJPZlRocmVhZHMgPCBNQVhfTlVNQkVSX09GX1RBU0tTOyB4TnVtYmVyT2ZUaHJlYWRzKysgKQorCXsKKwkJaWYgKCAoIHB0aHJlYWRfdCApTlVMTCAhPSBweFRocmVhZHNbIHhOdW1iZXJPZlRocmVhZHMgXS5oVGhyZWFkICkKKwkJeworCQkJLyogS2lsbCBhbGwgb2YgdGhlIHRocmVhZHMsIHRoZXkgYXJlIGluIHRoZSBkZXRhY2hlZCBzdGF0ZS4gKi8KKwkJCXB0aHJlYWRfY2FuY2VsKCBweFRocmVhZHNbIHhOdW1iZXJPZlRocmVhZHMgXS5oVGhyZWFkICk7CisJCX0KKwl9CisKKwkvKiBTaWduYWwgdGhlIHNjaGVkdWxlciB0byBleGl0IGl0cyBsb29wLiAqLworCXhTY2hlZHVsZXJFbmQgPSBwZFRSVUU7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB3ZSBtdXN0IGFzc3VtZSB0aGlzIG9uZSBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzY2hlZHVsZXJzIGNvbnRleHQKKyAqIChJU1Incywgc2lnbmFsIGhhbmRsZXJzLCBvciBub24tZnJlZXJ0b3MgdGhyZWFkcykKKyAqIHdlIGNhbm5vdCBzYWZlbHkgYXNzdW1lIG11dHVhbCBleGNsdXNpb24KKyAqLwordm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApCit7CisJeFBlbmRZaWVsZCA9IHBkVFJVRTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiAocHVibGljKQorICovCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApCit7CisJUE9SVF9FTlRFUigpOworCXhJbnRlcnJ1cHRzRW5hYmxlZCA9IHBkRkFMU0U7CisJcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpLT51eENyaXRpY2FsTmVzdGluZysrOworCVBPUlRfTEVBVkUoKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIGxlYXZlIGEgY3JpdGljYWwgc2VjdGlvbiAocHVibGljKQorICovCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkKK3sKKwlQT1JUX0VOVEVSKCk7CisKKwkvKiBDaGVjayBmb3IgdW5tYXRjaGVkIGV4aXRzLiAqLworCVBPUlRfQVNTRVJUKCBwcnZHZXRUaHJlYWRIYW5kbGVCeVRocmVhZChwdGhyZWFkX3NlbGYoKSktPnV4Q3JpdGljYWxOZXN0aW5nID4gMCApOworCWlmICggcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpLT51eENyaXRpY2FsTmVzdGluZyA+IDAgKQorCXsKKwkJcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpLT51eENyaXRpY2FsTmVzdGluZy0tOworCX0KKworCS8qIElmIHdlIGhhdmUgcmVhY2hlZCAwIHRoZW4gcmUtZW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLworCWlmKCBwcnZHZXRUaHJlYWRIYW5kbGVCeVRocmVhZChwdGhyZWFkX3NlbGYoKSktPnV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQorCXsKKwkJLyogSGF2ZSB3ZSBtaXNzZWQgdGlja3M/IFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgcGVuZGluZyBhbiBpbnRlcnJ1cHQuICovCisJCWlmICggcGRUUlVFID09IHhQZW5kWWllbGQgKQorCQl7CisJCQl4UGVuZFlpZWxkID0gcGRGQUxTRTsKKwkJCXBydlBvcnRZaWVsZCgpOworCQl9CisKKwkJeEludGVycnVwdHNFbmFibGVkID0gcGRUUlVFOworCisJfQorCisJUE9SVF9MRUFWRSgpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogY29kZSB0byBzZWxmLXlpZWxkIGEgdGFzaworICogKHdpdGhvdXQgdGhlIG11dGV4IGVuY2Fwc3VsYXRpb24pCisgKiBmb3IgaW50ZXJuYWwgdXNlCisgKi8KK3ZvaWQgcHJ2UG9ydFlpZWxkKCB2b2lkICkKK3sKKwl4VGhyZWFkU3RhdGUgKnhUYXNrVG9TdXNwZW5kLCAqeFRhc2tUb1Jlc3VtZTsKKworCS8qIHRpbWVyIGhhbmRsZXIgc2hvdWxkIE5PVCBnZXQgaW4gb3VyIHdheSAoanVzdCBpbiBjYXNlKSAqLworCXhJbnRlcnJ1cHRzRW5hYmxlZCA9IHBkRkFMU0U7CisKKwkvKiBzdXNwZW5kIHRoZSBjdXJyZW50IHRhc2sgKi8KKwl4VGFza1RvU3VzcGVuZCA9IHBydkdldFRocmVhZEhhbmRsZUJ5VGhyZWFkKCBwdGhyZWFkX3NlbGYoKSApOworCisJLyoqCisJICogbWFrZSBzdXJlIG5vdCB0byBzdXNwZW5kIHRocmVhZHMgdGhhdCBhcmUgYWxyZWFkeSB0cnlpbmcgdG8gZG8gc28KKwkgKi8KKwlQT1JUX0FTU0VSVCggeFRhc2tUb1N1c3BlbmQtPnRocmVhZFN0YXR1cyA9PSBUSFJFQURfUlVOTklORyApOworCisJLyoqCisJICogRnJlZVJUT1Mgc3dpdGNoIGNvbnRleHQKKwkgKi8KKwl2VGFza1N3aXRjaENvbnRleHQoKTsKKworCS8qKgorCSAqIGZpbmQgb3V0IHdoaWNoIHRhc2sgdG8gcmVzdW1lCisJICovCisJeFRhc2tUb1Jlc3VtZSA9IHBydkdldFRocmVhZEhhbmRsZSggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CisJaWYgKCB4VGFza1RvU3VzcGVuZCAhPSB4VGFza1RvUmVzdW1lICkKKwl7CisJCS8qIFJlc3VtZSB0aGUgb3RoZXIgdGhyZWFkIGZpcnN0ICovCisJCXBydlJlc3VtZVRocmVhZCggeFRhc2tUb1Jlc3VtZSApOworCisJCS8qIHByZXBhcmUgdGhlIGN1cnJlbnQgdGFzayBmb3IgeWllbGRpbmcgKi8KKwkJeFRhc2tUb1N1c3BlbmQtPnRocmVhZFN0YXR1cyA9IFRIUkVBRF9ZSUVMRElORzsKKworI2lmZGVmIERFQlVHX1NDSEVEVUxFUgorICAgICAgICBwcmludGYoIlN1c3BlbmRpbmcgdGhyZWFkICh5aWVsZCkgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl4VGFza1RvU3VzcGVuZC0+aFRocmVhZCk7CisjZW5kaWYKKwkJLyoqCisJCSAqIFNlbmQgc2lnbmFscyB1bnRpbCB0aGUgc2lnbmFsIGhhbmRsZXIgYWNrbm93bGVkZ2VzLiAgSG93IGxvbmcgdGhhdCB0YWtlcworCQkgKiBkZXBlbmRzIG9uIHRoZSBzeXN0ZW1zIHNpZ25hbCBpbXBsZW1lbnRhdGlvbi4gIER1cmluZyBhIHByZWVtcHRpb24gd2UKKwkJICogd2lsbCBzZWUgdGhlIGFjdHVhbCBUSFJFQURfU0xFRVBJTkcgU1RBVEUgLSBidXQgd2hlbiB5aWVsZGluZyB3ZQorCQkgKiB3b3VsZCBvbmx5IHNlZSBhIGZ1dHVyZSBUSFJFQURfUlVOTklORyBhZnRlciBoYXZpbmcgd29rZW4gdXAgLSBib3RoIGlzCisJCSAqIE9LCisJCSAqLworCQl3aGlsZSAoIHhUYXNrVG9TdXNwZW5kLT50aHJlYWRTdGF0dXMgPT0gVEhSRUFEX1lJRUxESU5HICkgeworCQkJcHRocmVhZF9raWxsKCB4VGFza1RvU3VzcGVuZC0+aFRocmVhZCwgU0lHX1NVU1BFTkQgKTsKKwkJCXNjaGVkX3lpZWxkKCk7CisJCX0KKworCQkvKioKKwkJICogbWFyazogb25jZSB3ZSByZWFjaCB0aGlzIHBvaW50LCB0aGUgdGFzayBoYXMgYWxyZWFkeSBzbGVwdCBhbmQgYXdha2VuIGFuZXcKKwkJICovCisKKwl9IGVsc2UgeworCQkvKioKKwkJICogbm8gY29udGV4dCBzd2l0Y2ggLSBrZWVwIHJ1bm5pbmcKKwkJICovCisJCWlmICh4VGFza1RvUmVzdW1lLT51eENyaXRpY2FsTmVzdGluZz09MCkgeworCQkJeEludGVycnVwdHNFbmFibGVkID0gcGRUUlVFOworCQl9CisJfQorCit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBwdWJsaWMgeWllbGQgZnVuY3Rpb24gLSBzZWN1cmUKKyAqLwordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkKK3sKKwlQT1JUX0VOVEVSKCk7CisKKwlwcnZQb3J0WWllbGQoKTsKKworCVBPUlRfTEVBVkUoKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHB1YmxpYyBmdW5jdGlvbiB0byBkaXNhYmxlIGludGVycnVwdHMKKyAqLwordm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzKCB2b2lkICkKK3sKKwlQT1JUX0VOVEVSKCk7CisKKwl4SW50ZXJydXB0c0VuYWJsZWQgPSBwZEZBTFNFOworCisJUE9SVF9MRUFWRSgpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogcHVibGljIGZ1bmN0aW9uIHRvIGVuYWJsZSBpbnRlcnJ1cHRzCisgKi8KK3ZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzKCB2b2lkICkKK3sKKwlQT1JUX0VOVEVSKCk7CisKKwkvKioKKwkgKiBJdCBpcyBiYWQgcHJhY3RpY2UgdG8gZW5hYmxlIGludGVycnVwdHMgZXhwbGljaXRseSB3aGlsZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24KKwkgKiBtb3N0IGxpa2VseSB0aGlzIGlzIGEgYnVnIC0gYmV0dGVyIHByZXZlbnQgdGhlIHVzZXJzcGFjZSBmcm9tIGJlaW5nIHN0dXBpZAorCSAqLworICAgIHhUaHJlYWRTdGF0ZSAqc2VsZlRocmVhZFN0YXRlID0gcHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpOyAgICAKKyAgICBpZiAoc2VsZlRocmVhZFN0YXRlKQorICAgICAgICBQT1JUX0FTU0VSVCggc2VsZlRocmVhZFN0YXRlLT51eENyaXRpY2FsTmVzdGluZyA9PSAwICk7CisKKwl4SW50ZXJydXB0c0VuYWJsZWQgPSBwZFRSVUU7CisKKwlQT1JUX0xFQVZFKCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBzZXQgYW5kIGNsZWFyIGludGVycnVwdCBtYXNrcyBhcmUgdXNlZCBieSBGcmVlUlRPUyB0byBlbnRlciBhbmQgbGVhdmUgY3JpdGljYWwgc2VjdGlvbnMKKyAqIHdpdGggdW5rbm93biBuZXh0aW5nIGxldmVsIC0gYnV0IHdlIERPIGtub3cgdGhlIG5lc3RpbmcgbGV2ZWwKKyAqLworcG9ydEJBU0VfVFlQRSB4UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKQoreworCXBvcnRCQVNFX1RZUEUgeFJldHVybjsKKyAgICB4VGhyZWFkU3RhdGUgKnNlbGZUaHJlYWRTdGF0ZSA9IHBydkdldFRocmVhZEhhbmRsZUJ5VGhyZWFkKHB0aHJlYWRfc2VsZigpKTsKKworCVBPUlRfRU5URVIoKTsKKworCXhSZXR1cm4gPSB4SW50ZXJydXB0c0VuYWJsZWQ7CisKKwl4SW50ZXJydXB0c0VuYWJsZWQgPSBwZEZBTFNFOworCQorCWlmIChzZWxmVGhyZWFkU3RhdGUpCisJCXNlbGZUaHJlYWRTdGF0ZS0+dXhDcml0aWNhbE5lc3RpbmcrKzsKKworCVBPUlRfTEVBVkUoKTsKKworCXJldHVybiB4UmV0dXJuOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogc2V0cyB0aGUgImludGVycnVwdCBtYXNrIGJhY2sgdG8gYSBzdG9yZWQgc2V0dGluZworICovCit2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCBwb3J0QkFTRV9UWVBFIHhNYXNrICkKK3sKKwlQT1JUX0VOVEVSKCk7CisKKwkvKioKKwkgKiB3ZSBiZXR0ZXIgbWFrZSBzdXJlIHRoZSBjYWxsaW5nIGNvZGUgYmVoYXZlcworCSAqIGlmIGl0IGRvZXNuJ3QgaXQgbWlnaHQgaW5kaWNhdGUgc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nCisJICovCisgICAgeFRocmVhZFN0YXRlICpzZWxmVGhyZWFkU3RhdGUgPSBwcnZHZXRUaHJlYWRIYW5kbGVCeVRocmVhZChwdGhyZWFkX3NlbGYoKSk7CisJUE9SVF9BU1NFUlQoIHhNYXNrID09IHBkVFJVRSB8fCB4TWFzayA9PSBwZEZBTFNFICk7CisJUE9SVF9BU1NFUlQoCisgICAgICAgICggc2VsZlRocmVhZFN0YXRlID09IE5VTEwgKQorICAgICAgICB8fAorCQkoIHNlbGZUaHJlYWRTdGF0ZS0+dXhDcml0aWNhbE5lc3RpbmcgPT0gMSAmJiB4TWFzaz09cGRUUlVFICkKKwkJfHwgCisJCSggc2VsZlRocmVhZFN0YXRlLT51eENyaXRpY2FsTmVzdGluZyA+IDEgJiYgeE1hc2s9PXBkRkFMU0UgKQorCSk7CisKKwl4SW50ZXJydXB0c0VuYWJsZWQgPSB4TWFzazsKKworICAgIGlmIChzZWxmVGhyZWFkU3RhdGUpCisgICAgeworICAgICAgICBpZiAocHJ2R2V0VGhyZWFkSGFuZGxlQnlUaHJlYWQocHRocmVhZF9zZWxmKCkpLT51eENyaXRpY2FsTmVzdGluZz4wKSB7CisgICAgICAgICAgICBwcnZHZXRUaHJlYWRIYW5kbGVCeVRocmVhZChwdGhyZWFkX3NlbGYoKSktPnV4Q3JpdGljYWxOZXN0aW5nLS07CisgICAgICAgIH0KKyAgICB9CisgICAgCisJUE9SVF9MRUFWRSgpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB0aGUgdGljayBoYW5kbGVyIGlzIGp1c3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGUgc3VwZXJ2aXNvciB0aHJlYWQgcGVyaW9kaWNhbGx5CisgKi8KK3ZvaWQgdlBvcnRTeXN0ZW1UaWNrSGFuZGxlcigpCit7CisJLyoqCisJICogdGhlIHByb2JsZW0gd2l0aCB0aGUgdGljayBoYW5kbGVyIGlzLCB0aGF0IGl0IHJ1bnMgb3V0c2lkZSBvZiB0aGUgc2NoZWR1bGVycyBkb21haW4gLSB3b3JzZSwKKwkgKiBvbiBhIG11bHRpIGNvcmUgbWFjaGluZSB0aGVyZSBtaWdodCBiZSBhIHRhc2sgcnVubmluZyAqcmlnaHQgbm93KgorCSAqIC0gd2UgbmVlZCB0byBzdG9wIGl0IGluIG9yZGVyIHRvIGRvIGFueXRoaW5nLiBIb3dldmVyIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFyZSBhYmxlIHRvIGZpcnN0CisJICovCisJUE9SVF9MT0NLKCB4R3VhcmRNdXRleCApOworCisJLyogdGhyZWFkIE1VU1QgYmUgcnVubmluZyAqLworICAgICAgICBpZiAocHJ2R2V0VGhyZWFkSGFuZGxlKHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJOVUxMIHRocmVhZCBoYW5kbGUgaW4gc3lzdGljayFcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJaWYgKCBwcnZHZXRUaHJlYWRIYW5kbGUoeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpKS0+dGhyZWFkU3RhdHVzIT1USFJFQURfUlVOTklORyApIHsKKwkJeFBlbmRZaWVsZCA9IHBkVFJVRTsKKwkJUE9SVF9VTkxPQ0soIHhHdWFyZE11dGV4ICk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpbnRlcnJ1cHRzIE1VU1QgYmUgZW5hYmxlZCAqLworCWlmICggeEludGVycnVwdHNFbmFibGVkICE9IHBkVFJVRSApIHsKKwkJeFBlbmRZaWVsZCA9IHBkVFJVRTsKKwkJUE9SVF9VTkxPQ0soIHhHdWFyZE11dGV4ICk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IGl0IGNhbid0IGhhcm0gdG8gY2hlY2sgKi8KKwlQT1JUX0FTU0VSVCggcHJ2R2V0VGhyZWFkSGFuZGxlKHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSktPnV4Q3JpdGljYWxOZXN0aW5nPT0wICk7CisKKwkvKiBhY3F1aXJlIHN3aXRjaGluZyBtdXRleCBmb3Igc3luY2hyb25pemF0aW9uICovCisJUE9SVF9MT0NLKHhZaWVsZGluZ1RocmVhZE11dGV4KTsKKworCXhUaHJlYWRTdGF0ZSAqeFRhc2tUb1N1c3BlbmQgPSBwcnZHZXRUaHJlYWRIYW5kbGUoIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApOworCisjaWZkZWYgREVCVUdfU0NIRURVTEVSCisgICAgcHJpbnRmKCJTdXNwZW5kaW5nIHRocmVhZCAodGljaykgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl4VGFza1RvU3VzcGVuZC0+aFRocmVhZCk7CisjZW5kaWYKKyAgICAKKwkvKioKKwkgKiBoYWx0IGN1cnJlbnQgdGFzayAtIHRoaXMgbWVhbnMgTk8gdGFzayBpcyBydW5uaW5nIQorCSAqIFNlbmQgc2lnbmFscyB1bnRpbCB0aGUgc2lnbmFsIGhhbmRsZXIgYWNrbm93bGVkZ2VzLiAgaG93IGxvbmcgdGhhdCB0YWtlcworCSAqIGRlcGVuZHMgb24gdGhlIHN5c3RlbXMgc2lnbmFsIGltcGxlbWVudGF0aW9uLiAgRHVyaW5nIGEgcHJlZW1wdGlvbiB3ZQorCSAqIHdpbGwgc2VlIHRoZSBhY3R1YWwgVEhSRUFEX1NMRUVQSU5HIFNUQVRFIHdoZW4geWllbGRpbmcgd2Ugd291bGQgb25seQorCSAqIHNlZSBhIGZ1dHVyZSBUSFJFQURfUlVOTklORyBhZnRlciBoYXZpbmcgd29rZW4gdXAgYm90aCBpcyBPSworCSAqIG5vdGU6IHdlIGRvIE5PVCBnaXZlIHVwIHN3aXRjaGluZ1RocmVhZE11dGV4IQorCSAqLworCXhUYXNrVG9TdXNwZW5kLT50aHJlYWRTdGF0dXMgPSBUSFJFQURfUFJFRU1QVElORzsKKwl3aGlsZSAoIHhUYXNrVG9TdXNwZW5kLT50aHJlYWRTdGF0dXMgIT0gVEhSRUFEX1NMRUVQSU5HICkgeworCQlwdGhyZWFkX2tpbGwoIHhUYXNrVG9TdXNwZW5kLT5oVGhyZWFkLCBTSUdfU1VTUEVORCApOworCQlzY2hlZF95aWVsZCgpOworCX0KKworCS8qKgorCSAqIHN5bmNocm9uaXplIGFuZCBhY3F1aXJlIHRoZSBydW5uaW5nIHRocmVhZCBtdXRleAorCSAqLworCVBPUlRfVU5MT0NLKCB4WWllbGRpbmdUaHJlYWRNdXRleCApOworCVBPUlRfTE9DSyggeFJ1bm5pbmdUaHJlYWRNdXRleCApOworCisJLyoqCisJICogbm93IHRoZSB0aWNrIGhhbmRsZXIgcnVucyBJTlNURUFEIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRocmVhZAorCSAqIC0gZXZlbiBvbiBhIG11bHRpY29yZSBzeXN0ZW0KKwkgKiBmYWlsdXJlIHRvIGRvIHNvIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cyBkdXJpbmcKKwkgKiB2VGFza0luY3JlbWVudFRpY2soKS4uLgorCSAqLworCisJLyoqCisJICogY2FsbCB0aWNrIGhhbmRsZXIKKwkgKi8KKwl2VGFza0luY3JlbWVudFRpY2soKTsKKworCQorI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApCisJLyoqCisJICogd2hpbGUgd2UgYXJlIGhlcmUgd2UgY2FuIGFzIHdlbGwgc3dpdGNoIHRoZSBydW5uaW5nIHRocmVhZAorCSAqLworCXZUYXNrU3dpdGNoQ29udGV4dCgpOworCisJeFRhc2tUb1N1c3BlbmQgPSBwcnZHZXRUaHJlYWRIYW5kbGUoIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApOworI2VuZGlmCisKKwkvKioKKwkgKiB3YWtlIHVwIHRoZSB0YXNrIChhZ2FpbikKKwkgKi8KKwlwcnZSZXN1bWVUaHJlYWQoIHhUYXNrVG9TdXNwZW5kICk7CisKKwkvKioKKwkgKiBnaXZlIGNvbnRyb2wgdG8gdGhlIHVzZXJzcGFjZSB0YXNrCisJICovCisJUE9SVF9VTkxPQ0soIHhSdW5uaW5nVGhyZWFkTXV0ZXggKTsKKworCS8qIGZpbmlzaCB1cCAqLworCVBPUlRfVU5MT0NLKCB4R3VhcmRNdXRleCApOyAgICAKKworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdGhyZWFkIGtpbGwgaW1wbGVtZW50YXRpb24KKyAqLwordm9pZCB2UG9ydEZvcmNpYmx5RW5kVGhyZWFkKCB2b2lkICpweFRhc2tUb0RlbGV0ZSApCit7Cit4VGFza0hhbmRsZSBoVGFza1RvRGVsZXRlID0gKCB4VGFza0hhbmRsZSApcHhUYXNrVG9EZWxldGU7Cit4VGhyZWFkU3RhdGUqIHhUYXNrVG9EZWxldGU7Cit4VGhyZWFkU3RhdGUqIHhUYXNrVG9SZXN1bWU7CisKKwlQT1JUX0VOVEVSKCk7CisKKwl4VGFza1RvRGVsZXRlID0gcHJ2R2V0VGhyZWFkSGFuZGxlKCBoVGFza1RvRGVsZXRlICk7CisJeFRhc2tUb1Jlc3VtZSA9IHBydkdldFRocmVhZEhhbmRsZSggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CisKKwlQT1JUX0FTU0VSVCggIHhUYXNrVG9EZWxldGUgKTsKKwlQT1JUX0FTU0VSVCggIHhUYXNrVG9SZXN1bWUgKTsKKworCWlmICggeFRhc2tUb1Jlc3VtZSA9PSB4VGFza1RvRGVsZXRlICkKKwl7CisJCS8qIFRoaXMgaXMgYSBzdWljaWRhbCB0aHJlYWQsIG5lZWQgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHRhc2sgdG8gcnVuLiAqLworCQl2VGFza1N3aXRjaENvbnRleHQoKTsKKwkJeFRhc2tUb1Jlc3VtZSA9IHBydkdldFRocmVhZEhhbmRsZSggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CisJfQorCisJaWYgKCBwdGhyZWFkX3NlbGYoKSAhPSB4VGFza1RvRGVsZXRlLT5oVGhyZWFkICkKKwl7CisJCS8qIENhbmNlbGxpbmcgYSB0aHJlYWQgdGhhdCBpcyBub3QgbWUuICovCisKKwkJLyogU2VuZCBhIHNpZ25hbCB0byB3YWtlIHRoZSB0YXNrIHNvIHRoYXQgaXQgZGVmaW5pdGVseSBjYW5jZWxzLiAqLworCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKwkJcHRocmVhZF9jYW5jZWwoIHhUYXNrVG9EZWxldGUtPmhUaHJlYWQgKTsKKworCX0KKwllbHNlCisJeworCQkvKiBSZXN1bWUgdGhlIG90aGVyIHRocmVhZC4gKi8KKwkJcHJ2UmVzdW1lVGhyZWFkKCB4VGFza1RvUmVzdW1lICk7CisJCS8qIFB0aHJlYWQgQ2xlYW4tdXAgZnVuY3Rpb24gd2lsbCBub3RlIHRoZSBjYW5jZWxsYXRpb24uICovCisJCS8qIFJlbGVhc2UgdGhlIGV4ZWN1dGlvbi4gKi8KKworCQlQT1JUX1VOTE9DSyggeFJ1bm5pbmdUaHJlYWRNdXRleCApOworCisJCS8vUE9SVF9MRUFWRSgpOworCQlQT1JUX1VOTE9DSyggeEd1YXJkTXV0ZXggKTsKKwkJLyogQ29tbWl0IHN1aWNpZGUgKi8KKwkJcHRocmVhZF9leGl0KCAodm9pZCAqKTEgKTsKKwl9CisJUE9SVF9MRUFWRSgpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogYW55IG5ldyB0aHJlYWQgZmlyc3QgYWNxdWlyZXMgdGhlIHJ1bm5pbmdUaHJlYWRNdXRleCwgYnV0IHRoZW4gc3VzcGVuZHMKKyAqIGltbWVkaWF0ZWx5LCBnaXZpbmcgY29udHJvbCBiYWNrIHRvIHRoZSB0aHJlYWQgc3RhcnRpbmcgdGhlIG5ldyBvbmUKKyAqLwordm9pZCAqcHJ2V2FpdEZvclN0YXJ0KCB2b2lkICogcHZQYXJhbXMgKQoreworCXhQYXJhbXMgKiBweFBhcmFtcyA9ICggeFBhcmFtcyAqIClwdlBhcmFtczsKKwlwZFRBU0tfQ09ERSBwdkNvZGUgPSBweFBhcmFtcy0+cHhDb2RlOworCXZvaWQgKiBwUGFyYW1zID0gcHhQYXJhbXMtPnB2UGFyYW1zOworCXNpZ3NldF90IHhTaWduYWxUb0Jsb2NrOworCXhUaHJlYWRTdGF0ZSAqIG15c2VsZiA9IHBydkdldFRocmVhZEhhbmRsZUJ5VGhyZWFkKCBwdGhyZWFkX3NlbGYoKSApOworCisJcHRocmVhZF9jbGVhbnVwX3B1c2goIHBydkRlbGV0ZVRocmVhZCwgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSApOworCisJLyogZG8gcmVzcG9uZCB0byBzaWduYWxzICovCisJc2lnZW1wdHlzZXQoICZ4U2lnbmFsVG9CbG9jayApOworCSh2b2lkKXB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2lnbmFsVG9CbG9jaywgTlVMTCApOworCisJLyoqCisJICogU3VzcGVuZCBvdXJzZWx2ZXMuIEl0J3MgaW1wb3J0YW50IHRvIGRvIHRoYXQgZmlyc3QKKwkgKiBiZWNhdXNlIHVudGlsIHdlIGNvbWUgYmFjayBmcm9tIHRoaXMgd2UgcnVuIG91dHNpZGUgdGhlIHNjaGVkdWxlcnMgc2NvcGUKKwkgKiBhbmQgY2FuJ3QgY2FsbCBmdW5jdGlvbnMgbGlrZSB2UG9ydEZyZWUoKSBzYWZlbHkKKwkgKi8KKwl3aGlsZSAoIG15c2VsZi0+dGhyZWFkU3RhdHVzID09IFRIUkVBRF9TVEFSVElORyApIHsKKwkJcHRocmVhZF9raWxsKCBteXNlbGYtPmhUaHJlYWQsIFNJR19TVVNQRU5EICk7CisJCXNjaGVkX3lpZWxkKCk7CisJfQorCisJLyoqCisJICogbm93IHdlIGhhdmUgcmV0dXJuZWQgZnJvbSB0aGUgZGVhZCAtIHJlYm9ybiBhcyBhIHJlYWwgdGhyZWFkIGluc2lkZSB0aGUKKwkgKiBzY2hlZHVsZXJzIHNjb3BlLgorCSAqLworCXZQb3J0RnJlZSggcHZQYXJhbXMgKTsKKworCS8qIHJ1biB0aGUgYWN0dWFsIHBheWxvYWQgKi8KKwlwdkNvZGUoIHBQYXJhbXMgKTsKKworCXB0aHJlYWRfY2xlYW51cF9wb3AoIDEgKTsKKwlyZXR1cm4gKHZvaWQgKilOVUxMOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogVGhlIHN1c3BlbmQgc2lnbmFsIGhhbmRsZXIgaXMgY2FsbGVkIHdoZW4gYSB0aHJlYWQgZ2V0cyBhIFNJR1NVU1BFTkQKKyAqIHNpZ25hbCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gc2VuZCBpdCB0byBzbGVlcAorICovCit2b2lkIHBydlN1c3BlbmRTaWduYWxIYW5kbGVyKGludCBzaWcpCit7CisKKyAgICAvLyBxdWVsbCAidW51c2VkIHBhcmFtZXRlciIgd2FybmluZworICAgICh2b2lkKSBzaWc7CisKKwlwb3J0QkFTRV9UWVBFIGhhbmdvdmVyOworCisJLyogbWFrZSBzdXJlIHdobyB3ZSBhcmUgKi8KKwl4VGhyZWFkU3RhdGUqIG15c2VsZiA9IHBydkdldFRocmVhZEhhbmRsZUJ5VGhyZWFkKHB0aHJlYWRfc2VsZigpKTsKKwlQT1JUX0FTU0VSVCggbXlzZWxmICk7CisgICAgICAgIAorCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgYWN0dWFsbHkgc3VwcG9zZWQgdG8gc2xlZXAgKi8KKwlpZiAobXlzZWxmLT50aHJlYWRTdGF0dXMgIT0gVEhSRUFEX1lJRUxESU5HICYmIG15c2VsZi0+dGhyZWFkU3RhdHVzICE9IFRIUkVBRF9TVEFSVElORyAmJiBteXNlbGYtPnRocmVhZFN0YXR1cyAhPSBUSFJFQURfUFJFRU1QVElORyApIHsKKwkJLyogU3B1cmlvdXMgc2lnbmFsIGhhcyBhcnJpdmVkLCB3ZSBhcmUgbm90IHJlYWxseSBzdXBwb3NlZCB0byBoYWx0LgorCQkgKiBOb3QgYSByZWFsIHByb2JsZW0sIHdlIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQuICovCisJCXJldHVybjsKKwl9CisKKwkvKiB3ZSBuZWVkIHRoYXQgdG8gd2FrZSB1cCBsYXRlciAoY29uZF93YWl0IG5lZWRzIGEgbXV0ZXggbG9ja2VkKSAqLworCVBPUlRfTE9DSyhteXNlbGYtPnRocmVhZFNsZWVwTXV0ZXgpOworCisJLyogZXZlbiB3YWtpbmcgdXAgaXMgYSBiaXQgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBob3cgd2Ugd2VudCB0byBzbGVlcCAqLworCWhhbmdvdmVyID0gbXlzZWxmLT50aHJlYWRTdGF0dXM7CisKKwlteXNlbGYtPnRocmVhZFN0YXR1cyA9IFRIUkVBRF9TTEVFUElORzsKKworI2lmZGVmIERFQlVHX1NDSEVEVUxFUgorICAgIHByaW50ZigiU2V0IHRocmVhZFN0YXR1cyA9ICVkIGZvciAlbGx4XG4iLCBteXNlbGYtPnRocmVhZFN0YXR1cywgKHVuc2lnbmVkIGxvbmcgbG9uZylteXNlbGYpOworI2VuZGlmCisgICAgCisJaWYgKCBoYW5nb3ZlciA9PSBUSFJFQURfU1RBUlRJTkcgKSB7CisJCS8qKgorCQkgKiBTeW5jaHJvbml6YXRpb24gd2l0aCBzcGF3bmluZyB0aHJlYWQgdGhyb3VnaCBZaWVsZGluZ011dGV4CisJCSAqIFRoaXMgdGhyZWFkIGRvZXMgTk9UIGhhdmUgdGhlIHJ1bm5pbmcgdGhyZWFkIG11dGV4CisJCSAqIGJlY2F1c2UgaXQgbmV2ZXIgb2ZmaWNpYWxseSByYW4gYmVmb3JlLgorCQkgKiBJdCB3aWxsIGdldCB0aGF0IG11dGV4IG9uIHdha2V1cCB0aG91Z2guCisJCSAqLworCQlQT1JUX0xPQ0soeFlpZWxkaW5nVGhyZWFkTXV0ZXgpOworCQlQT1JUX1VOTE9DSyh4WWllbGRpbmdUaHJlYWRNdXRleCk7CisJfSBlbHNlIGlmICggaGFuZ292ZXIgPT0gVEhSRUFEX1lJRUxESU5HKSB7CisJCS8qKgorCQkgKiBUaGUgY2FsbGVyIGlzIHRoZSBzYW1lIHRocmVhZCBhcyB0aGUgc2lnbmFsIGhhbmRsZXIuCisJCSAqIE5vIHN5bmNocm9uaXphdGlvbiBwb3NzaWJsZSBvciBuZWVkZWQuCisJCSAqIEJ1dCB3ZSBuZWVkIHRvIHVubG9jayB0aGUgbXV0ZXhlcyBpdCBob2xkcywgc28KKwkJICogb3RoZXIgdGhyZWFkcyBjYW4gcnVuLgorCQkgKi8KKwkJUE9SVF9VTkxPQ0soeFJ1bm5pbmdUaHJlYWRNdXRleCApOworCQlQT1JUX1VOTE9DSyh4R3VhcmRNdXRleCApOworCX0gZWxzZSBpZiAoIGhhbmdvdmVyID09IFRIUkVBRF9QUkVFTVBUSU5HKSB7CisJCS8qKgorCQkgKiBUaGUgY2FsbGVyIGlzIHRoZSB0aWNrIGhhbmRsZXIuCisJCSAqIFVzZSBZaWVsZGluZ011dGV4IGZvciBzeW5jaHJvbml6YXRpb24KKwkJICogR2l2ZSB1cCBSdW5uaW5nVGhyZWFkTXV0ZXgsIHNvIHRoZSB0aWNrIGhhbmRsZXIKKwkJICogY2FuIHRha2UgaXQgYW5kIHN0YXJ0IGFub3RoZXIgdGhyZWFkLgorCQkgKi8KKwkJUE9SVF9MT0NLKHhZaWVsZGluZ1RocmVhZE11dGV4KTsKKwkJUE9SVF9VTkxPQ0soeFJ1bm5pbmdUaHJlYWRNdXRleCApOworCQlQT1JUX1VOTE9DSyh4WWllbGRpbmdUaHJlYWRNdXRleCk7CisJfQorCisjaWZkZWYgREVCVUdfU0NIRURVTEVSCisgICAgcHJpbnRmKCJUaHJlYWQgc3VzcGVuZGVkICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbXlzZWxmLT5oVGhyZWFkKTsKKyNlbmRpZgorICAgIAorCS8qIGRlZXAgc2xlZXAgdW50aWwgd2FrZSBjb25kaXRpb24gaXMgbWV0Ki8KKwlwdGhyZWFkX2NvbmRfd2FpdCggJm15c2VsZi0+dGhyZWFkU2xlZXBDb25kLCAmbXlzZWxmLT50aHJlYWRTbGVlcE11dGV4ICk7CisKKyNpZmRlZiBERUJVR19TQ0hFRFVMRVIKKyAgICBwcmludGYoIlRocmVhZCByZXN1bWVkICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbXlzZWxmLT5oVGhyZWFkKTsKKyNlbmRpZgorICAgIAorCS8qIHdha2luZyAqLworCW15c2VsZi0+dGhyZWFkU3RhdHVzID0gVEhSRUFEX1dBS0lORzsKKwkKKwkvKiBzeW5jaHJvbml6ZSB3aXRoIHdha2VyIC0gcXVpY2sgYXNzZXJ0aW9uIGlmIHRoZSByaWdodCB0aHJlYWQgZ290IHRoZSBjb25kaXRpb24gc2VudCB0byovCisJUE9SVF9MT0NLKHhSZXN1bWluZ1RocmVhZE11dGV4KTsKKwlQT1JUX0FTU0VSVChwcnZHZXRUaHJlYWRIYW5kbGUoIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSk9PW15c2VsZik7CisJUE9SVF9VTkxPQ0soeFJlc3VtaW5nVGhyZWFkTXV0ZXgpOworCisJLyogd2UgZG9uJ3QgbmVlZCB0aGF0IGNvbmRpdGlvbiBtdXRleCBhbnltb3JlICovCisJUE9SVF9VTkxPQ0sobXlzZWxmLT50aHJlYWRTbGVlcE11dGV4KTsKKworI2lmICggSU5DTFVERV9wY1Rhc2tHZXRUYXNrTmFtZSA9PSAxICkKKyAgICAvLyBTZXQgdGhlIG5hbWUgb2YgdGhlIHRocmVhZAorICAgIHhUYXNrSGFuZGxlIHhUYXNrID0gbXlzZWxmLT5oVGFzazsKKyAgICBpZiAoeFRhc2spCisgICAgeworICAgICAgICBzaWduZWQgY2hhciAqdGFza05hbWUgPSBwY1Rhc2tHZXRUYXNrTmFtZSh4VGFzayk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgICAgIHB0aHJlYWRfc2V0bmFtZV9ucCgoY29uc3QgY2hhciAqKXRhc2tOYW1lKTsKKyNlbHNlCisgICAgICAgIHRhc2tOYW1lID0gdGFza05hbWU7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKyAgICAgICAgCisJLyogd2UgQVJFIHRoZSBydW5uaW5nIHRocmVhZCBub3cgKHRoZSBvbmUgYW5kIG9ubHkpICovCisJUE9SVF9MT0NLKHhSdW5uaW5nVGhyZWFkTXV0ZXgpOworCisJLyoqCisJICogYW5kIHdlIGhhdmUgaW1wb3J0YW50IHN0dWZmIHRvIGRvLCBub2JvZHkgc2hvdWxkIGludGVyZmVyZSB3aXRoCisJICogKCBHdWFyZE11dGV4IGlzIHVzdWFsbHkgc2V0IGJ5IFBPUlRfRU5URVIoKSApCisJICogKi8KKwlQT1JUX0xPQ0soIHhHdWFyZE11dGV4ICk7CisJaWYgKCBteXNlbGYtPnV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQorCXsKKwkJeEludGVycnVwdHNFbmFibGVkID0gcGRUUlVFOworCX0KKwllbHNlCisJeworCQl4SW50ZXJydXB0c0VuYWJsZWQgPSBwZEZBTFNFOworCX0KKworCW15c2VsZi0+dGhyZWFkU3RhdHVzID0gVEhSRUFEX1JVTk5JTkc7CisKKwkvKioKKwkgKiBpZiB3ZSBqdW1wIGJhY2sgdG8gdXNlciBjb2RlLCB3ZSBhcmUgZG9uZSB3aXRoIGltcG9ydGFudCBzdHVmZiwKKwkgKiBidXQgaWYgd2UgaGFkIHlpZWxkZWQgd2UgYXJlIHN0aWxsIGluIHByb3RlY3RlZCBjb2RlIGFmdGVyIHJldHVybmluZy4KKwkgKiovCisJaWYgKGhhbmdvdmVyIT1USFJFQURfWUlFTERJTkcpIHsKKwkJUE9SVF9VTkxPQ0soIHhHdWFyZE11dGV4ICk7CisJfQorCit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBTaWduYWwgdGhlIGNvbmRpdGlvbi4KKyAqIFVubGlrZSBwdGhyZWFkX2tpbGwgdGhpcyBhY3R1YWxseSBpcyBzdXBwb3NlZCB0byBiZSByZWxpYWJsZSwgc28gd2UgbmVlZCBubworICogY2hlY2tzIG9uIHRoZSBvdXRjb21lLgorICovCit2b2lkIHBydlJlc3VtZVRocmVhZCggeFRocmVhZFN0YXRlKiB4VGhyZWFkSWQgKQoreworCVBPUlRfQVNTRVJUKCB4VGhyZWFkSWQgKTsKKwlQT1JUX0xPQ0soIHhSZXN1bWluZ1RocmVhZE11dGV4ICk7CisKKwlQT1JUX0FTU0VSVCh4VGhyZWFkSWQtPnRocmVhZFN0YXR1cyA9PSBUSFJFQURfU0xFRVBJTkcpOworCisjaWZkZWYgREVCVUdfU0NIRURVTEVSCisgICAgcHJpbnRmKCJSZXN1bWluZyB0aHJlYWQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl4VGhyZWFkSWQtPmhUaHJlYWQpOworI2VuZGlmCisgICAgCisJLyoqCisJICogVW5mb3J0dW5hdGVseSAiaXMgc3VwcG9zZWQgdG8iIGRvZXMgbm90IGhvbGQgb24gYWxsIFBvc2l4LWlzaCBzeXN0ZW1zCisJICogYnV0IHNlbmRpbmcgdGhlIGNvbmRfc2lnbmFsIGFnYWluIGRvZXNuJ3QgaHVydCBhbnlvbmUuCisJICovCisJd2hpbGUgKCB4VGhyZWFkSWQtPnRocmVhZFN0YXR1cyAhPSBUSFJFQURfV0FLSU5HICkgeworCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCYgeFRocmVhZElkLT50aHJlYWRTbGVlcENvbmQpOworCQlzY2hlZF95aWVsZCgpOworCX0KKwkKKwlQT1JUX1VOTE9DSyggeFJlc3VtaW5nVGhyZWFkTXV0ZXggKTsKKworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdGhpcyBpcyBpbml0IGNvZGUgZXhlY3V0ZWQgdGhlIGZpcnN0IHRpbWUgYSB0aHJlYWQgaXMgY3JlYXRlZAorICovCit2b2lkIHBydlNldHVwU2lnbmFsc0FuZFNjaGVkdWxlclBvbGljeSggdm9pZCApCit7CisvKiBUaGUgZm9sbG93aW5nIGNvZGUgd291bGQgYWxsb3cgZm9yIGNvbmZpZ3VyaW5nIHRoZSBzY2hlZHVsaW5nIG9mIHRoaXMgdGFzayBhcyBhIFJlYWwtdGltZSB0YXNrLgorICogVGhlIHByb2Nlc3Mgd291bGQgdGhlbiBuZWVkIHRvIGJlIHJ1biB3aXRoIGhpZ2hlciBwcml2aWxlZ2VzIGZvciBpdCB0byB0YWtlIGFmZmVjdC4KK2ludCBpUG9saWN5OworaW50IGlSZXN1bHQ7CitpbnQgaVNjaGVkdWxlclByaW9yaXR5OworCWlSZXN1bHQgPSBwdGhyZWFkX2dldHNjaGVkcGFyYW0oIHB0aHJlYWRfc2VsZigpLCAmaVBvbGljeSwgJmlTY2hlZHVsZXJQcmlvcml0eSApOworCWlSZXN1bHQgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3koICZ4VGhyZWFkQXR0cmlidXRlcywgU0NIRURfRklGTyApOworCWlQb2xpY3kgPSBTQ0hFRF9GSUZPOworCWlSZXN1bHQgPSBwdGhyZWFkX3NldHNjaGVkcGFyYW0oIHB0aHJlYWRfc2VsZigpLCBpUG9saWN5LCAmaVNjaGVkdWxlclByaW9yaXR5ICk7CQkqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ3N1c3BlbmRzZWxmOworcG9ydExPTkcgbEluZGV4OworCisJcHhUaHJlYWRzID0gKCB4VGhyZWFkU3RhdGUgKilwdlBvcnRNYWxsb2MoIHNpemVvZiggeFRocmVhZFN0YXRlICkgKiBNQVhfTlVNQkVSX09GX1RBU0tTICk7CisJCisJY29uc3QgcHRocmVhZF9jb25kX3QgY2luaXQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CisJY29uc3QgcHRocmVhZF9tdXRleF90IG1pbml0ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKwlmb3IgKCBsSW5kZXggPSAwOyBsSW5kZXggPCBNQVhfTlVNQkVSX09GX1RBU0tTOyBsSW5kZXgrKyApCisJeworCQlweFRocmVhZHNbIGxJbmRleCBdLmhUaHJlYWQgPSAoIHB0aHJlYWRfdCApTlVMTDsKKwkJcHhUaHJlYWRzWyBsSW5kZXggXS5oVGFzayA9ICggeFRhc2tIYW5kbGUgKU5VTEw7CisJCXB4VGhyZWFkc1sgbEluZGV4IF0udXhDcml0aWNhbE5lc3RpbmcgPSAwOworCQlweFRocmVhZHNbIGxJbmRleCBdLnRocmVhZFNsZWVwTXV0ZXggPSBtaW5pdDsKKwkJcHhUaHJlYWRzWyBsSW5kZXggXS50aHJlYWRTbGVlcENvbmQgPSBjaW5pdDsKKwl9CisKKwlzaWdzdXNwZW5kc2VsZi5zYV9mbGFncyA9IDA7CisJc2lnc3VzcGVuZHNlbGYuc2FfaGFuZGxlciA9IHBydlN1c3BlbmRTaWduYWxIYW5kbGVyOworCXNpZ2ZpbGxzZXQoICZzaWdzdXNwZW5kc2VsZi5zYV9tYXNrICk7CisKKwlpZiAoIDAgIT0gc2lnYWN0aW9uKCBTSUdfU1VTUEVORCwgJnNpZ3N1c3BlbmRzZWxmLCBOVUxMICkgKQorCXsKKwkJUE9SVF9QUklOVCggIlByb2JsZW0gaW5zdGFsbGluZyBTSUdfU1VTUEVORF9TRUxGXG4iICk7CisJfQorCVBPUlRfUFJJTlQoICJSdW5uaW5nIGFzIFBJRDogJWRcbiIsIGdldHBpZCgpICk7CisKKwkvKiBXaGVuIHNjaGVkdWxlciBpcyBzZXQgdXAgbWFpbiB0aHJlYWQgZmlyc3QgY2xhaW1zIHRoZSBydW5uaW5nIHRocmVhZCBtdXRleCAqLworCVBPUlRfTE9DSyggeFJ1bm5pbmdUaHJlYWRNdXRleCApOworCit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBnZXQgYSB0aHJlYWQgaGFuZGxlIGJhc2VkIG9uIGEgdGFzayBoYW5kbGUKKyAqLworeFRocmVhZFN0YXRlKiBwcnZHZXRUaHJlYWRIYW5kbGUoIHhUYXNrSGFuZGxlIGhUYXNrICkKK3sKKyAgICBwb3J0TE9ORyBsSW5kZXg7CisJaWYgKCFweFRocmVhZHMpCisJCXJldHVybiBOVUxMOworCWZvciAoIGxJbmRleCA9IDA7IGxJbmRleCA8IE1BWF9OVU1CRVJfT0ZfVEFTS1M7IGxJbmRleCsrICkKKwl7CisJCWlmICggcHhUaHJlYWRzWyBsSW5kZXggXS5oVGFzayA9PSBoVGFzayApCisJCXsKKwkJCXJldHVybiAmcHhUaHJlYWRzWyBsSW5kZXggXTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogZ2V0IGEgdGhyZWFkIGhhbmRsZSBiYXNlZCBvbiBhIHBvc2l4IHRocmVhZCBoYW5kbGUKKyAqLworeFRocmVhZFN0YXRlKiBwcnZHZXRUaHJlYWRIYW5kbGVCeVRocmVhZCggcHRocmVhZF90IGhUaHJlYWQgKQoreworcG9ydExPTkcgbEluZGV4OworCS8qKgorCSAqIGlmIHRoZSBzY2hlZHVsZXIgaXMgTk9UIHlldCBzdGFydGVkLCB3ZSBjYW4gZ2l2ZSBiYWNrIGEgZHVtbXkgdGhyZWFkIGhhbmRsZQorCSAqIHRvIGFsbG93IGtlZXBpbmcgdHJhY2sgb2YgaW50ZXJydXB0IG5lc3RpbmcuCisJICogSG93ZXZlciBvbmNlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZCB3ZSByZXR1cm4gYSBOVUxMLAorCSAqIHNvIGFueSBtaXNiZWhhdmluZyBjb2RlIGNhbiBuaWNlbHkgc2VnZmF1bHQuCisJICovCisJaWYgKCF4U2NoZWR1bGVyU3RhcnRlZCAmJiAhcHhUaHJlYWRzKSByZXR1cm4gJnhEdW1teVRocmVhZDsKKwlpZiAoIXB4VGhyZWFkcykgcmV0dXJuIE5VTEw7CisJZm9yICggbEluZGV4ID0gMDsgbEluZGV4IDwgTUFYX05VTUJFUl9PRl9UQVNLUzsgbEluZGV4KysgKQorCXsKKwkJaWYgKCBweFRocmVhZHNbIGxJbmRleCBdLmhUaHJlYWQgPT0gaFRocmVhZCApCisJCXsKKwkJCXJldHVybiAmcHhUaHJlYWRzWyBsSW5kZXggXTsKKwkJfQorCX0KKwlpZiAoIXhTY2hlZHVsZXJTdGFydGVkKSByZXR1cm4gJnhEdW1teVRocmVhZDsKKwlyZXR1cm4gTlVMTDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBuZXh0IGZyZWUgdGFzayBoYW5kbGUgKi8KK3BvcnRMT05HIHBydkdldEZyZWVUaHJlYWRTdGF0ZSggdm9pZCApCit7Citwb3J0TE9ORyBsSW5kZXg7CisJZm9yICggbEluZGV4ID0gMDsgbEluZGV4IDwgTUFYX05VTUJFUl9PRl9UQVNLUzsgbEluZGV4KysgKQorCXsKKwkJaWYgKCBweFRocmVhZHNbIGxJbmRleCBdLmhUaHJlYWQgPT0gKCBwdGhyZWFkX3QgKU5VTEwgKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICggTUFYX05VTUJFUl9PRl9UQVNLUyA9PSBsSW5kZXggKQorCXsKKwkJUE9SVF9QUklOVCggIk5vIG1vcmUgZnJlZSB0aHJlYWRzLCBwbGVhc2UgaW5jcmVhc2UgdGhlIG1heGltdW0uXG4iICk7CisJCWxJbmRleCA9IDA7CisJCXZQb3J0RW5kU2NoZWR1bGVyKCk7CisJfQorCisJcmV0dXJuIGxJbmRleDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogZGVsZXRlIGEgdGhyZWFkIGZyb20gdGhlIGxpc3QKKyAqLwordm9pZCBwcnZEZWxldGVUaHJlYWQoIHZvaWQgKnhUaHJlYWRJZCApCit7Citwb3J0TE9ORyBsSW5kZXg7CisJZm9yICggbEluZGV4ID0gMDsgbEluZGV4IDwgTUFYX05VTUJFUl9PRl9UQVNLUzsgbEluZGV4KysgKQorCXsKKwkJaWYgKCBweFRocmVhZHNbIGxJbmRleCBdLmhUaHJlYWQgPT0gKCBwdGhyZWFkX3QgKXhUaHJlYWRJZCApCisJCXsKKyNpZmRlZiBERUJVR19TQ0hFRFVMRVIKKyAgICAgICAgICAgIHByaW50ZigiRGVsZXRpbmcgdGhyZWFkICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpeFRocmVhZElkKTsKKyNlbmRpZgorCQkJcHhUaHJlYWRzWyBsSW5kZXggXS5oVGhyZWFkID0gKHB0aHJlYWRfdClOVUxMOworCQkJcHhUaHJlYWRzWyBsSW5kZXggXS5oVGFzayA9ICh4VGFza0hhbmRsZSlOVUxMOworCQkJaWYgKCBweFRocmVhZHNbIGxJbmRleCBdLnV4Q3JpdGljYWxOZXN0aW5nID4gMCApCisJCQl7CisJCQkJLy92UG9ydEVuYWJsZUludGVycnVwdHMoKTsKKwkJCQl4SW50ZXJydXB0c0VuYWJsZWQgPSBwZFRSVUU7CisJCQl9CisJCQlweFRocmVhZHNbIGxJbmRleCBdLnV4Q3JpdGljYWxOZXN0aW5nID0gMDsKKyAgICAgICAgICAgIFBPUlRfVU5MT0NLKCBweFRocmVhZHNbIGxJbmRleF0udGhyZWFkU2xlZXBNdXRleCApOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBhZGQgYSB0aHJlYWQgdG8gdGhlIGxpc3QKKyAqLwordm9pZCB2UG9ydEFkZFRhc2tIYW5kbGUoIHZvaWQgKnB4VGFza0hhbmRsZSApCit7Citwb3J0TE9ORyBsSW5kZXg7CisKKwlweFRocmVhZHNbIGxJbmRleE9mTGFzdEFkZGVkVGFzayBdLmhUYXNrID0gKCB4VGFza0hhbmRsZSApcHhUYXNrSGFuZGxlOworICAgICAgICAKKwlmb3IgKCBsSW5kZXggPSAwOyBsSW5kZXggPCBNQVhfTlVNQkVSX09GX1RBU0tTOyBsSW5kZXgrKyApCisJeworCQlpZiAoIHB4VGhyZWFkc1sgbEluZGV4IF0uaFRocmVhZCA9PSBweFRocmVhZHNbIGxJbmRleE9mTGFzdEFkZGVkVGFzayBdLmhUaHJlYWQgKQorCQl7CisJCQlpZiAoIHB4VGhyZWFkc1sgbEluZGV4IF0uaFRhc2sgIT0gcHhUaHJlYWRzWyBsSW5kZXhPZkxhc3RBZGRlZFRhc2sgXS5oVGFzayApCisJCQl7CisjaWZkZWYgREVCVUdfU0NIRURVTEVSCisgICAgICAgICAgICAgICAgcHJpbnRmKCJEZWxldGluZyB0aHJlYWQgd2VpcmRseSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXB4VGhyZWFkc1sgbEluZGV4IF0uaFRocmVhZCk7CisjZW5kaWYKKwkJCQlweFRocmVhZHNbIGxJbmRleCBdLmhUaHJlYWQgPSAoIHB0aHJlYWRfdCApTlVMTDsKKwkJCQlweFRocmVhZHNbIGxJbmRleCBdLmhUYXNrID0gTlVMTDsKKwkJCQlweFRocmVhZHNbIGxJbmRleCBdLnV4Q3JpdGljYWxOZXN0aW5nID0gMDsKKyAgICAgICAgICAgICAgICBQT1JUX1VOTE9DSyggcHhUaHJlYWRzWyBsSW5kZXhdLnRocmVhZFNsZWVwTXV0ZXggKTsKKwkJCX0KKwkJfQorCX0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIGZpbmQgb3V0IHN5c3RlbSBzcGVlZAorICovCit2b2lkIHZQb3J0RmluZFRpY2tzUGVyU2Vjb25kKCB2b2lkICkKK3sKKwkvKiBOZWVkcyB0byBiZSByZWFzb25hYmx5IGhpZ2ggZm9yIGFjY3VyYWN5LiAqLworCXVuc2lnbmVkIGxvbmcgdWxUaWNrc1BlclNlY29uZCA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCVBPUlRfUFJJTlQoICJUaW1lciBSZXNvbHV0aW9uIGZvciBSdW4gVGltZVN0YXRzIGlzICVsZCB0aWNrcyBwZXIgc2Vjb25kLlxuIiwgdWxUaWNrc1BlclNlY29uZCApOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdGltZXIgc3R1ZmYKKyAqLwordW5zaWduZWQgbG9uZyB1bFBvcnRHZXRUaW1lclZhbHVlKCB2b2lkICkKK3sKK3N0cnVjdCB0bXMgeFRpbWVzOworCXVuc2lnbmVkIGxvbmcgdWxUb3RhbFRpbWUgPSB0aW1lcyggJnhUaW1lcyApOworCS8qIFJldHVybiB0aGUgYXBwbGljYXRpb24gY29kZSB0aW1lcy4KKwkgKiBUaGUgdGltZXIgb25seSBpbmNyZWFzZXMgd2hlbiB0aGUgYXBwbGljYXRpb24gY29kZSBpcyBhY3R1YWxseSBydW5uaW5nCisJICogd2hpY2ggbWVhbnMgdGhhdCB0aGUgdG90YWwgZXhlY3V0aW9uIHRpbWVzIHNob3VsZCBhZGQgdXAgdG8gMTAwJS4KKwkgKi8KKwlyZXR1cm4gKCB1bnNpZ25lZCBsb25nICkgeFRpbWVzLnRtc191dGltZTsKKworCS8qIFNob3VsZCBjaGVjayB1bFRvdGFsVGltZSBmb3IgYmVpbmcgY2xvY2tfdCBtYXggbWludXMgMS4gKi8KKwkodm9pZCl1bFRvdGFsVGltZTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnQuYy5kb2N1bWVudGF0aW9uLnR4dCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUG9zaXgvcG9ydC5jLmRvY3VtZW50YXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMmFiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnQuYy5kb2N1bWVudGF0aW9uLnR4dApAQCAtMCwwICsxLDE4OCBAQAorRmlsZTogcG9ydC5jLmRvY3VtZW50YXRpb24udHh0CitBdXRob3I6IENvcnZ1cyBDb3JheAorRGVzYzogRGVzY3JpcHRpb24gb2YgcG9ydC5jIEZ1bmN0aW9ucyBhbmQgRGlyZWN0aW9ucyBhYm91dCBwb3J0aW5nLgorU2VlIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gZWJvb2sgZm9yIGRldGFpbHMuCisKKworRnJlZVJUT1MgaXMgYW4gYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHJlYWwgdGltZSBvcGVyYXRpbmcgc3lzdGVtLgorTW9zdCBhcmNoaXRlY3R1cmUgZGVwZW5kYW50IGNvZGUgc2l0cyBpbiBhIHNpbmdsZSBmaWxlOiBwb3J0LmMKK0FyY2hpdGVjdHVyZSBkZXBlbmRhbnQgZGVmaW5pdGlvbnMgc2l0IGluOiBwb3J0bWFjcm8uaAorCitPdGhlciBpbXBvcnRhbnQgZmlsZXM6CisKK1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYWRfMy5jIC0gbWVtb3J5IG1hbmFnZW1lbnQgLSB2ZXJ5IHNpbXBsZS4gUHJvdmlkZXMKK2Z1bmN0aW9ucyBsaWtlIG1hbGxvYyBhbmQgZnJlZSAtIHZlcnkgZWFzeSB0byBtYWtlIGEgd3JhcHBlciBmb3Igb24gYW55IHN5c3RlbQordGhhdCBwcm92aWRlcyBtZW1vcnkgbWFuYWdlbWVudC4KKworRnJlZVJUT1MgaGFzIGludGVybmFsIHNjaGVkdWxpbmcuIFRoZSByZWFsIHRpbWUgc2NoZWR1bGVyIHNpdHMgaW4gU291cmNlL3Rhc2suYyBhbmQgY2FsbHMgbG93IGxldmVsIGZ1bmN0aW9ucyBvZiBwb3J0LmMgZm9yIHRocmVhZCBtYW5hZ2VtZW50LgorCitGb3IgdGhhdCBwb3J0LmMgbmVlZHMgdG8gcHJvdmlkZSBmdW5jdGlvbnMgdG8gc3dpdGNoIGJldHdlZW4gdGhyZWFkcyBvbgorcmVxdWVzdCwgYXMgd2VsbCBhcyBhIHRpY2sgaGFuZGxlciB0aGF0IHByZWVtcHRzIHRocmVhZHMgb24gYSBwZXJpb2RpYyBiYXNpcy4KKworT25seSBvbmUgRnJlZVJUT1MgdGhyZWFkIGlzIGFjdGl2ZSBhdCBhbnkgdGltZSEKKworCitwb3J0LmMgcHJvdmlkZXMgdGhlIEFQSSBkZWZpbmVkIGluIHBvcnRtYWNyby5oLgorCitPbmx5IGEgc3Vic2V0IG9mIHRoZSBmdW5jdGlvbnMgaXMgZXhwbGFpbmVkIGhlcmUgKHdpdGggdGhlIG5hbWluZyBmcm9tIHRoZQorcG9zaXggcG9ydC4gVGhlaXIgbWFjcm9zIGFyZSBzb21ldGltZXMgbmFtZWQgYSBiaXQgZGlmZmVyZW50KQorCisKK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKHZvaWQpOworCitUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBhIHRocmVhZCBlbnRlcnMgYSAiY3JpdGljYWwgc2VjdGlvbiIuCitJbiBhIGNyaXRpY2FsIHNlY3Rpb25zIHRoZSB0aHJlYWQgbXVzdCBub3QgYmUgcHJlZW1wdGVkLgorCisoVG8gcHJlZW1wdCBhIHRocmVhZCBtZWFucyB0byBoYWx0IGl0cyBleGVjdXRpb24gd2hlbiBhIHRpbWVyIGludGVycnVwdCBjb21lcworaW4sIGFuZCBnaXZlIGV4ZWN1dGlvbiB0byBhbm90aGVyIHRocmVhZCkKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGluY3JlYXNlIGEgY291bnRlciBmb3IgdGhhdCB0aHJlYWQsIHNpbmNlIHNldmVyYWwKKyJDcml0aWNhbCBTZWN0aW9ucyIgY291bGQgYmUgY2FzY2FkZWQuIE9ubHkgaWYgdGhlIG91dGVybW9zdCBjcml0aWNhbCBzZWN0aW9uCitpcyBleGl0ZWQsIGlzIHByZWVtdGlvbiBhbGxvd2VkIGFnYWluLgorCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKHZvaWQpOworVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgYSB0aHJlYWQgbGVhdmVzIGEgImNyaXRpY2FsIHNlY3Rpb24iLgorSWYgYSB0aHJlYWQgbGVhdmVzIHRoZSBvdXRlcm1vc3QgY3JpdGljYWwgc2VjdGlvbiwgdGhlIHNjaGVkdWxlciBpcyBhbGxvd2VkIHRvCitwcmVlbXB0IGl0IG9uIHRpbWVyIGludGVycnVwdCAob3Igb3RoZXIgaW50ZXJydXB0cykKKworCit2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0cyh2b2lkKTsKK3ZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0cyh2b2lkKTsKKworZnVuY3Rpb25zIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLiBPbiAicmVhbCBzeXN0ZW1zIiB0aGlzIG1lYW5zIGFsbAoraW50ZXJydXB0cyBpbmNsdWRpbmcgSU8uIFdoZW4gInNpbXVsYXRpbmciIHRoaXMgbWVhbnMgdGhlIHRpY2sgaGFuZGxlci8gdGltZXIKKy8gdGltZXIgaW50ZXJydXB0LiBUaGUgdGljayBoYW5kbGVyIGlzIHN1cHBvc2VkIHRvIG5vdCBkbyBhbnl0aGluZyBpZiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KKworCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLAorcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKTsKKworVXNlZCB0byBpbml0aWFsaXplIGEgbmV3IHRocmVhZC4gVGhlIHN0YWNrIG1lbW9yeSBhcmVhLCBjb21tYW5kIGxpbmUKK3BhcmFtZXRlcnMgZm9yIHRoaXMgdGFzayBhbmQgdGhlIGVudHJ5IGZ1bmN0aW9uIChweENvZGUpIGFyZSBnaXZlbgorCitUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGluaXRpYWxpemUgdGhlIG5ldyB0YXNrL3RocmVhZCwgYnV0IHN1c3BlbmQgaXQKK2ltbWVkaWF0ZWx5LiBJdCBpcyBvbmx5IHRvIGJlIGV4ZWN1dGVkIGxhdGVyIGlmIHRoZSBzY2hlZHVsZXIgc2F5cyBzby4KKworcmV0dXJucyBweFRvcE9mU3RhY2sgaWYgc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgorCitUSElTIFdJTEwgQkUgVEhFIEZJUlNUIEZVTkNUSU9OIEZyZWVSVE9TIENBTExTLgorVGhlIGZpcnN0IHRocmVhZCB0byBiZSBjcmVhdGVkIGlzIGxpa2VseSB0aGUgaWRsZSB0aHJlYWQuIEF0IHRoaXMgdGltZSB0aGUKK3NjaGVkdWxlciBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQuIFRoZXJlZm9yZSBpdCdzIGltcG9ydGFudCB0byBzdGFydCBhbGwKK3RocmVhZHMgaW4gc3VzcGVuZGVkIHN0YXRlIQorCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKHZvaWQpOworCitOZWVkcyB0byBlbmQgdGhlIHNjaGVkdWxlciAoYW5kIGFzIHN1Y2ggYWxsIFRhc2tzL3RocmVhZHMpIFRoaXMgbWVhbnMgRnJlZVJUT1MKK3Rlcm1pbmF0ZXMgLSBhcyBpbiAoc2ltdWxhdGVkKSBzeXN0ZW0gc2h1dGRvd24uCisKKworcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKHZvaWQpOworCitUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIHVudGlsIHNvbWVvbmUgKGFub3RoZXIgdGhyZWFkKSBjYWxscwordlBvcnRFbmRTY2hlZHVsZXIoKS4gWW91IGNhbiBzZXQgdXAgeW91ciB0aW1lciBhbmQgdGljayBoYW5kbGVyIGhlcmUgYW5kIHN0YXJ0Cit0aGUgZmlyc3QgdGhyZWFkLiBUaGVuIGRvIHdoYXQgYSBzY2hlZHVsZXIgZG9lcyAobWFuYWdlIHRocmVhZHMpCisKKwordlBvcnRZaWVsZCgpCisKK1NvbWV0aW1lcyB0aHJlYWRzIGdvIHNsZWVwaW5nIG9uIHB1cnBvc2UgKGZvciBleGFtcGxlIGR1cmluZyBvbmUgb2YgRnJlZVJUT1MKK3N5c3RlbSBjYWxscyAtIGluY2x1ZGluZyBzbGVlcCgpICkKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIHNlbmQgdGhlIHRocmVhZCB0aGF0IGNhbGxzIGl0IGludG8gc3VzcGVuZGVkIHN0YXRlIGFuZAorbm90IHJldHVybiB1bnRpbCB0aGUgc2NoZWR1bGVyIGdpdmVzIGJhY2sgZXhlY3V0aW9uIHRvIHRoaXMgdGhyZWFkLgorCisKKz09PT09PT09PT09CitUaGUgc2NoZWR1bGVyLgorCitXaGF0IHlvdXIgc2NoZWR1bGVyIG5lZWRzIHRvIGRvOgorCitCYXNpY2FsbHkgd2hhdCB5b3VyIHNlbGYgd3JpdHRlbiBzY2hlZHVsZXIgaXMgYWxsb3dlZCB0byBkbyBpcyB0aGUgImRpcnR5Cit3b3JrIiBmb3IgdGhlIGhpZ2ggbGV2ZWwgc2NoZWR1bGVyIGxvZ2ljIHByb3ZpZGVkIGJ5IEZyZWVSVE9TIHRhc2suYworCitUaGUgc2NoZWR1bGVyIGlzIHN1cHBvc2VkIHRvIHJ1biBhIHRpbWVyIGludGVycnVwdC90aWNrIGhhbmRsZXIgdGhhdCBnZXRzCitjYWxsZWQgZXZlcnkgcG9ydFRJQ0tfUkFURV9NSUNST1NFQ09ORFMgbWljcm9zZWNvbmRzLgorVGhhdCB2YWx1ZSBpcyBkZWZpbmVkIHNvbWV3aGVyZSBpbiBPcGVuUGlsb3QgYW5kIGhhcyB0byBiZSBleGFjdCBhcyB3ZWxsIGFzCit0aGUgc2FtZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KKworSWYgeW91IGNhbm5vdCBzZXQgdXAgYSB0aW1lciB3aXRoIHRoYXQgYWNjdXJhY3kgeW91IGFyZSBzY3Jld2VkIQorCitBbnl3YXkuIEV2ZXJ5IHRpbWUgdGhlIHRpbWVyIHRpY2sgaGFwcGVucywgeW91IGhhdmUgdG8KKworLSBjaGVjayB3aGV0aGVyIHlvdSBhcmUgYWxsb3dlZCB0byBleGVjdXRlIHRoZSB0aWNrIGhhbmRsZXIuCisgIElmIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZC9vciB0aGUgdGhyZWFkIGlzIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgdGhlCisgIHRpY2sgaGFuZGxlciBzaG91bGQgZG8gbm90aGluZworCistIFRlbGwgRnJlZVJUT1MgdGhhdCB0aGUgdGljayBoYXMgaGFwcGVuZWQKKyAgSW5jcmVtZW50IHRoZSBUaWNrIENvdW50IHVzaW5nIHRoZSBGcmVlUlRPUyBmdW5jdGlvbgorICB2VGFza0luY3JlbWVudFRpY2soKTsKKworLSBJZiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQgKGFuZCBpbiBPcGVuUGlsb3QgaXQgaXMhKQorICBUZWxsIHRoZSBoaWdoIGxldmVsIFNjaGVkdWxlciBvZiBGcmVlUlRPUyB0byBkbyBpdHMgbWFnaWMsIHVzaW5nIHRoZQorICBmdW5jdGlvbgorICB2VGFza1N3aXRjaENvbnRleHQoKTsKKworLSBZb3UgY2FuIGZpbmQgb3V0IHdoaWNoIHRocmVhZCBpcyBTVVBQT1NFRCB0byBiZSBydW5uaW5nIHdpdGggdGhlIGZ1bmN0aW9uCisgIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKTsKKworLSBJZiB0aGlzIGlzIGZvciBzb21lIHJlYXNvbiBub3QgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZCwgU1VTUEVORCB0aGF0CisgIHRocmVhZCB3aXRoIHdoYXRldmVyIG1ldGhvZCBwb3NzaWJsZSAoc2lnbmFscywgZXZlbnRzLCBvcGVyYXRpbmcgc3lzdGVtCisgIHRocmVhZC5zdXNwZW5kKCkgLSBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoYXQgaW4gUXQuCisKKy0gTWFrZSB0aGUgdGhyZWFkIHJldHVybmVkIGJ5IHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSByZXN1bWUgb3BlcmF0aW9uIGFzCisgIG5vcm1hbC4KKworLSBNYWtlIHN1cmUgdGhhdCB3aGVuIHlvdSByZXR1cm4gZnJvbSB0aGUgdGljayBoYW5kbGVyLCBleGFjdGx5IG9uZSB0aHJlYWQgaXMKKyAgcnVubmluZyBhbmQgdGhhdCBpcyB0aGUgb25lIGJ5IHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSBhbmQgYWxsIG90aGVycworICBhcmUgc3VzcGVuZGVkIQorCisKKworT24gdG9wIG9mIHRoYXQsIHRocmVhZHMgY2FuIHN1c3BlbmQgdGhlbXNlbHZlcyBqdXN0IGxpa2UgdGhhdC4gVGhhdCBoYXBwZW5zCitldmVyeSB0aW1lIHRoZXkgY2FsbCBhbnkgYmxvY2tpbmcgRnJlZVJUT1MgZnVuY3Rpb24uCisKK1RoZXkgZG8gdGhhdCB3aXRoIGFib3ZlIG1lbnRpb25lZCBmdW5jdGlvbgorCit2UG9ydFlpZWxkKCkKKworV2hlbiB2UG9ydFlpZWxkIGlzIGNhbGxlZCB5b3VyIHNjaGVkdWxlciBtdXN0OgorCistIFRlbGwgdGhlIGhpZ2ggbGV2ZWwgU2NoZWR1bGVyIG9mIEZyZWVSVE9TIHRvIGRvIGl0cyBtYWdpYywgdXNpbmcgdGhlCisgIGZ1bmN0aW9uCisgIHZUYXNrU3dpdGNoQ29udGV4dCgpOworCistIFlvdSBjYW4gdGhlbiBmaW5kIG91dCB3aGljaCB0aHJlYWQgaXMgU1VQUE9TRUQgdG8gYmUgcnVubmluZyB3aXRoIHRoZSBmdW5jdGlvbgorICB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCk7CisKKy0gTWFrZSBzdXJlIHRoYXQgdGhlIHRocmVhZCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gU1VTUEVORFMgYW5kIHRoZSB0aHJlYWQKKyAgcmV0dXJuZWQgYnkgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpIGdldHMgZXhlY3V0ZWQuIEJlIGF3YXJlIHRoYXQgdGhleQorICBjb3VsZCBiZSB0aGUgc2FtZSBpbiB3aGljaCBjYXNlIHZQb3J0WWllbGQgZG9lcyBleGFjdGx5IE5PVEhJTkchCisKKy0gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gKHNpbmNlIHRoZSBjdXJyZW50IHRocmVhZCBpcyBzZW50IHRvIHNsZWVwKQorICB1bnRpbCB0aGUgc2NoZWR1bGVyIG1ha2VzIGl0IHdha2UgdXAgLSBlaXRoZXIgYnkgdGhlIHRpY2sgaGFuZGxlciwgb3IgYnkKKyAgYW5vdGhlciB0aHJlYWQgY2FsbGluZyB2UG9ydFlpZWxkKCkuCisKKy0gU28gaXQgbXVzdCBub3QgZXZlciByZXR1cm4gdW50aWwgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpIHNheXMgdGhlCisgIGNhbGxpbmcgdGhyZWFkIGlzIHRoZSBjdXJyZW50IHRhc2sgaGFuZGxlLgorCistIFRoZW4gaXQgcmV0dXJucyB0byB0aGUgY2FsbGVyLgorIAorCisKKz09PT09CisKK1doYXQgZW10aG9kIHlvdSB1c2UgdG8gc2VuZCB0aHJlYWRzL3Rhc2tzIHRvIHNsZWVwIGFuZCB3YWtlIHRoZW0gdXAgYWdhaW4gaXMKK3VwIHRvIHlvdS4KKworVGhlIHBvc2l4IGltcGxlbWVudGF0aW9uIHVzZXMgc2lnbmFscyBhbmQgYSBzaWduYWwgaGFuZGxlciBpbiBlYWNoIHRocmVhZCB0aGF0CitzbGVlcHMgdW50aWwgYSByZXN1bWUgc2lnbmFsIGlzIHJlY2VpdmVkCisKK1RoZSBuYXRpdmUgU1RNMzIgaW1wbGVtZW50YXRpb24gbWFudWFsbHkgc3dpdGNoZXMgY29udGV4dHMgYnkgYW5kIHVzZXMgYWN0dWFsCitzeXN0ZW0gaW50ZXJydXB0cworKHNvIGRvZXMgdGhlIG5hdGl2ZSB4ODYgaW1wbGVtZW50YXRpb24pCisKK1RoZSBuYXRpdmUgV2luMzIgaW1wbGVtZW50YXRpb24gdXNlcyB3aW4zMiBBUEkgY2FsbHMgdG8gbWFuaXB1bGF0ZSB3aW5kb3dzCit0aHJlYWRzICh3aW5kb3dzIGFjdHVhbGx5IHByb3ZpZGVzIGEgY2FsbCB0byByZW1vdGUtc3VzcGVuZCBhbmQgcmVzdW1lIGEKK3RocmVhZCAtIHBvc2l4IGRvZXNuJ3QpCisKK0kgaGF2ZSBubyBjbHVlIHdoYXQgbWVhc3VyZXMgZm9yIHRocmVhZCBjb250cm9sIGFuZCBzdXNwZW5zaW9uL2ludGVycnVwdGlvbiBRdAorb2ZmZXJzLiAoSSBob3BlIHRoZXJlIGFyZSBzb21lKQorCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnQuYy5uZXN0bm90ZXMudHh0IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Qb3NpeC9wb3J0LmMubmVzdG5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2VmYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9Qb3NpeC9wb3J0LmMubmVzdG5vdGVzLnR4dApAQCAtMCwwICsxLDExIEBACitOb3RlcyBmcm9tIE5lc3QKKworRGVidWdnaW5nIGFuZCBzaWduYWxzCis9PT09PT09PT09PT09PT09PT09PT0KK1RoZSBQT1NJWCBwb3J0IHVzZXMgU0lHVVNSMSB0byBzaWduYWwgYSB0aHJlYWQgdG8gc2xlZXAuICBCZSBzdXJlIHRvIHR1cm4gb2ZmIGRlYnVnIGJyZWFrcyBvbiB0aGVzZSBzaWduYWxzIGJ5IGlzc3VpbmcgdGhlIGZvbGxvd2luZzoKKworSWYgdXNpbmcgR0RCCitoYW5kbGUgU0lHVVNSMSBub3N0b3Agbm9pZ25vcmUgbm9wcmludCAKKworSWYgdXNpbmcgTExEQgorcHJvY2VzcyBoYW5kbGUgU0lHVVNSMSAtbiB0cnVlIC1wIHRydWUgLXMgZmFsc2UKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUG9zaXgvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWMyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1Bvc2l4L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTU5IEBACisvKg0KKwlGcmVlUlRPUy5vcmcgVjUuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgUmljaGFyZCBCYXJyeS4NCisNCisJVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TLm9yZyBkaXN0cmlidXRpb24uDQorDQorCUZyZWVSVE9TLm9yZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkDQorCWJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG1vZGlmaWVkIGJ5IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorDQorCUZyZWVSVE9TLm9yZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAlidXQgV0lUSE9VVA0KKwlBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3INCisJRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKwltb3JlIGRldGFpbHMuDQorDQorCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nDQorCXdpdGggRnJlZVJUT1Mub3JnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5DQorCVRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EuDQorDQorCUEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gZGlzdHJpYnV0ZSBhDQorCWNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUy5vcmcgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvIHByb3ZpZGUNCisJdGhlIHNvdXJjZSBjb2RlIGZvciBhbnkgcHJvcHJpZXRhcnkgY29tcG9uZW50cy4gIFNlZSB0aGUgbGljZW5zaW5nIHNlY3Rpb24NCisJb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIGZ1bGwgZGV0YWlscy4NCisNCisNCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKwkqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorCSogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KKwkqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCisJKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQorCSogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KKwkqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKwkxIHRhYiA9PSA0IHNwYWNlcyENCisNCisJUGxlYXNlIGVuc3VyZSB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWxldmFudCBwb3J0IHNlY3Rpb25zIG9mIHRoZQ0KKwlvbmxpbmUgZG9jdW1lbnRhdGlvbi4NCisNCisJaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorCWNvbnRhY3QgZGV0YWlscy4NCisNCisJaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCisJY3JpdGljYWwgc3lzdGVtcy4NCisNCisJaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKwlsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWludA0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVuc2lnbmVkIGxvbmcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTUlDUk9TRUNPTkRTCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMDAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJNA0KKyNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkKCkNCisNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZQb3J0WWllbGRGcm9tSVNSKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0cyggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0cyggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpCSggdlBvcnREaXNhYmxlSW50ZXJydXB0cygpICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpCSggdlBvcnRFbmFibGVJbnRlcnJ1cHRzKCkgKQ0KKw0KK2V4dGVybiBwb3J0QkFTRV9UWVBFIHhQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCBwb3J0QkFTRV9UWVBFIHhNYXNrICk7DQorDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCXhQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJdlBvcnRDbGVhckludGVycnVwdE1hc2soeCkNCisNCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXBvcnRTRVRfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpDQorDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIGEsIGIgKQ0KKw0KK2V4dGVybiB2b2lkIHZQb3J0Rm9yY2libHlFbmRUaHJlYWQoIHZvaWQgKnB4VGFza1RvRGVsZXRlICk7DQorI2RlZmluZSB0cmFjZVRBU0tfREVMRVRFKCBweFRhc2tUb0RlbGV0ZSApCQl2UG9ydEZvcmNpYmx5RW5kVGhyZWFkKCBweFRhc2tUb0RlbGV0ZSApDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRBZGRUYXNrSGFuZGxlKCB2b2lkICpweFRhc2tIYW5kbGUgKTsNCisjZGVmaW5lIHRyYWNlVEFTS19DUkVBVEUoIHB4TmV3VENCICkJCQl2UG9ydEFkZFRhc2tIYW5kbGUoIHB4TmV3VENCICkNCisNCisvKiBQb3NpeCBTaWduYWwgZGVmaW5pdGlvbnMgdGhhdCBjYW4gYmUgY2hhbmdlZCBvciByZWFkIGFzIGFwcHJvcHJpYXRlLiAqLw0KKyNkZWZpbmUgU0lHX1NVU1BFTkQJCQkJCVNJR1VTUjENCisNCisvKiBNYWtlIHVzZSBvZiB0aW1lcyhtYW4gMikgdG8gZ2F0aGVyIHJ1bi10aW1lIHN0YXRpc3RpY3Mgb24gdGhlIHRhc2tzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0RmluZFRpY2tzUGVyU2Vjb25kKCB2b2lkICk7DQorI3VuZGVmIHBvcnRDT05GSUdVUkVfVElNRVJfRk9SX1JVTl9USU1FX1NUQVRTDQorI2RlZmluZSBwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUygpCXZQb3J0RmluZFRpY2tzUGVyU2Vjb25kKCkJCS8qIE5vdGhpbmcgdG8gZG8gYmVjYXVzZSB0aGUgdGltZXIgaXMgYWxyZWFkeSBwcmVzZW50LiAqLw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIHVsUG9ydEdldFRpbWVyVmFsdWUoIHZvaWQgKTsNCisjdW5kZWYgcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFDQorI2RlZmluZSBwb3J0R0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoKQkJCXVsUG9ydEdldFRpbWVyVmFsdWUoKQkJCS8qIFF1ZXJ5IHRoZSBTeXN0ZW0gdGltZSBzdGF0cyBmb3IgdGhpcyBwcm9jZXNzLiAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUlg2MDAvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWIzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnQuYwpAQCAtMCwwICsxLDM5NyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTSDJBIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBMaWJyYXJ5IGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJzdHJpbmcuaCINCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2luY2x1ZGUgImlvZGVmaW5lLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZSANCitQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfUFNXICAgICAoICggcG9ydFNUQUNLX1RZUEUgKSAweDAwMDMwMDAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0ZQU1cgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDEwMCApDQorDQorLyogVGhlc2UgbWFjcm9zIGFsbG93IGEgY3JpdGljYWwgc2VjdGlvbiB0byBiZSBhZGRlZCBhcm91bmQgdGhlIGNhbGwgdG8NCit2VGFza0luY3JlbWVudFRpY2soKSwgd2hpY2ggaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGludGVycnVwdHMgYXQgdGhlIGtlcm5lbCANCitwcmlvcml0eSAtIGllIGEga25vd24gcHJpb3JpdHkuICBUaGVyZWZvcmUgdGhlc2UgbG9jYWwgbWFjcm9zIGFyZSBhIHNsaWdodCANCitvcHRpbWlzYXRpb24gY29tcGFyZWQgdG8gY2FsbGluZyB0aGUgZ2xvYmFsIFNFVC9DTEVBUl9JTlRFUlJVUFRfTUFTSyBtYWNyb3MsIA0KK3doaWNoIHdvdWxkIHJlcXVpcmUgdGhlIG9sZCBJUEwgdG8gYmUgcmVhZCBmaXJzdCBhbmQgc3RvcmVkIGluIGEgbG9jYWwgdmFyaWFibGUuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpIAlfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJJTAiIDo6ImkiKGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSkgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpIAlfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJJTAiIDo6ImkiKGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIHdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0DQorICogYWNjZXNzIHRvIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4gDQorICovDQorc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKw0KKy8qDQorICogU29mdHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuICBQZXJmb3JtcyB0aGUgYWN0dWFsIGNvbnRleHQgc3dpdGNoIChzYXZpbmcgYW5kDQorICogcmVzdG9yaW5nIG9mIHJlZ2lzdGVycykuICBXcml0dGVuIGluIGFzbSBjb2RlIGFzIGRpcmVjdCByZWdpc3RlciBhY2Nlc3MgaXMNCisgKiByZXF1aXJlZC4NCisgKi8NCit2b2lkIHZTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQorDQorLyoNCisgKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFuZGxlci4NCisgKi8NCit2b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCQ0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorCQ0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGZmZmZmZmZmOwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwl9DQorCSNlbmRpZg0KKwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkJCQkNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogQWNjdW11bGF0b3IuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgLyogQWNjdW11bGF0b3IuICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisJLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCisJaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCisJew0KKwkJLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCisJCXRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0byANCisJCXVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCisJCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLwkJDQorCQlfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KKwkJDQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCisJCV9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCQ0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKwkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCQlwcnZTdGFydEZpcnN0VGFzaygpOw0KKwl9DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoCQ0KKwkJLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQorCQlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJCUp1c3QgZW5zdXJlIHRoZSBjdXJyZW50IHN0YWNrIGlzIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwkJIlNFVFBTVwkJVQkJCQkJCVxuIiBcDQorDQorCQkvKiBPYnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFjayBhc3NvY2lhdGVkIHdpdGggd2hpY2ggZXZlciB0YXNrIA0KKwkJcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJXG4iIFwNCisJCSJNT1YuTAkJW1IxNV0sIFIxNQkJCQlcbiIgXA0KKwkJIk1PVi5MCQlbUjE1XSwgUjAJCQkJXG4iIFwNCisNCisJCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5IA0KKwkJcHhDdXJyZW50VENCLiAqLw0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCisJCQ0KKwkJLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorCSAgICAiTVZUQUNMTwlSMTUgCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCisJCQ0KKwkJLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKwkgICAgIk1WVEFDSEkJUjE1IAkJCQkJXG4iIFwNCisJICAgICJQT1AJCVIxNQkJCQkJCVxuIiBcDQorCQkNCisJCS8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyB3b3JkLiAqLw0KKwkgICAgIk1WVEMJCVIxNSwgRlBTVyAJCQkJXG4iIFwNCisJCQ0KKwkJLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCisJICAgICJQT1BNCQlSMS1SMTUgCQkJCQlcbiIgXA0KKwkJDQorCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCSAgICAiUlRFCQkJCQkJCQlcbiIgXA0KKwkgICAgIk5PUAkJCQkJCQkJXG4iIFwNCisJICAgICJOT1AJCQkJCQkJCVxuIg0KKwkpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJCSJTRVRQU1cJCUkJCQkJCQkJXG4iIFwNCisNCisJCS8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCisJCXRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQgZnJvbSB0aGUgaW50ZXJydXB0IHN0YWNrIHRvIHRoZSB1c2VyIHN0YWNrLiAgDQorCQ0KKwkJUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCisJDQorCQkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCQkiTVZGQwkJVVNQLCBSMTUJCQkJCVxuIiBcDQorCQ0KKwkJLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KKwkJIlNVQgkJIzEyLCBSMTUJCQkJCVxuIiBcDQorCQkiTVZUQwkJUjE1LCBVU1AJCQkJCVxuIiBcDQorCQ0KKwkJLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MsIFIxNSwgdGhlbiBQQywgdGhlbiBQU1cuICovDQorCQkiTU9WLkwJCVsgUjAgXSwgWyBSMTUgXQkJCQlcbiIgXA0KKwkJIk1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0JCQlcbiIgXA0KKwkJIk1PVi5MCQk4WyBSMCBdLCA4WyBSMTUgXQkJCVxuIiBcDQorDQorCQkvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQorCQkiQURECQkjMTIsIFIwCQkJCQkJXG4iIFwNCisJDQorCQkvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQorCQkiU0VUUFNXCQlVCQkJCQkJCVxuIiBcDQorDQorCQkvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KKwkJIlBVU0hNCQlSMS1SMTQJCQkJCQlcbiIgXA0KKwkNCisJCS8qIFNhdmUgdGhlIEZQU1cgYW5kIGFjY3VtdWxhdG9yLiAqLw0KKwkJIk1WRkMJCUZQU1csIFIxNQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WRkFDSEkgCVIxNQkJCQkJCQlcbiIgXA0KKwkJIlBVU0guTAkJUjE1CQkJCQkJCVxuIiBcDQorCQkNCisJCS8qIE1pZGRsZSB3b3JkLiAqLw0KKwkJIk1WRkFDTUkJUjE1CQkJCQkJCVxuIiBcDQorCQkNCisJCS8qIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuICovDQorCQkiU0hMTAkJIzE2LCBSMTUJCQkJCVxuIiBcDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCisNCisJCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJCVxuIiBcDQorCQkiTU9WLkwJCVsgUjE1IF0sIFIxNQkJCQlcbiIgXA0KKwkJIk1PVi5MCQlSMCwgWyBSMTUgXQkJCQkJXG4iIFwNCisJCQkNCisJCS8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgaXMgc2V0IHRvIHRoZSBzeXNjYWxsIHByaW9yaXR5IHdoaWxlIHRoZSBrZXJuZWwNCisJCXN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwkJIk1WVElQTAkJJTAgCQkJCQkJCVxuIiBcDQorDQorCQkvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQorCQkiQlNSLkEJCV92VGFza1N3aXRjaENvbnRleHQJCQlcbiIgXA0KKw0KKwkJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KKwkJIk1WVElQTAkJJTEJCQkJCQkJXG4iIFwNCisNCisJCS8qIExvYWQgdGhlIHN0YWNrIHBvaW50ZXIgb2YgdGhlIHRhc2sgdGhhdCBpcyBub3cgc2VsZWN0ZWQgYXMgdGhlIFJ1bm5pbmcNCisJCXN0YXRlIHRhc2sgZnJvbSBpdHMgVENCLiAqLw0KKwkJIk1PVi5MCQkjX3B4Q3VycmVudFRDQixSMTUJCQlcbiIgXA0KKwkJIk1PVi5MCQlbIFIxNSBdLCBSMTUJCQkJXG4iIFwNCisJCSJNT1YuTAkJWyBSMTUgXSwgUjAJCQkJCVxuIiBcDQorDQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KKwkJUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCisJCSJQT1AJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WVEFDTE8gCVIxNQkJCQkJCQlcbiIgXA0KKwkJIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQorCQkiTVZUQUNISSAJUjE1CQkJCQkJCVxuIiBcDQorCQkiUE9QCQlSMTUJCQkJCQkJXG4iIFwNCisJCSJNVlRDCQlSMTUsIEZQU1cJCQkJCVxuIiBcDQorCQkiUE9QTQkJUjEtUjE1CQkJCQkJXG4iIFwNCisJCSJSVEUJCQkJCQkJCQlcbiIgXA0KKwkJIk5PUAkJCQkJCQkJCVxuIiBcDQorCQkiTk9QCQkJCQkJCQkJICAiDQorCQk6OiAiaSIoY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZKSwgImkiKGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkpDQorCSk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KK3sNCisJLyogUmUtZW5hYmxlZCBpbnRlcnJ1cHRzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSggIlNFVFBTVwlJIiApOw0KKwkNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAgRW5zdXJlIElQTCBpcyBhdCB0aGUgbWF4IHN5c2NhbGwgdmFsdWUgZmlyc3QuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQorCXsNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOyANCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQorCQ0KKwkvKiBPbmx5IHNlbGVjdCBhIG5ldyB0YXNrIGlmIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkJdGFza1lJRUxEKCk7DQorCSNlbmRpZg0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit1bnNpZ25lZCBsb25nIHVsUG9ydEdldElQTCggdm9pZCApDQorew0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoIA0KKwkJIk1WRkMJUFNXLCBSMQkJCVxuIglcDQorCQkiU0hMUgkjMjQsIFIxCQkJXG4iCVwNCisJCSJSVFMJCQkJCSAgIg0KKwkpOw0KKwkNCisJLyogVGhpcyB3aWxsIG5ldmVyIGdldCBleGVjdXRlZCwgYnV0IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGNvbXBsYWluaW5nLiAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFNldElQTCggdW5zaWduZWQgbG9uZyB1bE5ld0lQTCApDQorew0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoIA0KKwkJIlBVU0gJUjUJCQkJXG4iIFwNCisJCSJNVkZDCVBTVywgUjUJCQlcbiIJXA0KKwkJIlNITEwJIzI0LCBSMQkJCVxuIiBcDQorCQkiQU5ECSMtMEYwMDAwMDFILCBSNSBcbiIgXA0KKwkJIk9SCQlSMSwgUjUJCQlcbiIgXA0KKwkJIk1WVEMJUjUsIFBTVwkJCVxuIiBcDQorCQkiUE9QCVI1CQkJCVxuIiBcDQorCQkiUlRTCQkJCQkgICINCisJICk7DQorfQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvUlg2MDAvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOGE2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucyAtIHRoZXNlIGFyZSBhIGJpdCBsZWdhY3kgYW5kIG5vdCByZWFsbHkgdXNlZCBub3csIG90aGVyIHRoYW4NCitwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOAkvKiBDb3VsZCBtYWtlIGZvdXIsIGFjY29yZGluZyB0byBtYW51YWwuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUoICJOT1AiICkNCisNCisvKiBUaGUgbG9jYXRpb24gb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3Rlci4gIFNvZnR3YXJlIGludGVycnVwdHMgdXNlDQordmVjdG9yIDI3LiAqLw0KKyNkZWZpbmUgcG9ydElUVV9TV0lOVFIJCQkoICggdW5zaWduZWQgY2hhciAqICkgMHgwMDA4NzJFMCApDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkqcG9ydElUVV9TV0lOVFIgPSAweDAxOyBwb3J0Tk9QKCk7IHBvcnROT1AoKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCk7IHBvcnROT1AoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQorDQorLyoNCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHRocm91Z2ggdGhlIHRhc2tFTlRFUl9DUklUSUNBTCgpDQorICogYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLg0KKyAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgCV9fYXNtIHZvbGF0aWxlICggIk1WVElQTAkjMCIgKTsNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisNCisvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCisNCisvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpOw0KKw0KKy8qIEFzIHRoaXMgcG9ydCBhbGxvd3MgaW50ZXJydXB0IG5lc3RpbmcuLi4gKi8NCit1bnNpZ25lZCBsb25nIHVsUG9ydEdldElQTCggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCB2UG9ydFNldElQTCggdW5zaWduZWQgbG9uZyB1bE5ld0lQTCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgdWxQb3J0R2V0SVBMKCk7IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgdlBvcnRTZXRJUEwoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDNkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0LmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU1QgU1RSNzV4IEFSTTcNCisgKiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiNzV4X3RiLmgiDQorI2luY2x1ZGUgIjc1eF9laWMuaCINCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgc3RhY2suICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisvKiBQcmVzY2FsZSB1c2VkIG9uIHRoZSB0aW1lciBjbG9jayB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWNrIHBlcmlvZC4gKi8NCisjZGVmaW5lIHBvcnRQUkVTQ0FMRSAyMA0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNldHVwIHRoZSBUQiB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKw0KKwkjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorCSNlbmRpZg0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRJU1JTdGFydEZpcnN0VGFzaygpOwkNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorRUlDX0lSUUluaXRUeXBlRGVmICBFSUNfSVJRSW5pdFN0cnVjdHVyZTsJDQorVEJfSW5pdFR5cGVEZWYgICAgICBUQl9Jbml0U3RydWN0dXJlOw0KKw0KKwkvKiBTZXR1cCB0aGUgRUlDIGZvciB0aGUgVEIuICovDQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsQ21kID0gRU5BQkxFOw0KKwlFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbCA9IFRCX0lSUUNoYW5uZWw7DQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsUHJpb3JpdHkgPSAxOw0KKwlFSUNfSVJRSW5pdCgmRUlDX0lSUUluaXRTdHJ1Y3R1cmUpOw0KKwkNCisJLyogU2V0dXAgdGhlIFRCIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCVRCX0luaXRTdHJ1Y3R1cmUuVEJfTW9kZSA9IFRCX01vZGVfVGltaW5nOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0NvdW50ZXJNb2RlID0gVEJfQ291bnRlck1vZGVfRG93bjsNCisJVEJfSW5pdFN0cnVjdHVyZS5UQl9QcmVzY2FsZXIgPSBwb3J0UFJFU0NBTEUgLSAxOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0F1dG9SZWxvYWQgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFBSRVNDQUxFICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJVEJfSW5pdCgmVEJfSW5pdFN0cnVjdHVyZSk7DQorCQ0KKwkvKiBFbmFibGUgVEIgVXBkYXRlIGludGVycnVwdCAqLw0KKwlUQl9JVENvbmZpZyhUQl9JVF9VcGRhdGUsIEVOQUJMRSk7DQorDQorCS8qIENsZWFyIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8NCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoVEJfSVRfVXBkYXRlKTsNCisNCisJLyogRW5hYmxlIFRCICovDQorCVRCX0NtZChFTkFCTEUpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0SVNSLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0SVNSLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjYmQ1YQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnRJU1IuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KKyAqIGNvbnRhaW5lZCBpbiBwb3J0LmMgIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQorICogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBoZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMNCisgKiBmdW5jdGlvbiBoZXJlLg0KKyAqLw0KK3ZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApDQorew0KKwkvKiBTaW1wbHkgc3RhcnQgdGhlIHNjaGVkdWxlci4gIFRoaXMgaXMgaW5jbHVkZWQgaGVyZSBhcyBpdCBjYW4gb25seSBiZQ0KKwljYWxsZWQgZnJvbSBBUk0gbW9kZS4gKi8NCisJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCVwNCisJIkxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJUjAsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovCVwNCisJLyogTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gKi8JCQkJCVwNCisJIkxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQlcblx0IglcDQorCSJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUgkJUjEsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJIkxETUZECUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTVNSCQlTUFNSLCBSMAkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLiAqLwkJCQlcDQorCSJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovCQkJCQkJCQkJXA0KKwkiTERSCQlMUiwgW0xSLCAjKzYwXQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUgKi8JXA0KKwkvKiBjb3JyZWN0IGFkZHJlc3MuICovCQkJCQkJCQkJCQkJXA0KKwkiU1VCUyBQQywgTFIsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKQ0KK3sNCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQsIHRoZW4gbG9vayBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgDQorCXRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkjZW5kaWYNCisJCQkNCisJLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOwkNCit9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBUaGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAgV2hlbg0KKyAqIFRIVU1CX0lOVEVSV09SSyBpcyBkZWZpbmVkIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zIGhlcmUgdG8NCisgKiBlbnN1cmUgYSBzd2l0Y2ggdG8gQVJNIG1vZGUuICBXaGVuIFRIVU1CX0lOVEVSV09SSyBpcyBub3QgZGVmaW5lZCB0aGVuDQorICogdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MgaW4gcG9ydG1hY3JvLmggLSBhcyBwZXIgb3RoZXIgcG9ydHMuDQorICovDQorI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKw0KKwl2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisJdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisNCisJdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCisJew0KKwkJYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCQkqLw0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCisJCQkNCisJdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KKwl7DQorCQlhc20gdm9sYXRpbGUgKCANCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJCSovCQ0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8JDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJCQkJKi8JDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8JDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCisNCisjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkJCQkJCQkqLw0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCANCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQorCQkJYXNtIHZvbGF0aWxlICggDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JDQorCQkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCQ0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwkNCisJCQkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCX0NCisJfQ0KK30NCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzMyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE3NiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KKy8qDQorICogVGhlIGludGVycnVwdCBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBBUk0gbW9kZS4gIFdoZW4NCisgKiBUSFVNQl9JTlRFUldPUksgaXMgZGVmaW5lZCB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucyBpbiANCisgKiBwb3J0SVNSLmMgdG8gZW5zdXJlIGEgc3dpdGNoIHRvIEFSTSBtb2RlLiAgV2hlbiBUSFVNQl9JTlRFUldPUksgaXMgbm90IA0KKyAqIGRlZmluZWQgdGhlbiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBoZXJlIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KKyAqLw0KKw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisNCisJZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwlleHRlcm4gdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCQ0KKyNlbHNlDQorDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQorCQkJDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQorDQorI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlcDQorewkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7CQkJCVwNCisJCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICkgCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NTA4YwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnQuYwpAQCAtMCwwICsxLDU4MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KKy8qIFRyaUNvcmUgc3BlY2lmaWMgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHRjMTc4Mi5oPg0KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8bWFjaGluZS9jaW50Lmg+DQorI2luY2x1ZGUgPG1hY2hpbmUvd2R0Y29uLmg+DQorDQorLyogS2VybmVsIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorI2luY2x1ZGUgImxpc3QuaCINCisNCisjaWYgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMA0KKwkjZXJyb3IgIlN0YWNrIGNoZWNraW5nIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBwb3J0LCBhcywgdW5saWtlIG1vc3QgcG9ydHMsIHRoZSBweFRvcE9mU3RhY2sgbWVtYmVyIG9mIHRoZSBUQ0IgaXMgY29uc3VtZWQgQ1NBLiAgQ1NBIHN0YXJ2YXRpb24sIGxvb3NlbHkgZXF1aXZhbGVudCB0byBzdGFjayBvdmVyZmxvdywgd2lsbCByZXN1bHQgaW4gYSB0cmFwIGV4Y2VwdGlvbi4iDQorCS8qIFRoZSBzdGFjayBwb2ludGVyIGlzIGFjY2Vzc2libGUgdXNpbmcgcG9ydENTQV9UT19BRERSRVNTKCBwb3J0Q1NBX1RPX0FERFJFU1MoIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrIClbIDAgXSApWyAyIF07ICovDQorI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyAqLw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFN5c3RlbSByZWdpc3RlciBEZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRTWVNURU1fUFJPR1JBTV9TVEFUVVNfV09SRAkJCQkJKCAweDAwMDAwOEZGVUwgKSAvKiBTdXBlcnZpc29yIE1vZGUsIE1QVSBSZWdpc3RlciBTZXQgMCBhbmQgQ2FsbCBEZXB0aCBDb3VudGluZyBkaXNhYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BSSVZJTEVHRURfUFJPR1JBTV9TVEFUVVNfV09SRAkJKCAweDAwMDAxNEZGVUwgKSAvKiBJTyBMZXZlbCAxLCBNUFUgUmVnaXN0ZXIgU2V0IDEgYW5kIENhbGwgRGVwdGggQ291bnRpbmcgZGlzYWJsZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9VTlBSSVZJTEVHRURfUFJPR1JBTV9TVEFUVVNfV09SRAkoIDB4MDAwMDEwRkZVTCApIC8qIElPIExldmVsIDAsIE1QVSBSZWdpc3RlciBTZXQgMSBhbmQgQ2FsbCBEZXB0aCBDb3VudGluZyBkaXNhYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BDWElfVVBQRVJfQ09OVEVYVF9XT1JECQkJCSggMHgwMEMwMDAwMFVMICkgLyogVGhlIGxvd2VyIDIwIGJpdHMgaWRlbnRpZnkgdGhlIENTQSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1lTQ09OCQkJCQkJCQkoIDB4MDAwMDAwMDBVTCApIC8qIE1QVSBEaXNhYmxlLiAqLw0KKw0KKy8qIENTQSBtYW5pcHVsYXRpb24gbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydENTQV9GQ1hfTUFTSwkJCQkJKCAweDAwMEZGRkZGVUwgKQ0KKw0KKy8qIE9TIEludGVycnVwdCBhbmQgVHJhcCBtZWNoYW5pc21zLiAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfUFNXX01BU0sJCQkJKCB+KCAweDAwMDAwMEZGVUwgKSApDQorI2RlZmluZSBwb3J0U1lTQ0FMTF9UUkFQCQkJCQkoIDYgKQ0KKw0KKy8qIEVhY2ggQ1NBIGNvbnRhaW5zIDE2IHdvcmRzIG9mIGRhdGEuICovDQorI2RlZmluZSBwb3J0TlVNX1dPUkRTX0lOX0NTQQkJCQkoIDE2ICkNCisNCisvKiBUaGUgaW50ZXJydXB0IGVuYWJsZSBiaXQgaW4gdGhlIFBDUF9TUkMgcmVnaXN0ZXIuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0NQVV9JTlRFUlJVUFQgCQkJKCAxVSA8PCAxMlUgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogUGVyZm9ybSBhbnkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlN5c3RlbVRpY2tIYW5kbGVyKCBpbnQgKSBfX2F0dHJpYnV0ZV9fKChsb25nY2FsbCkpOw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIFRyYXAgaGFuZGxlciBmb3IgeWllbGRzLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlRyYXBZaWVsZCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKTsNCisNCisvKg0KKyAqIFByaW9yaXR5IDEgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHlpZWxkcyBwZW5kZWQgZnJvbSBhbiBpbnRlcnJ1cHQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2SW50ZXJydXB0WWllbGQoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhpcyByZWZlcmVuY2UgaXMgcmVxdWlyZWQgYnkgdGhlIHNhdmUvcmVzdG9yZSBjb250ZXh0IG1hY3Jvcy4gKi8NCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHhDdXJyZW50VENCOw0KKw0KKy8qIFByZWNhbGN1bGF0ZSB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhdCBjb21waWxlIHRpbWUuICovDQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgdWxDb21wYXJlTWF0Y2hWYWx1ZSA9ICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICogcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIGxvbmcgKnB1bFVwcGVyQ1NBID0gTlVMTDsNCit1bnNpZ25lZCBsb25nICpwdWxMb3dlckNTQSA9IE5VTEw7DQorDQorCS8qIDE2IEFkZHJlc3MgUmVnaXN0ZXJzICg0IEFkZHJlc3MgcmVnaXN0ZXJzIGFyZSBnbG9iYWwpLCAxNiBEYXRhDQorCVJlZ2lzdGVycywgYW5kIDMgU3lzdGVtIFJlZ2lzdGVycy4NCisNCisJVGhlcmUgYXJlIDMgcmVnaXN0ZXJzIHRoYXQgdHJhY2sgdGhlIENTQXMuDQorCQlGQ1ggcG9pbnRzIHRvIHRoZSBoZWFkIG9mIGdsb2JhbGx5IGZyZWUgc2V0IG9mIENTQXMuDQorCQlQQ1ggZm9yIHRoZSB0YXNrIG5lZWRzIHRvIHBvaW50IHRvIExvd2VyLT5VcHBlci0+TlVMTCBhcnJhbmdlbWVudC4NCisJCUxDWCBwb2ludHMgdG8gdGhlIGxhc3QgZnJlZSBDU0Egc28gdGhhdCBjb3JyZWN0aXZlIGFjdGlvbiBjYW4gYmUgdGFrZW4uDQorDQorCU5lZWQgdHdvIENTQXMgdG8gc3RvcmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwkJVGhlIHVwcGVyIGNvbnRleHQgY29udGFpbnMgRDgtRDE1LCBBMTAtQTE1LCBQU1cgYW5kIFBDWEktPk5VTEwuDQorCQlUaGUgbG93ZXIgY29udGV4dCBjb250YWlucyBEMC1ENywgQTItQTcsIEExMSBhbmQgUENYSS0+VXBwZXJDb250ZXh0Lg0KKwkJVGhlIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrIHBvaW50cyB0byB0aGUgTG93ZXIgQ29udGV4dCBSU0xDWCBtYXRjaGluZyB0aGUgaW5pdGlhbCBCSVNSLg0KKwkJVGhlIExvd2VyIENvbnRleHQgcG9pbnRzIHRvIHRoZSBVcHBlciBDb250ZXh0IHJlYWR5IGZvciB0aGUgcmV0dXJuIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLg0KKw0KKwkgVGhlIFJlYWwgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2sgaXMgc3RvcmVkIGluIHRoZSBBMTAgd2hpY2ggaXMgcmVzdG9yZWQNCisJIHdpdGggdGhlIHVwcGVyIGNvbnRleHQuICovDQorDQorCS8qIEhhdmUgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgYmVjYXVzZSB0aGUgQ1NBcyBhcmUgZ29pbmcgdG8gYmUNCisJbWFuaXB1bGF0ZWQuICovDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwl7DQorCQkvKiBEU3luYyB0byBlbnN1cmUgdGhhdCBidWZmZXJpbmcgaXMgbm90IGEgcHJvYmxlbS4gKi8NCisJCV9kc3luYygpOw0KKw0KKwkJLyogQ29uc3VtZSB0d28gZnJlZSBDU0FzLiAqLw0KKwkJcHVsTG93ZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIF9tZmNyKCAkRkNYICkgKTsNCisJCWlmKCBOVUxMICE9IHB1bExvd2VyQ1NBICkNCisJCXsNCisJCQkvKiBUaGUgTG93ZXIgTGlua3MgdG8gdGhlIFVwcGVyLiAqLw0KKwkJCXB1bFVwcGVyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBwdWxMb3dlckNTQVsgMCBdICk7DQorCQl9DQorDQorCQkvKiBDaGVjayB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHJlc2VydmVkIHR3byBDU0FzLiAqLw0KKwkJaWYoICggTlVMTCAhPSBwdWxMb3dlckNTQSApICYmICggTlVMTCAhPSBwdWxVcHBlckNTQSApICkNCisJCXsNCisJCQkvKiBSZW1vdmUgdGhlIHR3byBjb25zdW1lZCBDU0FzIGZyb20gdGhlIGZyZWUgQ1NBIGxpc3QuICovDQorCQkJX2Rpc2FibGUoKTsNCisJCQlfZHN5bmMoKTsNCisJCQlfbXRjciggJEZDWCwgcHVsVXBwZXJDU0FbIDAgXSApOw0KKwkJCV9pc3luYygpOw0KKwkJCV9lbmFibGUoKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvKiBTaW1wbHkgdHJpZ2dlciBhIGNvbnRleHQgbGlzdCBkZXBsZXRpb24gdHJhcC4gKi8NCisJCQlfc3ZsY3goKTsNCisJCX0NCisJfQ0KKwlwb3J0RVhJVF9DUklUSUNBTCgpOw0KKw0KKwkvKiBDbGVhciB0aGUgdXBwZXIgQ1NBLiAqLw0KKwltZW1zZXQoIHB1bFVwcGVyQ1NBLCAwLCBwb3J0TlVNX1dPUkRTX0lOX0NTQSAqIHNpemVvZiggdW5zaWduZWQgbG9uZyApICk7DQorDQorCS8qIFVwcGVyIENvbnRleHQuICovDQorCXB1bFVwcGVyQ1NBWyAyIF0gPSAoIHVuc2lnbmVkIGxvbmcgKXB4VG9wT2ZTdGFjazsJCS8qIEExMDsJU3RhY2sgUmV0dXJuIGFrYSBTdGFjayBQb2ludGVyICovDQorCXB1bFVwcGVyQ1NBWyAxIF0gPSBwb3J0U1lTVEVNX1BST0dSQU1fU1RBVFVTX1dPUkQ7CQkvKiBQU1cJKi8NCisNCisJLyogQ2xlYXIgdGhlIGxvd2VyIENTQS4gKi8NCisJbWVtc2V0KCBwdWxMb3dlckNTQSwgMCwgcG9ydE5VTV9XT1JEU19JTl9DU0EgKiBzaXplb2YoIHVuc2lnbmVkIGxvbmcgKSApOw0KKw0KKwkvKiBMb3dlciBDb250ZXh0LiAqLw0KKwlwdWxMb3dlckNTQVsgOCBdID0gKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzOwkJLyogQTQ7CUFkZHJlc3MgVHlwZSBQYXJhbWV0ZXIgUmVnaXN0ZXIJKi8NCisJcHVsTG93ZXJDU0FbIDEgXSA9ICggdW5zaWduZWQgbG9uZyApIHB4Q29kZTsJCQkvKiBBMTE7CVJldHVybiBBZGRyZXNzIGFrYSBSQSAqLw0KKw0KKwkvKiBQQ1hJIHBvaW50aW5nIHRvIHRoZSBVcHBlciBjb250ZXh0LiAqLw0KKwlwdWxMb3dlckNTQVsgMCBdID0gKCBwb3J0SU5JVElBTF9QQ1hJX1VQUEVSX0NPTlRFWFRfV09SRCB8ICggdW5zaWduZWQgbG9uZyApIHBvcnRBRERSRVNTX1RPX0NTQSggcHVsVXBwZXJDU0EgKSApOw0KKw0KKwkvKiBTYXZlIHRoZSBsaW5rIHRvIHRoZSBDU0EgaW4gdGhlIHRvcCBvZiBzdGFjay4gKi8NCisJcHhUb3BPZlN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKiApIHBvcnRBRERSRVNTX1RPX0NTQSggcHVsTG93ZXJDU0EgKTsNCisNCisJLyogRFN5bmMgdG8gZW5zdXJlIHRoYXQgYnVmZmVyaW5nIGlzIG5vdCBhIHByb2JsZW0uICovDQorCV9kc3luYygpOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitsb25nIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2VHJhcEluc3RhbGxIYW5kbGVycyggdm9pZCApOw0KK3Vuc2lnbmVkIGxvbmcgdWxNRkNSID0gMFVMOw0KK3Vuc2lnbmVkIGxvbmcgKnB1bFVwcGVyQ1NBID0gTlVMTDsNCit1bnNpZ25lZCBsb25nICpwdWxMb3dlckNTQSA9IE5VTEw7DQorDQorCS8qIEludGVycnVwdHMgYXQgb3IgYmVsb3cgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIGFyZSBkaXNhYmxlDQorCXdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorDQorCS8qIFNldC11cCB0aGUgdGltZXIgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEluc3RhbGwgdGhlIFRyYXAgSGFuZGxlcnMuICovDQorCXZUcmFwSW5zdGFsbEhhbmRsZXJzKCk7DQorDQorCS8qIEluc3RhbGwgdGhlIFN5c2NhbGwgSGFuZGxlciBmb3IgeWllbGQgY2FsbHMuICovDQorCWlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciggcG9ydFNZU0NBTExfVFJBUCwgcHJ2VHJhcFlpZWxkICkgKQ0KKwl7DQorCQkvKiBGYWlsZWQgdG8gaW5zdGFsbCB0aGUgeWllbGQgaGFuZGxlciwgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoICggdm9sYXRpbGUgdm9pZCAqICkgTlVMTCApICk7DQorCX0NCisNCisJLyogRW5hYmxlIHRoZW4gaW5zdGFsbCB0aGUgcHJpb3JpdHkgMSBpbnRlcnJ1cHQgZm9yIHBlbmRpbmcgY29udGV4dA0KKwlzd2l0Y2hlcyBmcm9tIGFuIElTUi4gIFNlZSBtb2RfU1JDIGluIHRoZSBUcmlDb3JlIG1hbnVhbC4gKi8NCisJQ1BVX1NSQzAucmVnID0gCSggcG9ydEVOQUJMRV9DUFVfSU5URVJSVVBUICkgfCAoIGNvbmZpZ0tFUk5FTF9ZSUVMRF9QUklPUklUWSApOw0KKwlpZiggMCA9PSBfaW5zdGFsbF9pbnRfaGFuZGxlciggY29uZmlnS0VSTkVMX1lJRUxEX1BSSU9SSVRZLCBwcnZJbnRlcnJ1cHRZaWVsZCwgMCApICkNCisJew0KKwkJLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIHlpZWxkIGhhbmRsZXIsIGZvcmNlIGFuIGFzc2VydC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCAoIHZvbGF0aWxlIHZvaWQgKiApIE5VTEwgKSApOw0KKwl9DQorDQorCV9kaXNhYmxlKCk7DQorDQorCS8qIExvYWQgdGhlIGluaXRpYWwgU1lTQ09OLiAqLw0KKwlfbXRjciggJFNZU0NPTiwgcG9ydElOSVRJQUxfU1lTQ09OICk7DQorCV9pc3luYygpOw0KKw0KKwkvKiBFTkRJTklUIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBpbiB0aGUgJ2NzdGFydC5jJyBjb2RlLiAqLw0KKw0KKwkvKiBDbGVhciB0aGUgUFNXLkNEQyB0byBlbmFibGUgdGhlIHVzZSBvZiBhbiBSRkUgd2l0aG91dCBpdCBnZW5lcmF0aW5nIGFuDQorCWV4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgY29kZSBpcyBub3QgZ2VudWluZWx5IGluIGFuIGV4Y2VwdGlvbi4gKi8NCisJdWxNRkNSID0gX21mY3IoICRQU1cgKTsNCisJdWxNRkNSICY9IHBvcnRSRVNUT1JFX1BTV19NQVNLOw0KKwlfZHN5bmMoKTsNCisJX210Y3IoICRQU1csIHVsTUZDUiApOw0KKwlfaXN5bmMoKTsNCisNCisJLyogRmluYWxseSwgcGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAqLw0KKwlwdWxMb3dlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggKCAqcHhDdXJyZW50VENCICkgKTsNCisJcHVsVXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHB1bExvd2VyQ1NBWzBdICk7DQorCV9kc3luYygpOw0KKwlfbXRjciggJFBDWEksICpweEN1cnJlbnRUQ0IgKTsNCisJX2lzeW5jKCk7DQorCV9ub3AoKTsNCisJX3JzbGN4KCk7DQorCV9ub3AoKTsNCisNCisJLyogUmV0dXJuIHRvIHRoZSBmaXJzdCB0YXNrIHNlbGVjdGVkIHRvIGV4ZWN1dGUuICovDQorCV9fYXNtIHZvbGF0aWxlKCAicmZlIiApOw0KKw0KKwkvKiBXaWxsIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogU2V0LXVwIHRoZSBjbG9jayBkaXZpZGVyLiAqLw0KKwl1bmxvY2tfd2R0Y29uKCk7DQorCXsNCisJCS8qIFdhaXQgdW50aWwgYWNjZXNzIHRvIEVuZGludCBwcm90ZWN0ZWQgcmVnaXN0ZXIgaXMgZW5hYmxlZC4gKi8NCisJCXdoaWxlKCAwICE9ICggV0RUX0NPTjAucmVnICYgMHgxVUwgKSApOw0KKw0KKwkJLyogUk1DID09IDEgc28gU1RNIENsb2NrID09IEZQSSAqLw0KKwkJU1RNX0NMQy5yZWcgPSAoIDFVTCA8PCA4ICk7DQorCX0NCisJbG9ja193ZHRjb24oKTsNCisNCisgICAgLyogRGV0ZXJtaW5lIGhvdyBtYW55IGJpdHMgYXJlIHVzZWQgd2l0aG91dCBjaGFuZ2luZyBvdGhlciBiaXRzIGluIHRoZSBDTUNPTiByZWdpc3Rlci4gKi8NCisJU1RNX0NNQ09OLnJlZyAmPSB+KCAweDFmVUwgKTsNCisJU1RNX0NNQ09OLnJlZyB8PSAoIDB4MWZVTCAtIF9fQ0xaKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgKTsNCisNCisJLyogVGFrZSBpbnRvIGFjY291bnQgdGhlIGN1cnJlbnQgdGltZSBzbyBhIHRpY2sgZG9lc24ndCBoYXBwZW4gaW1tZWRpYXRlbHkuICovDQorCVNUTV9DTVAwLnJlZyA9IHVsQ29tcGFyZU1hdGNoVmFsdWUgKyBTVE1fVElNMC5yZWc7DQorDQorCWlmKCAwICE9IF9pbnN0YWxsX2ludF9oYW5kbGVyKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZLCBwcnZTeXN0ZW1UaWNrSGFuZGxlciwgMCApICkNCisJew0KKwkJLyogU2V0LXVwIHRoZSBpbnRlcnJ1cHQuICovDQorCQlTVE1fU1JDMC5yZWcgPSAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgfCAweDAwMDA1MDAwVUwgKTsNCisNCisJCS8qIEVuYWJsZSB0aGUgSW50ZXJydXB0LiAqLw0KKwkJU1RNX0lTUlIucmVnICY9IH4oIDB4MDNVTCApOw0KKwkJU1RNX0lTUlIucmVnIHw9IDB4MVVMOw0KKwkJU1RNX0lTUlIucmVnICY9IH4oIDB4MDdVTCApOw0KKwkJU1RNX0lDUi5yZWcgfD0gMHgxVUw7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBGYWlsZWQgdG8gaW5zdGFsbCB0aGUgVGljayBJbnRlcnJ1cHQuICovDQorCQljb25maWdBU1NFUlQoICggKCB2b2xhdGlsZSB2b2lkICogKSBOVUxMICkgKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTeXN0ZW1UaWNrSGFuZGxlciggaW50IGlBcmcgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KK3Vuc2lnbmVkIGxvbmcgKnB4VXBwZXJDU0EgPSBOVUxMOw0KK3Vuc2lnbmVkIGxvbmcgeFVwcGVyQ1NBID0gMFVMOw0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpweEN1cnJlbnRUQ0I7DQorDQorCS8qIEp1c3QgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlcnMuICovDQorCSggdm9pZCApIGlBcmc7DQorDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLiAqLw0KKwlTVE1fSVNSUi5yZWcgPSAxVUw7DQorDQorCS8qIFJlbG9hZCB0aGUgQ29tcGFyZSBNYXRjaCByZWdpc3RlciBmb3IgWCB0aWNrcyBpbnRvIHRoZSBmdXR1cmUuDQorDQorCUlmIGNyaXRpY2FsIHNlY3Rpb24gb3IgaW50ZXJydXB0IG5lc3RpbmcgYnVkZ2V0cyBhcmUgZXhjZWVkZWQsIHRoZW4NCisJaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY2FsY3VsYXRlZCBuZXh0IGNvbXBhcmUgbWF0Y2ggdmFsdWUgaXMgaW4gdGhlDQorCXBhc3QuICBJZiB0aGlzIG9jY3VycyAodW5saWtlbHkpLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXN1bHRpbmcNCisJdGltZSBzbGlwcGFnZSB3aWxsIGV4Y2VlZCBhIHNpbmdsZSB0aWNrIHBlcmlvZC4gIEFueSBhZHZlcnNlIGVmZmVjdCBvZg0KKwl0aGlzIGlzIHRpbWUgYm91bmRlZCBieSB0aGUgZmFjdCB0aGF0IG9ubHkgdGhlIGZpcnN0IG4gYml0cyBvZiB0aGUgNTYgYml0DQorCVNUTSB0aW1lciBhcmUgYmVpbmcgdXNlZCBmb3IgYSBjb21wYXJlIG1hdGNoLCBzbyBhbm90aGVyIGNvbXBhcmUgbWF0Y2gNCisJd2lsbCBvY2N1ciBhZnRlciBhbiBvdmVyZmxvdyBpbiBqdXN0IHRob3NlIG4gYml0cyAobm90IHRoZSBlbnRpcmUgNTYgYml0cykuDQorCUFzIGFuIGV4YW1wbGUsIGlmIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIDc1TUh6LCBhbmQgdGhlIHRpY2sgcmF0ZSBpcyAxS0h6LA0KKwlhIG1pc3NlZCB0aWNrIGNvdWxkIHJlc3VsdCBpbiB0aGUgbmV4dCB0aWNrIGludGVycnVwdCBvY2N1cnJpbmcgd2l0aGluIGENCisJdGltZSB0aGF0IGlzIDEuNyB0aW1lcyB0aGUgZGVzaXJlZCBwZXJpb2QuICBUaGUgZmFjdCB0aGF0IHRoaXMgaXMgZ3JlYXRlcg0KKwl0aGFuIGEgc2luZ2xlIHRpY2sgcGVyaW9kIGlzIGFuIGVmZmVjdCBvZiB1c2luZyBhIHRpbWVyIHRoYXQgY2Fubm90IGJlDQorCWF1dG9tYXRpY2FsbHkgcmVzZXQsIGluIGhhcmR3YXJlLCBieSB0aGUgb2NjdXJyZW5jZSBvZiBhIHRpY2sgaW50ZXJydXB0Lg0KKwlDaGFuZ2luZyB0aGUgdGljayBzb3VyY2UgdG8gYSB0aW1lciB0aGF0IGhhcyBhbiBhdXRvbWF0aWMgcmVzZXQgb24gY29tcGFyZQ0KKwltYXRjaCAoc3VjaCBhcyBhIEdQVEEgdGltZXIpIHdpbGwgcmVkdWNlIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGFkZGl0aW9uYWwNCisJcGVyaW9kIHRvIGV4YWN0bHkgMSB0aW1lcyB0aGUgZGVzaXJlZCBwZXJpb2QuICovDQorCVNUTV9DTVAwLnJlZyArPSB1bENvbXBhcmVNYXRjaFZhbHVlOw0KKw0KKwkvKiBLZXJuZWwgQVBJIGNhbGxzIHJlcXVpcmUgQ3JpdGljYWwgU2VjdGlvbnMuICovDQorCXVsU2F2ZWRJbnRlcnJ1cHRNYXNrID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQkvKiBJbmNyZW1lbnQgdGhlIFRpY2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrICk7DQorDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwkJVGhlIHVwcGVyIGNvbnRleHQgaXMgYXV0b21hdGljYWxseSBzYXZlZCB3aGVuIGVudGVyaW5nIGEgdHJhcCBvciBpbnRlcnJ1cHQuDQorCQlOZWVkIHRvIHNhdmUgdGhlIGxvd2VyIGNvbnRleHQgYXMgd2VsbCBhbmQgY29weSB0aGUgUENYSSBDU0EgSUQgaW50bw0KKwkJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJCVRDQiBvZiBhIHRhc2suDQorDQorCQlDYWxsIHZUYXNrU3dpdGNoQ29udGV4dCB0byBzZWxlY3QgdGhlIG5leHQgdGFzaywgbm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUNCisJCXZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KKw0KKwkJQ2FsbCB2UG9ydFNldE1QVVJlZ2lzdGVyU2V0T25lIHRvIGNoYW5nZSB0aGUgTVBVIG1hcHBpbmcgZm9yIHRoZSB0YXNrDQorCQl0aGF0IGhhcyBqdXN0IGJlZW4gc3dpdGNoZWQgaW4uDQorDQorCQlMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KKwkJTmVlZCB0byByZXN0b3JlIHRoZSBsb3dlciBjb250ZXh0IGJ5IGxvYWRpbmcgdGhlIENTQSBmcm9tDQorCQlweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayBpbnRvIFBDWEkgKGVmZmVjdGl2ZWx5IGNoYW5naW5nIHRoZSBjYWxsIHN0YWNrKS4NCisJCUluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCisJCW9mIHRoZSB0YXNrLiBSRkUgd2lsbCByZXN0b3JlIHRoZSB1cHBlciBjb250ZXh0IG9mIHRoZSB0YXNrLCBqdW1wIHRvIHRoZQ0KKwkJcmV0dXJuIGFkZHJlc3MgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mIGludGVycnVwdHMgYmVpbmcNCisJCWVuYWJsZWQvZGlzYWJsZWQuICovDQorCQlfZGlzYWJsZSgpOw0KKwkJX2RzeW5jKCk7DQorCQl4VXBwZXJDU0EgPSBfbWZjciggJFBDWEkgKTsNCisJCXB4VXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHhVcHBlckNTQSApOw0KKwkJKnB4Q3VycmVudFRDQiA9IHB4VXBwZXJDU0FbIDAgXTsNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJcHhVcHBlckNTQVsgMCBdID0gKnB4Q3VycmVudFRDQjsNCisJCUNQVV9TUkMwLmJpdHMuU0VUUiA9IDA7DQorCQlfaXN5bmMoKTsNCisJfQ0KKwkjZW5kaWYNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBXaGVuIGEgdGFzayBpcyBkZWxldGVkLCBpdCBpcyB5aWVsZGVkIHBlcm1hbmVudGx5IHVudGlsIHRoZSBJRExFIHRhc2sNCisgKiBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVjbGFpbSB0aGUgbWVtb3J5IHRoYXQgdGhhdCB0YXNrIHdhcyB1c2luZy4NCisgKiBUeXBpY2FsbHksIHRoZSBtZW1vcnkgdXNlZCBieSBhIHRhc2sgaXMgdGhlIFRDQiBhbmQgU3RhY2sgYnV0IGluIHRoZQ0KKyAqIFRyaUNvcmUgdGhpcyBpbmNsdWRlcyB0aGUgQ1NBcyB0aGF0IHdlcmUgY29uc3VtZWQgYXMgcGFydCBvZiB0aGUgQ2FsbA0KKyAqIFN0YWNrLiBUaGVzZSBDU0FzIGNhbiBvbmx5IGJlIHJldHVybmVkIHRvIHRoZSBHbG9iYWxseSBGcmVlIFBvb2wgd2hlbg0KKyAqIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IENhbGwgU3RhY2ssIGhlbmNlLCBkZWxheWluZyB0aGUNCisgKiByZWNsYW1hdGlvbiB1bnRpbCB0aGUgSURMRSB0YXNrIGlzIGZyZWVpbmcgdGhlIHRhc2sncyBvdGhlciByZXNvdXJjZXMuDQorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBoZWFkIG9mIHRoZSBsaW5rZWQgbGlzdCBvZiBDU0FzIChmcm9tIHdoZW4gdGhlDQorICogdGFzayB5aWVsZGVkIGZvciB0aGUgbGFzdCB0aW1lKSBhbmQgZmluZHMgdGhlIHRhaWwgKHRoZSB2ZXJ5IGJvdHRvbSBvZg0KKyAqIHRoZSBjYWxsIHN0YWNrKSBhbmQgaW5zZXJ0cyB0aGlzIGxpc3QgYXQgdGhlIGhlYWQgb2YgdGhlIEZyZWUgbGlzdCwNCisgKiBhdHRhY2hpbmcgdGhlIGV4aXN0aW5nIEZyZWUgTGlzdCB0byB0aGUgdGFpbCBvZiB0aGUgcmVjbGFpbWVkIGNhbGwgc3RhY2suDQorICoNCisgKiBOT1RFOiB0aGUgSURMRSB0YXNrIG5lZWRzIHByb2Nlc3NpbmcgdGltZSB0byBjb21wbGV0ZSB0aGlzIGZ1bmN0aW9uDQorICogYW5kIGluIGhlYXZpbHkgbG9hZGVkIHN5c3RlbXMsIHRoZSBGcmVlIENTQXMgbWF5IGJlIGNvbnN1bWVkIGZhc3Rlcg0KKyAqIHRoYW4gdGhleSBjYW4gYmUgZnJlZWQgYXNzdW1pbmcgdGhhdCB0YXNrcyBhcmUgYmVpbmcgc3Bhd25lZCBhbmQNCisgKiBkZWxldGVkIGZyZXF1ZW50bHkuDQorICovDQordm9pZCB2UG9ydFJlY2xhaW1DU0EoIHVuc2lnbmVkIGxvbmcgKnB4VENCICkNCit7DQordW5zaWduZWQgbG9uZyBweEhlYWRDU0EsIHB4VGFpbENTQSwgcHhGcmVlQ1NBOw0KK3Vuc2lnbmVkIGxvbmcgKnB1bE5leHRDU0E7DQorDQorCS8qIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQ1NBIGluIHRoZSBsaXN0IG9mIENTQXMgY29uc3VtZWQgYnkgdGhlIHRhc2sgaXMNCisJc3RvcmVkIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0YXNrcyBUQ0Igc3RydWN0dXJlICh3aGVyZSB0aGUgc3RhY2sNCisJcG9pbnRlciB3b3VsZCBiZSBvbiBhIHRyYWRpdGlvbmFsIHN0YWNrIGJhc2VkIGFyY2hpdGVjdHVyZSkuICovDQorCXB4SGVhZENTQSA9ICggKnB4VENCICkgJiBwb3J0Q1NBX0ZDWF9NQVNLOw0KKw0KKwkvKiBNYXNrIG9mZiBldmVyeXRoaW5nIGluIHRoZSBDU0EgbGluayBmaWVsZCBvdGhlciB0aGFuIHRoZSBhZGRyZXNzLiAgSWYNCisJdGhlCWFkZHJlc3MgaXMgTlVMTCwgdGhlbiB0aGUgQ1NBIGlzIG5vdCBsaW5raW5nIGFueXdoZXJlIGFuZCB0aGVyZSBpcw0KKwlub3RoaW5nCXRvIGRvLiAqLw0KKwlweFRhaWxDU0EgPSBweEhlYWRDU0E7DQorDQorCS8qIENvbnZlcnQgdGhlIGxpbmsgdmFsdWUgdG8gY29udGFpbiBqdXN0IGEgcmF3IGFkZHJlc3MgYW5kIHN0b3JlIHRoaXMNCisJaW4gYSBsb2NhbCB2YXJpYWJsZS4gKi8NCisJcHVsTmV4dENTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggcHhUYWlsQ1NBICk7DQorDQorCS8qIEl0ZXJhdGUgb3ZlciB0aGUgQ1NBcyB0aGF0IHdlcmUgY29uc3VtZWQgYXMgcGFydCBvZiB0aGUgdGFzay4gIFRoZQ0KKwlmaXJzdCBmaWVsZCBpbiB0aGUgQ1NBIGlzIHRoZSBwb2ludGVyIHRvIHRoZW4gbmV4dCBDU0EuICBNYXNrIG9mZg0KKwlldmVyeXRoaW5nIGluIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IENTQSwgb3RoZXIgdGhhbiB0aGUgbGluayBhZGRyZXNzLg0KKwlJZiB0aGlzIGlzIE5VTEwsIHRoZW4gdGhlIENTQSBjdXJyZW50bHkgYmVpbmcgcG9pbnRlZCB0byBpcyB0aGUgbGFzdCBpbg0KKwl0aGUgY2hhaW4uICovDQorCXdoaWxlKCAwVUwgIT0gKCBwdWxOZXh0Q1NBWyAwIF0gJiBwb3J0Q1NBX0ZDWF9NQVNLICkgKQ0KKwl7DQorCQkvKiBDbGVhciBhbGwgYml0cyBvZiB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBpbiB0aGUgY2hhaW4sIG90aGVyDQorCQl0aGFuIHRoZSBhZGRyZXNzIGJpdHMgdGhlbXNlbHZlcy4gKi8NCisJCXB1bE5leHRDU0FbIDAgXSA9IHB1bE5leHRDU0FbIDAgXSAmIHBvcnRDU0FfRkNYX01BU0s7DQorDQorCQkvKiBNb3ZlIHRoZSBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXh0IENTQSBpbiB0aGUgbGlzdC4gKi8NCisJCXB4VGFpbENTQSA9IHB1bE5leHRDU0FbIDAgXTsNCisNCisJCS8qIFVwZGF0ZSB0aGUgbG9jYWwgcG9pbnRlciB0byB0aGUgQ1NBLiAqLw0KKwkJcHVsTmV4dENTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggcHhUYWlsQ1NBICk7DQorCX0NCisNCisJX2Rpc2FibGUoKTsNCisJew0KKwkJLyogTG9vayB1cCB0aGUgY3VycmVudCBmcmVlIENTQSBoZWFkLiAqLw0KKwkJX2RzeW5jKCk7DQorCQlweEZyZWVDU0EgPSBfbWZjciggJEZDWCApOw0KKw0KKwkJLyogSm9pbiB0aGUgY3VycmVudCBGcmVlIG9udG8gdGhlIFRhaWwgb2Ygd2hhdCBpcyBiZWluZyByZWNsYWltZWQuICovDQorCQlwb3J0Q1NBX1RPX0FERFJFU1MoIHB4VGFpbENTQSApWyAwIF0gPSBweEZyZWVDU0E7DQorDQorCQkvKiBNb3ZlIHRoZSBoZWFkIG9mIHRoZSByZWNsYWltZWQgaW50byB0aGUgRnJlZS4gKi8NCisJCV9kc3luYygpOw0KKwkJX210Y3IoICRGQ1gsIHB4SGVhZENTQSApOw0KKwkJX2lzeW5jKCk7DQorCX0NCisJX2VuYWJsZSgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdGhpbmcgdG8gZG8uIFVubGlrZWx5IHRvIHdhbnQgdG8gZW5kLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZUcmFwWWllbGQoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCit7DQordW5zaWduZWQgbG9uZyAqcHhVcHBlckNTQSA9IE5VTEw7DQordW5zaWduZWQgbG9uZyB4VXBwZXJDU0EgPSAwVUw7DQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB4Q3VycmVudFRDQjsNCisNCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0U1lTQ0FMTF9UQVNLX1lJRUxEOg0KKwkJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwkJCVRoZSB1cHBlciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgd2hlbiBlbnRlcmluZyBhIHRyYXAgb3IgaW50ZXJydXB0Lg0KKwkJCU5lZWQgdG8gc2F2ZSB0aGUgbG93ZXIgY29udGV4dCBhcyB3ZWxsIGFuZCBjb3B5IHRoZSBQQ1hJIENTQSBJRCBpbnRvDQorCQkJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJCQlUQ0Igb2YgYSB0YXNrLg0KKw0KKwkJCUNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0IHRvIHNlbGVjdCB0aGUgbmV4dCB0YXNrLCBub3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZQ0KKwkJCXZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KKw0KKwkJCUNhbGwgdlBvcnRTZXRNUFVSZWdpc3RlclNldE9uZSB0byBjaGFuZ2UgdGhlIE1QVSBtYXBwaW5nIGZvciB0aGUgdGFzaw0KKwkJCXRoYXQgaGFzIGp1c3QgYmVlbiBzd2l0Y2hlZCBpbi4NCisNCisJCQlMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KKwkJCU5lZWQgdG8gcmVzdG9yZSB0aGUgbG93ZXIgY29udGV4dCBieSBsb2FkaW5nIHRoZSBDU0EgZnJvbQ0KKwkJCXB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrIGludG8gUENYSSAoZWZmZWN0aXZlbHkgY2hhbmdpbmcgdGhlIGNhbGwgc3RhY2spLg0KKwkJCUluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCisJCQlvZiB0aGUgdGFzay4gUkZFIHdpbGwgcmVzdG9yZSB0aGUgdXBwZXIgY29udGV4dCBvZiB0aGUgdGFzaywganVtcCB0byB0aGUNCisJCQlyZXR1cm4gYWRkcmVzcyBhbmQgcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgb2YgaW50ZXJydXB0cyBiZWluZw0KKwkJCWVuYWJsZWQvZGlzYWJsZWQuICovDQorCQkJX2Rpc2FibGUoKTsNCisJCQlfZHN5bmMoKTsNCisJCQl4VXBwZXJDU0EgPSBfbWZjciggJFBDWEkgKTsNCisJCQlweFVwcGVyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCB4VXBwZXJDU0EgKTsNCisJCQkqcHhDdXJyZW50VENCID0gcHhVcHBlckNTQVsgMCBdOw0KKwkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJCXB4VXBwZXJDU0FbIDAgXSA9ICpweEN1cnJlbnRUQ0I7DQorCQkJQ1BVX1NSQzAuYml0cy5TRVRSID0gMDsNCisJCQlfaXN5bmMoKTsNCisJCQlicmVhazsNCisNCisJCWRlZmF1bHQ6DQorCQkJLyogVW5pbXBsZW1lbnRlZCB0cmFwIGNhbGxlZC4gKi8NCisJCQljb25maWdBU1NFUlQoICggKCB2b2xhdGlsZSB2b2lkICogKSBOVUxMICkgKTsNCisJCQlicmVhazsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZJbnRlcnJ1cHRZaWVsZCggaW50IGlJZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgKnB4VXBwZXJDU0EgPSBOVUxMOw0KK3Vuc2lnbmVkIGxvbmcgeFVwcGVyQ1NBID0gMFVMOw0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpweEN1cnJlbnRUQ0I7DQorDQorCS8qIEp1c3QgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KKwkoIHZvaWQgKSBpSWQ7DQorDQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwlUaGUgdXBwZXIgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5IHNhdmVkIHdoZW4gZW50ZXJpbmcgYSB0cmFwIG9yIGludGVycnVwdC4NCisJTmVlZCB0byBzYXZlIHRoZSBsb3dlciBjb250ZXh0IGFzIHdlbGwgYW5kIGNvcHkgdGhlIFBDWEkgQ1NBIElEIGludG8NCisJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJVENCIG9mIGEgdGFzay4NCisNCisJQ2FsbCB2VGFza1N3aXRjaENvbnRleHQgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2ssIG5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlDQorCXZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KKw0KKwlDYWxsIHZQb3J0U2V0TVBVUmVnaXN0ZXJTZXRPbmUgdG8gY2hhbmdlIHRoZSBNUFUgbWFwcGluZyBmb3IgdGhlIHRhc2sNCisJdGhhdCBoYXMganVzdCBiZWVuIHN3aXRjaGVkIGluLg0KKw0KKwlMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KKwlOZWVkIHRvIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQgYnkgbG9hZGluZyB0aGUgQ1NBIGZyb20NCisJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgaW50byBQQ1hJIChlZmZlY3RpdmVseSBjaGFuZ2luZyB0aGUgY2FsbCBzdGFjaykuDQorCUluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCisJb2YgdGhlIHRhc2suIFJGRSB3aWxsIHJlc3RvcmUgdGhlIHVwcGVyIGNvbnRleHQgb2YgdGhlIHRhc2ssIGp1bXAgdG8gdGhlDQorCXJldHVybiBhZGRyZXNzIGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiBpbnRlcnJ1cHRzIGJlaW5nDQorCWVuYWJsZWQvZGlzYWJsZWQuICovDQorCV9kaXNhYmxlKCk7DQorCV9kc3luYygpOw0KKwl4VXBwZXJDU0EgPSBfbWZjciggJFBDWEkgKTsNCisJcHhVcHBlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggeFVwcGVyQ1NBICk7DQorCSpweEN1cnJlbnRUQ0IgPSBweFVwcGVyQ1NBWyAwIF07DQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwlweFVwcGVyQ1NBWyAwIF0gPSAqcHhDdXJyZW50VENCOw0KKwlDUFVfU1JDMC5iaXRzLlNFVFIgPSAwOw0KKwlfaXN5bmMoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordW5zaWduZWQgbG9uZyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdXhSZXR1cm4gPSAwVUw7DQorDQorCV9kaXNhYmxlKCk7DQorCXV4UmV0dXJuID0gX21mY3IoICRJQ1IgKTsNCisJX210Y3IoICRJQ1IsICggKCB1eFJldHVybiAmIH5wb3J0Q0NQTl9NQVNLICkgfCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApOw0KKwlfaXN5bmMoKTsNCisJX2VuYWJsZSgpOw0KKw0KKwkvKiBSZXR1cm4ganVzdCB0aGUgaW50ZXJydXB0IG1hc2sgYml0cy4gKi8NCisJcmV0dXJuICggdXhSZXR1cm4gJiBwb3J0Q0NQTl9NQVNLICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0dDQy9UcmlDb3JlXzE3ODIvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNmQxOAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMjA4IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogU3lzdGVtIEluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDx0YzE3ODIuaD4NCisjaW5jbHVkZSA8bWFjaGluZS9pbnRyaW5zaWNzLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBsb25nDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJCQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJCQkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQkJCQk0DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQkJCQlfX2FzbSB2b2xhdGlsZSggIiBub3AgIiApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJCQkJCTENCisjZGVmaW5lIHBvcnRSRVNUT1JFX0ZJUlNUX1RBU0tfUFJJT1JJVFlfTEVWRUwJCTENCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordHlwZWRlZiBzdHJ1Y3QgTVBVX1NFVFRJTkdTIHsgdW5zaWduZWQgbG9uZyB1bE5vdFVzZWQ7IH0geE1QVV9TRVRUSU5HUzsNCisNCisvKiBEZWZpbmUgYXdheSB0aGUgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgUmVzdG9yZSBDb250ZXh0IE1hY3JvLiAqLw0KKyNkZWZpbmUgcG9ydFBSSVZJTEVHRV9CSVQJCQkJCQkJMHgwVUwNCisNCisjZGVmaW5lIHBvcnRDQ1BOX01BU0sJCQkJCQkoIDB4MDAwMDAwRkZVTCApDQorDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDU0EgTWFuaXB1bGF0aW9uLiAqLw0KKyNkZWZpbmUgcG9ydENTQV9UT19BRERSRVNTKCBwQ1NBICkJCQkoICggdW5zaWduZWQgbG9uZyAqICkoICggKCAoIHBDU0EgKSAmIDB4MDAwRjAwMDAgKSA8PCAxMiApIHwgKCAoICggcENTQSApICYgMHgwMDAwRkZGRiApIDw8IDYgKSApICkNCisjZGVmaW5lIHBvcnRBRERSRVNTX1RPX0NTQSggcEFkZHJlc3MgKQkJKCAoIHVuc2lnbmVkIGxvbmcgKSggKCAoICggKHVuc2lnbmVkIGxvbmcpKCBwQWRkcmVzcyApICkgJiAweEYwMDAwMDAwICkgPj4gMTIgKSB8ICggKCAoIHVuc2lnbmVkIGxvbmcgKSggcEFkZHJlc3MgKSAmIDB4MDAzRkZGQzAgKSA+PiA2ICkgKSApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQkJCV9zeXNjYWxsKCAwICkNCisvKiBQb3J0IFJlc3RvcmUgaXMgaW1wbGljaXQgaW4gdGhlIHBsYXRmb3JtIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJldHVybmVkIGZyb20gdGhlIG9yaWdpbmFsIFBTVyBpcyBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkLiAqLw0KKyNkZWZpbmUgcG9ydFNZU0NBTExfVEFTS19ZSUVMRAkJCQkJMA0KKyNkZWZpbmUgcG9ydFNZU0NBTExfUkFJU0VfUFJJT1JJVFkJCQkJMQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorLyogU2V0IElDUi5DQ1BOIHRvIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJdW5zaWduZWQgbG9uZyB1bElDUjsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlfZGlzYWJsZSgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVsSUNSID0gX21mY3IoICRJQ1IgKTsgCQkvKiBHZXQgY3VycmVudCBJQ1IgdmFsdWUuICovCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJdWxJQ1IgJj0gfnBvcnRDQ1BOX01BU0s7CS8qIENsZWFyIGRvd24gbWFzayBiaXRzLiAqLwkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQl1bElDUiB8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk7IC8qIFNldCBtYXNrIGJpdHMgdG8gcmVxdWlyZWQgcHJpb3JpdHkgbWFzay4gKi8JXA0KKwkJCQkJCQkJCQlfbXRjciggJElDUiwgdWxJQ1IgKTsJCS8qIFdyaXRlIGJhY2sgdXBkYXRlZCBJQ1IuICovCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJX2lzeW5jKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJX2VuYWJsZSgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KKw0KKy8qIENsZWFyIElDUi5DQ1BOIHRvIGFsbG93IGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcy4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl7CQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVuc2lnbmVkIGxvbmcgdWxJQ1I7CQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCV9kaXNhYmxlKCk7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVsSUNSID0gX21mY3IoICRJQ1IgKTsJCS8qIEdldCBjdXJyZW50IElDUiB2YWx1ZS4gKi8JCVwNCisJCQkJCQkJCQkJdWxJQ1IgJj0gfnBvcnRDQ1BOX01BU0s7CS8qIENsZWFyIGRvd24gbWFzayBiaXRzLiAqLwkJCVwNCisJCQkJCQkJCQkJX210Y3IoICRJQ1IsIHVsSUNSICk7CQkvKiBXcml0ZSBiYWNrIHVwZGF0ZWQgSUNSLiAqLwkJXA0KKwkJCQkJCQkJCQlfaXN5bmMoKTsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJX2VuYWJsZSgpOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCisNCisvKiBTZXQgSUNSLkNDUE4gdG8gdXhTYXZlZE1hc2tWYWx1ZS4gKi8NCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZE1hc2tWYWx1ZSApIAl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCXVuc2lnbmVkIGxvbmcgdWxJQ1I7CQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCV9kaXNhYmxlKCk7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCXVsSUNSID0gX21mY3IoICRJQ1IgKTsJCS8qIEdldCBjdXJyZW50IElDUiB2YWx1ZS4gKi8JCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJdWxJQ1IgJj0gfnBvcnRDQ1BOX01BU0s7CS8qIENsZWFyIGRvd24gbWFzayBiaXRzLiAqLwkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJdWxJQ1IgfD0gdXhTYXZlZE1hc2tWYWx1ZTsJLyogU2V0IG1hc2sgYml0cyB0byBwcmV2aW91c2x5IHNhdmVkIG1hc2sgdmFsdWUuICovCQlcDQorCQkJCQkJCQkJCQkJCQkJCQlfbXRjciggJElDUiwgdWxJQ1IgKTsJCS8qIFdyaXRlIGJhY2sgdXBkYXRlZCBJQ1IuICovCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCV9pc3luYygpOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQlfZW5hYmxlKCk7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJfQ0KKw0KKw0KKy8qIFNldCBJQ1IuQ0NQTiB0byBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKi8NCitleHRlcm4gdW5zaWduZWQgbG9uZyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIAl1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQorDQorLyogQXMgdGhpcyBwb3J0IGhvbGRzIGEgQ1NBIGFkZHJlc3MgaW4gcHhUb3BPZlN0YWNrLCB0aGUgYXNzZXJ0IHRoYXQgY2hlY2tzIHRoZQ0KK3B4VG9wT2ZTdGFjayBhbGlnbm1lbnQgaXMgcmVtb3ZlZC4gKi8NCisjZGVmaW5lIHBvcnRBTElHTk1FTlRfQVNTRVJUX3B4Q3VycmVudFRDQiAoIHZvaWQgKQ0KKw0KKy8qIFBlbmQgYSBwcmlvcml0eSAxIGludGVycnVwdCwgd2hpY2ggd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGNvbnRleHQgc3dpdGNoLiAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSAJCWlmKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gcGRGQUxTRSApIHsJQ1BVX1NSQzAuYml0cy5TRVRSID0gMTsgX2lzeW5jKCk7IH0NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFBvcnQgc3BlY2lmaWMgY2xlYW4gdXAgbWFjcm8gcmVxdWlyZWQgdG8gZnJlZSB0aGUgQ1NBcyB0aGF0IHdlcmUgY29uc3VtZWQgYnkNCisgKiBhIHRhc2sgdGhhdCBoYXMgc2luY2UgYmVlbiBkZWxldGVkLg0KKyAqLw0KK3ZvaWQgdlBvcnRSZWNsYWltQ1NBKCB1bnNpZ25lZCBsb25nICpweFRDQiApOw0KKyNkZWZpbmUgcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKQkJdlBvcnRSZWNsYWltQ1NBKCAoIHVuc2lnbmVkIGxvbmcgKiApICggcHhUQ0IgKSApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnR0cmFwLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0dHJhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2IyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0dHJhcC5jCkBAIC0wLDAgKzEsMzIwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIEtlcm5lbCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisNCisvKiBNYWNoaW5lIGluY2x1ZGVzICovDQorI2luY2x1ZGUgPHRjMTc4Mi5oPg0KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8bWFjaGluZS9jaW50Lmg+DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogVGhpcyByZWZlcmVuY2UgaXMgcmVxdWlyZWQgYnkgdGhlIFNhdmUvUmVzdG9yZSBDb250ZXh0IE1hY3Jvcy4NCisgKi8NCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHhDdXJyZW50VENCOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogVGhpcyBmaWxlIGNvbnRhaW5zIGJhc2UgZGVmaW5pdGlvbnMgZm9yIGFsbCBvZiB0aGUgcG9zc2libGUgdHJhcHMgaW4gdGhlIHN5c3RlbS4NCisgKiBJdCBpcyBzdWdnZXN0ZWQgdG8gcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbCBvZiB0aGUgdHJhcHMgYnV0IGZvcg0KKyAqIHRoZSB0aW1lIGJlaW5nIHRoZXkgc2ltcGx5IHRyaWdnZXIgYSBERUJVRyBpbnN0cnVjdGlvbiBzbyB0aGF0IGl0IGlzIGVhc3kNCisgKiB0byBzZWUgd2hhdCBjYXVzZWQgYSBwYXJ0aWN1bGFyIHRyYXAuDQorICoNCisgKiBUcmFwIENsYXNzIDYsIHRoZSBTWVNDQUxMLCBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLg0KKyAqLw0KKw0KKy8qIFRoZSBUcmFwIENsYXNzZXMuICovDQorI2RlZmluZSBwb3J0TU1VX1RSQVAJCQkJCQkJCQkJMA0KKyNkZWZpbmUgcG9ydElQVF9UUkFQCQkJCQkJCQkJCTENCisjZGVmaW5lIHBvcnRJRV9UUkFQCQkJCQkJCQkJCQkyDQorI2RlZmluZSBwb3J0Q01fVFJBUAkJCQkJCQkJCQkJMw0KKyNkZWZpbmUgcG9ydFNCUF9UUkFQCQkJCQkJCQkJCTQNCisjZGVmaW5lIHBvcnRBU1NFUlRfVFJBUAkJCQkJCQkJCQk1DQorI2RlZmluZSBwb3J0Tk1JX1RSQVAJCQkJCQkJCQkJNw0KKw0KKy8qIE1NVSBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRUSU5fTU1VX1ZJUlRVQUxfQUREUkVTU19GSUxMCQkJCQkwDQorI2RlZmluZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfUFJPVEVDVElPTgkJCQkxDQorDQorLyogSW50ZXJuYWwgUHJvdGVjdGlvbiBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRUSU5fSVBUX1BSSVZJTElHRURfSU5TVFJVQ1RJT04JCQkJCTENCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1JFQUQJCQkJCTINCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1dSSVRFCQkJCQkzDQorI2RlZmluZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9FWEVDVVRJT04JCQkJNA0KKyNkZWZpbmUgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fUEVSSVBIRVJBTF9BQ0NFU1MJCTUNCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX05VTExfQUREUkVTUwkJCTYNCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0dMT0JBTF9SRUdJU1RFUl9XUklURV9QUk9URUNUSU9OCTcNCisNCisvKiBJbnN0cnVjdGlvbiBFcnJvciBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRUSU5fSUVfSUxMRUdBTF9PUENPREUJCQkJCQkJMQ0KKyNkZWZpbmUgcG9ydFRJTl9JRV9VTklNUExFTUVOVEVEX09QQ09ERQkJCQkJCTINCisjZGVmaW5lIHBvcnRUSU5fSUVfSU5WQUxJRF9PUEVSQU5ECQkJCQkJCTMNCisjZGVmaW5lIHBvcnRUSU5fSUVfREFUQV9BRERSRVNTX0FMSUdOTUVOVAkJCQkJNA0KKyNkZWZpbmUgcG9ydFRJTl9JRV9JTlZBTElEX0xPQ0FMX01FTU9SWV9BRERSRVNTCQkJCTUNCisNCisvKiBDb250ZXh0IE1hbmFnZW1lbnQgVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQorI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX0RFUExFVElPTgkJCQkxDQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfT1ZFUkZMT1cJCQkJCQkyDQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfVU5ERUZMT1cJCQkJCQkzDQorI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX1VOREVSRkxPVwkJCQk0DQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfU1RBQ0tfVU5ERVJGTE9XCQkJCQkJNQ0KKyNkZWZpbmUgcG9ydFRJTl9DTV9DT05URVhUX1RZUEUJCQkJCQkJCTYNCisjZGVmaW5lIHBvcnRUSU5fQ01fTkVTVElOR19FUlJPUgkJCQkJCQk3DQorDQorLyogU3lzdGVtIEJ1cyBhbmQgUGVyaXBoZXJhbHMgVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQorI2RlZmluZSBwb3J0VElOX1NCUF9QUk9HUkFNX0ZFVENIX1NZTkNIUk9OT1VTX0VSUk9SCQkJMQ0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfREFUQV9BQ0NFU1NfU1lOQ0hST05PVVNfRVJST1IJCQkyDQorI2RlZmluZSBwb3J0VElOX1NCUF9EQVRBX0FDQ0VTU19BU1lOQ0hST05PVVNfRVJST1IJCQkzDQorI2RlZmluZSBwb3J0VElOX1NCUF9DT1BST0NFU1NPUl9UUkFQX0FTWU5DSFJPTk9VU19FUlJPUgkJNA0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfUFJPR1JBTV9NRU1PUllfSU5URUdSSVRZX0VSUk9SCQkJNQ0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfREFUQV9NRU1PUllfSU5URUdSSVRZX0VSUk9SCQkJCTYNCisNCisvKiBBc3NlcnRpb24gVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQorI2RlZmluZSBwb3J0VElOX0FTU0VSVF9BUklUSE1FVElDX09WRVJGTE9XCQkJCQkxDQorI2RlZmluZSBwb3J0VElOX0FTU0VSVF9TVElDS1lfQVJJVEhNRVRJQ19PVkVSRkxPVwkJCTINCisNCisvKiBOb24tbWFza2FibGUgSW50ZXJydXB0IFRyYXAgSWRlbnRpZmljYXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydFRJTl9OTUlfTk9OX01BU0tBQkxFX0lOVEVSUlVQVAkJCQkJMA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZNTVVUcmFwKCBpbnQgaVRyYXBJZGVudGlmaWNhdGlvbiApIF9fYXR0cmlidXRlX18oICggbG9uZ2NhbGwsIHdlYWsgKSApOw0KK3ZvaWQgdkludGVybmFsUHJvdGVjdGlvblRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkgX19hdHRyaWJ1dGVfXyggKCBsb25nY2FsbCwgd2VhayApICk7DQordm9pZCB2SW5zdHJ1Y3Rpb25FcnJvclRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkgX19hdHRyaWJ1dGVfXyggKCBsb25nY2FsbCwgd2VhayApICk7DQordm9pZCB2Q29udGV4dE1hbmFnZW1lbnRUcmFwKCBpbnQgaVRyYXBJZGVudGlmaWNhdGlvbiApIF9fYXR0cmlidXRlX18oICggbG9uZ2NhbGwsIHdlYWsgKSApOw0KK3ZvaWQgdlN5c3RlbUJ1c0FuZFBlcmlwaGVyYWxzVHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKSBfX2F0dHJpYnV0ZV9fKCAoIGxvbmdjYWxsLCB3ZWFrICkgKTsNCit2b2lkIHZBc3NlcnRpb25UcmFwKCBpbnQgaVRyYXBJZGVudGlmaWNhdGlvbiApIF9fYXR0cmlidXRlX18oICggbG9uZ2NhbGwsIHdlYWsgKSApOw0KK3ZvaWQgdk5vbk1hc2thYmxlSW50ZXJydXB0VHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKSBfX2F0dHJpYnV0ZV9fKCAoIGxvbmdjYWxsLCB3ZWFrICkgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VHJhcEluc3RhbGxIYW5kbGVycyggdm9pZCApDQorew0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0TU1VX1RSQVAsIHZNTVVUcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KKw0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0SVBUX1RSQVAsIHZJbnRlcm5hbFByb3RlY3Rpb25UcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KKw0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0SUVfVFJBUCwgdkluc3RydWN0aW9uRXJyb3JUcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KKw0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0Q01fVFJBUCwgdkNvbnRleHRNYW5hZ2VtZW50VHJhcCApICkNCisJew0KKwkJX2RlYnVnKCk7DQorCX0NCisNCisJaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyICggcG9ydFNCUF9UUkFQLCB2U3lzdGVtQnVzQW5kUGVyaXBoZXJhbHNUcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KKw0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0QVNTRVJUX1RSQVAsIHZBc3NlcnRpb25UcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KKw0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0Tk1JX1RSQVAsIHZOb25NYXNrYWJsZUludGVycnVwdFRyYXAgKSApDQorCXsNCisJCV9kZWJ1ZygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdk1NVVRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCit7DQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJY2FzZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfRklMTDoNCisJY2FzZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfUFJPVEVDVElPTjoNCisJZGVmYXVsdDoNCisJCV9kZWJ1ZygpOw0KKwkJYnJlYWs7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdkludGVybmFsUHJvdGVjdGlvblRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCit7DQorCS8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJCWNhc2UgcG9ydFRJTl9JUFRfUFJJVklMSUdFRF9JTlNUUlVDVElPTjoNCisJCQkvKiBJbnN0cnVjdGlvbiBpcyBub3QgYWxsb3dlZCBhdCBjdXJyZW50IGV4ZWN1dGlvbiBsZXZlbCwgZWcgRElTQUJMRSBhdCBVc2VyLTAuICovDQorDQorCQljYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1JFQUQ6DQorCQkJLyogTG9hZCB3b3JkIHVzaW5nIGludmFsaWQgYWRkcmVzcy4gKi8NCisJCQkNCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fV1JJVEU6DQorCQkJLyogU3RvcmUgV29yZCB1c2luZyBpbnZhbGlkIGFkZHJlc3MuICovDQorCQkJDQorCQljYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0VYRUNVVElPTjoNCisJCQkvKiBQQyBqdW1wZWQgdG8gYW4gYWRkcmVzcyBvdXRzaWRlIG9mIHRoZSB2YWxpZCByYW5nZS4gKi8NCisJCQkNCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fUEVSSVBIRVJBTF9BQ0NFU1M6DQorCQkJLyogQWNjZXNzIHRvIGEgcGVyaXBoZXJhbCBkZW5pZWQgYXQgY3VycmVudCBleGVjdXRpb24gbGV2ZWwuICovDQorCQkJDQorCQljYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX05VTExfQUREUkVTUzoNCisJCQkvKiBOVUxMIFBvaW50ZXIuICovDQorCQkJDQorCQljYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0dMT0JBTF9SRUdJU1RFUl9XUklURV9QUk9URUNUSU9OOg0KKwkJCS8qIFRyaWVkIHRvIG1vZGlmeSBhIGdsb2JhbCBhZGRyZXNzIHBvaW50ZXIgcmVnaXN0ZXIuICovDQorCQkJDQorCQlkZWZhdWx0Og0KKwkJDQorCQkJcHhDdXJyZW50VENCWyAwIF0gPSBfbWZjciggJFBDWEkgKTsNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2SW5zdHJ1Y3Rpb25FcnJvclRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCit7DQorCS8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJCWNhc2UgcG9ydFRJTl9JRV9JTExFR0FMX09QQ09ERToNCisJCWNhc2UgcG9ydFRJTl9JRV9VTklNUExFTUVOVEVEX09QQ09ERToNCisJCWNhc2UgcG9ydFRJTl9JRV9JTlZBTElEX09QRVJBTkQ6DQorCQljYXNlIHBvcnRUSU5fSUVfREFUQV9BRERSRVNTX0FMSUdOTUVOVDoNCisJCWNhc2UgcG9ydFRJTl9JRV9JTlZBTElEX0xPQ0FMX01FTU9SWV9BRERSRVNTOg0KKwkJZGVmYXVsdDoNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2Q29udGV4dE1hbmFnZW1lbnRUcmFwKCBpbnQgaVRyYXBJZGVudGlmaWNhdGlvbiApDQorew0KKwkvKiBEZWxpYmVyYXRlIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAqLw0KKwlzd2l0Y2goIGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KKwl7DQorCQljYXNlIHBvcnRUSU5fQ01fRlJFRV9DT05URVhUX0xJU1RfREVQTEVUSU9OOg0KKwkJY2FzZSBwb3J0VElOX0NNX0NBTExfREVQVEhfT1ZFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ0FMTF9ERVBUSF9VTkRFRkxPVzoNCisJCWNhc2UgcG9ydFRJTl9DTV9GUkVFX0NPTlRFWFRfTElTVF9VTkRFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ0FMTF9TVEFDS19VTkRFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ09OVEVYVF9UWVBFOg0KKwkJY2FzZSBwb3J0VElOX0NNX05FU1RJTkdfRVJST1I6DQorCQlkZWZhdWx0Og0KKwkJCV9kZWJ1ZygpOw0KKwkJCWJyZWFrOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZTeXN0ZW1CdXNBbmRQZXJpcGhlcmFsc1RyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCit7DQorCS8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJCWNhc2UgcG9ydFRJTl9TQlBfUFJPR1JBTV9GRVRDSF9TWU5DSFJPTk9VU19FUlJPUjoNCisJCWNhc2UgcG9ydFRJTl9TQlBfREFUQV9BQ0NFU1NfU1lOQ0hST05PVVNfRVJST1I6DQorCQljYXNlIHBvcnRUSU5fU0JQX0RBVEFfQUNDRVNTX0FTWU5DSFJPTk9VU19FUlJPUjoNCisJCWNhc2UgcG9ydFRJTl9TQlBfQ09QUk9DRVNTT1JfVFJBUF9BU1lOQ0hST05PVVNfRVJST1I6DQorCQljYXNlIHBvcnRUSU5fU0JQX1BST0dSQU1fTUVNT1JZX0lOVEVHUklUWV9FUlJPUjoNCisJCWNhc2UgcG9ydFRJTl9TQlBfREFUQV9NRU1PUllfSU5URUdSSVRZX0VSUk9SOg0KKwkJZGVmYXVsdDoNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2QXNzZXJ0aW9uVHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KK3sNCisJLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdC4gKi8NCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0VElOX0FTU0VSVF9BUklUSE1FVElDX09WRVJGTE9XOg0KKwkJY2FzZSBwb3J0VElOX0FTU0VSVF9TVElDS1lfQVJJVEhNRVRJQ19PVkVSRkxPVzoNCisJCWRlZmF1bHQ6DQorCQkJX2RlYnVnKCk7DQorCQkJYnJlYWs7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdk5vbk1hc2thYmxlSW50ZXJydXB0VHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KK3sNCisJLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdC4gKi8NCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0VElOX05NSV9OT05fTUFTS0FCTEVfSU5URVJSVVBUOg0KKwkJZGVmYXVsdDoNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9JU1JfU3VwcG9ydC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9JU1JfU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTA2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSLzc4SzBSL0lTUl9TdXBwb3J0LmgKQEAgLTAsMCArMSwxMTggQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsJDQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKw0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKw0KKzsgVmFyaWFibGVzIHVzZWQgYnkgc2NoZWR1bGVyDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKwlFWFRFUk4gICAgcHhDdXJyZW50VENCDQorCUVYVEVSTiAgICB1c0NyaXRpY2FsTmVzdGluZw0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKzsgICBTYXZlcyB0aGUgY29udGV4dCBvZiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycywgQ1MgYW5kIEVTIChvbmx5IGluIGZhciANCis7CW1lbW9yeSBtb2RlKSByZWdpc3RlcnMgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIFZhbHVlIGFuZCB0aGUgU3RhY2sgUG9pbnRlcg0KKzsgICBvZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCVBVU0ggICAgICBBWCAgICAgICAgICAgICAgICAgICAgOyBTYXZlIEFYIFJlZ2lzdGVyIHRvIHN0YWNrLg0KKwlQVVNIICAgICAgSEwNCisjaWYgY29uZmlnTUVNT1JZX01PREUgPT0gMQ0KKwlNT1YgICAgICAgQSwgQ1MgICAgICAgICAgICAgICAgIDsgU2F2ZSBDUyByZWdpc3Rlci4NCisJWENIICAgICAgIEEsIFgNCisJTU9WICAgICAgIEEsIEVTICAgICAgICAgICAgICAgICA7IFNhdmUgRVMgcmVnaXN0ZXIuDQorCVBVU0ggICAgICBBWA0KKyNlbHNlDQorCU1PViAgICAgICBBLCBDUyAgICAgICAgICAgICAgICAgOyBTYXZlIENTIHJlZ2lzdGVyLg0KKwlQVVNIICAgICAgQVgNCisjZW5kaWYNCisJUFVTSCAgICAgIERFICAgICAgICAgICAgICAgICAgICA7IFNhdmUgdGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQVVNIICAgICAgQkMNCisJTU9WVyAgICAgIEFYLCB1c0NyaXRpY2FsTmVzdGluZyA7IFNhdmUgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLg0KKwlQVVNIICAgICAgQVgJDQorCU1PVlcgICAgICBBWCwgcHhDdXJyZW50VENCIAkgICAgOyBTYXZlIHRoZSBTdGFjayBwb2ludGVyLg0KKwlNT1ZXICAgICAgSEwsIEFYCQkJCQkNCisJTU9WVyAgICAgIEFYLCBTUAkJCQkJDQorCU1PVlcgICAgICBbSExdLCBBWAkJCQkJDQorCUVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorOyAgIFJlc3RvcmVzIHRoZSB0YXNrIFN0YWNrIFBvaW50ZXIgdGhlbiB1c2UgdGhpcyB0byByZXN0b3JlIHVzQ3JpdGljYWxOZXN0aW5nLA0KKzsgICBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCB0aGUgQ1MgYW5kIEVTIChvbmx5IGluIGZhciBtZW1vcnkgbW9kZSkNCis7ICAgb2YgdGhlIHNlbGVjdGVkIHRhc2sgZnJvbSB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorCU1PVlcgICAgICBBWCwgcHhDdXJyZW50VENCCSAgICA7IFJlc3RvcmUgdGhlIFN0YWNrIHBvaW50ZXIuDQorCU1PVlcgICAgICBITCwgQVgNCisJTU9WVyAgICAgIEFYLCBbSExdDQorCU1PVlcgICAgICBTUCwgQVgNCisJUE9QCSAgICAgIEFYCSAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuDQorCU1PVlcgICAgICB1c0NyaXRpY2FsTmVzdGluZywgQVgNCisJUE9QCSAgICAgIEJDICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQT1AJICAgICAgREUNCisjaWYgY29uZmlnTUVNT1JZX01PREUgPT0gMQ0KKwlQT1AgICAgICAgQVggICAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSB0aGUgRVMgcmVnaXN0ZXIuDQorCU1PViAgICAgICBFUywgQQ0KKwlYQ0ggICAgICAgQSwgWCAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSB0aGUgQ1MgcmVnaXN0ZXIuDQorCU1PViAgICAgICBDUywgQQ0KKyNlbHNlDQorCVBPUCAgICAgICBBWA0KKwlNT1YgICAgICAgQ1MsIEEgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSBDUyByZWdpc3Rlci4NCisjZW5kaWYNCisJUE9QICAgICAgIEhMICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIEhMLg0KKwlQT1AgICAgICAgQVggICAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSBBWC4NCisJRU5ETQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmI2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnQuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIHZhbHVlIGlzIGluaXRpYWxpc2VkIHRvIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlDQoraW50ZXJydXB0cyBkb24ndCBhY2NpZGVudGFsbHkgYmVjb21lIGVuYWJsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICgoIHVuc2lnbmVkIHNob3J0ICkgMTApDQorDQorLyogSW5pdGlhbCBQU1cgdmFsdWUgYWxsb2NhdGVkIHRvIGEgbmV3bHkgY3JlYXRlZCB0YXNrLg0KKyAqICAgMTEwMDAxMTAwMDAwMDAwMA0KKyAqICAgfHx8fHx8fHwtLS0tLS0tLS0tLS0tLSBGaWxsIGJ5dGUNCisgKiAgIHx8fHx8fHwtLS0tLS0tLS0tLS0tLS0gQ2FycnkgRmxhZyBjbGVhcmVkDQorICogICB8fHx8fC0tLS0tLS0tLS0tLS0tLS0tIEluLXNlcnZpY2UgcHJpb3JpdHkgRmxhZ3Mgc2V0IHRvIGxvdyBsZXZlbA0KKyAqICAgfHx8fC0tLS0tLS0tLS0tLS0tLS0tLSBSZWdpc3RlciBiYW5rIFNlbGVjdCAwIEZsYWcgY2xlYXJlZA0KKyAqICAgfHx8LS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgQ2FycnkgRmxhZyBjbGVhcmVkDQorICogICB8fC0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlZ2lzdGVyIGJhbmsgU2VsZWN0IDEgRmxhZyBjbGVhcmVkDQorICogICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFplcm8gRmxhZyBzZXQNCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIEludGVycnVwdCBGbGFnIHNldCAoZW5hYmxlZCkNCisgKi8NCisjZGVmaW5lIHBvcnRQU1cJCSAgKDB4YzZVTCkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogTW9zdCBwb3J0cyBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMgYnkgcGxhY2luZyB0aGUgaW50ZXJydXB0IGZsYWdzIG9uDQordGhlIHN0YWNrIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy4gIEV4aXRpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgdGhlbg0KK3NpbXBseSBhIGNhc2Ugb2YgcG9wcGluZyB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suICBBcyA3OEswIElBUiBkb2VzIG5vdCB1c2UNCithIGZyYW1lIHBvaW50ZXIgdGhpcyBjYW5ub3QgYmUgZG9uZSBhcyBtb2RpZnlpbmcgdGhlIHN0YWNrIHdpbGwgY2xvYmJlciBhbGwNCit0aGUgc3RhY2sgdmFyaWFibGVzLiAgSW5zdGVhZCBlYWNoIHRhc2sgbWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIGNyaXRpY2FsDQorc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcw0KK2luY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBsZWZ0IHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtDQord2l0aCBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCisNCit1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KK25vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCitzZXF1ZW5jZS4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXRzIHVwIHRoZSBwZXJpb2RpYyBJU1IgdXNlZCBmb3IgdGhlIFJUT1MgdGljay4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0bw0KKyAqIHBvcnRTQVZFX0NPTlRFWFQgaGFkIGJlZW4gY2FsbGVkLg0KKyAqDQorICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQordW5zaWduZWQgbG9uZyAqcHVsTG9jYWw7DQorDQorCSNpZiBjb25maWdNRU1PUllfTU9ERSA9PSAxDQorCXsNCisJCS8qIFBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBvbiB0aGUgc3RhY2ssIGFuZCB3cml0dGVuIHVzaW5nIGEgMzJiaXQgdmFsdWUNCisJCWhlbmNlIGEgc3BhY2UgaXMgbGVmdCBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFdyaXRlIGluIHRoZSBwYXJhbWV0ZXIgdmFsdWUuICovDQorCQlwdWxMb2NhbCA9ICAoIHVuc2lnbmVkIGxvbmcgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggdW5zaWduZWQgbG9uZyApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogVGhlc2UgdmFsdWVzIGFyZSBqdXN0IHNwYWNlcnMuICBUaGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uDQorCQl3b3VsZCBub3JtYWxseSBiZSB3cml0dGVuIGhlcmUuICovDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Y2RjZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGNkY2Q7DQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFRoZSBzdGFydCBhZGRyZXNzIC8gUFNXIHZhbHVlIGlzIGFsc28gd3JpdHRlbiBpbiBhcyBhIDMyYml0IHZhbHVlLA0KKwkJc28gbGVhdmUgYSBzcGFjZSBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJDQorCQkvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgY29tYmluZWQgd2l0aCB0aGUgUFNXLiAqLw0KKwkJcHVsTG9jYWwgPSAoIHVuc2lnbmVkIGxvbmcgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggKCAoIHVuc2lnbmVkIGxvbmcgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEFYIHJlZ2lzdGVyLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkvKiBUYXNrIGZ1bmN0aW9uIGFkZHJlc3MgaXMgd3JpdHRlbiB0byB0aGUgc3RhY2sgZmlyc3QuICBBcyBpdCBpcw0KKwkJd3JpdHRlbiBhcyBhIDMyYml0IHZhbHVlIGEgc3BhY2UgaXMgbGVmdCBvbiB0aGUgc3RhY2sgZm9yIHRoZSBzZWNvbmQNCisJCXR3byBieXRlcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggdGhlIFBTVy4gKi8NCisJCXB1bExvY2FsID0gKCB1bnNpZ25lZCBsb25nICogKSBweFRvcE9mU3RhY2s7DQorCQkqcHVsTG9jYWwgPSAoICggKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlICkgfCAoIHBvcnRQU1cgPDwgMjRVTCApICk7DQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFRoZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIEFYLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZW5kaWYNCisNCisJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEhMIHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIENTIGFuZCBFUyByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwRjAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogRmluYWxseSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgREUgYW5kIEJDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhERURFOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJDQkM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBGaW5hbGx5IHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgY291bnQgaXMgc2V0IHRvIHplcm8gd2hlbiB0aGUgdGFzaw0KKwlmaXJzdCBzdGFydHMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KKwl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwl2UG9ydFN0YXJ0KCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCisJcmV0dXJuIHBkVFJVRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSA3OEswUiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KKwkvKiBTZXR1cCBjaGFubmVsIDUgb2YgdGhlIFRBVSB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorDQorCS8qIEZpcnN0IHRoZSBUaW1lciBBcnJheSBVbml0IGhhcyB0byBiZSBlbmFibGVkLiAqLw0KKwlUQVUwRU4gPSAxOw0KKw0KKwkvKiBUbyBjb25maWd1cmUgdGhlIFRpbWVyIEFycmF5IFVuaXQgYWxsIENoYW5uZWxzIGhhdmUgdG8gZmlyc3QgYmUgc3RvcHBlZC4gKi8NCisJVFQwID0gMHhmZjsNCisNCisJLyogSW50ZXJydXB0IG9mIFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IGlzIGRpc2FibGVkIHRvIHNldCB0aGUgaW50ZXJydXB0DQorCXByaW9yaXR5LiAqLw0KKwlUTU1LMDUgPSAxOw0KKw0KKwkvKiBDbGVhciBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBpbnRlcnJ1cHQgZmxhZy4gKi8JDQorCVRNSUYwNSA9IDA7DQorDQorCS8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8NCisJVE1QUjAwNSA9IDA7DQorCVRNUFIxMDUgPSAwOw0KKw0KKwkvKiBTZXQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgTW9kZSBhcyBpbnRlcnZhbCB0aW1lci4gKi8NCisJVE1SMDUgPSAweDAwMDA7DQorDQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KKwlURFIwNSA9ICggcG9ydFRpY2tUeXBlICkgKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisNCisJLyogU2V0IFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IG91dHB1dCBtb2RlICovDQorCVRPTTAgJj0gfjB4MDAyMDsNCisNCisJLyogU2V0IFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IG91dHB1dCBsZXZlbCAqLwkNCisJVE9MMCAmPSB+MHgwMDIwOw0KKw0KKwkvKiBTZXQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgb3V0cHV0IGVuYWJsZSAqLwkNCisJVE9FMCAmPSB+MHgwMDIwOw0KKw0KKwkvKiBJbnRlcnJ1cHQgb2YgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgZW5hYmxlZCAqLw0KKwlUTU1LMDUgPSAwOw0KKw0KKwkvKiBTdGFydCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNS4qLw0KKwlUUzAgfD0gMHgwMDIwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnRhc20uczI2IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0YXNtLnMyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgzYjllCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0YXNtLnMyNgpAQCAtMCwwICsxLDE2MyBAQAorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOwkNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorI2luY2x1ZGUgIklTUl9TdXBwb3J0LmgiDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyNpZiBfX0NPUkVfXyAhPSBfXzc4SzBSX18NCisJI2Vycm9yICJUaGlzIGZpbGUgaXMgb25seSBmb3IgNzhLMFIgRGV2aWNlcyINCisjZW5kaWYNCisNCisjZGVmaW5lIENTICAgICAgICAgICAgICAgICAgICAweEZGRkZDDQorI2RlZmluZSBFUyAgICAgICAgICAgICAgICAgICAgMHhGRkZGRA0KKw0KKzsgRnVuY3Rpb25zIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJUFVCTElDICAgIHZQb3J0WWllbGQNCisJUFVCTElDICAgIHZQb3J0U3RhcnQNCisNCis7IEZ1bmN0aW9ucyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJRVhURVJOICAgIHZUYXNrU3dpdGNoQ29udGV4dA0KKwlFWFRFUk4gICAgdlRhc2tJbmNyZW1lbnRUaWNrDQorDQorOyBUaWNrIElTUiBQcm90b3R5cGUNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOwlFWFRFUk4gICAgP0NMNzhLMFJfVjJfTDAwDQorDQorCVBVQldFQUsgICBgPz9NRF9JTlRUTTA1Pz9JTlRWRUMgNjhgDQorCVBVQkxJQyAgICBNRF9JTlRUTTA1DQorDQorTURfSU5UVE0wNSAgICBTWU1CT0wgIk1EX0lOVFRNMDUiDQorYD8/TURfSU5UVE0wNT8/SU5UVkVDIDY4YCBTWU1CT0wgIj8/SU5UVkVDIDY4IiwgTURfSU5UVE0wNQ0KKw0KKw0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgWWllbGQgdG8gYW5vdGhlciB0YXNrLiAgSW1wbGVtZW50ZWQgYXMgYSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICBUaGUgcmV0dXJuDQorOyAgIGFkZHJlc3MgYW5kIFBTVyB3aWxsIGhhdmUgYmVlbiBzYXZlZCB0byB0aGUgc3RhY2sgYXV0b21hdGljYWxseSBiZWZvcmUNCis7ICAgdGhpcyBjb2RlIHJ1bnMuDQorOw0KKzsgICBJbnB1dDogIE5PTkUNCis7DQorOyAgIENhbGw6ICAgQ0FMTCAgICB2UG9ydFlpZWxkDQorOw0KKzsgICBPdXRwdXQ6IE5PTkUNCis7DQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICBSU0VHIENPREU6Q09ERQ0KK3ZQb3J0WWllbGQ6DQorCXBvcnRTQVZFX0NPTlRFWFQJCSAgICAgICAgOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorCWNhbGwgICAgICB2VGFza1N3aXRjaENvbnRleHQgICAgOyBDYWxsIHRoZSBzY2hlZHVsZXIgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2suDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJCSAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gcnVuLg0KKwlyZXRiDQorDQorCQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4NCis7DQorOyAgIElucHV0OiAgTk9ORQ0KKzsNCis7ICAgQ2FsbDogICBDQUxMICAgIHZQb3J0U3RhcnQNCis7DQorOyAgIE91dHB1dDogTk9ORQ0KKzsNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQ0KKyAgICBSU0VHIENPREU6Q09ERQ0KK3ZQb3J0U3RhcnQ6DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisJcmV0aQkJCQkJICAgICAgICA7IEFuIGludGVycnVwdCBzdGFjayBmcmFtZSBpcyB1c2VkIHNvIHRoZSB0YXNrDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBpcyBzdGFydGVkIHVzaW5nIGEgUkVUSSBpbnN0cnVjdGlvbi4NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBzdGVwcyBvZiB0aGUgVGljayBDb3VudCBJbmNyZW1lbnQgYW5kIFRhc2sgU3dpdGNoDQorOyAgIGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuIGtlcm5lbCBjb25maWd1cmF0aW9uDQorOw0KKzsgICBJbnB1dDogIE5PTkUNCis7DQorOyAgIENhbGw6ICAgSVNSDQorOw0KKzsgICBPdXRwdXQ6IE5PTkUNCis7DQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkNCisNCitNRF9JTlRUTTA1Og0KKw0KKwlwb3J0U0FWRV9DT05URVhUCQkgICAgICAgIDsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KKwljYWxsICAgICAgdlRhc2tJbmNyZW1lbnRUaWNrICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwljYWxsICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0ICAgIDsgQ2FsbCB0aGUgc2NoZWR1bGVyIHRvIHNlbGVjdCB0aGUgbmV4dCB0YXNrLg0KKyNlbmRpZg0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkgICAgICAgIDsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4NCisJcmV0aQ0KKw0KKw0KKw0KKzsJUkVRVUlSRSA/Q0w3OEswUl9WMl9MMDANCisJQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMSkgICAgICA7IFNldCBJU1IgbG9jYXRpb24gdG8gdGhlIEludGVycnVwdCB2ZWN0b3IgdGFibGUuDQorCU9SRyA2OA0KK2A/P01EX0lOVFRNMDU/P0lOVFZFQyA2OGA6DQorCURXIE1EX0lOVFRNMDUNCisNCisJQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMSkgICAgICA7IFNldCBJU1IgbG9jYXRpb24gdG8gdGhlIEludGVycnVwdCB2ZWN0b3IgdGFibGUuDQorCU9SRyAxMjYNCitgPz92UG9ydFlpZWxkPz9JTlRWRUMgMTI2YDoNCisJRFcgdlBvcnRZaWVsZA0KKw0KKwkJCQkJCQkJCTsgU2V0IHZhbHVlIGZvciB0aGUgdXNDcml0aWNhbE5lc3RpbmcuDQorCVJTRUcgTkVBUl9JRDpDT05TVDpTT1JUOk5PUk9PVCgxKQ0KK2A/PEluaXRpYWxpemVyIGZvciB1c0NyaXRpY2FsTmVzdGluZz5gOg0KKwlEVyAxMA0KKw0KKzsjZW5kaWYNCisNCisgICAgICBFTkQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzBiYTJmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE4MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICBmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVuc2lnbmVkIHNob3J0DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgc2hvcnQNCisNCisjaWYgKGNvbmZpZ1VTRV8xNl9CSVRfVElDS1M9PTEpDQorCXR5cGVkZWYgdW5zaWduZWQgaW50IHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgX19hc20gKCAiREkiICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCSBfX2FzbSAoICJFSSIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbCBtYWNyb3MuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCQkoICggdW5zaWduZWQgcG9ydFNIT1JUICkgMCApDQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0U0hPUlQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRTSE9SVCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0KCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQlfX2FzbSggIkJSSyIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisjZGVmaW5lIHBvcnROT1AoKQlfX2FzbSggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3d2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKw0KK3N0YXRpYyBfX2ludGVycnVwdCB2b2lkIFAwX2lzciAgICh2b2lkKTsNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogT3B0aW9uLWJ5dGVzIGFuZCBzZWN1cml0eSBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZGVmaW5lIE9QVF9CWVRFU19TSVpFICAgICA0DQorI2RlZmluZSBTRUNVX0lEX1NJWkUgICAgICAgMTANCisjZGVmaW5lIFdBVENIRE9HX0RJU0FCTEVEICAweDAwDQorI2RlZmluZSBMVklfRU5BQkxFRCAgICAgICAgMHhGRQ0KKyNkZWZpbmUgTFZJX0RJU0FCTEVEICAgICAgIDB4RkYNCisjZGVmaW5lIFJFU0VSVkVEX0ZGICAgICAgICAweEZGDQorI2RlZmluZSBPQ0RfRElTQUJMRUQgICAgICAgMHgwNA0KKyNkZWZpbmUgT0NEX0VOQUJMRUQgICAgICAgIDB4ODENCisjZGVmaW5lIE9DRF9FTkFCTEVEX0VSQVNFICAweDgwDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNMC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTAvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjQwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTAvcG9ydC5jCkBAIC0wLDAgKzEsMjIxIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTSBDTTAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBOVklDLiAqLw0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DVFJMCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZTAxNCApDQorI2RlZmluZSBwb3J0TlZJQ19JTlRfQ1RSTAkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMDQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTUFJJMgkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE1JTl9JTlRFUlJVUFRfUFJJT1JJVFkJKCAyNTVVTCApDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCBwb3J0TUlOX0lOVEVSUlVQVF9QUklPUklUWSA8PCAxNlVMICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfUFJJCQkoIHBvcnRNSU5fSU5URVJSVVBUX1BSSU9SSVRZIDw8IDI0VUwgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGluaXRpYWwgc3RhY2suICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9YUFNSCQkJKCAweDAxMDAwMDAwICkNCisNCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZW5zdXJlIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMNCitkZWZpbmVkLiAgVGhlIHZhbHVlIDI1NSBzaG91bGQgYWxzbyBlbnN1cmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCitGcmVlUlRPUy5vcmcgdmVyc2lvbnMgcHJpb3IgdG8gVjQuMy4wIGRpZCBub3QgaW5jbHVkZSB0aGlzIGRlZmluaXRpb24uICovDQorI2lmbmRlZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQorCSNkZWZpbmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAwDQorI2VuZGlmDQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIGNyaXRpY2FsIG5lc3RpbmcNCit2YXJpYWJsZS4gKi8NCitzdGF0aWMgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IDB4YWFhYWFhYWE7DQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBFeGNlcHRpb24gaGFuZGxlcnMuDQorICovDQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBTdGFydCBmaXJzdCB0YXNrIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHRlc3RlZCBpbiBpc29sYXRpb24uDQorICovDQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQorCWludGVycnVwdC4gKi8NCisJcHhUb3BPZlN0YWNrLS07IC8qIE9mZnNldCBhZGRlZCB0byBhY2NvdW50IGZvciB0aGUgd2F5IHRoZSBNQ1UgdXNlcyB0aGUgc3RhY2sgb24gZW50cnkvZXhpdCBvZiBpbnRlcnJ1cHRzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfWFBTUjsJLyogeFBTUiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFBDICovDQorCXB4VG9wT2ZTdGFjayAtPSA2OwkvKiBMUiwgUjEyLCBSMy4uUjEgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjayAtPSA4OyAvKiBSMTEuLlI0LiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE1ha2UgUGVuZFNWIGFuZCBTeXNUaWNrIHRoZSBsb3dlc3QgcHJpb3JpdHkgaW50ZXJydXB0cy4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCQ0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBDTTAgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKQ0KK3sNCisJLyogU2V0IGEgUGVuZFNWIHRvIHJlcXVlc3QgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1eENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7CQ0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KKwkvKiBDb25maWd1cmUgU3lzVGljayB0byBpbnRlcnJ1cHQgYXQgdGhlIHJlcXVlc3RlZCByYXRlLiAqLw0KKwkqKHBvcnROVklDX1NZU1RJQ0tfTE9BRCkgPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMVVMOw0KKwkqKHBvcnROVklDX1NZU1RJQ0tfQ1RSTCkgPSBwb3J0TlZJQ19TWVNUSUNLX0NMSyB8IHBvcnROVklDX1NZU1RJQ0tfSU5UIHwgcG9ydE5WSUNfU1lTVElDS19FTkFCTEU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNMC9wb3J0YXNtLnMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTAvcG9ydGFzbS5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZGYyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTAvcG9ydGFzbS5zCkBAIC0wLDAgKzEsMTY4IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaW5jbHVkZSA8RnJlZVJUT1NDb25maWcuaD4NCisNCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZW5zdXJlIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMNCitkZWZpbmVkLiAgVGhlIHZhbHVlIHplcm8gc2hvdWxkIGFsc28gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQorRnJlZVJUT1Mub3JnIHZlcnNpb25zIHByaW9yIHRvIFY0LjMuMCBkaWQgbm90IGluY2x1ZGUgdGhpcyBkZWZpbml0aW9uLiAqLw0KKyNpZm5kZWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkjZGVmaW5lIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgMA0KKyNlbmRpZg0KKw0KKwkNCisJUlNFRyAgICBDT0RFOkNPREUoMikNCisJdGh1bWINCisNCisJRVhURVJOIHZQb3J0WWllbGRGcm9tSVNSDQorCUVYVEVSTiBweEN1cnJlbnRUQ0INCisJRVhURVJOIHZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwlQVUJMSUMgdlNldE1TUA0KKwlQVUJMSUMgeFBvcnRQZW5kU1ZIYW5kbGVyDQorCVBVQkxJQyB2UG9ydFNWQ0hhbmRsZXINCisJUFVCTElDIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2U2V0TVNQDQorCW1zciBtc3AsIHIwDQorCWJ4IGxyDQorCQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3hQb3J0UGVuZFNWSGFuZGxlcjoNCisJbXJzIHIwLCBwc3AJCQkJCQkJDQorCQkJCQkJCQkJCQkNCisJbGRyCXIzLCA9cHhDdXJyZW50VENCCS8qIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLiAqLw0KKwlsZHIJcjIsIFtyM10JCQkJCQkNCisJCQkJCQkJCQkJCQ0KKwlzdWJzIHIwLCByMCwgIzMyCQkvKiBNYWtlIHNwYWNlIGZvciB0aGUgcmVtYWluaW5nIGxvdyByZWdpc3RlcnMuICovDQorCXN0ciByMCwgW3IyXQkJCS8qIFNhdmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2suICovDQorCXN0bWlhIHIwISwge3I0LXI3fQkJLyogU3RvcmUgdGhlIGxvdyByZWdpc3RlcnMgdGhhdCBhcmUgbm90IHNhdmVkIGF1dG9tYXRpY2FsbHkuICovDQorCW1vdiByNCwgcjgJCQkJLyogU3RvcmUgdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwltb3YgcjUsIHI5CQkJCQkJCQ0KKwltb3YgcjYsIHIxMAkJCQkJCQkNCisJbW92IHI3LCByMTEJCQkJCQkJDQorCXN0bWlhIHIwISwge3I0LXI3fSAgICAgICAgICAgICAgCQ0KKwkJCQkJCQkJCQkJDQorCXB1c2gge3IzLCByMTR9CQkJCQkJDQorCWNwc2lkIGkJCQkJCQkJCQ0KKwlibCB2VGFza1N3aXRjaENvbnRleHQJCQkJDQorCWNwc2llIGkJCQkJCQkJCQ0KKwlwb3Age3IyLCByM30JCQkvKiBsciBnb2VzIGluIHIzLiByMiBub3cgaG9sZHMgdGNiIHBvaW50ZXIuICovDQorCQkJCQkJCQkJCQkNCisJbGRyIHIxLCBbcjJdCQkJCQkJDQorCWxkciByMCwgW3IxXQkJCS8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCWFkZHMgcjAsIHIwLCAjMTYJCS8qIE1vdmUgdG8gdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwlsZG1pYSByMCEsIHtyNC1yN30JCS8qIFBvcCB0aGUgaGlnaCByZWdpc3RlcnMuICovDQorCW1vdiByOCwgcjQJCQkJCQkJDQorCW1vdiByOSwgcjUJCQkJCQkJDQorCW1vdiByMTAsIHI2CQkJCQkJCQ0KKwltb3YgcjExLCByNwkJCQkJCQkNCisJCQkJCQkJCQkJCQ0KKwltc3IgcHNwLCByMAkJCQkvKiBSZW1lbWJlciB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suICovDQorCQkJCQkJCQkJCQkNCisJc3VicyByMCwgcjAsICMzMgkJLyogR28gYmFjayBmb3IgdGhlIGxvdyByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQuICovDQorCWxkbWlhIHIwISwge3I0LXI3fQkJLyogUG9wIGxvdyByZWdpc3RlcnMuICAqLw0KKwkJCQkJCQkJCQkJDQorCWJ4IHIzCQkJCQkJCQkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2UG9ydFNWQ0hhbmRsZXI7DQorCWxkcglyMywgPXB4Q3VycmVudFRDQgkvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KKwlsZHIgcjEsIFtyM10JCQkvKiBHZXQgdGhlIHB4Q3VycmVudFRDQiBhZGRyZXNzLiAqLw0KKwlsZHIgcjAsIFtyMV0JCQkvKiBUaGUgZmlyc3QgaXRlbSBpbiBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgdG9wIG9mIHN0YWNrLiAqLw0KKwlhZGRzIHIwLCByMCwgIzE2CQkvKiBNb3ZlIHRvIHRoZSBoaWdoIHJlZ2lzdGVycy4gKi8NCisJbGRtaWEgcjAhLCB7cjQtcjd9CQkvKiBQb3AgdGhlIGhpZ2ggcmVnaXN0ZXJzLiAqLw0KKwltb3YgcjgsIHI0CQkJCQkJDQorCW1vdiByOSwgcjUJCQkJCQkNCisJbW92IHIxMCwgcjYJCQkJCQkNCisJbW92IHIxMSwgcjcJCQkJCQkNCisJCQkJCQkJCQkJDQorCW1zciBwc3AsIHIwCQkJCS8qIFJlbWVtYmVyIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gKi8NCisJCQkJCQkJCQkJDQorCXN1YnMgcjAsIHIwLCAjMzIJCS8qIEdvIGJhY2sgZm9yIHRoZSBsb3cgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHJlc3RvcmVkLiAqLw0KKwlsZG1pYSByMCEsIHtyNC1yN30JCS8qIFBvcCBsb3cgcmVnaXN0ZXJzLiAgKi8NCisJbW92IHIxLCByMTQJCQkJLyogT1IgUjE0IHdpdGggMHgwZC4gKi8NCisJbW92cyByMCwgIzB4MGQJCQkJCQ0KKwlvcnJzIHIxLCByMAkJCQkJCQ0KKwlieCByMQkJCQkJCQkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorCW1vdnMgcjAsICMweDAwIAkgCQkvKiBMb2NhdGUgdGhlIHRvcCBvZiBzdGFjay4gKi8NCisJbGRyIHIwLCBbcjBdIAkJDQorCW1zciBtc3AsIHIwCQkgCQkvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQorCWNwc2llIGkJCQkgCQkvKiBHbG9iYWxseSBlbmFibGUgaW50ZXJydXB0cy4gKi8NCisJc3ZjIDAJCQkgCQkvKiBTeXN0ZW0gY2FsbCB0byBzdGFydCBmaXJzdCB0YXNrLiAqLw0KKwlub3AJCQkJDQorCQ0KKwlFTkQNCisJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00wL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00wL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZGE4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTAvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKw0KKy8qIFNjaGVkdWxlciB1dGlsaXRpZXMuICovDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkRnJvbUlTUigpDQorDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJX19hc20gdm9sYXRpbGUoICJjcHNpZCBpIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJX19hc20gdm9sYXRpbGUoICJjcHNpZSBpIiApDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCTA7cG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7KHZvaWQpeA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnROT1AoKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTMvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGYzYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnQuYwpAQCAtMCwwICsxLDIyNiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk0gQ00zIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisjaWYgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCisJI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IG5vdCBiZSBzZXQgdG8gMC4gIFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGUwMTAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19MT0FECQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDE0ICkNCisjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQyMCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NMSwkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19JTlQJCTB4MDAwMDAwMDINCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFCQkweDAwMDAwMDAxDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVQJCQkweDEwMDAwMDAwDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAxNiApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX1BSSQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAyNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKw0KKy8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBlbnN1cmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSBpcw0KK2RlZmluZWQuICBUaGUgdmFsdWUgMjU1IHNob3VsZCBhbHNvIGVuc3VyZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KK0ZyZWVSVE9TLm9yZyB2ZXJzaW9ucyBwcmlvciB0byBWNC4zLjAgZGlkIG5vdCBpbmNsdWRlIHRoaXMgZGVmaW5pdGlvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJI2RlZmluZSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIDANCisjZW5kaWYNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cyBpbiB0aGUgY3JpdGljYWwgbmVzdGluZw0KK3ZhcmlhYmxlLiAqLw0KK3N0YXRpYyB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHhhYWFhYWFhYTsNCisNCisvKg0KKyAqIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKTsNCisNCisvKg0KKyAqIFN0YXJ0IGZpcnN0IHRhc2sgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIGlzb2xhdGlvbi4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCisJaW50ZXJydXB0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsgLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0IG9mIGludGVycnVwdHMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9YUFNSOwkvKiB4UFNSICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsJLyogUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAwOwkvKiBMUiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gNTsJLyogUjEyLCBSMywgUjIgYW5kIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrIC09IDg7CS8qIFIxMSwgUjEwLCBSOSwgUjgsIFI3LCBSNiwgUjUgYW5kIFI0LiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE1ha2UgUGVuZFNWIGFuZCBTeXNUaWNrIHRoZSBsb3dlc3QgcHJpb3JpdHkgaW50ZXJydXB0cy4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCQ0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBDTTMgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKQ0KK3sNCisJLyogU2V0IGEgUGVuZFNWIHRvIHJlcXVlc3QgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1eENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7CQ0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnRhc20ucyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNMy9wb3J0YXNtLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllMGJiMwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNMy9wb3J0YXNtLnMKQEAgLTAsMCArMSwxNjggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlIDxGcmVlUlRPU0NvbmZpZy5oPg0KKw0KKy8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBlbnN1cmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSBpcw0KK2RlZmluZWQuICBUaGUgdmFsdWUgemVybyBzaG91bGQgYWxzbyBlbnN1cmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCitGcmVlUlRPUy5vcmcgdmVyc2lvbnMgcHJpb3IgdG8gVjQuMy4wIGRpZCBub3QgaW5jbHVkZSB0aGlzIGRlZmluaXRpb24uICovDQorI2lmbmRlZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQorCSNkZWZpbmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAwDQorI2VuZGlmDQorDQorCQ0KKwlSU0VHICAgIENPREU6Q09ERSgyKQ0KKwl0aHVtYg0KKw0KKwlFWFRFUk4gdlBvcnRZaWVsZEZyb21JU1INCisJRVhURVJOIHB4Q3VycmVudFRDQg0KKwlFWFRFUk4gdlRhc2tTd2l0Y2hDb250ZXh0DQorDQorCVBVQkxJQyB2U2V0TVNQDQorCVBVQkxJQyB4UG9ydFBlbmRTVkhhbmRsZXINCisJUFVCTElDIHZQb3J0U2V0SW50ZXJydXB0TWFzaw0KKwlQVUJMSUMgdlBvcnRDbGVhckludGVycnVwdE1hc2sNCisJUFVCTElDIHZQb3J0U1ZDSGFuZGxlcg0KKwlQVUJMSUMgdlBvcnRTdGFydEZpcnN0VGFzaw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZTZXRNU1ANCisJbXNyIG1zcCwgcjANCisJYnggbHINCisJDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQoreFBvcnRQZW5kU1ZIYW5kbGVyOg0KKwltcnMgcjAsIHBzcAkJCQkJCQ0KKwlsZHIJcjMsID1weEN1cnJlbnRUQ0IJCQkvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisJbGRyCXIyLCBbcjNdCQkJCQkJDQorDQorCXN0bWRiIHIwISwge3I0LXIxMX0JCQkJLyogU2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJc3RyIHIwLCBbcjJdCQkJCQkvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKw0KKwlzdG1kYiBzcCEsIHtyMywgcjE0fQ0KKwltb3YgcjAsICNjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJbXNyIGJhc2VwcmksIHIwDQorCWJsIHZUYXNrU3dpdGNoQ29udGV4dAkJCQ0KKwltb3YgcjAsICMwDQorCW1zciBiYXNlcHJpLCByMA0KKwlsZG1pYSBzcCEsIHtyMywgcjE0fQ0KKw0KKwlsZHIgcjEsIFtyM10JCQkJCQ0KKwlsZHIgcjAsIFtyMV0JCQkJCS8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCWxkbWlhIHIwISwge3I0LXIxMX0JCQkJLyogUG9wIHRoZSByZWdpc3RlcnMuICovDQorCW1zciBwc3AsIHIwCQkJCQkJDQorCWJ4IHIxNAkJCQkJCQkNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2UG9ydFNldEludGVycnVwdE1hc2s6DQorCW1vdiByMCwgI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwltc3IgQkFTRVBSSSwgcjANCisNCisJYnggcjE0DQorCQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrOg0KKwkvKiBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KKwlodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSBkaXNhZ3JlZWluZy4gKi8NCisJbW92IHIwLCAjMA0KKwltc3IgQkFTRVBSSSwgcjANCisNCisJYnggcjE0DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordlBvcnRTVkNIYW5kbGVyOw0KKwlsZHIJcjMsID1weEN1cnJlbnRUQ0INCisJbGRyIHIxLCBbcjNdDQorCWxkciByMCwgW3IxXQ0KKwlsZG1pYSByMCEsIHtyNC1yMTF9DQorCW1zciBwc3AsIHIwDQorCW1vdiByMCwgIzANCisJbXNyCWJhc2VwcmksIHIwDQorCW9yciByMTQsIHIxNCwgIzEzDQorCWJ4IHIxNA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZQb3J0U3RhcnRGaXJzdFRhc2sNCisJLyogVXNlIHRoZSBOVklDIG9mZnNldCByZWdpc3RlciB0byBsb2NhdGUgdGhlIHN0YWNrLiAqLw0KKwlsZHIgcjAsID0weEUwMDBFRDA4DQorCWxkciByMCwgW3IwXQ0KKwlsZHIgcjAsIFtyMF0NCisJLyogU2V0IHRoZSBtc3AgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLiAqLw0KKwltc3IgbXNwLCByMA0KKwkvKiBDYWxsIFNWQyB0byBzdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJY3BzaWUgaQ0KKwlzdmMgMA0KKw0KKwlFTkQNCisJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ00zL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOWI2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTMvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKw0KKy8qIFNjaGVkdWxlciB1dGlsaXRpZXMuICovDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkRnJvbUlTUigpDQorDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl2UG9ydFNldEludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisNCisvKiBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KK2h0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLiAqLw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCQkwO3ZQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJdlBvcnRDbGVhckludGVycnVwdE1hc2soKTsodm9pZCl4DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNNEYvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ000Ri9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNWU2OAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVJNX0NNNEYvcG9ydC5jCkBAIC0wLDAgKzEsMjUxIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTSBDTTRGIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisjaWZuZGVmIF9fQVJNVkZQX18NCisJI2Vycm9yIFRoaXMgcG9ydCBjYW4gb25seSBiZSB1c2VkIHdoZW4gdGhlIHByb2plY3Qgb3B0aW9ucyBhcmUgY29uZmlndXJlZCB0byBlbmFibGUgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydC4NCisjZW5kaWYNCisNCisjaWYgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCisJI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IG5vdCBiZSBzZXQgdG8gMC4gIFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGUwMTQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkwJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqICkgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWX1BSSQkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMTYgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19QUkkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMjQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBWRlAuICovDQorI2RlZmluZSBwb3J0RlBDQ1IJCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlZjM0ICkgLyogRmxvYXRpbmcgcG9pbnQgY29udGV4dCBjb250cm9sIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgcG9ydEFTUEVOX0FORF9MU1BFTl9CSVRTCSggMHgzVUwgPDwgMzBVTCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRVhFQ19SRVRVUk4JCSggMHhmZmZmZmZmZCApDQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIGNyaXRpY2FsIG5lc3RpbmcNCit2YXJpYWJsZS4gKi8NCitzdGF0aWMgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IDB4YWFhYWFhYWE7DQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBFeGNlcHRpb24gaGFuZGxlcnMuDQorICovDQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBTdGFydCBmaXJzdCB0YXNrIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHRlc3RlZCBpbiBpc29sYXRpb24uDQorICovDQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKy8qDQorICogRnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFzbS5zIHRvIGVuYWJsZSB0aGUgVkZQLg0KKyAqLw0KK2V4dGVybiB2b2lkIHZQb3J0RW5hYmxlVkZQKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCisJaW50ZXJydXB0LiAqLw0KKwkNCisJLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0DQorCW9mIGludGVycnVwdHMsIGFuZCB0byBlbnN1cmUgYWxpZ25tZW50LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJCQ0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfWFBTUjsJLyogeFBTUiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFBDICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMDsJLyogTFIgKi8NCisJDQorCS8qIFNhdmUgY29kZSBzcGFjZSBieSBza2lwcGluZyByZWdpc3RlciBpbml0aWFsaXNhdGlvbi4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDU7CS8qIFIxMiwgUjMsIFIyIGFuZCBSMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CS8qIFIwICovDQorDQorCS8qIEEgc2F2ZSBtZXRob2QgaXMgYmVpbmcgdXNlZCB0aGF0IHJlcXVpcmVzIGVhY2ggdGFzayB0byBtYWludGFpbiBpdHMNCisJb3duIGV4ZWMgcmV0dXJuIHZhbHVlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VYRUNfUkVUVVJOOw0KKw0KKwlweFRvcE9mU3RhY2sgLT0gODsJLyogUjExLCBSMTAsIFI5LCBSOCwgUjcsIFI2LCBSNSBhbmQgUjQuICovDQorCQ0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE1ha2UgUGVuZFNWIGFuZCBTeXNUaWNrIHRoZSBsb3dlc3QgcHJpb3JpdHkgaW50ZXJydXB0cy4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCQ0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBFbnN1cmUgdGhlIFZGUCBpcyBlbmFibGVkIC0gaXQgc2hvdWxkIGJlIGFueXdheS4gKi8NCisJdlBvcnRFbmFibGVWRlAoKTsNCisJDQorCS8qIExhenkgc2F2ZSBhbHdheXMuICovDQorCSooIHBvcnRGUENDUiApIHw9IHBvcnRBU1BFTl9BTkRfTFNQRU5fQklUUzsNCisJDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIENNNEYgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKQ0KK3sNCisJLyogU2V0IGEgUGVuZFNWIHRvIHJlcXVlc3QgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1eENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7CQ0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ000Ri9wb3J0YXNtLnMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTRGL3BvcnRhc20ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmViNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ000Ri9wb3J0YXNtLnMKQEAgLTAsMCArMSwxODggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlIDxGcmVlUlRPU0NvbmZpZy5oPg0KKw0KKwlSU0VHICAgIENPREU6Q09ERSgyKQ0KKwl0aHVtYg0KKw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB2VGFza1N3aXRjaENvbnRleHQNCisNCisJUFVCTElDIHhQb3J0UGVuZFNWSGFuZGxlcg0KKwlQVUJMSUMgdlBvcnRTZXRJbnRlcnJ1cHRNYXNrDQorCVBVQkxJQyB2UG9ydENsZWFySW50ZXJydXB0TWFzaw0KKwlQVUJMSUMgdlBvcnRTVkNIYW5kbGVyDQorCVBVQkxJQyB2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorCVBVQkxJQyB2UG9ydEVuYWJsZVZGUA0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3hQb3J0UGVuZFNWSGFuZGxlcjoNCisJbXJzIHIwLCBwc3AJCQkJCQkNCisJDQorCS8qIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLiAqLw0KKwlsZHIJcjMsID1weEN1cnJlbnRUQ0IJCQkNCisJbGRyCXIyLCBbcjNdCQkJCQkJDQorDQorCS8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCisJdHN0IHIxNCwgIzB4MTANCisJaXQgZXENCisJdnN0bWRiZXEgcjAhLCB7czE2LXMzMX0NCisNCisJLyogU2F2ZSB0aGUgY29yZSByZWdpc3RlcnMuICovDQorCXN0bWRiIHIwISwge3I0LXIxMSwgcjE0fQkJCQkNCisJDQorCS8qIFNhdmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgaW50byB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBUQ0IuICovDQorCXN0ciByMCwgW3IyXQ0KKwkNCisJc3RtZGIgc3AhLCB7cjMsIHIxNH0NCisJbW92IHIwLCAjY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorCW1zciBiYXNlcHJpLCByMA0KKwlibCB2VGFza1N3aXRjaENvbnRleHQJCQkNCisJbW92IHIwLCAjMA0KKwltc3IgYmFzZXByaSwgcjANCisJbGRtaWEgc3AhLCB7cjMsIHIxNH0NCisNCisJLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCisJbGRyIHIxLCBbcjNdCQ0KKwlsZHIgcjAsIFtyMV0NCisJDQorCS8qIFBvcCB0aGUgY29yZSByZWdpc3RlcnMuICovDQorCWxkbWlhIHIwISwge3I0LXIxMSwgcjE0fQ0KKw0KKwkvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcG9wIHRoZSBoaWdoIHZmcCByZWdpc3RlcnMgDQorCXRvby4gKi8NCisJdHN0IHIxNCwgIzB4MTANCisJaXQgZXENCisJdmxkbWlhZXEgcjAhLCB7czE2LXMzMX0NCisJDQorCW1zciBwc3AsIHIwCQkJCQkJDQorCWJ4IHIxNAkJCQkJCQkNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2UG9ydFNldEludGVycnVwdE1hc2s6DQorCW1vdiByMCwgI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwltc3IgQkFTRVBSSSwgcjANCisNCisJYnggcjE0DQorCQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrOg0KKwkvKiBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KKwlodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSBkaXNhZ3JlZWluZy4gKi8NCisJbW92IHIwLCAjMA0KKwltc3IgQkFTRVBSSSwgcjANCisNCisJYnggcjE0DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordlBvcnRTVkNIYW5kbGVyOg0KKwkvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisJbGRyCXIzLCA9cHhDdXJyZW50VENCDQorCWxkciByMSwgW3IzXQ0KKwlsZHIgcjAsIFtyMV0NCisJLyogUG9wIHRoZSBjb3JlIHJlZ2lzdGVycy4gKi8NCisJbGRtaWEgcjAhLCB7cjQtcjExLCByMTR9DQorCW1zciBwc3AsIHIwDQorCW1vdiByMCwgIzANCisJbXNyCWJhc2VwcmksIHIwCQ0KKwlieCByMTQNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwkvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorCWxkciByMCwgPTB4RTAwMEVEMDgNCisJbGRyIHIwLCBbcjBdDQorCWxkciByMCwgW3IwXQ0KKwkvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQorCW1zciBtc3AsIHIwDQorCS8qIENhbGwgU1ZDIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwljcHNpZSBpDQorCXN2YyAwDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordlBvcnRFbmFibGVWRlA6DQorCS8qIFRoZSBGUFUgZW5hYmxlIGJpdHMgYXJlIGluIHRoZSBDUEFDUi4gKi8NCisJbGRyLncgcjAsID0weEUwMDBFRDg4DQorCWxkcglyMSwgW3IwXQ0KKwkNCisJLyogRW5hYmxlIENQMTAgYW5kIENQMTEgY29wcm9jZXNzb3JzLCB0aGVuIHNhdmUgYmFjay4gKi8NCisJb3JyCXIxLCByMSwgIyggMHhmIDw8IDIwICkNCisJc3RyIHIxLCBbcjBdDQorCWJ4CXIxNAkNCisJDQorDQorDQorCUVORA0KKwkNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FSTV9DTTRGL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ000Ri9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODg0NzRkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BUk1fQ000Ri9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE1MyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorDQorLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCXZQb3J0WWllbGRGcm9tSVNSKCkNCisNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZQb3J0WWllbGRGcm9tSVNSKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXZQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRDbGVhckludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKw0KKy8qIEZBUTogIFNldHRpbmcgQkFTRVBSSSB0byAwIGlzIG5vdCBhIGJ1Zy4gIFBsZWFzZSBzZWUgDQoraHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBiZWZvcmUgZGlzYWdyZWVpbmcuICovDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCTA7dlBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQl2UG9ydENsZWFySW50ZXJydXB0TWFzaygpOyh2b2lkKXgNCisNCisvKiBUaGVyZSBhcmUgYW4gdW5ldmVuIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgaW5pdGlhbCBzdGFjaywgc28gDQorcG9ydEFMSUdOTUVOVF9BU1NFUlRfcHhDdXJyZW50VENCKCkgd2lsbCB0cmlnZ2VyIGZhbHNlIHBvc2l0aXZlIGFzc2VydHMuICovDQorI2RlZmluZSBwb3J0QUxJR05NRU5UX0FTU0VSVF9weEN1cnJlbnRUQ0IgKCB2b2lkICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2RlZmluZSBwb3J0Tk9QKCkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTBmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0LmMKQEAgLTAsMCArMSwzNzggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSL0lBUiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU3RhcnQgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZXMuICovDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4ODAgKQ0KKw0KKy8qIEhhcmR3YXJlIGNvbnN0YW50cyBmb3IgdGltZXIgMS4gKi8NCisjZGVmaW5lIHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENICQkJCSggKCB1bnNpZ25lZCBjaGFyICkgMHgwOCApDQorI2RlZmluZSBwb3J0UFJFU0NBTEVfNjQJCQkJCQkJKCAoIHVuc2lnbmVkIGNoYXIgKSAweDAzICkNCisjZGVmaW5lIHBvcnRDTE9DS19QUkVTQ0FMRVIJCQkJCQkoICggdW5zaWduZWQgbG9uZyApIDY0ICkNCisjZGVmaW5lIHBvcnRDT01QQVJFX01BVENIX0FfSU5URVJSVVBUX0VOQUJMRQkoICggdW5zaWduZWQgY2hhciApIDB4MTAgKQ0KKw0KKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBvbiB0aGUgaGFyZHdhcmUgc3RhY2sgYnkgdGhlIHRhc2sgc3RhcnQgYWRkcmVzcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFU19VU0VEX0JZX1JFVFVSTl9BRERSRVNTCQkoIDIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFN0b3JlcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyBtdXN0IG5vdCBiZSBpbml0aWFsaXNlZCB0byAwLg0KK0l0IHdpbGwgYmUgaW5pdGlhbGlzZWQgd2hlbiBhIHRhc2sgc3RhcnRzLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcJCQkJCSggKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZyA9IDB4NTA7DQorDQorDQorLyoNCisgKiBQZXJmb3JtIGhhcmR3YXJlIHNldHVwIHRvIGVuYWJsZSB0aWNrcyBmcm9tIHRpbWVyIDEsIGNvbXBhcmUgbWF0Y2ggQS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgSUFSIGNvbXBpbGVyIGRvZXMgbm90IGhhdmUgZnVsbCBzdXBwb3J0IGZvciBpbmxpbmUgYXNzZW1ibGVyLCBzbw0KKyAqIHRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBwb3J0bWFjcm8gYXNzZW1ibGVyIGZpbGUuDQorICovDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21UaWNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydCggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIHNob3J0IHVzQWRkcmVzczsNCitwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZkhhcmR3YXJlU3RhY2s7DQorDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSZW1lbWJlciB3aGVyZSB0aGUgdG9wIG9mIHRoZSBoYXJkd2FyZSBzdGFjayBpcyAtIHRoaXMgaXMgcmVxdWlyZWQNCisJYmVsb3cuICovDQorCXB4VG9wT2ZIYXJkd2FyZVN0YWNrID0gcHhUb3BPZlN0YWNrOw0KKw0KKw0KKwkvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKS4gKi8NCisNCisJLypsaW50IC1lOTUwIC1lNjExIC1lOTIzIExpbnQgZG9lc24ndCBsaWtlIHRoaXMgbXVjaCAtIGJ1dCBub3RoaW5nIEkgY2FuIGRvIGFib3V0IGl0LiAqLw0KKw0KKw0KKw0KKwkvKiBUaGUgSUFSIGNvbXBpbGVyIHJlcXVpcmVzIHR3byBzdGFja3MgcGVyIHRhc2suICBGaXJzdCB0aGVyZSBpcyB0aGUNCisJaGFyZHdhcmUgY2FsbCBzdGFjayB3aGljaCB1c2VzIHRoZSBBVlIgc3RhY2sgcG9pbnRlci4gIFNlY29uZCB0aGVyZSBpcyB0aGUNCisJc29mdHdhcmUgc3RhY2sgKGxvY2FsIHZhcmlhYmxlcywgcGFyYW1ldGVyIHBhc3NpbmcsIGV0Yy4pIHdoaWNoIHVzZXMgdGhlDQorCUFWUiBZIHJlZ2lzdGVyLg0KKwkNCisJVGhpcyBmdW5jdGlvbiBwbGFjZXMgYm90aCBzdGFja3Mgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgcGFzc2VkIGluIGFzIHRoZQ0KKwlmaXJzdCBwYXJhbWV0ZXIuICBUaGUgaGFyZHdhcmUgc3RhY2sgaXMgcGxhY2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIG1lbW9yeQ0KKwlibG9jay4gIEEgZ2FwIGlzIHRoZW4gbGVmdCBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIHRvIGdyb3cuICBOZXh0IHRoZSBzb2Z0d2FyZQ0KKwlzdGFjayBpcyBwbGFjZWQuICBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZQ0KKwlzdGFja3MgaXMgZGVmaW5lZCBieSBjb25maWdDQUxMX1NUQUNLX1NJWkUuDQorDQorDQorDQorCVRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayBpcyB0aGUgaGFyZHdhcmUgc3RhY2suICBQbGFjZSB0aGUgc3RhcnQNCisJYWRkcmVzcyBvZiB0aGUgdGFzayBvbiB0aGUgaGFyZHdhcmUgc3RhY2suICovDQorCXVzQWRkcmVzcyA9ICggdW5zaWduZWQgc2hvcnQgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1c0FkZHJlc3MgJiAoIHVuc2lnbmVkIHNob3J0ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwl1c0FkZHJlc3MgPj49IDg7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1c0FkZHJlc3MgJiAoIHVuc2lnbmVkIHNob3J0ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKw0KKwkvKiBMZWF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBzdGFjayBiZWZvcmUgc3RhcnRpbmcgdGhlIHNvZnR3YXJlDQorCXN0YWNrLiAgVGhlICctIDInIGlzIGJlY2F1c2Ugd2UgaGF2ZSBhbHJlYWR5IHVzZWQgdHdvIHNwYWNlcyBmb3IgdGhlDQorCWFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0YXNrLiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gKCBjb25maWdDQUxMX1NUQUNLX1NJWkUgLSAyICk7DQorDQorDQorDQorCS8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuDQorCXBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjANCisJdG8gZW5zdXJlIHRoZSBpbnRlcnJ1cHRzIGdldCBkaXNhYmxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgc28gZW5zdXJpbmcNCisJdGhlIHN0YWNrIHVzZSBpcyBtaW5pbWFsIHNob3VsZCBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBvY2N1ci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwOwkvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIE5leHQgcGxhY2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlIHN0YWNrLiAgVGhpcyBpcyByZXF1aXJlZCBzbw0KKwl0aGUgQVZSIHN0YWNrIHBvaW50ZXIgY2FuIGJlIHJlc3RvcmVkIHRvIHBvaW50IHRvIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8NCisJcHhUb3BPZkhhcmR3YXJlU3RhY2sgLT0gcG9ydEJZVEVTX1VTRURfQllfUkVUVVJOX0FERFJFU1M7DQorCXVzQWRkcmVzcyA9ICggdW5zaWduZWQgc2hvcnQgKSBweFRvcE9mSGFyZHdhcmVTdGFjazsNCisNCisJLyogU1BMICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1c0FkZHJlc3MgJiAoIHVuc2lnbmVkIHNob3J0ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBTUEggKi8NCisJdXNBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdXNBZGRyZXNzICYgKCB1bnNpZ25lZCBzaG9ydCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisNCisNCisNCisJLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTM7CS8qIFIxMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE0OwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxNTsJLyogUjE1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBQbGFjZSB0aGUgcGFyYW1ldGVyIG9uIHRoZSBzdGFjayBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICovDQorCXVzQWRkcmVzcyA9ICggdW5zaWduZWQgc2hvcnQgKSBwdlBhcmFtZXRlcnM7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1c0FkZHJlc3MgJiAoIHVuc2lnbmVkIHNob3J0ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwl1c0FkZHJlc3MgPj49IDg7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1c0FkZHJlc3MgJiAoIHVuc2lnbmVkIHNob3J0ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTg7CS8qIFIxOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE5OwkvKiBSMTkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMDsJLyogUjIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjE7CS8qIFIyMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyOwkvKiBSMjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMzsJLyogUjIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjQ7CS8qIFIyNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDI1OwkvKiBSMjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyNjsJLyogUjI2IFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyNzsJLyogUjI3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgWSByZWdpc3RlciBpcyBub3Qgc3RvcmVkIGFzIGl0IGlzIHVzZWQgYXMgdGhlIHNvZnR3YXJlIHN0YWNrIGFuZA0KKwlnZXRzIHNhdmVkIGludG8gdGhlIHRhc2sgY29udHJvbCBibG9jay4gKi8NCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDMwOwkvKiBSMzAgWiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAzMTsJLyogUjMxICovDQorDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7CS8qIENyaXRpY2FsIG5lc3RpbmcgaXMgemVybyB3aGVuIHRoZSB0YXNrIHN0YXJ0cy4gKi8NCisNCisJLypsaW50ICtlOTUwICtlNjExICtlOTIzICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4NCisJTm9ybWFsbHkgd2Ugd291bGQganVzdCBjYWxsIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBoZXJlLCBidXQgYXMgdGhlIElBUg0KKwljb21waWxlciBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGlubGluZSBhc3NlbWJsZXIgd2UgaGF2ZSB0byBtYWtlIGEgY2FsbC4qLw0KKwl2UG9ydFN0YXJ0KCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZFRSVUU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVZSIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIHRpbWVyIDEgY29tcGFyZSBtYXRjaCBBIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxDb21wYXJlTWF0Y2g7DQordW5zaWduZWQgY2hhciB1Y0hpZ2hCeXRlLCB1Y0xvd0J5dGU7DQorDQorCS8qIFVzaW5nIDE2Yml0IHRpbWVyIDEgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBDb3JyZWN0IGZ1c2VzIG11c3QgYmUNCisJc2VsZWN0ZWQgZm9yIHRoZSBjb25maWdDUFVfQ0xPQ0tfSFogY2xvY2suICovDQorDQorCXVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKw0KKwkvKiBXZSBvbmx5IGhhdmUgMTYgYml0cyBzbyBoYXZlIHRvIHNjYWxlIHRvIGdldCBvdXIgcmVxdWlyZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOw0KKw0KKwkvKiBBZGp1c3QgZm9yIGNvcnJlY3QgdmFsdWUuICovDQorCXVsQ29tcGFyZU1hdGNoIC09ICggdW5zaWduZWQgbG9uZyApIDE7DQorDQorCS8qIFNldHVwIGNvbXBhcmUgbWF0Y2ggdmFsdWUgZm9yIGNvbXBhcmUgbWF0Y2ggQS4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBoZXJlLiAqLw0KKwl1Y0xvd0J5dGUgPSAoIHVuc2lnbmVkIGNoYXIgKSAoIHVsQ29tcGFyZU1hdGNoICYgKCB1bnNpZ25lZCBsb25nICkgMHhmZiApOw0KKwl1bENvbXBhcmVNYXRjaCA+Pj0gODsNCisJdWNIaWdoQnl0ZSA9ICggdW5zaWduZWQgY2hhciApICggdWxDb21wYXJlTWF0Y2ggJiAoIHVuc2lnbmVkIGxvbmcgKSAweGZmICk7DQorCU9DUjFBSCA9IHVjSGlnaEJ5dGU7DQorCU9DUjFBTCA9IHVjTG93Qnl0ZTsNCisNCisJLyogU2V0dXAgY2xvY2sgc291cmNlIGFuZCBjb21wYXJlIG1hdGNoIGJlaGF2aW91ci4gKi8NCisJdWNMb3dCeXRlID0gcG9ydENMRUFSX0NPVU5URVJfT05fTUFUQ0ggfCBwb3J0UFJFU0NBTEVfNjQ7DQorCVRDQ1IxQiA9IHVjTG93Qnl0ZTsNCisNCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgLSB0aGlzIGlzIG9rYXkgYXMgaW50ZXJydXB0IGFyZSBjdXJyZW50bHkgZ2xvYmFsbHkNCisJZGlzYWJsZWQuICovDQorCVRJTVNLIHw9IHBvcnRDT01QQVJFX01BVENIX0FfSU5URVJSVVBUX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisNCisJLyoNCisJICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIF9fdGFzayBhdHRyaWJ1dGUgYXMNCisJICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sNCisJICogY291bnQgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuDQorCSAqLw0KKwlfX3Rhc2sgdm9pZCBTSUdfT1VUUFVUX0NPTVBBUkUxQSggdm9pZCApDQorCXsNCisJCXZQb3J0WWllbGRGcm9tVGljaygpOw0KKwkJYXNtKCAicmV0aSIgKTsNCisJfQ0KKwkNCisjZWxzZQ0KKw0KKwkvKg0KKwkgKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQ0KKwkgKiB0aWNrIGNvdW50LiAgV2UgZG9uJ3QgbmVlZCB0byBzd2l0Y2ggY29udGV4dCwgdGhpcyBjYW4gb25seSBiZSBkb25lIGJ5DQorCSAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsNCisJICoNCisJICogVEhFIElOVEVSUlVQVCBWRUNUT1IgSVMgUE9QVUxBVEVEIElOIHBvcnRtYWNyby5zOTAuICBETyBOT1QgSU5TVEFMTA0KKwkgKiBJVCBIRVJFIFVTSU5HIFRIRSBVU1VBTCBQUkFHTUEuDQorCSAqLwkJDQorCV9faW50ZXJydXB0IHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJdXhDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwl1eENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KK30NCisNCisJDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGUwMGFlCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorQ2hhbmdlcyBmcm9tIFYxLjIuMw0KKw0KKwkrIHBvcnRDUFVfQ0xPU0tfSFogZGVmaW5pdGlvbiBjaGFuZ2VkIHRvIDhNSHogYmFzZSAxMCwgcHJldmlvdXNseSBpdA0KKwkgIGJhc2UgMTYuDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRDSEFSDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRDSEFSDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlhc20oICJjbGkiICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlhc20oICJzZWkiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20oICJub3AiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBLZXJuZWwgdXRpbGl0aWVzLiAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJdlBvcnRZaWVsZCgpDQorDQorI2lmZGVmIElBUl9NRUdBX0FWUg0KKwkjZGVmaW5lIG91dGIoIFBPUlQsIFZBTFVFICkgUE9SVCA9IFZBTFVFDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0bWFjcm8uczkwIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLnM5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBhNTRmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLnM5MApAQCAtMCwwICsxLDI2OCBAQAorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOwkNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorDQorI2luY2x1ZGUgPGlvbTMyMy5oPg0KKw0KKzsgRGVjbGFyZSBhbGwgZXh0ZXJuIHN5bWJvbHMgaGVyZSAtIGluY2x1ZGluZyBhbnkgSVNScyB0aGF0IGFyZSByZWZlcmVuY2VkIGluDQorOyB0aGUgdmVjdG9yIHRhYmxlLg0KKw0KKzsgSVNSIGZ1bmN0aW9ucw0KKzsgLS0tLS0tLS0tLS0tLQ0KK0VYVEVSTiBTSUdfT1VUUFVUX0NPTVBBUkUxQQ0KK0VYVEVSTiBTSUdfVUFSVF9SRUNWDQorRVhURVJOIFNJR19VQVJUX0RBVEENCisNCisNCis7IEZ1bmN0aW9ucyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorRVhURVJOIHZUYXNrU3dpdGNoQ29udGV4dA0KK0VYVEVSTiBweEN1cnJlbnRUQ0INCitFWFRFUk4gdlRhc2tJbmNyZW1lbnRUaWNrDQorRVhURVJOIHV4Q3JpdGljYWxOZXN0aW5nDQorDQorOyBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmaWxlDQorOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorUFVCTElDIHZQb3J0WWllbGQNCitQVUJMSUMgdlBvcnRZaWVsZEZyb21UaWNrDQorUFVCTElDIHZQb3J0U3RhcnQNCisNCisNCis7IEludGVycnVwdCB2ZWN0b3IgdGFibGUuDQorOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsNCis7IEZvciBzaW1wbGljaXR5IHRoZSBSVE9TIHRpY2sgaW50ZXJydXB0IHJvdXRpbmUgdXNlcyB0aGUgX190YXNrIGtleXdvcmQuDQorOyBBcyB0aGUgSUFSIGNvbXBpbGVyIGRvZXMgbm90IHBlcm1pdCBhIGZ1bmN0aW9uIHRvIGJlIGRlY2xhcmVkIHVzaW5nIGJvdGgNCis7IF9fdGFzayBhbmQgX19pbnRlcnJ1cHQsIHRoZSB1c2Ugb2YgX190YXNrIG5lY2Vzc2l0YXRlcyB0aGF0IHRoZSBpbnRlcnJ1cHQNCis7IHZlY3RvciB0YWJsZSBiZSBzZXR1cCBtYW51YWxseS4NCis7DQorOyBUbyB3cml0ZSBhbiBJU1IsIGltcGxlbWVudCB0aGUgSVNSIGZ1bmN0aW9uIHVzaW5nIHRoZSBfX2ludGVycnVwdCBrZXl3b3JkDQorOyBidXQgZG8gbm90IGluc3RhbGwgdGhlIGludGVycnVwdCB1c2luZyB0aGUgIiNwcmFnbWEgdmVjdG9yPUFCQyIgbWV0aG9kLg0KKzsgSW5zdGVhZCBtYW51YWxseSBwbGFjZSB0aGUgbmFtZSBvZiB0aGUgSVNSIGluIHRoZSB2ZWN0b3IgdGFibGUgdXNpbmcgYW4NCis7IE9SRyBhbmQgam1wIGluc3RydWN0aW9uIGFzIGRlbW9uc3RyYXRlZCBiZWxvdy4NCis7IFlvdSB3aWxsIGFsc28gaGF2ZSB0byBhZGQgYW4gRVhURVJOIHN0YXRlbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLg0KKw0KKwlBU0VHDQorDQorDQorCU9SRyBUSU1FUjFfQ09NUEFfdmVjdAkJCQk7IFZlY3RvciBhZGRyZXNzDQorCQlqbXAgU0lHX09VVFBVVF9DT01QQVJFMUEJCTsgSVNSDQorDQorCU9SRyBVU0FSVF9SWENfdmVjdAkJCQkJOyBWZWN0b3IgYWRkcmVzcw0KKwkJam1wIFNJR19VQVJUX1JFQ1YJCQkJOyBJU1INCisNCisJT1JHIFVTQVJUX1VEUkVfdmVjdAkJCQkJOyBWZWN0b3IgYWRkcmVzcw0KKwkJam1wIFNJR19VQVJUX0RBVEEJCQkJOyBJU1INCisNCisJDQorCVJTRUcgQ09ERQ0KKw0KKw0KKw0KKzsgU2F2aW5nIGFuZCBSZXN0b3JpbmcgYSBUYXNrIENvbnRleHQgYW5kIFRhc2sgU3dpdGNoaW5nDQorOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7DQorOyBUaGUgSUFSIGNvbXBpbGVyIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgaW5saW5lIGFzc2VtYmxlciwgc28gc2F2aW5nIGFuZA0KKzsgcmVzdG9yaW5nIGEgdGFzayBjb250ZXh0IGhhcyB0byBiZSB3cml0dGVuIGluIGFuIGFzbSBmaWxlLg0KKzsNCis7IHZQb3J0WWllbGQoKSBhbmQgdlBvcnRZaWVsZEZyb21UaWNrKCkgYXJlIHVzdWFsbHkgd3JpdHRlbiBpbiBDLiAgRG9pbmcNCis7IHNvIGluIHRoaXMgY2FzZSB3b3VsZCByZXF1aXJlZCBjYWxscyB0byBiZSBtYWRlIHRvIHBvcnRTQVZFX0NPTlRFWFQoKSBhbmQNCis7IHBvcnRSRVNUT1JFX0NPTlRFWFQoKS4gIFRoaXMgaXMgZGlzLWFkdmFudGFnZW91cyBhcyB0aGUgY29udGV4dCBzd2l0Y2gNCis7IGZ1bmN0aW9uIHdvdWxkIHJlcXVpcmUgdHdvIGV4dHJhIGp1bXAgYW5kIHJldHVybiBpbnN0cnVjdGlvbnMgb3ZlciB0aGUNCis7IFdpbkFWUiBlcXVpdmFsZW50Lg0KKzsNCis7IFRvIGF2b2lkIHRoaXMgSSBoYXZlIG9wdGVkIHRvIGltcGxlbWVudCBib3RoIHZQb3J0WWllbGQoKSBhbmQNCis7IHZQb3J0WWllbGRGcm9tVGljaygpIGluIHRoaXMgYXNzZW1ibHkgZmlsZS4gIEZvciBjb252ZW5pZW5jZQ0KKzsgcG9ydFNBVkVfQ09OVEVYVCBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCBhcmUgaW1wbGVtZW50ZWQgYXMgbWFjcm9zLg0KKw0KK3BvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCisJc3QJLXksIHIwCQkJOyBGaXJzdCBzYXZlIHRoZSByMCByZWdpc3RlciAtIHdlIG5lZWQgdG8gdXNlIHRoaXMuDQorCWluCXIwLCBTUkVHCQk7IE9idGFpbiB0aGUgU1JFRyB2YWx1ZSBzbyB3ZSBjYW4gZGlzYWJsZSBpbnRlcnJ1cHRzLi4uDQorCWNsaQkJCQkJOyAuLi4gYXMgc29vbiBhcyBwb3NzaWJsZS4NCisJc3QJLXksIHIwCQkJOyBTdG9yZSB0aGUgU1JFRyBhcyBpdCB3YXMgYmVmb3JlIHdlIGRpc2FibGVkIGludGVycnVwdHMuDQorDQorCWluCXIwLCBTUEwJCQk7IE5leHQgc3RvcmUgdGhlIGhhcmR3YXJlIHN0YWNrIHBvaW50ZXIuICBUaGUgSUFSLi4uDQorCXN0CS15LCByMAkJCTsgLi4uIGNvbXBpbGVyIHVzZXMgdGhlIGhhcmR3YXJlIHN0YWNrIGFzIGEgY2FsbCBzdGFjayAuLi4NCisJaW4JcjAsIFNQSAkJCTsgLi4uICBvbmx5Lg0KKwlzdAkteSwgcjANCisNCisJc3QJLXksIHIxCQkJOyBOb3cgc3RvcmUgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycy4gIERvbnQgc3RvcmUgdGhlIC4uLg0KKwlzdAkteSwgcjIJCQk7IC4uLiB0aGUgWSByZWdpc3RlciBoZXJlIGFzIGl0IGlzIHVzZWQgYXMgdGhlIHNvZnR3YXJlDQorCXN0CS15LCByMwkJCTsgc3RhY2sgcG9pbnRlciBhbmQgd2lsbCBnZXQgc2F2ZWQgaW50byB0aGUgVENCLg0KKwlzdAkteSwgcjQNCisJc3QJLXksIHI1DQorCXN0CS15LCByNg0KKwlzdAkteSwgcjcNCisJc3QJLXksIHI4DQorCXN0CS15LCByOQ0KKwlzdAkteSwgcjEwDQorCXN0CS15LCByMTENCisJc3QJLXksIHIxMg0KKwlzdAkteSwgcjEzDQorCXN0CS15LCByMTQNCisJc3QJLXksIHIxNQ0KKwlzdAkteSwgcjE2DQorCXN0CS15LCByMTcNCisJc3QJLXksIHIxOA0KKwlzdAkteSwgcjE5DQorCXN0CS15LCByMjANCisJc3QJLXksIHIyMQ0KKwlzdAkteSwgcjIyDQorCXN0CS15LCByMjMNCisJc3QJLXksIHIyNA0KKwlzdAkteSwgcjI1DQorCXN0CS15LCByMjYNCisJc3QJLXksIHIyNw0KKwlzdAkteSwgcjMwDQorCXN0CS15LCByMzENCisJbGRzIHIwLCB1eENyaXRpY2FsTmVzdGluZw0KKwlzdAkteSwgcjAJCQkJCTsgU3RvcmUgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnRlci4NCisNCisJbGRzCXIyNiwgcHhDdXJyZW50VENCCQk7IEZpbmFsbHkgc2F2ZSB0aGUgc29mdHdhcmUgc3RhY2sgcG9pbnRlciAoWSAuLi4NCisJbGRzCXIyNywgcHhDdXJyZW50VENCICsgMQk7IC4uLiByZWdpc3RlcikgaW50byB0aGUgVENCLg0KKwlzdAl4KywgcjI4DQorCXN0CXgrLCByMjkNCisNCisJRU5ETQ0KKw0KKw0KK3BvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCisJbGRzCXIyNiwgcHhDdXJyZW50VENCDQorCWxkcwlyMjcsIHB4Q3VycmVudFRDQiArIDEJOyBSZXN0b3JlIHRoZSBzb2Z0d2FyZSBzdGFjayBwb2ludGVyIGZyb20gLi4uDQorCWxkCXIyOCwgeCsJCQkJCTsgdGhlIFRDQiBpbnRvIHRoZSBzb2Z0d2FyZSBzdGFjayBwb2ludGVyICguLi4NCisJbGQJcjI5LCB4KwkJCQkJOyAuLi4gdGhlIFkgcmVnaXN0ZXIpLg0KKw0KKwlsZAlyMCwgeSsNCisJc3RzCXV4Q3JpdGljYWxOZXN0aW5nLCByMA0KKwlsZAlyMzEsIHkrCQkJCQk7IFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBkb3duIHRvIFIwLiAgVGhlIFkNCisJbGQJcjMwLCB5KwkJCQkJOyByZWdpc3RlciBpcyBtaXNzaW5nIGZyb20gdGhpcyBsaXN0IGFzIGl0DQorCWxkCXIyNywgeSsJCQkJCTsgaGFzIGFscmVhZHkgYmVlbiByZXN0b3JlZC4NCisJbGQJcjI2LCB5Kw0KKwlsZAlyMjUsIHkrDQorCWxkCXIyNCwgeSsNCisJbGQJcjIzLCB5Kw0KKwlsZAlyMjIsIHkrDQorCWxkCXIyMSwgeSsNCisJbGQJcjIwLCB5Kw0KKwlsZAlyMTksIHkrDQorCWxkCXIxOCwgeSsNCisJbGQJcjE3LCB5Kw0KKwlsZAlyMTYsIHkrDQorCWxkCXIxNSwgeSsNCisJbGQJcjE0LCB5Kw0KKwlsZAlyMTMsIHkrDQorCWxkCXIxMiwgeSsNCisJbGQJcjExLCB5Kw0KKwlsZAlyMTAsIHkrDQorCWxkCXI5LCB5Kw0KKwlsZAlyOCwgeSsNCisJbGQJcjcsIHkrDQorCWxkCXI2LCB5Kw0KKwlsZAlyNSwgeSsNCisJbGQJcjQsIHkrDQorCWxkCXIzLCB5Kw0KKwlsZAlyMiwgeSsNCisJbGQJcjEsIHkrDQorDQorCWxkCXIwLCB5KwkJCQkJOyBUaGUgbmV4dCB0aGluZyBvbiB0aGUgc3RhY2sgaXMgdGhlIC4uLg0KKwlvdXQJU1BILCByMAkJCQkJOyAuLi4gaGFyZHdhcmUgc3RhY2sgcG9pbnRlci4NCisJbGQJcjAsIHkrDQorCW91dAlTUEwsIHIwDQorDQorCWxkCXIwLCB5KwkJCQkJOyBOZXh0IHRoZXJlIGlzIHRoZSBTUkVHIHJlZ2lzdGVyLg0KKwlvdXQgU1JFRywgcjANCisNCisJbGQJcjAsIHkrCQkJCQk7IEZpbmFsbHkgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIHIwLCBzbyByZXN0b3JlIHIwLg0KKwkNCisJRU5ETQ0KKw0KKw0KKw0KKzsgdlBvcnRZaWVsZCgpIGFuZCB2UG9ydFlpZWxkRnJvbVRpY2soKQ0KKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsNCis7IE1hbnVhbCBhbmQgcHJlZW1wdGl2ZSBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbnMgcmVzcGVjdGl2ZWx5Lg0KKzsgVGhlIElBUiBjb21waWxlciBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGlubGluZSBhc3NlbWJsZXIsDQorOyBzbyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgaGVyZSByYXRoZXIgdGhhbiB0aGUgbW9yZSB1c3VhbGx5DQorOyBwbGFjZSBvZiB3aXRoaW4gcG9ydC5jLg0KKw0KK3ZQb3J0WWllbGQ6DQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisJY2FsbCB2VGFza1N3aXRjaENvbnRleHQJCTsgQ2FsbCB0aGUgc2NoZWR1bGVyLg0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisJcmV0CQkJCQkJCTsgLi4uIHNjaGVkdWxlciBkZWNpZGVkIHNob3VsZCBydW4uDQorDQordlBvcnRZaWVsZEZyb21UaWNrOg0KKwlwb3J0U0FWRV9DT05URVhUCQkJOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorCWNhbGwgdlRhc2tJbmNyZW1lbnRUaWNrCQk7IENhbGwgdGhlIHRpbWVyIHRpY2sgZnVuY3Rpb24uDQorCWNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0CQk7IENhbGwgdGhlIHNjaGVkdWxlci4NCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB3aGljaGV2ZXIgdGFzayB0aGUgLi4uDQorCXJldAkJCQkJCQk7IC4uLiBzY2hlZHVsZXIgZGVjaWRlZCBzaG91bGQgcnVuLg0KKw0KKzsgdlBvcnRTdGFydCgpDQorOyAtLS0tLS0tLS0tLS0NCis7DQorOyBBZ2FpbiBkdWUgdG8gdGhlIGxhY2sgb2YgaW5saW5lIGFzc2VtYmxlciwgdGhpcyBpcyByZXF1aXJlZA0KKzsgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCBtYWNyby4NCisNCit2UG9ydFN0YXJ0Og0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorCXJldA0KKw0KKw0KKzsgSnVzdCBhIGZpbGxlciBmb3IgdW51c2VkIGludGVycnVwdCB2ZWN0b3JzLg0KK3ZOb0lTUjoNCisJcmV0aQ0KKw0KKw0KKwlFTkQNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9leGNlcHRpb24uczgyIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvZXhjZXB0aW9uLnM4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY3MTJjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvZXhjZXB0aW9uLnM4MgpAQCAtMCwwICsxLDMxMCBAQAorLypUaGlzIGZpbGUgaXMgcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KKy8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKg0KKyAqIFxicmllZiBFeGNlcHRpb24gYW5kIGludGVycnVwdCB2ZWN0b3JzLg0KKyAqDQorICogVGhpcyBmaWxlIG1hcHMgYWxsIGV2ZW50cyBzdXBwb3J0ZWQgYnkgYW4gQVZSMzJVQy4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBJQVIgRVdBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzJVQyBkZXZpY2VzIHdpdGggYW4gSU5UQyBtb2R1bGUgY2FuIGJlIHVzZWQuDQorICogLSBBcHBOb3RlOg0KKyAqDQorICogXGF1dGhvciAgICAgICAgICAgICAgIEF0bWVsIENvcnBvcmF0aW9uOiBodHRwOi8vd3d3LmF0bWVsLmNvbSBcbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGFuZCBGQVE6IGh0dHA6Ly9zdXBwb3J0LmF0bWVsLm5vLw0KKyAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEF0bWVsIENvcnBvcmF0aW9uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqIDMuIFRoZSBuYW1lIG9mIEFUTUVMIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KKyAqIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBFWFBSRVNTTFkgQU5EDQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwNCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YNCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKw0KKyNpbmNsdWRlIDxhdnIzMi9pby5oPg0KKyNpbmNsdWRlICJpbnRjLmgiDQorDQorDQorLy8hIEB7DQorLy8hIFx2ZXJiYXRpbQ0KKw0KKw0KKy8vIFN0YXJ0IG9mIEV4Y2VwdGlvbiBWZWN0b3IgVGFibGUuDQorDQorICAvLyBFVkJBIG11c3QgYmUgYWxpZ25lZCB3aXRoIGEgcG93ZXIgb2YgdHdvIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgRVZCQS0NCisgIC8vIHJlbGF0aXZlIG9mZnNldCBvZiB0aGUgbGFzdCB2ZWN0b3IuDQorICBDT01NT04gIEVWVEFCOkNPREU6Uk9PVCg5KQ0KKw0KKw0KKyAgLy8gRm9yY2UgRVZCQSBpbml0aWFsaXphdGlvbi4NCisgIEVYVEVSTiAgPz9pbml0X0VWQkENCisgIFJFUVVJUkUgPz9pbml0X0VWQkENCisNCisgIC8vIEV4cG9ydCBzeW1ib2wuDQorICBQVUJMSUMgID8/RVZCQQ0KKyAgUFVCTElDICBfZXZiYQ0KKz8/RVZCQToNCitfZXZiYToNCisNCisgICAgICAgIE9SRyAweDAwMA0KKyAgICAgICAgLy8gVW5yZWNvdmVyYWJsZSBFeGNlcHRpb24uDQorX2hhbmRsZV9VbnJlY292ZXJhYmxlX0V4Y2VwdGlvbjoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDA0DQorICAgICAgICAvLyBUTEIgTXVsdGlwbGUgSGl0OiBVTlVTRUQgSU4gQVZSMzJVQy4NCitfaGFuZGxlX1RMQl9NdWx0aXBsZV9IaXQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDAwOA0KKyAgICAgICAgLy8gQnVzIEVycm9yIERhdGEgRmV0Y2guDQorX2hhbmRsZV9CdXNfRXJyb3JfRGF0YV9GZXRjaDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDBDDQorICAgICAgICAgLy8gQnVzIEVycm9yIEluc3RydWN0aW9uIEZldGNoLg0KK19oYW5kbGVfQnVzX0Vycm9yX0luc3RydWN0aW9uX0ZldGNoOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICBPUkcgMHgwMTANCisgICAgICAgIC8vIE5NSS4NCitfaGFuZGxlX05NSToNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDE0DQorICAgICAgICAvLyBJbnN0cnVjdGlvbiBBZGRyZXNzLg0KK19oYW5kbGVfSW5zdHJ1Y3Rpb25fQWRkcmVzczoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDE4DQorICAgICAgICAvLyBJVExCIFByb3RlY3Rpb24uDQorX2hhbmRsZV9JVExCX1Byb3RlY3Rpb246DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDAxQw0KKyAgICAgICAgLy8gQnJlYWtwb2ludC4NCitfaGFuZGxlX0JyZWFrcG9pbnQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDAyMA0KKyAgICAgICAgLy8gSWxsZWdhbCBPcGNvZGUuDQorX2hhbmRsZV9JbGxlZ2FsX09wY29kZToNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDI0DQorICAgICAgICAvLyBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uLg0KK19oYW5kbGVfVW5pbXBsZW1lbnRlZF9JbnN0cnVjdGlvbjoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDI4DQorICAgICAgICAvLyBQcml2aWxlZ2UgVmlvbGF0aW9uLg0KK19oYW5kbGVfUHJpdmlsZWdlX1Zpb2xhdGlvbjoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDJDDQorICAgICAgICAvLyBGbG9hdGluZy1Qb2ludDogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9GbG9hdGluZ19Qb2ludDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDMwDQorICAgICAgICAvLyBDb3Byb2Nlc3NvciBBYnNlbnQ6IFVOVVNFRCBJTiBBVlIzMlVDLg0KK19oYW5kbGVfQ29wcm9jZXNzb3JfQWJzZW50Og0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICBPUkcgMHgwMzQNCisgICAgICAgIC8vIERhdGEgQWRkcmVzcyAoUmVhZCkuDQorX2hhbmRsZV9EYXRhX0FkZHJlc3NfUmVhZDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDM4DQorICAgICAgICAvLyBEYXRhIEFkZHJlc3MgKFdyaXRlKS4NCitfaGFuZGxlX0RhdGFfQWRkcmVzc19Xcml0ZToNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDNDDQorICAgICAgICAvLyBEVExCIFByb3RlY3Rpb24gKFJlYWQpLg0KK19oYW5kbGVfRFRMQl9Qcm90ZWN0aW9uX1JlYWQ6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDA0MA0KKyAgICAgICAgLy8gRFRMQiBQcm90ZWN0aW9uIChXcml0ZSkuDQorX2hhbmRsZV9EVExCX1Byb3RlY3Rpb25fV3JpdGU6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDA0NA0KKyAgICAgICAgLy8gRFRMQiBNb2RpZmllZDogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9EVExCX01vZGlmaWVkOg0KKyAgICAgICAgcmptcCAkDQorDQorICAgICAgICBPUkcgMHgwNTANCisgICAgICAgIC8vIElUTEIgTWlzczogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9JVExCX01pc3M6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDA2MA0KKyAgICAgICAgLy8gRFRMQiBNaXNzIChSZWFkKTogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9EVExCX01pc3NfUmVhZDoNCisgICAgICAgIHJqbXAgJA0KKw0KKyAgICAgICAgT1JHIDB4MDcwDQorICAgICAgICAvLyBEVExCIE1pc3MgKFdyaXRlKTogVU5VU0VEIElOIEFWUjMyVUMuDQorX2hhbmRsZV9EVExCX01pc3NfV3JpdGU6DQorICAgICAgICByam1wICQNCisNCisgICAgICAgIE9SRyAweDEwMA0KKyAgICAgICAgLy8gU3VwZXJ2aXNvciBDYWxsLg0KK19oYW5kbGVfU3VwZXJ2aXNvcl9DYWxsOg0KKyAgICAgICAgbGRkcGMgICBwYywgX19TQ0FMTFlpZWxkDQorDQorDQorLy8gSW50ZXJydXB0IHN1cHBvcnQuDQorLy8gVGhlIGludGVycnVwdCBjb250cm9sbGVyIG11c3QgcHJvdmlkZSB0aGUgb2Zmc2V0IGFkZHJlc3MgcmVsYXRpdmUgdG8gRVZCQS4NCisvLyBJbXBvcnRhbnQgbm90ZToNCisvLyAgIEFsbCBpbnRlcnJ1cHRzIGNhbGwgYSBDIGZ1bmN0aW9uIG5hbWVkIF9nZXRfaW50ZXJydXB0X2hhbmRsZXIuDQorLy8gICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBncm91cCBhbmQgaW50ZXJydXB0IGxpbmUgbnVtYmVyIHRvIHRoZW4gcmV0dXJuIGluDQorLy8gICBSMTIgYSBwb2ludGVyIHRvIGEgdXNlci1wcm92aWRlZCBpbnRlcnJ1cHQgaGFuZGxlci4NCisNCisgIEFMSUdOIDINCisNCitfaW50MDoNCisgIC8vIFI4LVIxMiwgTFIsIFBDIGFuZCBTUiBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgc3lzdGVtIHN0YWNrIGJ5IHRoZQ0KKyAgLy8gQ1BVIHVwb24gaW50ZXJydXB0IGVudHJ5Lg0KKyNpZiAxIC8vIEIxODMyOiBpbnRlcnJ1cHQgc3RhY2sgY2hhbmdlZCB0byBleGNlcHRpb24gc3RhY2sgaWYgZXhjZXB0aW9uIGlzIGRldGVjdGVkLg0KKyAgbWZzciAgICByMTIsIEFWUjMyX1NSDQorICBiZmV4dHUgIHIxMiwgcjEyLCBBVlIzMl9TUl9NMF9PRkZTRVQsIEFWUjMyX1NSX00wX1NJWkUgKyBBVlIzMl9TUl9NMV9TSVpFICsgQVZSMzJfU1JfTTJfU0laRQ0KKyAgY3AudyAgICByMTIsIDExMGINCisgIGJybG8gICAgX2ludDBfbm9ybWFsDQorICBsZGRzcCAgIHIxMiwgc3BbMCAqIDRdDQorICBzdGRzcCAgIHNwWzYgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMSAqIDRdDQorICBzdGRzcCAgIHNwWzcgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMyAqIDRdDQorICBzdWIgICAgIHNwLCAtNiAqIDQNCisgIHJldGUNCitfaW50MF9ub3JtYWw6DQorI2VuZGlmDQorICBtb3YgICAgIHIxMiwgMCAgLy8gUGFzcyB0aGUgaW50X2xldiBwYXJhbWV0ZXIgdG8gdGhlIF9nZXRfaW50ZXJydXB0X2hhbmRsZXIgZnVuY3Rpb24uDQorICBtY2FsbCAgIF9fZ2V0X2ludGVycnVwdF9oYW5kbGVyDQorICBjcC53ICAgIHIxMiwgMCAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uDQorICBtb3ZuZSAgIHBjLCByMTIgLy8gSWYgdGhpcyB3YXMgbm90IGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgIT0gTlVMTCksIGp1bXAgdG8gdGhlIGhhbmRsZXIuDQorICByZXRlICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgKFIxMiA9PSBOVUxMKSwgcmV0dXJuIGZyb20gZXZlbnQgaGFuZGxlci4NCisNCitfaW50MToNCisgIC8vIFI4LVIxMiwgTFIsIFBDIGFuZCBTUiBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgc3lzdGVtIHN0YWNrIGJ5IHRoZQ0KKyAgLy8gQ1BVIHVwb24gaW50ZXJydXB0IGVudHJ5Lg0KKyNpZiAxIC8vIEIxODMyOiBpbnRlcnJ1cHQgc3RhY2sgY2hhbmdlZCB0byBleGNlcHRpb24gc3RhY2sgaWYgZXhjZXB0aW9uIGlzIGRldGVjdGVkLg0KKyAgbWZzciAgICByMTIsIEFWUjMyX1NSDQorICBiZmV4dHUgIHIxMiwgcjEyLCBBVlIzMl9TUl9NMF9PRkZTRVQsIEFWUjMyX1NSX00wX1NJWkUgKyBBVlIzMl9TUl9NMV9TSVpFICsgQVZSMzJfU1JfTTJfU0laRQ0KKyAgY3AudyAgICByMTIsIDExMGINCisgIGJybG8gICAgX2ludDFfbm9ybWFsDQorICBsZGRzcCAgIHIxMiwgc3BbMCAqIDRdDQorICBzdGRzcCAgIHNwWzYgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMSAqIDRdDQorICBzdGRzcCAgIHNwWzcgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMyAqIDRdDQorICBzdWIgICAgIHNwLCAtNiAqIDQNCisgIHJldGUNCitfaW50MV9ub3JtYWw6DQorI2VuZGlmDQorICBtb3YgICAgIHIxMiwgMSAgLy8gUGFzcyB0aGUgaW50X2xldiBwYXJhbWV0ZXIgdG8gdGhlIF9nZXRfaW50ZXJydXB0X2hhbmRsZXIgZnVuY3Rpb24uDQorICBtY2FsbCAgIF9fZ2V0X2ludGVycnVwdF9oYW5kbGVyDQorICBjcC53ICAgIHIxMiwgMCAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uDQorICBtb3ZuZSAgIHBjLCByMTIgLy8gSWYgdGhpcyB3YXMgbm90IGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgIT0gTlVMTCksIGp1bXAgdG8gdGhlIGhhbmRsZXIuDQorICByZXRlICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgKFIxMiA9PSBOVUxMKSwgcmV0dXJuIGZyb20gZXZlbnQgaGFuZGxlci4NCisNCitfaW50MjoNCisgIC8vIFI4LVIxMiwgTFIsIFBDIGFuZCBTUiBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgc3lzdGVtIHN0YWNrIGJ5IHRoZQ0KKyAgLy8gQ1BVIHVwb24gaW50ZXJydXB0IGVudHJ5Lg0KKyNpZiAxIC8vIEIxODMyOiBpbnRlcnJ1cHQgc3RhY2sgY2hhbmdlZCB0byBleGNlcHRpb24gc3RhY2sgaWYgZXhjZXB0aW9uIGlzIGRldGVjdGVkLg0KKyAgbWZzciAgICByMTIsIEFWUjMyX1NSDQorICBiZmV4dHUgIHIxMiwgcjEyLCBBVlIzMl9TUl9NMF9PRkZTRVQsIEFWUjMyX1NSX00wX1NJWkUgKyBBVlIzMl9TUl9NMV9TSVpFICsgQVZSMzJfU1JfTTJfU0laRQ0KKyAgY3AudyAgICByMTIsIDExMGINCisgIGJybG8gICAgX2ludDJfbm9ybWFsDQorICBsZGRzcCAgIHIxMiwgc3BbMCAqIDRdDQorICBzdGRzcCAgIHNwWzYgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMSAqIDRdDQorICBzdGRzcCAgIHNwWzcgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMyAqIDRdDQorICBzdWIgICAgIHNwLCAtNiAqIDQNCisgIHJldGUNCitfaW50Ml9ub3JtYWw6DQorI2VuZGlmDQorICBtb3YgICAgIHIxMiwgMiAgLy8gUGFzcyB0aGUgaW50X2xldiBwYXJhbWV0ZXIgdG8gdGhlIF9nZXRfaW50ZXJydXB0X2hhbmRsZXIgZnVuY3Rpb24uDQorICBtY2FsbCAgIF9fZ2V0X2ludGVycnVwdF9oYW5kbGVyDQorICBjcC53ICAgIHIxMiwgMCAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uDQorICBtb3ZuZSAgIHBjLCByMTIgLy8gSWYgdGhpcyB3YXMgbm90IGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgIT0gTlVMTCksIGp1bXAgdG8gdGhlIGhhbmRsZXIuDQorICByZXRlICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgKFIxMiA9PSBOVUxMKSwgcmV0dXJuIGZyb20gZXZlbnQgaGFuZGxlci4NCisNCitfaW50MzoNCisgIC8vIFI4LVIxMiwgTFIsIFBDIGFuZCBTUiBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgc3lzdGVtIHN0YWNrIGJ5IHRoZQ0KKyAgLy8gQ1BVIHVwb24gaW50ZXJydXB0IGVudHJ5Lg0KKyNpZiAxIC8vIEIxODMyOiBpbnRlcnJ1cHQgc3RhY2sgY2hhbmdlZCB0byBleGNlcHRpb24gc3RhY2sgaWYgZXhjZXB0aW9uIGlzIGRldGVjdGVkLg0KKyAgbWZzciAgICByMTIsIEFWUjMyX1NSDQorICBiZmV4dHUgIHIxMiwgcjEyLCBBVlIzMl9TUl9NMF9PRkZTRVQsIEFWUjMyX1NSX00wX1NJWkUgKyBBVlIzMl9TUl9NMV9TSVpFICsgQVZSMzJfU1JfTTJfU0laRQ0KKyAgY3AudyAgICByMTIsIDExMGINCisgIGJybG8gICAgX2ludDNfbm9ybWFsDQorICBsZGRzcCAgIHIxMiwgc3BbMCAqIDRdDQorICBzdGRzcCAgIHNwWzYgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMSAqIDRdDQorICBzdGRzcCAgIHNwWzcgKiA0XSwgcjEyDQorICBsZGRzcCAgIHIxMiwgc3BbMyAqIDRdDQorICBzdWIgICAgIHNwLCAtNiAqIDQNCisgIHJldGUNCitfaW50M19ub3JtYWw6DQorI2VuZGlmDQorICBtb3YgICAgIHIxMiwgMyAgLy8gUGFzcyB0aGUgaW50X2xldiBwYXJhbWV0ZXIgdG8gdGhlIF9nZXRfaW50ZXJydXB0X2hhbmRsZXIgZnVuY3Rpb24uDQorICBtY2FsbCAgIF9fZ2V0X2ludGVycnVwdF9oYW5kbGVyDQorICBjcC53ICAgIHIxMiwgMCAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uDQorICBtb3ZuZSAgIHBjLCByMTIgLy8gSWYgdGhpcyB3YXMgbm90IGEgc3B1cmlvdXMgaW50ZXJydXB0IChSMTIgIT0gTlVMTCksIGp1bXAgdG8gdGhlIGhhbmRsZXIuDQorICByZXRlICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgKFIxMiA9PSBOVUxMKSwgcmV0dXJuIGZyb20gZXZlbnQgaGFuZGxlci4NCisNCisNCisvLyBDb25zdGFudCBkYXRhIGFyZWEuDQorDQorICBBTElHTiAyDQorDQorICAvLyBJbXBvcnQgc3ltYm9scy4NCisgIEVYVEVSTiAgU0NBTExZaWVsZA0KKyAgRVhURVJOICBfZ2V0X2ludGVycnVwdF9oYW5kbGVyDQorX19TQ0FMTFlpZWxkOg0KKyAgREMzMiAgU0NBTExZaWVsZA0KK19fZ2V0X2ludGVycnVwdF9oYW5kbGVyOg0KKyAgREMzMiAgX2dldF9pbnRlcnJ1cHRfaGFuZGxlcg0KKw0KKyAgLy8gVmFsdWVzIHRvIHN0b3JlIGluIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvciB0aGUgdmFyaW91cyBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzLg0KKyAgLy8gVGhlIGludGVycnVwdCBwcmlvcml0eSByZWdpc3RlcnMgY29udGFpbiB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGxldmVsIGFuZA0KKyAgLy8gdGhlIEVWQkEtcmVsYXRpdmUgaW50ZXJydXB0IHZlY3RvciBvZmZzZXQuDQorICBQVUJMSUMgIGlwcl92YWwNCitpcHJfdmFsOg0KKyAgREMzMiAgKElOVDAgPDwgQVZSMzJfSU5UQ19JUFIwX0lOVExFVl9PRkZTRVQpIHwgKF9pbnQwIC0gX2V2YmEpLFwNCisgICAgICAgIChJTlQxIDw8IEFWUjMyX0lOVENfSVBSMF9JTlRMRVZfT0ZGU0VUKSB8IChfaW50MSAtIF9ldmJhKSxcDQorICAgICAgICAoSU5UMiA8PCBBVlIzMl9JTlRDX0lQUjBfSU5UTEVWX09GRlNFVCkgfCAoX2ludDIgLSBfZXZiYSksXA0KKyAgICAgICAgKElOVDMgPDwgQVZSMzJfSU5UQ19JUFIwX0lOVExFVl9PRkZTRVQpIHwgKF9pbnQzIC0gX2V2YmEpDQorDQorDQorICBFTkQNCisNCisNCisvLyEgXGVuZHZlcmJhdGltDQorLy8hIEB9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWZmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0LmMKQEAgLTAsMCArMSw0NDUgQEAKKy8qVGhpcyBmaWxlIGhhcyBiZWVuIHByZXBhcmVkIGZvciBEb3h5Z2VuIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uKi8NCisvKiEgXGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICoNCisgKiBcYnJpZWYgRnJlZVJUT1MgcG9ydCBzb3VyY2UgZm9yIEFWUjMyIFVDMy4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBJQVIgRVdBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyBjYW4gYmUgdXNlZC4NCisgKiAtIEFwcE5vdGU6DQorICoNCisgKiBcYXV0aG9yICAgICAgICAgICAgICAgQXRtZWwgQ29ycG9yYXRpb246IGh0dHA6Ly93d3cuYXRtZWwuY29tIFxuDQorICogICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgYW5kIEZBUTogaHR0cDovL3N1cHBvcnQuYXRtZWwubm8vDQorICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQVZSMzIgVUMzIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxhdnIzMi9pby5oPg0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorI2luY2x1ZGUgImdwaW8uaCINCisNCisjaWYgY29uZmlnREJHDQorCSNpbmNsdWRlICJ1c2FydC5oIg0KKyNlbmRpZg0KKw0KKyNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwkjaW5jbHVkZSAidGMuaCINCisjZW5kaWYNCisNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICAgICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDQwMDAwMCApIC8qIEFWUjMyIDogW00yOk0wXT0wMDEgSTFNPTAgSTBNPTAsIEdNPTAgKi8NCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMCApDQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcgdmFyaWFibGUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICggKCB1bnNpZ25lZCBsb25nICkgMCApDQordm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCisNCisjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0wICkNCisJc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayggdm9pZCApOw0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIHBydkNsZWFyVGNJbnQoIHZvaWQgKTsNCisjZW5kaWYNCisNCisvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBMb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSB0aGUgbWFpbg0KKyAqIGZ1bmN0aW9uLg0KKyAqLw0KK2ludCBfX2xvd19sZXZlbF9pbml0KHZvaWQpDQorew0KKwkjaWYgY29uZmlnSEVBUF9JTklUDQorCQkjcHJhZ21hIHNlZ21lbnQgPSAiSEVBUCINCisJCXBvcnRCQVNFX1RZUEUgKnB4TWVtOw0KKwkjZW5kaWYNCisNCisJLyogRW5hYmxlIGV4Y2VwdGlvbnMuICovDQorCUVOQUJMRV9BTExfRVhDRVBUSU9OUygpOw0KKw0KKwkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZy4gKi8NCisJSU5UQ19pbml0X2ludGVycnVwdHMoKTsNCisNCisJI2lmIGNvbmZpZ0hFQVBfSU5JVA0KKwl7DQorCQkvKiBJbml0aWFsaXplIHRoZSBoZWFwIHVzZWQgYnkgbWFsbG9jLiAqLw0KKwkJZm9yKCBweE1lbSA9IF9fc2VnbWVudF9iZWdpbiggIkhFQVAiICk7IHB4TWVtIDwgKCBwb3J0QkFTRV9UWVBFICogKSBfX3NlZ21lbnRfZW5kKCAiSEVBUCIgKTsgKQ0KKwkJew0KKwkJCSpweE1lbSsrID0gMHhBNUE1QTVBNTsNCisJCX0NCisJfQ0KKwkjZW5kaWYNCisNCisJLyogQ29kZSBzZWN0aW9uIHByZXNlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGRlYnVnIHRyYWNlIGlzIGFjdGl2YXRlZC4gKi8NCisJI2lmIGNvbmZpZ0RCRw0KKwl7DQorCQlzdGF0aWMgY29uc3QgZ3Bpb19tYXBfdCBEQkdfVVNBUlRfR1BJT19NQVAgPQ0KKwkJew0KKwkJCXsgY29uZmlnREJHX1VTQVJUX1JYX1BJTiwgY29uZmlnREJHX1VTQVJUX1JYX0ZVTkNUSU9OIH0sDQorCQkJeyBjb25maWdEQkdfVVNBUlRfVFhfUElOLCBjb25maWdEQkdfVVNBUlRfVFhfRlVOQ1RJT04gfQ0KKwkJfTsNCisNCisJCXN0YXRpYyBjb25zdCB1c2FydF9vcHRpb25zX3QgREJHX1VTQVJUX09QVElPTlMgPQ0KKwkJew0KKwkJCS5iYXVkcmF0ZSA9IGNvbmZpZ0RCR19VU0FSVF9CQVVEUkFURSwNCisJCQkuY2hhcmxlbmd0aCA9IDgsDQorCQkJLnBhcml0eXR5cGUgPSBVU0FSVF9OT19QQVJJVFksDQorCQkJLnN0b3BiaXRzID0gVVNBUlRfMV9TVE9QQklULA0KKwkJCS5jaGFubmVsbW9kZSA9IFVTQVJUX05PUk1BTF9DSE1PREUNCisJCX07DQorDQorCQkvKiBJbml0aWFsaXplIHRoZSBVU0FSVCB1c2VkIGZvciB0aGUgZGVidWcgdHJhY2Ugd2l0aCB0aGUgY29uZmlndXJlZCBwYXJhbWV0ZXJzLiAqLw0KKwkJZXh0ZXJuIHZvbGF0aWxlIGF2cjMyX3VzYXJ0X3QgKnZvbGF0aWxlIHN0ZGlvX3VzYXJ0X2Jhc2U7DQorCQlzdGRpb191c2FydF9iYXNlID0gY29uZmlnREJHX1VTQVJUOw0KKwkJZ3Bpb19lbmFibGVfbW9kdWxlKCBEQkdfVVNBUlRfR1BJT19NQVAsDQorCQkgICAgICAgICAgICAgICAgICAgIHNpemVvZiggREJHX1VTQVJUX0dQSU9fTUFQICkgLyBzaXplb2YoIERCR19VU0FSVF9HUElPX01BUFswXSApICk7DQorCQl1c2FydF9pbml0X3JzMjMyKGNvbmZpZ0RCR19VU0FSVCwgJkRCR19VU0FSVF9PUFRJT05TLCBjb25maWdDUFVfQ0xPQ0tfSFopOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkvKiBSZXF1ZXN0IGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc2VnbWVudHMuICovDQorCXJldHVybiAxOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBZGRlZCBhcyB0aGVyZSBpcyBubyBzdWNoIGZ1bmN0aW9uIGluIEZyZWVSVE9TLiAqLw0KK3ZvaWQgKnB2UG9ydFJlYWxsb2MoIHZvaWQgKnB2LCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KK3sNCit2b2lkICpwdlJldHVybjsNCisNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorCXsNCisJCXB2UmV0dXJuID0gcmVhbGxvYyggcHYsIHhXYW50ZWRTaXplICk7DQorCX0NCisJeFRhc2tSZXN1bWVBbGwoKTsNCisNCisJcmV0dXJuIHB2UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8NCitzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisvKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMgc2F2ZWQNCitvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCisjcHJhZ21hIHNoYWRvd19yZWdpc3RlcnMgPSBmdWxsICAgLy8gTmFrZWQuDQorc3RhdGljIHZvaWQgdlRpY2soIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKTsNCisNCisJI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MSApDQorCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovDQorCQlwcnZDbGVhclRjSW50KCk7DQorCSNlbHNlDQorCQkvKiBTY2hlZHVsZSB0aGUgQ09VTlQmQ09NUEFSRSBtYXRjaCBpbnRlcnJ1cHQgaW4gKGNvbmZpZ0NQVV9DTE9DS19IWi9jb25maWdUSUNLX1JBVEVfSFopDQorCQljbG9jayBjeWNsZXMgZnJvbSBub3cuICovDQorCQlwcnZTY2hlZHVsZU5leHRUaWNrKCk7DQorCSNlbmRpZg0KKw0KKwkvKiBCZWNhdXNlIEZyZWVSVE9TIGlzIG5vdCBzdXBwb3NlZCB0byBydW4gd2l0aCBuZXN0ZWQgaW50ZXJydXB0cywgcHV0IGFsbCBPUw0KKwljYWxscyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gLiAqLw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwlwb3J0RVhJVF9DUklUSUNBTCgpOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSAiZWxlY3RlZCB0YXNrIi4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI3ByYWdtYSBzaGFkb3dfcmVnaXN0ZXJzID0gZnVsbCAgIC8vIE5ha2VkLg0KK3ZvaWQgU0NBTExZaWVsZCggdm9pZCApDQorew0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUX1NDQUxMKCk7DQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX1NDQUxMKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQorZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KK2JlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCitpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQorI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwkgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjcHJhZ21hIG9wdGltaXplID0gbm9faW5saW5lDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZih1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HKQ0KKwl7DQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgYWxsIGludGVycnVwdC9leGNlcHRpb24uICovDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQl9DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0bw0KKyAqIHBvcnRTQVZFX0NPTlRFWFQgaGFkIGJlZW4gY2FsbGVkLg0KKyAqDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cywgaXQgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluIFIxMi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkJCQkJLyogUjggKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CQkJCQkvKiBSOSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwQTBBMEEwQTsJCQkJCS8qIFIxMCAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwQjBCMEIwQjsJCQkJCS8qIFIxMSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOwkJCQkJLyogUjEyICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweERFQURCRUVGOwkJCQkJLyogUjE0L0xSICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsgLyogUjE1L1BDICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUjsJCQkJLyogU1IgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RkYwMDAwRkY7CQkJCQkvKiBSMCAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJCQkJCS8qIFIxICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkJCQkJLyogUjIgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CQkJCQkvKiBSMyAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJCQkJCS8qIFI0ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkJCQkJLyogUjUgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CQkJCQkvKiBSNiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJCQkJCS8qIFI3ICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7CQkJLyogdWxDcml0aWNhbE5lc3RpbmcgKi8NCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVZSMzIgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlIHRoZSBDT1VOVCZDT01QQVJFIG1hdGNoIGludGVycnVwdCBpbiAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWikNCitjbG9jayBjeWNsZXMgZnJvbSBub3cuICovDQorI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MCApDQorCXN0YXRpYyB2b2lkIHBydlNjaGVkdWxlRmlyc3RUaWNrKHZvaWQpDQorCXsNCisJCXVuc2lnbmVkIGxvbmcgbEN5Y2xlczsNCisNCisJCWxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPVU5UKTsNCisJCWxDeWNsZXMgKz0gKGNvbmZpZ0NQVV9DTE9DS19IWi9jb25maWdUSUNLX1JBVEVfSFopOw0KKwkJLy8gSWYgbEN5Y2xlcyBlbmRzIHVwIHRvIGJlIDAsIG1ha2UgaXQgMSBzbyB0aGF0IHRoZSBDT01QQVJFIGFuZCBleGNlcHRpb24NCisJCS8vIGdlbmVyYXRpb24gZmVhdHVyZSBkb2VzIG5vdCBnZXQgZGlzYWJsZWQuDQorCQlpZigwID09IGxDeWNsZXMpDQorCQl7DQorCQkJbEN5Y2xlcysrOw0KKwkJfQ0KKwkJU2V0X3N5c3RlbV9yZWdpc3RlcihBVlIzMl9DT01QQVJFLCBsQ3ljbGVzKTsNCisJfQ0KKwkNCisJI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KKwlzdGF0aWMgdm9pZCBwcnZTY2hlZHVsZU5leHRUaWNrKHZvaWQpDQorCXsNCisJCXVuc2lnbmVkIGxvbmcgbEN5Y2xlcywgbENvdW50Ow0KKw0KKwkJbEN5Y2xlcyA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09NUEFSRSk7DQorCQlsQ3ljbGVzICs9IChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKTsNCisJCS8vIElmIGxDeWNsZXMgZW5kcyB1cCB0byBiZSAwLCBtYWtlIGl0IDEgc28gdGhhdCB0aGUgQ09NUEFSRSBhbmQgZXhjZXB0aW9uDQorCQkvLyBnZW5lcmF0aW9uIGZlYXR1cmUgZG9lcyBub3QgZ2V0IGRpc2FibGVkLg0KKwkJaWYoMCA9PSBsQ3ljbGVzKQ0KKwkJew0KKwkJCWxDeWNsZXMrKzsNCisJCX0NCisJCWxDb3VudCA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09VTlQpOw0KKwkJaWYoIGxDeWNsZXMgPCBsQ291bnQgKQ0KKwkJewkJLy8gV2UgbWlzc2VkIGEgdGljaywgcmVjb3ZlciBmb3IgdGhlIG5leHQuDQorCQkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQl9DQorCQlTZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMpOw0KKwl9DQorI2Vsc2UNCisJI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KKwlzdGF0aWMgdm9pZCBwcnZDbGVhclRjSW50KHZvaWQpDQorCXsNCisJCUFWUjMyX1RDLmNoYW5uZWxbY29uZmlnVElDS19UQ19DSEFOTkVMXS5zcjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCkNCit7DQorCSNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKw0KKwkJdm9sYXRpbGUgYXZyMzJfdGNfdCAqdGMgPSAmQVZSMzJfVEM7DQorDQorCQkvLyBPcHRpb25zIGZvciB3YXZlZm9ybSBnZW5yYXRpb24uDQorCQl0Y193YXZlZm9ybV9vcHRfdCB3YXZlZm9ybV9vcHQgPQ0KKwkJew0KKwkJLmNoYW5uZWwgID0gY29uZmlnVElDS19UQ19DSEFOTkVMLCAgICAgICAgICAgICAvKiBDaGFubmVsIHNlbGVjdGlvbi4gKi8NCisNCisJCS5ic3d0cmcgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQi4gKi8NCisJCS5iZWV2dCAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgZXZlbnQgZWZmZWN0IG9uIFRJT0IuICovDQorCQkuYmNwYyAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJDIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQorCQkuYmNwYiAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJCIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQorDQorCQkuYXN3dHJnICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFNvZnR3YXJlIHRyaWdnZXIgZWZmZWN0IG9uIFRJT0EuICovDQorCQkuYWVldnQgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVmZmVjdCBvbiBUSU9BLiAqLw0KKwkJLmFjcGMgICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUuICovDQorCQkuYWNwYSAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJBIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0E6IHRvZ2dsZSAob3RoZXIgcG9zc2liaWxpdGllcyBhcmUgbm9uZSwgc2V0IGFuZCBjbGVhcikuICovDQorDQorCQkud2F2c2VsICAgPSBUQ19XQVZFRk9STV9TRUxfVVBfTU9ERV9SQ19UUklHR0VSLC8qIFdhdmVmb3JtIHNlbGVjdGlvbjogVXAgbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIGNvbXBhcmUuICovDQorCQkuZW5ldHJnICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IHRyaWdnZXIgZW5hYmxlLiAqLw0KKwkJLmVldnQgICAgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBzZWxlY3Rpb24uICovDQorCQkuZWV2dGVkZyAgPSBUQ19TRUxfTk9fRURHRSwgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVkZ2Ugc2VsZWN0aW9uLiAqLw0KKwkJLmNwY2RpcyAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGRpc2FibGUgd2hlbiBSQyBjb21wYXJlLiAqLw0KKwkJLmNwY3N0b3AgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGNsb2NrIHN0b3BwZWQgd2l0aCBSQyBjb21wYXJlLiAqLw0KKw0KKwkJLmJ1cnN0ICAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXJzdCBzaWduYWwgc2VsZWN0aW9uLiAqLw0KKwkJLmNsa2kgICAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9jayBpbnZlcnNpb24uICovDQorCQkudGNjbGtzICAgPSBUQ19DTE9DS19TT1VSQ0VfVEMyICAgICAgICAgICAgICAgIC8qIEludGVybmFsIHNvdXJjZSBjbG9jayAyLiAqLw0KKwkJfTsNCisNCisJCXRjX2ludGVycnVwdF90IHRjX2ludGVycnVwdCA9DQorCQl7DQorCQkJLmV0cmdzPTAsDQorCQkJLmxkcmJzPTAsDQorCQkJLmxkcmFzPTAsDQorCQkJLmNwY3MgPTEsDQorCQkJLmNwYnMgPTAsDQorCQkJLmNwYXMgPTAsDQorCQkJLmxvdnJzPTAsDQorCQkJLmNvdmZzPTAsDQorCQl9Ow0KKw0KKwkjZW5kaWYNCisNCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0L2V4Y2VwdGlvbi4gKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKw0KKwkvKiBSZWdpc3RlciB0aGUgY29tcGFyZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYW5kDQorCWVuYWJsZSB0aGUgY29tcGFyZSBpbnRlcnJ1cHQuICovDQorDQorCSNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwl7DQorCQlJTlRDX3JlZ2lzdGVyX2ludGVycnVwdCgoX19pbnRfaGFuZGxlcikmdlRpY2ssIGNvbmZpZ1RJQ0tfVENfSVJRLCBJTlQwKTsNCisNCisJCS8qIEluaXRpYWxpemUgdGhlIHRpbWVyL2NvdW50ZXIuICovDQorCQl0Y19pbml0X3dhdmVmb3JtKHRjLCAmd2F2ZWZvcm1fb3B0KTsNCisNCisJCS8qIFNldCB0aGUgY29tcGFyZSB0cmlnZ2Vycy4NCisJCVJlbWVtYmVyIFRDIGNvdW50ZXIgaXMgMTYtYml0cywgc28gY291bnRpbmcgc2Vjb25kIGlzIG5vdCBwb3NzaWJsZSENCisJCVRoYXQncyB3aHkgd2UgY29uZmlndXJlIGl0IHRvIGNvdW50IG1zLiAqLw0KKwkJdGNfd3JpdGVfcmMoIHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwsICggY29uZmlnUEJBX0NMT0NLX0haIC8gNCkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisNCisJCXRjX2NvbmZpZ3VyZV9pbnRlcnJ1cHRzKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAmdGNfaW50ZXJydXB0ICk7DQorDQorCQkvKiBTdGFydCB0aGUgdGltZXIvY291bnRlci4gKi8NCisJCXRjX3N0YXJ0KHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwpOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCUlOVENfcmVnaXN0ZXJfaW50ZXJydXB0KChfX2ludF9oYW5kbGVyKSZ2VGljaywgQVZSMzJfQ09SRV9DT01QQVJFX0lSUSwgSU5UMCk7DQorCQlwcnZTY2hlZHVsZUZpcnN0VGljaygpOw0KKwl9DQorCSNlbmRpZg0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGM5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDY4OCBAQAorLypUaGlzIGZpbGUgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KKy8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKg0KKyAqIFxicmllZiBGcmVlUlRPUyBwb3J0IGhlYWRlciBmb3IgQVZSMzIgVUMzLg0KKyAqDQorICogLSBDb21waWxlcjogICAgICAgICAgIElBUiBFV0FWUjMyDQorICogLSBTdXBwb3J0ZWQgZGV2aWNlczogIEFsbCBBVlIzMiBkZXZpY2VzIGNhbiBiZSB1c2VkLg0KKyAqIC0gQXBwTm90ZToNCisgKg0KKyAqIFxhdXRob3IgICAgICAgICAgICAgICBBdG1lbCBDb3Jwb3JhdGlvbjogaHR0cDovL3d3dy5hdG1lbC5jb20gXG4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBhbmQgRkFROiBodHRwOi8vc3VwcG9ydC5hdG1lbC5uby8NCisgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKyNpbmNsdWRlIDxhdnIzMi9pby5oPg0KKyNpbmNsdWRlICJpbnRjLmgiDQorI2luY2x1ZGUgImNvbXBpbGVyLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICBjaGFyDQorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICBsb25nDQorI2RlZmluZSBwb3J0U0hPUlQgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgIHBvcnRMT05HDQorDQorI2RlZmluZSBUQVNLX0RFTEFZX01TKHgpICAgKCAoeCkgICAgICAgIC9wb3J0VElDS19SQVRFX01TICkNCisjZGVmaW5lIFRBU0tfREVMQVlfUyh4KSAgICAoICh4KSoxMDAwICAgL3BvcnRUSUNLX1JBVEVfTVMgKQ0KKyNkZWZpbmUgVEFTS19ERUxBWV9NSU4oeCkgICggKHgpKjYwKjEwMDAvcG9ydFRJQ0tfUkFURV9NUyApDQorDQorI2RlZmluZSBjb25maWdUSUNLX1RDX0lSUSAgICAgICAgICAgICBBVFBBU1RFMihBVlIzMl9UQ19JUlEsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCkNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorICB0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorICB0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TICAgICAgKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgIDQNCisjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICB7X19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3AiKTt9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSU5UQy1zcGVjaWZpYy4gKi8NCisjZGVmaW5lIERJU0FCTEVfQUxMX0VYQ0VQVElPTlMoKSAgICBEaXNhYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KKyNkZWZpbmUgRU5BQkxFX0FMTF9FWENFUFRJT05TKCkgICAgIEVuYWJsZV9nbG9iYWxfZXhjZXB0aW9uKCkNCisNCisjZGVmaW5lIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICBEaXNhYmxlX2dsb2JhbF9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgRU5BQkxFX0FMTF9JTlRFUlJVUFRTKCkgICAgIEVuYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCisNCisjZGVmaW5lIERJU0FCTEVfSU5UX0xFVkVMKGludF9sZXYpICBEaXNhYmxlX2ludGVycnVwdF9sZXZlbChpbnRfbGV2KQ0KKyNkZWZpbmUgRU5BQkxFX0lOVF9MRVZFTChpbnRfbGV2KSAgIEVuYWJsZV9pbnRlcnJ1cHRfbGV2ZWwoaW50X2xldikNCisNCisNCisvKg0KKyAqIERlYnVnIHRyYWNlLg0KKyAqIEFjdGl2YXRlZCBpZiBhbmQgb25seSBpZiBjb25maWdEQkcgaXMgbm9uemVyby4NCisgKiBQcmludHMgYSBmb3JtYXR0ZWQgc3RyaW5nIHRvIHN0ZG91dC4NCisgKiBUaGUgY3VycmVudCBzb3VyY2UgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciBhcmUgb3V0cHV0IHdpdGggYSBjb2xvbiBiZWZvcmUNCisgKiB0aGUgZm9ybWF0dGVkIHN0cmluZy4NCisgKiBBIGNhcnJpYWdlIHJldHVybiBhbmQgYSBsaW5lZmVlZCBhcmUgYXBwZW5kZWQgdG8gdGhlIG91dHB1dC4NCisgKiBzdGRvdXQgaXMgcmVkaXJlY3RlZCB0byB0aGUgVVNBUlQgY29uZmlndXJlZCBieSBjb25maWdEQkdfVVNBUlQuDQorICogVGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgc3RhbmRhcmQgcHJpbnRmIGZ1bmN0aW9uLg0KKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4NCisgKiBTSEFMTCBOT1QgQkUgQ0FMTEVEIEZST00gV0lUSElOIEFOIElOVEVSUlVQVCBhcyBmcHV0cyBhbmQgcHJpbnRmIHVzZSBtYWxsb2MsDQorICogd2hpY2ggaXMgaW50ZXJydXB0LXVuc2FmZSB3aXRoIHRoZSBjdXJyZW50IF9fbWFsbG9jX2xvY2sgYW5kIF9fbWFsbG9jX3VubG9jay4NCisgKi8NCisjaWYgY29uZmlnREJHDQorCSNkZWZpbmUgcG9ydERCR19UUkFDRSguLi4pCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkgIGZwdXRzKF9fRklMRV9fICI6IiBBU1RSSU5HWihfX0xJTkVfXykgIjogIiwgc3Rkb3V0KTsJCQkJCVwNCisJICBwcmludGYoX19WQV9BUkdTX18pOwkJCQkJCQkJCQkJCQlcDQorCSAgZnB1dHMoIlxyXG4iLCBzdGRvdXQpOwkJCQkJCQkJCQkJCVwNCisJfQ0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydERCR19UUkFDRSguLi4pDQorI2VuZGlmDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICBESVNBQkxFX0FMTF9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgRU5BQkxFX0FMTF9JTlRFUlJVUFRTKCkNCisNCisNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisNCisNCisvKiBBZGRlZCBhcyB0aGVyZSBpcyBubyBzdWNoIGZ1bmN0aW9uIGluIEZyZWVSVE9TLiAqLw0KK2V4dGVybiB2b2lkICpwdlBvcnRSZWFsbG9jKCB2b2lkICpwdiwgc2l6ZV90IHhTaXplICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KKw0KKy8qDQorICogUmVzdG9yZSBDb250ZXh0IGZvciBjYXNlcyBvdGhlciB0aGFuIElOVGkuDQorICovDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8JCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICBzcCwgcjBbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLwkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFIwLVI3IHNob3VsZCBub3QgYmUgdXNlZCBiZWxvdyB0aGlzIGxpbmUgKi8JCQkJCQkJCQkJCVwNCisgICAgLyogU2tpcCBQQyBhbmQgU1IgKHdpbGwgZG8gaXQgYXQgdGhlIGVuZCkgKi8JCQkJCQkJCQkJCVwNCisgICAgInN1YiAgICAgc3AsIC0yKjQJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSBSOC4uUjEyIGFuZCBMUiAqLwkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSBTUiAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWy04KjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSMCBpcyBtb2RpZmllZCwgaXMgcmVzdG9yZWQgbGF0ZXIuICovXA0KKyAgICAibXRzciAgICAiQVNUUklOR1ooQVZSMzJfU1IpIiwgcjAJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIHIwICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbLTkqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFBDICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICBwYywgc3BbLTcqNF0iIC8qIEdldCBQQyBmcm9tIHN0YWNrIC0gUEMgaXMgdGhlIDd0aCByZWdpc3RlciBzYXZlZCAqLwkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEZvcmNlIGltcG9ydCBvZiBnbG9iYWwgc3ltYm9scyBmcm9tIGFzc2VtYmx5ICovCQkJCQkJCQkJCVwNCisgIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorDQorLyoNCisgKiBwb3J0U0FWRV9DT05URVhUX0lOVCgpIGFuZCBwb3J0UkVTVE9SRV9DT05URVhUX0lOVCgpOiBmb3IgSU5UMC4uMyBleGNlcHRpb25zLg0KKyAqIHBvcnRTQVZFX0NPTlRFWFRfU0NBTEwoKSBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpOiBmb3IgdGhlIHNjYWxsIGV4Y2VwdGlvbi4NCisgKg0KKyAqIEhhZCB0byBtYWtlIGRpZmZlcmVudCB2ZXJzaW9ucyBiZWNhdXNlIHJlZ2lzdGVycyBzYXZlZCBvbiB0aGUgc3lzdGVtIHN0YWNrDQorICogYXJlIG5vdCB0aGUgc2FtZSBiZXR3ZWVuIElOVDAuLjMgZXhjZXB0aW9ucyBhbmQgdGhlIHNjYWxsIGV4Y2VwdGlvbi4NCisgKi8NCisNCisvLyBUYXNrIGNvbnRleHQgc3RhY2sgbGF5b3V0Og0KKyAgLy8gUjggICgqKQ0KKyAgLy8gUjkgICgqKQ0KKyAgLy8gUjEwICgqKQ0KKyAgLy8gUjExICgqKQ0KKyAgLy8gUjEyICgqKQ0KKyAgLy8gUjE0L0xSICgqKQ0KKyAgLy8gUjE1L1BDICgqKQ0KKyAgLy8gU1IgKCopDQorICAvLyBSMA0KKyAgLy8gUjENCisgIC8vIFIyDQorICAvLyBSMw0KKyAgLy8gUjQNCisgIC8vIFI1DQorICAvLyBSNg0KKyAgLy8gUjcNCisgIC8vIHVsQ3JpdGljYWxOZXN0aW5nDQorLy8gKCopIGF1dG9tYXRpY2FsbHkgZG9uZSBmb3IgSU5UMC4uSU5UMywgYnV0IG5vdCBmb3IgU0NBTEwNCisNCisvKg0KKyAqIFRoZSBJU1IgdXNlZCBmb3IgdGhlIHNjaGVkdWxlciB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCisgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCisgKi8NCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKy8qDQorICogcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSBmb3IgT1MgVGljayBleGNlcHRpb24uDQorICovDQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RtICAgICAtLXNwLCByMC1yNyIpOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJCVwNCisgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKg0KKyAqIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCkgZm9yIFRpY2sgZXhjZXB0aW9uLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZWxzZQ0KKw0KKy8qDQorICogcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSBmb3IgT1MgVGljayBleGNlcHRpb24uDQorICovDQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVnaXN0ZXJzIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgaGFkIGFscmVhZHkgYmVlbiBwdXNoZWQgdG8gc3lzdGVtIHN0YWNrICovCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogQ2hlY2sgaWYgSU5UMCBvciBoaWdoZXIgd2VyZSBiZWluZyBoYW5kbGVkIChjYXNlIHdoZXJlIHRoZSBPUyB0aWNrIGludGVycnVwdGVkIGFub3RoZXIgKi8JXA0KKyAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLwlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCVwNCisgICAgLyogSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0YXNrIHN3aXRjaCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc3RhY2sgKi8JCVwNCisgICAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JXA0KKyAgICAvKiBTYXZpbmcgU1AgaW4gcHhDdXJyZW50VENCIGFuZCB0aGVuIGxhdGVyIHJlc3RvcmluZyBpdCAodGhpbmtpbmcgcmVzdG9yaW5nIHRoZSB0YXNrKSAqLwkJXA0KKyAgICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovCQkJCQkJCQkJXA0KKyAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8JCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiBpbiBzdGFjayAqL1wNCisgICAgImJmZXh0dSAgcjAsIHIwLCAyMiwgMwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KKyAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIgkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8JCQkJCVwNCisgICAgLyogTk9URTogd2UgZG9uJ3QgZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGhlcmUgYmVjYXVzZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzICovCQkJCVwNCisgICAgLyogTVVTVCBwZXJmb3JtIGEgU0FWRV9DT05URVhUL1JFU1RPUkVfQ09OVEVYVCBpbiB0aGUgc2FtZSB3YXkgYXMgKi8JCQkJCQkJXA0KKyAgICAvKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVC9wb3J0X1JFU1RPUkVfQ09OVEVYVF9PU19JTlQgaWYgdGhleSBjYWxsIE9TIGZ1bmN0aW9ucy4gKi8JCQlcDQorICAgIC8qID0+IGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgbXVzdCB1c2UgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IvcG9ydEVYSVRfU1dJVENISU5HX0lTUi4gKi8JCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByMFswXSwgc3AJCQkJCQkJCQkJCQkJCQkJCQkJCVxuIlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSU5UX1NLSVBfU0FWRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiOiIJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorLyoNCisgKiBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpIGZvciBUaWNrIGV4Y2VwdGlvbi4NCisgKi8NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB2b2lkICp2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovCQlcDQorICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLwlcDQorICAvKiBsZXZlbCBhbmQgYWxsb3cgb3RoZXIgbG93ZXIgaW50ZXJydXB0IGxldmVsIHRvIG9jY3VyKS4gKi8JCQkJCQkJCQkJXA0KKyAgLyogSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0YXNrIHN3aXRjaCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc3RhY2sgKi8JCQlcDQorICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLwkJXA0KKyAgLyogU2F2aW5nIFNQIGluIHB4Q3VycmVudFRDQiBhbmQgdGhlbiBsYXRlciByZXN0b3JpbmcgaXQgKHRoaW5raW5nIHJlc3RvcmluZyB0aGUgdGFzaykgKi8JCQlcDQorICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbOSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqL1wNCisgICAgImJyaGkgICAgTEFCRUxfSU5UX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEVsc2UgKi8JCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogYmVjYXVzZSBpdCBpcyBoZXJlIHNhZmUsIGFsd2F5cyBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIHNpbmNlIGFuIE9TIHRpY2sgb2NjdXJyZWQuICovCQlcDQorICAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaGFzIHRvIGJlIHVzZWQgaGVyZSBiZWNhdXNlIHZUYXNrU3dpdGNoQ29udGV4dCBoYW5kbGVzIEZyZWVSVE9TIGxpbmtlZCBsaXN0cy4gKi9cDQorICBwb3J0RU5URVJfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgcG9ydEVYSVRfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcbiJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lOVF9TS0lQX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIjoJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBOb3csIHRoZSBzdGFjayBzaG91bGQgYmUgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBGb3JjZSBpbXBvcnQgb2YgZ2xvYmFsIHN5bWJvbHMgZnJvbSBhc3NlbWJseSAqLwkJCQkJCQkJCQkJCVwNCisgIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNlbmRpZg0KKw0KKw0KKy8qDQorICogcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpIGZvciBTdXBlcnZpc29yQ0FMTCBleGNlcHRpb24uDQorICoNCisgKiBOT1RFOiB0YXNrWUlFTEQoKSg9PSBTQ0FMTCkgTVVTVCBOT1QgYmUgY2FsbGVkIGluIGEgbW9kZSA+IHN1cGVydmlzb3IgbW9kZS4NCisgKg0KKyAqLw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV2FybmluZzogdGhlIHN0YWNrIGxheW91dCBhZnRlciBTQ0FMTCBkb2Vzbid0IG1hdGNoIHRoZSBvbmUgYWZ0ZXIgYW4gaW50ZXJydXB0LiAqLwkJCQlcDQorICAvKiBJZiBTUltNMjpNMF0gPT0gMDAxICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qICAgIFBDIGFuZCBTUiBhcmUgb24gdGhlIHN0YWNrLiAgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogRWxzZSAob3RoZXIgbW9kZXMpICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qICAgIE5vdGhpbmcgb24gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXQVJOSU5HIE5PVEU6IHRoZSBlbHNlIGNhc2UgY2Fubm90IGhhcHBlbiBhcyBpdCBpcyBzdHJpY3RseSBmb3JiaWRkZW4gdG8gY2FsbCAqLwkJCQlcDQorICAvKiB2VGFza0RlbGF5KCkgYW5kIHZUYXNrRGVsYXlVbnRpbCgpIE9TIGZ1bmN0aW9ucyAodGhhdCByZXN1bHQgaW4gYSB0YXNrWWllbGQoKSkgKi8JCQkJXA0KKyAgLyogaW4gYW4gaW50ZXJydXB0fGV4Y2VwdGlvbiBoYW5kbGVyLiAqLwkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGluIG9yZGVyIHRvIHNhdmUgUjAtUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgInN1YiAgICAgc3AsIDYqNAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGluIG9yZGVyIHRvIHNhdmUgUjgtUjEyIGFuZCBMUiAqLwkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogZG8gbm90IHVzZSBTUCBpZiBpbnRlcnJ1cHRzIG9jY3VycywgU1AgbXVzdCBiZSBsZWZ0IGF0IGJvdHRvbSBvZiBzdGFjayAqLwkJCQkJXA0KKyAgICAic3ViICAgICByNywgc3AsLTE2KjQJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIENvcHkgUEMgYW5kIFNSIGluIG90aGVyIHBsYWNlcyBpbiB0aGUgc3RhY2suICovCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjdbLTIqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiAqL1wNCisgICAgInN0LncgICAgcjdbLTgqNF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvcHkgU1IgKi9cDQorICAgICJsZC53ICAgIHIwLCByN1stMSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFBDICovXA0KKyAgICAic3QudyAgICByN1stNyo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBQQyAqL1wNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIFI4Li5SMTIgYW5kIExSIG9uIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tcjcsIHI4LXIxMiwgbHIJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBBcnJpdmluZyBoZXJlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzdGFjayBvcmdhbml6YXRpb25zOiAqLwkJCQkJCQkJCVwNCisgICAgLyogUjguLlIxMiwgTFIsIFBDLCBTUiwgUjAuLlI3LiAqLwkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogTm93IHdlIGNhbiBmaW5hbGl6ZSB0aGUgc2F2ZS4gKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8JCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIC0tc3AsIHIwIgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIERpc2FibGUgdGhlIGl0cyB3aGljaCBtYXkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaCAoaS5lLiBjYXVzZSBhIGNoYW5nZSBvZiAqLwkJCQkJXA0KKyAgLyogcHhDdXJyZW50VENCKS4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEJhc2ljYWxseSwgYWxsIGFjY2Vzc2VzIHRvIHRoZSBweEN1cnJlbnRUQ0Igc3RydWN0dXJlIHNob3VsZCBiZSBwdXQgaW4gYSAqLwkJCQkJXA0KKyAgLyogY3JpdGljYWwgc2VjdGlvbiBiZWNhdXNlIGl0IGlzIGEgZ2xvYmFsIHN0cnVjdHVyZS4gKi8JCQkJCQkJCQkJCVwNCisgIHBvcnRFTlRFUl9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8JCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcCIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisvKg0KKyAqIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBmb3IgU3VwZXJ2aXNvckNBTEwgZXhjZXB0aW9uLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXSIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBMZWF2ZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUgYWNjZXNzIGNyaXRpY2FsIHNlY3Rpb24gKi8JCQkJCQkJCQkJCVwNCisgIHBvcnRFWElUX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByOFswXSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIHNraXAgUEMgYW5kIFNSICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogZG8gbm90IHVzZSBTUCBpZiBpbnRlcnJ1cHRzIG9jY3VycywgU1AgbXVzdCBiZSBsZWZ0IGF0IGJvdHRvbSBvZiBzdGFjayAqLwkJCQkJXA0KKyAgICAic3ViICAgICByNywgc3AsIC0xMCo0CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIHI4LXIxMiBhbmQgTFIgKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHI3KyssIHI4LXIxMiwgbHIJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSRVRTIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBleHRyYSBQQyBhbmQgU1IgcmVzdG9yZS4gKi8JCQkJCQkJCQkJXA0KKyAgICAvKiBTbywgd2UgaGF2ZSB0byBwcmVwYXJlIHRoZSBzdGFjayBmb3IgdGhpcy4gKi8JCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCByN1stOCo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFNSICovXA0KKyAgICAic3QudyAgICByN1stMio0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBTUiAqL1wNCisgICAgImxkLncgICAgcjAsIHI3Wy03KjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgUEMgKi9cDQorICAgICJzdC53ICAgIHI3Wy0xKjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb3B5IFBDICovXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgInN1YiAgICAgc3AsIC02KjQJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJyZXRzIgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEZvcmNlIGltcG9ydCBvZiBnbG9iYWwgc3ltYm9scyBmcm9tIGFzc2VtYmx5ICovCQkJCQkJCQkJCQkJXA0KKyAgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorDQorLyoNCisgKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBjb29wZXJhdGl2ZSBvcg0KKyAqIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLg0KKyAqLw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQorDQorLyoNCisgKiBJU1IgZW50cnkgYW5kIGV4aXQgbWFjcm9zLiAgVGhlc2UgYXJlIG9ubHkgcmVxdWlyZWQgaWYgYSB0YXNrIHN3aXRjaA0KKyAqIGlzIHJlcXVpcmVkIGZyb20gdGhlIElTUi4NCisgKi8NCisjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG0gICAgIC0tc3AsIHIwLXI3Iik7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJCQkJXA0KKyAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHNhdmUuICovCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorLyoNCisgKiBJbnB1dCBwYXJhbWV0ZXI6IGluIFIxMiwgYm9vbGVhbi4gUGVyZm9ybSBhIHZUYXNrU3dpdGNoQ29udGV4dCgpIGlmIDENCisgKi8NCisjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKQkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovCQkJCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZWxzZQ0KKw0KKy8qDQorICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCisgKiBpcyByZXF1aXJlZCBmcm9tIHRoZSBJU1IuDQorICovDQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgcG9ydExPTkcgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVnaXN0ZXJzIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgaGFkIGFscmVhZHkgYmVlbiBwdXNoZWQgdG8gc3lzdGVtIHN0YWNrICovCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogQ2hlY2sgaWYgSU5UMCBvciBoaWdoZXIgd2VyZSBiZWluZyBoYW5kbGVkIChjYXNlIHdoZXJlIHRoZSBPUyB0aWNrIGludGVycnVwdGVkIGFub3RoZXIgKi8JXA0KKyAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLwlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCVwNCisgICAgLyogSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0YXNrIHN3aXRjaCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc3RhY2sgKi8JCVwNCisgICAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JXA0KKyAgICAvKiBTYXZpbmcgU1AgaW4gcHhDdXJyZW50VENCIGFuZCB0aGVuIGxhdGVyIHJlc3RvcmluZyBpdCAodGhpbmtpbmcgcmVzdG9yaW5nIHRoZSB0YXNrKSAqLwkJXA0KKyAgICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovCQkJCQkJCQkJXA0KKyAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8JCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiBpbiBzdGFjayAqL1wNCisgICAgImJmZXh0dSAgcjAsIHIwLCAyMiwgMwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KKyAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lTUl9TS0lQX1NBVkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIgkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8JCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByMFswXSwgc3AJCQkJCQkJCQkJCQkJCQkJCQkJCVxuIlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSVNSX1NLSVBfU0FWRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiOiIJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorDQorLyoNCisgKiBJbnB1dCBwYXJhbWV0ZXI6IGluIFIxMiwgYm9vbGVhbi4gUGVyZm9ybSBhIHZUYXNrU3dpdGNoQ29udGV4dCgpIGlmIDENCisgKi8NCisjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKQkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB2b2lkICp2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCVwNCisgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJXA0KKyAgICAvKiBJbiB0aGlzIGNhc2UgaXQncyBvZiBubyB1c2UgdG8gc3dpdGNoIGNvbnRleHQgYW5kIHJlc3RvcmUgYSBuZXcgU1AgYmVjYXVzZSB3ZSBwdXJwb3NlZGx5ICovCVwNCisgICAgLyogZGlkIG5vdCBwcmV2aW91c2x5IHNhdmUgU1AgaW4gaXRzIFRDQi4gKi8JCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbOSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqL1wNCisgICAgImJyaGkgICAgTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gY2FsbCAqLwkJCQkJCQkJCQkJXA0KKyAgICAvKiB2VGFza1N3aXRjaENvbnRleHQoKSBhcyB0aGUgY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuICovCQkJCQkJCQkJCVwNCisgICAgLyogc2F2ZWQuICovCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiY3AudyAgICByMTIsIDEJCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDaGVjayBpZiBTd2l0Y2ggY29udGV4dCBpcyByZXF1aXJlZC4gKi9cDQorICAgICJicm5lICAgIExBQkVMX0lTUl9SRVNUT1JFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSI6QyIJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqL1wNCisgIHBvcnRFTlRFUl9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBwb3J0RVhJVF9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lTUl9SRVNUT1JFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSI6CQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2Ygd2hpY2ggZXZlciB0YXNrIGlzIG5vdyB0aGUgaGlnaGVzdCAqLwkJCQkJCQkJCVwNCisgICAgLyogcHJpb3JpdHkgdGhhdCBpcyByZWFkeSB0byBydW4uICovCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICBzcCwgcjBbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuIlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiOgkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLwkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3ArKwkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIE5vdywgdGhlIHN0YWNrIHNob3VsZCBiZSBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSICAqLwkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBGb3JjZSBpbXBvcnQgb2YgZ2xvYmFsIHN5bWJvbHMgZnJvbSBhc3NlbWJseSAqLwkJCQkJCQkJCQkJCVwNCisgIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKw0KKyNlbmRpZg0KKw0KKw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgIHtfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNjYWxsIik7fQ0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcmVhZC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWMxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9yZWFkLmMKQEAgLTAsMCArMSw5MyBAQAorLypUaGlzIGZpbGUgaXMgcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KKy8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKg0KKyAqIFxicmllZiBTeXN0ZW0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFxyZWYgX19yZWFkIGZ1bmN0aW9uIHVzZWQgYnkNCisgICAgICAgICAgdGhlIHN0YW5kYXJkIGxpYnJhcnkuDQorICoNCisgKiAtIENvbXBpbGVyOiAgICAgICAgICAgSUFSIEVXQVZSMzINCisgKiAtIFN1cHBvcnRlZCBkZXZpY2VzOiAgQWxsIEFWUjMyIGRldmljZXMgd2l0aCBhIFVTQVJUIG1vZHVsZSBjYW4gYmUgdXNlZC4NCisgKiAtIEFwcE5vdGU6DQorICoNCisgKiBcYXV0aG9yICAgICAgICAgICAgICAgQXRtZWwgQ29ycG9yYXRpb246IGh0dHA6Ly93d3cuYXRtZWwuY29tIFxuDQorICogICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgYW5kIEZBUTogaHR0cDovL3N1cHBvcnQuYXRtZWwubm8vDQorICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qIENvcHlyaWdodCAoYykgMjAwNywgQXRtZWwgQ29ycG9yYXRpb24gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogMy4gVGhlIG5hbWUgb2YgQVRNRUwgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIEVYUFJFU1NMWSBBTkQNCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULA0KKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQNCisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRg0KKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorDQorI2luY2x1ZGUgPHlmdW5zLmg+DQorI2luY2x1ZGUgPGF2cjMyL2lvLmg+DQorI2luY2x1ZGUgInVzYXJ0LmgiDQorDQorDQorX1NURF9CRUdJTg0KKw0KKw0KKyNwcmFnbWEgbW9kdWxlX25hbWUgPSAiP19fcmVhZCINCisNCisNCitleHRlcm4gdm9sYXRpbGUgYXZyMzJfdXNhcnRfdCAqdm9sYXRpbGUgc3RkaW9fdXNhcnRfYmFzZTsNCisNCisNCisvKiEgXGJyaWVmIFJlYWRzIGEgbnVtYmVyIG9mIGJ5dGVzLCBhdCBtb3N0IFxhIHNpemUsIGludG8gdGhlIG1lbW9yeSBhcmVhDQorICogICAgICAgICBwb2ludGVkIHRvIGJ5IFxhIGJ1ZmZlci4NCisgKg0KKyAqIFxwYXJhbSBoYW5kbGUgRmlsZSBoYW5kbGUgdG8gcmVhZCBmcm9tLg0KKyAqIFxwYXJhbSBidWZmZXIgUG9pbnRlciB0byBidWZmZXIgdG8gd3JpdGUgcmVhZCBieXRlcyB0by4NCisgKiBccGFyYW0gc2l6ZSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4NCisgKg0KKyAqIFxyZXR1cm4gVGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBcYyAwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIG9yDQorICogICAgICAgICBcYyBfTExJT19FUlJPUiBvbiBmYWlsdXJlLg0KKyAqLw0KK3NpemVfdCBfX3JlYWQoaW50IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkNCit7DQorICBpbnQgbkNoYXJzID0gMDsNCisNCisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSByZWFkcyBmcm9tIHN0ZGluLg0KKyAgLy8gRm9yIGFsbCBvdGhlciBmaWxlIGhhbmRsZXMsIGl0IHJldHVybnMgZmFpbHVyZS4NCisgIGlmIChoYW5kbGUgIT0gX0xMSU9fU1RESU4pDQorICB7DQorICAgIHJldHVybiBfTExJT19FUlJPUjsNCisgIH0NCisNCisgIGZvciAoOyBzaXplID4gMDsgLS1zaXplKQ0KKyAgew0KKyAgICBpbnQgYyA9IHVzYXJ0X2dldGNoYXIoc3RkaW9fdXNhcnRfYmFzZSk7DQorICAgIGlmIChjIDwgMCkNCisgICAgICBicmVhazsNCisNCisgICAgKmJ1ZmZlcisrID0gYzsNCisgICAgKytuQ2hhcnM7DQorICB9DQorDQorICByZXR1cm4gbkNoYXJzOw0KK30NCisNCisNCitfU1REX0VORA0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3dyaXRlLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy93cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzhhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy93cml0ZS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKlRoaXMgZmlsZSBpcyBwcmVwYXJlZCBmb3IgRG94eWdlbiBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uLiovDQorLyohIFxmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqDQorICogXGJyaWVmIFN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgXHJlZiBfX3dyaXRlIGZ1bmN0aW9uIHVzZWQgYnkNCisgICAgICAgICAgdGhlIHN0YW5kYXJkIGxpYnJhcnkuDQorICoNCisgKiAtIENvbXBpbGVyOiAgICAgICAgICAgSUFSIEVXQVZSMzINCisgKiAtIFN1cHBvcnRlZCBkZXZpY2VzOiAgQWxsIEFWUjMyIGRldmljZXMgd2l0aCBhIFVTQVJUIG1vZHVsZSBjYW4gYmUgdXNlZC4NCisgKiAtIEFwcE5vdGU6DQorICoNCisgKiBcYXV0aG9yICAgICAgICAgICAgICAgQXRtZWwgQ29ycG9yYXRpb246IGh0dHA6Ly93d3cuYXRtZWwuY29tIFxuDQorICogICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgYW5kIEZBUTogaHR0cDovL3N1cHBvcnQuYXRtZWwubm8vDQorICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qIENvcHlyaWdodCAoYykgMjAwNywgQXRtZWwgQ29ycG9yYXRpb24gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogMy4gVGhlIG5hbWUgb2YgQVRNRUwgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIEVYUFJFU1NMWSBBTkQNCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULA0KKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQNCisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRg0KKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorDQorI2luY2x1ZGUgPHlmdW5zLmg+DQorI2luY2x1ZGUgPGF2cjMyL2lvLmg+DQorI2luY2x1ZGUgInVzYXJ0LmgiDQorDQorDQorX1NURF9CRUdJTg0KKw0KKw0KKyNwcmFnbWEgbW9kdWxlX25hbWUgPSAiP19fd3JpdGUiDQorDQorDQorLy8hIFBvaW50ZXIgdG8gdGhlIGJhc2Ugb2YgdGhlIFVTQVJUIG1vZHVsZSBpbnN0YW5jZSB0byB1c2UgZm9yIHN0ZGlvLg0KK19fbm9faW5pdCB2b2xhdGlsZSBhdnIzMl91c2FydF90ICp2b2xhdGlsZSBzdGRpb191c2FydF9iYXNlOw0KKw0KKw0KKy8qISBcYnJpZWYgV3JpdGVzIGEgbnVtYmVyIG9mIGJ5dGVzLCBhdCBtb3N0IFxhIHNpemUsIGZyb20gdGhlIG1lbW9yeSBhcmVhDQorICogICAgICAgICBwb2ludGVkIHRvIGJ5IFxhIGJ1ZmZlci4NCisgKg0KKyAqIElmIFxhIGJ1ZmZlciBpcyB6ZXJvIHRoZW4gXHJlZiBfX3dyaXRlIHBlcmZvcm1zIGZsdXNoaW5nIG9mIGludGVybmFsIGJ1ZmZlcnMsDQorICogaWYgYW55LiBJbiB0aGlzIGNhc2UsIFxhIGhhbmRsZSBjYW4gYmUgXGMgLTEgdG8gaW5kaWNhdGUgdGhhdCBhbGwgaGFuZGxlcw0KKyAqIHNob3VsZCBiZSBmbHVzaGVkLg0KKyAqDQorICogXHBhcmFtIGhhbmRsZSBGaWxlIGhhbmRsZSB0byB3cml0ZSB0by4NCisgKiBccGFyYW0gYnVmZmVyIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJlYWQgYnl0ZXMgdG8gd3JpdGUgZnJvbS4NCisgKiBccGFyYW0gc2l6ZSBOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuDQorICoNCisgKiBccmV0dXJuIFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3IgXGMgX0xMSU9fRVJST1Igb24gZmFpbHVyZS4NCisgKi8NCitzaXplX3QgX193cml0ZShpbnQgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQ0KK3sNCisgIHNpemVfdCBuQ2hhcnMgPSAwOw0KKw0KKyAgaWYgKGJ1ZmZlciA9PSAwKQ0KKyAgew0KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMuDQorICAgIHJldHVybiAwOw0KKyAgfQ0KKw0KKyAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHdyaXRlcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4NCisgIC8vIEZvciBhbGwgb3RoZXIgZmlsZSBoYW5kbGVzLCBpdCByZXR1cm5zIGZhaWx1cmUuDQorICBpZiAoaGFuZGxlICE9IF9MTElPX1NURE9VVCAmJiBoYW5kbGUgIT0gX0xMSU9fU1RERVJSKQ0KKyAgew0KKyAgICByZXR1cm4gX0xMSU9fRVJST1I7DQorICB9DQorDQorICBmb3IgKDsgc2l6ZSAhPSAwOyAtLXNpemUpDQorICB7DQorICAgIGlmICh1c2FydF9wdXRjaGFyKHN0ZGlvX3VzYXJ0X2Jhc2UsICpidWZmZXIrKykgPCAwKQ0KKyAgICB7DQorICAgICAgcmV0dXJuIF9MTElPX0VSUk9SOw0KKyAgICB9DQorDQorICAgICsrbkNoYXJzOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIG5DaGFyczsNCit9DQorDQorDQorX1NURF9FTkQNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1M2NC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdTNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjlkZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdTNjQuaApAQCAtMCwwICsxLDE5MTQgQEAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgVGhlIHNvZnR3YXJlIGlzIGRlbGl2ZXJlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkgb3IgY29uZGl0aW9uIG9mIGFueQ0KKy8vICBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCBvciBzdGF0dXRvcnkuIFRoaXMgaW5jbHVkZXMgd2l0aG91dA0KKy8vICBsaW1pdGF0aW9uIGFueSB3YXJyYW50eSBvciBjb25kaXRpb24gd2l0aCByZXNwZWN0IHRvIG1lcmNoYW50YWJpbGl0eSBvcg0KKy8vICBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLCBvciBhZ2FpbnN0IHRoZSBpbmZyaW5nZW1lbnRzIG9mDQorLy8gIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2Ygb3RoZXJzLg0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdTNjQuaA0KKy8vIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1M2NCBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNy8xNi8yMDA0ICgwNzo0MzowOCkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03UzY0LnBsLzEuMTIvTW9uIEp1bCAxMiAxMzowMjozMCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU0NfU0FNN1N4eC5wbC8xLjUvTW9uIEp1bCAxMiAxNjoyMjoxMiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTAyLnBsLzEuMy9XZWQgTWFyIDEwIDA4OjM3OjA0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQXzE3NjVCLnBsLzEuMy9GcmkgQXVnICAyIDE0OjQ1OjM4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzE3OTZCLnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNLmgvMS42L1R1ZSBBcHIgMjcgMTM6NTM6NTIgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fMTcyNUQucGwvMS4xLjEuMS9GcmkgSnVuIDI4IDA5OjM2OjQ4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV8xNzU0QS5wbC8xLjQvRnJpIEphbiAzMSAxMjoxODoyNCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzE3MzlDLnBsLzEuMi9Nb24gSnVsIDEyIDE3OjI2OjI0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJMi5wbC8xLjIvRnJpIE9jdCAxNyAwODoxMzo0MCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ18xNzYyQS5wbC8xLjIvRnJpIE5vdiAgOCAxMzoyNjo0MCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzE3NjFCLnBsLzEuNC9GcmkgRmViICA3IDEwOjMwOjA4IDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzE3MzRCLnBsLzEuMi9UaHUgTm92IDIxIDE2OjM4OjI0IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDX1NBTS5wbC8xLjcvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyNpZm5kZWYgQVQ5MVNBTTdTNjRfSA0KKyNkZWZpbmUgQVQ5MVNBTTdTNjRfSA0KKw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZU0Mgew0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfSVZSOyAJLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfSVBSOyAJLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lFQ1I7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lTQ1I7IAkvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0RDUjsgCS8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0ZGU1I7IAkvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s3XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0MxUjsgCS8vIENoaXAgSUQxIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfQzJSOyAJLy8gQ2hpcCBJRDIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9GTlRSOyAJLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFs0NV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs1NF07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ4WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ5WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUFBVU1I7IAkvLyBQYWQgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTFbOV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEyWzQ2OV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19TQ0RSOyAJLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUE1DX1BDU1I7IAkvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE1WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE2WzNdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19QQ0tSWzhdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE3WzM2XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19SU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUlNUQ19STVI7IAkvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE4WzVdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1JUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1JUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19SVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSVRDX1BJTVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSVRDX1BJU1I7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSVRDX1BJSVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfV0RUQ19XRENSOyAJLy8gV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19XRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1dEVENfV0RTUjsgCS8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOVs1XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19TWVNDX1ZSUE07IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19TWVNDLCAqQVQ5MVBTX1NZU0M7DQorDQorLy8gLS0tLS0tLS0gVlJQTSA6IChTWVNDIE9mZnNldDogMHhkNjApIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BTVERCWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNZU0MpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUlDLCAqQVQ5MVBTX0FJQzsNCisNCisvLyAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9MRVZFTF9TRU5TSVRJVkUgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfRURHRV9UUklHR0VSRUQgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgRWRnZSB0cmlnZ2VyZWQNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfUE9TSVRJVkVfRURHRSAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisvLyAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIFByb3RlY3Rpb24gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9HTVNLICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1Ugew0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQzFSOyAJLy8gQ2hpcCBJRDEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQzJSOyAJLy8gQ2hpcCBJRDIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KKw0KKy8vIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUUlggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChEQkdVKSBSZXNldCBSZWNlaXZlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBSZWNlaXZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBDaGFubmVsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIFJYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgaW4gSlRBRw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBEYXRhIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCisNCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPIHsNCisJQVQ5MV9SRUcJIFBJT19QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9fT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFBVU1I7IAkvLyBQYWQgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ1WzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUElPLCAqQVQ5MVBTX1BJTzsNCisNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DS0dSIHsNCisJQVQ5MV9SRUcJIENLR1JfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDS0dSX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQ0tHUl9QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorfSBBVDkxU19DS0dSLCAqQVQ5MVBTX0NLR1I7DQorDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1NDRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDS0dSKSBNYWluIENsb2NrIFJlYWR5DQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQNCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMQ09VTlQgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NVUwgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKENLR1IpIFBMTCBNdWx0aXBsaWVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMgew0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzhdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfUE1DLCAqQVQ5MVBTX1BNQzsNCisNCisvLyAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisvLyAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlNUQyB7DQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1JTVEMsICpBVDkxUFNfUlNUQzsNCisNCisvLyAtLS0tLS0tLSBTWVNDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QUk9DUlNUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfSUNFUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgSUNFIEludGVyZmFjZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QRVJSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX0VYVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFNZU0NfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfVVJTVFMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NZU0NfQk9EU1RTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd24tb3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlNUVFlQICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoUlNUQykgUmVzZXQgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX1BPV0VSVVAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfV0FUQ0hET0cgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX1NPRlRXQVJFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4NCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9VU0VSICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX0JST1dOT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChSU1RDKSBCcm93bi1vdXQgUmVzZXQuDQorI2RlZmluZSBBVDkxQ19TWVNDX05SU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19TWVNDX1NSQ01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gU1lTQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfVVJTVEVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfVVJTVElFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX0VSU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX0JPRElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVhbCBUaW1lIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlRUQyB7DQorCUFUOTFfUkVHCSBSVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVEFSOyAJLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1JUVEMsICpBVDkxUFNfUlRUQzsNCisNCisvLyAtLS0tLS0tLSBTWVNDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1JUUFJFUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NZU0NfQUxNSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRJTkNJRU4gICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBTWVNDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1WICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBBbGFybSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFNZU0NfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfQ1JUViAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBTWVNDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfQUxNUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRJTkMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQorDQorLy8gLS0tLS0tLS0gU1lTQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBTWVNDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBTWVNDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFNZU0NfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCisNCisvLyAtLS0tLS0tLSBTWVNDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEUlNUVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBTWVNDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19TWVNDX1dERklFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RSU1RFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEUlBST0MgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEREJHSExUICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFdEVEMpIFdhdGNoZG9nIERlYnVnIEhhbHQNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RJRExFSExUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gU1lTQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RVTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19TWVNDX1dERVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19NQyB7DQorCUFUOTFfUkVHCSBNQ19SQ1I7IAkvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19BU1I7IAkvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FBU1I7IAkvLyBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzIxXTsgCS8vIA0KKwlBVDkxX1JFRwkgTUNfRk1SOyAJLy8gTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRkNSOyAJLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRlNSOyAJLy8gTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19NQywgKkFUOTFQU19NQzsNCisNCisvLyAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChNQykgQWJvcnQgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKE1DKSBEYXRhIFJlYWQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBEYXRhIFdyaXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChNQykgQ29kZSBGZXRjaA0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorLy8gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZSRFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKE1DKSBMb2NrIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfTkVCUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlcg0KKy8vIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgOCkgLy8gKE1DKSBQYWdlIE51bWJlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NQSSB7DQorCUFUOTFfUkVHCSBTUElfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkRSOyAJLy8gUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVERSOyAJLy8gVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX0NTUls0XTsgCS8vIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDhdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19TUEksICpBVDkxUFNfU1BJOw0KKw0KKy8vIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIFNQSSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBTUEkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyDQorLy8gLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgTWFzdGVyL1NsYXZlIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9QUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAxKSAvLyAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTUEkpIENoaXAgU2VsZWN0IERlY29kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfUlBDUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTUEkpIE1vZGUgRmF1bHQgRXJyb3INCisjZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNQSSkgTlNTUiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgQ2xvY2sgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBDbG9jayBQaGFzZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDQpIC8vIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFNQSSkgOCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzkgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzExICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTIgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgNCkgLy8gKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA0KSAvLyAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE0ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDQpIC8vIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTUgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgNCkgLy8gKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8ICA0KSAvLyAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlDQorI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FEQyB7DQorCUFUOTFfUkVHCSBBRENfQ1I7IAkvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX01SOyAJLy8gQURDIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX0NIRVI7IAkvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSERSOyAJLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIU1I7IAkvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19TUjsgCS8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19MQ0RSOyAJLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRVI7IAkvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lEUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lNUjsgCS8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NEUjA7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisJQVQ5MV9SRUcJIEFEQ19DRFIxOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorCUFUOTFfUkVHCSBBRENfQ0RSMjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKwlBVDkxX1JFRwkgQURDX0NEUjM7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisJQVQ5MV9SRUcJIEFEQ19DRFI0OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorCUFUOTFfUkVHCSBBRENfQ0RSNTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKwlBVDkxX1JFRwkgQURDX0NEUjY7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisJQVQ5MV9SRUcJIEFEQ19DRFI3OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BREMsICpBVDkxUFNfQURDOw0KKw0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAxKSAvLyAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzANCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIFJlc29sdXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQURDKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxNikgLy8gKEFEQykgU3RhcnR1cCBUaW1lDQorI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBDaGFubmVsIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBDaGFubmVsIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBDaGFubmVsIDcNCisvLyAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBREMpIERhdGEgUmVhZHkNCisjZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQURDKSBHZW5lcmFsIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoQURDKSBSWEJVRkYgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfTERBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NTQyB7DQorCUFUOTFfUkVHCSBTU0NfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfQ01SOyAJLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUkNNUjsgCS8vIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkZNUjsgCS8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RDTVI7IAkvLyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEZNUjsgCS8vIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SSFI7IAkvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19USFI7IAkvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SU0hSOyAJLy8gUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UU0hSOyAJLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkMwUjsgCS8vIFJlY2VpdmUgQ29tcGFyZSAwIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkMxUjsgCS8vIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1NDLCAqQVQ5MVBTX1NTQzsNCisNCisvLyAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX0RJViAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChTU0MpIERpdmlkZWQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChTU0MpIFRLIENsb2NrIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFNTQykgUksgcGluDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLRyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgR2F0aW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS0dfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBHYXRpbmc6IE5vbmUsIGNvbnRpbnVvdXMgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tHX0xPVyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgZW5hYmxlZCBvbmx5IGlmIFJGIExvdw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS0dfSElHSCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBlbmFibGVkIG9ubHkgaWYgUkYgSGlnaA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgOCkgLy8gKFNTQykgQ29tcGFyZSAwDQorI2RlZmluZSBBVDkxQ19TU0NfU1RPUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFNTQykgUmVjZWl2ZSBTdG9wIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVE9VVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IERlbGF5DQorI2RlZmluZSBBVDkxQ19TU0NfUEVSSU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBMb29wIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NTQ19NU0JGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19GU09TICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIERhdGEgRGVmYXVsdCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTREVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTU0MpIFJlY2VpdmUgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NQMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTU0MpIENvbXBhcmUgMQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUIHsNCisJQVQ5MV9SRUcJIFVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUlRPUjsgCS8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UVEdSOyAJLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzVdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19GSURJOyAJLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX05FUjsgCS8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfWFhSOyAJLy8gWE9OX1hPRkYgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lGOyAJLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NF07IAkvLyANCisJQVQ5MV9SRUcJIFVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVVNBUlQsICpBVDkxUFNfVVNBUlQ7DQorDQorLy8gLS0tLS0tLS0gVVNfQ1IgOiAoVVNBUlQgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlc2V0IFN0YXR1cyBCaXRzDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVTQVJUKSBTdGFydCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVTQVJUKSBmZGl2MQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIEV4dGVybmFsIChTQ0spDQorI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVVNBUlQpIDEgc3RvcCBiaXQNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFVTQVJUKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KKyNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJIHsNCisJQVQ5MV9SRUcJIFRXSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9NTVI7IAkvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1NNUjsgCS8vIFNsYXZlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JQURSOyAJLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0NXR1I7IAkvLyBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVFdJX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9SSFI7IAkvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9USFI7IAkvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorfSBBVDkxU19UV0ksICpBVDkxUFNfVFdJOw0KKw0KKy8vIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRXSSkgVFdJIFNsYXZlIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TVkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVFdJKSBUV0kgU2xhdmUgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9TTVIgOiAoVFdJIE9mZnNldDogMHg4KSBUV0kgU2xhdmUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TQURSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKFRXSSkgU2xhdmUgRGV2aWNlIEFkZHJlc3MNCisvLyAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVFdJKSBDbG9jayBMb3cgRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoVFdJKSBDbG9jayBEaXZpZGVyDQorLy8gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9TVlJFQUQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBTbGF2ZSBSZWFkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZBQ0MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRXSSkgU2xhdmUgQWNjZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfR0NBQ0MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRXSSkgR2VuZXJhbCBDYWxsIEFjY2Vzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9BUkJMU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVFdJKSBBcmJpdHJhdGlvbiBMb3N0DQorLy8gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQyB7DQorCUFUOTFfUkVHCSBUQ19DQ1I7IAkvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVENfQ1Y7IAkvLyBDb3VudGVyIFZhbHVlDQorCUFUOTFfUkVHCSBUQ19SQTsgCS8vIFJlZ2lzdGVyIEENCisJQVQ5MV9SRUcJIFRDX1JCOyAJLy8gUmVnaXN0ZXIgQg0KKwlBVDkxX1JFRwkgVENfUkM7IAkvLyBSZWdpc3RlciBDDQorCUFUOTFfUkVHCSBUQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19UQywgKkFUOTFQU19UQzsNCisNCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX0NMS0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoVEMpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFJBIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVEMpIFJBIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkNTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIENsb2NrIEVuYWJsaW5nDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQ0Igew0KKwlBVDkxU19UQwkgVENCX1RDMDsgCS8vIFRDIENoYW5uZWwgMA0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMxOyAJLy8gVEMgQ2hhbm5lbCAxDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MVNfVEMJIFRDQl9UQzI7IAkvLyBUQyBDaGFubmVsIDINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0XTsgCS8vIA0KKwlBVDkxX1JFRwkgVENCX0JDUjsgCS8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDQl9CTVI7IAkvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19UQ0IsICpBVDkxUFNfVENCOw0KKw0KKy8vIC0tLS0tLS0tIFRDQl9CQ1IgOiAoVENCIE9mZnNldDogMHhjMCkgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9TWU5DICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RDTEsxICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUFdNQ19DSCB7DQorCUFUOTFfUkVHCSBQV01DX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DRFRZUjsgCS8vIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DUFJEUjsgCS8vIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NDTlRSOyAJLy8gQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NVUERSOyAJLy8gQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfUmVzZXJ2ZWRbM107IAkvLyBSZXNlcnZlZA0KK30gQVQ5MVNfUFdNQ19DSCwgKkFUOTFQU19QV01DX0NIOw0KKw0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3gNCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFszMl07IAkvLyBQV01DIENoYW5uZWwgMA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KKw0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQg0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoUFdNQykgDQorLy8gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAyDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChQV01DKSBDaGFubmVsIElEIDQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA1DQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQ2ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFBXTUMpIENoYW5uZWwgSUQgNg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChQV01DKSBDaGFubmVsIElEIDcNCisvLyAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lFUiA6IChQV01DIE9mZnNldDogMHgxMCkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSVNSIDogKFBXTUMgT2Zmc2V0OiAweDFjKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzhdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfRkRSWzhdOyAJLy8gRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KKw0KKy8vIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVRFApIEZyYW1lIEVycm9yDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVEUCkgRnJhbWUgT0sNCisvLyAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIENvbmZpZ3VyZWQNCisjZGVmaW5lIEFUOTFDX1VEUF9STVdVUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorLy8gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVRFApIEVuZHBvaW50IDYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ3ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFVEUCkgRW5kcG9pbnQgNyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorI2RlZmluZSBBVDkxQ19VRFBfRVA2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDcNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwDQorI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBEYXRhIFRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQRURTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1NZU0NfVlJQTSAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoU1lTQykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjApIC8vIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRU9JQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjA4MCkgLy8gKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzQpIC8vIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDQpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRlZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwNCkgLy8gKEFJQykgRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDgpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTEwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDgpIC8vIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyNCkgLy8gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0NJU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTQpIC8vIChBSUMpIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfQzJSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQ0KSAvLyAoREJHVSkgQ2hpcCBJRDIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVEhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjFDKSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMEMpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDQpIC8vIChEQkdVKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0MxUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQxIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0JSR1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIyMCkgLy8gKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19EQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzFDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzBDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzE4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0MCkgLy8gKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDRDKSAvLyAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ1OCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwOCkgLy8gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzQpIC8vIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU0KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDA0KSAvLyAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyNCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDMwKSAvLyAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDIwKSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTgpIC8vIChQSU9BKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0NCkgLy8gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTgpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMkMpIC8vIChDS0dSKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAoKEFUOTFfUkVHICopIAkweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BNQ19TQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzA4KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzE0KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzA0KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjApIC8vIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKFBNQykgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENLUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM0MCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JTVENfUlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA0KSAvLyAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwOCkgLy8gKFJTVEMpIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDAwKSAvLyAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyQykgLy8gKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDI0KSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjApIC8vIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzQykgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzQpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzOCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzApIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dETVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0NCkgLy8gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQ4KSAvLyAoV0RUQykgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjY0KSAvLyAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjA0KSAvLyAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDApIC8vIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUElfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyMCkgLy8gKFBEQ19TUEkpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExOCkgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTApIC8vIChQRENfU1BJKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDgpIC8vIChQRENfU1BJKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMjQpIC8vIChQRENfU1BJKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExQykgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMEMpIC8vIChQRENfU1BJKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSV9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDMwKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTgpIC8vIChTUEkpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxMCkgLy8gKFNQSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUkRSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTFDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTA0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMkMpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjcgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNEMpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwM0MpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjUgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDEwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMUMpIC8vIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfTENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyMCkgLy8gKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMjApIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTA4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTI0KSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxNCkgLy8gKFNTQykgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDgpIC8vIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkMwUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzOCkgLy8gKFNTQykgUmVjZWl2ZSBDb21wYXJlIDAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SU0hSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDMwKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMjApIC8vIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDEwKSAvLyAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMDApIC8vIChTU0MpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDRDKSAvLyAoU1NDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDQpIC8vIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQzFSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDNDKSAvLyAoU1NDKSBSZWNlaXZlIENvbXBhcmUgMSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzQpIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMjQpIC8vIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTE0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTBDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDQpIC8vIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTIwKSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTE4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1hYUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDgpIC8vIChVUzEpIFhPTl9YT0ZGIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxOCkgLy8gKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTApIC8vIChVUzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwOCkgLy8gKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDI0KSAvLyAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMUMpIC8vIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDE0KSAvLyAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMEMpIC8vIChVUzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfRklESSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNEMpIC8vIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTkVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0NCkgLy8gKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwNCkgLy8gKFVTMSkgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTApIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMjQpIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMEMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQlJHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyMCkgLy8gKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDEwKSAvLyAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwNDQpIC8vIChVUzApIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjQpIC8vIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfWFhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0OCkgLy8gKFVTMCkgWE9OX1hPRkYgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDApIC8vIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA4KSAvLyAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0QykgLy8gKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwQykgLy8gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAzMCkgLy8gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyOCkgLy8gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DV0dSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDEwKSAvLyAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA4KSAvLyAoVFdJKSBTbGF2ZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwMCkgLy8gKFRXSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwNCkgLy8gKFRXSSkgTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBQykgLy8gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5QykgLy8gKFRDMikgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEEwKSAvLyAoVEMyKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwODApIC8vIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDZDKSAvLyAoVEMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDVDKSAvLyAoVEMxKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzFfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTgpIC8vIChUQzEpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMV9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDUwKSAvLyAoVEMxKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzFfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMkMpIC8vIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyNCkgLy8gKFRDMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyMCkgLy8gKFRDMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxOCkgLy8gKFRDMCkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMTApIC8vIChUQzApIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQ0JfQk1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBDNCkgLy8gKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzApIC8vIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIM19DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjcwKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMl9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjUwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0OCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI1NCkgLy8gKFBXTUNfQ0gyKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNEMpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0NCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyOCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIzNCkgLy8gKFBXTUNfQ0gxKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMkMpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMF9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjEwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMEMpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwRkMpIC8vIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDFDKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxNCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDBDKSAvLyAoUFdNQykgUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDA0KSAvLyAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE4KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRElTICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDA4KSAvLyAoUFdNQykgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxMCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDMwKSAvLyAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMjApIC8vIChVRFApIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMTgpIC8vIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxMCkgLy8gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQTBfVElPQTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEwDQorI2RlZmluZSBBVDkxQ19QQTEwX0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEExMF9OUENTMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMQ0KKyNkZWZpbmUgQVQ5MUNfUEExMV9OUENTMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTEpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QQTExX1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX01JU08gICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEyKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTU9TSSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTNfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCisjZGVmaW5lIEFUOTFDX1BBMTRfU1BDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgU1BJIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEExNF9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9URiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTE2X1RJT0IxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNikgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19URCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTU0MgVHJhbnNtaXQgZGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEExN19QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9SRCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTE5X0ZJUSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIwDQorI2RlZmluZSBBVDkxQ19QQTIwX1JGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMCkgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjBfSVJRMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1JYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTIxX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9OUENTMyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19TQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9SVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfQ1RTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI1X1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X0RDRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9USU9BMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCisjZGVmaW5lIEFUOTFDX1BBMjdfRFRSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgVVNBUlQgMSBEYXRhIFRlcm1pbmFsIHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI3X1RJT0IyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EU1IxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjgpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI4X1RDTEsxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9UQ0xLMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMNCisjZGVmaW5lIEFUOTFDX1BBM19UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MzICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzANCisjZGVmaW5lIEFUOTFDX1BBMzBfSVJRMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDENCisjZGVmaW5lIEFUOTFDX1BBMzBfTlBDUzIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzENCisjZGVmaW5lIEFUOTFDX1BBMzFfTlBDUzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMxKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEEzMV9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfVFdDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTRfVENMSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTUNCisjZGVmaW5lIEFUOTFDX1BBNV9SWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTVfTlBDUzMgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE2DQorI2RlZmluZSBBVDkxQ19QQTZfVFhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNikgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19SVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE3X1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KKyNkZWZpbmUgQVQ5MUNfUEE4X0NUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgVVNBUlQgMCBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICgodW5zaWduZWQgaW50KSAgMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkNCisjZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAoKHVuc2lnbmVkIGludCkgIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgKCh1bnNpZ25lZCBpbnQpICAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF8zX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAgMykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEX0FEQyAgICAoKHVuc2lnbmVkIGludCkgIDQpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJICAgICgodW5zaWduZWQgaW50KSAgNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgKCh1bnNpZ25lZCBpbnQpICA2KSAvLyBVU0FSVCAwDQorI2RlZmluZSBBVDkxQ19JRF9VUzEgICAgKCh1bnNpZ25lZCBpbnQpICA3KSAvLyBVU0FSVCAxDQorI2RlZmluZSBBVDkxQ19JRF9TU0MgICAgKCh1bnNpZ25lZCBpbnQpICA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICgodW5zaWduZWQgaW50KSAgOSkgLy8gVHdvLVdpcmUgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9QV01DICAgKCh1bnNpZ25lZCBpbnQpIDEwKSAvLyBQV00gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVURQICAgICgodW5zaWduZWQgaW50KSAxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgKCh1bnNpZ25lZCBpbnQpIDEyKSAvLyBUaW1lciBDb3VudGVyIDANCisjZGVmaW5lIEFUOTFDX0lEX1RDMSAgICAoKHVuc2lnbmVkIGludCkgMTMpIC8vIFRpbWVyIENvdW50ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfVEMyICAgICgodW5zaWduZWQgaW50KSAxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF8xNV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMTUpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xNl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMTYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xN19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMTcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xOF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMTgpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xOV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMTkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjIpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yM19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjUpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjgpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgKCh1bnNpZ25lZCBpbnQpIDMwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTEgICAoKHVuc2lnbmVkIGludCkgMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTQyAgICAgICgoQVQ5MVBTX1NZU0MpIAkweEZGRkZGMDAwKSAvLyAoU1lTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAoKEFUOTFQU19BSUMpIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICgoQVQ5MVBTX0RCR1UpIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAoKEFUOTFQU19QREMpIAkweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgKChBVDkxUFNfQ0tHUikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICgoQVQ5MVBTX1BNQykgCTB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgKChBVDkxUFNfUlNUQykgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICgoQVQ5MVBTX1JUVEMpIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAoKEFUOTFQU19QSVRDKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgKChBVDkxUFNfV0RUQykgCTB4RkZGRkZENDApIC8vIChXRFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfTUMgICAgICAgICgoQVQ5MVBTX01DKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRTAxMDApIC8vIChQRENfU1BJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJICAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTAwMDApIC8vIChTUEkpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgKChBVDkxUFNfUERDKSAJMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgKChBVDkxUFNfQURDKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TU0MgICAoKEFUOTFQU19QREMpIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NTQyAgICAgICAoKEFUOTFQU19TU0MpIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMxICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAoKEFUOTFQU19QREMpIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgKChBVDkxUFNfVFdJKSAJMHhGRkZCODAwMCkgLy8gKFRXSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwODApIC8vIChUQzIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAoKEFUOTFQU19UQ0IpIAkweEZGRkEwMDAwKSAvLyAoVENCKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gxICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgKChBVDkxUFNfUFdNQykgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVURQICAgICAgICgoQVQ5MVBTX1VEUCkgCTB4RkZGQjAwMDApIC8vIChVRFApIEJhc2UgQWRkcmVzcw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSVNSQU0JICgoY2hhciAqKSAJMHgwMDIwMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDA0MDAwKSAvLyBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoMTYgS2J5dGUpDQorI2RlZmluZSBBVDkxQ19JRkxBU0gJICgoY2hhciAqKSAJMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDEwMDAwKSAvLyBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1M2NF9pbmMuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03UzY0X2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjY1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1M2NF9pbmMuaApAQCAtMCwwICsxLDE4MTIgQEAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgVGhlIHNvZnR3YXJlIGlzIGRlbGl2ZXJlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkgb3IgY29uZGl0aW9uIG9mIGFueQ0KKy8vICBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCBvciBzdGF0dXRvcnkuIFRoaXMgaW5jbHVkZXMgd2l0aG91dA0KKy8vICBsaW1pdGF0aW9uIGFueSB3YXJyYW50eSBvciBjb25kaXRpb24gd2l0aCByZXNwZWN0IHRvIG1lcmNoYW50YWJpbGl0eSBvcg0KKy8vICBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLCBvciBhZ2FpbnN0IHRoZSBpbmZyaW5nZW1lbnRzIG9mDQorLy8gIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2Ygb3RoZXJzLg0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdTNjQuaA0KKy8vIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1M2NCBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNy8xNi8yMDA0ICgwNzo0MzowOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03UzY0LnBsLzEuMTIvTW9uIEp1bCAxMiAxMzowMjozMCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU0NfU0FNN1N4eC5wbC8xLjUvTW9uIEp1bCAxMiAxNjoyMjoxMiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTAyLnBsLzEuMy9XZWQgTWFyIDEwIDA4OjM3OjA0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQXzE3NjVCLnBsLzEuMy9GcmkgQXVnICAyIDE0OjQ1OjM4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzE3OTZCLnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNLmgvMS42L1R1ZSBBcHIgMjcgMTM6NTM6NTIgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fMTcyNUQucGwvMS4xLjEuMS9GcmkgSnVuIDI4IDA5OjM2OjQ4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV8xNzU0QS5wbC8xLjQvRnJpIEphbiAzMSAxMjoxODoyNCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzE3MzlDLnBsLzEuMi9Nb24gSnVsIDEyIDE3OjI2OjI0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJMi5wbC8xLjIvRnJpIE9jdCAxNyAwODoxMzo0MCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ18xNzYyQS5wbC8xLjIvRnJpIE5vdiAgOCAxMzoyNjo0MCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzE3NjFCLnBsLzEuNC9GcmkgRmViICA3IDEwOjMwOjA4IDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzE3MzRCLnBsLzEuMi9UaHUgTm92IDIxIDE2OjM4OjI0IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDX1NBTS5wbC8xLjcvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TWVNDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFNZU0NfQUlDX1NNUiAgICAoIDApIC8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19TVlIgICAgKDEyOCkgLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfSVZSICAgICgyNTYpIC8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0ZWUiAgICAoMjYwKSAvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JU1IgICAgKDI2NCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfSVBSICAgICgyNjgpIC8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JTVIgICAgKDI3MikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0NJU1IgICAoMjc2KSAvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lFQ1IgICAoMjg4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lEQ1IgICAoMjkyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JQ0NSICAgKDI5NikgLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lTQ1IgICAoMzAwKSAvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0VPSUNSICAoMzA0KSAvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX1NQVSAgICAoMzA4KSAvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0RDUiAgICAoMzEyKSAvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgU1lTQ19BSUNfRkZFUiAgICgzMjApIC8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0ZGRFIgICAoMzI0KSAvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfRkZTUiAgICgzMjgpIC8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9DUiAgICAoNTEyKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfTVIgICAgKDUxNikgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0lFUiAgICg1MjApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9JRFIgICAoNTI0KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0lNUiAgICg1MjgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfQ1NSICAgKDUzMikgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SSFIgICAoNTM2KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfVEhSICAgKDU0MCkgLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0JSR1IgICg1NDQpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9DMVIgICAoNTc2KSAvLyBDaGlwIElEMSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0MyUiAgICg1ODApIC8vIENoaXAgSUQyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfRk5UUiAgKDU4NCkgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SUFIgICAoNzY4KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SQ1IgICAoNzcyKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UUFIgICAoNzc2KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfVENSICAgKDc4MCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX1JOUFIgICg3ODQpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfUk5DUiAgKDc4OCkgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UTlBSICAoNzkyKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UTkNSICAoNzk2KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9QVENSICAoODAwKSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX1BUU1IgICg4MDQpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QRVIgICAoMTAyNCkgLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX1BEUiAgICgxMDI4KSAvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX1BTUiAgICgxMDMyKSAvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfT0VSICAgKDEwNDApIC8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PRFIgICAoMTA0NCkgLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBTWVNDX1BJT0FfT1NSICAgKDEwNDgpIC8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JRkVSICAoMTA1NikgLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0lGRFIgICgxMDYwKSAvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0lGU1IgICgxMDY0KSAvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfU09EUiAgKDEwNzIpIC8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0NPRFIgICgxMDc2KSAvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX09EU1IgICgxMDgwKSAvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QRFNSICAoMTA4NCkgLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfSUVSICAgKDEwODgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JRFIgICAoMTA5MikgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JTVIgICAoMTA5NikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JU1IgICAoMTEwMCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX01ERVIgICgxMTA0KSAvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfTUREUiAgKDExMDgpIC8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfTURTUiAgKDExMTIpIC8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QUFVEUiAoMTEyMCkgLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfUFBVRVIgKDExMjQpIC8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfUFBVU1IgKDExMjgpIC8vIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0FTUiAgICgxMTM2KSAvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0JTUiAgICgxMTQwKSAvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0FCU1IgICgxMTQ0KSAvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfT1dFUiAgKDExODQpIC8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PV0RSICAoMTE4OCkgLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PV1NSICAoMTE5MikgLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfU0NFUiAgICgzMDcyKSAvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19TQ0RSICAgKDMwNzYpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19TQ1NSICAgKDMwODApIC8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BDRVIgICAoMzA4OCkgLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BDRFIgICAoMzA5MikgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19QQ1NSICAgKDMwOTYpIC8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19NT1IgICAgKDMxMDQpIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfTUNGUiAgICgzMTA4KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BMTFIgICAoMzExNikgLy8gUExMIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19NQ0tSICAgKDMxMjApIC8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfUENLUiAgICgzMTM2KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX0lFUiAgICAoMzE2OCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfSURSICAgICgzMTcyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfU1IgICAgICgzMTc2KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX0lNUiAgICAoMzE4MCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlNUQ19SQ1IgICAoMzMyOCkgLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SU1RDX1JTUiAgICgzMzMyKSAvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlNUQ19STVIgICAoMzMzNikgLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SVFRDX1JUTVIgICgzMzYwKSAvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SVFRDX1JUQVIgICgzMzY0KSAvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlRUQ19SVFZSICAoMzM2OCkgLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1JUVENfUlRTUiAgKDMzNzIpIC8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSU1SICAoMzM3NikgLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSVNSICAoMzM4MCkgLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSVRDX1BJVlIgICgzMzg0KSAvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSUlSICAoMzM4OCkgLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1dEVENfV0RDUiAgKDMzOTIpIC8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfV0RUQ19XRE1SICAoMzM5NikgLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19XRFRDX1dEU1IgICgzNDAwKSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfU1lTQ19WUlBNICAoMzQyNCkgLy8gVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFZSUE0gOiAoU1lTQyBPZmZzZXQ6IDB4ZDYwKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QU1REQlkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1lTQykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQUlDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEFJQ19TTVIgICAgICAgICAoIDApIC8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfU1ZSICAgICAgICAgKDEyOCkgLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lWUiAgICAgICAgICgyNTYpIC8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19GVlIgICAgICAgICAoMjYwKSAvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVNSICAgICAgICAgKDI2NCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lQUiAgICAgICAgICgyNjgpIC8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSU1SICAgICAgICAgKDI3MikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19DSVNSICAgICAgICAoMjc2KSAvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JRUNSICAgICAgICAoMjg4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JRENSICAgICAgICAoMjkyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSUNDUiAgICAgICAgKDI5NikgLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JU0NSICAgICAgICAoMzAwKSAvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19FT0lDUiAgICAgICAoMzA0KSAvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19TUFUgICAgICAgICAoMzA4KSAvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19EQ1IgICAgICAgICAoMzEyKSAvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQUlDX0ZGRVIgICAgICAgICgzMjApIC8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19GRkRSICAgICAgICAoMzI0KSAvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZGU1IgICAgICAgICgzMjgpIC8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAgICAgKDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgKDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0xFVkVMX1NFTlNJVElWRSAgKDB4MCA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIExldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9FREdFX1RSSUdHRVJFRCAgICgweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ISUdIX0xFVkVMICAgICAgICgweDIgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9QT1NJVElWRV9FREdFICAgICgweDMgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQUlDKSBOSVJRIFN0YXR1cw0KKy8vIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfUFJPVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19EQkdVIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIERCR1VfQ1IgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfTVIgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfSUVSICAgICAgICAoIDgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfSURSICAgICAgICAoMTIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lNUiAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9DU1IgICAgICAgICgyMCkgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkhSICAgICAgICAoMjQpIC8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVEhSICAgICAgICAoMjgpIC8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQlJHUiAgICAgICAoMzIpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQzFSICAgICAgICAoNjQpIC8vIENoaXAgSUQxIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0MyUiAgICAgICAgKDY4KSAvLyBDaGlwIElEMiBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9GTlRSICAgICAgICg3MikgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUlBSICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkNSICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVFBSICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RDUiAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9STlBSICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JOQ1IgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5QUiAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5DUiAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUFRDUiAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9QVFNSICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAgICAgKDB4NyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgICAgICAgICgweDAgPDwgIDkpIC8vIChEQkdVKSBFdmVuIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9PREQgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoREJHVSkgT2RkIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgICAgICAgICAoMHgyIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgICAgICAgICAgKDB4NCA8PCAgOSkgLy8gKERCR1UpIE5vIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgICAgICAgICAoMHg2IDw8ICA5KSAvLyAoREJHVSkgTXVsdGktZHJvcCBtb2RlDQorI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChEQkdVKSBDaGFubmVsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKERCR1UpIFRYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBPdmVycnVuIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgICAgICgweDEgPDwgMzApIC8vIChEQkdVKSBDT01NX1RYIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICAgKDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlwaGVyYWwgRGF0YSBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BEQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQRENfUlBSICAgICAgICAgKCAwKSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19SQ1IgICAgICAgICAoIDQpIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1RQUiAgICAgICAgICggOCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1RDUiAgICAgICAgICgxMikgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1JOUFIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19STkNSICAgICAgICAoMjApIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVE5QUiAgICAgICAgKDI0KSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UTkNSICAgICAgICAoMjgpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1BUQ1IgICAgICAgICgzMikgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19QVFNSICAgICAgICAoMzYpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICAgICAgICgweDEgPDwgIDEpIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19UWFRFTiAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgICAgICgweDEgPDwgIDkpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGFyYWxsZWwgSW5wdXQgT3V0cHV0IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QSU8gc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUElPX1BFUiAgICAgICAgICggMCkgLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BEUiAgICAgICAgICggNCkgLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QU1IgICAgICAgICAoIDgpIC8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRVIgICAgICAgICAoMTYpIC8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRFIgICAgICAgICAoMjApIC8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgUElPX09TUiAgICAgICAgICgyNCkgLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGRVIgICAgICAgICgzMikgLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGRFIgICAgICAgICgzNikgLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRlNSICAgICAgICAoNDApIC8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19TT0RSICAgICAgICAoNDgpIC8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0NPRFIgICAgICAgICg1MikgLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRFNSICAgICAgICAoNTYpIC8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BEU1IgICAgICAgICg2MCkgLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUVSICAgICAgICAgKDY0KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSURSICAgICAgICAgKDY4KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lNUiAgICAgICAgICg3MikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JU1IgICAgICAgICAoNzYpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NREVSICAgICAgICAoODApIC8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NRERSICAgICAgICAoODQpIC8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fTURTUiAgICAgICAgKDg4KSAvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVRFIgICAgICAgKDk2KSAvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVFUiAgICAgICAoMTAwKSAvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVVNSICAgICAgICgxMDQpIC8vIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0FTUiAgICAgICAgICgxMTIpIC8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQlNSICAgICAgICAgKDExNikgLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BQlNSICAgICAgICAoMTIwKSAvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dFUiAgICAgICAgKDE2MCkgLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRFIgICAgICAgICgxNjQpIC8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dTUiAgICAgICAgKDE2OCkgLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DS0dSIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENLR1JfTU9SICAgICAgICAoIDApIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0tHUl9NQ0ZSICAgICAgICggNCkgLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBDS0dSX1BMTFIgICAgICAgKDEyKSAvLyBQTEwgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICgweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgICgweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAoMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBNQ19TQ0VSICAgICAgICAoIDApIC8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TQ0RSICAgICAgICAoIDQpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU0NTUiAgICAgICAgKCA4KSAvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENFUiAgICAgICAgKDE2KSAvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDRFIgICAgICAgICgyMCkgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENTUiAgICAgICAgKDI0KSAvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01PUiAgICAgICAgICgzMikgLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTUNGUiAgICAgICAgKDM2KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QTExSICAgICAgICAoNDQpIC8vIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01DS1IgICAgICAgICg0OCkgLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENLUiAgICAgICAgKDY0KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRVIgICAgICAgICAoOTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRFIgICAgICAgICAoMTAwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NSICAgICAgICAgICgxMDQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lNUiAgICAgICAgICgxMDgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisvLyAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgICAgICgweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICgweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZXNldCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SU1RDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFJTVENfUkNSICAgICAgICAoIDApIC8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFJTVENfUlNSICAgICAgICAoIDQpIC8vIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUlNUQ19STVIgICAgICAgICggOCkgLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNZU0NfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BST0NSU1QgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfSUNFUlNUICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJTVEMpIElDRSBJbnRlcmZhY2UgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfUEVSUlNUICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfRVhUUlNUICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX0tFWSAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoUlNUQykgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBTWVNDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1VSU1RTICAgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19CT0RTVFMgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd24tb3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlNUVFlQICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFJTVEMpIFJlc2V0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9QT1dFUlVQICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoUlNUQykgUG93ZXItdXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX1dBVENIRE9HICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4NCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9TT0ZUV0FSRSAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfVVNFUiAgICAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4NCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9CUk9XTk9VVCAgICAgICAgICAgICAoMHg1IDw8ICA4KSAvLyAoUlNUQykgQnJvd24tb3V0IFJlc2V0Lg0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19OUlNUTCAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoUlNUQykgTlJTVCBwaW4gbGV2ZWwNCisjZGVmaW5lIEFUOTFDX1NZU0NfU1JDTVAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gU1lTQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfVVJTVEVOICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1VSU1RJRU4gICAgICAgICgweDEgPDwgIDQpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfRVJTVEwgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX0JPRElFTiAgICAgICAgICgweDEgPDwgMTYpIC8vIChSU1RDKSBCcm93bi1vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SVFRDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFJUVENfUlRNUiAgICAgICAoIDApIC8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUQVIgICAgICAgKCA0KSAvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRWUiAgICAgICAoIDgpIC8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVFNSICAgICAgICgxMikgLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNZU0NfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRQUkVTICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NZU0NfQUxNSUVOICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRUSU5DSUVOICAgICAgKDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRSU1QgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBTWVNDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1WICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUlRUQykgQWxhcm0gVmFsdWUNCisvLyAtLS0tLS0tLSBTWVNDX1JUVlIgOiAoUlRUQyBPZmZzZXQ6IDB4OCkgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX0NSVFYgICAgICAgICAgICgweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFNZU0NfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1TICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRJTkMgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUElUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQSVRDX1BJTVIgICAgICAgKCAwKSAvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSVNSICAgICAgICggNCkgLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSVZSICAgICAgICggOCkgLy8gUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBQSVRDX1BJSVIgICAgICAgKDEyKSAvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTWVNDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfUElWICAgICAgICAgICAgKDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRFTiAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRJRU4gICAgICAgICAoMHgxIDw8IDI1KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0IEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNZU0NfUElTUiA6IChQSVRDIE9mZnNldDogMHg0KSBQZXJpb2RpYyBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJVFMgICAgICAgICAgICgweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBTWVNDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX0NQSVYgICAgICAgICAgICgweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSUNOVCAgICAgICAgICAoMHhGRkYgPDwgMjApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gU1lTQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfV0RUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBXRFRDX1dEQ1IgICAgICAgKCAwKSAvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dETVIgICAgICAgKCA0KSAvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dEU1IgICAgICAgKCA4KSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTWVNDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEUlNUVCAgICAgICAgICgweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gU1lTQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEViAgICAgICAgICAgICgweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RGSUVOICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RSU1RFTiAgICAgICAgKDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJQUk9DICAgICAgICAoMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRERJUyAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREQgICAgICAgICAgICAoMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRERCR0hMVCAgICAgICAoMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRElETEVITFQgICAgICAoMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gU1lTQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RVTkYgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREVSUiAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19NQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBNQ19SQ1IgICAgICAgICAgKCAwKSAvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19BU1IgICAgICAgICAgKCA0KSAvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0FBU1IgICAgICAgICAoIDgpIC8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GTVIgICAgICAgICAgKDk2KSAvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GQ1IgICAgICAgICAgKDEwMCkgLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfRlNSICAgICAgICAgICgxMDQpIC8vIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAoMHgzIDw8IDEwKSAvLyAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICAgICAgICgweDAgPDwgMTApIC8vIChNQykgRGF0YSBSZWFkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChNQykgRGF0YSBXcml0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAgICAgICAoMHgyIDw8IDEwKSAvLyAoTUMpIENvZGUgRmV0Y2gNCisjZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChNQykgTG9jayBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgRmxhc2ggV2FpdCBTdGF0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICAgICAoMHgzRkYgPDwgIDgpIC8vIChNQykgUGFnZSBOdW1iZXINCisjZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICgweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICgweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAoMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAoMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TUEkgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1BJX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX01SICAgICAgICAgICggNCkgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JEUiAgICAgICAgICggOCkgLy8gUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVERSICAgICAgICAgKDEyKSAvLyBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfU1IgICAgICAgICAgKDE2KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JRVIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JRFIgICAgICAgICAoMjQpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfSU1SICAgICAgICAgKDI4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0NTUiAgICAgICAgICg0OCkgLy8gQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9SUFIgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9SQ1IgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UUFIgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVENSICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JOUFIgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUk5DUiAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UTlBSICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UTkNSICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9QVENSICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1BUU1IgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBTUEkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgTWFzdGVyL1NsYXZlIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9QUyAgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgICAgICgweDEgPDwgIDYpIC8vIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBDbG9jayBQaGFzZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAgICAgKDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlDQorI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgICgweEZGIDw8IDE2KSAvLyAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlDQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNUICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FEQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRENfQ1IgICAgICAgICAgKCAwKSAvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX01SICAgICAgICAgICggNCkgLy8gQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSEVSICAgICAgICAoMTYpIC8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIRFIgICAgICAgICgyMCkgLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIU1IgICAgICAgICgyNCkgLy8gQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfU1IgICAgICAgICAgKDI4KSAvLyBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfTENEUiAgICAgICAgKDMyKSAvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lFUiAgICAgICAgICgzNikgLy8gQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JRFIgICAgICAgICAoNDApIC8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lNUiAgICAgICAgICg0NCkgLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0RSMCAgICAgICAgKDQ4KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFEQ19DRFIxICAgICAgICAoNTIpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQURDX0NEUjIgICAgICAgICg1NikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBRENfQ0RSMyAgICAgICAgKDYwKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFEQ19DRFI0ICAgICAgICAoNjQpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQURDX0NEUjUgICAgICAgICg2OCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBRENfQ0RSNiAgICAgICAgKDcyKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFEQ19DRFI3ICAgICAgICAoNzYpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQURDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAgICAgKDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICAoMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICgweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAgICAgKDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICAgICAoMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAgICAgKDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1NDX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0NNUiAgICAgICAgICggNCkgLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDTVIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SRk1SICAgICAgICAoMjApIC8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDTVIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RGTVIgICAgICAgICgyOCkgLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JIUiAgICAgICAgICgzMikgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEhSICAgICAgICAgKDM2KSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlNIUiAgICAgICAgKDQ4KSAvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RTSFIgICAgICAgICg1MikgLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkMwUiAgICAgICAgKDU2KSAvLyBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDMVIgICAgICAgICg2MCkgLy8gUmVjZWl2ZSBDb21wYXJlIDEgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19TUiAgICAgICAgICAoNjQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0lFUiAgICAgICAgICg2OCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0lEUiAgICAgICAgICg3MikgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JTVIgICAgICAgICAoNzYpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlBSICAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkNSICAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVFBSICAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDUiAgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19STlBSICAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JOQ1IgICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVE5QUiAgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVE5DUiAgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUFRDUiAgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19QVFNSICAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFNTQykgVHJhbnNtaXQgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICAgICAoMHg3IDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgICAgICAgKDB4MiA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLSSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLRyAgICAgICAgICAgICAoMHgzIDw8ICA2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEdhdGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgR2F0aW5nOiBOb25lLCBjb250aW51b3VzIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLR19MT1cgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIGVuYWJsZWQgb25seSBpZiBSRiBMb3cNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tHX0hJR0ggICAgICAgICAgICAgICAgICgweDIgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgZW5hYmxlZCBvbmx5IGlmIFJGIEhpZ2gNCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVE9QICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFNTQykgUmVjZWl2ZSBTdG9wIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVE9VVCAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IE91dHB1dCBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgKDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAoMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICgweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICgweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfQ1AwICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NQMSAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoU1NDKSBDb21wYXJlIDENCisjZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VTQVJUIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFVTX0NSICAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFVTX01SICAgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lFUiAgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lEUiAgICAgICAgICAoMTIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JTVIgICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfQ1NSICAgICAgICAgICgyMCkgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JIUiAgICAgICAgICAoMjQpIC8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RIUiAgICAgICAgICAoMjgpIC8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0JSR1IgICAgICAgICAoMzIpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JUT1IgICAgICAgICAoMzYpIC8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBVU19UVEdSICAgICAgICAgKDQwKSAvLyBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBVU19GSURJICAgICAgICAgKDY0KSAvLyBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfTkVSICAgICAgICAgICg2OCkgLy8gTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19YWFIgICAgICAgICAgKDcyKSAvLyBYT05fWE9GRiBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSUYgICAgICAgICAgICg3NikgLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JQUiAgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JDUiAgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RQUiAgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19UQ1IgICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUk5QUiAgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STkNSICAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROUFIgICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROQ1IgICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1BUQ1IgICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRTUiAgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlc2V0IFN0YXR1cyBCaXRzDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVU0FSVCkgU3RhcnQgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICgweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgICAgICgweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVU0FSVCkgZmRpdjENCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAoMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICAgICAgICAgKDB4MCA8PCAxMikgLy8gKFVTQVJUKSAxIHN0b3AgYml0DQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAgICAgICAgICgweDIgPDwgMTIpIC8vIChVU0FSVCkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sNCisjZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RXSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUV0lfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfTU1SICAgICAgICAgKCA0KSAvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1NNUiAgICAgICAgICggOCkgLy8gU2xhdmUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lBRFIgICAgICAgICgxMikgLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0NXR1IgICAgICAgICgxNikgLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfU1IgICAgICAgICAgKDMyKSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRVIgICAgICAgICAoMzYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRFIgICAgICAgICAoNDApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSU1SICAgICAgICAgKDQ0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1JIUiAgICAgICAgICg0OCkgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfVEhSICAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChUV0kpIFRXSSBTbGF2ZSBUcmFuc2ZlciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZESVMgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUV0kpIFRXSSBTbGF2ZSBUcmFuc2ZlciBEaXNhYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICgweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9TTVIgOiAoVFdJIE9mZnNldDogMHg4KSBUV0kgU2xhdmUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TQURSICAgICAgICAgICAgKDB4N0YgPDwgMTYpIC8vIChUV0kpIFNsYXZlIERldmljZSBBZGRyZXNzDQorLy8gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgKDB4NyA8PCAxNikgLy8gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZSRUFEICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUV0kpIFNsYXZlIFJlYWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TVkFDQyAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRXSSkgU2xhdmUgQWNjZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfR0NBQ0MgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUV0kpIEdlbmVyYWwgQ2FsbCBBY2Nlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9PVlJFICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRXSSkgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorI2RlZmluZSBBVDkxQ19UV0lfQVJCTFNUICAgICAgICAgICgweDEgPDwgIDkpIC8vIChUV0kpIEFyYml0cmF0aW9uIExvc3QNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ19DQ1IgICAgICAgICAgKCAwKSAvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0NNUiAgICAgICAgICAoIDQpIC8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIFRDX0NWICAgICAgICAgICAoMTYpIC8vIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIFRDX1JBICAgICAgICAgICAoMjApIC8vIFJlZ2lzdGVyIEENCisjZGVmaW5lIFRDX1JCICAgICAgICAgICAoMjQpIC8vIFJlZ2lzdGVyIEINCisjZGVmaW5lIFRDX1JDICAgICAgICAgICAoMjgpIC8vIFJlZ2lzdGVyIEMNCisjZGVmaW5lIFRDX1NSICAgICAgICAgICAoMzIpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSUVSICAgICAgICAgICgzNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSURSICAgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0lNUiAgICAgICAgICAoNDQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICgweDcgPDwgIDApIC8vIChUQykgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLICAgICAoMHgwKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICAoMHgxKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICAoMHgyKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYzX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLICAgICAoMHgzKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICAoMHg0KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICAoMHg1KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgICAgICAgICAgICgweDYpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAgKDB4NykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX0ZBTExJTkcgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgKDB4MyA8PCAxMykgLy8gKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICAgICAoMHgyIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgICAgICAgICAgICgweDIgPDwgMTYpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgKDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMzApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorLy8gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgUkEgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUQykgUkEgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkNTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHUyAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUQykgQ2xvY2sgRW5hYmxpbmcNCisjZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ0JfVEMwICAgICAgICAgKCAwKSAvLyBUQyBDaGFubmVsIDANCisjZGVmaW5lIFRDQl9UQzEgICAgICAgICAoNjQpIC8vIFRDIENoYW5uZWwgMQ0KKyNkZWZpbmUgVENCX1RDMiAgICAgICAgICgxMjgpIC8vIFRDIENoYW5uZWwgMg0KKyNkZWZpbmUgVENCX0JDUiAgICAgICAgICgxOTIpIC8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDQl9CTVIgICAgICAgICAoMTk2KSAvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICgweDEgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMiAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUNfQ0ggc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUFdNQ19DTVIgICAgICAgICggMCkgLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NEVFlSICAgICAgKCA0KSAvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ1BSRFIgICAgICAoIDgpIC8vIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NDTlRSICAgICAgKDEyKSAvLyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ1VQRFIgICAgICAoMTYpIC8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1Jlc2VydmVkICAgKDIwKSAvLyBSZXNlcnZlZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4DQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgICAgICAgICAgICAgICgweDApIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAgICAgICAgICAgICAgKDB4QikgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICAgICAgICAgICAgICAoMHhDKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBXTUNfTVIgICAgICAgICAoIDApIC8vIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19FTkEgICAgICAgICggNCkgLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfRElTICAgICAgICAoIDgpIC8vIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19TUiAgICAgICAgICgxMikgLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfSUVSICAgICAgICAoMTYpIC8vIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JRFIgICAgICAgICgyMCkgLy8gUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JTVIgICAgICAgICgyNCkgLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JU1IgICAgICAgICgyOCkgLy8gUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1ZSICAgICAgICAgKDI1MikgLy8gUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NIICAgICAgICAgKDUxMikgLy8gUFdNQyBDaGFubmVsIDANCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICgweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENCAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA0DQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQ1ICAgICAgICAgICgweDEgPDwgIDUpIC8vIChQV01DKSBDaGFubmVsIElEIDUNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFBXTUMpIENoYW5uZWwgSUQgNg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENyAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA3DQorLy8gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfU1IgOiAoUFdNQyBPZmZzZXQ6IDB4YykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lNUiA6IChQV01DIE9mZnNldDogMHgxOCkgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVURQIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFVEUF9OVU0gICAgICAgICAoIDApIC8vIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0dMQlNUQVRFICAgICggNCkgLy8gR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfRkFERFIgICAgICAgKCA4KSAvLyBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSUVSICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSURSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lNUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JU1IgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JQ1IgICAgICAgICAoMzIpIC8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX1JTVEVQICAgICAgICg0MCkgLy8gUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9DU1IgICAgICAgICAoNDgpIC8vIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0ZEUiAgICAgICAgICg4MCkgLy8gRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICAgICAoMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorLy8gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIEZ1bmN0aW9uIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQwICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQzICAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgICAgICgweDEgPDwgIDUpIC8vIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ2ICAgICAgICAgICgweDEgPDwgIDYpIC8vIChVRFApIEVuZHBvaW50IDYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ3ICAgICAgICAgICgweDEgPDwgIDcpIC8vIChVRFApIEVuZHBvaW50IDcgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhTVVNQICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVURQKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1NPRklOVCAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAgICAgKDB4MSA8PCAxMikgLy8gKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA2DQorI2RlZmluZSBBVDkxQ19VRFBfRVA3ICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDcNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgKDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgICAgICgweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1NZU0NfVlJQTSAgICAgICgweEZGRkZGRDYwKSAvLyAoU1lTQykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAgICAgICAgICAgKDB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgICAgICAgICAgICgweEZGRkZGMTIwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICgweEZGRkZGMTJDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgKDB4RkZGRkYxMzApIC8vIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAoMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAgICAgICAgICAgKDB4RkZGRkYxNDApIC8vIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAgICAgICAgICAgKDB4RkZGRkYwODApIC8vIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgKDB4RkZGRkYxMzQpIC8vIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICAgICAgICAgICAoMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAgICAgICAgICAgKDB4RkZGRkYxMDQpIC8vIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAgICAgICAgICAgKDB4RkZGRkYxNDgpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgKDB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgICAgICAgICAgICgweEZGRkZGMTA4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICgweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgICAgICAgICAgICgweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICgweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAgICAgICAgICAgKDB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfQzJSICAgICAgICAgICAgKDB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEMiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAoMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgKDB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRFIgICAgICAgICAgICAoMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX01SICAgICAgICAgICAgICgweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9GTlRSICAgICAgICAgICAoMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0MxUiAgICAgICAgICAgICgweEZGRkZGMjQwKSAvLyAoREJHVSkgQ2hpcCBJRDEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAgICAgICAgICAgKDB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgICAgICAgICAgICgweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICAgICAgICAgICAoMHhGRkZGRjIxMCkgLy8gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICgweEZGRkZGMjA4KSAvLyAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAoMHhGRkZGRjIwMCkgLy8gKERCR1UpIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19EQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5DUiAgICAgICAgICAgKDB4RkZGRkYzMUMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOQ1IgICAgICAgICAgICgweEZGRkZGMzE0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUQ1IgICAgICAgICAgICgweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgICAgICAgICAgICgweEZGRkZGMzI0KSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAgICAgICAgICAgKDB4RkZGRkYzMDQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICgweEZGRkZGMzBDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgKDB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICgweEZGRkZGMzA4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgKDB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgKDB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgKDB4RkZGRkY0NDgpIC8vIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAoMHhGRkZGRjQ0MCkgLy8gKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAgICAgICAgICAgKDB4RkZGRkY0QTQpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICAgICAgICAgICAoMHhGRkZGRjQ0QykgLy8gKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgKDB4RkZGRkY0NjApIC8vIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAgICAgICAgICAgKDB4RkZGRkY0NTgpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgICAgICAgICAgICgweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAgICAgICAgICAgKDB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgICAgICAgICAgICgweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICAgICAgICAgICAoMHhGRkZGRjQ3NCkgLy8gKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICAgICAgICAgICgweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAgICAgICAgICAgKDB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICAgICAgICAgICAoMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgICAgICAgICAgICgweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgICAgICAgICAgICgweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAgICAgICAgICAgKDB4RkZGRkY0NzgpIC8vIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgICAgICAgICAgICgweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgICAgICAgICAgKDB4RkZGRkY0NjgpIC8vIChQSU9BKSBQYWQgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAgICAgICAgICAgKDB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgKDB4RkZGRkY0MzApIC8vIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAgICAgICAgICAgKDB4RkZGRkY0MjgpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICgweEZGRkZGNDIwKSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICAgICAgICAgICAoMHhGRkZGRjQxOCkgLy8gKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSURSICAgICAgICAgICAgKDB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAoMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICAgICAgICAgICAoMHhGRkZGRjQzNCkgLy8gKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgICAgICAgICAgICgweEZGRkZGNEE4KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICAgICAgICAgICAoMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExSICAgICAgICAgICAoMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICAgICAgICAgICAoMHhGRkZGRkMyNCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1IgICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BNQ19TQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0VSICAgICAgICAgICAgKDB4RkZGRkZDMDApIC8vIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JTVIgICAgICAgICAgICAgKDB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgICAgICAgICAgICgweEZGRkZGQzY0KSAvLyAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAoMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICgweEZGRkZGQzA0KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAoMHhGRkZGRkM2OCkgLy8gKFBNQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgICAgICAgICAgICgweEZGRkZGQzYwKSAvLyAoUE1DKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUiAgICAgICAgICAgICgweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAgICAgICAgICAgKDB4RkZGRkZDMjApIC8vIChQTUMpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAoMHhGRkZGRkMxMCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgICAgICAgICAgICgweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0ZSICAgICAgICAgICAgKDB4RkZGRkZDMjQpIC8vIChQTUMpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICAgICAgICAgICAoMHhGRkZGRkM0MCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JTVENfUlNSICAgICAgICAgICAgKDB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgKDB4RkZGRkZEMDgpIC8vIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUU1IgICAgICAgICAgICgweEZGRkZGRDJDKSAvLyAoUlRUQykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAoMHhGRkZGRkQyNCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAoMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVE1SICAgICAgICAgICAoMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSVRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAgICAgICAgICAgKDB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgKDB4RkZGRkZEMzQpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVlIgICAgICAgICAgICgweEZGRkZGRDM4KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAoMHhGRkZGRkQ0NCkgLy8gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAgICAgICAgICAgKDB4RkZGRkZENDgpIC8vIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAgICAgICAgICAgKDB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICgweEZGRkZGRjY0KSAvLyAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAgICAgICAgICAgKDB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GU1IgICAgICAgICAgICAgICgweEZGRkZGRjY4KSAvLyAoTUMpIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1SICAgICAgICAgICAgICAoMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgICAgICAgICAgICgweEZGRkZGRjA4KSAvLyAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BUQ1IgICAgICAgICAgICAoMHhGRkZFMDEyMCkgLy8gKFBEQ19TUEkpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVE5QUiAgICAgICAgICAgICgweEZGRkUwMTE4KSAvLyAoUERDX1NQSSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUk5QUiAgICAgICAgICAgICgweEZGRkUwMTEwKSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9UUFIgICAgICAgICAgICAgKDB4RkZGRTAxMDgpIC8vIChQRENfU1BJKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUlBSICAgICAgICAgICAgICgweEZGRkUwMTAwKSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUFRTUiAgICAgICAgICAgICgweEZGRkUwMTI0KSAvLyAoUERDX1NQSSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1ROQ1IgICAgICAgICAgICAoMHhGRkZFMDExQykgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JOQ1IgICAgICAgICAgICAoMHhGRkZFMDExNCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVENSICAgICAgICAgICAgICgweEZGRkUwMTBDKSAvLyAoUERDX1NQSSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JDUiAgICAgICAgICAgICAoMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSV9DU1IgICAgICAgICAgICAgKDB4RkZGRTAwMzApIC8vIChTUEkpIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfSURSICAgICAgICAgICAgICgweEZGRkUwMDE4KSAvLyAoU1BJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NSICAgICAgICAgICAgICAoMHhGRkZFMDAxMCkgLy8gKFNQSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUkRSICAgICAgICAgICAgICgweEZGRkUwMDA4KSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9DUiAgICAgICAgICAgICAgKDB4RkZGRTAwMDApIC8vIChTUEkpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9JTVIgICAgICAgICAgICAgKDB4RkZGRTAwMUMpIC8vIChTUEkpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfSUVSICAgICAgICAgICAgICgweEZGRkUwMDE0KSAvLyAoU1BJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVERSICAgICAgICAgICAgICgweEZGRkUwMDBDKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfTVIgICAgICAgICAgICAgICgweEZGRkUwMDA0KSAvLyAoU1BJKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAgICAgICAgICAgKDB4RkZGRDgxMjApIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROUFIgICAgICAgICAgICAoMHhGRkZEODExOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICAgICAgICAgICAoMHhGRkZEODExMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVFBSICAgICAgICAgICAgICgweEZGRkQ4MTA4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICAgICAgICAgICAoMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUU1IgICAgICAgICAgICAoMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgKDB4RkZGRDgxMUMpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAgICAgICAgICAgKDB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICAoMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgKDB4RkZGRDgxMDQpIC8vIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgICAgICAgICAgICgweEZGRkQ4MDJDKSAvLyAoQURDKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI0ICAgICAgICAgICAgKDB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjIgICAgICAgICAgICAoMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICgweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAgICAgICAgICAgKDB4RkZGRDgwNEMpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICAgICAgICAgICAoMHhGRkZEODAzNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgICAgICAgICAgICgweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgKDB4RkZGRDgwNDQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICAgICAgICAgICAoMHhGRkZEODAwNCkgLy8gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgKDB4RkZGRDgwNDgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NSICAgICAgICAgICAgICAoMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgKDB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAoMHhGRkZEODAxOCkgLy8gKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSUVSICAgICAgICAgICAgICgweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAoMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAoMHhGRkZEODAxNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lEUiAgICAgICAgICAgICAoMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfTENEUiAgICAgICAgICAgICgweEZGRkQ4MDIwKSAvLyAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgICAgICAgICAgICgweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAgICAgICAgICAgKDB4RkZGRDQxMTgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAgICAgICAgICAgKDB4RkZGRDQxMTApIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgICAoMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAgICAgICAgICAgKDB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAgICAgICAgICAgKDB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgICAgICAgICAgICgweEZGRkQ0MTFDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgICAgICAgICAgICgweEZGRkQ0MTE0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAgICAgICAgICAgKDB4RkZGRDQxMEMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgICAgICAgICAgICgweEZGRkQ0MTA0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JGTVIgICAgICAgICAgICAoMHhGRkZENDAxNCkgLy8gKFNTQykgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgICAgICAgICAgICgweEZGRkQ0MDA0KSAvLyAoU1NDKSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgICAgICAgICAgICgweEZGRkQ0MDQ4KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NSICAgICAgICAgICAgICAoMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkMwUiAgICAgICAgICAgICgweEZGRkQ0MDM4KSAvLyAoU1NDKSBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICAgICAgICAgICAoMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SSFIgICAgICAgICAgICAgKDB4RkZGRDQwMjApIC8vIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAoMHhGRkZENDAxOCkgLy8gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDTVIgICAgICAgICAgICAoMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAgICAgICAgICAgKDB4RkZGRDQwMDApIC8vIChTU0MpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JTVIgICAgICAgICAgICAgKDB4RkZGRDQwNEMpIC8vIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICgweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkMxUiAgICAgICAgICAgICgweEZGRkQ0MDNDKSAvLyAoU1NDKSBSZWNlaXZlIENvbXBhcmUgMSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICAgICAgICAgICAoMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgICAgICAgICAgICgweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEZNUiAgICAgICAgICAgICgweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAgICAgICAgICAgKDB4RkZGQzQxMjQpIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICgweEZGRkM0MTFDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgICAgICAgICAgICgweEZGRkM0MTE0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgKDB4RkZGQzQxMEMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkNSICAgICAgICAgICAgICgweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICgweEZGRkM0MTIwKSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAgICAgICAgICAgKDB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STlBSICAgICAgICAgICAgKDB4RkZGQzQxMTApIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICAoMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SUFIgICAgICAgICAgICAgKDB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfWFhSICAgICAgICAgICAgICgweEZGRkM0MDQ4KSAvLyAoVVMxKSBYT05fWE9GRiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAoMHhGRkZDNDAxOCkgLy8gKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAoMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAgICAgICAgICAgKDB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAgICAgICAgICAgKDB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgICAgICAgICAgICgweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgICAgICAgICAgICgweEZGRkM0MDE0KSAvLyAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICAgICAgICAgICAoMHhGRkZDNDAwQykgLy8gKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgKDB4RkZGQzQwNDApIC8vIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgICAgICAgICAgICgweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgICAgICAgICAgICgweEZGRkM0MDI4KSAvLyAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgICAgICAgICAgICgweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICAgICAgICAgICAoMHhGRkZDNDA0NCkgLy8gKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICgweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAgICAgICAgICAgKDB4RkZGQzAxMjApIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAoMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAoMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFBSICAgICAgICAgICAgICgweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JQUiAgICAgICAgICAgICAoMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUU1IgICAgICAgICAgICAoMHhGRkZDMDEyNCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAgICAgICAgICAgKDB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgKDB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICAgICAgICAgICAoMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgKDB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgICgweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQlJHUiAgICAgICAgICAgICgweEZGRkMwMDIwKSAvLyAoVVMwKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkhSICAgICAgICAgICAgICgweEZGRkMwMDE4KSAvLyAoVVMwKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICgweEZGRkMwMDEwKSAvLyAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAoMHhGRkZDMDA0NCkgLy8gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgICAgICAgICAgICgweEZGRkMwMDI0KSAvLyAoVVMwKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1hYUiAgICAgICAgICAgICAoMHhGRkZDMDA0OCkgLy8gKFVTMCkgWE9OX1hPRkYgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAgICAgICAgICAgKDB4RkZGQzAwNDApIC8vIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICgweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICgweEZGRkMwMDA4KSAvLyAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgICAgICAgICAgICgweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX01SICAgICAgICAgICAgICAoMHhGRkZDMDAwNCkgLy8gKFVTMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAoMHhGRkZDMDAwQykgLy8gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAgICAgICAgICAgKDB4RkZGQzAwMTQpIC8vIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgICAgICAgICAgICgweEZGRkMwMDFDKSAvLyAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICAgICAgICAgICAoMHhGRkZCODAzMCkgLy8gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSURSICAgICAgICAgICAgICgweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAoMHhGRkZCODAyMCkgLy8gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICgweEZGRkI4MDEwKSAvLyAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TTVIgICAgICAgICAgICAgKDB4RkZGQjgwMDgpIC8vIChUV0kpIFNsYXZlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICAgKDB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICAgKDB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAgICAgICAgICAgKDB4RkZGQjgwMkMpIC8vIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgICAgICAgICAgICgweEZGRkI4MDI0KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgICgweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAgICgweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgKDB4RkZGQTAwQUMpIC8vIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICgweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICgweEZGRkEwMDlDKSAvLyAoVEMyKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzJfUkEgICAgICAgICAgICAgICgweEZGRkEwMDk0KSAvLyAoVEMyKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgICAgICAgICAgICgweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgICAgICAgICAgICgweEZGRkEwMEE4KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICAoMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfUkIgICAgICAgICAgICAgICgweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDkwKSAvLyAoVEMyKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfSU1SICAgICAgICAgICAgICgweEZGRkEwMDZDKSAvLyAoVEMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDA2NCkgLy8gKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAoMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAoMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDA0NCkgLy8gKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDA2OCkgLy8gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JCICAgICAgICAgICAgICAoMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NWICAgICAgICAgICAgICAoMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICAgICAgICAgICAoMHhGRkZBMDA0MCkgLy8gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAgICAgICAgICAgKDB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwMTQpIC8vIChUQzApIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwMDQpIC8vIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgICAgICAgICAgICgweEZGRkEwMDIwKSAvLyAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwMTgpIC8vIChUQzApIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAgICAgICAgICAgKDB4RkZGQTAwMTApIC8vIChUQzApIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgKDB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgKDB4RkZGQTAwQzApIC8vIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIM19DVVBEUiAgICAgICAgICAgKDB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19DUFJEUiAgICAgICAgICAgKDB4RkZGQ0MyNjgpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19DTVIgICAgICAgICAgICAgKDB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfUmVzZXJ2ZWQgICAgICAgICgweEZGRkNDMjc0KSAvLyAoUFdNQ19DSDMpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDNfQ0NOVFIgICAgICAgICAgICgweEZGRkNDMjZDKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NEVFlSICAgICAgICAgICAoMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMl9DVVBEUiAgICAgICAgICAgKDB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9DUFJEUiAgICAgICAgICAgKDB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9DTVIgICAgICAgICAgICAgKDB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfUmVzZXJ2ZWQgICAgICAgICgweEZGRkNDMjU0KSAvLyAoUFdNQ19DSDIpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDJfQ0NOVFIgICAgICAgICAgICgweEZGRkNDMjRDKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NEVFlSICAgICAgICAgICAoMHhGRkZDQzI0NCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMV9DVVBEUiAgICAgICAgICAgKDB4RkZGQ0MyMzApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9DUFJEUiAgICAgICAgICAgKDB4RkZGQ0MyMjgpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9DTVIgICAgICAgICAgICAgKDB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfUmVzZXJ2ZWQgICAgICAgICgweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDFfQ0NOVFIgICAgICAgICAgICgweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NEVFlSICAgICAgICAgICAoMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NIMF9DVVBEUiAgICAgICAgICAgKDB4RkZGQ0MyMTApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9DUFJEUiAgICAgICAgICAgKDB4RkZGQ0MyMDgpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9DTVIgICAgICAgICAgICAgKDB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfUmVzZXJ2ZWQgICAgICAgICgweEZGRkNDMjE0KSAvLyAoUFdNQ19DSDApIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDBfQ0NOVFIgICAgICAgICAgICgweEZGRkNDMjBDKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NEVFlSICAgICAgICAgICAoMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICAgICAgICAgICAoMHhGRkZDQzBGQykgLy8gKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgICAoMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAoMHhGRkZDQzAxNCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgKDB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICAgICAgICAgICAoMHhGRkZDQzAwNCkgLy8gKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lNUiAgICAgICAgICAgICgweEZGRkNDMDE4KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgICAoMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgICAoMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICAgICAgICAgICAoMHhGRkZDQzAxMCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAgICAgICAgICAgKDB4RkZGQjAwMUMpIC8vIChVRFApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgKDB4RkZGQjAwMTQpIC8vIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICgweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAgICAgICAgICAgKDB4RkZGQjAwNTApIC8vIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICAoMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgICAgICAgICAgICgweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICAgICAgICAgICAoMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSU1SICAgICAgICAgICAgICgweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lFUiAgICAgICAgICAgICAoMHhGRkZCMDAxMCkgLy8gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICAgICAgICAgICAoMHhGRkZCMDAwOCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX05VTSAgICAgICAgICAgICAoMHhGRkZCMDAwMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUFdNMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEwKSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1RJT0EwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAgICAgICgxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9QV00xICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEpIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQTFfVElPQjAgICAgICAgICAgIChBVDkxQ19QSU9fUEExKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfRFRYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTEwKSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTEwX05QQ1MyICAgICAgICAgIChBVDkxQ19QSU9fUEExMCkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTENCisjZGVmaW5lIEFUOTFDX1BBMTFfTlBDUzAgICAgICAgICAgKEFUOTFDX1BJT19QQTExKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUEExMV9QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTEpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMiAgICAgICAgICAgICgxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX01JU08gICAgICAgICAgIChBVDkxQ19QSU9fUEExMikgLy8gIFNQSSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTEyKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgICAgICAoMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMw0KKyNkZWZpbmUgQVQ5MUNfUEExM19NT1NJICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBTUEkgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICgxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X1NQQ0sgICAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTRfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQTE0KSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9URiAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgICAgICAoMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNg0KKyNkZWZpbmUgQVQ5MUNfUEExNl9USyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTYpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTZfVElPQjEgICAgICAgICAgKEFUOTFDX1BJT19QQTE2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE3ICAgICAgICAgICAgKDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcNCisjZGVmaW5lIEFUOTFDX1BBMTdfVEQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE3KSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMTdfUENLMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTE3KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTggICAgICAgICAgICAoMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9SRCAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTgpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEExOCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICAgICAgKDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkNCisjZGVmaW5lIEFUOTFDX1BBMTlfUksgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE5KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTlfRklRICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICgxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTINCisjZGVmaW5lIEFUOTFDX1BBMl9QV00yICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfUkYgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIwKSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9JUlEwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjEgICAgICAgICAgICAoMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9SWEQxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjEpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RYRDEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9OUENTMyAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1NDSzEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIzX1BXTTAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUlRTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI0KSAvLyAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI0X1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfQ1RTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI1X1BXTTIgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfRENEMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0DQorI2RlZmluZSBBVDkxQ19QQTI2X1RJT0EyICAgICAgICAgIChBVDkxQ19QSU9fUEEyNikgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RUUjEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUEEyN19USU9CMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjggICAgICAgICAgICAoMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EU1IxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjgpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI4X1RDTEsxICAgICAgICAgIChBVDkxQ19QSU9fUEEyOCkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgICAgICAoMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOQ0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9SSTEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjkpIC8vICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorI2RlZmluZSBBVDkxQ19QQTI5X1RDTEsyICAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgICAgICAoMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorI2RlZmluZSBBVDkxQ19QQTNfVFdEICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzMgICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlExICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9OUENTMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzMSAgICAgICAgICAgICgxIDw8IDMxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMxDQorI2RlZmluZSBBVDkxQ19QQTMxX05QQ1MxICAgICAgICAgIChBVDkxQ19QSU9fUEEzMSkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BBMzFfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQTMxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgICAgICAoMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfVFdDSyAgICAgICAgICAgIChBVDkxQ19QSU9fUEE0KSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE0X1RDTEswICAgICAgICAgICAoQVQ5MUNfUElPX1BBNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEE1KSAvLyAgVVNBUlQgMCBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBNV9OUENTMyAgICAgICAgICAgKEFUOTFDX1BJT19QQTUpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICgxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19SVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBN19QV00zICAgICAgICAgICAgKEFUOTFDX1BJT19QQTcpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9DVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9BRFRSRyAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgICAgICAoMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorI2RlZmluZSBBVDkxQ19QQTlfRFJYRCAgICAgICAgICAgIChBVDkxQ19QSU9fUEE5KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTkpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICAgKCAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICAgICAgICAgICAoIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgICAgICAgICAgICggMikgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfM19SZXNlcnZlZCAgICAgICAoIDMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAgICggNCkgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9TUEkgICAgICAgICAgICAgICggNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAgICggNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgICAoIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICAgKCA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgICAoIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgICAoMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAgICgxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAgICgxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAgICgxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAgICgxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF8xNV9SZXNlcnZlZCAgICAgICgxNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzE2X1Jlc2VydmVkICAgICAgKDE2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMTdfUmVzZXJ2ZWQgICAgICAoMTcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xOF9SZXNlcnZlZCAgICAgICgxOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzE5X1Jlc2VydmVkICAgICAgKDE5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgICAoMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAgICgyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICAgICAgKDIyKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgICAoMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAgICgyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICAgICAgKDI1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgICAoMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAgICgyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICAgICAgKDI4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgICAoMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgICAgICAgICAgICgzMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApDQorI2RlZmluZSBBVDkxQ19JRF9JUlExICAgICAgICAgICAgICgzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVNDICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKFNZU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAgICAgICgweEZGRkZGMjAwKSAvLyAoREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJICAgICAgICAoMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkgICAgICAgICAgICAoMHhGRkZFMDAwMCkgLy8gKFNQSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgICAgKDB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgICAgKDB4RkZGRDQwMDApIC8vIChTU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAgICAoMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICAgICgweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICAgICgweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICAgICAgKDB4RkZGQjgwMDApIC8vIChUV0kpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAgICAoMHhGRkZBMDA4MCkgLy8gKFRDMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMSAgICAgICAgICAgICgweEZGRkEwMDQwKSAvLyAoVEMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgICAgICAoMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICAgICgweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAgICAoMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgICAgKDB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICAgICgweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAgICAoMHhGRkZDQzAwMCkgLy8gKFBXTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAgICAoMHhGRkZCMDAwMCkgLy8gKFVEUCkgQmFzZSBBZGRyZXNzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgICAgICAgICAgICAgICgweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgICAgICAgICAoMHgwMDAwNDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDE2IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAgICAgICAgICAgICAoMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICAgICAgICAoMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gxMjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRmMzVmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4LmgKQEAgLTAsMCArMSwyNzE1IEBACisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCisvLyAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKy8vICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KKy8vICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKy8vICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorLy8gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KKy8vICBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQorLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQorLy8gIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCisvLyAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIEZpbGUgTmFtZSAgICAgICAgICAgOiBBVDkxU0FNN1gxMjguaA0KKy8vIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1gxMjggZGVmaW5pdGlvbnMNCisvLyBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjMpDQorLy8gDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gxMjgucGwvMS4xNC9UdWUgTWF5IDEwIDEyOjEyOjA1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyNpZm5kZWYgQVQ5MVNBTTdYMTI4X0gNCisjZGVmaW5lIEFUOTFTQU03WDEyOF9IDQorDQordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQVQ5MV9SRUc7Ly8gSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1lTIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs1NF07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0FfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ4WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDlbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDExWzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMls4NV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9CX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE1WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOFs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTlbMzQxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjVbMzZdOyAJLy8gDQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjZbNV07IAkvLyANCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjdbNV07IAkvLyANCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19TWVMsICpBVDkxUFNfU1lTOw0KKw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19BSUMgew0KKwlBVDkxX1JFRwkgQUlDX1NNUlszMl07IAkvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NWUlszMl07IAkvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVZSOyAJLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZWUjsgCS8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVBSOyAJLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0NJU1I7IAkvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0lFQ1I7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JRENSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lDQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTQ1I7IAkvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19FT0lDUjsgCS8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NQVTsgCS8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0RDUjsgCS8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19GRkVSOyAJLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGRFI7IAkvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGU1I7IAkvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BSUMsICpBVDkxUFNfQUlDOw0KKw0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChBSUMpIFByaW9yaXR5IExldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoQUlDKSBIaWdoZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSBBVDkxQ19BSUNfU1JDVFlQRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0hJR0hfTEVWRUwgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX0xPV19MRVZFTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIExvdy1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfUE9TSVRJVkVfRURHRSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTmVnYXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9ISUdIX0xFVkVMICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9QT1NJVElWRV9FREdFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisvLyAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIFByb3RlY3Rpb24gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9HTVNLICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BEQyB7DQorCUFUOTFfUkVHCSBQRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19QREMsICpBVDkxUFNfUERDOw0KKw0KKy8vIC0tLS0tLS0tIFBEQ19QVENSIDogKFBEQyBPZmZzZXQ6IDB4MjApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19UWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19EQkdVIHsNCisJQVQ5MV9SRUcJIERCR1VfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzddOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX0NJRFI7IAkvLyBDaGlwIElEIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0VYSUQ7IAkvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9GTlRSOyAJLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NV07IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19EQkdVLCAqQVQ5MVBTX0RCR1U7DQorDQorLy8gLS0tLS0tLS0gREJHVV9DUiA6IChEQkdVIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyDQorI2RlZmluZSBBVDkxQ19VU19SWEVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKERCR1UpIFJlY2VpdmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhESVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDkpIC8vIChEQkdVKSBFdmVuIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9PREQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgT2RkIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOSkgLy8gKERCR1UpIE5vIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA5KSAvLyAoREJHVSkgTXVsdGktZHJvcCBtb2RlDQorI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKERCR1UpIENoYW5uZWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoREJHVSkgQXV0b21hdGljIEVjaG86IFJlY2VpdmVyIERhdGEgSW5wdXQgaXMgY29ubmVjdGVkIHRvIHRoZSBUWEQgcGluLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9MT0NBTCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoREJHVSkgTG9jYWwgTG9vcGJhY2s6IFRyYW5zbWl0dGVyIE91dHB1dCBTaWduYWwgaXMgY29ubmVjdGVkIHRvIFJlY2VpdmVyIElucHV0IFNpZ25hbC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfUkVNT1RFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLg0KKy8vIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKERCR1UpIFRYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChEQkdVKSBFbmQgb2YgUmVjZWl2ZSBUcmFuc2ZlciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChEQkdVKSBPdmVycnVuIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChEQkdVKSBGcmFtaW5nIEVycm9yIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUEFSRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKERCR1UpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1JYQlVGRiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChEQkdVKSBDT01NX1RYIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChEQkdVKSBDT01NX1JYIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIERCR1VfSURSIDogKERCR1UgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9GTlRSIDogKERCR1UgT2Zmc2V0OiAweDQ4KSBEZWJ1ZyBVbml0IEZPUkNFX05UUlNUIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPIHsNCisJQVQ5MV9SRUcJIFBJT19QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9fT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDVbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19QSU8sICpBVDkxUFNfUElPOw0KKw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1Igew0KKwlBVDkxX1JFRwkgQ0tHUl9NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENLR1JfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBDS0dSX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCit9IEFUOTFTX0NLR1IsICpBVDkxUFNfQ0tHUjsNCisNCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQyB7DQorCUFUOTFfUkVHCSBQTUNfU0NFUjsgCS8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ0RSOyAJLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ1NSOyAJLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENFUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENEUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDU1I7IAkvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DS1I7IAkvLyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1szXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDS1JbNF07IAkvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCit9IEFUOTFTX1BNQywgKkFUOTFQU19QTUM7DQorDQorLy8gLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQTUMpIFByb2Nlc3NvciBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisvLyAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfU0xPV19DTEsgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFBNQykgTWFpbiBDbG9jayBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfUExMX0NMSyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFBNQykgQ2xvY2sgZnJvbSBQTEwgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BNQ19QUkVTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAyKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUHJlc2NhbGVyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDQNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfOCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzMyICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS182NCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQNCisvLyAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19NT1NDUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgUExMIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUkRZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzBSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUENLMV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzNSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZXNldCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JTVEMgew0KKwlBVDkxX1JFRwkgUlNUQ19SQ1I7IAkvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JTUjsgCS8vIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19STVI7IAkvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19SU1RDLCAqQVQ5MVBTX1JTVEM7DQorDQorLy8gLS0tLS0tLS0gUlNUQ19SQ1IgOiAoUlNUQyBPZmZzZXQ6IDB4MCkgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgUHJvY2Vzc29yIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX1BFUlJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfRVhUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUlNUQykgRXh0ZXJuYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFJTVEMpIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gUlNUQ19SU1IgOiAoUlNUQyBPZmZzZXQ6IDB4NCkgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RTVFMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTVFRZUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFJTVEMpIFJlc2V0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9QT1dFUlVQICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoUlNUQykgUG93ZXItdXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1dBS0VVUCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChSU1RDKSBXYWtlVXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1dBVENIRE9HICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfVVNFUiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9CUk9XTk9VVCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoUlNUQykgQnJvd25vdXQgUmVzZXQgb2NjdXJlZC4NCisjZGVmaW5lIEFUOTFDX1JTVENfTlJTVEwgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlNUQykgTlJTVCBwaW4gbGV2ZWwNCisjZGVmaW5lIEFUOTFDX1JTVENfU1JDTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQgQ29tbWFuZCBpbiBQcm9ncmVzcy4NCisvLyAtLS0tLS0tLSBSU1RDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUSUVOICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfRVJTVEwgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JUVEMgew0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19SVFRDLCAqQVQ5MVBTX1JUVEM7DQorDQorLy8gLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFBSRVMgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTUlFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DSUVOICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gUlRUQ19SVEFSIDogKFJUVEMgT2Zmc2V0OiAweDQpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUlRUQykgQWxhcm0gVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUVlIgOiAoUlRUQyBPZmZzZXQ6IDB4OCkgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0NSVFYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSVRDIHsNCisJQVQ5MV9SRUcJIFBJVENfUElNUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJU1I7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJVlI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElJUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUElUQywgKkFUOTFQU19QSVRDOw0KKw0KKy8vIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlDQorLy8gLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElUUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLS0tLS0tLS0gUElUQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19DUElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAyMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBXYXRjaGRvZyBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1dEVEMgew0KKwlBVDkxX1JFRwkgV0RUQ19XRENSOyAJLy8gV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRE1SOyAJLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRFNSOyAJLy8gV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19XRFRDLCAqQVQ5MVBTX1dEVEM7DQorDQorLy8gLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVFQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBXRFRDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlBST0MgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFdEVEMpIFdhdGNoZG9nIERlYnVnIEhhbHQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RJRExFSExUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVlJFRyB7DQorCUFUOTFfUkVHCSBWUkVHX01SOyAJLy8gVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVlJFRywgKkFUOTFQU19WUkVHOw0KKw0KKy8vIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfUFNUREJZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19NQyB7DQorCUFUOTFfUkVHCSBNQ19SQ1I7IAkvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19BU1I7IAkvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FBU1I7IAkvLyBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzIxXTsgCS8vIA0KKwlBVDkxX1JFRwkgTUNfRk1SOyAJLy8gTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRkNSOyAJLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRlNSOyAJLy8gTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19NQywgKkFUOTFQU19NQzsNCisNCisvLyAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChNQykgQWJvcnQgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKE1DKSBEYXRhIFJlYWQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBEYXRhIFdyaXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChNQykgQ29kZSBGZXRjaA0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorLy8gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZSRFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKE1DKSBMb2NrIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfTkVCUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlcg0KKy8vIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgOCkgLy8gKE1DKSBQYWdlIE51bWJlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NQSSB7DQorCUFUOTFfUkVHCSBTUElfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkRSOyAJLy8gUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVERSOyAJLy8gVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX0NTUls0XTsgCS8vIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDhdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19TUEksICpBVDkxUFNfU1BJOw0KKw0KKy8vIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIFNQSSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBTUEkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyDQorLy8gLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgTWFzdGVyL1NsYXZlIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9QUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAxKSAvLyAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTUEkpIENoaXAgU2VsZWN0IERlY29kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfUlBDUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTUEkpIE1vZGUgRmF1bHQgRXJyb3INCisjZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNQSSkgTlNTUiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgQ2xvY2sgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBDbG9jayBQaGFzZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDQpIC8vIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFNQSSkgOCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzkgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzExICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTIgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgNCkgLy8gKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA0KSAvLyAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE0ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDQpIC8vIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTUgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgNCkgLy8gKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8ICA0KSAvLyAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlDQorI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChTUEkpIERlbGF5IEJlZm9yZSBTUENLDQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUIHsNCisJQVQ5MV9SRUcJIFVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUlRPUjsgCS8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UVEdSOyAJLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzVdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19GSURJOyAJLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX05FUjsgCS8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19JRjsgCS8vIElSREFfRklMVEVSIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1VTQVJULCAqQVQ5MVBTX1VTQVJUOw0KKw0KKy8vIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVTQVJUKSBTdGFydCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVTQVJUKSBmZGl2MQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIEV4dGVybmFsIChTQ0spDQorI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVVNBUlQpIDEgc3RvcCBiaXQNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFVTQVJUKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KKyNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDIHsNCisJQVQ5MV9SRUcJIFNTQ19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19DTVI7IAkvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SQ01SOyAJLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SRk1SOyAJLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENNUjsgCS8vIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19URk1SOyAJLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JTSFI7IAkvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RTSFI7IAkvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s0NF07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NTQywgKkFUOTFQU19TU0M7DQorDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1NDKSBUcmFuc21pdCBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IERlbGF5DQorI2RlZmluZSBBVDkxQ19TU0NfUEVSSU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBMb29wIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NTQ19NU0JGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19GU09TICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIERhdGEgRGVmYXVsdCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTREVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTU0MpIFJlY2VpdmUgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kgew0KKwlBVDkxX1JFRwkgVFdJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX01NUjsgCS8vIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFRXSV9JQURSOyAJLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0NXR1I7IAkvLyBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVFdJX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9SSFI7IAkvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9USFI7IAkvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorfSBBVDkxU19UV0ksICpBVDkxUFNfVFdJOw0KKw0KKy8vIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRXSSkgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUV0lfTU1SIDogKFRXSSBPZmZzZXQ6IDB4NCkgVFdJIE1hc3RlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVFdJKSBNYXN0ZXIgUmVhZCBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9EQURSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKFRXSSkgRGV2aWNlIEFkZHJlc3MNCisvLyAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVFdJKSBDbG9jayBMb3cgRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoVFdJKSBDbG9jayBEaXZpZGVyDQorLy8gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9PVlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVFdJKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRXSSkgVW5kZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorLy8gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DX0NIIHsNCisJQVQ5MV9SRUcJIFBXTUNfQ01SOyAJLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NEVFlSOyAJLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NQUkRSOyAJLy8gQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0NOVFI7IAkvLyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1VQRFI7IAkvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19SZXNlcnZlZFszXTsgCS8vIFJlc2VydmVkDQorfSBBVDkxU19QV01DX0NILCAqQVQ5MVBTX1BXTUNfQ0g7DQorDQorLy8gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUMgew0KKwlBVDkxX1JFRwkgUFdNQ19NUjsgCS8vIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19FTkE7IAkvLyBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19ESVM7IAkvLyBQV01DIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfU1I7IAkvLyBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JRVI7IAkvLyBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSURSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JTVI7IAkvLyBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lTUjsgCS8vIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzU1XTsgCS8vIA0KKwlBVDkxX1JFRwkgUFdNQ19WUjsgCS8vIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzY0XTsgCS8vIA0KKwlBVDkxU19QV01DX0NICSBQV01DX0NIWzRdOyAJLy8gUFdNQyBDaGFubmVsDQorfSBBVDkxU19QV01DLCAqQVQ5MVBTX1BXTUM7DQorDQorLy8gLS0tLS0tLS0gUFdNQ19NUiA6IChQV01DIE9mZnNldDogMHgwKSBQV01DIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEENCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUFfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFBXTUMpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAwDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAzDQorLy8gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfU1IgOiAoUFdNQyBPZmZzZXQ6IDB4YykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lNUiA6IChQV01DIE9mZnNldDogMHgxOCkgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VRFAgew0KKwlBVDkxX1JFRwkgVURQX05VTTsgCS8vIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0dMQlNUQVRFOyAJLy8gR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfRkFERFI7IAkvLyBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1JTVEVQOyAJLy8gUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0NTUls2XTsgCS8vIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfRkRSWzZdOyAJLy8gRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbM107IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9UWFZDOyAJLy8gVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KK30gQVQ5MVNfVURQLCAqQVQ5MVBTX1VEUDsNCisNCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8ICAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBFbmRwb2ludCB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVURQKSBDb250cm9sDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChVRFApIEJ1bGsgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFVEUCkgQnVsayBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IElODQorI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgUHVsbC11cCBPTg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDIHsNCisJQVQ5MV9SRUcJIFRDX0NDUjsgCS8vIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfQ01SOyAJLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUQ19DVjsgCS8vIENvdW50ZXIgVmFsdWUNCisJQVQ5MV9SRUcJIFRDX1JBOyAJLy8gUmVnaXN0ZXIgQQ0KKwlBVDkxX1JFRwkgVENfUkI7IAkvLyBSZWdpc3RlciBCDQorCUFUOTFfUkVHCSBUQ19SQzsgCS8vIFJlZ2lzdGVyIEMNCisJQVQ5MV9SRUcJIFRDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCit9IEFUOTFTX1RDLCAqQVQ5MVBTX1RDOw0KKw0KKy8vIC0tLS0tLS0tIFRDX0NDUiA6IChUQyBPZmZzZXQ6IDB4MCkgVEMgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX1NXVFJHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChUQykgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYzX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRDKSBDbG9jayBJbnZlcnQNCisjZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVEMpIFRoZSBjbG9jayBpcyBub3QgZ2F0ZWQgYnkgYW4gZXh0ZXJuYWwgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDKSBYQzAgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVEMpIFhDMSBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQykgWEMyIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSBBVDkxQ19UQ19DUENTVE9QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlRFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVkZ2UgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IFRyaWdnZXIgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19UQ19XQVZFU0VMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUQykgDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBSQSBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQlNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMzApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorLy8gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgT3ZlcmZsb3cNCisjZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIExvYWQgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BBUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQykgUkEgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgUkIgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChUQykgUkEgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLU1RBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgQ2xvY2sgRW5hYmxpbmcNCisjZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKy8vIC0tLS0tLS0tIFRDX0lFUiA6IChUQyBPZmZzZXQ6IDB4MjQpIFRDIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JRFIgOiAoVEMgT2Zmc2V0OiAweDI4KSBUQyBDaGFubmVsIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDQiB7DQorCUFUOTFTX1RDCSBUQ0JfVEMwOyAJLy8gVEMgQ2hhbm5lbCAwDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MVNfVEMJIFRDQl9UQzE7IAkvLyBUQyBDaGFubmVsIDENCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMjsgCS8vIFRDIENoYW5uZWwgMg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBUQ0JfQkNSOyAJLy8gVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENCX0JNUjsgCS8vIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1RDQiwgKkFUOTFQU19UQ0I7DQorDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIE1haWxCb3ggSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOX01CIHsNCisJQVQ5MV9SRUcJIENBTl9NQl9NTVI7IAkvLyBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NQU07IAkvLyBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01JRDsgCS8vIE1haWxCb3ggSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NRklEOyAJLy8gTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NU1I7IAkvLyBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ETDsgCS8vIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NREg7IAkvLyBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01DUjsgCS8vIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK30gQVQ5MVNfQ0FOX01CLCAqQVQ5MVBTX0NBTl9NQjsNCisNCisvLyAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRU1BUksgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFRpbWVtYXJrDQorI2RlZmluZSBBVDkxQ19DQU5fUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggT2JqZWN0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0RJUyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWE9WRVJXUklURSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1RYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfQ09OU1VNRVIgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9QUk9EVUNFUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDI0KSAvLyAoQ0FOX01CKSANCisvLyAtLS0tLS0tLSBDQU5fTUFNIDogKENBTl9NQiBPZmZzZXQ6IDB4NCkgQ0FOIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZBICAgICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxOCkgLy8gKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbg0KKy8vIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTVNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MTApIENBTiBNZXNzYWdlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBUaW1lciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01ETEMgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0DQorI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIEFib3J0DQorI2RlZmluZSBBVDkxQ19DQU5fTVJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkDQorLy8gLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MWMpIENBTiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTl9NQikgQWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01UQ1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOIHsNCisJQVQ5MV9SRUcJIENBTl9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQlI7IAkvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTTsgCS8vIFRpbWVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNRVNUUDsgCS8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9FQ1I7IAkvLyBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVENSOyAJLy8gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0FDUjsgCS8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1Ml07IAkvLyANCisJQVQ5MV9SRUcJIENBTl9WUjsgCS8vIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIwOyAJLy8gQ0FOIE1haWxib3ggMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE7IAkvLyBDQU4gTWFpbGJveCAxDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMjsgCS8vIENBTiBNYWlsYm94IDINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIzOyAJLy8gQ0FOIE1haWxib3ggMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjQ7IAkvLyBDQU4gTWFpbGJveCA0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNTsgCS8vIENBTiBNYWlsYm94IDUNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI2OyAJLy8gQ0FOIE1haWxib3ggNg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjc7IAkvLyBDQU4gTWFpbGJveCA3DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CODsgCS8vIENBTiBNYWlsYm94IDgNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI5OyAJLy8gQ0FOIE1haWxib3ggOQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEwOyAJLy8gQ0FOIE1haWxib3ggMTANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMTsgCS8vIENBTiBNYWlsYm94IDExDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTI7IAkvLyBDQU4gTWFpbGJveCAxMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEzOyAJLy8gQ0FOIE1haWxib3ggMTMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNDsgCS8vIENBTiBNYWlsYm94IDE0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTU7IAkvLyBDQU4gTWFpbGJveCAxNQ0KK30gQVQ5MVNfQ0FOLCAqQVQ5MVBTX0NBTjsNCisNCisvLyAtLS0tLS0tLSBDQU5fTVIgOiAoQ0FOIE9mZnNldDogMHgwKSBDQU4gTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9DQU5FTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0FOKSBDQU4gQ29udHJvbGxlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NBTl9MUE0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBMb3cgUG93ZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FCTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIEF1dG9iYXVkL0xpc3RlbiBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fT1ZMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgT3ZlcmxvYWQgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9URU9GICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQ0FOKSBUaW1lIFN0YW1wIG1lc3NhZ2VzIGF0IGVhY2ggZW5kIG9mIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVFRNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgVGltZSBUcmlnZ2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9USU1GUlogICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQ0FOKSBFbmFibGUgVGltZXIgRnJlZXplDQorI2RlZmluZSBBVDkxQ19DQU5fRFJQVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKENBTikgRGlzYWJsZSBSZXBlYXQNCisvLyAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENBTikgTWFpbGJveCAwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0FOKSBNYWlsYm94IDEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChDQU4pIE1haWxib3ggMiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKENBTikgTWFpbGJveCAzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQ0FOKSBNYWlsYm94IDQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChDQU4pIE1haWxib3ggNSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKENBTikgTWFpbGJveCA2IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQ0FOKSBNYWlsYm94IDcgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChDQU4pIE1haWxib3ggOCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI5ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKENBTikgTWFpbGJveCA5IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoQ0FOKSBNYWlsYm94IDEwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoQ0FOKSBNYWlsYm94IDExIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEyICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQ0FOKSBNYWlsYm94IDEyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEzICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoQ0FOKSBNYWlsYm94IDEzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQ0FOKSBNYWlsYm94IDE0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjE1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQ0FOKSBNYWlsYm94IDE1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKENBTikgV2FybmluZyBMaW1pdCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fRVJSUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKENBTikgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9CT0ZGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChDQU4pIFNsZWVwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9XQUtFVVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoQ0FOKSBXYWtldXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RPVkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOKSBUaW1lc3RhbXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChDQU4pIENSQyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChDQU4pIFN0dWZmaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKENBTikgQWNrbm93bGVkZ21lbnQgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9GRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoQ0FOKSBGb3JtIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQkVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENBTikgQml0IEVycm9yDQorLy8gLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9TUiA6IChDQU4gT2Zmc2V0OiAweDEwKSBDQU4gU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChDQU4pIFJlY2VpdmVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9UQlNZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoQ0FOKSBUcmFuc21pdHRlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fT1ZMWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKENBTikgT3ZlcmxvYWQgQnVzeQ0KKy8vIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKENBTikgUGhhc2UgMiBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgNCkgLy8gKENBTikgUGhhc2UgMSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fUFJPUEFHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9TWU5DICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0YgPDwgMTYpIC8vIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChDQU4pIFNhbXBsaW5nIG1vZGUNCisvLyAtLS0tLS0tLSBDQU5fVElNIDogKENBTiBPZmZzZXQ6IDB4MTgpIENBTiBUaW1lciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0FOKSBUaW1lciBmaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9USU1FU1RQIDogKENBTiBPZmZzZXQ6IDB4MWMpIENBTiBUaW1lc3RhbXAgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SRUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKENBTikgUmVjZWl2ZSBFcnJvciBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVEVDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXINCisvLyAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTVJTVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChDQU4pIFRpbWVyIFJlc2V0IEZpZWxkDQorLy8gLS0tLS0tLS0gQ0FOX0FDUiA6IChDQU4gT2Zmc2V0OiAweDI4KSBDQU4gQWJvcnQgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEV0aGVybmV0IE1BQyAxMC8xMDANCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19FTUFDIHsNCisJQVQ5MV9SRUcJIEVNQUNfTkNSOyAJLy8gTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX05DRkdSOyAJLy8gTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX05TUjsgCS8vIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEVNQUNfVFNSOyAJLy8gVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JCUVA7IAkvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1RCUVA7IAkvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU1I7IAkvLyBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUFOOyAJLy8gUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1BUUjsgCS8vIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUEZSOyAJLy8gUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZUTzsgCS8vIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19TQ0Y7IAkvLyBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX01DRjsgCS8vIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GUk87IAkvLyBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRkNTRTsgCS8vIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0FMRTsgCS8vIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19EVEY7IAkvLyBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTENPTDsgCS8vIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0VDT0w7IAkvLyBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RVTkQ7IAkvLyBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19DU0U7IAkvLyBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JSRTsgCS8vIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JPVjsgCS8vIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlNFOyAJLy8gUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0VMRTsgCS8vIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JKQTsgCS8vIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19VU0Y7IAkvLyBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NURTsgCS8vIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JMRTsgCS8vIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQRjsgCS8vIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19IUkI7IAkvLyBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorCUFUOTFfUkVHCSBFTUFDX0hSVDsgCS8vIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorCUFUOTFfUkVHCSBFTUFDX1NBMUw7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBMUg7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EyTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EySDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTNMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTNIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBNEw7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBNEg7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfVElEOyAJLy8gVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19UUFE7IAkvLyBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTUklPOyAJLy8gVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfV09MOyAJLy8gV2FrZSBPbiBMQU4gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxM107IAkvLyANCisJQVQ5MV9SRUcJIEVNQUNfUkVWOyAJLy8gUmV2aXNpb24gUmVnaXN0ZXINCit9IEFUOTFTX0VNQUMsICpBVDkxUFNfRU1BQzsNCisNCisvLyAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgSW5jcmVtZW50IHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIEJhY2sgcHJlc3N1cmUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBTdGFydCBUcmFuc21pc3Npb24uIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUNCisvLyAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBGdWxsIGR1cGxleC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTEsgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoRU1BQykgSWdub3JlIFJYIEZDUw0KKy8vIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IEdvDQorI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19SU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjApIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWEVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1ZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFogICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDIzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgUmVkdWNlIE1JSQ0KKy8vIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlDQorLy8gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVZSRUYgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8IDE2KSAvLyAoRU1BQykgDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3INCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19BREMgew0KKwlBVDkxX1JFRwkgQURDX0NSOyAJLy8gQURDIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19NUjsgCS8vIEFEQyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFEQ19DSEVSOyAJLy8gQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0hEUjsgCS8vIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSFNSOyAJLy8gQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfU1I7IAkvLyBBREMgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfTENEUjsgCS8vIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSUVSOyAJLy8gQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRFI7IAkvLyBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JTVI7IAkvLyBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DRFIwOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorCUFUOTFfUkVHCSBBRENfQ0RSMTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKwlBVDkxX1JFRwkgQURDX0NEUjI7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisJQVQ5MV9SRUcJIEFEQ19DRFIzOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorCUFUOTFfUkVHCSBBRENfQ0RSNDsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKwlBVDkxX1JFRwkgQURDX0NEUjU7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisJQVQ5MV9SRUcJIEFEQ19DRFI2OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorCUFUOTFfUkVHCSBBRENfQ0RSNzsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQURDLCAqQVQ5MVBTX0FEQzsNCisNCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFN0YXJ0IENvbnZlcnNpb24NCisvLyAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBSZXNvbHV0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIDgtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTYpIC8vIChBREMpIFN0YXJ0dXAgVGltZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgQ2hhbm5lbCA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgQ2hhbm5lbCA3DQorLy8gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gCUFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUyB7DQorCUFUOTFfUkVHCSBBRVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19LRVlXeFJbNF07IAkvLyBLZXkgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JREFUQXhSWzRdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfT0RBVEF4Uls0XTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JVnhSWzRdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlszNV07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19WUjsgCS8vIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BRVMsICpBVDkxUFNfQUVTOw0KKw0KKy8vIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX0FFU19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQUVTKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPQURTRUVEICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZw0KKy8vIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19BRVNfUFJPQ0RMWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKEFFUykgUHJvY2Vzc2luZyBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NNT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChBRVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAxMikgLy8gKEFFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfRUNCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NGQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgQ1RSIENvdW50ZXIgbW9kZS4NCisjZGVmaW5lIEFUOTFDX0FFU19MT0QgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQUVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19DRkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKEFFUykgMTI4LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQUVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKEFFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChBRVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDE2KSAvLyAoQUVTKSA4LWJpdC4NCisjZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDIwKSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkNCisjZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMyBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNF9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MTAgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNSBpcyBlbmFibGVkLg0KKy8vIC0tLS0tLS0tIEFFU19JRVIgOiAoQUVTIE9mZnNldDogMHgxMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19EQVRSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JU1IgOiAoQUVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19VUkFUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICgodW5zaWduZWQgaW50KSAweDQgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAxMikgLy8gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UREVTIHsNCisJQVQ5MV9SRUcJIFRERVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkxV3hSWzJdOyAJLy8gS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTJXeFJbMl07IAkvLyBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZM1d4UlsyXTsgCS8vIEtleSAzIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX0lEQVRBeFJbMl07IAkvLyBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19PREFUQXhSWzJdOyAJLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX0lWeFJbMl07IAkvLyBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzM3XTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19WUjsgCS8vIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1RERVMsICpBVDkxUFNfVERFUzsNCisNCisvLyAtLS0tLS0tLSBUREVTX0NSIDogKFRERVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19DSVBIRVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUREVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVlNT0QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUREVTKSBLZXkgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19TTU9EICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUREVTKSBTdGFydCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUREVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBUREVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUREVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRERVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRERVMpIDMyLWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRERVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRERVMpIDgtYml0Lg0KKy8vIC0tLS0tLS0tIFRERVNfSUVSIDogKFRERVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19EQVRSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUREVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX1RERVNfRU5EUlggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19SWEJVRkYgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfVERFU19UWEJVRkUgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBUREVTX0lEUiA6IChUREVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSVNSIDogKFRERVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19VUkFUICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwMCkgLy8gKEFJQykgSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRlZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwNCkgLy8gKEFJQykgRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzgpIC8vIChBSUMpIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBVDkxQ19BSUNfRU9JQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjA4MCkgLy8gKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDgpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDgpIC8vIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTEwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0MCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjApIC8vIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMkMpIC8vIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDQpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjExNCkgLy8gKEFJQykgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyNCkgLy8gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzQpIC8vIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMEMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzE4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzE0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyMCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMjQpIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMUMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQ0KSAvLyAoREJHVSkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjIwKSAvLyAoREJHVSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMEMpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DSURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDApIC8vIChEQkdVKSBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwNCkgLy8gKERCR1UpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjEwKSAvLyAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9GTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDgpIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMUMpIC8vIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxOCkgLy8gKERCR1UpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA4KSAvLyAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxNCkgLy8gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzApIC8vIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDRDKSAvLyAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzgpIC8vIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0MCkgLy8gKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2MCkgLy8gKFBJT0EpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDgpIC8vIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyNCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBNCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ1OCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQ0KSAvLyAoUElPQSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDM4KSAvLyAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjgpIC8vIChQSU9BKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTgpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3NCkgLy8gKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDIwKSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0M0MpIC8vIChQSU9BKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2NCkgLy8gKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxOCkgLy8gKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU0KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDM0KSAvLyAoUElPQSkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDQpIC8vIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjgpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxMCkgLy8gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDA4KSAvLyAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjZBNCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY1MCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2OCkgLy8gKFBJT0IpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0OCkgLy8gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY3MCkgLy8gKFBJT0IpIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjApIC8vIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjA4KSAvLyAoUElPQikgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDApIC8vIChQSU9CKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzNCkgLy8gKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjZBMCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQUJTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc4KSAvLyAoUElPQikgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjQpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2M0MpIC8vIChQSU9CKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ0KSAvLyAoUElPQikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE4KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDQpIC8vIChQSU9CKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MTQpIC8vIChQSU9CKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjI4KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY0KSAvLyAoUElPQikgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfU09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjMwKSAvLyAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0QykgLy8gKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM4KSAvLyAoUElPQikgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxOCkgLy8gKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU4KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjApIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY3NCkgLy8gKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY1NCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09FUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxMCkgLy8gKFBJT0IpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUEVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjAwKSAvLyAoUElPQikgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMkMpIC8vIChDS0dSKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAoKEFUOTFfUkVHICopIAkweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjQpIC8vIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyMCkgLy8gKFBNQykgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKFBNQykgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxMCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzQwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzA0KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTQpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzE4KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChQTUMpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDApIC8vIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzZDKSAvLyAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjApIC8vIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzY4KSAvLyAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwOCkgLy8gKFJTVEMpIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA0KSAvLyAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDJDKSAvLyAoUlRUQykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjApIC8vIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjgpIC8vIChSVFRDKSBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDI0KSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSVRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElWUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM4KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDNDKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDgpIC8vIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQ0KSAvLyAoV0RUQykgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19WUkVHX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjA0KSAvLyAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDApIC8vIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQUFTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDgpIC8vIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjY4KSAvLyAoTUMpIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjApIC8vIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMjApIC8vIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMUMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEwOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTBDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyNCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTFfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDFDKSAvLyAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDE0KSAvLyAoU1BJMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMDQpIC8vIChTUEkxKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwOCkgLy8gKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTgpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTApIC8vIChTUEkxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVERSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDBDKSAvLyAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMDApIC8vIChTUEkxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAzMCkgLy8gKFNQSTEpIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyMCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMEMpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyNCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTQpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxMCkgLy8gKFNQSTApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTgpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwNCkgLy8gKFNQSTApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDFDKSAvLyAoU1BJMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVERSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDBDKSAvLyAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDgpIC8vIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDMwKSAvLyAoU1BJMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMjApIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMEMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyNCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTE4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTApIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTFDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0QykgLy8gKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQ0KSAvLyAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDI0KSAvLyAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTQpIC8vIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwQykgLy8gKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA4KSAvLyAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxQykgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjgpIC8vIChVUzEpIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyMCkgLy8gKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTApIC8vIChVUzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfRklESSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDAwKSAvLyAoVVMxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwNCkgLy8gKFVTMSkgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTApIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMEMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyNCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTFDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDIwKSAvLyAoVVMwKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTkVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0NCkgLy8gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwMCkgLy8gKFVTMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTApIC8vIChVUzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfRklESSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0MCkgLy8gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwNCkgLy8gKFVTMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjQpIC8vIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxNCkgLy8gKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE4KSAvLyAoVVMwKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwQykgLy8gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDFDKSAvLyAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0QykgLy8gKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA4KSAvLyAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTFDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTQpIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyMCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTA0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMjApIC8vIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzApIC8vIChTU0MpIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEZNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxQykgLy8gKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDgpIC8vIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyNCkgLy8gKFNTQykgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTApIC8vIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0NCkgLy8gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzQpIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDApIC8vIChTU0MpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMDQpIC8vIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ01SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE4KSAvLyAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNEMpIC8vIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxNCkgLy8gKFNTQykgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyMCkgLy8gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyQykgLy8gKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDM0KSAvLyAoVFdJKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyOCkgLy8gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwNCkgLy8gKFRXSSkgTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DV0dSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDEwKSAvLyAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNzQpIC8vIChQV01DX0NIMykgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjgpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjQpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjZDKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ01SICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjU0KSAvLyAoUFdNQ19DSDIpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNEMpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ4KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjUwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ0KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIzNCkgLy8gKFBXTUNfQ0gxKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIzMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyOCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyQykgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMjQpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMTQpIC8vIChQV01DX0NIMCkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDgpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDQpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMTApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMEMpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE0KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDgpIC8vIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDEwKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzBGQykgLy8gKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMUMpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDBDKSAvLyAoUFdNQykgUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE4KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDA0KSAvLyAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VRFBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxOCkgLy8gKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA4KSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkRSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDA1MCkgLy8gKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxQykgLy8gKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMzApIC8vIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMTQpIC8vIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAyOCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZDICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDc0KSAvLyAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwNCkgLy8gKFVEUCkgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxMCkgLy8gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDIwKSAvLyAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDFDKSAvLyAoVEMwKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzBfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxOCkgLy8gKFRDMCkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMDApIC8vIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMDQpIC8vIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDI0KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxNCkgLy8gKFRDMCkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxMCkgLy8gKFRDMCkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMkMpIC8vIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTgpIC8vIChUQzEpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY0KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2OCkgLy8gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDYwKSAvLyAoVEMxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDQ0KSAvLyAoVEMxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzFfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNUMpIC8vIChUQzEpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDZDKSAvLyAoVEMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTApIC8vIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4NCkgLy8gKFRDMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwODApIC8vIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTApIC8vIChUQzIpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk0KSAvLyAoVEMyKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzJfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5OCkgLy8gKFRDMikgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTgpIC8vIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBQykgLy8gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDlDKSAvLyAoVEMyKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBNCkgLy8gKFRDMikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTApIC8vIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEM0KSAvLyAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQ0JfQkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjE0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwNCkgLy8gKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjFDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIxMCkgLy8gKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwQykgLy8gKENBTl9NQjApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjE4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjgpIC8vIChDQU5fTUIxKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjMwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjQpIC8vIChDQU5fTUIxKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjNDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyQykgLy8gKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNUMpIC8vIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTgpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI0OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTQpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjRDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTApIC8vIChDQU5fTUIyKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2QykgLy8gKENBTl9NQjMpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjY0KSAvLyAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjgpIC8vIChDQU5fTUIzKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjdDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjcwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzQpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjc4KSAvLyAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjQgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTgpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOEMpIC8vIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjlDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjk0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQjApIC8vIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCQykgLy8gKENBTl9NQjUpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQUMpIC8vIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkE4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTQpIC8vIChDQU5fTUI1KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDQykgLy8gKENBTl9NQjYpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDNCkgLy8gKENBTl9NQjYpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkQwKSAvLyAoQ0FOX01CNikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDQpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkRDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkQ4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGQykgLy8gKENBTl9NQjcpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFQykgLy8gKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRTQpIC8vIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjQpIC8vIChDQU4pIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDBDKSAvLyAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMDQpIC8vIChDQU4pIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9FQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDIwKSAvLyAoQ0FOKSBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVNUUCAoKEFUOTFfUkVHICopIAkweEZGRkQwMDFDKSAvLyAoQ0FOKSBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwMCkgLy8gKENBTikgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMDgpIC8vIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyOCkgLy8gKENBTikgQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMTgpIC8vIChDQU4pIFRpbWVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxMCkgLy8gKENBTikgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQlIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxNCkgLy8gKENBTikgQmF1ZHJhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9WUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMEZDKSAvLyAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDI0KSAvLyAoRU1BQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDk4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FTEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzgpIC8vIChFTUFDKSBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQ09MICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNUMpIC8vIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODgpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XT0wgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQzQpIC8vIChFTUFDKSBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EVEYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNTgpIC8vIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDY0KSAvLyAoRU1BQykgVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEwgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDIwKSAvLyAoRU1BQykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EzTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTQpIC8vIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDJDKSAvLyAoRU1BQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDc0KSAvLyAoRU1BQykgUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0VDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA2MCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVElEICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEI4KSAvLyAoRU1BQykgVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTApIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorI2RlZmluZSBBVDkxQ19FTUFDX1RCUVAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxQykgLy8gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQzApIC8vIChFTUFDKSBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzgpIC8vIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzApIC8vIChFTUFDKSBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0FMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1NCkgLy8gKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwN0MpIC8vIChFTUFDKSBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDE4KSAvLyAoRU1BQykgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUEYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOEMpIC8vIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAwNCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUlQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTQpIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODApIC8vIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZDU0UgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1MCkgLy8gKEVNQUMpIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQUSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCQykgLy8gKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDM0KSAvLyAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZUTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0MCkgLy8gKEVNQUMpIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwRkMpIC8vIChFTUFDKSBSZXZpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzApIC8vIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQ0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNDQpIC8vIChFTUFDKSBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzQykgLy8gKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNDgpIC8vIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTlNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA4KSAvLyAoRU1BQykgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EyTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEEwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNEMpIC8vIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDI4KSAvLyAoRU1BQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDY4KSAvLyAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlJFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDZDKSAvLyAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDg0KSAvLyAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMjQpIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyMCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMUMpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTA4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDQpIC8vIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzQykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0hEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMUMpIC8vIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI0ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDIwKSAvLyAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjgpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDApIC8vIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0QykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyNCkgLy8gKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDEwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDA0KSAvLyAoQURDKSBBREMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMkMpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRVNfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTIwKSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTEwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTFDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwQykgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTI0KSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19JVnhSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDYwKSAvLyAoQUVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMDQpIC8vIChBRVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19WUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MEZDKSAvLyAoQUVTKSBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDA1MCkgLy8gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDA0MCkgLy8gKEFFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwMCkgLy8gKEFFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTQpIC8vIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxOCkgLy8gKEFFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDEwKSAvLyAoQUVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfS0VZV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMjApIC8vIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDFDKSAvLyAoQUVTKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMEMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMDQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTEwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTFDKSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMDgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMjQpIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMjApIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkyV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMjgpIC8vIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDMwKSAvLyAoVERFUykgS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxNCkgLy8gKFRERVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODBGQykgLy8gKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNjApIC8vIChUREVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNTApIC8vIChUREVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxOCkgLy8gKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAwNCkgLy8gKFRERVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMTApIC8vIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxQykgLy8gKFRERVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDQwKSAvLyAoVERFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTFXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyMCkgLy8gKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBVU0FSVCAwIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVVNBUlQgMCBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KKyNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUNCisjZGVmaW5lIEFUOTFDX1BBMTVfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTUEkgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIENBTiBSZWNlaXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMA0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjApIC8vICBDQU4gVHJhbnNtaXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjINCisjZGVmaW5lIEFUOTFDX1BBMjJfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIyX1NQQ0sxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNQSSAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCisjZGVmaW5lIEFUOTFDX1BBMjNfVEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI1DQorI2RlZmluZSBBVDkxQ19QQTI1X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTI1X05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfUkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI4DQorI2RlZmluZSBBVDkxQ19QQTI4X0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QQTI5X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorI2RlZmluZSBBVDkxQ19QQTMwX0lSUTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAwDQorI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE0X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNg0KKyNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE2KSAvLyAgVVNBUlQgMSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorI2RlZmluZSBBVDkxQ19QQTdfU0NLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE4DQorI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjANCisjZGVmaW5lIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorI2RlZmluZSBBVDkxQ19QQjFfRVRYRU4gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEyDQorI2RlZmluZSBBVDkxQ19QQjEyX0VUWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCisjZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUNCisjZGVmaW5lIEFUOTFDX1BCMTVfRVJYRFYgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCisjZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCisjZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgRXRoZXJuZXQgTUFDIEZvcmNlIDEwMCBNYml0cy9zZWMNCisjZGVmaW5lIEFUOTFDX1BCMThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgQURDIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE5DQorI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIxDQorI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCisjZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI0DQorI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFVTQVJUIDEgRGF0YSBTZXQgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcNCisjZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCisjZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzDQorI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzMA0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QQjMwX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjQNCisjZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNCkgLy8gIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjUNCisjZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KKyNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI2KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEI3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOA0KKyNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI4KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KKyNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI5KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAoKHVuc2lnbmVkIGludCkgIDApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgKCh1bnNpZ25lZCBpbnQpICAxKSAvLyBTeXN0ZW0gUGVyaXBoZXJhbA0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICgodW5zaWduZWQgaW50KSAgMikgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBDQorI2RlZmluZSBBVDkxQ19JRF9QSU9CICAgKCh1bnNpZ25lZCBpbnQpICAzKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCisjZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAoKHVuc2lnbmVkIGludCkgIDQpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwDQorI2RlZmluZSBBVDkxQ19JRF9TUEkxICAgKCh1bnNpZ25lZCBpbnQpICA1KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfVVMwICAgICgodW5zaWduZWQgaW50KSAgNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICgodW5zaWduZWQgaW50KSAgNykgLy8gVVNBUlQgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICgodW5zaWduZWQgaW50KSAgOCkgLy8gU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX1RXSSAgICAoKHVuc2lnbmVkIGludCkgIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICgodW5zaWduZWQgaW50KSAxMCkgLy8gUFdNIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAoKHVuc2lnbmVkIGludCkgMTEpIC8vIFVTQiBEZXZpY2UgUG9ydA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMwICAgICgodW5zaWduZWQgaW50KSAxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgKCh1bnNpZ25lZCBpbnQpIDEzKSAvLyBUaW1lciBDb3VudGVyIDENCisjZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAoKHVuc2lnbmVkIGludCkgMTQpIC8vIFRpbWVyIENvdW50ZXIgMg0KKyNkZWZpbmUgQVQ5MUNfSURfQ0FOICAgICgodW5zaWduZWQgaW50KSAxNSkgLy8gQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICgodW5zaWduZWQgaW50KSAxNikgLy8gRXRoZXJuZXQgTUFDDQorI2RlZmluZSBBVDkxQ19JRF9BREMgICAgKCh1bnNpZ25lZCBpbnQpIDE3KSAvLyBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXINCisjZGVmaW5lIEFUOTFDX0lEX0FFUyAgICAoKHVuc2lnbmVkIGludCkgMTgpIC8vIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdA0KKyNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICgodW5zaWduZWQgaW50KSAxOSkgLy8gVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIwKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIxKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjJfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIyKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIzKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI0KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjVfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI3KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjhfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICgodW5zaWduZWQgaW50KSAzMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApDQorI2RlZmluZSBBVDkxQ19JRF9JUlExICAgKCh1bnNpZ25lZCBpbnQpIDMxKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVMgICAgICAgKChBVDkxUFNfU1lTKSAJMHhGRkZGRjAwMCkgLy8gKFNZUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAoKEFUOTFQU19BSUMpIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0RCR1UgICgoQVQ5MVBTX1BEQykgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAoKEFUOTFQU19EQkdVKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgKChBVDkxUFNfQ0tHUikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICgoQVQ5MVBTX1BNQykgCTB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgKChBVDkxUFNfUlNUQykgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICgoQVQ5MVBTX1JUVEMpIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAoKEFUOTFQU19QSVRDKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgKChBVDkxUFNfV0RUQykgCTB4RkZGRkZENDApIC8vIChXRFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVlJFRyAgICAgICgoQVQ5MVBTX1ZSRUcpIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAoKEFUOTFQU19NQykgCTB4RkZGRkZGMDApIC8vIChNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkxICAoKEFUOTFQU19QREMpIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkxICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMCAgKChBVDkxUFNfUERDKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMCAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMxICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAoKEFUOTFQU19QREMpIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgKChBVDkxUFNfUERDKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgKChBVDkxUFNfU1NDKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAoKEFUOTFQU19UV0kpIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gxICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgKChBVDkxUFNfUFdNQykgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVURQICAgICAgICgoQVQ5MVBTX1VEUCkgCTB4RkZGQjAwMDApIC8vIChVRFApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzAgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwODApIC8vIChUQzIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgKChBVDkxUFNfVENCKSAJMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjAgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjEgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjIgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjMgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjQgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjUgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjYgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjcgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTiAgICAgICAoKEFUOTFQU19DQU4pIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfRU1BQyAgICAgICgoQVQ5MVBTX0VNQUMpIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAoKEFUOTFQU19QREMpIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAoKEFUOTFQU19BREMpIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICgoQVQ5MVBTX0FFUykgCTB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgKChBVDkxUFNfUERDKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICgoQVQ5MVBTX1RERVMpIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQmFzZSBBZGRyZXNzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSVNSQU0JICgoY2hhciAqKSAJMHgwMDIwMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDA4MDAwKSAvLyBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoMzIgS2J5dGUpDQorI2RlZmluZSBBVDkxQ19JRkxBU0gJICgoY2hhciAqKSAJMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDIwMDAwKSAvLyBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICgxMjggS2J5dGUpDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4X2luYy5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4X2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjY4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gxMjhfaW5jLmgKQEAgLTAsMCArMSwyNDQ2IEBACisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCisvLyAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKy8vICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KKy8vICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKy8vICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorLy8gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KKy8vICBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQorLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQorLy8gIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCisvLyAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIEZpbGUgTmFtZSAgICAgICAgICAgOiBBVDkxU0FNN1gxMjguaA0KKy8vIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1gxMjggZGVmaW5pdGlvbnMNCisvLyBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjMpDQorLy8gDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gxMjgucGwvMS4xNC9UdWUgTWF5IDEwIDEyOjEyOjA1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BSUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQUlDX1NNUiAgICAgICAgICggMCkgLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19TVlIgICAgICAgICAoMTI4KSAvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVZSICAgICAgICAgKDI1NikgLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZWUiAgICAgICAgICgyNjApIC8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JU1IgICAgICAgICAoMjY0KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVBSICAgICAgICAgKDI2OCkgLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JTVIgICAgICAgICAoMjcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0NJU1IgICAgICAgICgyNzYpIC8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lFQ1IgICAgICAgICgyODgpIC8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lEQ1IgICAgICAgICgyOTIpIC8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JQ0NSICAgICAgICAoMjk2KSAvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lTQ1IgICAgICAgICgzMDApIC8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0VPSUNSICAgICAgICgzMDQpIC8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX1NQVSAgICAgICAgICgzMDgpIC8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0RDUiAgICAgICAgICgzMTIpIC8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBSUNfRkZFUiAgICAgICAgKDMyMCkgLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICgzMjQpIC8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRkZTUiAgICAgICAgKDMyOCkgLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAoMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAoMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQUlDKSBOSVJRIFN0YXR1cw0KKy8vIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfUFJPVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUERDX1JQUiAgICAgICAgICggMCkgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUkNSICAgICAgICAgKCA0KSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UUFIgICAgICAgICAoIDgpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UQ1IgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19STlBSICAgICAgICAoMTYpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUk5DUiAgICAgICAgKDIwKSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1ROUFIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVE5DUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19QVENSICAgICAgICAoMzIpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUFRTUiAgICAgICAgKDM2KSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBEQkdVX0NSICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX01SICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lFUiAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lEUiAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9JTVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQ1NSICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JIUiAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RIUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0JSR1IgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0NJRFIgICAgICAgKDY0KSAvLyBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0VYSUQgICAgICAgKDY4KSAvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9GTlRSICAgICAgICg3MikgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUlBSICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkNSICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVFBSICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RDUiAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9STlBSICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JOQ1IgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5QUiAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5DUiAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUFRDUiAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9QVFNSICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICgweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgICAgICgweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQSU9fUEVSICAgICAgICAgKCAwKSAvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERSICAgICAgICAgKCA0KSAvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BTUiAgICAgICAgICggOCkgLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09FUiAgICAgICAgICgxNikgLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EUiAgICAgICAgICgyMCkgLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBQSU9fT1NSICAgICAgICAgKDI0KSAvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZFUiAgICAgICAgKDMyKSAvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZEUiAgICAgICAgKDM2KSAvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGU1IgICAgICAgICg0MCkgLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1NPRFIgICAgICAgICg0OCkgLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQ09EUiAgICAgICAgKDUyKSAvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EU1IgICAgICAgICg1NikgLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERTUiAgICAgICAgKDYwKSAvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRVIgICAgICAgICAoNjQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRFIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSU1SICAgICAgICAgKDcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lTUiAgICAgICAgICg3NikgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERVIgICAgICAgICg4MCkgLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERFIgICAgICAgICg4NCkgLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NRFNSICAgICAgICAoODgpIC8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVEUiAgICAgICAoOTYpIC8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVUVSICAgICAgICgxMDApIC8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVU1IgICAgICAgKDEwNCkgLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BU1IgICAgICAgICAoMTEyKSAvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0JTUiAgICAgICAgICgxMTYpIC8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQUJTUiAgICAgICAgKDEyMCkgLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRVIgICAgICAgICgxNjApIC8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PV0RSICAgICAgICAoMTY0KSAvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XU1IgICAgICAgICgxNjgpIC8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0tHUiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBDS0dSX01PUiAgICAgICAgKCAwKSAvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIENLR1JfTUNGUiAgICAgICAoIDQpIC8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0tHUl9QTExSICAgICAgICgxMikgLy8gUExMIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1NDRU4gICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICAgICAoMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICAgICAoMHhGRiA8PCAgOCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kNCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTlJEWSAgICAgICAgKDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWXzAgICAgICAgICAgICAgICAgICAgICgweDApIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICAgICAgICAgICAgKDB4MSkgLy8gKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQNCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMQ09VTlQgICAgICAgKDB4M0YgPDwgIDgpIC8vIChDS0dSKSBQTEwgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVQgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgICAgICgweDdGRiA8PCAxNikgLy8gKENLR1IpIFBMTCBNdWx0aXBsaWVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICgweDMgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICAgICAgICAgICAgICAgKDB4MCA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8xICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDINCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BNQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQTUNfU0NFUiAgICAgICAgKCAwKSAvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU0NEUiAgICAgICAgKCA0KSAvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NDU1IgICAgICAgICggOCkgLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDRVIgICAgICAgICgxNikgLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QQ0RSICAgICAgICAoMjApIC8vIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDU1IgICAgICAgICgyNCkgLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19NT1IgICAgICAgICAoMzIpIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01DRlIgICAgICAgICgzNikgLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUExMUiAgICAgICAgKDQ0KSAvLyBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19NQ0tSICAgICAgICAoNDgpIC8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDS1IgICAgICAgICg2NCkgLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfSUVSICAgICAgICAgKDk2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfSURSICAgICAgICAgKDEwMCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TUiAgICAgICAgICAoMTA0KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JTVIgICAgICAgICAoMTA4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICAgICAoMHgzIDw8ICAwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAgICAgICAgICAoMHgwKSAvLyAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAgICAgICAgICAoMHgxKSAvLyAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAgICAgICAgICAoMHgzKSAvLyAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAoMHg3IDw8ICAyKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUHJlc2NhbGVyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLICAgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNCAgICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDQNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfOCAgICAgICAgICAgICAgICAoMHgzIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICAgICAgICAgICAoMHg0IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzMyICAgICAgICAgICAgICAgKDB4NSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS182NCAgICAgICAgICAgICAgICgweDYgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQNCisvLyAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19NT1NDUyAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzBSRFkgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzNSRFkgICAgICAgICAoMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlNUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBSU1RDX1JDUiAgICAgICAgKCAwKSAvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBSU1RDX1JTUiAgICAgICAgKCA0KSAvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFJTVENfUk1SICAgICAgICAoIDgpIC8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QUk9DUlNUICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgUHJvY2Vzc29yIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgICgweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgICAgICgweDEgPDwgIDMpIC8vIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19LRVkgICAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFJTVEMpIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gUlNUQ19SU1IgOiAoUlNUQyBPZmZzZXQ6IDB4NCkgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUUyAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfUlNUVFlQICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFJTVEMpIFJlc2V0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9QT1dFUlVQICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoUlNUQykgUG93ZXItdXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1dBS0VVUCAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChSU1RDKSBXYWtlVXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1dBVENIRE9HICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfVVNFUiAgICAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9CUk9XTk9VVCAgICAgICAgICAgICAoMHg1IDw8ICA4KSAvLyAoUlNUQykgQnJvd25vdXQgUmVzZXQgb2NjdXJlZC4NCisjZGVmaW5lIEFUOTFDX1JTVENfTlJTVEwgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgICAgICgweDEgPDwgMTcpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KKy8vIC0tLS0tLS0tIFJTVENfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUSUVOICAgICAgICAoMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgICgweEYgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RJRU4gICAgICAgICAoMHgxIDw8IDE2KSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SVFRDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFJUVENfUlRNUiAgICAgICAoIDApIC8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUQVIgICAgICAgKCA0KSAvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRWUiAgICAgICAoIDgpIC8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVFNSICAgICAgICgxMikgLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRQUkVTICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DSUVOICAgICAgKDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRSU1QgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1WICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUlRUQykgQWxhcm0gVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUVlIgOiAoUlRUQyBPZmZzZXQ6IDB4OCkgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0NSVFYgICAgICAgICAgICgweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1TICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUElUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQSVRDX1BJTVIgICAgICAgKCAwKSAvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSVNSICAgICAgICggNCkgLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSVZSICAgICAgICggOCkgLy8gUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBQSVRDX1BJSVIgICAgICAgKDEyKSAvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBQSVRDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElWICAgICAgICAgICAgKDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgICAgICAoMHgxIDw8IDI1KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0IEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFBJVENfUElTUiA6IChQSVRDIE9mZnNldDogMHg0KSBQZXJpb2RpYyBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVFMgICAgICAgICAgICgweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgICAgICgweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgICAgICAoMHhGRkYgPDwgMjApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfV0RUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBXRFRDX1dEQ1IgICAgICAgKCAwKSAvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dETVIgICAgICAgKCA0KSAvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dEU1IgICAgICAgKCA4KSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAgICgweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgICAgICgweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RGSUVOICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAgICAgKDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgICAoMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERJUyAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICAgICAoMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERCR0hMVCAgICAgICAoMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgICAoMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVlJFRyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBWUkVHX01SICAgICAgICAgKCAwKSAvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfTUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgTUNfUkNSICAgICAgICAgICggMCkgLy8gTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfQVNSICAgICAgICAgICggNCkgLy8gTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19BQVNSICAgICAgICAgKCA4KSAvLyBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfRk1SICAgICAgICAgICg5NikgLy8gTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfRkNSICAgICAgICAgICgxMDApIC8vIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0ZTUiAgICAgICAgICAoMTA0KSAvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChNQykgUmVtYXAgQ29tbWFuZCBCaXQNCisvLyAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1VOREFERCAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoTUMpIEFib3J0IFNpemUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKE1DKSBCeXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKE1DKSBIYWxmLXdvcmQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoTUMpIFdvcmQNCisjZGVmaW5lIEFUOTFDX01DX0FCVFRZUCAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgICAgICgweDEgPDwgMjUpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorLy8gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZSRFkgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKE1DKSBGbGFzaCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS0UgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfTkVCUCAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoTUMpIE5vIEVyYXNlIEJlZm9yZSBQcm9ncmFtbWluZw0KKyNkZWZpbmUgQVQ5MUNfTUNfRldTICAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgICAgICgweEZGIDw8IDE2KSAvLyAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlcg0KKy8vIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgICAgICgweEYgPDwgIDApIC8vIChNQykgRmxhc2ggQ29tbWFuZA0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgICAgICAgICAgKDB4MSkgLy8gKE1DKSBTdGFydHMgdGhlIHByb2dyYW1taW5nIG9mIHRoIGVwYWdlIHNwZWNpZmllZCBieSBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0xPQ0sgICAgICAgICAgICAgICAgICgweDIpIC8vIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgICAgICgweDMpIC8vIChNQykgVGhlIGxvY2sgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9VTkxPQ0sgICAgICAgICAgICAgICAoMHg0KSAvLyAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICAgICAgICAgICAoMHg4KSAvLyAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICAgICAoMHhCKSAvLyAoTUMpIFNldCBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNICAgICAgICAgICAoMHhEKSAvLyAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSAgICAgICAgICgweEYpIC8vIChNQykgU2V0IFNlY3VyaXR5IEJpdC4NCisjZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgKDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoTUMpIFNlY3VyaXR5IEJpdCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMCAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgICgweDEgPDwgMTApIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMyAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNiAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMSAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNCAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNyAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgICgweDEgPDwgMjUpIC8vIChNQykgU2VjdG9yIDkgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTAgICAgICAgICAgKDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAgICAgKDB4MSA8PCAyNykgLy8gKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKE1DKSBTZWN0b3IgMTIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTMgICAgICAgICAgKDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAgICAgKDB4MSA8PCAzMCkgLy8gKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKE1DKSBTZWN0b3IgMTUgTG9jayBTdGF0dXMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfU1BJIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFNQSV9DUiAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9NUiAgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9SRFIgICAgICAgICAoIDgpIC8vIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1REUiAgICAgICAgICgxMikgLy8gVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1NSICAgICAgICAgICgxNikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfSUVSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfSURSICAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lNUiAgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9DU1IgICAgICAgICAoNDgpIC8vIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUlBSICAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUkNSICAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVFBSICAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1RDUiAgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9STlBSICAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JOQ1IgICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVE5QUiAgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVE5DUiAgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUFRDUiAgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9QVFNSICAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIFNQSSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgU1BJIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0DQorI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgICAgICgweDEgPDwgMjQpIC8vIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyDQorLy8gLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlDQorI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICAgICAgICAgICgweDAgPDwgIDEpIC8vIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICgweDEgPDwgIDIpIC8vIChTUEkpIENoaXAgU2VsZWN0IERlY29kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzDQorLy8gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfUlBDUyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChTUEkpIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChTUEkpIE1vZGUgRmF1bHQgRXJyb3INCisjZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoU1BJKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNQSSkgTlNTUiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFNQSSkgRW5hYmxlIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgQ2xvY2sgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgQ2xvY2sgUGhhc2UNCisjZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgICAgICgweEYgPDwgIDQpIC8vIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOCAgICAgICAgICAgICAgICAgICAgKDB4MCA8PCAgNCkgLy8gKFNQSSkgOCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzkgICAgICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMCAgICAgICAgICAgICAgICAgICAoMHgyIDw8ICA0KSAvLyAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzExICAgICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTIgICAgICAgICAgICAgICAgICAgKDB4NCA8PCAgNCkgLy8gKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMyAgICAgICAgICAgICAgICAgICAoMHg1IDw8ICA0KSAvLyAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE0ICAgICAgICAgICAgICAgICAgICgweDYgPDwgIDQpIC8vIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTUgICAgICAgICAgICAgICAgICAgKDB4NyA8PCAgNCkgLy8gKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNiAgICAgICAgICAgICAgICAgICAoMHg4IDw8ICA0KSAvLyAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICAoMHhGRiA8PCAgOCkgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VU0FSVCBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBVU19DUiAgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBVU19NUiAgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRVIgICAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRFIgICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSU1SICAgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0NTUiAgICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SSFIgICAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19USFIgICAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19CUkdSICAgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SVE9SICAgICAgICAgKDM2KSAvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVFRHUiAgICAgICAgICg0MCkgLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfRklESSAgICAgICAgICg2NCkgLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIFVTX05FUiAgICAgICAgICAoNjgpIC8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSUYgICAgICAgICAgICg3NikgLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JQUiAgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JDUiAgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RQUiAgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19UQ1IgICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUk5QUiAgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STkNSICAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROUFIgICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROQ1IgICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1BUQ1IgICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRTUiAgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUQlJLICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19TRU5EQSAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUkVUVE8gICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0VOICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoVVNBUlQpIFVzYXJ0IG1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MCkgLy8gKFVTQVJUKSBOb3JtYWwNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFVTQVJUKSBSUzQ4NQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgICAgICAgICAoMHgyKSAvLyAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAgICAgICAgICgweDMpIC8vIChVU0FSVCkgTW9kZW0NCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICAgICAgICAgKDB4NCkgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgICAgICAgICAoMHg2KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAgICAgICAgICgweDgpIC8vIChVU0FSVCkgSXJEQQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgICAgICAgICAoMHhDKSAvLyAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgICAgICgweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KKy8vIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAgICAgICAgICAgKDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1NDX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0NNUiAgICAgICAgICggNCkgLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDTVIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SRk1SICAgICAgICAoMjApIC8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDTVIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RGTVIgICAgICAgICgyOCkgLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JIUiAgICAgICAgICgzMikgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEhSICAgICAgICAgKDM2KSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlNIUiAgICAgICAgKDQ4KSAvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RTSFIgICAgICAgICg1MikgLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfU1IgICAgICAgICAgKDY0KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRVIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRFIgICAgICAgICAoNzIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfSU1SICAgICAgICAgKDc2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAoMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgKDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgKDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAoMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICgweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICgweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgICAgICgweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVFdJIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRXSV9DUiAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9NTVIgICAgICAgICAoIDQpIC8vIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSUFEUiAgICAgICAgKDEyKSAvLyBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfQ1dHUiAgICAgICAgKDE2KSAvLyBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9TUiAgICAgICAgICAoMzIpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lFUiAgICAgICAgICgzNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lEUiAgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JTVIgICAgICAgICAoNDQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfUkhSICAgICAgICAgKDQ4KSAvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9USFIgICAgICAgICAoNTIpIC8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRXSSkgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUV0lfTU1SIDogKFRXSSBPZmZzZXQ6IDB4NCkgVFdJIE1hc3RlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVFdJKSBJbnRlcm5hbCBEZXZpY2UgQWRkcmVzcyBTaXplDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl9OTyAgICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoVFdJKSBObyBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMV9CWVRFICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRXSSkgT25lLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzJfQllURSAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChUV0kpIFR3by1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8zX0JZVEUgICAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVFdJKSBUaHJlZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfTVJFQUQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICAgICAoMHg3RiA8PCAxNikgLy8gKFRXSSkgRGV2aWNlIEFkZHJlc3MNCisvLyAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKFRXSSkgQ2xvY2sgTG93IERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAgICAgKDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICAgICAoMHg3IDw8IDE2KSAvLyAoVFdJKSBDbG9jayBEaXZpZGVyDQorLy8gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgICAgICgweDEgPDwgIDApIC8vIChUV0kpIFRyYW5zbWlzc2lvbiBDb21wbGV0ZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9SWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9PVlJFICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRXSSkgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorLy8gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUFdNQ19DSCBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQV01DX0NNUiAgICAgICAgKCAwKSAvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ0RUWVIgICAgICAoIDQpIC8vIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DUFJEUiAgICAgICggOCkgLy8gQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ0NOVFIgICAgICAoMTIpIC8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DVVBEUiAgICAgICgxNikgLy8gQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfUmVzZXJ2ZWQgICAoMjApIC8vIFJlc2VydmVkDQorLy8gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgICAgICgweEYgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3gNCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgICAgICAgICAgICAoMHhCKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICAgICAgICAgICAgICgweEMpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQWxpZ25tZW50DQorI2RlZmluZSBBVDkxQ19QV01DX0NQT0wgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlDQorLy8gLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUFdNQ19NUiAgICAgICAgICggMCkgLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0VOQSAgICAgICAgKCA0KSAvLyBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19ESVMgICAgICAgICggOCkgLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1NSICAgICAgICAgKDEyKSAvLyBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JRVIgICAgICAgICgxNikgLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lEUiAgICAgICAgKDIwKSAvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lNUiAgICAgICAgKDI0KSAvLyBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lTUiAgICAgICAgKDI4KSAvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfVlIgICAgICAgICAoMjUyKSAvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ0ggICAgICAgICAoNTEyKSAvLyBQV01DIENoYW5uZWwNCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICgweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VEUCBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBVRFBfTlVNICAgICAgICAgKCAwKSAvLyBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9HTEJTVEFURSAgICAoIDQpIC8vIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0ZBRERSICAgICAgICggOCkgLy8gRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lFUiAgICAgICAgICgxNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lEUiAgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JTVIgICAgICAgICAoMjQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSVNSICAgICAgICAgKDI4KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSUNSICAgICAgICAgKDMyKSAvLyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9SU1RFUCAgICAgICAoNDApIC8vIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfQ1NSICAgICAgICAgKDQ4KSAvLyBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9GRFIgICAgICAgICAoODApIC8vIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX1RYVkMgICAgICAgICgxMTYpIC8vIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgICAgICgweDdGRiA8PCAgMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAgICAgICgweDEgPDwgMTYpIC8vIChVRFApIEZyYW1lIEVycm9yDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAgICAgICgweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfQ09ORkcgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIENvbmZpZ3VyZWQNCisjZGVmaW5lIEFUOTFDX1VEUF9FU1IgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCisjZGVmaW5lIEFUOTFDX1VEUF9STVdVUEUgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIEZ1bmN0aW9uIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQwICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQzICAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgICAgICgweDEgPDwgIDUpIC8vIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhTVVNQICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVURQKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1NPRklOVCAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAgICAgKDB4MSA8PCAxMikgLy8gKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNQ0KKy8vIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAoMHgxIDw8ICA2KSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFVEUCkgQ29udHJvbA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVURQKSBCdWxrIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChVRFApIEJ1bGsgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBJTg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVURQKSBEYXRhIFRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQRURTICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICAoMHg3RkYgPDwgMTYpIC8vIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCisvLyAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSANCisjZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFVEUCkgUHVsbC11cCBPTg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ19DQ1IgICAgICAgICAgKCAwKSAvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0NNUiAgICAgICAgICAoIDQpIC8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIFRDX0NWICAgICAgICAgICAoMTYpIC8vIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIFRDX1JBICAgICAgICAgICAoMjApIC8vIFJlZ2lzdGVyIEENCisjZGVmaW5lIFRDX1JCICAgICAgICAgICAoMjQpIC8vIFJlZ2lzdGVyIEINCisjZGVmaW5lIFRDX1JDICAgICAgICAgICAoMjgpIC8vIFJlZ2lzdGVyIEMNCisjZGVmaW5lIFRDX1NSICAgICAgICAgICAoMzIpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSUVSICAgICAgICAgICgzNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSURSICAgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0lNUiAgICAgICAgICAoNDQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICgweDcgPDwgIDApIC8vIChUQykgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLICAgICAoMHgwKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICAoMHgxKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICAoMHgyKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYzX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLICAgICAoMHgzKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICAoMHg0KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICAoMHg1KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgICAgICAgICAgICgweDYpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAgKDB4NykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgKDB4MyA8PCAxMykgLy8gKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICAgICAoMHgyIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAxOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgKDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMzApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorLy8gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgUkEgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUQykgUkEgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUQykgQ2xvY2sgRW5hYmxpbmcNCisjZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ0JfVEMwICAgICAgICAgKCAwKSAvLyBUQyBDaGFubmVsIDANCisjZGVmaW5lIFRDQl9UQzEgICAgICAgICAoNjQpIC8vIFRDIENoYW5uZWwgMQ0KKyNkZWZpbmUgVENCX1RDMiAgICAgICAgICgxMjgpIC8vIFRDIENoYW5uZWwgMg0KKyNkZWZpbmUgVENCX0JDUiAgICAgICAgICgxOTIpIC8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDQl9CTVIgICAgICAgICAoMTk2KSAvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICgweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DQU5fTUIgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQ0FOX01CX01NUiAgICAgICggMCkgLy8gTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUFNICAgICAgKCA0KSAvLyBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01JRCAgICAgICggOCkgLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01GSUQgICAgICgxMikgLy8gTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NU1IgICAgICAoMTYpIC8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURMICAgICAgKDIwKSAvLyBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURIICAgICAgKDI0KSAvLyBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01DUiAgICAgICgyOCkgLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQ0FOX01NUiA6IChDQU5fTUIgT2Zmc2V0OiAweDApIENBTiBNZXNzYWdlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICAgICAoMHg3IDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgICAgICAgKDB4MiA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICAgICAgICgweDQgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgICAgICAgKDB4NSA8PCAyNCkgLy8gKENBTl9NQikgDQorLy8gLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QiAgICAgICAgICAgKDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICgweDdGRiA8PCAxOCkgLy8gKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIFZlcnNpb24NCisvLyAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01GSUQgOiAoQ0FOX01CIE9mZnNldDogMHhjKSBDQU4gTWVzc2FnZSBGYW1pbHkgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVTVEFNUCAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQlQgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgSWdub3JlZA0KKy8vIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01ESCA6IChDQU5fTUIgT2Zmc2V0OiAweDE4KSBDQU4gTWVzc2FnZSBEYXRhIEhpZ2ggUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQ1IgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0NBTiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBDQU5fTVIgICAgICAgICAgKCAwKSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fSUVSICAgICAgICAgKCA0KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fSURSICAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX0lNUiAgICAgICAgICgxMikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9TUiAgICAgICAgICAoMTYpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX0JSICAgICAgICAgICgyMCkgLy8gQmF1ZHJhdGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9USU0gICAgICAgICAoMjQpIC8vIFRpbWVyIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fVElNRVNUUCAgICAgKDI4KSAvLyBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fRUNSICAgICAgICAgKDMyKSAvLyBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fVENSICAgICAgICAgKDM2KSAvLyBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fQUNSICAgICAgICAgKDQwKSAvLyBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fVlIgICAgICAgICAgKDI1MikgLy8gVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CMCAgICAgICAgICg1MTIpIC8vIENBTiBNYWlsYm94IDANCisjZGVmaW5lIENBTl9NQjEgICAgICAgICAoNTQ0KSAvLyBDQU4gTWFpbGJveCAxDQorI2RlZmluZSBDQU5fTUIyICAgICAgICAgKDU3NikgLy8gQ0FOIE1haWxib3ggMg0KKyNkZWZpbmUgQ0FOX01CMyAgICAgICAgICg2MDgpIC8vIENBTiBNYWlsYm94IDMNCisjZGVmaW5lIENBTl9NQjQgICAgICAgICAoNjQwKSAvLyBDQU4gTWFpbGJveCA0DQorI2RlZmluZSBDQU5fTUI1ICAgICAgICAgKDY3MikgLy8gQ0FOIE1haWxib3ggNQ0KKyNkZWZpbmUgQ0FOX01CNiAgICAgICAgICg3MDQpIC8vIENBTiBNYWlsYm94IDYNCisjZGVmaW5lIENBTl9NQjcgICAgICAgICAoNzM2KSAvLyBDQU4gTWFpbGJveCA3DQorI2RlZmluZSBDQU5fTUI4ICAgICAgICAgKDc2OCkgLy8gQ0FOIE1haWxib3ggOA0KKyNkZWZpbmUgQ0FOX01COSAgICAgICAgICg4MDApIC8vIENBTiBNYWlsYm94IDkNCisjZGVmaW5lIENBTl9NQjEwICAgICAgICAoODMyKSAvLyBDQU4gTWFpbGJveCAxMA0KKyNkZWZpbmUgQ0FOX01CMTEgICAgICAgICg4NjQpIC8vIENBTiBNYWlsYm94IDExDQorI2RlZmluZSBDQU5fTUIxMiAgICAgICAgKDg5NikgLy8gQ0FOIE1haWxib3ggMTINCisjZGVmaW5lIENBTl9NQjEzICAgICAgICAoOTI4KSAvLyBDQU4gTWFpbGJveCAxMw0KKyNkZWZpbmUgQ0FOX01CMTQgICAgICAgICg5NjApIC8vIENBTiBNYWlsYm94IDE0DQorI2RlZmluZSBDQU5fTUIxNSAgICAgICAgKDk5MikgLy8gQ0FOIE1haWxib3ggMTUNCisvLyAtLS0tLS0tLSBDQU5fTVIgOiAoQ0FOIE9mZnNldDogMHgwKSBDQU4gTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9DQU5FTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIExvdyBQb3dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fQUJNICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIEF1dG9iYXVkL0xpc3RlbiBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fT1ZMICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChDQU4pIFRpbWUgU3RhbXAgbWVzc2FnZXMgYXQgZWFjaCBlbmQgb2YgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9UVE0gICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgVGltZSBUcmlnZ2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9USU1GUlogICAgICAgICAgKDB4MSA8PCAgNikgLy8gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQ0FOKSBEaXNhYmxlIFJlcGVhdA0KKy8vIC0tLS0tLS0tIENBTl9JRVIgOiAoQ0FOIE9mZnNldDogMHg0KSBDQU4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKENBTikgTWFpbGJveCAwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKENBTikgTWFpbGJveCAxIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKENBTikgTWFpbGJveCAyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKENBTikgTWFpbGJveCAzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjQgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKENBTikgTWFpbGJveCA0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKENBTikgTWFpbGJveCA1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKENBTikgTWFpbGJveCA2IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjcgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKENBTikgTWFpbGJveCA3IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKENBTikgTWFpbGJveCA4IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKENBTikgTWFpbGJveCA5IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEwICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKENBTikgTWFpbGJveCAxMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChDQU4pIE1haWxib3ggMTEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoQ0FOKSBNYWlsYm94IDEyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjEzICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKENBTikgTWFpbGJveCAxMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChDQU4pIE1haWxib3ggMTQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoQ0FOKSBNYWlsYm94IDE1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJBICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKENBTikgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9CT0ZGICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKENBTikgU2xlZXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoQ0FOKSBXYWtldXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RPVkYgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChDQU4pIFRpbWVzdGFtcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU4pIENSQyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NFUlIgICAgICAgICAgICAoMHgxIDw8IDI1KSAvLyAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAgICAgICAoMHgxIDw8IDI3KSAvLyAoQ0FOKSBGb3JtIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQkVSUiAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgICAgICAgKDB4MSA8PCAyOSkgLy8gKENBTikgUmVjZWl2ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RCU1kgICAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoQ0FOKSBUcmFuc21pdHRlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fT1ZMWSAgICAgICAgICAgICgweDEgPDwgMzEpIC8vIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICAgICAoMHg3IDw8ICAwKSAvLyAoQ0FOKSBQaGFzZSAyIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTEgICAgICAgICAgKDB4NyA8PCAgNCkgLy8gKENBTikgUGhhc2UgMSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fUFJPUEFHICAgICAgICAgICgweDcgPDwgIDgpIC8vIChDQU4pIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fU1lOQyAgICAgICAgICAgICgweDMgPDwgMTIpIC8vIChDQU4pIFJlLXN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9CUlAgICAgICAgICAgICAgKDB4N0YgPDwgMTYpIC8vIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoQ0FOKSBTYW1wbGluZyBtb2RlDQorLy8gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU4pIFRpbWVyIGZpZWxkDQorLy8gLS0tLS0tLS0gQ0FOX1RJTUVTVFAgOiAoQ0FOIE9mZnNldDogMHgxYykgQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKENBTikgUmVjZWl2ZSBFcnJvciBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVEVDICAgICAgICAgICAgICgweEZGIDw8IDE2KSAvLyAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQorLy8gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKENBTikgVGltZXIgUmVzZXQgRmllbGQNCisvLyAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19FTUFDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEVNQUNfTkNSICAgICAgICAoIDApIC8vIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19OQ0ZHUiAgICAgICggNCkgLy8gTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX05TUiAgICAgICAgKCA4KSAvLyBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19UU1IgICAgICAgICgyMCkgLy8gVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JCUVAgICAgICAgKDI0KSAvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBFTUFDX1RCUVAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgRU1BQ19SU1IgICAgICAgICgzMikgLy8gUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSVNSICAgICAgICAoMzYpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSUVSICAgICAgICAoNDApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSURSICAgICAgICAoNDQpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0lNUiAgICAgICAgKDQ4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQU4gICAgICAgICg1MikgLy8gUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BUUiAgICAgICAgKDU2KSAvLyBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BGUiAgICAgICAgKDYwKSAvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRlRPICAgICAgICAoNjQpIC8vIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19TQ0YgICAgICAgICg2OCkgLy8gU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQ0YgICAgICAgICg3MikgLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0ZSTyAgICAgICAgKDc2KSAvLyBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRkNTRSAgICAgICAoODApIC8vIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0FMRSAgICAgICAgKDg0KSAvLyBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRFRGICAgICAgICAoODgpIC8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19MQ09MICAgICAgICg5MikgLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUNPTCAgICAgICAoOTYpIC8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFVORCAgICAgICAoMTAwKSAvLyBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19DU0UgICAgICAgICgxMDQpIC8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlJFICAgICAgICAoMTA4KSAvLyBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19ST1YgICAgICAgICgxMTIpIC8vIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlNFICAgICAgICAoMTE2KSAvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUxFICAgICAgICAoMTIwKSAvLyBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SSkEgICAgICAgICgxMjQpIC8vIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19VU0YgICAgICAgICgxMjgpIC8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfU1RFICAgICAgICAoMTMyKSAvLyBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19STEUgICAgICAgICgxMzYpIC8vIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1RQRiAgICAgICAgKDE0MCkgLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0hSQiAgICAgICAgKDE0NCkgLy8gSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgRU1BQ19IUlQgICAgICAgICgxNDgpIC8vIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBFTUFDX1NBMUwgICAgICAgKDE1MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTFIICAgICAgICgxNTYpIC8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTJMICAgICAgICgxNjApIC8vIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EySCAgICAgICAoMTY0KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EzTCAgICAgICAoMTY4KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBM0ggICAgICAgKDE3MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBNEwgICAgICAgKDE3NikgLy8gU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTRIICAgICAgICgxODApIC8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19USUQgICAgICAgICgxODQpIC8vIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFBRICAgICAgICAoMTg4KSAvLyBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1VTUklPICAgICAgKDE5MikgLy8gVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfV09MICAgICAgICAoMTk2KSAvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SRVYgICAgICAgICgyNTIpIC8vIFJldmlzaW9uIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgTG9vcGJhY2suIE9wdGlvbmFsLiBXaGVuIHNldCwgbG9vcGJhY2sgc2lnbmFsIGlzIGF0IGhpZ2ggbGV2ZWwuDQorI2RlZmluZSBBVDkxQ19FTUFDX0xMQiAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RFICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NUEUgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lOQ1NUQVQgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XRVNUQVQgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNUQVJUICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RIQUxUICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFpRICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZQ0KKy8vIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgRnVsbCBkdXBsZXguIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19KRlJBTUUgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgSnVtYm8gRnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0FGICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBObyBicm9hZGNhc3QuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQUUgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorI2RlZmluZSBBVDkxQ19FTUFDX0VGUkhEICAgICAgICAgICgweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEVNQUMpIElnbm9yZSBSWCBGQ1MNCisvLyAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgR28NCisjZGVmaW5lIEFUOTFDX0VNQUNfQkVYICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JOQSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICAgICAoMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICAgICAoMHgxRiA8PCAyMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1NPRiAgICAgICAgICAgICgweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIFJlZHVjZSBNSUkNCisvLyAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBJUCBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19FTUFDX01BRyAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEVNQUMpIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMSBldmVudCBlbmFibGUNCisvLyAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAgICAgKDB4RkZGRiA8PCAxNikgLy8gKEVNQUMpIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FEQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRENfQ1IgICAgICAgICAgKCAwKSAvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX01SICAgICAgICAgICggNCkgLy8gQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSEVSICAgICAgICAoMTYpIC8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIRFIgICAgICAgICgyMCkgLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIU1IgICAgICAgICgyNCkgLy8gQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfU1IgICAgICAgICAgKDI4KSAvLyBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfTENEUiAgICAgICAgKDMyKSAvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lFUiAgICAgICAgICgzNikgLy8gQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JRFIgICAgICAgICAoNDApIC8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lNUiAgICAgICAgICg0NCkgLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0RSMCAgICAgICAgKDQ4KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFEQ19DRFIxICAgICAgICAoNTIpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQURDX0NEUjIgICAgICAgICg1NikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBRENfQ0RSMyAgICAgICAgKDYwKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFEQ19DRFI0ICAgICAgICAoNjQpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQURDX0NEUjUgICAgICAgICg2OCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBRENfQ0RSNiAgICAgICAgKDcyKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFEQ19DRFI3ICAgICAgICAoNzYpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQURDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAgICAgKDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICAoMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICgweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAgICAgKDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICAgICAoMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAgICAgKDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FFUyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRVNfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSUVSICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSURSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lNUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JU1IgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19LRVlXeFIgICAgICAoMzIpIC8vIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JREFUQXhSICAgICAoNjQpIC8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX09EQVRBeFIgICAgICg4MCkgLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lWeFIgICAgICAgICg5NikgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19WUiAgICAgICAgICAoMjUyKSAvLyBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19BRVNfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICgweDEgPDwgMTYpIC8vIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZw0KKy8vIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChBRVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgICAgICgweDcgPDwgMTIpIC8vIChBRVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMikgLy8gKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICAgICAgICAgICgweDQgPDwgMTIpIC8vIChBRVMpIENUUiBDb3VudGVyIG1vZGUuDQorI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAoMHg3IDw8IDE2KSAvLyAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKEFFUykgMTI4LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQUVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKEFFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChBRVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoMHg0IDw8IDE2KSAvLyAoQUVTKSA4LWJpdC4NCisjZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAgICAgKDB4RiA8PCAyMCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgS2V5DQorI2RlZmluZSBBVDkxQ19BRVNfQ1RZUEUgICAgICAgICAgICgweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFRYICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19BRVNfVVJBRCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICAgICAoMHg3IDw8IDEyKSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoMHgwIDw8IDEyKSAvLyAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKDB4MSA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKDB4MiA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICgweDMgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICgweDQgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKDB4NSA8PCAxMikgLy8gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVERFUyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUREVTX0NSICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX01SICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lFUiAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lEUiAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JTVIgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSVNSICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfS0VZMVd4UiAgICAoMzIpIC8vIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19LRVkyV3hSICAgICg0MCkgLy8gS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0tFWTNXeFIgICAgKDQ4KSAvLyBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSURBVEF4UiAgICAoNjQpIC8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19PREFUQXhSICAgICg4MCkgLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JVnhSICAgICAgICg5NikgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfVlIgICAgICAgICAoMjUyKSAvLyBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUlBSICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUkNSICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfVFBSICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1RDUiAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19STlBSICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JOQ1IgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfVE5QUiAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfVE5DUiAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUFRDUiAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19QVFNSICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUREVTX0NSIDogKFRERVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgICAgICgweDEgPDwgIDApIC8vIChUREVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfVERFU19TV1JTVCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICgweDEgPDwgIDApIC8vIChUREVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRERVMpIFNpbmdsZSBvciBUcmlwbGUgREVTIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZTU9EICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUREVTKSBTdGFydCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUREVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBUREVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgICAgICgweDMgPDwgMTIpIC8vIChUREVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfRUNCICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMikgLy8gKFRERVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVERFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMikgLy8gKFRERVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0NGQiAgICAgICAgICAgICAgICAgICgweDMgPDwgMTIpIC8vIChUREVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSBBVDkxQ19UREVTX0xPRCAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKFRERVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRERVMpIDMyLWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRERVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRERVMpIDgtYml0Lg0KKy8vIC0tLS0tLS0tIFRERVNfSUVSIDogKFRERVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19EQVRSRFkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVERFUykgREFUUkRZDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFJYICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19SWEJVRkYgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1RERVNfVFhCVUZFICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBUREVTX0lEUiA6IChUREVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSVNSIDogKFRERVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19VUkFUICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgweDAgPDwgMTIpIC8vIChUREVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICgweDEgPDwgMTIpIC8vIChUREVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKDB4MiA8PCAxMikgLy8gKFRERVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFRERVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNZUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lWUiAgICAgICAgICAgICAoMHhGRkZGRjEwMCkgLy8gKEFJQykgSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAgICAgICAgICAgKDB4RkZGRkYxMDQpIC8vIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1IgICAgICAgICAgICAgKDB4RkZGRkYxMzgpIC8vIChBSUMpIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBVDkxQ19BSUNfRU9JQ1IgICAgICAgICAgICgweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAgICAgICAgICAgKDB4RkZGRkYwODApIC8vIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAgICAgICAgICAgKDB4RkZGRkYxNDgpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAgICAgICAgICAgKDB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgICAgICAgICAgICgweEZGRkZGMTA4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSU1SICAgICAgICAgICAgICgweEZGRkZGMTEwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICAgICAgICAgICAoMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAgICAgICAgICAgKDB4RkZGRkYxNDApIC8vIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRUNSICAgICAgICAgICAgKDB4RkZGRkYxMjApIC8vIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTQ1IgICAgICAgICAgICAoMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgICAgICAgICAgICgweEZGRkZGMTQ0KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0NJU1IgICAgICAgICAgICAoMHhGRkZGRjExNCkgLy8gKEFJQykgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgICAgICAgICAgICgweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgICAgICAgICAgICgweEZGRkZGMTM0KSAvLyAoQUlDKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19EQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfVENSICAgICAgICAgICAgKDB4RkZGRkYzMEMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STlBSICAgICAgICAgICAoMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICAgICAgICAgICAoMHhGRkZGRjMxOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVFBSICAgICAgICAgICAgKDB4RkZGRkYzMDgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SUFIgICAgICAgICAgICAoMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAgICAgICAgICAgKDB4RkZGRkYzMDQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOQ1IgICAgICAgICAgICgweEZGRkZGMzE0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUQ1IgICAgICAgICAgICgweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgICAgICAgICAgICgweEZGRkZGMzI0KSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5DUiAgICAgICAgICAgKDB4RkZGRkYzMUMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgKDB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAoMHhGRkZGRjIyMCkgLy8gKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgKDB4RkZGRkYyMEMpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAoMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICgweEZGRkZGMjQwKSAvLyAoREJHVSkgQ2hpcCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAoMHhGRkZGRjIwNCkgLy8gKERCR1UpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgKDB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAoMHhGRkZGRjIwMCkgLy8gKERCR1UpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgKDB4RkZGRkYyNDgpIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAoMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgKDB4RkZGRkYyMTgpIC8vIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICgweEZGRkZGMjA4KSAvLyAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgICAgICAgICAgICgweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgICAgICAgICAgICgweEZGRkZGNDMwKSAvLyAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lTUiAgICAgICAgICAgICgweEZGRkZGNDRDKSAvLyAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BQlNSICAgICAgICAgICAoMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAgICAgICAgICAgKDB4RkZGRkY0NDApIC8vIChQSU9BKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVURSICAgICAgICAgICgweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgICAgICAgICAgICgweEZGRkZGNDQ4KSAvLyAoUElPQSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUEVSICAgICAgICAgICAgKDB4RkZGRkY0MDApIC8vIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgICAgICAgICAgICgweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAgICAgICAgICAgKDB4RkZGRkY0QTQpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRFNSICAgICAgICAgICAoMHhGRkZGRjQ1OCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSURSICAgICAgICAgICAgKDB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICAgICAgICAgICAoMHhGRkZGRjQzOCkgLy8gKFBJT0EpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVTUiAgICAgICAgICAoMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgICAgICAgICAgICgweEZGRkZGNEE4KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICAgICAgICAgICAoMHhGRkZGRjQ3NCkgLy8gKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgICAgICAgICAgICgweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICAgICAgICAgICAoMHhGRkZGRjQyMCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERTUiAgICAgICAgICAgKDB4RkZGRkY0M0MpIC8vIChQSU9BKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRVIgICAgICAgICAgKDB4RkZGRkY0NjQpIC8vIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICAgICAgICAgICAoMHhGRkZGRjQxOCkgLy8gKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAgICAgICAgICAgKDB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICAgICAgICAgICAoMHhGRkZGRjQ1NCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0NPRFIgICAgICAgICAgICgweEZGRkZGNDM0KSAvLyAoUElPQSkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAgICAgICAgICAgKDB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgICAgICAgICAgICgweEZGRkZGNDA0KSAvLyAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAgICAgICAgICAgKDB4RkZGRkY0MjgpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgICAgICAgICAgICgweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICAgICAgICAgICAoMHhGRkZGRjQwOCkgLy8gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV0RSICAgICAgICAgICAoMHhGRkZGRjZBNCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERVIgICAgICAgICAgICgweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAgICAgICAgICAoMHhGRkZGRjY2OCkgLy8gKFBJT0IpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lNUiAgICAgICAgICAgICgweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAgICAgICAgICAgKDB4RkZGRkY2NzApIC8vIChQSU9CKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVEUiAgICAgICAgICAoMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICAgICAgICAgICAoMHhGRkZGRjYwOCkgLy8gKFBJT0IpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUVSICAgICAgICAgICAgKDB4RkZGRkY2NDApIC8vIChQSU9CKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0NPRFIgICAgICAgICAgICgweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAgICAgICAgICAgKDB4RkZGRkY2QTApIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FCU1IgICAgICAgICAgICgweEZGRkZGNjc4KSAvLyAoUElPQikgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkRSICAgICAgICAgICAoMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgICAgICAgICAgICgweEZGRkZGNjNDKSAvLyAoUElPQikgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lEUiAgICAgICAgICAgICgweEZGRkZGNjQ0KSAvLyAoUElPQikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dTUiAgICAgICAgICAgKDB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgICAgICAgICAgICgweEZGRkZGNjA0KSAvLyAoUElPQikgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0RSICAgICAgICAgICAgKDB4RkZGRkY2MTQpIC8vIChQSU9CKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZTUiAgICAgICAgICAgKDB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICAgICAgICAgICgweEZGRkZGNjY0KSAvLyAoUElPQikgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfU09EUiAgICAgICAgICAgKDB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAgICAgICAgICAgKDB4RkZGRkY2NEMpIC8vIChQSU9CKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EU1IgICAgICAgICAgICgweEZGRkZGNjM4KSAvLyAoUElPQikgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09TUiAgICAgICAgICAgICgweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICAgICAgICAgICAoMHhGRkZGRjY1OCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZFUiAgICAgICAgICAgKDB4RkZGRkY2MjApIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0JTUiAgICAgICAgICAgICgweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAgICAgICAgICAgKDB4RkZGRkY2NTQpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRVIgICAgICAgICAgICAoMHhGRkZGRjYxMCkgLy8gKFBJT0IpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUEVSICAgICAgICAgICAgKDB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgKDB4RkZGRkZDMjApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgKDB4RkZGRkZDMkMpIC8vIChDS0dSKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgKDB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgICAgICAgICAgICgweEZGRkZGQzY0KSAvLyAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PUiAgICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKFBNQykgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgICAgICAgICAgICgweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAgICAgICAgICAgKDB4RkZGRkZDMTApIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENLUiAgICAgICAgICAgICgweEZGRkZGQzQwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAgICAgICAgICAgKDB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICAgICAgICAgICAoMHhGRkZGRkMwNCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAgICAgICAgICAgKDB4RkZGRkZDMTQpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICAgICAgICAgICAoMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICAgICAgICAgICAoMHhGRkZGRkMxOCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0ZSICAgICAgICAgICAgKDB4RkZGRkZDMjQpIC8vIChQTUMpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICAgICAgICAgICAoMHhGRkZGRkM2QykgLy8gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JRVIgICAgICAgICAgICAgKDB4RkZGRkZDNjApIC8vIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAgICAgICAgICAgKDB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19STVIgICAgICAgICAgICAoMHhGRkZGRkQwOCkgLy8gKFJTVEMpIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUlNSICAgICAgICAgICAgKDB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAoMHhGRkZGRkQyQykgLy8gKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgKDB4RkZGRkZEMjApIC8vIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAoMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAoMHhGRkZGRkQyNCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVlIgICAgICAgICAgICgweEZGRkZGRDM4KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgICAgICAgICAgICgweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICAgICAgICAgICAoMHhGRkZGRkQzQykgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICAgICAgICAgICAoMHhGRkZGRkQzMCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAgICAgICAgICAgKDB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgICAgICAgICAgICgweEZGRkZGRDQ4KSAvLyAoV0RUQykgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dETVIgICAgICAgICAgICgweEZGRkZGRDQ0KSAvLyAoV0RUQykgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICgweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICAgICAgICAgICAoMHhGRkZGRkYwNCkgLy8gKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX1JDUiAgICAgICAgICAgICAgKDB4RkZGRkZGMDApIC8vIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNSICAgICAgICAgICAgICAoMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgICAgICAgICAgICgweEZGRkZGRjA4KSAvLyAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GU1IgICAgICAgICAgICAgICgweEZGRkZGRjY4KSAvLyAoTUMpIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1SICAgICAgICAgICAgICAoMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgICAgICAgICAgICgweEZGRkU0MTIwKSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JQUiAgICAgICAgICAgICgweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UTkNSICAgICAgICAgICAoMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAgICAgICAgICAgKDB4RkZGRTQxMDgpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UTlBSICAgICAgICAgICAoMHhGRkZFNDExOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVENSICAgICAgICAgICAgKDB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICAgICAgICAgICAoMHhGRkZFNDEwNCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUk5QUiAgICAgICAgICAgKDB4RkZGRTQxMTApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUk5DUiAgICAgICAgICAgKDB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAgICAgICAgICAgKDB4RkZGRTQxMjQpIC8vIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICgweEZGRkU0MDFDKSAvLyAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgKDB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICgweEZGRkU0MDA0KSAvLyAoU1BJMSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAoMHhGRkZFNDAwOCkgLy8gKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAoMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICgweEZGRkU0MDEwKSAvLyAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICgweEZGRkU0MDBDKSAvLyAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAoMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgKDB4RkZGRTQwMzApIC8vIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9QVENSICAgICAgICAgICAoMHhGRkZFMDEyMCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UUFIgICAgICAgICAgICAoMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgICAgICAgICAgICgweEZGRkUwMTBDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUkNSICAgICAgICAgICAgKDB4RkZGRTAxMDQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUU1IgICAgICAgICAgICgweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAgICAgICAgICAgKDB4RkZGRTAxMTApIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUlBSICAgICAgICAgICAgKDB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROQ1IgICAgICAgICAgICgweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICAgICAgICAgICAoMHhGRkZFMDExNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UTlBSICAgICAgICAgICAoMHhGRkZFMDExOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRVIgICAgICAgICAgICAoMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAgICAgICAgICAgKDB4RkZGRTAwMTApIC8vIChTUEkwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfSURSICAgICAgICAgICAgKDB4RkZGRTAwMTgpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DUiAgICAgICAgICAgICAoMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAgICAgICAgICAgKDB4RkZGRTAwMDQpIC8vIChTUEkwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lNUiAgICAgICAgICAgICgweEZGRkUwMDFDKSAvLyAoU1BJMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVERSICAgICAgICAgICAgKDB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgICAgICAgICAgICgweEZGRkUwMDA4KSAvLyAoU1BJMCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NTUiAgICAgICAgICAgICgweEZGRkUwMDMwKSAvLyAoU1BJMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAoMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICgweEZGRkM0MTIwKSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgKDB4RkZGQzQxMEMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICgweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAoMHhGRkZDNDExOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAoMHhGRkZDNDEwNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAoMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICgweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICgweEZGRkM0MTFDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICgweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAgICAgICAgICAgKDB4RkZGQzQwNEMpIC8vIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTkVSICAgICAgICAgICAgICgweEZGRkM0MDQ0KSAvLyAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAgICAgICAgICAgKDB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgICAgICAgICAgICgweEZGRkM0MDE0KSAvLyAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICAgICAgICAgICAoMHhGRkZDNDAwQykgLy8gKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAgICAgICAgICAgKDB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAgICAgICAgICAgKDB4RkZGQzQwMUMpIC8vIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UVEdSICAgICAgICAgICAgKDB4RkZGQzQwMjgpIC8vIChVUzEpIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SSFIgICAgICAgICAgICAgKDB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAgICAgICAgICAgKDB4RkZGQzQwMjApIC8vIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JTVIgICAgICAgICAgICAgKDB4RkZGQzQwMTApIC8vIChVUzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfRklESSAgICAgICAgICAgICgweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICAgICAgICAgICAoMHhGRkZDNDAwMCkgLy8gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX01SICAgICAgICAgICAgICAoMHhGRkZDNDAwNCkgLy8gKFVTMSkgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgICAgICAgICAgICgweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgICAgICAgICAgICgweEZGRkMwMTEwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UQ1IgICAgICAgICAgICAgKDB4RkZGQzAxMEMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRDUiAgICAgICAgICAgICgweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAgICAgICAgICAgKDB4RkZGQzAxMjQpIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVE5DUiAgICAgICAgICAgICgweEZGRkMwMTFDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFBSICAgICAgICAgICAgICgweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICAgICAgICAgICAoMHhGRkZDMDEwNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JQUiAgICAgICAgICAgICAoMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICAgICAgICAgICAoMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAoMHhGRkZDMDAyMCkgLy8gKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAoMHhGRkZDMDA0NCkgLy8gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICgweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICgweEZGRkMwMDEwKSAvLyAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAoMHhGRkZDMDA0MCkgLy8gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgKDB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgKDB4RkZGQzAwMDQpIC8vIChVUzApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgKDB4RkZGQzAwMjQpIC8vIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICgweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAoMHhGRkZDMDAxOCkgLy8gKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAoMHhGRkZDMDAwQykgLy8gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgKDB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgKDB4RkZGQzAwNEMpIC8vIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICgweEZGRkMwMDA4KSAvLyAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19UTkNSICAgICAgICAgICAgKDB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAgICAgICAgICAgKDB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STkNSICAgICAgICAgICAgKDB4RkZGRDQxMTQpIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgICAoMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAgICAgICAgICAgKDB4RkZGRDQxMjApIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDUiAgICAgICAgICAgICAoMHhGRkZENDEwQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ1IgICAgICAgICAgICAgKDB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAgICAgICAgICAgKDB4RkZGRDQxMTApIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROUFIgICAgICAgICAgICAoMHhGRkZENDExOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICAgICAgICAgICAoMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgICAgICAgICAgICgweEZGRkQ0MDIwKSAvLyAoU1NDKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SU0hSICAgICAgICAgICAgKDB4RkZGRDQwMzApIC8vIChTU0MpIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEZNUiAgICAgICAgICAgICgweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgICAgICAgICAgICgweEZGRkQ0MDQ4KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RIUiAgICAgICAgICAgICAoMHhGRkZENDAyNCkgLy8gKFNTQykgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDTVIgICAgICAgICAgICAoMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAgICAgICAgICAgKDB4RkZGRDQwNDQpIC8vIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UU0hSICAgICAgICAgICAgKDB4RkZGRDQwMzQpIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NSICAgICAgICAgICAgICAoMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgICAgICAgICAgICgweEZGRkQ0MDA0KSAvLyAoU1NDKSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgICAgICAgICAgICgweEZGRkQ0MDE4KSAvLyAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ1IgICAgICAgICAgICAgICgweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgICAgICAgICAgICgweEZGRkQ0MDRDKSAvLyAoU1NDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JGTVIgICAgICAgICAgICAoMHhGRkZENDAxNCkgLy8gKFNTQykgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAoMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAoMHhGRkZCODAwMCkgLy8gKFRXSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAoMHhGRkZCODAyMCkgLy8gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICgweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAoMHhGRkZCODAzNCkgLy8gKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAoMHhGRkZCODAyOCkgLy8gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgKDB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgKDB4RkZGQjgwMDQpIC8vIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICgweEZGRkI4MDEwKSAvLyAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgKDB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgICAgICAoMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgICAoMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgICAgICAoMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgICAgICAoMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICAgICAgKDB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgICAgICAgICgweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfUmVzZXJ2ZWQgICAoMHhGRkZDQzI1NCkgLy8gKFBXTUNfQ0gyKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ01SICAgICAgICAoMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NDTlRSICAgICAgKDB4RkZGQ0MyNEMpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DUFJEUiAgICAgICgweEZGRkNDMjQ4KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DVVBEUiAgICAgICgweEZGRkNDMjUwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DRFRZUiAgICAgICgweEZGRkNDMjQ0KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAoMHhGRkZDQzIzNCkgLy8gKFBXTUNfQ0gxKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAoMHhGRkZDQzIzMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAoMHhGRkZDQzIyOCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAoMHhGRkZDQzIyQykgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgKDB4RkZGQ0MyMjQpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICgweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgICAoMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgICAgICAoMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgICAgICAoMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAgICAgICAgKDB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DVVBEUiAgICAgICgweEZGRkNDMjEwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DQ05UUiAgICAgICgweEZGRkNDMjBDKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0lEUiAgICAgICAgICAgICgweEZGRkNDMDE0KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgICAoMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICAgICAgICAgICAoMHhGRkZDQzAxMCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICAgICAgICAgICAoMHhGRkZDQzBGQykgLy8gKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgICAoMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICAgICAgICAgICAoMHhGRkZDQzAwQykgLy8gKFBXTUMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lNUiAgICAgICAgICAgICgweEZGRkNDMDE4KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgICAoMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICAgICAgICAgICAoMHhGRkZDQzAwNCkgLy8gKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVRFAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAoMHhGRkZCMDAxOCkgLy8gKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgKDB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgKDB4RkZGQjAwMDApIC8vIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAoMHhGRkZCMDA1MCkgLy8gKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICgweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICgweEZGRkIwMDMwKSAvLyAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgKDB4RkZGQjAwMTQpIC8vIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICgweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgKDB4RkZGQjAwMjgpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICgweEZGRkIwMDc0KSAvLyAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICgweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgKDB4RkZGQjAwMTApIC8vIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgICAgICAgICAgICgweEZGRkEwMDIwKSAvLyAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAgICAgICAgICAgKDB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwMTgpIC8vIChUQzApIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDAyNCkgLy8gKFRDMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JBICAgICAgICAgICAgICAoMHhGRkZBMDAxNCkgLy8gKFRDMCkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAgICAgICAgICAgKDB4RkZGQTAwMTApIC8vIChUQzApIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMF9JTVIgICAgICAgICAgICAgKDB4RkZGQTAwMkMpIC8vIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JCICAgICAgICAgICAgICAoMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICAgICAgICAgICAoMHhGRkZBMDA0MCkgLy8gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSUVSICAgICAgICAgICAgICgweEZGRkEwMDY0KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSURSICAgICAgICAgICAgICgweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICAgICAgICAgICAoMHhGRkZBMDA2MCkgLy8gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ01SICAgICAgICAgICAgICgweEZGRkEwMDQ0KSAvLyAoVEMxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzFfUkEgICAgICAgICAgICAgICgweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgICAgICAgICAgICgweEZGRkEwMDVDKSAvLyAoVEMxKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzFfSU1SICAgICAgICAgICAgICgweEZGRkEwMDZDKSAvLyAoVEMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NWICAgICAgICAgICAgICAoMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwODQpIC8vIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwODApIC8vIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAoMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAoMHhGRkZBMDA5NCkgLy8gKFRDMikgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAoMHhGRkZBMDA5OCkgLy8gKFRDMikgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgKDB4RkZGQTAwQUMpIC8vIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICgweEZGRkEwMDlDKSAvLyAoVEMyKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICgweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICgweEZGRkEwMEEwKSAvLyAoVEMyKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQ0JfQk1SICAgICAgICAgICAgICgweEZGRkEwMEM0KSAvLyAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQ0JfQkNSICAgICAgICAgICAgICgweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICAgICAgICAgKDB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAgICAgICAgICgweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICAgICAgICAgKDB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICAgICAgICAgKDB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAgICAgICAgICgweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAgICAgICAgKDB4RkZGRDAyMEMpIC8vIChDQU5fTUIwKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NREggICAgICAgICAoMHhGRkZEMDIxOCkgLy8gKENBTl9NQjApIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01NUiAgICAgICAgICgweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgKDB4RkZGRDAyMzQpIC8vIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICgweEZGRkQwMjI4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAoMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAoMHhGRkZEMDIzMCkgLy8gKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICgweEZGRkQwMjI0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgKDB4RkZGRDAyMzgpIC8vIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAoMHhGRkZEMDIzQykgLy8gKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAoMHhGRkZEMDIyQykgLy8gKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUNSICAgICAgICAgKDB4RkZGRDAyNUMpIC8vIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURIICAgICAgICAgKDB4RkZGRDAyNTgpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NSUQgICAgICAgICAoMHhGRkZEMDI0OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURMICAgICAgICAgKDB4RkZGRDAyNTQpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01NUiAgICAgICAgICgweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01BTSAgICAgICAgICgweEZGRkQwMjQ0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUZJRCAgICAgICAgKDB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgICAgICAgICAoMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAgICAgICAgKDB4RkZGRDAyNkMpIC8vIChDQU5fTUIzKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NQU0gICAgICAgICAoMHhGRkZEMDI2NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01JRCAgICAgICAgICgweEZGRkQwMjY4KSAvLyAoQ0FOX01CMykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NQ1IgICAgICAgICAoMHhGRkZEMDI3QykgLy8gKENBTl9NQjMpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NTVIgICAgICAgICAoMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NU1IgICAgICAgICAoMHhGRkZEMDI3MCkgLy8gKENBTl9NQjMpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ETCAgICAgICAgICgweEZGRkQwMjc0KSAvLyAoQ0FOX01CMykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREggICAgICAgICAoMHhGRkZEMDI3OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI0IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgKDB4RkZGRDAyODgpIC8vIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICgweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICgweEZGRkQwMjk4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgKDB4RkZGRDAyOEMpIC8vIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAoMHhGRkZEMDI5MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICgweEZGRkQwMjlDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICgweEZGRkQwMjk0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAoMHhGRkZEMDI4NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTVNSICAgICAgICAgKDB4RkZGRDAyQjApIC8vIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQ1IgICAgICAgICAoMHhGRkZEMDJCQykgLy8gKENBTl9NQjUpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NRklEICAgICAgICAoMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAgICAgICAgICgweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICAgICAgICAgKDB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAgICAgICAgICgweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAgICAgICAgICgweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gICAgICAgICAoMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAgICAgICAgKDB4RkZGRDAyQ0MpIC8vIChDQU5fTUI2KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NSUQgICAgICAgICAoMHhGRkZEMDJDOCkgLy8gKENBTl9NQjYpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUFNICAgICAgICAgKDB4RkZGRDAyQzQpIC8vIChDQU5fTUI2KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NU1IgICAgICAgICAoMHhGRkZEMDJEMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ETCAgICAgICAgICgweEZGRkQwMkQ0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQ1IgICAgICAgICAoMHhGRkZEMDJEQykgLy8gKENBTl9NQjYpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREggICAgICAgICAoMHhGRkZEMDJEOCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01NUiAgICAgICAgICgweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI3IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgKDB4RkZGRDAyRkMpIC8vIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgKDB4RkZGRDAyRjgpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAoMHhGRkZEMDJFQykgLy8gKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICgweEZGRkQwMkY0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAoMHhGRkZEMDJFOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgKDB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgKDB4RkZGRDAyRTQpIC8vIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAoMHhGRkZEMDJGMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RDUiAgICAgICAgICAgICAoMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICAgICAgICAgICAoMHhGRkZEMDAwQykgLy8gKENBTikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JRVIgICAgICAgICAgICAgKDB4RkZGRDAwMDQpIC8vIChDQU4pIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9FQ1IgICAgICAgICAgICAgKDB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICAgICAgICAgKDB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAgICAgICAgICAgKDB4RkZGRDAwMDApIC8vIChDQU4pIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JRFIgICAgICAgICAgICAgKDB4RkZGRDAwMDgpIC8vIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQUNSICAgICAgICAgICAgICgweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgICAgICAgICAgICgweEZGRkQwMDE4KSAvLyAoQ0FOKSBUaW1lciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NSICAgICAgICAgICAgICAoMHhGRkZEMDAxMCkgLy8gKENBTikgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQlIgICAgICAgICAgICAgICgweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICAgICAgICAgICAoMHhGRkZEMDBGQykgLy8gKENBTikgVmVyc2lvbiBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgRU1BQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lTUiAgICAgICAgICAgICgweEZGRkRDMDI0KSAvLyAoRU1BQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRIICAgICAgICAgICAoMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICAgICAgICAgICAoMHhGRkZEQzA5OCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfRUxFICAgICAgICAgICAgKDB4RkZGREMwNzgpIC8vIChFTUFDKSBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQ09MICAgICAgICAgICAoMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgICAgICAgICAgICgweEZGRkRDMDg4KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfV09MICAgICAgICAgICAgKDB4RkZGREMwQzQpIC8vIChFTUFDKSBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EVEYgICAgICAgICAgICAoMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICAgICAgICAgICAoMHhGRkZEQzA2NCkgLy8gKEVNQUMpIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05DUiAgICAgICAgICAgICgweEZGRkRDMDAwKSAvLyAoRU1BQykgTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEwgICAgICAgICAgICgweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICAgICAgICAgICAoMHhGRkZEQzAyMCkgLy8gKEVNQUMpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0wgICAgICAgICAgICgweEZGRkRDMEE4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1IgICAgICAgICAgICAoMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICAgICAgICAgICAoMHhGRkZEQzAyQykgLy8gKEVNQUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JTRSAgICAgICAgICAgICgweEZGRkRDMDc0KSAvLyAoRU1BQykgUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0VDT0wgICAgICAgICAgICgweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICAgICAgICAgICAoMHhGRkZEQzBCOCkgLy8gKEVNQUMpIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJCICAgICAgICAgICAgKDB4RkZGREMwOTApIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorI2RlZmluZSBBVDkxQ19FTUFDX1RCUVAgICAgICAgICAgICgweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gICAgICAgICAgKDB4RkZGREMwQzApIC8vIChFTUFDKSBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFIgICAgICAgICAgICAoMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAgICAgICAgICAgKDB4RkZGREMwQTQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUk9WICAgICAgICAgICAgKDB4RkZGREMwNzApIC8vIChFTUFDKSBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0FMRSAgICAgICAgICAgICgweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgICAgICAgICAgICgweEZGRkRDMDdDKSAvLyAoRU1BQykgUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCUVAgICAgICAgICAgICgweEZGRkRDMDE4KSAvLyAoRU1BQykgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUEYgICAgICAgICAgICAoMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAgICAgICAgICAoMHhGRkZEQzAwNCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUlQgICAgICAgICAgICAoMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgICAgICAgICAgICgweEZGRkRDMDgwKSAvLyAoRU1BQykgVW5kZXJzaXplIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GQ1NFICAgICAgICAgICAoMHhGRkZEQzA1MCkgLy8gKEVNQUMpIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQUSAgICAgICAgICAgICgweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICAgICAgICAgICAoMHhGRkZEQzAzNCkgLy8gKEVNQUMpIFBIWSBNYWludGVuYW5jZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GVE8gICAgICAgICAgICAoMHhGRkZEQzA0MCkgLy8gKEVNQUMpIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVYgICAgICAgICAgICAoMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgICAgICAgICAgICgweEZGRkRDMDMwKSAvLyAoRU1BQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0NGICAgICAgICAgICAgKDB4RkZGREMwNDQpIC8vIChFTUFDKSBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUiAgICAgICAgICAgICgweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgICAgICAgICAgICgweEZGRkRDMDQ4KSAvLyAoRU1BQykgTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05TUiAgICAgICAgICAgICgweEZGRkRDMDA4KSAvLyAoRU1BQykgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EyTCAgICAgICAgICAgKDB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgICAgICAgICAgICgweEZGRkRDMDRDKSAvLyAoRU1BQykgRnJhbWVzIFJlY2VpdmVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lFUiAgICAgICAgICAgICgweEZGRkRDMDI4KSAvLyAoRU1BQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFIICAgICAgICAgICAoMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICAgICAgICAgICAoMHhGRkZEQzA2OCkgLy8gKEVNQUMpIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EzSCAgICAgICAgICAgKDB4RkZGREMwQUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlJFICAgICAgICAgICAgKDB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICAgICAgICAgICAoMHhGRkZEQzA4NCkgLy8gKEVNQUMpIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgKDB4RkZGRDgxMjQpIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICgweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgKDB4RkZGRDgxMTgpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgKDB4RkZGRDgxMUMpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgKDB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAoMHhGRkZEODExNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICgweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAoMHhGRkZEODEwOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgKDB4RkZGRDgxMDQpIC8vIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgICAgICAgICAgICgweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAgICAgICAgICAgKDB4RkZGRDgwM0MpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICAgICAgICAgICAoMHhGRkZEODAzMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgICAgICAgICAgICgweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAgICAgICAgICAgKDB4RkZGRDgwMTQpIC8vIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19TUiAgICAgICAgICAgICAgKDB4RkZGRDgwMUMpIC8vIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI0ICAgICAgICAgICAgKDB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICAgICAgICAgICAoMHhGRkZEODAzNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorI2RlZmluZSBBVDkxQ19BRENfTENEUiAgICAgICAgICAgICgweEZGRkQ4MDIwKSAvLyAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lEUiAgICAgICAgICAgICAoMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjcgICAgICAgICAgICAoMHhGRkZEODA0QykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgICAgICAgICAgICgweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAgICAgICAgICAgKDB4RkZGRDgwMjQpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hFUiAgICAgICAgICAgICgweEZGRkQ4MDEwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAgICAgICAgICAgKDB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICAgICAgICAgICAoMHhGRkZEODAwNCkgLy8gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JTVIgICAgICAgICAgICAgKDB4RkZGRDgwMkMpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRVNfVFBSICAgICAgICAgICAgICgweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICAgICAgICAgICAoMHhGRkZBNDEyMCkgLy8gKFBEQ19BRVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUk5QUiAgICAgICAgICAgICgweEZGRkE0MTEwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTkNSICAgICAgICAgICAgKDB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAgICAgICAgICAgKDB4RkZGQTQxMEMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUkNSICAgICAgICAgICAgICgweEZGRkE0MTA0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUk5DUiAgICAgICAgICAgICgweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAgICAgICAgICAgKDB4RkZGQTQxMTgpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19SUFIgICAgICAgICAgICAgKDB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVFNSICAgICAgICAgICAgKDB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAoMHhGRkZBNDA2MCkgLy8gKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgKDB4RkZGQTQwMDQpIC8vIChBRVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgKDB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICgweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICgweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgKDB4RkZGQTQwMDApIC8vIChBRVMpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgKDB4RkZGQTQwMTQpIC8vIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICgweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAoMHhGRkZBNDAxMCkgLy8gKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAoMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAoMHhGRkZBNDAxQykgLy8gKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVERFU19STkNSICAgICAgICAgICAoMHhGRkZBODExNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UQ1IgICAgICAgICAgICAoMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgICAgICAgICAgICgweEZGRkE4MTA0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTlBSICAgICAgICAgICAoMHhGRkZBODExOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUk5QUiAgICAgICAgICAgKDB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAgICAgICAgICAgKDB4RkZGQTgxMDApIC8vIChQRENfVERFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ROQ1IgICAgICAgICAgICgweEZGRkE4MTFDKSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UUFIgICAgICAgICAgICAoMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgICAgICAgICAgICgweEZGRkE4MTI0KSAvLyAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUFRDUiAgICAgICAgICAgKDB4RkZGQTgxMjApIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkyV3hSICAgICAgICAoMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICAgICAgICAoMHhGRkZBODAzMCkgLy8gKFRERVMpIEtleSAzIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JRFIgICAgICAgICAgICAoMHhGRkZBODAxNCkgLy8gKFRERVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ZSICAgICAgICAgICAgICgweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgICAgICAgICAgICgweEZGRkE4MDYwKSAvLyAoVERFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfT0RBVEF4UiAgICAgICAgKDB4RkZGQTgwNTApIC8vIChUREVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lNUiAgICAgICAgICAgICgweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAgICAgICAgICAgKDB4RkZGQTgwMDQpIC8vIChUREVTKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0NSICAgICAgICAgICAgICgweEZGRkE4MDAwKSAvLyAoVERFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JRVIgICAgICAgICAgICAoMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAgICAgICAgICAgKDB4RkZGQTgwMUMpIC8vIChUREVTKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lEQVRBeFIgICAgICAgICgweEZGRkE4MDQwKSAvLyAoVERFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTFXeFIgICAgICAgICgweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMCkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAgICAgICgxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfVFdEICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEwKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICgxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICAgICAgIChBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTINCisjZGVmaW5lIEFUOTFDX1BBMTJfTlBDUzAwICAgICAgICAgKEFUOTFDX1BJT19QQTEyKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorI2RlZmluZSBBVDkxQ19QQTEzX05QQ1MwMSAgICAgICAgIChBVDkxQ19QSU9fUEExMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICgxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BBMTVfVENMSzIgICAgICAgICAgKEFUOTFDX1BJT19QQTE1KSAvLyAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorI2RlZmluZSBBVDkxQ19QQTE2X01JU08wICAgICAgICAgIChBVDkxQ19QSU9fUEExNikgLy8gIFNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAgICAgICgxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE4DQorI2RlZmluZSBBVDkxQ19QQTE4X1NQQ0swICAgICAgICAgIChBVDkxQ19QSU9fUEExOCkgLy8gIFNQSSAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KKyNkZWZpbmUgQVQ5MUNfUEExOV9DQU5SWCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTkpIC8vICBDQU4gUmVjZWl2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgICAgICAgKEFUOTFDX1BJT19QQTIwKSAvLyAgQ0FOIFRyYW5zbWl0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAgICAgICgxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMg0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKEFUOTFDX1BJT19QQTIyKSAvLyAgU1BJIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNTQyBUcmFuc21pdCBkYXRhDQorI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNiAgICAgICAgICAgICgxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNikgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjgNCisjZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTI4KSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICgxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoQVQ5MUNfUElPX1BBMjkpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICAgICAgKDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9QQ0syICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAgICAgICgxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICAgICAgKDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KKyNkZWZpbmUgQVQ5MUNfUEE1X1JYRDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNw0KKyNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgICAgICAgIChBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTkgICAgICAgICAgICAgKDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIwDQorI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgIChBVDkxQ19QSU9fUEIwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BCMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjEgICAgICAgICAgICAgKDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoQVQ5MUNfUElPX1BCMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCisjZGVmaW5lIEFUOTFDX1BCMTBfRVRYMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjEwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoQVQ5MUNfUElPX1BCMTApIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCisjZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWlrdCBDb2RpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BCMTJfVENMSzAgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorI2RlZmluZSBBVDkxQ19QQjEzX0VSWDIgICAgICAgICAgIChBVDkxQ19QSU9fUEIxMykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoQVQ5MUNfUElPX1BCMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KKyNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoQVQ5MUNfUElPX1BCMTUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgIChBVDkxQ19QSU9fUEIxNikgLy8gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BCMTZfTlBDUzEzICAgICAgICAgKEFUOTFDX1BJT19QQjE2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICgxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTkpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQjE5X1RDTEsxICAgICAgICAgIChBVDkxQ19QSU9fUEIxOSkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICAgICAgKDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjENCisjZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIxKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIyDQorI2RlZmluZSBBVDkxQ19QQjIyX1BXTTMgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMikgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIyKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCisjZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgICAgICAoMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9USU9BMSAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgICAgICAoMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNw0KKyNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAgICAgICgxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI4DQorI2RlZmluZSBBVDkxQ19QQjI4X1RJT0IyICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAgICAgICgxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMNCisjZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAgICAgICgxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorI2RlZmluZSBBVDkxQ19QQjMwX1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEIzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjMwKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgICAgIChBVDkxQ19QSU9fUEI0KSAvLyAgRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UvQ2FycmllciBTZW5zZSBhbmQgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEI1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjYNCisjZGVmaW5lIEFUOTFDX1BCNl9FUlgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjYpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KKyNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICAgICAgICAoQVQ5MUNfUElPX1BCNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEI4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjgNCisjZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKEFUOTFDX1BJT19QQjgpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAgICAgICgxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjkNCisjZGVmaW5lIEFUOTFDX1BCOV9FTURJTyAgICAgICAgICAgKEFUOTFDX1BJT19QQjkpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgICAoIDApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAgICggMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICAgKCAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAgICAgICAgICAgKCAzKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCisjZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICAgKCA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgICAoIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAgICggNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgICAoIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICAgKCA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgICAoIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgICAoMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAgICgxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAgICgxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAgICgxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAgICgxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgICAgICAgICAgICgxNSkgLy8gQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgICAoMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgICAoMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICAgICAgICAgICAoMTgpIC8vIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdA0KKyNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgICAoMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICAgKDIwKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgICAoMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAgICgyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICAgKDIzKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgICAoMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAgICgyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICAgKDI2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgICAoMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAgICgyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICAgKDI5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICAgICAgICAgICAoMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgICAoMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAgICAgICgweEZGRkZGMDAwKSAvLyAoU1lTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChBSUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgICAgICAoMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICAgICAgKDB4RkZGRkYyMDApIC8vIChEQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICAgICAgKDB4RkZGRkY0MDApIC8vIChQSU9BKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICAgICAgKDB4RkZGRkY2MDApIC8vIChQSU9CKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICAgICAgKDB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICAgICAgKDB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgICAgICAoMHhGRkZGRkQwMCkgLy8gKFJTVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgICAgICAoMHhGRkZGRkQyMCkgLy8gKFJUVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgICAgICAoMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgICAgICAoMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgICAgICAoMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgICAgICAoMHhGRkZGRkYwMCkgLy8gKE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICAgICAgKDB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAgICAgICgweEZGRkU0MDAwKSAvLyAoU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAgICAgICgweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgICAgICAoMHhGRkZFMDAwMCkgLy8gKFNQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAgICAoMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICAgICgweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICAgICgweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgICAgKDB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgICAgKDB4RkZGRDQwMDApIC8vIChTU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgICAgICAoMHhGRkZCODAwMCkgLy8gKFRXSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICAgICgweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAgICAoMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgICAgKDB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICAgICgweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAgICAoMHhGRkZDQzAwMCkgLy8gKFBXTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAgICAoMHhGRkZCMDAwMCkgLy8gKFVEUCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAgICAgICgweEZGRkEwMDAwKSAvLyAoVEMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICAgICAgKDB4RkZGQTAwNDApIC8vIChUQzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAgICAoMHhGRkZBMDA4MCkgLy8gKFRDMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAgICAgICgweEZGRkEwMDAwKSAvLyAoVENCKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICAgICAgKDB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICAgICAgKDB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICAgICAgKDB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICAgICAgKDB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICAgICAgKDB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICAgICAgKDB4RkZGRDAyQTApIC8vIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICAgICAgKDB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICAgICAgKDB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICAgICAgKDB4RkZGRDAwMDApIC8vIChDQU4pIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgICAgICAoMHhGRkZEQzAwMCkgLy8gKEVNQUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgICAgICAoMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgICAgICAoMHhGRkZEODAwMCkgLy8gKEFEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAgICAgICgweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAgICAgICgweEZGRkE0MDAwKSAvLyAoQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICAgICAgKDB4RkZGQTgxMDApIC8vIChQRENfVERFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAgICAgICgweEZGRkE4MDAwKSAvLyAoVERFUykgQmFzZSBBZGRyZXNzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSVNSQU0JICAgICAgICAgICAgICAoMHgwMDIwMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUJICAgICAgICAgKDB4MDAwMDgwMDApIC8vIEludGVybmFsIFNSQU0gc2l6ZSBpbiBieXRlICgzMiBLYnl0ZSkNCisjZGVmaW5lIEFUOTFDX0lGTEFTSAkgICAgICAgICAgICAgKDB4MDAxMDAwMDApIC8vIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFCSAgICAgICAgKDB4MDAwMjAwMDApIC8vIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDEyOCBLYnl0ZSkNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTYuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzNmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTYuaApAQCAtMCwwICsxLDI3MTUgQEAKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorI2lmbmRlZiBBVDkxU0FNN1gyNTZfSA0KKyNkZWZpbmUgQVQ5MVNBTTdYMjU2X0gNCisNCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsvLyBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TWVMgew0KKwlBVDkxX1JFRwkgQUlDX1NNUlszMl07IAkvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NWUlszMl07IAkvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVZSOyAJLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZWUjsgCS8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVBSOyAJLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0NJU1I7IAkvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0lFQ1I7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JRENSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lDQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTQ1I7IAkvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19FT0lDUjsgCS8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NQVTsgCS8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0RDUjsgCS8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19GRkVSOyAJLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGRFI7IAkvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGU1I7IAkvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ1WzU0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPQV9PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDdbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDhbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BQVVNSOyAJLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTFbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEyWzg1XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0JfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTVbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE4WzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOVszNDFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfU0NFUjsgCS8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ0RSOyAJLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ1NSOyAJLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DS1I7IAkvLyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI0WzRdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNVszNl07IAkvLyANCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNls1XTsgCS8vIA0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJTVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVNSOyAJLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSVZSOyAJLy8gUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJSVI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RDUjsgCS8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RNUjsgCS8vIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFdEVENfV0RTUjsgCS8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyN1s1XTsgCS8vIA0KKwlBVDkxX1JFRwkgVlJFR19NUjsgCS8vIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1NZUywgKkFUOTFQU19TWVM7DQorDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FJQyB7DQorCUFUOTFfUkVHCSBBSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JVlI7IAkvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JUFI7IAkvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfSUVDUjsgCS8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNDUjsgCS8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRENSOyAJLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZTUjsgCS8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FJQywgKkFUOTFQU19BSUM7DQorDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDIHsNCisJQVQ5MV9SRUcJIFBEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BEQywgKkFUOTFQU19QREM7DQorDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1Ugew0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0RCR1UsICpBVDkxUFNfREJHVTsNCisNCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOSkgLy8gKERCR1UpIEV2ZW4gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBPZGQgUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA5KSAvLyAoREJHVSkgTm8gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDkpIC8vIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8gew0KKwlBVDkxX1JFRwkgUElPX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT19PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQorDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUiB7DQorCUFUOTFfUkVHCSBDS0dSX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0tHUl9NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIENLR1JfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KK30gQVQ5MVNfQ0tHUiwgKkFUOTFQU19DS0dSOw0KKw0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKENLR1IgT2Zmc2V0OiAweDApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZQ0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kNCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTlJEWSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChDS0dSKSBEaXZpZGVyIGlzIGJ5cGFzc2VkDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTENPVU5UICAgKCh1bnNpZ25lZCBpbnQpIDB4M0YgPDwgIDgpIC8vIChDS0dSKSBQTEwgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PVVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTYpIC8vIChDS0dSKSBQTEwgTXVsdGlwbGllcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8xICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDINCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUE1DIHsNCisJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDRFI7IAkvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzRdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfUE1DLCAqQVQ5MVBTX1BNQzsNCisNCisvLyAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisvLyAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlNUQyB7DQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1JTVEMsICpBVDkxUFNfUlNUQzsNCisNCisvLyAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QUk9DUlNUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19LRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoUlNUQykgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfUlNUVFlQICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoUlNUQykgUmVzZXQgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1BPV0VSVVAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFJTVEMpIFdha2VVcCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FUQ0hET0cgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX0JST1dOT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChSU1RDKSBCcm93bm91dCBSZXNldCBvY2N1cmVkLg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19OUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBOUlNUIHBpbiBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KKy8vIC0tLS0tLS0tIFJTVENfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVhbCBUaW1lIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlRUQyB7DQorCUFUOTFfUkVHCSBSVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVEFSOyAJLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1JUVEMsICpBVDkxUFNfUlRUQzsNCisNCisvLyAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1WICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBBbGFybSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQ1JUViAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQorDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCisNCisvLyAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFdEVEMpIFdhdGNoZG9nIEtFWSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFdEVENfV0RNUiA6IChXRFRDIE9mZnNldDogMHg0KSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RGSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChXRFRDKSBXYXRjaGRvZyBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSUFJPQyAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDE2KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQNCisvLyAtLS0tLS0tLSBXRFRDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBVbmRlcmZsb3cNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RFUlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19WUkVHIHsNCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19WUkVHLCAqQVQ5MVBTX1ZSRUc7DQorDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DIHsNCisJQVQ5MV9SRUcJIE1DX1JDUjsgCS8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FTUjsgCS8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQUFTUjsgCS8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMjFdOyAJLy8gDQorCUFUOTFfUkVHCSBNQ19GTVI7IAkvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GQ1I7IAkvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GU1I7IAkvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX01DLCAqQVQ5MVBTX01DOw0KKw0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJIHsNCisJQVQ5MV9SRUcJIFNQSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SRFI7IAkvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9URFI7IAkvLyBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfQ1NSWzRdOyAJLy8gQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0OF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NQSSwgKkFUOTFQU19TUEk7DQorDQorLy8gLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0DQorI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzDQorLy8gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNQSSkgRW5hYmxlIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVVNBUlQgew0KKwlBVDkxX1JFRwkgVVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SVE9SOyAJLy8gUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RUR1I7IAkvLyBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNV07IAkvLyANCisJQVQ5MV9SRUcJIFVTX0ZJREk7IAkvLyBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTkVSOyAJLy8gTmIgRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVTX0lGOyAJLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0NF07IAkvLyANCisJQVQ5MV9SRUcJIFVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVVNBUlQsICpBVDkxUFNfVVNBUlQ7DQorDQorLy8gLS0tLS0tLS0gVVNfQ1IgOiAoVVNBUlQgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVTQVJUKSBTdGFydCBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFVTQVJUKSBVc2FydCBtb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChVU0FSVCkgTm9ybWFsDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChVU0FSVCkgUlM0ODUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVVNBUlQpIE1vZGVtDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDANCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4KSAvLyAoVVNBUlQpIElyREENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfU1dIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXINCisvLyAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JYQlJLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkFDSyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RDRElDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EU1IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TU0Mgew0KKwlBVDkxX1JFRwkgU1NDX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0NNUjsgCS8vIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JDTVI7IAkvLyBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JGTVI7IAkvLyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ01SOyAJLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RGTVI7IAkvLyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUlNIUjsgCS8vIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVFNIUjsgCS8vIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1NDLCAqQVQ5MVBTX1NTQzsNCisNCisvLyAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX0RJViAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChTU0MpIERpdmlkZWQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChTU0MpIFRLIENsb2NrIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFNTQykgUksgcGluDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgOCkgLy8gKFNTQykgQ29tcGFyZSAwDQorI2RlZmluZSBBVDkxQ19TU0NfU1RURExZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8ICAwKSAvLyAoU1NDKSBEYXRhIExlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0xPT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0DQorI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgRGF0YSBOdW1iZXIgcGVyIEZyYW1lDQorI2RlZmluZSBBVDkxQ19TU0NfRlNMRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMjApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTm9uZSBSSyBwaW4gSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgTG93IGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfSElHSCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1NDKSBGcmFtZSBTeW5jIEVkZ2UgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1RDTVIgOiAoU1NDIE9mZnNldDogMHgxOCkgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfREFUREVGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFRyYW5zbWl0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNTQykgVHJhbnNtaXQgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTU0MpIEVuZCBvZiBSZWNlcHRpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChTU0MpIFJlY2VpdmUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFR3by13aXJlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RXSSB7DQorCUFUOTFfUkVHCSBUV0lfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfTU1SOyAJLy8gTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVFdJX0lBRFI7IAkvLyBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfQ1dHUjsgCS8vIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCit9IEFUOTFTX1RXSSwgKkFUOTFQU19UV0k7DQorDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0ggew0KKwlBVDkxX1JFRwkgUFdNQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0RUWVI7IAkvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1BSRFI7IAkvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DQ05UUjsgCS8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DVVBEUjsgCS8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1Jlc2VydmVkWzNdOyAJLy8gUmVzZXJ2ZWQNCit9IEFUOTFTX1BXTUNfQ0gsICpBVDkxUFNfUFdNQ19DSDsNCisNCisvLyAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4DQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhDKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQWxpZ25tZW50DQorI2RlZmluZSBBVDkxQ19QV01DX0NQT0wgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlDQorLy8gLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUFdNQyB7DQorCUFUOTFfUkVHCSBQV01DX01SOyAJLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0VOQTsgCS8vIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0RJUzsgCS8vIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19TUjsgCS8vIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lFUjsgCS8vIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JRFI7IAkvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lNUjsgCS8vIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSVNSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNTVdOyAJLy8gDQorCUFUOTFfUkVHCSBQV01DX1ZSOyAJLy8gUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNjRdOyAJLy8gDQorCUFUOTFTX1BXTUNfQ0gJIFBXTUNfQ0hbNF07IAkvLyBQV01DIENoYW5uZWwNCit9IEFUOTFTX1BXTUMsICpBVDkxUFNfUFdNQzsNCisNCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQQ0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoUFdNQykgDQorI2RlZmluZSBBVDkxQ19QV01DX0RJVkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEINCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUJfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFBXTUMpIA0KKy8vIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQV01DKSBDaGFubmVsIElEIDANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBXTUMpIENoYW5uZWwgSUQgMg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQV01DKSBDaGFubmVsIElEIDMNCisvLyAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lFUiA6IChQV01DIE9mZnNldDogMHgxMCkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSVNSIDogKFBXTUMgT2Zmc2V0OiAweDFjKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzZdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9GRFJbNl07IAkvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1RYVkM7IAkvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KKw0KKy8vIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVRFApIEZyYW1lIEVycm9yDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVEUCkgRnJhbWUgT0sNCisvLyAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIENvbmZpZ3VyZWQNCisjZGVmaW5lIEFUOTFDX1VEUF9FU1IgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBFbmFibGUgU2VuZCBSZXN1bWUNCisjZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDINCisjZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwDQorI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBEYXRhIFRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQRURTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorLy8gLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSANCisjZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBQdWxsLXVwIE9ODQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVEMgew0KKwlBVDkxX1JFRwkgVENfQ0NSOyAJLy8gQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRDX0NWOyAJLy8gQ291bnRlciBWYWx1ZQ0KKwlBVDkxX1JFRwkgVENfUkE7IAkvLyBSZWdpc3RlciBBDQorCUFUOTFfUkVHCSBUQ19SQjsgCS8vIFJlZ2lzdGVyIEINCisJQVQ5MV9SRUcJIFRDX1JDOyAJLy8gUmVnaXN0ZXIgQw0KKwlBVDkxX1JFRwkgVENfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfVEMsICpBVDkxUFNfVEM7DQorDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIENsb2NrIEludmVydA0KKyNkZWZpbmUgQVQ5MUNfVENfQlVSU1QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9USU9CICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjYpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBPdmVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfVENfTE9WUlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRDKSBSQiBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChUQykgVElPQSBNaXJyb3INCisjZGVmaW5lIEFUOTFDX1RDX01USU9CICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCIHsNCisJQVQ5MVNfVEMJIFRDQl9UQzA7IAkvLyBUQyBDaGFubmVsIDANCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMTsgCS8vIFRDIENoYW5uZWwgMQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMyOyAJLy8gVEMgQ2hhbm5lbCAyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNF07IAkvLyANCisJQVQ5MV9SRUcJIFRDQl9CQ1I7IAkvLyBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ0JfQk1SOyAJLy8gVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVENCLCAqQVQ5MVBTX1RDQjsNCisNCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUIgew0KKwlBVDkxX1JFRwkgQ0FOX01CX01NUjsgCS8vIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01BTTsgCS8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUlEOyAJLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01GSUQ7IAkvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01TUjsgCS8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURMOyAJLy8gTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ESDsgCS8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUNSOyAJLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19DQU5fTUIsICpBVDkxUFNfQ0FOX01COw0KKw0KKy8vIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjQpIC8vIChDQU5fTUIpIA0KKy8vIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLS0tLS0tLS0gQ0FOX01JRCA6IChDQU5fTUIgT2Zmc2V0OiAweDgpIENBTiBNZXNzYWdlIElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FU1RBTVAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCisjZGVmaW5lIEFUOTFDX0NBTl9NQUJUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtLS0tLS0tLSBDQU5fTURMIDogKENBTl9NQiBPZmZzZXQ6IDB4MTQpIENBTiBNZXNzYWdlIERhdGEgTG93IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQUNSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU4gew0KKwlBVDkxX1JFRwkgQ0FOX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9CUjsgCS8vIEJhdWRyYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNOyAJLy8gVGltZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9USU1FU1RQOyAJLy8gVGltZSBTdGFtcCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0VDUjsgCS8vIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9UQ1I7IAkvLyBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQUNSOyAJLy8gQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzUyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQ0FOX1ZSOyAJLy8gVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzY0XTsgCS8vIA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjA7IAkvLyBDQU4gTWFpbGJveCAwDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTsgCS8vIENBTiBNYWlsYm94IDENCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIyOyAJLy8gQ0FOIE1haWxib3ggMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjM7IAkvLyBDQU4gTWFpbGJveCAzDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNDsgCS8vIENBTiBNYWlsYm94IDQNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI1OyAJLy8gQ0FOIE1haWxib3ggNQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjY7IAkvLyBDQU4gTWFpbGJveCA2DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNzsgCS8vIENBTiBNYWlsYm94IDcNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI4OyAJLy8gQ0FOIE1haWxib3ggOA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjk7IAkvLyBDQU4gTWFpbGJveCA5DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTA7IAkvLyBDQU4gTWFpbGJveCAxMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjExOyAJLy8gQ0FOIE1haWxib3ggMTENCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMjsgCS8vIENBTiBNYWlsYm94IDEyDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTM7IAkvLyBDQU4gTWFpbGJveCAxMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE0OyAJLy8gQ0FOIE1haWxib3ggMTQNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNTsgCS8vIENBTiBNYWlsYm94IDE1DQorfSBBVDkxU19DQU4sICpBVDkxUFNfQ0FOOw0KKw0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIENBTiBDb250cm9sbGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0xQTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIExvdyBQb3dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fQUJNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBPdmVybG9hZCBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIFRpbWUgU3RhbXAgbWVzc2FnZXMgYXQgZWFjaCBlbmQgb2YgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9UVE0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIEVuYWJsZSBUaW1lciBGcmVlemUNCisjZGVmaW5lIEFUOTFDX0NBTl9EUlBUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQ0FOKSBEaXNhYmxlIFJlcGVhdA0KKy8vIC0tLS0tLS0tIENBTl9JRVIgOiAoQ0FOIE9mZnNldDogMHg0KSBDQU4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIE1haWxib3ggMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgTWFpbGJveCAyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIE1haWxib3ggNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKENBTikgTWFpbGJveCA1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIE1haWxib3ggNyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI4ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKENBTikgTWFpbGJveCA4IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChDQU4pIE1haWxib3ggMTAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChDQU4pIE1haWxib3ggMTEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChDQU4pIE1haWxib3ggMTMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDQU4pIE1haWxib3ggMTQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDQU4pIEVycm9yIEFjdGl2ZSBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9XQVJOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChDQU4pIEJ1cyBPZmYgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTikgU2xlZXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTikgVGltZXIgT3ZlcmZsb3cgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RTVFAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU4pIFRpbWVzdGFtcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKENBTikgU3R1ZmZpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9BRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoQ0FOKSBCaXQgRXJyb3INCisvLyAtLS0tLS0tLSBDQU5fSURSIDogKENBTiBPZmZzZXQ6IDB4OCkgQ0FOIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX1NSIDogKENBTiBPZmZzZXQ6IDB4MTApIENBTiBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTikgUmVjZWl2ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RCU1kgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBPdmVybG9hZCBCdXN5DQorLy8gLS0tLS0tLS0gQ0FOX0JSIDogKENBTiBPZmZzZXQ6IDB4MTQpIENBTiBCYXVkcmF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoQ0FOKSBQaGFzZSAyIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTEgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChDQU4pIFJlLXN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9CUlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgU2FtcGxpbmcgbW9kZQ0KKy8vIC0tLS0tLS0tIENBTl9USU0gOiAoQ0FOIE9mZnNldDogMHgxOCkgQ0FOIFRpbWVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVSICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU4pIFRpbWVyIGZpZWxkDQorLy8gLS0tLS0tLS0gQ0FOX1RJTUVTVFAgOiAoQ0FOIE9mZnNldDogMHgxYykgQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlcg0KKy8vIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKENBTikgVGltZXIgUmVzZXQgRmllbGQNCisvLyAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMgew0KKwlBVDkxX1JFRwkgRU1BQ19OQ1I7IAkvLyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTkNGR1I7IAkvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTlNSOyAJLy8gTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19UU1I7IAkvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkJRUDsgCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfVEJRUDsgCS8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTUjsgCS8vIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQU47IAkvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUFRSOyAJLy8gUGF1c2UgVGltZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QRlI7IAkvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlRPOyAJLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NDRjsgCS8vIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUNGOyAJLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZSTzsgCS8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GQ1NFOyAJLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQUxFOyAJLy8gQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0RURjsgCS8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19MQ09MOyAJLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUNPTDsgCS8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFVORDsgCS8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0NTRTsgCS8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlJFOyAJLy8gUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUk9WOyAJLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU0U7IAkvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUxFOyAJLy8gRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkpBOyAJLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTRjsgCS8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU1RFOyAJLy8gU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkxFOyAJLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBGOyAJLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0hSQjsgCS8vIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisJQVQ5MV9SRUcJIEVNQUNfSFJUOyAJLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisJQVQ5MV9SRUcJIEVNQUNfU0ExTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0ExSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0w7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0g7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0TDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0SDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19USUQ7IAkvLyBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQUTsgCS8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNSSU87IAkvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19XT0w7IAkvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzEzXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19SRVY7IAkvLyBSZXZpc2lvbiBSZWdpc3Rlcg0KK30gQVQ5MVNfRU1BQywgKkFUOTFQU19FTUFDOw0KKw0KKy8vIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgTG9vcGJhY2suIE9wdGlvbmFsLiBXaGVuIHNldCwgbG9vcGJhY2sgc2lnbmFsIGlzIGF0IGhpZ2ggbGV2ZWwuDQorI2RlZmluZSBBVDkxQ19FTUFDX0xMQiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIExvb3BiYWNrIGxvY2FsLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgUmVjZWl2ZSBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NUEUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xSU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgQ2xlYXIgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XRVNUQVQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgQmFjayBwcmVzc3VyZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RIQUxUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgVHJhbnNtaXQgcGF1c2UgZnJhbWUgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZQ0KKy8vIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBTcGVlZC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZEICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIEZ1bGwgZHVwbGV4LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgSnVtYm8gRnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0FGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTkJDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgTm8gYnJvYWRjYXN0LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIFVuaWNhc3QgaGFzaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChFTUFDKSBSZWNlaXZlIDE1MjIgYnl0ZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FQUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfMTYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzMyICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA2NA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEVNQUMpIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8yICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChFTUFDKSB0d28gYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzMgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIGZpZWxkIENoZWNraW5nIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EUkZDUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorI2RlZmluZSBBVDkxQ19FTUFDX0VGUkhEICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChFTUFDKSBJZ25vcmUgUlggRkNTDQorLy8gLS0tLS0tLS0gRU1BQ19OU1IgOiAoRU1BQyBPZmZzZXQ6IDB4OCkgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTktSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVUJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEdPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgR28NCisjZGVmaW5lIEFUOTFDX0VNQUNfQkVYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JOQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfT1ZSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUlhVQlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkVTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSUVSIDogKEVNQUMgT2Zmc2V0OiAweDI4KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19NQU4gOiAoRU1BQyBPZmZzZXQ6IDB4MzQpIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDE4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMjMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUlcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1NPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBSZWR1Y2UgTUlJDQorLy8gLS0tLS0tLS0gRU1BQ19XT0wgOiAoRU1BQyBPZmZzZXQ6IDB4YzQpIFdha2UgT24gTEFOIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBJUCBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19FTUFDX01BRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEVNQUMpIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMSBldmVudCBlbmFibGUNCisvLyAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgMTYpIC8vIChFTUFDKSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FEQyB7DQorCUFUOTFfUkVHCSBBRENfQ1I7IAkvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX01SOyAJLy8gQURDIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX0NIRVI7IAkvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSERSOyAJLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIU1I7IAkvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19TUjsgCS8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19MQ0RSOyAJLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRVI7IAkvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lEUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lNUjsgCS8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NEUjA7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisJQVQ5MV9SRUcJIEFEQ19DRFIxOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorCUFUOTFfUkVHCSBBRENfQ0RSMjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKwlBVDkxX1JFRwkgQURDX0NEUjM7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisJQVQ5MV9SRUcJIEFEQ19DRFI0OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorCUFUOTFfUkVHCSBBRENfQ0RSNTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKwlBVDkxX1JFRwkgQURDX0NEUjY7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisJQVQ5MV9SRUcJIEFEQ19DRFI3OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BREMsICpBVDkxUFNfQURDOw0KKw0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAxKSAvLyAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzANCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIFJlc29sdXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQURDKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxNikgLy8gKEFEQykgU3RhcnR1cCBUaW1lDQorI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBDaGFubmVsIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBDaGFubmVsIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBDaGFubmVsIDcNCisvLyAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBREMpIERhdGEgUmVhZHkNCisjZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQURDKSBHZW5lcmFsIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoQURDKSBSWEJVRkYgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfTERBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUVTIHsNCisJQVQ5MV9SRUcJIEFFU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0tFWVd4Uls0XTsgCS8vIEtleSBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX0lEQVRBeFJbNF07IAkvLyBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19PREFUQXhSWzRdOyAJLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lWeFJbNF07IAkvLyBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzM1XTsgCS8vIA0KKwlBVDkxX1JFRwkgQUVTX1ZSOyAJLy8gQUVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FFUywgKkFUOTFQU19BRVM7DQorDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjApIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQUQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMgew0KKwlBVDkxX1JFRwkgVERFU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTFXeFJbMl07IAkvLyBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMld4UlsyXTsgCS8vIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkzV3hSWzJdOyAJLy8gS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSURBVEF4UlsyXTsgCS8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX09EQVRBeFJbMl07IAkvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSVZ4UlsyXTsgCS8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMzddOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX1ZSOyAJLy8gVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVERFUywgKkFUOTFQU19UREVTOw0KKw0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAoKEFUOTFfUkVHICopIAkweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTANCisjZGVmaW5lIEFUOTFDX1BBMF9SWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMCkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExDQorI2RlZmluZSBBVDkxQ19QQTFfVFhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEwDQorI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMCkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTENCisjZGVmaW5lIEFUOTFDX1BBMTFfVFdDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTExKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTINCisjZGVmaW5lIEFUOTFDX1BBMTJfTlBDUzAwICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEyKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMw0KKyNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BBMTNfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCisjZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QQTE0X0lSUTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BBMTVfVENMSzIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNg0KKyNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTYpIC8vICBTUEkgMCBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE3DQorI2RlZmluZSBBVDkxQ19QQTE3X01PU0kwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNykgLy8gIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE4DQorI2RlZmluZSBBVDkxQ19QQTE4X1NQQ0swICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOCkgLy8gIFNQSSAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkNCisjZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE5KSAvLyAgQ0FOIFJlY2VpdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTINCisjZGVmaW5lIEFUOTFDX1BBMl9TQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMikgLy8gIFVTQVJUIDAgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTJfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIwDQorI2RlZmluZSBBVDkxQ19QQTIwX0NBTlRYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMCkgLy8gIENBTiBUcmFuc21pdA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjENCisjZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIxKSAvLyAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIxKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMg0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1BJIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19URCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBTU0MgVHJhbnNtaXQgZGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyM19NT1NJMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBTUEkgMSBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNCkgLy8gIFNQSSAxIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNg0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9SRiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTI2X05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCisjZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjgNCisjZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI4KSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOQ0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9GSVEgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1BBMjlfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorI2RlZmluZSBBVDkxQ19QQTNfUlRTMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBM19OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzANCisjZGVmaW5lIEFUOTFDX1BBMzBfSVJRMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDANCisjZGVmaW5lIEFUOTFDX1BBMzBfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNA0KKyNkZWZpbmUgQVQ5MUNfUEE0X0NUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgVVNBUlQgMCBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTRfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTUNCisjZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE2DQorI2RlZmluZSBBVDkxQ19QQTZfVFhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19TQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTggICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFVTQVJUIDEgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorI2RlZmluZSBBVDkxQ19QQTlfQ1RTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBVU0FSVCAxIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMA0KKyNkZWZpbmUgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSyAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMCkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jay9SZWZlcmVuY2UgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BCMF9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjEgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjENCisjZGVmaW5lIEFUOTFDX1BCMV9FVFhFTiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEwDQorI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDINCisjZGVmaW5lIEFUOTFDX1BCMTBfTlBDUzExICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEwKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjExX05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCisjZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWlrdCBDb2RpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BCMTJfVENMSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEyKSAvLyAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMw0KKyNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTMpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDINCisjZGVmaW5lIEFUOTFDX1BCMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNA0KKyNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDMNCisjZGVmaW5lIEFUOTFDX1BCMTRfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KKyNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNg0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9FQ09MICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkDQorI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTcNCisjZGVmaW5lIEFUOTFDX1BCMTdfRVJYQ0sgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTgpIC8vICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTkNCisjZGVmaW5lIEFUOTFDX1BCMTlfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTkpIC8vICBUaW1lciBDb3VudGVyIDEgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjIgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjINCisjZGVmaW5lIEFUOTFDX1BCMl9FVFgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIwDQorI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BCMjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjENCisjZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QQjIyX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMikgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjIzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIzDQorI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMykgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjIzX0RDRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMykgLy8gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCisjZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI0KSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI0KSAvLyAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUNCisjZGVmaW5lIEFUOTFDX1BCMjVfVElPQTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI1KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjVfRFRSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI1KSAvLyAgVVNBUlQgMSBEYXRhIFRlcm1pbmFsIHJlYWR5DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjYpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9SSTEgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjYpIC8vICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNw0KKyNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjcpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyOA0KKyNkZWZpbmUgQVQ5MUNfUEIyOF9USU9CMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjgpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyOF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjgpIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyOQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QQjI5X1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMNCisjZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMykgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorI2RlZmluZSBBVDkxQ19QQjMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMwKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNA0KKyNkZWZpbmUgQVQ5MUNfUEI0X0VDUlNfRUNSU0RWICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI0KSAvLyAgRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UvQ2FycmllciBTZW5zZSBhbmQgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNQ0KKyNkZWZpbmUgQVQ5MUNfUEI1X0VSWDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI2DQorI2RlZmluZSBBVDkxQ19QQjZfRVJYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjYpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjcNCisjZGVmaW5lIEFUOTFDX1BCN19FUlhFUiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEI4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI4DQorI2RlZmluZSBBVDkxQ19QQjhfRU1EQyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjgpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI5DQorI2RlZmluZSBBVDkxQ19QQjlfRU1ESU8gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjkpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICgodW5zaWduZWQgaW50KSAgMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkNCisjZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAoKHVuc2lnbmVkIGludCkgIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgKCh1bnNpZ25lZCBpbnQpICAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAoKHVuc2lnbmVkIGludCkgIDMpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQg0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMCAgICgodW5zaWduZWQgaW50KSAgNCkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDANCisjZGVmaW5lIEFUOTFDX0lEX1NQSTEgICAoKHVuc2lnbmVkIGludCkgIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgKCh1bnNpZ25lZCBpbnQpICA2KSAvLyBVU0FSVCAwDQorI2RlZmluZSBBVDkxQ19JRF9VUzEgICAgKCh1bnNpZ25lZCBpbnQpICA3KSAvLyBVU0FSVCAxDQorI2RlZmluZSBBVDkxQ19JRF9TU0MgICAgKCh1bnNpZ25lZCBpbnQpICA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICgodW5zaWduZWQgaW50KSAgOSkgLy8gVHdvLVdpcmUgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9QV01DICAgKCh1bnNpZ25lZCBpbnQpIDEwKSAvLyBQV00gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVURQICAgICgodW5zaWduZWQgaW50KSAxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgKCh1bnNpZ25lZCBpbnQpIDEyKSAvLyBUaW1lciBDb3VudGVyIDANCisjZGVmaW5lIEFUOTFDX0lEX1RDMSAgICAoKHVuc2lnbmVkIGludCkgMTMpIC8vIFRpbWVyIENvdW50ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfVEMyICAgICgodW5zaWduZWQgaW50KSAxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgKCh1bnNpZ25lZCBpbnQpIDE1KSAvLyBDb250cm9sIEFyZWEgTmV0d29yayBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9FTUFDICAgKCh1bnNpZ25lZCBpbnQpIDE2KSAvLyBFdGhlcm5ldCBNQUMNCisjZGVmaW5lIEFUOTFDX0lEX0FEQyAgICAoKHVuc2lnbmVkIGludCkgMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICgodW5zaWduZWQgaW50KSAxOCkgLy8gQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAxMjgtYml0DQorI2RlZmluZSBBVDkxQ19JRF9UREVTICAgKCh1bnNpZ25lZCBpbnQpIDE5KSAvLyBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorI2RlZmluZSBBVDkxQ19JRF8yMF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjIpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yM19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjUpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjgpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgKCh1bnNpZ25lZCBpbnQpIDMwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTEgICAoKHVuc2lnbmVkIGludCkgMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAoKEFUOTFQU19TWVMpIAkweEZGRkZGMDAwKSAvLyAoU1lTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICgoQVQ5MVBTX0FJQykgCTB4RkZGRkYwMDApIC8vIChBSUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgKChBVDkxUFNfUERDKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICgoQVQ5MVBTX0RCR1UpIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJT0EgICAgICAoKEFUOTFQU19QSU8pIAkweEZGRkZGNDAwKSAvLyAoUElPQSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJT0IgICAgICAoKEFUOTFQU19QSU8pIAkweEZGRkZGNjAwKSAvLyAoUElPQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NLR1IgICAgICAoKEFUOTFQU19DS0dSKSAJMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgKChBVDkxUFNfUE1DKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAoKEFUOTFQU19SU1RDKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgKChBVDkxUFNfUlRUQykgCTB4RkZGRkZEMjApIC8vIChSVFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElUQyAgICAgICgoQVQ5MVBTX1BJVEMpIAkweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAoKEFUOTFQU19XRFRDKSAJMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgKChBVDkxUFNfVlJFRykgCTB4RkZGRkZENjApIC8vIChWUkVHKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfTUMgICAgICAgICgoQVQ5MVBTX01DKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICgoQVQ5MVBTX1BEQykgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAoKEFUOTFQU19TUEkpIAkweEZGRkU0MDAwKSAvLyAoU1BJMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAoKEFUOTFQU19QREMpIAkweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgKChBVDkxUFNfUERDKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgKChBVDkxUFNfVVNBUlQpIAkweEZGRkM0MDAwKSAvLyAoVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDMDAwMCkgLy8gKFVTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TU0MgICAoKEFUOTFQU19QREMpIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NTQyAgICAgICAoKEFUOTFQU19TU0MpIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICgoQVQ5MVBTX1RXSSkgCTB4RkZGQjgwMDApIC8vIChUV0kpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMyAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMCAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAoKEFUOTFQU19QV01DKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgKChBVDkxUFNfVURQKSAJMHhGRkZCMDAwMCkgLy8gKFVEUCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMyICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAoKEFUOTFQU19UQ0IpIAkweEZGRkEwMDAwKSAvLyAoVENCKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyQTApIC8vIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICgoQVQ5MVBTX0NBTl9NQikgCTB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICgoQVQ5MVBTX0NBTikgCTB4RkZGRDAwMDApIC8vIChDQU4pIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgKChBVDkxUFNfRU1BQykgCTB4RkZGREMwMDApIC8vIChFTUFDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FEQyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQURDICAgICAgICgoQVQ5MVBTX0FEQykgCTB4RkZGRDgwMDApIC8vIChBREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQUVTICAgKChBVDkxUFNfUERDKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BRVMgICAgICAgKChBVDkxUFNfQUVTKSAJMHhGRkZBNDAwMCkgLy8gKEFFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19UREVTICAoKEFUOTFQU19QREMpIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UREVTICAgICAgKChBVDkxUFNfVERFUykgCTB4RkZGQTgwMDApIC8vIChUREVTKSBCYXNlIEFkZHJlc3MNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgKChjaGFyICopIAkweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwMTAwMDApIC8vIEludGVybmFsIFNSQU0gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCisjZGVmaW5lIEFUOTFDX0lGTEFTSAkgKChjaGFyICopIAkweDAwMTAwMDAwKSAvLyBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwNDAwMDApIC8vIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDI1NiBLYnl0ZSkNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTZfaW5jLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTZfaW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZGZlOAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDI1Nl9pbmMuaApAQCAtMCwwICsxLDI0NDYgQEAKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorLy8gSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FJQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBSUNfU01SICAgICAgICAgKCAwKSAvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX1NWUiAgICAgICAgICgxMjgpIC8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JVlIgICAgICAgICAoMjU2KSAvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRlZSICAgICAgICAgKDI2MCkgLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lTUiAgICAgICAgICgyNjQpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JUFIgICAgICAgICAoMjY4KSAvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lNUiAgICAgICAgICgyNzIpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfQ0lTUiAgICAgICAgKDI3NikgLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSUVDUiAgICAgICAgKDI4OCkgLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSURDUiAgICAgICAgKDI5MikgLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lDQ1IgICAgICAgICgyOTYpIC8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVNDUiAgICAgICAgKDMwMCkgLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRU9JQ1IgICAgICAgKDMwNCkgLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfU1BVICAgICAgICAgKDMwOCkgLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRENSICAgICAgICAgKDMxMikgLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFJQ19GRkVSICAgICAgICAoMzIwKSAvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRkZEUiAgICAgICAgKDMyNCkgLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19GRlNSICAgICAgICAoMzI4KSAvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgICAgICgweDcgPDwgIDApIC8vIChBSUMpIFByaW9yaXR5IExldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICgweDApIC8vIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAoMHg3KSAvLyAoQUlDKSBIaWdoZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSBBVDkxQ19BSUNfU1JDVFlQRSAgICAgICAgICgweDMgPDwgIDUpIC8vIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMICAgICAgICgweDAgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICgweDAgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMb3ctbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX1BPU0lUSVZFX0VER0UgICAgKDB4MSA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX05FR0FUSVZFX0VER0UgICAgKDB4MSA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKDB4MiA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSAgICAgICAgKDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorLy8gLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfTkZJUSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBQcm90ZWN0aW9uIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BEQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQRENfUlBSICAgICAgICAgKCAwKSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19SQ1IgICAgICAgICAoIDQpIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1RQUiAgICAgICAgICggOCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1RDUiAgICAgICAgICgxMikgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1JOUFIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19STkNSICAgICAgICAoMjApIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVE5QUiAgICAgICAgKDI0KSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UTkNSICAgICAgICAoMjgpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1BUQ1IgICAgICAgICgzMikgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19QVFNSICAgICAgICAoMzYpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICAgICAgICgweDEgPDwgIDEpIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19UWFRFTiAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgICAgICgweDEgPDwgIDkpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19EQkdVIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIERCR1VfQ1IgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfTVIgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfSUVSICAgICAgICAoIDgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfSURSICAgICAgICAoMTIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lNUiAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9DU1IgICAgICAgICgyMCkgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkhSICAgICAgICAoMjQpIC8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVEhSICAgICAgICAoMjgpIC8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQlJHUiAgICAgICAoMzIpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQ0lEUiAgICAgICAoNjQpIC8vIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfRVhJRCAgICAgICAoNjgpIC8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0ZOVFIgICAgICAgKDcyKSAvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9SUFIgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9SQ1IgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9UUFIgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVENSICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JOUFIgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUk5DUiAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9UTlBSICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9UTkNSICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9QVENSICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1BUU1IgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUUlggICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyDQorI2RlZmluZSBBVDkxQ19VU19SWEVOICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChEQkdVKSBSZWNlaXZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JYRElTICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhESVMgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAgICAgKDB4NyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgICAgICAgICgweDAgPDwgIDkpIC8vIChEQkdVKSBFdmVuIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9PREQgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoREJHVSkgT2RkIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgICAgICAgICAoMHgyIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgICAgICAgICAgKDB4NCA8PCAgOSkgLy8gKERCR1UpIE5vIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgICAgICAgICAoMHg2IDw8ICA5KSAvLyAoREJHVSkgTXVsdGktZHJvcCBtb2RlDQorI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChEQkdVKSBDaGFubmVsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKERCR1UpIFRYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBPdmVycnVuIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgICAgICgweDEgPDwgMzApIC8vIChEQkdVKSBDT01NX1RYIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICAgKDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUElPIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBJT19QRVIgICAgICAgICAoIDApIC8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QRFIgICAgICAgICAoIDQpIC8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFNSICAgICAgICAgKCA4KSAvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT0VSICAgICAgICAgKDE2KSAvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT0RSICAgICAgICAgKDIwKSAvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIFBJT19PU1IgICAgICAgICAoMjQpIC8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRkVSICAgICAgICAoMzIpIC8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRkRSICAgICAgICAoMzYpIC8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZTUiAgICAgICAgKDQwKSAvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fU09EUiAgICAgICAgKDQ4KSAvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19DT0RSICAgICAgICAoNTIpIC8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT0RTUiAgICAgICAgKDU2KSAvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QRFNSICAgICAgICAoNjApIC8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lFUiAgICAgICAgICg2NCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lEUiAgICAgICAgICg2OCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JTVIgICAgICAgICAoNzIpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSVNSICAgICAgICAgKDc2KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fTURFUiAgICAgICAgKDgwKSAvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fTUREUiAgICAgICAgKDg0KSAvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01EU1IgICAgICAgICg4OCkgLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVURSICAgICAgICg5NikgLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVRVIgICAgICAgKDEwMCkgLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVTUiAgICAgICAoMTA0KSAvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0FTUiAgICAgICAgICgxMTIpIC8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQlNSICAgICAgICAgKDExNikgLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BQlNSICAgICAgICAoMTIwKSAvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dFUiAgICAgICAgKDE2MCkgLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRFIgICAgICAgICgxNjQpIC8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dTUiAgICAgICAgKDE2OCkgLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DS0dSIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENLR1JfTU9SICAgICAgICAoIDApIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0tHUl9NQ0ZSICAgICAgICggNCkgLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBDS0dSX1BMTFIgICAgICAgKDEyKSAvLyBQTEwgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICgweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgICgweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAoMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBNQ19TQ0VSICAgICAgICAoIDApIC8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TQ0RSICAgICAgICAoIDQpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU0NTUiAgICAgICAgKCA4KSAvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENFUiAgICAgICAgKDE2KSAvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDRFIgICAgICAgICgyMCkgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENTUiAgICAgICAgKDI0KSAvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01PUiAgICAgICAgICgzMikgLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTUNGUiAgICAgICAgKDM2KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QTExSICAgICAgICAoNDQpIC8vIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01DS1IgICAgICAgICg0OCkgLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENLUiAgICAgICAgKDY0KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRVIgICAgICAgICAoOTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRFIgICAgICAgICAoMTAwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NSICAgICAgICAgICgxMDQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lNUiAgICAgICAgICgxMDgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisvLyAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgICAgICgweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICgweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZXNldCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SU1RDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFJTVENfUkNSICAgICAgICAoIDApIC8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFJTVENfUlNSICAgICAgICAoIDQpIC8vIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUlNUQ19STVIgICAgICAgICggOCkgLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfRVhUUlNUICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoUlNUQykgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RTICAgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RTVFMgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAoMHg3IDw8ICA4KSAvLyAoUlNUQykgUmVzZXQgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1BPV0VSVVAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFJTVEMpIFdha2VVcCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FUQ0hET0cgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAgICAgICAgICAoMHg0IDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX0JST1dOT1VUICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChSU1RDKSBCcm93bm91dCBSZXNldCBvY2N1cmVkLg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19OUlNUTCAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoUlNUQykgTlJTVCBwaW4gbGV2ZWwNCisjZGVmaW5lIEFUOTFDX1JTVENfU1JDTVAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgICAgICgweDEgPDwgIDQpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfRVJTVEwgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgICAgICgweDEgPDwgMTYpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZQ0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVhbCBUaW1lIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1JUVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUlRUQ19SVE1SICAgICAgICggMCkgLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRBUiAgICAgICAoIDQpIC8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVFZSICAgICAgICggOCkgLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUU1IgICAgICAgKDEyKSAvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFBSRVMgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICAgICAoMHgxIDw8IDE2KSAvLyAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICAgICAoMHgxIDw8IDE3KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVFJTVCAgICAgICAgICgweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgICAgICgweDAgPDwgIDApIC8vIChSVFRDKSBBbGFybSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQ1JUViAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVMgICAgICAgICAgICgweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgICAgICgweDEgPDwgIDEpIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QSVRDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBJVENfUElNUiAgICAgICAoIDApIC8vIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQSVRDX1BJU1IgICAgICAgKCA0KSAvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSVRDX1BJVlIgICAgICAgKCA4KSAvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElJUiAgICAgICAoMTIpIC8vIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVYgICAgICAgICAgICAoMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVEVOICAgICAgICAgICgweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgICAgICgweDEgPDwgMjUpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlDQorLy8gLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElUUyAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFBJVENfUElWUiA6IChQSVRDIE9mZnNldDogMHg4KSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICAgICAgKDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgICAgICgweEZGRiA8PCAyMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBXYXRjaGRvZyBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19XRFRDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFdEVENfV0RDUiAgICAgICAoIDApIC8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFdEVENfV0RNUiAgICAgICAoIDQpIC8vIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFdEVENfV0RTUiAgICAgICAoIDgpIC8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFdEVENfV0RDUiA6IChXRFRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfS0VZICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBXRFRDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICAgKDB4RkZGIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICAgICAoMHgxIDw8IDEyKSAvLyAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICAgICAoMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlBST0MgICAgICAgICgweDEgPDwgMTQpIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgICAgICgweDEgPDwgMTUpIC8vIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgICAgICgweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgICAgICgweDEgPDwgMjgpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgICAgICgweDEgPDwgMjkpIC8vIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQNCisvLyAtLS0tLS0tLSBXRFRDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERVJSICAgICAgICAgICgweDEgPDwgIDEpIC8vIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19WUkVHIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFZSRUdfTVIgICAgICAgICAoIDApIC8vIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBWUkVHX01SIDogKFZSRUcgT2Zmc2V0OiAweDApIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19WUkVHX1BTVERCWSAgICAgICAgICgweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19NQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBNQ19SQ1IgICAgICAgICAgKCAwKSAvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19BU1IgICAgICAgICAgKCA0KSAvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0FBU1IgICAgICAgICAoIDgpIC8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GTVIgICAgICAgICAgKDk2KSAvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GQ1IgICAgICAgICAgKDEwMCkgLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfRlNSICAgICAgICAgICgxMDQpIC8vIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAoMHgzIDw8IDEwKSAvLyAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICAgICAgICgweDAgPDwgMTApIC8vIChNQykgRGF0YSBSZWFkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChNQykgRGF0YSBXcml0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAgICAgICAoMHgyIDw8IDEwKSAvLyAoTUMpIENvZGUgRmV0Y2gNCisjZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChNQykgTG9jayBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgRmxhc2ggV2FpdCBTdGF0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICAgICAoMHgzRkYgPDwgIDgpIC8vIChNQykgUGFnZSBOdW1iZXINCisjZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICgweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICgweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAoMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAoMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TUEkgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1BJX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX01SICAgICAgICAgICggNCkgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JEUiAgICAgICAgICggOCkgLy8gUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVERSICAgICAgICAgKDEyKSAvLyBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfU1IgICAgICAgICAgKDE2KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JRVIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JRFIgICAgICAgICAoMjQpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfSU1SICAgICAgICAgKDI4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0NTUiAgICAgICAgICg0OCkgLy8gQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9SUFIgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9SQ1IgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UUFIgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfVENSICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JOUFIgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUk5DUiAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UTlBSICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UTkNSICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9QVENSICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1BUU1IgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBTUEkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgTWFzdGVyL1NsYXZlIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9QUyAgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgICAgICgweDEgPDwgIDYpIC8vIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBDbG9jayBQaGFzZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAgICAgKDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlDQorI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgICgweEZGIDw8IDE2KSAvLyAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VTQVJUIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFVTX0NSICAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFVTX01SICAgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lFUiAgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lEUiAgICAgICAgICAoMTIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JTVIgICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfQ1NSICAgICAgICAgICgyMCkgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JIUiAgICAgICAgICAoMjQpIC8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RIUiAgICAgICAgICAoMjgpIC8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0JSR1IgICAgICAgICAoMzIpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JUT1IgICAgICAgICAoMzYpIC8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBVU19UVEdSICAgICAgICAgKDQwKSAvLyBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBVU19GSURJICAgICAgICAgKDY0KSAvLyBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfTkVSICAgICAgICAgICg2OCkgLy8gTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRiAgICAgICAgICAgKDc2KSAvLyBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUlBSICAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUkNSICAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVFBSICAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RDUiAgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STlBSICAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JOQ1IgICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVE5QUiAgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVE5DUiAgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRDUiAgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBVU19QVFNSICAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVU0FSVCkgU3RhcnQgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICgweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgICAgICgweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVU0FSVCkgZmRpdjENCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAoMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICAgICAgICAgKDB4MCA8PCAxMikgLy8gKFVTQVJUKSAxIHN0b3AgYml0DQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAgICAgICAgICgweDIgPDwgMTIpIC8vIChVU0FSVCkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sNCisjZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NTQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBTU0NfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfQ01SICAgICAgICAgKCA0KSAvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkNNUiAgICAgICAgKDE2KSAvLyBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JGTVIgICAgICAgICgyMCkgLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVENNUiAgICAgICAgKDI0KSAvLyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEZNUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkhSICAgICAgICAgKDMyKSAvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19USFIgICAgICAgICAoMzYpIC8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SU0hSICAgICAgICAoNDgpIC8vIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVFNIUiAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19TUiAgICAgICAgICAoNjQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0lFUiAgICAgICAgICg2OCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0lEUiAgICAgICAgICg3MikgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JTVIgICAgICAgICAoNzYpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlBSICAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkNSICAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVFBSICAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDUiAgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19STlBSICAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JOQ1IgICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVE5QUiAgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVE5DUiAgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUFRDUiAgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19QVFNSICAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFNTQykgVHJhbnNtaXQgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICAgICAoMHg3IDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgICAgICAgKDB4MiA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLSSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICAgICAoMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgTG9vcCBNb2RlDQorI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0DQorI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgICgweDcgPDwgMjApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTm9uZSBSSyBwaW4gSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgTG93IGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfSElHSCAgICAgICAgICAgICAgICAgKDB4NCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICAgICAgICAoMHg1IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1NDKSBUcmFuc21pdCBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1NDKSBSZWNlaXZlIFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFR3by13aXJlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UV0kgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVFdJX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX01NUiAgICAgICAgICggNCkgLy8gTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JQURSICAgICAgICAoMTIpIC8vIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9DV0dSICAgICAgICAoMTYpIC8vIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1NSICAgICAgICAgICgzMikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSUVSICAgICAgICAgKDM2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSURSICAgICAgICAgKDQwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lNUiAgICAgICAgICg0NCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9SSFIgICAgICAgICAoNDgpIC8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1RIUiAgICAgICAgICg1MikgLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVFdJKSBTZW5kIGEgU1RBUlQgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfU1RPUCAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBEaXNhYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICgweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoVFdJKSBDbG9jayBMb3cgRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICAgICAoMHhGRiA8PCAgOCkgLy8gKFRXSSkgQ2xvY2sgSGlnaCBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0tESVYgICAgICAgICAgICgweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVFdJKSBSZWNlaXZlIGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9UWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVFdJKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUV0kpIFVuZGVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19UV0lfTkFDSyAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DX0NIIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBXTUNfQ01SICAgICAgICAoIDApIC8vIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DRFRZUiAgICAgICggNCkgLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NQUkRSICAgICAgKCA4KSAvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DQ05UUiAgICAgICgxMikgLy8gQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NVUERSICAgICAgKDE2KSAvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19SZXNlcnZlZCAgICgyMCkgLy8gUmVzZXJ2ZWQNCisvLyAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUFdNQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQV01DX01SICAgICAgICAgKCAwKSAvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfRU5BICAgICAgICAoIDQpIC8vIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0RJUyAgICAgICAgKCA4KSAvLyBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfU1IgICAgICAgICAoMTIpIC8vIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lFUiAgICAgICAgKDE2KSAvLyBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfSURSICAgICAgICAoMjApIC8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfSU1SICAgICAgICAoMjQpIC8vIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfSVNSICAgICAgICAoMjgpIC8vIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19WUiAgICAgICAgICgyNTIpIC8vIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DSCAgICAgICAgICg1MTIpIC8vIFBXTUMgQ2hhbm5lbA0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEENCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUFfTUNLICAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFBXTUMpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAgICAgKDB4RiA8PCAyNCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEINCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUJfTUNLICAgICAgICAgICAgICAgICAgKDB4MCA8PCAyNCkgLy8gKFBXTUMpIA0KKy8vIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAwDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICgweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFBXTUMpIENoYW5uZWwgSUQgMg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAzDQorLy8gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfU1IgOiAoUFdNQyBPZmZzZXQ6IDB4YykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lNUiA6IChQV01DIE9mZnNldDogMHgxOCkgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVURQIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFVEUF9OVU0gICAgICAgICAoIDApIC8vIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0dMQlNUQVRFICAgICggNCkgLy8gR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfRkFERFIgICAgICAgKCA4KSAvLyBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSUVSICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSURSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lNUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JU1IgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JQ1IgICAgICAgICAoMzIpIC8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX1JTVEVQICAgICAgICg0MCkgLy8gUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9DU1IgICAgICAgICAoNDgpIC8vIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0ZEUiAgICAgICAgICg4MCkgLy8gRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfVFhWQyAgICAgICAgKDExNikgLy8gVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICAgICAgKDB4N0ZGIDw8ICAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVEUCkgRnJhbWUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVEUCkgRnJhbWUgT0sNCisvLyAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgQ29uZmlndXJlZA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VTUiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBFbmFibGUgU2VuZCBSZXN1bWUNCisjZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAgICAgICgweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICAgICAoMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDMNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQkswICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwDQorI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9UWFBLVFJEWSAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICgweDEgPDwgIDUpIC8vIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgICAgICgweDEgPDwgIDYpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuDQorI2RlZmluZSBBVDkxQ19VRFBfRElSICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAoMHg3IDw8ICA4KSAvLyAoVURQKSBFbmRwb2ludCB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoVURQKSBDb250cm9sDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChVRFApIEJ1bGsgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAgICAgICAgICAoMHg1IDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgICAgICAgICAgICAgKDB4NiA8PCAgOCkgLy8gKFVEUCkgQnVsayBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IElODQorI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVRFApIERhdGEgVG9nZ2xlDQorI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgICAgICgweDdGRiA8PCAxNikgLy8gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1BVT04gICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVURQKSBQdWxsLXVwIE9ODQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRDX0NDUiAgICAgICAgICAoIDApIC8vIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfQ01SICAgICAgICAgICggNCkgLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgVENfQ1YgICAgICAgICAgICgxNikgLy8gQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgVENfUkEgICAgICAgICAgICgyMCkgLy8gUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgVENfUkIgICAgICAgICAgICgyNCkgLy8gUmVnaXN0ZXIgQg0KKyNkZWZpbmUgVENfUkMgICAgICAgICAgICgyOCkgLy8gUmVnaXN0ZXIgQw0KKyNkZWZpbmUgVENfU1IgICAgICAgICAgICgzMikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBUQ19JRVIgICAgICAgICAgKDM2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUQ19JRFIgICAgICAgICAgKDQwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSU1SICAgICAgICAgICg0NCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX1NXVFJHICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAgICAgKDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFRDKSBDbG9jayBJbnZlcnQNCisjZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlRFREcgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9USU9CICAgICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRSAgICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgICAgICAgICAgICgweDIgPDwgMTYpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICgweDMgPDwgMjApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgICAgICgweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JFRVZUICAgICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAgICAgKDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgT3ZlcmZsb3cNCisjZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgUkIgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVENCIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRDQl9UQzAgICAgICAgICAoIDApIC8vIFRDIENoYW5uZWwgMA0KKyNkZWZpbmUgVENCX1RDMSAgICAgICAgICg2NCkgLy8gVEMgQ2hhbm5lbCAxDQorI2RlZmluZSBUQ0JfVEMyICAgICAgICAgKDEyOCkgLy8gVEMgQ2hhbm5lbCAyDQorI2RlZmluZSBUQ0JfQkNSICAgICAgICAgKDE5MikgLy8gVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVENCX0JNUiAgICAgICAgICgxOTYpIC8vIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgKDB4MyA8PCAgMCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICAgICAgICAgICAgICgweDEpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAgICAgICAgICAgICAoMHgyKSAvLyAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgICAgICAgICAgICAgKDB4MykgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICAgICAoMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIE1haWxCb3ggSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0NBTl9NQiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBDQU5fTUJfTU1SICAgICAgKCAwKSAvLyBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NQU0gICAgICAoIDQpIC8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUlEICAgICAgKCA4KSAvLyBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUZJRCAgICAgKDEyKSAvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01TUiAgICAgICgxNikgLy8gTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NREwgICAgICAoMjApIC8vIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NREggICAgICAoMjQpIC8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUNSICAgICAgKDI4KSAvLyBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRU1BUksgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENBTl9NQikgTWFpbGJveCBUaW1lbWFyaw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgICAgICgweDcgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggT2JqZWN0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0RJUyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlggICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWE9WRVJXUklURSAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1RYICAgICAgICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfQ09OU1VNRVIgICAgICAgICAgICAgKDB4NCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9QUk9EVUNFUiAgICAgICAgICAgICAoMHg1IDw8IDI0KSAvLyAoQ0FOX01CKSANCisvLyAtLS0tLS0tLSBDQU5fTUFNIDogKENBTl9NQiBPZmZzZXQ6IDB4NCkgQ0FOIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAoMHgzRkZGRiA8PCAgMCkgLy8gKENBTl9NQikgQ29tcGxlbWVudGFyeSBiaXRzIGZvciBpZGVudGlmaWVyIGluIGV4dGVuZGVkIG1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QSAgICAgICAgICAgKDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgICAgICgweDEgPDwgMjkpIC8vIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbg0KKy8vIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTVNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MTApIENBTiBNZXNzYWdlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENBTl9NQikgVGltZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX0NBTl9NRExDICAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0DQorI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBBYm9ydA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SRFkgICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkDQorLy8gLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MWMpIENBTiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChDQU5fTUIpIEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3gNCisjZGVmaW5lIEFUOTFDX0NBTl9NVENSICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0FOIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENBTl9NUiAgICAgICAgICAoIDApIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRVIgICAgICAgICAoIDQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRFIgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fSU1SICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1NSICAgICAgICAgICgxNikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fQlIgICAgICAgICAgKDIwKSAvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1RJTSAgICAgICAgICgyNCkgLy8gVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9USU1FU1RQICAgICAoMjgpIC8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9FQ1IgICAgICAgICAoMzIpIC8vIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9UQ1IgICAgICAgICAoMzYpIC8vIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9BQ1IgICAgICAgICAoNDApIC8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9WUiAgICAgICAgICAoMjUyKSAvLyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUIwICAgICAgICAgKDUxMikgLy8gQ0FOIE1haWxib3ggMA0KKyNkZWZpbmUgQ0FOX01CMSAgICAgICAgICg1NDQpIC8vIENBTiBNYWlsYm94IDENCisjZGVmaW5lIENBTl9NQjIgICAgICAgICAoNTc2KSAvLyBDQU4gTWFpbGJveCAyDQorI2RlZmluZSBDQU5fTUIzICAgICAgICAgKDYwOCkgLy8gQ0FOIE1haWxib3ggMw0KKyNkZWZpbmUgQ0FOX01CNCAgICAgICAgICg2NDApIC8vIENBTiBNYWlsYm94IDQNCisjZGVmaW5lIENBTl9NQjUgICAgICAgICAoNjcyKSAvLyBDQU4gTWFpbGJveCA1DQorI2RlZmluZSBDQU5fTUI2ICAgICAgICAgKDcwNCkgLy8gQ0FOIE1haWxib3ggNg0KKyNkZWZpbmUgQ0FOX01CNyAgICAgICAgICg3MzYpIC8vIENBTiBNYWlsYm94IDcNCisjZGVmaW5lIENBTl9NQjggICAgICAgICAoNzY4KSAvLyBDQU4gTWFpbGJveCA4DQorI2RlZmluZSBDQU5fTUI5ICAgICAgICAgKDgwMCkgLy8gQ0FOIE1haWxib3ggOQ0KKyNkZWZpbmUgQ0FOX01CMTAgICAgICAgICg4MzIpIC8vIENBTiBNYWlsYm94IDEwDQorI2RlZmluZSBDQU5fTUIxMSAgICAgICAgKDg2NCkgLy8gQ0FOIE1haWxib3ggMTENCisjZGVmaW5lIENBTl9NQjEyICAgICAgICAoODk2KSAvLyBDQU4gTWFpbGJveCAxMg0KKyNkZWZpbmUgQ0FOX01CMTMgICAgICAgICg5MjgpIC8vIENBTiBNYWlsYm94IDEzDQorI2RlZmluZSBDQU5fTUIxNCAgICAgICAgKDk2MCkgLy8gQ0FOIE1haWxib3ggMTQNCisjZGVmaW5lIENBTl9NQjE1ICAgICAgICAoOTkyKSAvLyBDQU4gTWFpbGJveCAxNQ0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBDQU4gQ29udHJvbGxlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NBTl9MUE0gICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgT3ZlcmxvYWQgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9URU9GICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBFbmFibGUgVGltZXIgRnJlZXplDQorI2RlZmluZSBBVDkxQ19DQU5fRFJQVCAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQ0FOKSBNYWlsYm94IDEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQ0FOKSBNYWlsYm94IDQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQ0FOKSBNYWlsYm94IDcgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQ0FOKSBNYWlsYm94IDEwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQ0FOKSBNYWlsYm94IDEzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgICAgICgweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgICAgICgweDEgPDwgMjUpIC8vIChDQU4pIFN0dWZmaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICAgICAgICgweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgICAgICgweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKENBTikgQml0IEVycm9yDQorLy8gLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9TUiA6IChDQU4gT2Zmc2V0OiAweDEwKSBDQU4gU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgICAgICgweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKENBTikgT3ZlcmxvYWQgQnVzeQ0KKy8vIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UyICAgICAgICAgICgweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICAgICAoMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9TWU5DICAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICAgICAoMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU4pIFNhbXBsaW5nIG1vZGUNCisvLyAtLS0tLS0tLSBDQU5fVElNIDogKENBTiBPZmZzZXQ6IDB4MTgpIENBTiBUaW1lciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXINCisvLyAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTVJTVCAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0VNQUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgRU1BQ19OQ1IgICAgICAgICggMCkgLy8gTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX05DRkdSICAgICAgKCA0KSAvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfTlNSICAgICAgICAoIDgpIC8vIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1RTUiAgICAgICAgKDIwKSAvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUkJRUCAgICAgICAoMjQpIC8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEVNQUNfVEJRUCAgICAgICAoMjgpIC8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBFTUFDX1JTUiAgICAgICAgKDMyKSAvLyBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19JU1IgICAgICAgICgzNikgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19JRVIgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19JRFIgICAgICAgICg0NCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSU1SICAgICAgICAoNDgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX01BTiAgICAgICAgKDUyKSAvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUFRSICAgICAgICAoNTYpIC8vIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUEZSICAgICAgICAoNjApIC8vIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19GVE8gICAgICAgICg2NCkgLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1NDRiAgICAgICAgKDY4KSAvLyBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX01DRiAgICAgICAgKDcyKSAvLyBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRlJPICAgICAgICAoNzYpIC8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19GQ1NFICAgICAgICg4MCkgLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfQUxFICAgICAgICAoODQpIC8vIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19EVEYgICAgICAgICg4OCkgLy8gRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0xDT0wgICAgICAgKDkyKSAvLyBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19FQ09MICAgICAgICg5NikgLy8gRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19UVU5EICAgICAgICgxMDApIC8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0NTRSAgICAgICAgKDEwNCkgLy8gQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SUkUgICAgICAgICgxMDgpIC8vIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JPViAgICAgICAgKDExMikgLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SU0UgICAgICAgICgxMTYpIC8vIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19FTEUgICAgICAgICgxMjApIC8vIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JKQSAgICAgICAgKDEyNCkgLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1VTRiAgICAgICAgKDEyOCkgLy8gVW5kZXJzaXplIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19TVEUgICAgICAgICgxMzIpIC8vIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JMRSAgICAgICAgKDEzNikgLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFBGICAgICAgICAoMTQwKSAvLyBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSFJCICAgICAgICAoMTQ0KSAvLyBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorI2RlZmluZSBFTUFDX0hSVCAgICAgICAgKDE0OCkgLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisjZGVmaW5lIEVNQUNfU0ExTCAgICAgICAoMTUyKSAvLyBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBMUggICAgICAgKDE1NikgLy8gU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBMkwgICAgICAgKDE2MCkgLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTJIICAgICAgICgxNjQpIC8vIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTNMICAgICAgICgxNjgpIC8vIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EzSCAgICAgICAoMTcyKSAvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0E0TCAgICAgICAoMTc2KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBNEggICAgICAgKDE4MCkgLy8gU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBFTUFDX1RJRCAgICAgICAgKDE4NCkgLy8gVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19UUFEgICAgICAgICgxODgpIC8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVVNSSU8gICAgICAoMTkyKSAvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19XT0wgICAgICAgICgxOTYpIC8vIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JFViAgICAgICAgKDI1MikgLy8gUmV2aXNpb24gUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xCICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4NCisjZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIExvb3BiYWNrIGxvY2FsLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkUgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xSU1RBVCAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAgICAgKDB4MSA8PCAgNikgLy8gKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgICAgICgweDEgPDwgIDcpIC8vIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQlAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEVNQUMpIEJhY2sgcHJlc3N1cmUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGUiAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lDQorLy8gLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSBTcGVlZC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZEICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSBGdWxsIGR1cGxleC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSBKdW1ibyBGcmFtZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTkJDICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEVNQUMpIFVuaWNhc3QgaGFzaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEVNQUMpIEV4dGVybmFsIGFkZHJlc3MgbWF0Y2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAgICAgICAgICgweDAgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfMTYgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzMyICAgICAgICAgICAgICAoMHgyIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA2NA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVFkgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJPRiAgICAgICAgICAgKDB4MyA8PCAxNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMCAgICAgICAgICAgICAoMHgwIDw8IDE0KSAvLyAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKEVNQUMpIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8yICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChFTUFDKSB0d28gYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzMgICAgICAgICAgICAgKDB4MyA8PCAxNCkgLy8gKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKEVNQUMpIERpc2NhcmQgUmVjZWl2ZSBGQ1MNCisjZGVmaW5lIEFUOTFDX0VNQUNfRUZSSEQgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoRU1BQykgSWdub3JlIFJYIEZDUw0KKy8vIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX01ESU8gICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09MICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVTICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBHbw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CRVggICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQk5BICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTUZEICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQ09NUCAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhVQlIgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EUiAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhFUlIgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQ09NUCAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk9WUiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkVTUCAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRaICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSUVSIDogKEVNQUMgT2Zmc2V0OiAweDI4KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19NQU4gOiAoRU1BQyBPZmZzZXQ6IDB4MzQpIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFR0EgICAgICAgICAgICgweDFGIDw8IDE4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgICAgICgweDFGIDw8IDIzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU09GICAgICAgICAgICAgKDB4MyA8PCAzMCkgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgUmVkdWNlIE1JSQ0KKy8vIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFHICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZQ0KKy8vIC0tLS0tLS0tIEVNQUNfUkVWIDogKEVNQUMgT2Zmc2V0OiAweGZjKSBSZXZpc2lvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWUkVGICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICAgICAoMHhGRkZGIDw8IDE2KSAvLyAoRU1BQykgDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3INCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQURDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEFEQ19DUiAgICAgICAgICAoIDApIC8vIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfTVIgICAgICAgICAgKCA0KSAvLyBBREMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIRVIgICAgICAgICgxNikgLy8gQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0hEUiAgICAgICAgKDIwKSAvLyBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0hTUiAgICAgICAgKDI0KSAvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19TUiAgICAgICAgICAoMjgpIC8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19MQ0RSICAgICAgICAoMzIpIC8vIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfSUVSICAgICAgICAgKDM2KSAvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lEUiAgICAgICAgICg0MCkgLy8gQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfSU1SICAgICAgICAgKDQ0KSAvLyBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DRFIwICAgICAgICAoNDgpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQURDX0NEUjEgICAgICAgICg1MikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorI2RlZmluZSBBRENfQ0RSMiAgICAgICAgKDU2KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFEQ19DRFIzICAgICAgICAoNjApIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKyNkZWZpbmUgQURDX0NEUjQgICAgICAgICg2NCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorI2RlZmluZSBBRENfQ0RSNSAgICAgICAgKDY4KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFEQ19DRFI2ICAgICAgICAoNzIpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKyNkZWZpbmUgQURDX0NEUjcgICAgICAgICg3NikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBRENfUlBSICAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUkNSICAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfVFBSICAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1RDUiAgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19STlBSICAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JOQ1IgICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfVE5QUiAgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfVE5DUiAgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUFRDUiAgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19QVFNSICAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIFN0YXJ0IENvbnZlcnNpb24NCisvLyAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICAgICAoMHg3IDw8ICAxKSAvLyAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAgICAgICAgKDB4MCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzANCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICAgICAgICAoMHgyIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAgICAgICAgKDB4MyA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgICAgICAgICgweDQgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICAgICAgICAoMHg1IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAgICAgICAgKDB4NiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSBSZXNvbHV0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgICAgICAgICAgICAgKDB4MCA8PCAgNCkgLy8gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIDgtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAgICAgICAoMHgwIDw8ICA1KSAvLyAoQURDKSBOb3JtYWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICgweDNGIDw8ICA4KSAvLyAoQURDKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVFVQICAgICAgICAgKDB4MUYgPDwgMTYpIC8vIChBREMpIFN0YXJ0dXAgVGltZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICAgICAoMHhGIDw8IDI0KSAvLyAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUNCisvLyAtLS0tLS0tLSAJQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChBREMpIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQURDKSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgQ2hhbm5lbCA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIENoYW5uZWwgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQURDKSBDaGFubmVsIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEFEQykgQ2hhbm5lbCA3DQorLy8gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gCUFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICAgICAgICgweDEgPDwgMTApIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChBREMpIERhdGEgUmVhZHkNCisjZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICAgICAgICgweDEgPDwgMTgpIC8vIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoQURDKSBSWEJVRkYgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfTERBVEEgICAgICAgICAgICgweDNGRiA8PCAgMCkgLy8gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgICAgICAgICAoMHgzRkYgPDwgIDApIC8vIChBREMpIENvbnZlcnRlZCBEYXRhDQorLy8gLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIyIDogKEFEQyBPZmZzZXQ6IDB4MzgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI1IDogKEFEQyBPZmZzZXQ6IDB4NDQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tIA0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQUVTIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEFFU19DUiAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19NUiAgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JRVIgICAgICAgICAoMTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JRFIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSU1SICAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lTUiAgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0tFWVd4UiAgICAgICgzMikgLy8gS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lEQVRBeFIgICAgICg2NCkgLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfT0RBVEF4UiAgICAgKDgwKSAvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSVZ4UiAgICAgICAgKDk2KSAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ZSICAgICAgICAgICgyNTIpIC8vIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUlBSICAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUkNSICAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfVFBSICAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1RDUiAgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19STlBSICAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JOQ1IgICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfVE5QUiAgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfVE5DUiAgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUFRDUiAgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19QVFNSICAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX0FFU19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEFFUykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FFU19MT0FEU0VFRCAgICAgICAgKDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19BRVNfUFJPQ0RMWSAgICAgICAgICgweEYgPDwgIDQpIC8vIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkNCisjZGVmaW5lIEFUOTFDX0FFU19TTU9EICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAgICAgKDB4NyA8PCAxMikgLy8gKEFFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfRUNCICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMikgLy8gKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEFFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoMHgyIDw8IDEyKSAvLyAoQUVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NGQiAgICAgICAgICAgICAgICAgICgweDMgPDwgMTIpIC8vIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgICAgICAgICAgKDB4NCA8PCAxMikgLy8gKEFFUykgQ1RSIENvdW50ZXIgbW9kZS4NCisjZGVmaW5lIEFUOTFDX0FFU19MT0QgICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKEFFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19BRVNfQ0ZCUyAgICAgICAgICAgICgweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAoMHhGIDw8IDIwKSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkNCisjZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAgICAgKDB4MUYgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gICAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAxIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUyX0VOICAgICAgICAgICAgICgweDIgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMiBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFM19FTiAgICAgICAgICAgICAoMHg0IDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gICAgICAgICAgICAgKDB4OCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA0IGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU1X0VOICAgICAgICAgICAgICgweDEwIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDUgaXMgZW5hYmxlZC4NCisvLyAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfREFUUkRZICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICgweDEgPDwgIDIpIC8vIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19BRVNfUlhCVUZGICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lNUiA6IChBRVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfVVJBVCAgICAgICAgICAgICgweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UREVTIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRERVNfQ1IgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfTVIgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSUVSICAgICAgICAoMTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSURSICAgICAgICAoMjApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lNUiAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JU1IgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19LRVkxV3hSICAgICgzMikgLy8gS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0tFWTJXeFIgICAgKDQwKSAvLyBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfS0VZM1d4UiAgICAoNDgpIC8vIEtleSAzIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JREFUQXhSICAgICg2NCkgLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX09EQVRBeFIgICAgKDgwKSAvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lWeFIgICAgICAgKDk2KSAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19WUiAgICAgICAgICgyNTIpIC8vIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19SUFIgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19SQ1IgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19UUFIgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfVENSICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JOUFIgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUk5DUiAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19UTlBSICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19UTkNSICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19QVENSICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1BUU1IgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUREVTKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRERVNfTVIgOiAoVERFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfQ0lQSEVSICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVlNT0QgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVERFUykgS2V5IE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfU01PRCAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFRERVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEyKSAvLyAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUREVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoMHgyIDw8IDEyKSAvLyAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19DRkJTICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgICAgICgweDEgPDwgIDApIC8vIChUREVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX1RERVNfRU5EUlggICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX1RERVNfRU5EVFggICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgICAgICgweDEgPDwgIDMpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfVERFU19UWEJVRkUgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19VUkFEICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgICAgICgweDMgPDwgMTIpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgKDB4MCA8PCAxMikgLy8gKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKDB4MSA8PCAxMikgLy8gKFRERVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoMHgyIDw8IDEyKSAvLyAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICgweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICgweEZGRkZGMDAwKSAvLyAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAoMHhGRkZGRjEwNCkgLy8gKEFJQykgRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAoMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgKDB4RkZGRkYxMzApIC8vIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAoMHhGRkZGRjA4MCkgLy8gKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAoMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAoMHhGRkZGRjEyOCkgLy8gKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgKDB4RkZGRkYxMDgpIC8vIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgKDB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICgweEZGRkZGMTBDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAoMHhGRkZGRjE0MCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAoMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICgweEZGRkZGMTJDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgKDB4RkZGRkYxNDQpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICgweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgKDB4RkZGRkYxMjQpIC8vIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgKDB4RkZGRkYxMzQpIC8vIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICAgICAgICAgICAoMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgICAgICAgICAgICgweEZGRkZGMzEwKSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROUFIgICAgICAgICAgICgweEZGRkZGMzE4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICAgICAgICAgICAoMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgICAgICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SQ1IgICAgICAgICAgICAoMHhGRkZGRjMwNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5DUiAgICAgICAgICAgKDB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAgICAgICAgICAgKDB4RkZGRkYzMjApIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRTUiAgICAgICAgICAgKDB4RkZGRkYzMjQpIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICAgICAgICAgICAoMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICAgICAgICAgICAoMHhGRkZGRjI0NCkgLy8gKERCR1UpIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0JSR1IgICAgICAgICAgICgweEZGRkZGMjIwKSAvLyAoREJHVSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRFIgICAgICAgICAgICAoMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgICAgICAgICAgICgweEZGRkZGMjE0KSAvLyAoREJHVSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ0lEUiAgICAgICAgICAgKDB4RkZGRkYyNDApIC8vIChEQkdVKSBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX01SICAgICAgICAgICAgICgweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICAgICAgICAgICAoMHhGRkZGRjIxMCkgLy8gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgICAgICAgICAgICgweEZGRkZGMjAwKSAvLyAoREJHVSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9GTlRSICAgICAgICAgICAoMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgICAgICAgICAgICgweEZGRkZGMjFDKSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SSFIgICAgICAgICAgICAoMHhGRkZGRjIxOCkgLy8gKERCR1UpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAgICAgICAgICAgKDB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgKDB4RkZGRkY0MTQpIC8vIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgKDB4RkZGRkY0MzApIC8vIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgKDB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICgweEZGRkZGNDc4KSAvLyAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAoMHhGRkZGRjQ0MCkgLy8gKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgKDB4RkZGRkY0NjApIC8vIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgKDB4RkZGRkY0NDgpIC8vIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgKDB4RkZGRkY0MjQpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAoMHhGRkZGRjRBNCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICgweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAoMHhGRkZGRjQ0NCkgLy8gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICgweEZGRkZGNDM4KSAvLyAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICgweEZGRkZGNDY4KSAvLyAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgKDB4RkZGRkY0QTgpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICgweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgKDB4RkZGRkY0QTApIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICgweEZGRkZGNDIwKSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAoMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAoMHhGRkZGRjQ2NCkgLy8gKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICgweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAoMHhGRkZGRjQ3MCkgLy8gKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICgweEZGRkZGNDU0KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgKDB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAoMHhGRkZGRjQ1MCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgKDB4RkZGRkY0MDQpIC8vIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAoMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgKDB4RkZGRkY0MTApIC8vIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICgweEZGRkZGNDA4KSAvLyAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRFIgICAgICAgICAgICgweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAgICAgICAgICAgKDB4RkZGRkY2NTApIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVVNSICAgICAgICAgICgweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAgICAgICAgICAgKDB4RkZGRkY2NDgpIC8vIChQSU9CKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BU1IgICAgICAgICAgICAoMHhGRkZGRjY3MCkgLy8gKFBJT0IpIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVURSICAgICAgICAgICgweEZGRkZGNjYwKSAvLyAoUElPQikgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BTUiAgICAgICAgICAgICgweEZGRkZGNjA4KSAvLyAoUElPQikgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRVIgICAgICAgICAgICAoMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAgICAgICAgICAgKDB4RkZGRkY2MzQpIC8vIChQSU9CKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV0VSICAgICAgICAgICAoMHhGRkZGRjZBMCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQUJTUiAgICAgICAgICAgKDB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgICAgICAgICAgICgweEZGRkZGNjI0KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUERTUiAgICAgICAgICAgKDB4RkZGRkY2M0MpIC8vIChQSU9CKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSURSICAgICAgICAgICAgKDB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICAgICAgICAgICAoMHhGRkZGRjZBOCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUERSICAgICAgICAgICAgKDB4RkZGRkY2MDQpIC8vIChQSU9CKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFIgICAgICAgICAgICAoMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICAgICAgICAgICAoMHhGRkZGRjYyOCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRVIgICAgICAgICAgKDB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICAgICAgICAgICAoMHhGRkZGRjYzMCkgLy8gKFBJT0IpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JU1IgICAgICAgICAgICAoMHhGRkZGRjY0QykgLy8gKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0RTUiAgICAgICAgICAgKDB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAgICAgICAgICAgKDB4RkZGRkY2MTgpIC8vIChQSU9CKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01EU1IgICAgICAgICAgICgweEZGRkZGNjU4KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkVSICAgICAgICAgICAoMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAgICAgICAgICAgKDB4RkZGRkY2NzQpIC8vIChQSU9CKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRERSICAgICAgICAgICAoMHhGRkZGRjY1NCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09FUiAgICAgICAgICAgICgweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICAgICAgICAgICAoMHhGRkZGRjYwMCkgLy8gKFBJT0IpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1IgICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExSICAgICAgICAgICAoMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICAgICAgICAgICAoMHhGRkZGRkMyNCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgKDB4RkZGRkZDNjQpIC8vIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICgweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgKDB4RkZGRkZDMkMpIC8vIChQTUMpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAoMHhGRkZGRkMxMCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgKDB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAoMHhGRkZGRkMzMCkgLy8gKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICgweEZGRkZGQzA0KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAoMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICgweEZGRkZGQzA4KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICgweEZGRkZGQzE4KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAoMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICgweEZGRkZGQzAwKSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICgweEZGRkZGQzZDKSAvLyAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAoMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAoMHhGRkZGRkM2OCkgLy8gKFBNQykgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JTVENfUkNSICAgICAgICAgICAgKDB4RkZGRkZEMDApIC8vIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JNUiAgICAgICAgICAgICgweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICAgICAgICAgICAoMHhGRkZGRkQwNCkgLy8gKFJTVEMpIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUU1IgICAgICAgICAgICgweEZGRkZGRDJDKSAvLyAoUlRUQykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVE1SICAgICAgICAgICAoMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgICAgICAgICAgICgweEZGRkZGRDI4KSAvLyAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUQVIgICAgICAgICAgICgweEZGRkZGRDI0KSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSVRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgKDB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgKDB4RkZGRkZEMzQpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICgweEZGRkZGRDNDKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICAgICAgICAgICAoMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAgICAgICAgICAgKDB4RkZGRkZENDgpIC8vIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RNUiAgICAgICAgICAgKDB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAgICAgICAgICAgKDB4RkZGRkZENjApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICgweEZGRkZGRjA0KSAvLyAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAoMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICgweEZGRkZGRjY0KSAvLyAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgKDB4RkZGRkZGMDgpIC8vIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICgweEZGRkZGRjYwKSAvLyAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRDUiAgICAgICAgICAgKDB4RkZGRTQxMjApIC8vIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUlBSICAgICAgICAgICAgKDB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgICAgICAgICAgICgweEZGRkU0MTFDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UUFIgICAgICAgICAgICAoMHhGRkZFNDEwOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROUFIgICAgICAgICAgICgweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICAgICAgICAgICAoMHhGRkZFNDEwQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JDUiAgICAgICAgICAgICgweEZGRkU0MTA0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STlBSICAgICAgICAgICAoMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICAgICAgICAgICAoMHhGRkZFNDExNCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVFNSICAgICAgICAgICAoMHhGRkZFNDEyNCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTFfSU1SICAgICAgICAgICAgKDB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICAgICAgICAgICAoMHhGRkZFNDAxNCkgLy8gKFNQSTEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfTVIgICAgICAgICAgICAgKDB4RkZGRTQwMDQpIC8vIChTUEkxKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JEUiAgICAgICAgICAgICgweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgICAgICAgICAgICgweEZGRkU0MDE4KSAvLyAoU1BJMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfU1IgICAgICAgICAgICAgKDB4RkZGRTQwMTApIC8vIChTUEkxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVERSICAgICAgICAgICAgKDB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgICAgICAgICAgICgweEZGRkU0MDAwKSAvLyAoU1BJMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9DU1IgICAgICAgICAgICAoMHhGRkZFNDAzMCkgLy8gKFNQSTEpIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICgweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICgweEZGRkUwMTA4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgKDB4RkZGRTAxMEMpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAoMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgKDB4RkZGRTAxMjQpIC8vIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAoMHhGRkZFMDExMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAoMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgKDB4RkZGRTAxMUMpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICgweEZGRkUwMTE0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICgweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgICAgICAgICAgICgweEZGRkUwMDE0KSAvLyAoU1BJMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9TUiAgICAgICAgICAgICAoMHhGRkZFMDAxMCkgLy8gKFNQSTApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRFIgICAgICAgICAgICAoMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgICAgICAgICAgICgweEZGRkUwMDAwKSAvLyAoU1BJMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9NUiAgICAgICAgICAgICAoMHhGRkZFMDAwNCkgLy8gKFNQSTApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfSU1SICAgICAgICAgICAgKDB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICAgICAgICAgICAoMHhGRkZFMDAwQykgLy8gKFNQSTApIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUkRSICAgICAgICAgICAgKDB4RkZGRTAwMDgpIC8vIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1NSICAgICAgICAgICAgKDB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgICAgICAgICAgICgweEZGRkM0MTE0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVENSICAgICAgICAgICAgKDB4RkZGQzQxMjApIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RDUiAgICAgICAgICAgICAoMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAgICAgICAgICAgKDB4RkZGQzQxMjQpIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5QUiAgICAgICAgICAgICgweEZGRkM0MTE4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkNSICAgICAgICAgICAgICgweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgICAgICAgICAgICgweEZGRkM0MTEwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SUFIgICAgICAgICAgICAgKDB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTkNSICAgICAgICAgICAgKDB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAgICAgICAgICAgKDB4RkZGQzQxMDgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAoMHhGRkZDNDA0QykgLy8gKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgKDB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAoMHhGRkZDNDAyNCkgLy8gKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgKDB4RkZGQzQwMTQpIC8vIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICgweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAoMHhGRkZDNDAwOCkgLy8gKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAoMHhGRkZDNDAxQykgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAoMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAoMHhGRkZDNDAxOCkgLy8gKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAoMHhGRkZDNDAyMCkgLy8gKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAoMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgKDB4RkZGQzQwNDApIC8vIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICgweEZGRkM0MDAwKSAvLyAoVVMxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICgweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAgICAgICAgICAgKDB4RkZGQzAxMTgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STlBSICAgICAgICAgICAgKDB4RkZGQzAxMTApIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICAgICAgICAgICAoMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAgICAgICAgICAgKDB4RkZGQzAxMjApIC8vIChQRENfVVMwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUU1IgICAgICAgICAgICAoMHhGRkZDMDEyNCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAgICAgICAgICAgKDB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAgICAgICAgICAgKDB4RkZGQzAxMDgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkNSICAgICAgICAgICAgICgweEZGRkMwMTA0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgICAgICAgICAgICgweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgICAgICAgICAgICgweEZGRkMwMTE0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfQlJHUiAgICAgICAgICAgICgweEZGRkMwMDIwKSAvLyAoVVMwKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTkVSICAgICAgICAgICAgICgweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAgICAgICAgICAgKDB4RkZGQzAwMDApIC8vIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JTVIgICAgICAgICAgICAgKDB4RkZGQzAwMTApIC8vIChVUzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfRklESSAgICAgICAgICAgICgweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICAgICAgICAgICAoMHhGRkZDMDAyOCkgLy8gKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX01SICAgICAgICAgICAgICAoMHhGRkZDMDAwNCkgLy8gKFVTMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICAgICAgICAgICAoMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAgICAgICAgICAgKDB4RkZGQzAwMTQpIC8vIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkhSICAgICAgICAgICAgICgweEZGRkMwMDE4KSAvLyAoVVMwKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSURSICAgICAgICAgICAgICgweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICAgICAgICAgICAoMHhGRkZDMDAxQykgLy8gKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lGICAgICAgICAgICAgICAoMHhGRkZDMDA0QykgLy8gKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRVIgICAgICAgICAgICAgKDB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAoMHhGRkZENDExQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAoMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAoMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICgweEZGRkQ0MTA4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAoMHhGRkZENDEyMCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICgweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAoMHhGRkZENDEwNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAoMHhGRkZENDExMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICgweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICgweEZGRkQ0MTI0KSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19SSFIgICAgICAgICAgICAgKDB4RkZGRDQwMjApIC8vIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICAgICAgICAgICAoMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAgICAgICAgICAgKDB4RkZGRDQwMUMpIC8vIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAgICAgICAgICAgKDB4RkZGRDQwNDgpIC8vIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgICAgICAgICAgICgweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgICAgICAgICAgICgweEZGRkQ0MDEwKSAvLyAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lFUiAgICAgICAgICAgICAoMHhGRkZENDA0NCkgLy8gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICAgICAgICAgICAoMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgICAgICAgICAgICgweEZGRkQ0MDQwKSAvLyAoU1NDKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAgICAgICAgICAgKDB4RkZGRDQwMDQpIC8vIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ01SICAgICAgICAgICAgKDB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAgICAgICAgICAgKDB4RkZGRDQwMDApIC8vIChTU0MpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JTVIgICAgICAgICAgICAgKDB4RkZGRDQwNEMpIC8vIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgICAgICAgICAgICgweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgICAgICAgICAgICgweEZGRkI4MDI0KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ1IgICAgICAgICAgICAgICgweEZGRkI4MDAwKSAvLyAoVFdJKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfU1IgICAgICAgICAgICAgICgweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAgICAgICAgICAgKDB4RkZGQjgwMkMpIC8vIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfVEhSICAgICAgICAgICAgICgweEZGRkI4MDM0KSAvLyAoVFdJKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSURSICAgICAgICAgICAgICgweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICAgICAgICAgICAoMHhGRkZCODAwQykgLy8gKFRXSSkgSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01NUiAgICAgICAgICAgICAoMHhGRkZCODAwNCkgLy8gKFRXSSkgTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DV0dSICAgICAgICAgICAgKDB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICAgICAgICAgICAoMHhGRkZCODAzMCkgLy8gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICgweEZGRkNDMjcwKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICgweEZGRkNDMjc0KSAvLyAoUFdNQ19DSDMpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICgweEZGRkNDMjY4KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICgweEZGRkNDMjY0KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAoMHhGRkZDQzI2QykgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgKDB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9SZXNlcnZlZCAgICgweEZGRkNDMjU0KSAvLyAoUFdNQ19DSDIpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DTVIgICAgICAgICgweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgICAgICAoMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICAgICAgKDB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICAgICAgKDB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICAgICAgKDB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAgICgweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAgICAgICgweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAgICAgICgweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAgICAgICgweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgICAgICAoMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAgICAgICAgKDB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICgweEZGRkNDMjE0KSAvLyAoUFdNQ19DSDApIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICgweEZGRkNDMjA4KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICgweEZGRkNDMjA0KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAoMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgKDB4RkZGQ0MyMTApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgKDB4RkZGQ0MyMEMpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfSURSICAgICAgICAgICAgKDB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgICAgICAgICAgICgweEZGRkNDMDA4KSAvLyAoUFdNQykgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lFUiAgICAgICAgICAgICgweEZGRkNDMDEwKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgICAgICAgICAgICgweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgICAgICAgICAgICgweEZGRkNDMDFDKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX1NSICAgICAgICAgICAgICgweEZGRkNDMDBDKSAvLyAoUFdNQykgUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAgICAgICAgICAgKDB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgICAgICAgICAgICgweEZGRkNDMDAwKSAvLyAoUFdNQykgUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0VOQSAgICAgICAgICAgICgweEZGRkNDMDA0KSAvLyAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VRFBfSU1SICAgICAgICAgICAgICgweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICAgICAgICAgICAoMHhGRkZCMDAwOCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX05VTSAgICAgICAgICAgICAoMHhGRkZCMDAwMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkRSICAgICAgICAgICAgICgweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAgICAgICAgICAgKDB4RkZGQjAwMUMpIC8vIChVRFApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9DU1IgICAgICAgICAgICAgKDB4RkZGQjAwMzApIC8vIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICAgICAgICAgICAoMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAgICAgICAgICAgKDB4RkZGQjAwMjApIC8vIChVRFApIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTVEVQICAgICAgICAgICAoMHhGRkZCMDAyOCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZDICAgICAgICAgICAgKDB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAgICAgICAgKDB4RkZGQjAwMDQpIC8vIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lFUiAgICAgICAgICAgICAoMHhGRkZCMDAxMCkgLy8gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAoMHhGRkZBMDAxQykgLy8gKFRDMCkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAoMHhGRkZBMDAxOCkgLy8gKFRDMCkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAoMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICgweEZGRkEwMDA0KSAvLyAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICgweEZGRkEwMDI0KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICgweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICgweEZGRkEwMDI4KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAoMHhGRkZBMDAxMCkgLy8gKFRDMCkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgICAgICAgICAgICgweEZGRkEwMDU4KSAvLyAoVEMxKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzFfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDQwKSAvLyAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwNjgpIC8vIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgICAgICAgICAgICgweEZGRkEwMDYwKSAvLyAoVEMxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwNTQpIC8vIChUQzEpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAgICAgICAgICAgKDB4RkZGQTAwNUMpIC8vIChUQzEpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAgICAgICAgICAgKDB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDUwKSAvLyAoVEMxKSBDb3VudGVyIFZhbHVlDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDA4NCkgLy8gKFRDMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NDUiAgICAgICAgICAgICAoMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDkwKSAvLyAoVEMyKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzJfUkEgICAgICAgICAgICAgICgweEZGRkEwMDk0KSAvLyAoVEMyKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzJfUkIgICAgICAgICAgICAgICgweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgICAgICAgICAgICgweEZGRkEwMEE4KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDBBQykgLy8gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAgICAgICAgICAgKDB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwQTQpIC8vIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwQTApIC8vIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgKDB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgKDB4RkZGQTAwQzApIC8vIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NREwgICAgICAgICAoMHhGRkZEMDIxNCkgLy8gKENBTl9NQjApIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUFNICAgICAgICAgKDB4RkZGRDAyMDQpIC8vIChDQU5fTUIwKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQ1IgICAgICAgICAoMHhGRkZEMDIxQykgLy8gKENBTl9NQjApIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NSUQgICAgICAgICAoMHhGRkZEMDIwOCkgLy8gKENBTl9NQjApIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTVNSICAgICAgICAgKDB4RkZGRDAyMTApIC8vIChDQU5fTUIwKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NRklEICAgICAgICAoMHhGRkZEMDIwQykgLy8gKENBTl9NQjApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ESCAgICAgICAgICgweEZGRkQwMjE4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTU1SICAgICAgICAgKDB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREwgICAgICAgICAoMHhGRkZEMDIzNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUlEICAgICAgICAgKDB4RkZGRDAyMjgpIC8vIChDQU5fTUIxKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01NUiAgICAgICAgICgweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01TUiAgICAgICAgICgweEZGRkQwMjMwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUFNICAgICAgICAgKDB4RkZGRDAyMjQpIC8vIChDQU5fTUIxKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREggICAgICAgICAoMHhGRkZEMDIzOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01DUiAgICAgICAgICgweEZGRkQwMjNDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01GSUQgICAgICAgICgweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAoMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAoMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICgweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAoMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgKDB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgKDB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAoMHhGRkZEMDI0QykgLy8gKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICgweEZGRkQwMjUwKSAvLyAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NRklEICAgICAgICAoMHhGRkZEMDI2QykgLy8gKENBTl9NQjMpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01BTSAgICAgICAgICgweEZGRkQwMjY0KSAvLyAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUlEICAgICAgICAgKDB4RkZGRDAyNjgpIC8vIChDQU5fTUIzKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01DUiAgICAgICAgICgweEZGRkQwMjdDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01NUiAgICAgICAgICgweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01TUiAgICAgICAgICgweEZGRkQwMjcwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURMICAgICAgICAgKDB4RkZGRDAyNzQpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ESCAgICAgICAgICgweEZGRkQwMjc4KSAvLyAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjQgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NSUQgICAgICAgICAoMHhGRkZEMDI4OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTU1SICAgICAgICAgKDB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURIICAgICAgICAgKDB4RkZGRDAyOTgpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NRklEICAgICAgICAoMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAgICAgICAgICgweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICAgICAgICAgKDB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICAgICAgICAgKDB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAgICAgICAgICgweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAoMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICgweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICgweEZGRkQwMkFDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgKDB4RkZGRDAyQjgpIC8vIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAoMHhGRkZEMDJBOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgKDB4RkZGRDAyQTApIC8vIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgKDB4RkZGRDAyQjQpIC8vIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICgweEZGRkQwMkE0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NRklEICAgICAgICAoMHhGRkZEMDJDQykgLy8gKENBTl9NQjYpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01JRCAgICAgICAgICgweEZGRkQwMkM4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQU0gICAgICAgICAoMHhGRkZEMDJDNCkgLy8gKENBTl9NQjYpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01TUiAgICAgICAgICgweEZGRkQwMkQwKSAvLyAoQ0FOX01CNikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURMICAgICAgICAgKDB4RkZGRDAyRDQpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01DUiAgICAgICAgICgweEZGRkQwMkRDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ESCAgICAgICAgICgweEZGRkQwMkQ4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTU1SICAgICAgICAgKDB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQ1IgICAgICAgICAoMHhGRkZEMDJGQykgLy8gKENBTl9NQjcpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREggICAgICAgICAoMHhGRkZEMDJGOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01GSUQgICAgICAgICgweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICAgICAgICAgKDB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAgICAgICAgICgweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgICAgICAgICAoMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gICAgICAgICAoMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAgICAgICAgICgweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICgweEZGRkQwMDI0KSAvLyAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICgweEZGRkQwMDBDKSAvLyAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAoMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAoMHhGRkZEMDAyMCkgLy8gKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAoMHhGRkZEMDAxQykgLy8gKENBTikgVGltZSBTdGFtcCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAoMHhGRkZEMDAwMCkgLy8gKENBTikgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAoMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgKDB4RkZGRDAwMjgpIC8vIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgKDB4RkZGRDAwMTgpIC8vIChDQU4pIFRpbWVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICgweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgKDB4RkZGRDAwMTQpIC8vIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICgweEZGRkQwMEZDKSAvLyAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVNSICAgICAgICAgICAgKDB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggICAgICAgICAgICgweEZGRkRDMEI0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUwgICAgICAgICAgICgweEZGRkRDMDk4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FTEUgICAgICAgICAgICAoMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgICAgICAgICAgICgweEZGRkRDMDVDKSAvLyAoRU1BQykgTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFICAgICAgICAgICAgKDB4RkZGREMwODgpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XT0wgICAgICAgICAgICAoMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgICAgICAgICAgICgweEZGRkRDMDU4KSAvLyAoRU1BQykgRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RVTkQgICAgICAgICAgICgweEZGRkRDMDY0KSAvLyAoRU1BQykgVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNSICAgICAgICAgICAgKDB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAgICAgICAgICAgKDB4RkZGREMwQjApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JTUiAgICAgICAgICAgICgweEZGRkRDMDIwKSAvLyAoRU1BQykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EzTCAgICAgICAgICAgKDB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgICAgICAgICAgICgweEZGRkRDMDE0KSAvLyAoRU1BQykgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lEUiAgICAgICAgICAgICgweEZGRkRDMDJDKSAvLyAoRU1BQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNFICAgICAgICAgICAgKDB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAgICAgICAgICAgKDB4RkZGREMwNjApIC8vIChFTUFDKSBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RJRCAgICAgICAgICAgICgweEZGRkRDMEI4KSAvLyAoRU1BQykgVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkIgICAgICAgICAgICAoMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAgICAgICAgICAgKDB4RkZGREMwMUMpIC8vIChFTUFDKSBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU1JJTyAgICAgICAgICAoMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgICAgICAgICAgICgweEZGRkRDMDM4KSAvLyAoRU1BQykgUGF1c2UgVGltZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJIICAgICAgICAgICAoMHhGRkZEQzBBNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1YgICAgICAgICAgICAoMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAgICAgICAgICAgKDB4RkZGREMwNTQpIC8vIChFTUFDKSBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkpBICAgICAgICAgICAgKDB4RkZGREMwN0MpIC8vIChFTUFDKSBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJRUCAgICAgICAgICAgKDB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgICAgICAgICAgICgweEZGRkRDMDhDKSAvLyAoRU1BQykgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX05DRkdSICAgICAgICAgICgweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgICAgICAgICAgICgweEZGRkRDMDk0KSAvLyAoRU1BQykgSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNGICAgICAgICAgICAgKDB4RkZGREMwODApIC8vIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZDU0UgICAgICAgICAgICgweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAgICAgICAgICAgKDB4RkZGREMwQkMpIC8vIChFTUFDKSBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01BTiAgICAgICAgICAgICgweEZGRkRDMDM0KSAvLyAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZUTyAgICAgICAgICAgICgweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgICAgICAgICAgICgweEZGRkRDMEZDKSAvLyAoRU1BQykgUmV2aXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSU1SICAgICAgICAgICAgKDB4RkZGREMwMzApIC8vIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQ0YgICAgICAgICAgICAoMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAgICAgICAgICAgKDB4RkZGREMwM0MpIC8vIChFTUFDKSBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUNGICAgICAgICAgICAgKDB4RkZGREMwNDgpIC8vIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTlNSICAgICAgICAgICAgKDB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICAgICAgICAgICAoMHhGRkZEQzBBMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfRlJPICAgICAgICAgICAgKDB4RkZGREMwNEMpIC8vIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSUVSICAgICAgICAgICAgKDB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggICAgICAgICAgICgweEZGRkRDMDlDKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0NTRSAgICAgICAgICAgICgweEZGRkRDMDY4KSAvLyAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNIICAgICAgICAgICAoMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICAgICAgICAgICAoMHhGRkZEQzA2QykgLy8gKEVNQUMpIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NURSAgICAgICAgICAgICgweEZGRkRDMDg0KSAvLyAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUU1IgICAgICAgICAgICAoMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAgICAgICAgICAgKDB4RkZGRDgxMjApIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROUFIgICAgICAgICAgICAoMHhGRkZEODExOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgICAoMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICAgICAgICAgICAoMHhGRkZEODExMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5DUiAgICAgICAgICAgICgweEZGRkQ4MTE0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SUFIgICAgICAgICAgICAgKDB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAgICAgICAgICAgKDB4RkZGRDgxMEMpIC8vIChQRENfQURDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVFBSICAgICAgICAgICAgICgweEZGRkQ4MTA4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICAgICAgICAgICAoMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgKDB4RkZGRDgwMzgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAoMHhGRkZEODAzQykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICgweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgKDB4RkZGRDgwNDQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAoMHhGRkZEODAxNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAoMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAoMHhGRkZEODA0MCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICgweEZGRkQ4MDM0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgKDB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICgweEZGRkQ4MDI4KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgKDB4RkZGRDgwMDApIC8vIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICgweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgKDB4RkZGRDgwNDgpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAoMHhGRkZEODAyNCkgLy8gKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgKDB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAoMHhGRkZEODAxOCkgLy8gKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICgweEZGRkQ4MDA0KSAvLyAoQURDKSBBREMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAoMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAgICAgICAgICAgKDB4RkZGQTQxMDgpIC8vIChQRENfQUVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUFRDUiAgICAgICAgICAgICgweEZGRkE0MTIwKSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STlBSICAgICAgICAgICAgKDB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICAgICAgICAgICAoMHhGRkZBNDExQykgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RDUiAgICAgICAgICAgICAoMHhGRkZBNDEwQykgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19SQ1IgICAgICAgICAgICAgKDB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAgICAgICAgICAgKDB4RkZGQTQxMTQpIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROUFIgICAgICAgICAgICAoMHhGRkZBNDExOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JQUiAgICAgICAgICAgICAoMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICAgICAgICAgICAoMHhGRkZBNDEyNCkgLy8gKFBEQ19BRVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRVNfSVZ4UiAgICAgICAgICAgICgweEZGRkE0MDYwKSAvLyAoQUVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX01SICAgICAgICAgICAgICAoMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICAgICAgICAgICAoMHhGRkZBNDBGQykgLy8gKEFFUykgQUVTIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19PREFUQXhSICAgICAgICAgKDB4RkZGQTQwNTApIC8vIChBRVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JREFUQXhSICAgICAgICAgKDB4RkZGQTQwNDApIC8vIChBRVMpIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NSICAgICAgICAgICAgICAoMHhGRkZBNDAwMCkgLy8gKEFFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEUiAgICAgICAgICAgICAoMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAgICAgICAgICAgKDB4RkZGQTQwMTgpIC8vIChBRVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSUVSICAgICAgICAgICAgICgweEZGRkE0MDEwKSAvLyAoQUVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfS0VZV3hSICAgICAgICAgICgweEZGRkE0MDIwKSAvLyAoQUVTKSBLZXkgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSVNSICAgICAgICAgICAgICgweEZGRkE0MDFDKSAvLyAoQUVTKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICgweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICgweEZGRkE4MTBDKSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgKDB4RkZGQTgxMDQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICgweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAoMHhGRkZBODExMCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAoMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgKDB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICgweEZGRkE4MTA4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgKDB4RkZGQTgxMjQpIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAoMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgICAgICAgICgweEZGRkE4MDI4KSAvLyAoVERFUykgS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTNXeFIgICAgICAgICgweEZGRkE4MDMwKSAvLyAoVERFUykgS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lEUiAgICAgICAgICAgICgweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAgICAgICAgICAgKDB4RkZGQTgwRkMpIC8vIChUREVTKSBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVZ4UiAgICAgICAgICAgKDB4RkZGQTgwNjApIC8vIChUREVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PREFUQXhSICAgICAgICAoMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAgICAgICAgICAgKDB4RkZGQTgwMTgpIC8vIChUREVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19NUiAgICAgICAgICAgICAoMHhGRkZBODAwNCkgLy8gKFRERVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfQ1IgICAgICAgICAgICAgKDB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgICAgICAgICAgICgweEZGRkE4MDEwKSAvLyAoVERFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JU1IgICAgICAgICAgICAoMHhGRkZBODAxQykgLy8gKFRERVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURBVEF4UiAgICAgICAgKDB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAgICAgICAgKDB4RkZGQTgwMjApIC8vIChUREVTKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEwKSAvLyAgVVNBUlQgMCBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEgICAgICAgICAgICAgKDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RYRDAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMSkgLy8gIFVTQVJUIDAgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgICAgICAoMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KKyNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTApIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTENCisjZGVmaW5lIEFUOTFDX1BBMTFfVFdDSyAgICAgICAgICAgKEFUOTFDX1BJT19QQTExKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMg0KKyNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAgICAgICAoQVQ5MUNfUElPX1BBMTIpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICAgICAgKDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgICAgICAgKEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICAgICAgIChBVDkxQ19QSU9fUEExMykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICAgICAgKDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCisjZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKEFUOTFDX1BJT19QQTE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QQTE0X0lSUTEgICAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAgICAgICgxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE1DQorI2RlZmluZSBBVDkxQ19QQTE1X05QQ1MwMyAgICAgICAgIChBVDkxQ19QSU9fUEExNSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICAgICAgKDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgICAgICAgKEFUOTFDX1BJT19QQTE2KSAvLyAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAgICAgICgxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE3DQorI2RlZmluZSBBVDkxQ19QQTE3X01PU0kwICAgICAgICAgIChBVDkxQ19QSU9fUEExNykgLy8gIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTgNCisjZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgICAgICAgKEFUOTFDX1BJT19QQTE4KSAvLyAgU1BJIDAgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAgICAgICgxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICAgICAgIChBVDkxQ19QSU9fUEExOSkgLy8gIENBTiBSZWNlaXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICgxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTINCisjZGVmaW5lIEFUOTFDX1BBMl9TQ0swICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyX05QQ1MxMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgICAgICAoMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMA0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAgICAgICAoQVQ5MUNfUElPX1BBMjApIC8vICBDQU4gVHJhbnNtaXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjENCisjZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIxKSAvLyAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgICAgICAgKEFUOTFDX1BJT19QQTIxKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMikgLy8gIFNTQyBUcmFuc21pdCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9TUENLMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIzICAgICAgICAgICAgKDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCisjZGVmaW5lIEFUOTFDX1BBMjNfVEQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIzKSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgICAgICAgKEFUOTFDX1BJT19QQTIzKSAvLyAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjQpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICAgICAgIChBVDkxQ19QSU9fUEEyNCkgLy8gIFNQSSAxIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAgICAgICAoMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjUpIC8vICBTU0MgUmVjZWl2ZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9OUENTMTEgICAgICAgICAoQVQ5MUNfUElPX1BBMjUpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfUkYgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAgICAgICAoQVQ5MUNfUElPX1BBMjYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCisjZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTI3KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgICAgICAgKEFUOTFDX1BJT19QQTI3KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjggICAgICAgICAgICAoMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjgpIC8vICBEQkdVIERlYnVnIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI5ICAgICAgICAgICAgKDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QQTI5X05QQ1MxMyAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgICAgICAoMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorI2RlZmluZSBBVDkxQ19QQTNfUlRTMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzMCAgICAgICAgICAgICgxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorI2RlZmluZSBBVDkxQ19QQTMwX0lSUTAgICAgICAgICAgIChBVDkxQ19QSU9fUEEzMCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAwDQorI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEEzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICAgICAgKDEgPDwgIDQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNA0KKyNkZWZpbmUgQVQ5MUNfUEE0X0NUUzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNCkgLy8gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE0X05QQ1MxMyAgICAgICAgICAoQVQ5MUNfUElPX1BBNCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgICAgICAgIChBVDkxQ19QSU9fUEE1KSAvLyAgVVNBUlQgMSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTYgICAgICAgICAgICAgKDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNg0KKyNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNyAgICAgICAgICAgICAoMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorI2RlZmluZSBBVDkxQ19QQTdfU0NLMSAgICAgICAgICAgIChBVDkxQ19QSU9fUEE3KSAvLyAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAgICAgICAgKEFUOTFDX1BJT19QQTcpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTggICAgICAgICAgICAgKDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KKyNkZWZpbmUgQVQ5MUNfUEE4X1JUUzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBOCkgLy8gIFVTQVJUIDEgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICAgICAgICAoQVQ5MUNfUElPX1BBOCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgICAgICAoMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorI2RlZmluZSBBVDkxQ19QQTlfQ1RTMSAgICAgICAgICAgIChBVDkxQ19QSU9fUEE5KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgICAgICAgIChBVDkxQ19QSU9fUEE5KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIwICAgICAgICAgICAgICgxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjANCisjZGVmaW5lIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgICAgKEFUOTFDX1BJT19QQjApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMSAgICAgICAgICAgICAoMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorI2RlZmluZSBBVDkxQ19QQjFfRVRYRU4gICAgICAgICAgIChBVDkxQ19QSU9fUEIxKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgICAgICAoMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICAgICAgIChBVDkxQ19QSU9fUEIxMCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgICAgICAoMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjExX05QQ1MxMiAgICAgICAgIChBVDkxQ19QSU9fUEIxMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTIgICAgICAgICAgICAoMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9FVFhFUiAgICAgICAgICAoQVQ5MUNfUElPX1BCMTIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMTIpIC8vICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICAgICAgKDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCisjZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjEzKSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICAgICAgIChBVDkxQ19QSU9fUEIxMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgICAgICAoMSA8PCAxNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNA0KKyNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTQpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDMNCisjZGVmaW5lIEFUOTFDX1BCMTRfTlBDUzAyICAgICAgICAgKEFUOTFDX1BJT19QQjE0KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNSAgICAgICAgICAgICgxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE1DQorI2RlZmluZSBBVDkxQ19QQjE1X0VSWERWICAgICAgICAgIChBVDkxQ19QSU9fUEIxNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICAgICAgKDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCisjZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgICAgICAgKEFUOTFDX1BJT19QQjE2KSAvLyAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAgICAgICAoQVQ5MUNfUElPX1BCMTYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICAgICAgKDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTcNCisjZGVmaW5lIEFUOTFDX1BCMTdfRVJYQ0sgICAgICAgICAgKEFUOTFDX1BJT19QQjE3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKEFUOTFDX1BJT19QQjE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOCAgICAgICAgICAgICgxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE4DQorI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICAgICAgIChBVDkxQ19QSU9fUEIxOCkgLy8gIEV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMvc2VjDQorI2RlZmluZSBBVDkxQ19QQjE4X0FEVFJHICAgICAgICAgIChBVDkxQ19QSU9fUEIxOCkgLy8gIEFEQyBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAgICAgICgxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE5DQorI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICAgICAgIChBVDkxQ19QSU9fUEIxOSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgICAgICAgKEFUOTFDX1BJT19QQjE5KSAvLyAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAgICAgICgxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjINCisjZGVmaW5lIEFUOTFDX1BCMl9FVFgwICAgICAgICAgICAgKEFUOTFDX1BJT19QQjIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMCAgICAgICAgICAgICgxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIwDQorI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BCMjBfUENLMCAgICAgICAgICAgKEFUOTFDX1BJT19QQjIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjEgICAgICAgICAgICAoMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjEpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QQjIxX1BDSzEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCisjZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjIyKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjIpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIzDQorI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICAgICAgIChBVDkxQ19QSU9fUEIyMykgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjIzX0RDRDEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMykgLy8gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjQgICAgICAgICAgICAoMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNA0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9USU9CMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMjQpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9EU1IxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjQpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICgxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICAgICAgIChBVDkxQ19QSU9fUEIyNSkgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyNSkgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjYgICAgICAgICAgICAoMSA8PCAyNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAgICAgICAoQVQ5MUNfUElPX1BCMjYpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNl9SSTEgICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjYpIC8vICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI3DQorI2RlZmluZSBBVDkxQ19QQjI3X1RJT0EyICAgICAgICAgIChBVDkxQ19QSU9fUEIyNykgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI3X1BXTTAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyNykgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCisjZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgICAgICAgKEFUOTFDX1BJT19QQjI4KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI4KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjkgICAgICAgICAgICAoMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyOQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjkpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QQjI5X1BXTTIgICAgICAgICAgIChBVDkxQ19QSU9fUEIyOSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjMgICAgICAgICAgICAgKDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMw0KKyNkZWZpbmUgQVQ5MUNfUEIzX0VUWDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BCMykgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICAgICAgKDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMzANCisjZGVmaW5lIEFUOTFDX1BCMzBfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjMwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAgICAgICAoQVQ5MUNfUElPX1BCMzApIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEI0ICAgICAgICAgICAgICgxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjQNCisjZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKEFUOTFDX1BJT19QQjQpIC8vICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAgICAgICgxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjUNCisjZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAgICAgICAgKEFUOTFDX1BJT19QQjUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KKyNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BCNikgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNyAgICAgICAgICAgICAoMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgIChBVDkxQ19QSU9fUEI3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICAgICAgKDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOA0KKyNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICAgICAgICAoQVQ5MUNfUElPX1BCOCkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KKyNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICAgICAgICAoQVQ5MUNfUElPX1BCOSkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0DQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgICAgICAgICAgICggMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkNCisjZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAgICAgICAgICAgKCAxKSAvLyBTeXN0ZW0gUGVyaXBoZXJhbA0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICAgICAgICAgICAoIDIpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICAgICAgICAgICAoIDMpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQg0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMCAgICAgICAgICAgICAoIDQpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwDQorI2RlZmluZSBBVDkxQ19JRF9TUEkxICAgICAgICAgICAgICggNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCisjZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAgICAgICAgICAgKCA2KSAvLyBVU0FSVCAwDQorI2RlZmluZSBBVDkxQ19JRF9VUzEgICAgICAgICAgICAgICggNykgLy8gVVNBUlQgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICAgICAgICAgICAoIDgpIC8vIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgICAgICAgICAgICggOSkgLy8gVHdvLVdpcmUgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9QV01DICAgICAgICAgICAgICgxMCkgLy8gUFdNIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAgICAgICAgICAgKDExKSAvLyBVU0IgRGV2aWNlIFBvcnQNCisjZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAgICAgICAgICAgKDEyKSAvLyBUaW1lciBDb3VudGVyIDANCisjZGVmaW5lIEFUOTFDX0lEX1RDMSAgICAgICAgICAgICAgKDEzKSAvLyBUaW1lciBDb3VudGVyIDENCisjZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAgICAgICAgICAgKDE0KSAvLyBUaW1lciBDb3VudGVyIDINCisjZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAgICAgICAgICAgKDE1KSAvLyBDb250cm9sIEFyZWEgTmV0d29yayBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9FTUFDICAgICAgICAgICAgICgxNikgLy8gRXRoZXJuZXQgTUFDDQorI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAgICgxNykgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgICAgICAgICAgICgxOCkgLy8gQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAxMjgtYml0DQorI2RlZmluZSBBVDkxQ19JRF9UREVTICAgICAgICAgICAgICgxOSkgLy8gVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgICAoMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAgICgyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICAgICAgKDIyKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgICAoMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAgICgyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICAgICAgKDI1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgICAoMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAgICgyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICAgICAgKDI4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgICAoMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgICAgICAgICAgICgzMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApDQorI2RlZmluZSBBVDkxQ19JRF9JUlExICAgICAgICAgICAgICgzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQorDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChTWVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAgICAoMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAgICAoMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICAgICgweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAgICAoMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgICAgKDB4RkZGRTQwMDApIC8vIChTUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgICAgKDB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICAgICgweEZGRkUwMDAwKSAvLyAoU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICAgICgweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICAgICgweEZGRkM0MDAwKSAvLyAoVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgICAgKDB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgICAgKDB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAgICAoMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICAgICgweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgICAgKDB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICAgICgweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgICAgKDB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICAgICgweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAgICAoMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQ0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAgICAoMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAgICAoMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAgICAoMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAgICAoMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAgICAoMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAgICAoMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAgICAoMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAgICAoMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAgICAoMHhGRkZEMDAwMCkgLy8gKENBTikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICAgICgweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgICAgKDB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgICAgKDB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAgICAoMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgICAgKDB4RkZGQTgwMDApIC8vIChUREVTKSBCYXNlIEFkZHJlc3MNCisNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgICAgICAgICAgICAgICgweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgICAgICAgICAoMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAgICAgICAgICAgICAoMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICAgICAgICAoMHgwMDA0MDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKQ0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0lTUl9TdXBwb3J0LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9JU1JfU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWNiODMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9JU1JfU3VwcG9ydC5oCkBAIC0wLDAgKzEsMTMwIEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7DQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCisNCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gCQkJCQkNCisJU1RNREIJU1AhLCB7UjB9DQorDQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KKw0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAJCQkJCQkNCisJU1RNREIJUjAhLCB7TFJ9DQorDQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQorDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAJCQkNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAJCQ0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCisNCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nIA0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQorDQorCUVORE0NCisNCisNCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQorDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAJDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gCQkJCQkNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAJCQkJCQkJCQkNCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KKw0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suIAkJCQkNCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCisNCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gCQkJCQkJCQkJDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCisNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCisNCisJRU5ETQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1M2NC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03UzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwMTJjNAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1M2NC5oCkBAIC0wLDAgKzEsMzI2NSBAQAorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBUaGUgc29mdHdhcmUgaXMgZGVsaXZlcmVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eSBvciBjb25kaXRpb24gb2YgYW55DQorLy8qIGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkIG9yIHN0YXR1dG9yeS4gVGhpcyBpbmNsdWRlcyB3aXRob3V0DQorLy8qIGxpbWl0YXRpb24gYW55IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiB3aXRoIHJlc3BlY3QgdG8gbWVyY2hhbnRhYmlsaXR5IG9yDQorLy8qIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG9yIGFnYWluc3QgdGhlIGluZnJpbmdlbWVudHMgb2YNCisvLyogaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBvdGhlcnMuDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBGaWxlIE5hbWUgICAgICAgICAgIDogbGliX0FUOTFTQU03UzY0LmgNCisvLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03UzY0IGlubGluZWQgZnVuY3Rpb25zDQorLy8qIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNy8xNi8yMDA0ICgwNzo0MzowOSkNCisvLyoNCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNLmgvMS4zL1RodSBNYXIgMjUgMTU6MTk6MTQgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BkY18xMzYzZC5oLzEuMi9XZWQgRmViIDE5IDA5OjI1OjIyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kYmd1LmgvMS4xL0ZyaSBKYW4gMzEgMTI6MTg6NDAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTM6MjM6NTIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTS5oLzEuNi9UdWUgQXByIDI3IDEzOjUzOjUyIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMi9GcmkgSmFuIDMxIDEyOjE5OjM4IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjMvRnJpIEphbiAzMSAxMjoxOTo0OCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljLmgvMS4zL0ZyaSBKdWwgMTIgMDc6NDY6MTIgMjAwMi8vDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyNpZm5kZWYgbGliX0FUOTFTQU03UzY0X0gNCisjZGVmaW5lIGxpYl9BVDkxU0FNN1M2NF9IDQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorDQorI2RlZmluZSBBVDkxQ19NQ19DT1JSRUNUX0tFWSAgKCh1bnNpZ25lZCBpbnQpIDB4NUEgPDwgMjQpIC8vIChNQykgQ29ycmVjdCBQcm90ZWN0IEtleQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX1JlbWFwDQorLy8qIFxicmllZiBNYWtlIFJlbWFwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfUmVtYXAgKHZvaWQpICAgICAvLyAgDQorew0KKyAgICBBVDkxUFNfTUMgcE1DID0gKEFUOTFQU19NQykgQVQ5MUNfQkFTRV9NQzsNCisgICAgDQorICAgIHBNQy0+TUNfUkNSID0gQVQ5MUNfTUNfUkNCOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8gV3JpdGUgdG8gdGhlIEZNUiByZWdpc3Rlcg0KKwlwTUMtPk1DX0ZNUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKA0KKwlBVDkxUFNfTUMgcE1DKSAvLyBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBNQy0+TUNfRk1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04NCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOKA0KKwlpbnQgbWFzdGVyX2Nsb2NrKSAvLyBtYXN0ZXIgY2xvY2sgaW4gSHoNCit7DQorCXJldHVybiAobWFzdGVyX2Nsb2NrLzEwMDAwMDAgKzIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCit7DQorCXBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRTdGF0dXMoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcE1DLT5NQ19GU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19NQyBwTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyhwTUMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX01DIHBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRTdGF0dXMocE1DKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KK3sNCisJcFBEQy0+UERDX1JOUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUk5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFR4DQorLy8qIFxicmllZiBTZXQgdGhlIG5leHQgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0VHggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZA0KK3sNCisJcFBEQy0+UERDX1ROUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVE5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0UngNCisvLyogXGJyaWVmIFNldCB0aGUgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQNCit7DQorCXBQREMtPlBEQ19SUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCit7DQorCXBQREMtPlBEQ19UUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVENSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgcmVjZWl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UTkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19SQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19STkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX09wZW4NCisvLyogXGJyaWVmIE9wZW4gUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycywgcmUtZW5hYmxlIFJYIGFuZCBUWA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19PcGVuICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCisNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KKyAgICAvLyogRW5hYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19FbmFibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0VuYWJsZVR4KHBQREMpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfQ2xvc2UgKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRGlzYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRGlzYWJsZVR4KHBQREMpOw0KKw0KKwkvLyogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QNCisJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlpZiAoQVQ5MUZfUERDX0lzVHhFbXB0eShwUERDKSkgew0KKwkJLy8qIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyKTsNCisJCXJldHVybiAyOw0KKwl9DQorCWVsc2UgaWYgKEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KHBQREMpKSB7DQorCQkvLyogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKwllbHNlIHsNCisJCS8vKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4NCisJCXJldHVybiAwOw0KKwl9DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfUERDIHBQREMsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJaWYgKEFUOTFGX1BEQ19Jc1J4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0UnhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIERCR1UNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgREJHVSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcERiZ3UtPkRCR1VfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIERCR1UgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwRGJndSkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTU0MNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKiBEZWZpbmUgdGhlIHN0YW5kYXJkIEkyUyBtb2RlIGNvbmZpZ3VyYXRpb24NCisNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiAgbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSAgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9NQVNURVJfVFhfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJICAgQVQ5MUNfU1NDX0NLU19ESVYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tHX05PTkUgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgIEFUOTFDX1NTQ19TVFRPVVQgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgKCgxPDwxNikgJiBBVDkxQ19TU0NfU1RURExZKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoKChuYl9iaXRfYnlfc2xvdCpuYl9zbG90X2J5X2ZyYW1lKS8yKS0xKSA8PDI0KSkNCisNCisNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMNCisvLyogCQkJIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMNCisjZGVmaW5lIEFUOTFDX0kyU19BU1lfVFhfRlJBTUVfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJKG5iX2JpdF9ieV9zbG90LTEpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUFUOTFDX1NTQ19NU0JGICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkoKChuYl9zbG90X2J5X2ZyYW1lLTEpPDw4KSAmIEFUOTFDX1NTQ19EQVROQikgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfYml0X2J5X3Nsb3QtMSk8PDE2KSAmIEFUOTFDX1NTQ19GU0xFTikgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSkNCisNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUgKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkKSAgICAgLy8gXGFyZyBTU0MgYmF1ZHJhdGUNCit7DQorICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZTsNCisgICAgICAgIC8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorICAgICAgICBpZiAoc3BlZWQgPT0gMCkNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAwOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgYmF1ZF92YWx1ZSA9ICh1bnNpZ25lZCBpbnQpIChtYWluQ2xvY2sgKiAxMCkvKDIqc3BlZWQpOw0KKyAgICAgICAgICAgaWYgKChiYXVkX3ZhbHVlICUgMTApID49IDUpDQorICAgICAgICAgICAgICAgICAgYmF1ZF92YWx1ZSA9IChiYXVkX3ZhbHVlIC8gMTApICsgMTsNCisgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICBiYXVkX3ZhbHVlIC89IDEwOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcFNTQy0+U1NDX0NNUiA9IGJhdWRfdmFsdWU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBTU0MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ29uZmlndXJlICgNCisgICAgICAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3lzdF9jbG9jaywgIC8vIFxhcmcgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlLCAgIC8vIFxhcmcgRXhwZWN0ZWQgQmF1ZCBSYXRlIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfcngsICAgIC8vIFxhcmcgUmVjZWl2ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV9yeCwgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eCwgICAgLy8gXGFyZyBUcmFuc21pdHRlciBDbG9jayBQYXJhbWV0ZXJzDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R4KSAgICAgLy8gXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQNCit7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFNTQy0+U1NDX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KKw0KKyAgICAvLyogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyDQorCXBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19TV1JTVCB8IEFUOTFDX1NTQ19SWERJUyB8IEFUOTFDX1NTQ19UWERJUyA7DQorDQorICAgIC8vKiBEZWZpbmUgdGhlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MUZfU1NDX1NldEJhdWRyYXRlKHBTU0MsIHN5c3RfY2xvY2ssIGJhdWRfcmF0ZSk7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkNNUiA9ICBjbG9ja19yeDsNCisNCisgICAgIC8vKiBXcml0ZSB0aGUgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfVENNUiA9ICBjbG9ja190eDsNCisNCisgICAgIC8vKiBXcml0ZSB0aGUgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19SRk1SID0gIG1vZGVfcng7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RGTVIgPSAgbW9kZV90eDsNCisNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorCUFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpKTsNCisNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCisgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgcmVjZWl2aW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVSeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlcg0KKyAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfUlhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCisgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1RYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgc2VuZGluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgIHRyYW5zbWl0dGVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgU1NDIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBTU0MtPlNTQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfU1NDIHBTU0MsIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBTU0MtPlNTQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNTQy0+U1NDX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19TZW5kRnJhbWUoDQorCUFUOTFQU19TU0MgcFNTQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBTc2MtPlNTQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBTU0MgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMocFNzYykgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTUEkNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9PcGVuDQorLy8qIFxicmllZiBPcGVuIGEgU1BJIFBvcnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9PcGVuICgNCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudWxsKSAgLy8gXGFyZw0KK3sNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdDcw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFNQSSBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdDcyAoDQorCUFUOTFQU19TUEkgcFNQSSwgICAgIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgY3MsICAgICAvLyBTUEkgY3MgbnVtYmVyICgwIHRvIDMpDQorIAlpbnQgdmFsKSAgIC8vICBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDU1IgcmVnaXN0ZXINCisJKihwU1BJLT5TUElfQ1NSICsgY3MpID0gdmFsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1Jlc2V0DQorLy8qIFxicmllZiBSZXNldCB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUmVzZXQgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NXUlNUOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZSAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdNb2RlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ01vZGUgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQQ1MNCisvLyogXGJyaWVmIFN3aXRjaCB0byB0aGUgY29ycmVjdCBQQ1Mgb2YgU1BJIE1vZGUgUmVnaXN0ZXIgOiBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ1BDUyAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWNoYXIgUENTX0RldmljZSkgLy8gUENTIG9mIHRoZSBEZXZpY2UNCit7CQ0KKyAJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfTVIgJj0gMHhGRkYwRkZGRjsNCisJcFNQSS0+U1BJX01SIHw9ICggKFBDU19EZXZpY2U8PDE2KSAmIEFUOTFDX1NQSV9QQ1MgKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBTUEk6IGRpc2FibGUgSVQgZGlzYWJsZSB0cmFuc2ZlcnQsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DbG9zZSAoDQorCUFUOTFQU19TUEkgcFNQSSkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorew0KKyAgICAvLyogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3Rlcg0KKyAgICBwU1BJLT5TUElfQ1NSWzBdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbMV0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsyXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzNdID0gMCA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgU1BJIG1vZGUNCisgICAgcFNQSS0+U1BJX01SID0gMCAgOw0KKw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwU1BJLT5TUElfSURSID0gMHhGRkZGRkZGRiA7DQorDQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFNQSS0+U1BJX1JQUikpOw0KKw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQorew0KKyAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KKyAgICB2YWx1ZV9mb3JfY3MgPSAofigxIDw8IGNzX251bWJlcikpICYgMHhGOyAgLy9QbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyDQorICAgIHBTUEktPlNQSV9URFIgPSAoY2hhcmFjdGVyICYgMHhGRkZGKSB8ICh2YWx1ZV9mb3JfY3MgPDwgMTYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KK3sNCisgICAgcmV0dXJuKChwU1BJLT5TUElfUkRSKSAmIDB4RkZGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwU3BpKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BXTUMgcFBXTSkgLy8gcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBXTS0+UFdNQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFBXTSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQV00pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRTdGF0dXMocFBXTSkgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0NmZ0NoYW5uZWwNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ0NoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsIC8vIFxhcmcgIFBXTSBtb2RlDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLCAvLyBcYXJnIFBXTSBwZXJpb2QNCisgICAgICAgIHVuc2lnbmVkIGludCBkdXR5KSAvLyBcYXJnIFBXTSBkdXR5IGN5Y2xlDQorew0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DTVIgPSBtb2RlOw0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DRFRZUiA9IGR1dHk7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NQUkRSID0gcGVyaW9kOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fU3RhcnRDaGFubmVsDQorLy8qIFxicmllZiBFbmFibGUgY2hhbm5lbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RhcnRDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KK3sNCisJcFBXTS0+UFdNQ19FTkEgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fU3RvcENoYW5uZWwNCisvLyogXGJyaWVmIERpc2FibGUgY2hhbm5lbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RvcENoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQorew0KKwlwUFdNLT5QV01DX0RJUyA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsDQorLy8qIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IHVwZGF0ZSkgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCit7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NVUERSID0gdXBkYXRlOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBUQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwVGMtPlRDX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwVGMtPlRDX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVEMgcFRjKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwVGMtPlRDX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVEMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUYykgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIFNDRVIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX1NDRVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0RSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0RSID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN5c0Nsa1N0YXR1c1JlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN5c0Nsa1N0YXR1c1JlZyAoDQorCUFUOTFQU19QTUMgcFBNQyAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19TQ1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaElkcykgIC8vIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZQ0KK3sNCisJcFBNQy0+UE1DX1BDRVIgPSBwZXJpcGhJZHM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIERpc2FibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoSWRzKSAgLy8gXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlDQorew0KKwlwUE1DLT5QTUNfUENEUiA9IHBlcmlwaElkczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrDQorLy8qIFxicmllZiBHZXQgcGVyaXBoZXJhbCBjbG9jayBzdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1BDU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcENLR1ItPkNLR1JfTU9SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBDS0dSLT5DS0dSX01PUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvcg0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcENLR1ItPkNLR1JfTU9SIHw9IEFUOTFDX0NLR1JfTU9TQ0VOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvcg0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3IgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcENLR1ItPkNLR1JfTU9SICY9IH5BVDkxQ19DS0dSX01PU0NFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUNCisvLyogXGJyaWVmIENmZyBNT1IgUmVnaXN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBtYWluIG9zYyBzdGFydHVwIHRpbWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZSAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzdGFydHVwX3RpbWUsICAvLyBcYXJnIG1haW4gb3NjIHN0YXJ0dXAgdGltZSBpbiBtaWNyb3NlY29uZCAodXMpDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJcENLR1ItPkNLR1JfTU9SICY9IH5BVDkxQ19DS0dSX09TQ09VTlQ7DQorCXBDS0dSLT5DS0dSX01PUiB8PSAoKHNsb3dDbG9jayAqIHN0YXJ0dXBfdGltZSkvKDgqMTAwMDAwMCkpIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENLR1ItPkNLR1JfTUNGUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2sNCisvLyogXGJyaWVmIFJldHVybiBNYWluIGNsb2NrIGluIEh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9jayAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJcmV0dXJuICgocENLR1ItPkNLR1JfTUNGUiAgJiBBVDkxQ19DS0dSX01BSU5GKSAqIHNsb3dDbG9jaykgPj4gNDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ01DS1JlZw0KKy8vKiBcYnJpZWYgQ2ZnIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdNQ0tSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBQTUMtPlBNQ19NQ0tSID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1DS1JlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1DS1JlZygNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfTUNLUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sNCisvLyogXGJyaWVmIFJldHVybiBtYXN0ZXIgY2xvY2sgaW4gSHogd2hpY2ggY29ycmVwb25kcyB0byBwcm9jZXNzb3IgY2xvY2sgZm9yIEFSTTcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwl1bnNpZ25lZCBpbnQgcmVnID0gcFBNQy0+UE1DX01DS1I7DQorCXVuc2lnbmVkIGludCBwcmVzY2FsZXIgPSAoMSA8PCAoKHJlZyAmIEFUOTFDX1BNQ19QUkVTKSA+PiAyKSk7DQorCXVuc2lnbmVkIGludCBwbGxEaXZpZGVyLCBwbGxNdWx0aXBsaWVyOw0KKw0KKwlzd2l0Y2ggKHJlZyAmIEFUOTFDX1BNQ19DU1MpIHsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSzogLy8gU2xvdyBjbG9jayBzZWxlY3RlZA0KKwkJCXJldHVybiBzbG93Q2xvY2sgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEs6IC8vIE1haW4gY2xvY2sgaXMgc2VsZWN0ZWQNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfUExMX0NMSzogLy8gUExMQiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJlZyA9IHBDS0dSLT5DS0dSX1BMTFI7DQorCQkJcGxsRGl2aWRlciAgICA9IChyZWcgICYgQVQ5MUNfQ0tHUl9ESVYpOw0KKwkJCXBsbE11bHRpcGxpZXIgPSAoKHJlZyAgJiBBVDkxQ19DS0dSX01VTCkgPj4gMTYpICsgMTsNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwbGxEaXZpZGVyICogcGxsTXVsdGlwbGllciAvIHByZXNjYWxlcjsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBDSw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUENLICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBjaywgIC8vIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNw0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBQTUMtPlBNQ19QQ0tSW3Bja10gPSBtb2RlOw0KKwlwUE1DLT5QTUNfU0NFUiA9ICgxIDw8IHBjaykgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGNrKSAgLy8gXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3DQorew0KKwlwUE1DLT5QTUNfU0NEUiA9ICgxIDw8IHBjaykgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgUE1DIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVJdCAoDQorCUFUOTFQU19QTUMgcFBNQywgICAgIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQTUMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVJdCAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN0YXR1cyggLy8gXHJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19QTUMgcFBNQykgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUE1DIHBQTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBNQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBNQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUE1DIHBQTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUE1DX0dldFN0YXR1cyhwUE1DKSAmIGZsYWcpOw0KK30vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQURDIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgICAgIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldFN0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQURDIHBBREMpIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0FEQyBwQURDLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBBREMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBREMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX0FEQyBwQURDLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX0FEQ19HZXRTdGF0dXMocEFEQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQURDIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX01SOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1RpbWluZ3MNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgZGlmZmVyZW50IG5lY2Vzc2FyeSB0aW1pbmdzIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdUaW1pbmdzICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1ja19jbG9jaywgLy8gaW4gTUh6IA0KKwl1bnNpZ25lZCBpbnQgYWRjX2Nsb2NrLCAvLyBpbiBNSHogDQorCXVuc2lnbmVkIGludCBzdGFydHVwX3RpbWUsIC8vIGluIHVzIA0KKwl1bnNpZ25lZCBpbnQgc2FtcGxlX2FuZF9ob2xkX3RpbWUpCS8vIGluIG5zICANCit7DQorCXVuc2lnbmVkIGludCBwcmVzY2FsLHN0YXJ0dXAsc2h0aW07DQorCQ0KKwlwcmVzY2FsID0gbWNrX2Nsb2NrLygyKmFkY19jbG9jaykgLSAxOw0KKwlzdGFydHVwID0gYWRjX2Nsb2NrKnN0YXJ0dXBfdGltZS84IC0gMTsNCisJc2h0aW0gPSBhZGNfY2xvY2sqc2FtcGxlX2FuZF9ob2xkX3RpbWUvMTAwMCAtIDE7DQorCQ0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9ICggKHByZXNjYWw8PDgpICYgQVQ5MUNfQURDX1BSRVNDQUwpIHwgKCAoc3RhcnR1cDw8MTYpICYgQVQ5MUNfQURDX1NUQVJUVVApIHwgKCAoc2h0aW08PDI0KSAmIEFUOTFDX0FEQ19TSFRJTSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENIRVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0NIRVIgPSBjaGFubmVsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRGlzYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRGlzYWJsZUNoYW5uZWwgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENIRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0NIRFIgPSBjaGFubmVsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0hTUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24NCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlcXVlc3QgZm9yIGEgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVyc2lvbiANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1RBUlQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfU29mdFJlc2V0DQorLy8qIFxicmllZiBTb2Z0d2FyZSByZXNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TV1JTVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBMYXN0IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGEgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfTENEUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMCBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDAgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMSBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDEgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMiBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDIgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMyBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMzsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0DQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNCBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1DQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNSBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2DQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNiBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3DQorLy8qIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNyBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNzsJDQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoDQorLy8qIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaEFFbmFibGUsICAvLyBcYXJnIFBFUklQSCBBIHRvIGVuYWJsZQ0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSkgIC8vIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlDQorDQorew0KKwlwUGlvLT5QSU9fQVNSID0gcGVyaXBoQUVuYWJsZTsNCisJcFBpby0+UElPX0JTUiA9IHBlcmlwaEJFbmFibGU7DQorCXBQaW8tPlBJT19QRFIgPSAocGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUpOyAvLyBTZXQgaW4gUGVyaXBoIG1vZGUNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ091dHB1dA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBvdXRwdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBpb0VuYWJsZSkgICAgICAvLyBcYXJnIFBJTyB0byBiZSBlbmFibGVkDQorew0KKwlwUGlvLT5QSU9fUEVSID0gcGlvRW5hYmxlOyAvLyBTZXQgaW4gUElPIG1vZGUNCisJcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgLy8gQ29uZmlndXJlIGluIE91dHB1dA0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8gRGlzYWJsZSBvdXRwdXQNCisJcFBpby0+UElPX09EUiAgPSBpbnB1dEVuYWJsZTsNCisJcFBpby0+UElPX1BFUiAgPSBpbnB1dEVuYWJsZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24NCisJcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQorCXBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQdWxsdXANCisvLyogXGJyaWVmIEVuYWJsZSBwdWxsdXAgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1B1bGx1cCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcHVsbHVwRW5hYmxlKSAgIC8vIFxhcmcgZW5hYmxlIHB1bGx1cCBvbiBQSU8NCit7DQorCQkvLyBDb25uZWN0IG9yIG5vdCBQdWxsdXANCisJcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCisJcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUNCisvLyogXGJyaWVmIEVuYWJsZSBkaXJlY3QgZHJpdmUgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBkaXJlY3REcml2ZSkgICAgLy8gXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZQ0KKw0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyDQorLy8qIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRGaWx0ZXIpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXINCisNCit7DQorCS8vIENvbmZpZ3VyZSB0aGUgRGlyZWN0IERyaXZlDQorCXBQaW8tPlBJT19JRkRSICA9IH5pbnB1dEZpbHRlcjsNCisJcFBpby0+UElPX0lGRVIgID0gaW5wdXRGaWx0ZXI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBpbnB1dCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0KCAvLyBccmV0dXJuIFBJTyBpbnB1dA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgaW5wdXQgZmxhZyBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0U2V0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXQocFBpbykgJiBmbGFnKTsNCit9DQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX1NldE91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDEgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19TZXRPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBzZXQNCit7DQorCXBQaW8tPlBJT19TT0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NsZWFyT3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMCBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NsZWFyT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZA0KK3sNCisJcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQNCisvLyogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZA0KK3sNCisJcFBpby0+UElPX09EU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCANCit7DQorICAgICAgICBwUGlvLT5QSU9fUEVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0Rpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkIA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19QRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLy8gXHJldHVybiBQSU8gU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fUFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dERpc2FibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dERpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091cHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlDQorLy8qIFxicmllZiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUZFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRkRSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggLy8gXHJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lGU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnB1dCBmaWx0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBEYXRhIFN0YXR1cyANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgDQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZQ0KKy8vKiBcYnJpZWYgTXVsdGkgRHJpdmVyIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX01ERFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fTURTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE11bHRpRHJpdmVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEEgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbg0KK3sNCisgICAgICAgIHBQaW8tPlBJT19BU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiANCit7DQorICAgICAgICBwUGlvLT5QSU9fQlNSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBBQiBSZWdpc3RlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PV0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09XRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT1dTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dFdyaXRlIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwDQorLy8qIFxicmllZiBSZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCAvLyBccmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCANCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QUFVTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuICh+QVQ5MUZfUElPX0dldENmZ1B1bGx1cChwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRXSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVFdJIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVFdJIHBUV0ksIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVFdJIGluIG1hc3RlciBtb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NvbmZpZ3VyZSAoIEFUOTFQU19UV0kgcFRXSSApICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBUV0ktPlRXSV9JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCisNCisgICAgLy8qIFJlc2V0IHBlcmlwaGVyYWwNCisJcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NXUlNUOw0KKw0KKwkvLyogU2V0IE1hc3RlciBtb2RlDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9NU0VOIHwgQVQ5MUNfVFdJX1NWRElTOw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBUd2ktPlRXSV9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUV0kgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMocFR3aSkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVU0FSVA0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUNCisvLyogXGJyaWVmIENhbGN1bGF0ZSB0aGUgYmF1ZHJhdGUNCisvLyogU3RhbmRhcmQgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX01PREUgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICkNCisNCisvLyogU3RhbmRhcmQgRXh0ZXJuYWwgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX1NDS19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfRVhUICkNCisNCisvLyogU3RhbmRhcmQgU3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfU1lOQ19NT0RFICggQVQ5MUNfVVNfU1lOQyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorDQorLy8qIFNDSyB1c2VkIExhYmVsDQorI2RlZmluZSBBVDkxQ19VU19TQ0tfVVNFRCAoQVQ5MUNfVVNfQ0tMTyB8IEFUOTFDX1VTX0NMS1NfRVhUKQ0KKw0KKy8vKiBTdGFuZGFyZCBJU08gVD0wIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX0lTT19SRUFERVJfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgKyBcDQorCQkJCQkgICAJCSBBVDkxQ19VU19DTEtTX0NMT0NLICtcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19QQVJfRVZFTiArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfQ0tMTyArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfT1ZFUikNCisNCisvLyogU3RhbmRhcmQgSVJEQSBtb2RlDQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19JUkRBX01PREUgKCAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICkNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19CYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgQ2FsdWN1bGF0ZSBiYXVkX3ZhbHVlIGFjY29yZGluZyB0byB0aGUgbWFpbiBjbG9jayBhbmQgdGhlIGJhdWQgcmF0ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfQmF1ZHJhdGUgKA0KKwljb25zdCB1bnNpZ25lZCBpbnQgbWFpbl9jbG9jaywgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCWNvbnN0IHVuc2lnbmVkIGludCBiYXVkX3JhdGUpICAvLyBcYXJnIFVBUlQgYmF1ZHJhdGUNCit7DQorCXVuc2lnbmVkIGludCBiYXVkX3ZhbHVlID0gKChtYWluX2Nsb2NrKjEwKS8oYmF1ZF9yYXRlICogMTYpKTsNCisJaWYgKChiYXVkX3ZhbHVlICUgMTApID49IDUpDQorCQliYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKwllbHNlDQorCQliYXVkX3ZhbHVlIC89IDEwOw0KKwlyZXR1cm4gYmF1ZF92YWx1ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRCYXVkcmF0ZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1haW5DbG9jaywgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KK3sNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJcFVTQVJULT5VU19CUkdSID0gQVQ5MUZfVVNfQmF1ZHJhdGUobWFpbkNsb2NrLCBzcGVlZCk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZA0KKy8vKiBcYnJpZWYgU2V0IFVTQVJUIHRpbWVndWFyZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldFRpbWVndWFyZCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCkgLy8gXGFyZyB0aW1lZ3VhcmQgdmFsdWUNCit7DQorCS8vKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfVFRHUiA9IHRpbWVndWFyZCA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVVNBUlQgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVJdCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVTQVJULT5VU19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBVU0FSVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0NvbmZpZ3VyZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssICAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJdW5zaWduZWQgaW50IG1vZGUgLCAgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCBiYXVkUmF0ZSAsICAvLyBcYXJnIGJhdWRyYXRlIHRvIGJlIHByb2dyYW1tZWQNCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8vIFxhcmcgdGltZWd1YXJkIHRvIGJlIHByb2dyYW1tZWQNCit7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisgICAgcFVTQVJULT5VU19JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCisNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlggfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfVFhESVMgOw0KKw0KKwkvLyogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKwlBVDkxRl9VU19TZXRCYXVkcmF0ZShwVVNBUlQsIG1haW5DbG9jaywgYmF1ZFJhdGUpOw0KKw0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlBVDkxRl9VU19TZXRUaW1lZ3VhcmQocFVTQVJULCB0aW1lZ3VhcmQpOw0KKw0KKyAgICAvLyogQ2xlYXIgVHJhbnNtaXQgYW5kIFJlY2VpdmUgQ291bnRlcnMNCisgICAgQVQ5MUZfUERDX09wZW4oKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpKTsNCisNCisgICAgLy8qIERlZmluZSB0aGUgVVNBUlQgbW9kZQ0KKyAgICBwVVNBUlQtPlVTX01SID0gbW9kZSAgOw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIEVuYWJsZSByZWNlaXZlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRW5hYmxlICB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRSeA0KKy8vKiBcYnJpZWYgUmVzZXQgUmVjZWl2ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0UnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisJLy8qIFJlc2V0IHJlY2VpdmVyDQorCXBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWDsNCisgICAgLy8qIFJlLUVuYWJsZSByZWNlaXZlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRUeA0KKy8vKiBcYnJpZWYgUmVzZXQgVHJhbnNtaXR0ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0VHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisJLy8qIFJlc2V0IHRyYW5zbWl0dGVyDQorCXBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RUWDsNCisgICAgLy8qIEVuYWJsZSB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIFJlY2VpdmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIFRyYW5zbWl0dGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFVTQVJUOiBkaXNhYmxlIElUIGRpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLCBjbG9zZSBQREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19DbG9zZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogUmVzZXQgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorICAgIHBVU0FSVC0+VVNfQlJHUiA9IDAgOw0KKw0KKyAgICAvLyogUmVzZXQgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IDAgIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisgICAgcFVTQVJULT5VU19UVEdSID0gMDsNCisNCisgICAgLy8qIERpc2FibGUgYWxsIGludGVycnVwdHMNCisgICAgcFVTQVJULT5VU19JRFIgPSAweEZGRkZGRkZGIDsNCisNCisgICAgLy8qIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzDQorICAgIEFUOTFGX1BEQ19DbG9zZSgoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUikpOw0KKw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUyB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SU1RSWCA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1R4UmVhZHkNCisvLyogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSB3cml0dGVuIGluIFVTX1RIUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfVHhSZWFkeSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1RYUkRZKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUnhSZWFkeQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgaW4gVVNfUkhSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SeFJlYWR5ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfUlhSRFkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FcnJvcg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBlcnJvciBmbGFnDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19FcnJvciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmDQorICAgIAkoQVQ5MUNfVVNfT1ZSRSB8ICAvLyBPdmVycnVuIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfRlJBTUUgfCAvLyBGcmFtaW5nIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfUEFSRSkpOyAgLy8gUGFyaXR5IGVycm9yDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1B1dENoYXINCisvLyogXGJyaWVmIFNlbmQgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgcmVhZHkgdG8gc2VuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1B1dENoYXIgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwlpbnQgY2hhcmFjdGVyICkNCit7DQorICAgIHBVU0FSVC0+VVNfVEhSID0gKGNoYXJhY3RlciAmIDB4MUZGKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VTX0dldENoYXIgKA0KKwljb25zdCBBVDkxUFNfVVNBUlQgcFVTQVJUKQ0KK3sNCisgICAgcmV0dXJuKChwVVNBUlQtPlVTX1JIUikgJiAweDFGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlcg0KKy8vKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBJckRhIGZpbHRlciB0cmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRJcmRhRmlsdGVyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJdW5zaWduZWQgY2hhciB2YWx1ZQ0KKykNCit7DQorCXBVU0FSVC0+VVNfSUYgPSB2YWx1ZTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVRFANCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVURQIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBVRFAtPlVEUF9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0QWRkcmVzcw0KKy8vKiBcYnJpZWYgU2V0IFVEUCBmdW5jdGlvbmFsIGFkZHJlc3MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0QWRkcmVzcyAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgYWRkcmVzcykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KK3sNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIGVuZHBvaW50cyB0byBiZSBlbmFibGVkDQorew0KKwlwVURQLT5VRFBfR0xCU1RBVEUgIHw9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIGVuZHBvaW50cyB0byBiZSBlbmFibGVkDQorew0KKwlwVURQLT5VRFBfR0xCU1RBVEUgICY9IH4oZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9TZXRTdGF0ZQ0KKy8vKiBcYnJpZWYgU2V0IFVEUCBEZXZpY2Ugc3RhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0U3RhdGUgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KK3sNCisJcFVEUC0+VURQX0dMQlNUQVRFICAmPSB+KEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcpOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgIHw9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9HZXRTdGF0ZQ0KKy8vKiBcYnJpZWYgcmV0dXJuIFVEUCBEZXZpY2Ugc3RhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRTdGF0ZSAoIC8vIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUNCisJQVQ5MVBTX1VEUCBwVURQKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAocFVEUC0+VURQX0dMQlNUQVRFICAmIChBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9SZXNldEVwDQorLy8qIFxicmllZiBSZXNldCBVRFAgZW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfUmVzZXRFcCAoIC8vIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBFbmRwb2ludHMgdG8gYmUgcmVzZXQNCit7DQorCXBVRFAtPlVEUF9SU1RFUCA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFN0YWxsDQorLy8qIFxicmllZiBFbmRwb2ludCB3aWxsIFNUQUxMIHJlcXVlc3RzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwU3RhbGwoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9GT1JDRVNUQUxMOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBXcml0ZQ0KKy8vKiBcYnJpZWYgV3JpdGUgdmFsdWUgaW4gdGhlIERQUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFdyaXRlKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCwgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorCXVuc2lnbmVkIGNoYXIgdmFsdWUpICAgICAvLyBcYXJnIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIERQUg0KK3sNCisJcFVEUC0+VURQX0ZEUltlbmRwb2ludF0gPSB2YWx1ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwUmVhZA0KKy8vKiBcYnJpZWYgUmV0dXJuIHZhbHVlIGZyb20gdGhlIERQUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwUmVhZCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcmV0dXJuIHBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBFbmRPZldyDQorLy8qIFxicmllZiBOb3RpZnkgdGhlIFVEUCB0aGF0IHZhbHVlcyBpbiBEUFIgYXJlIHJlYWR5IHRvIGJlIHNlbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBFbmRPZldyKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcENsZWFyDQorLy8qIFxicmllZiBDbGVhciBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBDbGVhcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdICY9IH4oZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFNldA0KKy8vKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCit7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFN0YXR1cygNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcmV0dXJuIHBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMocFVkcCkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBSUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKyNkZWZpbmUgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUgKCh2b2lkICgqKSAoKSkgMHhFNTFGRkYyMCkgLy8gbGRyLCBwYywgW3BjLCAjLSZGMjBdDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0DQorLy8qIFxicmllZiBJbnRlcnJ1cHQgSGFuZGxlciBJbml0aWFsaXphdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQsICAgICAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KKwl1bnNpZ25lZCBpbnQgcHJpb3JpdHksICAgLy8gXGFyZyBwcmlvcml0eSB0byBnaXZlIHRvIHRoZSBpbnRlcnJ1cHQNCisJdW5zaWduZWQgaW50IHNyY190eXBlLCAgIC8vIFxhcmcgYWN0aXZhdGlvbiBhbmQgc2Vuc2Ugb2YgYWN0aXZhdGlvbg0KKwl2b2lkICgqbmV3SGFuZGxlcikgKHZvaWQpICkgLy8gXGFyZyBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcg0KK3sNCisJdW5zaWduZWQgaW50IG9sZEhhbmRsZXI7DQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsNCisNCisgICAgb2xkSGFuZGxlciA9IHBBaWMtPkFJQ19TVlJbaXJxX2lkXTsNCisNCisgICAgbWFzayA9IDB4MSA8PCBpcnFfaWQgOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5DQorICAgIHBBaWMtPkFJQ19TVlJbaXJxX2lkXSA9ICh1bnNpZ25lZCBpbnQpIG5ld0hhbmRsZXIgOw0KKyAgICAvLyogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorICAgIHBBaWMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQorDQorCXJldHVybiBvbGRIYW5kbGVyOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19FbmFibGVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCApIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorew0KKyAgICAvLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRUNSID0gMHgxIDw8IGlycV9pZCA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCit7DQorICAgIHVuc2lnbmVkIGludCBtYXNrID0gMHgxIDw8IGlycV9pZDsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2xlYXJJdA0KKy8vKiBcYnJpZWYgQ2xlYXIgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2xlYXJJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KK3sNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9ICgweDEgPDwgaXJxX2lkKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQNCisvLyogXGJyaWVmIEFja25vd2xlZGdlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCit7DQorICAgIHBBaWMtPkFJQ19FT0lDUiA9IHBBaWMtPkFJQ19FT0lDUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHZlY3RvciBoYW5kbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciAoDQorCXVuc2lnbmVkIGludCAqcFZlY3RvciwgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpIYW5kbGVyKSAoKSApICAgLy8gXGFyZyBJbnRlcnJ1cHQgSGFuZGxlcg0KK3sNCisJdW5zaWduZWQgaW50IG9sZFZlY3RvciA9ICpwVmVjdG9yOw0KKw0KKwlpZiAoKHVuc2lnbmVkIGludCkgSGFuZGxlciA9PSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSkNCisJCSpwVmVjdG9yID0gKHVuc2lnbmVkIGludCkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREU7DQorCWVsc2UNCisJCSpwVmVjdG9yID0gKCgoKCh1bnNpZ25lZCBpbnQpIEhhbmRsZXIpIC0gKCh1bnNpZ25lZCBpbnQpIHBWZWN0b3IpIC0gMHg4KSA+PiAyKSAmIDB4MDBGRkZGRkYpIHwgMHhFQTAwMDAwMDsNCisNCisJcmV0dXJuIG9sZFZlY3RvcjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1RyaWcNCisvLyogXGJyaWVmIFRyaWcgYW4gSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCAgQVQ5MUZfQUlDX1RyaWcgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyDQorew0KKwlwQWljLT5BSUNfSVNDUiA9ICgweDEgPDwgaXJxX2lkKSA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Jc0FjdGl2ZQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNBY3RpdmUgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBJbnRlcnJ1cHQgTnVtYmVyDQorew0KKwlyZXR1cm4gKHBBaWMtPkFJQ19JU1IgJiAoMHgxIDw8IGlycV9pZCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfSXNQZW5kaW5nDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIHBlbmRpbmcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNQZW5kaW5nICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgSW50ZXJydXB0IE51bWJlcg0KK3sNCisJcmV0dXJuIChwQWljLT5BSUNfSVBSICYgKDB4MSA8PCBpcnFfaWQpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX09wZW4NCisvLyogXGJyaWVmIFNldCBleGNlcHRpb24gdmVjdG9ycyBhbmQgQUlDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19PcGVuKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKklycUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpGaXFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBGSVEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRGVmYXVsdEhhbmRsZXIpICAoKSwgLy8gXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUg0KKwl2b2lkICgqU3B1cmlvdXNIYW5kbGVyKSAoKSwgLy8gXGFyZyBEZWZhdWx0IFNwdXJpb3VzIEhhbmRsZXINCisJdW5zaWduZWQgaW50IHByb3RlY3RNb2RlKSAgIC8vIFxhcmcgRGVidWcgQ29udHJvbCBSZWdpc3Rlcg0KK3sNCisJaW50IGk7DQorDQorCS8vIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBJVlIgdG8gdGhlIGRlZmF1bHQgaGFuZGxlcg0KKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgew0KKwkJQVQ5MUZfQUlDX0Rpc2FibGVJdChwQWljLCBpKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdChwQWljLCBpLCBBVDkxQ19BSUNfUFJJT1JfTE9XRVNULCBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfTEVWRUxfU0VOU0lUSVZFLCBEZWZhdWx0SGFuZGxlcik7DQorCX0NCisNCisJLy8gU2V0IHRoZSBJUlEgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxOCwgSXJxSGFuZGxlcik7DQorCS8vIFNldCB0aGUgRmFzdCBJbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxQywgRmlxSGFuZGxlcik7DQorDQorCXBBaWMtPkFJQ19TUFUgPSAodW5zaWduZWQgaW50KSBTcHVyaW91c0hhbmRsZXI7DQorCXBBaWMtPkFJQ19EQ1IgPSBwcm90ZWN0TW9kZTsNCit9DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEwX0RUWEQgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE5X0RSWEQgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTRfUFdNMyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfUFdNMyAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X1BXTTIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19QV00yICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMV9QV00xICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjRfUFdNMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEyX1BXTTEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEwX1BXTTAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyM19QV00wICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTFfUFdNMCAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNTQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TU0MpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTU0Mgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTdfVEQgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X1RGICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOV9SSyAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMThfUkQgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIwX1JGICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNl9USyAgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1BJKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX05QQ1MwICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19NT1NJICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzFfTlBDUzEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEyX01JU08gICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9TUENLICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9OUENTMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfTlBDUzIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEwX05QQ1MyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9OUENTMyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19OUENTMyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNV9OUENTMyAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBXTUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BXTUMpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMikpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzJfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI2X1RJT0EyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19USU9CMiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjlfVENMSzIgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNV9USU9BMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTZfVElPQjEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI4X1RDTEsxICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMwKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMF9USU9BMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMV9USU9CMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9UQ0xLMCAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE3X1BDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9QQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzFfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE4X1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE2X1BDSzAgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9BRFRSRyAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPQV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJT0ENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9BX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BJT0EpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVFdJDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RXSSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRXSSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1RXRCAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X1RXQ0sgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjFfUlhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X0RUUjEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9EQ0QxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjJfVFhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X1JUUzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyM19TQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjhfRFNSMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X1JJMSAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNV9DVFMxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzBfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVVMwKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTVfUlhEMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTZfVFhEMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfUlRTMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfQ1RTMCAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfU0NLMCAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVEUA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VRFApKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUlDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTApIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0ZJUSkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfSVJRMSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFJQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzMF9JUlExICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE5X0ZJUSAgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisjZW5kaWYgLy8gbGliX0FUOTFTQU03UzY0X0gNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMTI4LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMTI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1YTJiYwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1gxMjguaApAQCAtMCwwICsxLDQ1NTggQEAKKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8qIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8qIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8qIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8qIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIEZpbGUgTmFtZSAgICAgICAgICAgOiBsaWJfQVQ5MVNBTTdYMTI4LmgNCisvLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDEyOCBpbmxpbmVkIGZ1bmN0aW9ucw0KKy8vKiBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjMpDQorLy8qDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RiZ3UuaC8xLjEvRnJpIEphbiAzMSAxMjoxODo0MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTTdYLmgvMS4xL1R1ZSBGZWIgIDEgMDg6MzI6MTAgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1ZSRUdfNjA4NUIuaC8xLjEvVHVlIEZlYiAgMSAxNjoyMDo0NyAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnN0Y182MDk4QS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjIwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zc2MuaC8xLjQvRnJpIEphbiAzMSAxMjoxOToyMCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfd2R0Y182MDgwQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM4OjMwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTQ6MjM6NTIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BpdGNfNjA3OUEuaC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljXzYwNzViLmgvMS4xL0ZyaSBNYXkgMjAgMTQ6MDE6MTkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Flc182MTQ5YS5oLzEuMS9Nb24gSmFuIDE3IDA3OjQzOjA5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90d2kuaC8xLjMvTW9uIEp1bCAxOSAxNDoyNzo1OCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWRjLmgvMS42L0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3J0dGNfNjA4MUEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOTozOCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdWRwLmgvMS40L1dlZCBGZWIgMTYgMDg6Mzk6MzQgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RlczNfNjE1MGEuaC8xLjEvTW9uIEphbiAxNyAwOToxOToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNN1guaC8xLjEvVGh1IE1hciAyNSAxNToxOToxNCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Nhbl9BVDkxLmgvMS40L0ZyaSBPY3QgMTcgMDk6MTI6NTAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGRjLmgvMS4yL1R1ZSBKdWwgIDIgMTM6Mjk6NDAgMjAwMi8vDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjaWZuZGVmIGxpYl9BVDkxU0FNN1gxMjhfSA0KKyNkZWZpbmUgbGliX0FUOTFTQU03WDEyOF9IDQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBSUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKyNkZWZpbmUgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUgKCh2b2lkICgqKSAoKSkgMHhFNTFGRkYyMCkgLy8gbGRyLCBwYywgW3BjLCAjLSZGMjBdDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0DQorLy8qIFxicmllZiBJbnRlcnJ1cHQgSGFuZGxlciBJbml0aWFsaXphdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQsICAgICAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KKwl1bnNpZ25lZCBpbnQgcHJpb3JpdHksICAgLy8gXGFyZyBwcmlvcml0eSB0byBnaXZlIHRvIHRoZSBpbnRlcnJ1cHQNCisJdW5zaWduZWQgaW50IHNyY190eXBlLCAgIC8vIFxhcmcgYWN0aXZhdGlvbiBhbmQgc2Vuc2Ugb2YgYWN0aXZhdGlvbg0KKwl2b2lkICgqbmV3SGFuZGxlcikgKHZvaWQpICkgLy8gXGFyZyBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcg0KK3sNCisJdW5zaWduZWQgaW50IG9sZEhhbmRsZXI7DQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsNCisNCisgICAgb2xkSGFuZGxlciA9IHBBaWMtPkFJQ19TVlJbaXJxX2lkXTsNCisNCisgICAgbWFzayA9IDB4MSA8PCBpcnFfaWQgOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5DQorICAgIHBBaWMtPkFJQ19TVlJbaXJxX2lkXSA9ICh1bnNpZ25lZCBpbnQpIG5ld0hhbmRsZXIgOw0KKyAgICAvLyogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorICAgIHBBaWMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQorDQorCXJldHVybiBvbGRIYW5kbGVyOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19FbmFibGVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCApIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorew0KKyAgICAvLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRUNSID0gMHgxIDw8IGlycV9pZCA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCit7DQorICAgIHVuc2lnbmVkIGludCBtYXNrID0gMHgxIDw8IGlycV9pZDsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2xlYXJJdA0KKy8vKiBcYnJpZWYgQ2xlYXIgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2xlYXJJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KK3sNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9ICgweDEgPDwgaXJxX2lkKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQNCisvLyogXGJyaWVmIEFja25vd2xlZGdlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCit7DQorICAgIHBBaWMtPkFJQ19FT0lDUiA9IHBBaWMtPkFJQ19FT0lDUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHZlY3RvciBoYW5kbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciAoDQorCXVuc2lnbmVkIGludCAqcFZlY3RvciwgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpIYW5kbGVyKSAoKSApICAgLy8gXGFyZyBJbnRlcnJ1cHQgSGFuZGxlcg0KK3sNCisJdW5zaWduZWQgaW50IG9sZFZlY3RvciA9ICpwVmVjdG9yOw0KKw0KKwlpZiAoKHVuc2lnbmVkIGludCkgSGFuZGxlciA9PSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSkNCisJCSpwVmVjdG9yID0gKHVuc2lnbmVkIGludCkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREU7DQorCWVsc2UNCisJCSpwVmVjdG9yID0gKCgoKCh1bnNpZ25lZCBpbnQpIEhhbmRsZXIpIC0gKCh1bnNpZ25lZCBpbnQpIHBWZWN0b3IpIC0gMHg4KSA+PiAyKSAmIDB4MDBGRkZGRkYpIHwgMHhFQTAwMDAwMDsNCisNCisJcmV0dXJuIG9sZFZlY3RvcjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1RyaWcNCisvLyogXGJyaWVmIFRyaWcgYW4gSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCAgQVQ5MUZfQUlDX1RyaWcgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyDQorew0KKwlwQWljLT5BSUNfSVNDUiA9ICgweDEgPDwgaXJxX2lkKSA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Jc0FjdGl2ZQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNBY3RpdmUgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBJbnRlcnJ1cHQgTnVtYmVyDQorew0KKwlyZXR1cm4gKHBBaWMtPkFJQ19JU1IgJiAoMHgxIDw8IGlycV9pZCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfSXNQZW5kaW5nDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIHBlbmRpbmcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNQZW5kaW5nICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgSW50ZXJydXB0IE51bWJlcg0KK3sNCisJcmV0dXJuIChwQWljLT5BSUNfSVBSICYgKDB4MSA8PCBpcnFfaWQpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX09wZW4NCisvLyogXGJyaWVmIFNldCBleGNlcHRpb24gdmVjdG9ycyBhbmQgQUlDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19PcGVuKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKklycUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpGaXFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBGSVEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRGVmYXVsdEhhbmRsZXIpICAoKSwgLy8gXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUg0KKwl2b2lkICgqU3B1cmlvdXNIYW5kbGVyKSAoKSwgLy8gXGFyZyBEZWZhdWx0IFNwdXJpb3VzIEhhbmRsZXINCisJdW5zaWduZWQgaW50IHByb3RlY3RNb2RlKSAgIC8vIFxhcmcgRGVidWcgQ29udHJvbCBSZWdpc3Rlcg0KK3sNCisJaW50IGk7DQorDQorCS8vIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBJVlIgdG8gdGhlIGRlZmF1bHQgaGFuZGxlcg0KKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgew0KKwkJQVQ5MUZfQUlDX0Rpc2FibGVJdChwQWljLCBpKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdChwQWljLCBpLCBBVDkxQ19BSUNfUFJJT1JfTE9XRVNULCBBVDkxQ19BSUNfU1JDVFlQRV9ISUdIX0xFVkVMLCBEZWZhdWx0SGFuZGxlcik7DQorCX0NCisNCisJLy8gU2V0IHRoZSBJUlEgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxOCwgSXJxSGFuZGxlcik7DQorCS8vIFNldCB0aGUgRmFzdCBJbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxQywgRmlxSGFuZGxlcik7DQorDQorCXBBaWMtPkFJQ19TUFUgPSAodW5zaWduZWQgaW50KSBTcHVyaW91c0hhbmRsZXI7DQorCXBBaWMtPkFJQ19EQ1IgPSBwcm90ZWN0TW9kZTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQREMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0UngNCisvLyogXGJyaWVmIFNldCB0aGUgbmV4dCByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQNCit7DQorCXBQREMtPlBEQ19STlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1JOQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCit7DQorCXBQREMtPlBEQ19UTlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1ROQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldFJ4DQorLy8qIFxicmllZiBTZXQgdGhlIHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRSeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkDQorew0KKwlwUERDLT5QRENfUlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1JDUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0VHgNCisvLyogXGJyaWVmIFNldCB0aGUgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRUeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSB0cmFuc21pdHRlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkDQorew0KKwlwUERDLT5QRENfVFBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1RDUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSB0cmFuc21pdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19FbmFibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19FbmFibGVSeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0cmFuc21pdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlVHggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzVHhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIHNlbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc1R4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfVENSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfVE5DUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1J4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBmaWxsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc1J4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfUkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfUk5DUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19PcGVuDQorLy8qIFxicmllZiBPcGVuIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMsIHJlLWVuYWJsZSBSWCBhbmQgVFgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfT3BlbiAoDQorCUFUOTFQU19QREMgcFBEQykgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19EaXNhYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19EaXNhYmxlVHgocFBEQyk7DQorDQorCS8vKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdA0KKwlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisNCisgICAgLy8qIEVuYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRW5hYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19FbmFibGVUeChwUERDKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Nsb3NlICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCisNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2VuZEZyYW1lDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwlBVDkxUFNfUERDIHBQREMsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJaWYgKEFUOTFGX1BEQ19Jc1R4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFR4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0VHhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1BEQyBwUERDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCWlmIChBVDkxRl9QRENfSXNSeEVtcHR5KHBQREMpKSB7DQorCQkvLyogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXRSeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIpOw0KKwkJcmV0dXJuIDI7DQorCX0NCisJZWxzZSBpZiAoQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkocFBEQykpIHsNCisJCS8vKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWVsc2Ugew0KKwkJLy8qIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLg0KKwkJcmV0dXJuIDA7DQorCX0NCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBEQkdVDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBEQkdVIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1KSAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBEYmd1LT5EQkdVX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBEQkdVIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMocERiZ3UpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoDQorLy8qIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaEFFbmFibGUsICAvLyBcYXJnIFBFUklQSCBBIHRvIGVuYWJsZQ0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSkgIC8vIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlDQorDQorew0KKwlwUGlvLT5QSU9fQVNSID0gcGVyaXBoQUVuYWJsZTsNCisJcFBpby0+UElPX0JTUiA9IHBlcmlwaEJFbmFibGU7DQorCXBQaW8tPlBJT19QRFIgPSAocGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUpOyAvLyBTZXQgaW4gUGVyaXBoIG1vZGUNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ091dHB1dA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBvdXRwdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBpb0VuYWJsZSkgICAgICAvLyBcYXJnIFBJTyB0byBiZSBlbmFibGVkDQorew0KKwlwUGlvLT5QSU9fUEVSID0gcGlvRW5hYmxlOyAvLyBTZXQgaW4gUElPIG1vZGUNCisJcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgLy8gQ29uZmlndXJlIGluIE91dHB1dA0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8gRGlzYWJsZSBvdXRwdXQNCisJcFBpby0+UElPX09EUiAgPSBpbnB1dEVuYWJsZTsNCisJcFBpby0+UElPX1BFUiAgPSBpbnB1dEVuYWJsZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24NCisJcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQorCXBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQdWxsdXANCisvLyogXGJyaWVmIEVuYWJsZSBwdWxsdXAgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1B1bGx1cCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcHVsbHVwRW5hYmxlKSAgIC8vIFxhcmcgZW5hYmxlIHB1bGx1cCBvbiBQSU8NCit7DQorCQkvLyBDb25uZWN0IG9yIG5vdCBQdWxsdXANCisJcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCisJcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUNCisvLyogXGJyaWVmIEVuYWJsZSBkaXJlY3QgZHJpdmUgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBkaXJlY3REcml2ZSkgICAgLy8gXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZQ0KKw0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyDQorLy8qIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRGaWx0ZXIpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXINCisNCit7DQorCS8vIENvbmZpZ3VyZSB0aGUgRGlyZWN0IERyaXZlDQorCXBQaW8tPlBJT19JRkRSICA9IH5pbnB1dEZpbHRlcjsNCisJcFBpby0+UElPX0lGRVIgID0gaW5wdXRGaWx0ZXI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBpbnB1dCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0KCAvLyBccmV0dXJuIFBJTyBpbnB1dA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgaW5wdXQgZmxhZyBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0U2V0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXQocFBpbykgJiBmbGFnKTsNCit9DQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX1NldE91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDEgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19TZXRPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBzZXQNCit7DQorCXBQaW8tPlBJT19TT0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NsZWFyT3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMCBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NsZWFyT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZA0KK3sNCisJcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQNCisvLyogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZA0KK3sNCisJcFBpby0+UElPX09EU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCANCit7DQorICAgICAgICBwUGlvLT5QSU9fUEVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0Rpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkIA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19QRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLy8gXHJldHVybiBQSU8gU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fUFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dERpc2FibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dERpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091cHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlDQorLy8qIFxicmllZiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUZFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRkRSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggLy8gXHJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lGU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnB1dCBmaWx0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBEYXRhIFN0YXR1cyANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgDQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZQ0KKy8vKiBcYnJpZWYgTXVsdGkgRHJpdmVyIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX01ERFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fTURTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE11bHRpRHJpdmVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEEgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbg0KK3sNCisgICAgICAgIHBQaW8tPlBJT19BU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiANCit7DQorICAgICAgICBwUGlvLT5QSU9fQlNSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBBQiBSZWdpc3RlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PV0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09XRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT1dTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dFdyaXRlIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwDQorLy8qIFxicmllZiBSZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCAvLyBccmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCANCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QUFVTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuICh+QVQ5MUZfUElPX0dldENmZ1B1bGx1cChwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgU0NFUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfU0NFUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIFNDRFIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX1NDRFIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1NDU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoSWRzKSAgLy8gXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlDQorew0KKwlwUE1DLT5QTUNfUENFUiA9IHBlcmlwaElkczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRGlzYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCit7DQorCXBQTUMtPlBNQ19QQ0RSID0gcGVyaXBoSWRzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIEdldCBwZXJpcGhlcmFsIGNsb2NrIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfUENTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENLR1ItPkNLR1JfTU9SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBFbmFibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3IoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gQVQ5MUNfQ0tHUl9NT1NDRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvciAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfTU9TQ0VOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZQ0KKy8vKiBcYnJpZWYgQ2ZnIE1PUiBSZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIG1haW4gb3NjIHN0YXJ0dXAgdGltZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgIC8vIFxhcmcgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lIGluIG1pY3Jvc2Vjb25kICh1cykNCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfT1NDT1VOVDsNCisJcENLR1ItPkNLR1JfTU9SIHw9ICgoc2xvd0Nsb2NrICogc3RhcnR1cF90aW1lKS8oOCoxMDAwMDAwKSkgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NQ0ZSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlyZXR1cm4gKChwQ0tHUi0+Q0tHUl9NQ0ZSICAmIEFUOTFDX0NLR1JfTUFJTkYpICogc2xvd0Nsb2NrKSA+PiA0Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnDQorLy8qIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX01DS1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0TUNLUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TUNLUmVnKA0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19NQ0tSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIG1hc3RlciBjbG9jayBpbiBIeiB3aGljaCBjb3JyZXBvbmRzIHRvIHByb2Nlc3NvciBjbG9jayBmb3IgQVJNNw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXVuc2lnbmVkIGludCByZWcgPSBwUE1DLT5QTUNfTUNLUjsNCisJdW5zaWduZWQgaW50IHByZXNjYWxlciA9ICgxIDw8ICgocmVnICYgQVQ5MUNfUE1DX1BSRVMpID4+IDIpKTsNCisJdW5zaWduZWQgaW50IHBsbERpdmlkZXIsIHBsbE11bHRpcGxpZXI7DQorDQorCXN3aXRjaCAocmVnICYgQVQ5MUNfUE1DX0NTUykgew0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLOiAvLyBTbG93IGNsb2NrIHNlbGVjdGVkDQorCQkJcmV0dXJuIHNsb3dDbG9jayAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSzogLy8gTWFpbiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19QTExfQ0xLOiAvLyBQTExCIGNsb2NrIGlzIHNlbGVjdGVkDQorCQkJcmVnID0gcENLR1ItPkNLR1JfUExMUjsNCisJCQlwbGxEaXZpZGVyICAgID0gKHJlZyAgJiBBVDkxQ19DS0dSX0RJVik7DQorCQkJcGxsTXVsdGlwbGllciA9ICgocmVnICAmIEFUOTFDX0NLR1JfTVVMKSA+PiAxNikgKyAxOw0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHBsbERpdmlkZXIgKiBwbGxNdWx0aXBsaWVyIC8gcHJlc2NhbGVyOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQQ0sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGNrLCAgLy8gXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3DQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX1BDS1JbcGNrXSA9IG1vZGU7DQorCXBQTUMtPlBNQ19TQ0VSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBDSw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2spICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCit7DQorCXBQTUMtPlBNQ19TQ0RSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBQTUMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAgICAgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19QTUMgcFBNQykgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUE1DKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0U3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlNUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUU29mdFJlc2V0DQorLy8qIFxicmllZiBTdGFydCBTb2Z0d2FyZSBSZXNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVFNvZnRSZXNldCgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHJlc2V0KQ0KK3sNCisJcFJTVEMtPlJTVENfUkNSID0gKDB4QTUwMDAwMDAgfCByZXNldCk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBSZXNldCBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlNUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUlNUQy0+UlNUQ19STVIgPSAoMHhBNTAwMDAwMCB8IG1vZGUpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRNb2RlDQorLy8qIFxicmllZiBHZXQgUmVzZXQgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19STVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRTdGF0dXMNCisvLyogXGJyaWVmIEdldCBSZXNldCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19SU1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUNCisvLyogXGJyaWVmIFJldHVybiAhPTAgaWYgc29mdHdhcmUgcmVzZXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUSXNTb2Z0UnN0QWN0aXZlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKChwUlNUQy0+UlNUQ19SU1IpICYgQVQ5MUNfUlNUQ19TUkNNUCk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlRUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9TZXRSVFRfVGltZUJhc2UoKQ0KKy8vKiBcYnJpZWYgIFNldCB0aGUgUlRUIHByZXNjYWxlciBhY2NvcmRpbmcgdG8gdGhlIFRpbWVCYXNlIGluIG1zDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0VGltZUJhc2UoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQywgDQorICAgICAgICB1bnNpZ25lZCBpbnQgbXMpDQorew0KKwlpZiAobXMgPiAyMDAwKQ0KKwkJcmV0dXJuIDE7ICAgLy8gQVQ5MUNfVElNRV9PVVRfT0ZfUkFOR0UNCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOwkNCisJcFJUVEMtPlJUVENfUlRNUiB8PSAoKChtcyA8PCAxNSkgLzEwMDApICYgMHhGRkZGKTsJDQorCXJldHVybiAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVFNldFByZXNjYWxlcigpDQorLy8qIFxicmllZiAgU2V0IHRoZSBuZXcgcHJlc2NhbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMsIA0KKyAgICAgICAgdW5zaWduZWQgaW50IHJ0cHJlcykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKHJ0cHJlcyAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gKHBSVFRDLT5SVFRDX1JUTVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVFJlc3RhcnQoKQ0KKy8vKiBcYnJpZWYgIFJlc3RhcnQgdGhlIFJUVCBwcmVzY2FsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUUmVzdGFydCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVFJTVDsJDQorfQ0KKw0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBFbmFibGUgUlRUIEFsYXJtIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX0FMTUlFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfQ2xlYXJBbGFybUlOVCgpDQorLy8qIFxicmllZiAgRGlzYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyQWxhcm1JTlQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfQUxNSUVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRSdHRJbmNJTlQoKQ0KKy8vKiBcYnJpZWYgIEVuYWJsZSBSVFQgSU5DIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRSdHRJbmNJTlQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRJTkNJRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyUnR0SW5jSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyUnR0SW5jSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQorew0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX1JUVElOQ0lFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgU2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybVZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMsIHVuc2lnbmVkIGludCBhbGFybSkNCit7DQorCXBSVFRDLT5SVFRDX1JUQVIgPSBhbGFybTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfR2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgR2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldEFsYXJtVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVEFSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRHZXRTdGF0dXMoKQ0KKy8vKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCBzdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRTdGF0dXMoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVFNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfUmVhZFZhbHVlKCkNCisvLyogXGJyaWVmICBSZWFkIHRoZSBSVFQgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRSZWFkVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorICAgICAgICByZWdpc3RlciB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmFsMSx2YWwyOw0KKwlkbw0KKwl7DQorCQl2YWwxID0gcFJUVEMtPlJUVENfUlRWUjsNCisJCXZhbDIgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwl9CQ0KKwl3aGlsZSh2YWwxICE9IHZhbDIpOw0KKwlyZXR1cm4odmFsMSk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUSW5pdA0KKy8vKiBcYnJpZWYgU3lzdGVtIHRpbWVyIGluaXQgOiBwZXJpb2QgaW4gtXNlY29uZCwgc3lzdGVtIGNsb2NrIGZyZXEgaW4gTUh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUSW5pdCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXRfZnJlcXVlbmN5KQ0KK3sNCisJcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZD8gKHBlcmlvZCAqIHBpdF9mcmVxdWVuY3kgKyA4KSA+PiA0IDogMDsgLy8gKzggdG8gYXZvaWQgJTEwIGFuZCAvMTANCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOwkgDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVFNldFBJVg0KKy8vKiBcYnJpZWYgU2V0IHRoZSBQSVQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUU2V0UElWKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGl2KQ0KK3sNCisJcFBJVEMtPlBJVENfUElNUiA9IHBpdiB8IChwUElUQy0+UElUQ19QSU1SICYgKEFUOTFDX1BJVENfUElURU4gfCBBVDkxQ19QSVRDX1BJVElFTikpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRFbmFibGVJbnQNCisvLyogXGJyaWVmIEVuYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElURW5hYmxlSW50KA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQorew0KKwlwUElUQy0+UElUQ19QSU1SIHw9IEFUOTFDX1BJVENfUElUSUVOOwkgDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVERpc2FibGVJbnQNCisvLyogXGJyaWVmIERpc2FibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVERpc2FibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXBQSVRDLT5QSVRDX1BJTVIgJj0gfkFUOTFDX1BJVENfUElUSUVOOwkgDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldE1vZGUNCisvLyogXGJyaWVmIFJlYWQgUElUIG1vZGUgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldE1vZGUoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXJldHVybihwUElUQy0+UElUQ19QSU1SKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZWFkIFBJVCBzdGF0dXMgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJU1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRQSUlSDQorLy8qIFxicmllZiBSZWFkIFBJVCBDUElWIGFuZCBQSUNOVCB3aXRob3V0IHJlc3NldHRpbmcgdGhlIGNvdW50ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRQSUlSKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQorew0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElJUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJVlINCisvLyogXGJyaWVmIFJlYWQgU3lzdGVtIHRpbWVyIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJVlIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXJldHVybihwUElUQy0+UElUQ19QSVZSKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBXRFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTZXRNb2RlDQorLy8qIFxicmllZiBTZXQgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVFNldE1vZGUoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQywNCisgICAgICAgIHVuc2lnbmVkIGludCBNb2RlKQ0KK3sNCisJcFdEVEMtPldEVENfV0RNUiA9IE1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1dEVFJlc3RhcnQNCisvLyogXGJyaWVmIFJlc3RhcnQgV2F0Y2hkb2cNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRSZXN0YXJ0KA0KKyAgICAgICAgQVQ5MVBTX1dEVEMgcFdEVEMpDQorew0KKwlwV0RUQy0+V0RUQ19XRENSID0gMHhBNTAwMDAwMTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUU0dldHRhdHVzDQorLy8qIFxicmllZiBHZXQgV2F0Y2hkb2cgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRTR2V0dGF0dXMoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQykNCit7DQorCXJldHVybihwV0RUQy0+V0RUQ19XRFNSICYgMHgzKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUR2V0UGVyaW9kDQorLy8qIFxicmllZiBUcmFuc2xhdGUgbXMgaW50byBXYXRjaGRvZyBDb21wYXRpYmxlIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRHZXRQZXJpb2QodW5zaWduZWQgaW50IG1zKQ0KK3sNCisJaWYgKChtcyA8IDQpIHx8IChtcyA+IDE2MDAwKSkNCisJCXJldHVybiAwOw0KKwlyZXR1cm4oKG1zIDw8IDgpIC8gMTAwMCk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVlJFRw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlDQorLy8qIFxicmllZiBFbmFibGUgVlJFRyBMb3cgUG93ZXIgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZSgNCisgICAgICAgIEFUOTFQU19WUkVHIHBWUkVHKQ0KK3sNCisJcFZSRUctPlZSRUdfTVIgfD0gQVQ5MUNfVlJFR19QU1REQlk7CSANCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZSgNCisgICAgICAgIEFUOTFQU19WUkVHIHBWUkVHKQ0KK3sNCisJcFZSRUctPlZSRUdfTVIgJj0gfkFUOTFDX1ZSRUdfUFNUREJZOwkgDQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KKyNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICgodW5zaWduZWQgaW50KSAweDVBIDw8IDI0KSAvLyAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19SZW1hcA0KKy8vKiBcYnJpZWYgTWFrZSBSZW1hcA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX1JlbWFwICh2b2lkKSAgICAgLy8gIA0KK3sNCisgICAgQVQ5MVBTX01DIHBNQyA9IChBVDkxUFNfTUMpIEFUOTFDX0JBU0VfTUM7DQorICAgIA0KKyAgICBwTUMtPk1DX1JDUiA9IEFUOTFDX01DX1JDQjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgRUZDIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vIFdyaXRlIHRvIHRoZSBGTVIgcmVnaXN0ZXINCisJcE1DLT5NQ19GTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZygNCisJQVQ5MVBTX01DIHBNQykgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwTUMtPk1DX0ZNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNODQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTigNCisJaW50IG1hc3Rlcl9jbG9jaykgLy8gbWFzdGVyIGNsb2NrIGluIEh6DQorew0KKwlyZXR1cm4gKG1hc3Rlcl9jbG9jay8xMDAwMDAwICsyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQNCisvLyogXGJyaWVmIFBlcmZvcm0gRUZDIENvbW1hbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZCAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgIHVuc2lnbmVkIGludCB0cmFuc2Zlcl9jbWQpDQorew0KKwlwTUMtPk1DX0ZDUiA9IHRyYW5zZmVyX2NtZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKA0KKwlBVDkxUFNfTUMgcE1DKSAvLyBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBNQy0+TUNfRlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcocE1DKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldCgNCisgICAgICAgIEFUOTFQU19NQyBwTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKHBNQykgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTUEkNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9PcGVuDQorLy8qIFxicmllZiBPcGVuIGEgU1BJIFBvcnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9PcGVuICgNCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudWxsKSAgLy8gXGFyZw0KK3sNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdDcw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFNQSSBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdDcyAoDQorCUFUOTFQU19TUEkgcFNQSSwgICAgIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgY3MsICAgICAvLyBTUEkgY3MgbnVtYmVyICgwIHRvIDMpDQorIAlpbnQgdmFsKSAgIC8vICBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDU1IgcmVnaXN0ZXINCisJKihwU1BJLT5TUElfQ1NSICsgY3MpID0gdmFsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1Jlc2V0DQorLy8qIFxicmllZiBSZXNldCB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUmVzZXQgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NXUlNUOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZSAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdNb2RlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ01vZGUgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQQ1MNCisvLyogXGJyaWVmIFN3aXRjaCB0byB0aGUgY29ycmVjdCBQQ1Mgb2YgU1BJIE1vZGUgUmVnaXN0ZXIgOiBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ1BDUyAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWNoYXIgUENTX0RldmljZSkgLy8gUENTIG9mIHRoZSBEZXZpY2UNCit7CQ0KKyAJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfTVIgJj0gMHhGRkYwRkZGRjsNCisJcFNQSS0+U1BJX01SIHw9ICggKFBDU19EZXZpY2U8PDE2KSAmIEFUOTFDX1NQSV9QQ1MgKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBTUEk6IGRpc2FibGUgSVQgZGlzYWJsZSB0cmFuc2ZlcnQsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DbG9zZSAoDQorCUFUOTFQU19TUEkgcFNQSSkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorew0KKyAgICAvLyogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3Rlcg0KKyAgICBwU1BJLT5TUElfQ1NSWzBdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbMV0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsyXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzNdID0gMCA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgU1BJIG1vZGUNCisgICAgcFNQSS0+U1BJX01SID0gMCAgOw0KKw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwU1BJLT5TUElfSURSID0gMHhGRkZGRkZGRiA7DQorDQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFNQSS0+U1BJX1JQUikpOw0KKw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQorew0KKyAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KKyAgICB2YWx1ZV9mb3JfY3MgPSAofigxIDw8IGNzX251bWJlcikpICYgMHhGOyAgLy9QbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyDQorICAgIHBTUEktPlNQSV9URFIgPSAoY2hhcmFjdGVyICYgMHhGRkZGKSB8ICh2YWx1ZV9mb3JfY3MgPDwgMTYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KK3sNCisgICAgcmV0dXJuKChwU1BJLT5TUElfUkRSKSAmIDB4RkZGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwU3BpKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVTQVJUDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19CYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgQ2FsY3VsYXRlIHRoZSBiYXVkcmF0ZQ0KKy8vKiBTdGFuZGFyZCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKw0KKy8vKiBTdGFuZGFyZCBFeHRlcm5hbCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfU0NLX01PREUgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KKw0KKy8vKiBTdGFuZGFyZCBTeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19TWU5DX01PREUgKCBBVDkxQ19VU19TWU5DICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICkNCisNCisvLyogU0NLIHVzZWQgTGFiZWwNCisjZGVmaW5lIEFUOTFDX1VTX1NDS19VU0VEIChBVDkxQ19VU19DS0xPIHwgQVQ5MUNfVVNfQ0xLU19FWFQpDQorDQorLy8qIFN0YW5kYXJkIElTTyBUPTAgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSVNPX1JFQURFUl9NT0RFICggQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCArIFwNCisJCQkJCSAgIAkJIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX1BBUl9FVkVOICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DS0xPICtcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19PVkVSKQ0KKw0KKy8vKiBTdGFuZGFyZCBJUkRBIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX0lSREFfTU9ERSAoICBBVDkxQ19VU19VU01PREVfSVJEQSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWx1Y3VsYXRlIGJhdWRfdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWluIGNsb2NrIGFuZCB0aGUgYmF1ZCByYXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19CYXVkcmF0ZSAoDQorCWNvbnN0IHVuc2lnbmVkIGludCBtYWluX2Nsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJY29uc3QgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSkgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KK3sNCisJdW5zaWduZWQgaW50IGJhdWRfdmFsdWUgPSAoKG1haW5fY2xvY2sqMTApLyhiYXVkX3JhdGUgKiAxNikpOw0KKwlpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisJCWJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorCWVsc2UNCisJCWJhdWRfdmFsdWUgLz0gMTA7DQorCXJldHVybiBiYXVkX3ZhbHVlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRCYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldEJhdWRyYXRlICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJdW5zaWduZWQgaW50IHNwZWVkKSAgICAgLy8gXGFyZyBVQVJUIGJhdWRyYXRlDQorew0KKwkvLyogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0JSR1IgPSBBVDkxRl9VU19CYXVkcmF0ZShtYWluQ2xvY2ssIHNwZWVkKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0VGltZWd1YXJkDQorLy8qIFxicmllZiBTZXQgVVNBUlQgdGltZWd1YXJkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0VGltZWd1YXJkICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgdGltZWd1YXJkKSAvLyBcYXJnIHRpbWVndWFyZCB2YWx1ZQ0KK3sNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJcFVTQVJULT5VU19UVEdSID0gdGltZWd1YXJkIDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0NvbmZpZ3VyZQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFVTQVJUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ29uZmlndXJlICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1haW5DbG9jaywgIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwl1bnNpZ25lZCBpbnQgbW9kZSAsICAgICAgLy8gXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQNCisJdW5zaWduZWQgaW50IGJhdWRSYXRlICwgIC8vIFxhcmcgYmF1ZHJhdGUgdG8gYmUgcHJvZ3JhbW1lZA0KKwl1bnNpZ25lZCBpbnQgdGltZWd1YXJkICkgLy8gXGFyZyB0aW1lZ3VhcmQgdG8gYmUgcHJvZ3JhbW1lZA0KK3sNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KKw0KKyAgICAvLyogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWCB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19UWERJUyA7DQorDQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCUFUOTFGX1VTX1NldEJhdWRyYXRlKHBVU0FSVCwgbWFpbkNsb2NrLCBiYXVkUmF0ZSk7DQorDQorCS8vKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQorCUFUOTFGX1VTX1NldFRpbWVndWFyZChwVVNBUlQsIHRpbWVndWFyZCk7DQorDQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKyAgICBBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUikpOw0KKw0KKyAgICAvLyogRGVmaW5lIHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSBtb2RlICA7DQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgY2hhcmFjdGVycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZXNldFJ4DQorLy8qIFxicmllZiBSZXNldCBSZWNlaXZlciBhbmQgcmUtZW5hYmxlIGl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKwkvLyogUmVzZXQgcmVjZWl2ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYOw0KKyAgICAvLyogUmUtRW5hYmxlIHJlY2VpdmVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZXNldFR4DQorLy8qIFxicmllZiBSZXNldCBUcmFuc21pdHRlciBhbmQgcmUtZW5hYmxlIGl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKwkvLyogUmVzZXQgdHJhbnNtaXR0ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFRYOw0KKyAgICAvLyogRW5hYmxlIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgUmVjZWl2ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgVHJhbnNtaXR0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlVHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgVVNBUlQ6IGRpc2FibGUgSVQgZGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Nsb3NlICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBSZXNldCB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgcFVTQVJULT5VU19CUkdSID0gMCA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgVVNBUlQgbW9kZQ0KKyAgICBwVVNBUlQtPlVTX01SID0gMCAgOw0KKw0KKyAgICAvLyogUmVzZXQgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKyAgICBwVVNBUlQtPlVTX1RUR1IgPSAwOw0KKw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9IDB4RkZGRkZGRkYgOw0KKw0KKyAgICAvLyogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMNCisgICAgQVQ5MUZfUERDX0Nsb3NlKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQorDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JTVFJYIDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfVHhSZWFkeQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gaW4gVVNfVEhSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19UeFJlYWR5ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfVFhSRFkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgcmVhZCBpbiBVU19SSFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1J4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19SWFJEWSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Vycm9yDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIGVycm9yIGZsYWcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0Vycm9yICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYNCisgICAgCShBVDkxQ19VU19PVlJFIHwgIC8vIE92ZXJydW4gZXJyb3INCisgICAgCSBBVDkxQ19VU19GUkFNRSB8IC8vIEZyYW1pbmcgZXJyb3INCisgICAgCSBBVDkxQ19VU19QQVJFKSk7ICAvLyBQYXJpdHkgZXJyb3INCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUHV0Q2hhcg0KKy8vKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUHV0Q2hhciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWludCBjaGFyYWN0ZXIgKQ0KK3sNCisgICAgcFVTQVJULT5VU19USFIgPSAoY2hhcmFjdGVyICYgMHgxRkYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19HZXRDaGFyDQorLy8qIFxicmllZiBSZWNlaXZlIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVVNfR2V0Q2hhciAoDQorCWNvbnN0IEFUOTFQU19VU0FSVCBwVVNBUlQpDQorew0KKyAgICByZXR1cm4oKHBVU0FSVC0+VVNfUkhSKSAmIDB4MUZGKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfU2VuZEZyYW1lKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRJcmRhRmlsdGVyDQorLy8qIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIElyRGEgZmlsdGVyIHRyZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldElyZGFGaWx0ZXIgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlDQorKQ0KK3sNCisJcFVTQVJULT5VU19JRiA9IHZhbHVlOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNTQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qIERlZmluZSB0aGUgc3RhbmRhcmQgSTJTIG1vZGUgY29uZmlndXJhdGlvbg0KKw0KKy8vKiBDb25maWd1cmF0aW9uIHRvIHNldCBpbiB0aGUgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisvLyogUGFyYW1ldGVycyA6ICBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMNCisvLyogCQkJICBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzDQorI2RlZmluZSBBVDkxQ19JMlNfQVNZX01BU1RFUl9UWF9TRVRUSU5HKG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lKSggK1wNCisJCQkJCQkJCQkgICBBVDkxQ19TU0NfQ0tTX0RJViAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgIEFUOTFDX1NTQ19DS0dfTk9ORSAgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJICAgQVQ5MUNfU1NDX1NUVE9VVCAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAoKDE8PDE2KSAmIEFUOTFDX1NTQ19TVFRETFkpICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgKCgoKG5iX2JpdF9ieV9zbG90Km5iX3Nsb3RfYnlfZnJhbWUpLzIpLTEpIDw8MjQpKQ0KKw0KKw0KKy8vKiBDb25maWd1cmF0aW9uIHRvIHNldCBpbiB0aGUgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyogUGFyYW1ldGVycyA6IG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cw0KKy8vKiAJCQkgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9UWF9GUkFNRV9TRVRUSU5HKG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lKSggK1wNCisJCQkJCQkJCQkobmJfYml0X2J5X3Nsb3QtMSkgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX01TQkYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX3Nsb3RfYnlfZnJhbWUtMSk8PDgpICYgQVQ5MUNfU1NDX0RBVE5CKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkoKChuYl9iaXRfYnlfc2xvdC0xKTw8MTYpICYgQVQ5MUNfU1NDX0ZTTEVOKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFKQ0KKw0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSAoDQorICAgICAgICBBVDkxUFNfU1NDIHBTU0MsICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IG1haW5DbG9jaywgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorICAgICAgICB1bnNpZ25lZCBpbnQgc3BlZWQpICAgICAvLyBcYXJnIFNTQyBiYXVkcmF0ZQ0KK3sNCisgICAgICAgIHVuc2lnbmVkIGludCBiYXVkX3ZhbHVlOw0KKyAgICAgICAgLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgICAgIGlmIChzcGVlZCA9PSAwKQ0KKyAgICAgICAgICAgYmF1ZF92YWx1ZSA9IDA7DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICBiYXVkX3ZhbHVlID0gKHVuc2lnbmVkIGludCkgKG1haW5DbG9jayAqIDEwKS8oMipzcGVlZCk7DQorICAgICAgICAgICBpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisgICAgICAgICAgICAgICAgICBiYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKyAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQorICAgICAgICB9DQorDQorICAgICAgICBwU1NDLT5TU0NfQ01SID0gYmF1ZF92YWx1ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NvbmZpZ3VyZQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFNTQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19Db25maWd1cmUgKA0KKyAgICAgICAgICAgICBBVDkxUFNfU1NDIHBTU0MsICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzeXN0X2Nsb2NrLCAgLy8gXGFyZyBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5DQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXVkX3JhdGUsICAgLy8gXGFyZyBFeHBlY3RlZCBCYXVkIFJhdGUgRnJlcXVlbmN5DQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja19yeCwgICAgLy8gXGFyZyBSZWNlaXZlciBDbG9jayBQYXJhbWV0ZXJzDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3J4LCAgICAgLy8gXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3R4LCAgICAvLyBcYXJnIFRyYW5zbWl0dGVyIENsb2NrIFBhcmFtZXRlcnMNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfdHgpICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KK3sNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKwlwU1NDLT5TU0NfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQorDQorICAgIC8vKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXINCisJcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1NXUlNUIHwgQVQ5MUNfU1NDX1JYRElTIHwgQVQ5MUNfU1NDX1RYRElTIDsNCisNCisgICAgLy8qIERlZmluZSB0aGUgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxRl9TU0NfU2V0QmF1ZHJhdGUocFNTQywgc3lzdF9jbG9jaywgYmF1ZF9yYXRlKTsNCisNCisgICAgIC8vKiBXcml0ZSB0aGUgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19SQ01SID0gIGNsb2NrX3J4Ow0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19UQ01SID0gIGNsb2NrX3R4Ow0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1JGTVIgPSAgbW9kZV9yeDsNCisNCisgICAgIC8vKiBXcml0ZSB0aGUgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfVEZNUiA9ICBtb2RlX3R4Ow0KKw0KKyAgICAvLyogQ2xlYXIgVHJhbnNtaXQgYW5kIFJlY2VpdmUgQ291bnRlcnMNCisJQVQ5MUZfUERDX09wZW4oKEFUOTFQU19QREMpICYocFNTQy0+U1NDX1JQUikpOw0KKw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIEVuYWJsZSByZWNlaXZlcg0KKyAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfUlhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgc2VuZGluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVUeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRW5hYmxlICB0cmFuc21pdHRlcg0KKyAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfVFhFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSAgdHJhbnNtaXR0ZXINCisgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1RYRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBTU0MgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlSXQgKA0KKwlBVDkxUFNfU1NDIHBTU0MsIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgU1NDIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19TU0MgcFNTQywgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1NDIHBTU0MsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNTQy0+U1NDX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU3NjKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFNzYy0+U1NDX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNTQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU3NjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwU3NjKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRXSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVFdJIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVFdJIHBUV0ksIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVFdJIGluIG1hc3RlciBtb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NvbmZpZ3VyZSAoIEFUOTFQU19UV0kgcFRXSSApICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBUV0ktPlRXSV9JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCisNCisgICAgLy8qIFJlc2V0IHBlcmlwaGVyYWwNCisJcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NXUlNUOw0KKw0KKwkvLyogU2V0IE1hc3RlciBtb2RlDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9NU0VOOw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBUd2ktPlRXSV9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUV0kgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMocFR3aSkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQV01DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19QV01DIHBQV00pIC8vIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQV00tPlBXTUNfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQd20tPlBXTUNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQd20tPlBXTUNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUFdNKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0U3RhdHVzKHBQV00pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAvLyBcYXJnICBQV00gbW9kZQ0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgLy8gXGFyZyBQV00gcGVyaW9kDQorICAgICAgICB1bnNpZ25lZCBpbnQgZHV0eSkgLy8gXGFyZyBQV00gZHV0eSBjeWNsZQ0KK3sNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ01SID0gbW9kZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ0RUWVIgPSBkdXR5Ow0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCit7DQorCXBQV00tPlBXTUNfRU5BID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsDQorLy8qIFxicmllZiBEaXNhYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KK3sNCisJcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fVXBkYXRlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgVXBkYXRlIFBlcmlvZCBvciBEdXR5IEN5Y2xlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19VcGRhdGVDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCB1cGRhdGUpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQorew0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DVVBEUiA9IHVwZGF0ZTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVRFANCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVURQIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBVRFAtPlVEUF9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0QWRkcmVzcw0KKy8vKiBcYnJpZWYgU2V0IFVEUCBmdW5jdGlvbmFsIGFkZHJlc3MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0QWRkcmVzcyAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgYWRkcmVzcykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KK3sNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRVBFRFM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSAmPSB+QVQ5MUNfVURQX0VQRURTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUNCisvLyogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCit7DQorCXBVRFAtPlVEUF9HTEJTVEFURSAgJj0gfihBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKTsNCisJcFVEUC0+VURQX0dMQlNUQVRFICB8PSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0U3RhdGUNCisvLyogXGJyaWVmIHJldHVybiBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0U3RhdGUgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gKHBVRFAtPlVEUF9HTEJTVEFURSAgJiAoQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcA0KKy8vKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0DQorew0KKwlwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KKwlwVURQLT5VRFBfUlNURVAgPSAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbA0KKy8vKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUNCisvLyogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlKSAgICAgLy8gXGFyZyB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBEUFINCit7DQorCXBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdID0gdmFsdWU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQNCisvLyogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXJldHVybiBwVURQLT5VRFBfRkRSW2VuZHBvaW50XTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwRW5kT2ZXcg0KKy8vKiBcYnJpZWYgTm90aWZ5IHRoZSBVRFAgdGhhdCB2YWx1ZXMgaW4gRFBSIGFyZSByZWFkeSB0byBiZSBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwRW5kT2ZXcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gQVQ5MUNfVURQX1RYUEtUUkRZOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBDbGVhcg0KKy8vKiBcYnJpZWYgQ2xlYXIgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwQ2xlYXIoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSAmPSB+KGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTZXQNCisvLyogXGJyaWVmIFNldCBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTZXQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBTdGF0dXMoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXJldHVybiBwVURQLT5VRFBfQ1NSW2VuZHBvaW50XTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVURQIHBVZHApIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwVWRwLT5VRFBfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVURQIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfVURQIHBVZHAsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBVZHApICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFRDIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBUYy0+VENfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBUYy0+VENfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UQyBwVGMpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBUYy0+VENfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMocFRjKSAmIGZsYWcpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIENBTg0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorI2RlZmluZQlTVEFOREFSRF9GT1JNQVQgMA0KKyNkZWZpbmUJRVhURU5ERURfRk9STUFUIDENCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycygpDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKEFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsDQorCQkJCQkJCQlpbnQgIAkJCW1vZGVfcmVnLA0KKwkJCQkJCQkJaW50IAkJCWFjY2VwdGFuY2VfbWFza19yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWlkX3JlZywNCisJCQkJCQkJCWludCAgCQkJZGF0YV9sb3dfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlkYXRhX2hpZ2hfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQljb250cm9sX3JlZykNCit7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSIAk9IDB4MDsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgCT0gbW9kZV9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUFNIAk9IGFjY2VwdGFuY2VfbWFza19yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEIAk9IGlkX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREwgCT0gZGF0YV9sb3dfcmVnOyAJCQ0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ESCAJPSBkYXRhX2hpZ2hfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiAJPSBjb250cm9sX3JlZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfRW5hYmxlQ0FOKCkNCisvLyogXGJyaWVmIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VuYWJsZUNBTigNCisJQVQ5MVBTX0NBTiBwQ0FOKSAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlwQ0FOLT5DQU5fTVIgfD0gQVQ5MUNfQ0FOX0NBTkVOOw0KKw0KKwkvLyBXYWl0IGZvciBXQUtFVVAgZmxhZyByYWlzaW5nIDw9PiAxMS1yZWNlc3NpdmUtYml0IHdlcmUgc2Nhbm5lZCBieSB0aGUgdHJhbnNjZWl2ZXINCisJd2hpbGUoIChwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQKSAhPSBBVDkxQ19DQU5fV0FLRVVQICk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0Rpc2FibGVDQU4oKQ0KKy8vKiBcYnJpZWYgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRGlzYWJsZUNBTigNCisJQVQ5MVBTX0NBTiBwQ0FOKSAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlwQ0FOLT5DQU5fTVIgJj0gfkFUOTFDX0NBTl9DQU5FTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQ0FOIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9FbmFibGVJdCAoDQorCUFUOTFQU19DQU4gcENBTiwgICAgIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBDQU4gaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0Rpc2FibGVJdCAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcENBTi0+Q0FOX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFN0YXR1cyggLy8gXHJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQ0FOIHBDQU4pIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBDQU4tPkNBTl9TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19DQU4gcENBTikgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0NBTiBwQ0FOLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBDQU4pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX0NBTiBwQ0FOLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX0NBTl9HZXRTdGF0dXMocENBTikgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcENBTi0+Q0FOX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX01SOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIEJhdWRyYXRlIG9mIHRoZSBDQU4gY29udHJvbGxlciBmb3IgdGhlIG5ldHdvcmsNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgYmF1ZHJhdGVfY2ZnKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBCUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fQlIgPSBiYXVkcmF0ZV9jZmc7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yayB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEJhdWRyYXRlICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX0JSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVybmFsQ291bnRlcg0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBUaW1lciBSZWdzaXRlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEludGVybmFsQ291bnRlciAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBDQU4tPkNBTl9USU07CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0VGltZXN0YW1wDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcCAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBDQU4tPkNBTl9USU1FU1RQOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEVycm9yQ291bnRlcg0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX0VDUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0DQorLy8qIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCit7DQorCXBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdA0KKy8vKiBcYnJpZWYgQWJvcnQgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICB1bnNpZ25lZCBpbnQgYWJvcnRfY21kKQ0KK3sNCisJcENBTi0+Q0FOX0FDUiA9IGFib3J0X2NtZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qIFxicmllZiBWZXJzaW9uID09IDAgZm9yIFN0YW5kYXJkIG1lc3NzYWdlLCBWZXJzaW9uID09IDEgZm9yIEV4dGVuZGVkICANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBpZCwNCisgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uKQ0KK3sNCisJaWYodmVyc2lvbj09MCkJLy8gSUR2QSBTdGFuZGFyZCBGb3JtYXQNCisJCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQ8PDE4Ow0KKwllbHNlCS8vIElEdkIgRXh0ZW5kZWQgRm9ybWF0DQorCQlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkIHwgKDE8PDI5KTsJLy8gc2V0IE1JREUgYml0DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IG1hc2spDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01BTSA9IG1hc2s7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01BTTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEZhbWlseUlEDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRGYW1pbHlJRCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KK3sNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUZJRDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybA0KKy8vKiBcYnJpZWYgUmVxdWVzdCBhbmQgY29uZmlnIGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3gNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmxSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IG1lc3NhZ2VfY3RybF9jbWQpDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiA9IG1lc3NhZ2VfY3RybF9jbWQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBNYWlsYm94IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01TUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGxvdyB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgZGF0YSkNCit7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURMID0gZGF0YTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdw0KKy8vKiBcYnJpZWYgUmV0dXJuIGRhdGEgbG93IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3cgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ETDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2gNCisvLyogXGJyaWVmIFByb2dyYW0gZGF0YSBoaWdoIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgZGF0YSkNCit7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURIID0gZGF0YTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2gNCisvLyogXGJyaWVmIFJldHVybiBkYXRhIGhpZ2ggdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2ggKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ESDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9PcGVuDQorLy8qIFxicmllZiBPcGVuIGEgQ0FOIFBvcnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9PcGVuICgNCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudWxsKSAgLy8gXGFyZw0KK3sNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQURDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAgICAgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIEFEQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0U3RhdHVzKCAvLyBccmV0dXJuIEFEQyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FEQyBwQURDKSAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQURDLT5BRENfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQURDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFEQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldFN0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnVGltaW5ncw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBkaWZmZXJlbnQgbmVjZXNzYXJ5IHRpbWluZ3Mgb2YgdGhlIEFEQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1RpbWluZ3MgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWNrX2Nsb2NrLCAvLyBpbiBNSHogDQorCXVuc2lnbmVkIGludCBhZGNfY2xvY2ssIC8vIGluIE1IeiANCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgLy8gaW4gdXMgDQorCXVuc2lnbmVkIGludCBzYW1wbGVfYW5kX2hvbGRfdGltZSkJLy8gaW4gbnMgIA0KK3sNCisJdW5zaWduZWQgaW50IHByZXNjYWwsc3RhcnR1cCxzaHRpbTsNCisJDQorCXByZXNjYWwgPSBtY2tfY2xvY2svKDIqYWRjX2Nsb2NrKSAtIDE7DQorCXN0YXJ0dXAgPSBhZGNfY2xvY2sqc3RhcnR1cF90aW1lLzggLSAxOw0KKwlzaHRpbSA9IGFkY19jbG9jaypzYW1wbGVfYW5kX2hvbGRfdGltZS8xMDAwIC0gMTsNCisJDQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX01SID0gKCAocHJlc2NhbDw8OCkgJiBBVDkxQ19BRENfUFJFU0NBTCkgfCAoIChzdGFydHVwPDwxNikgJiBBVDkxQ19BRENfU1RBUlRVUCkgfCAoIChzaHRpbTw8MjQpICYgQVQ5MUNfQURDX1NIVElNKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ0hFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfQ0hFUiA9IGNoYW5uZWw7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ0hEUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfQ0hEUiA9IGNoYW5uZWw7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DSFNSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbg0KKy8vKiBcYnJpZWYgU29mdHdhcmUgcmVxdWVzdCBmb3IgYSBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJzaW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1NvZnRSZXNldCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19MQ0RSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDANCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAwIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIwOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDENCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAxIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIxOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDINCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAyIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIyOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAzIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIzOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA0IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI0OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA1IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI1OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA2IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI2OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA3IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI3OwkNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBRVMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIEFFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMsICAgICAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQUVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQUVTLT5BRVNfSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQUVTLT5BRVNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQUVTIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQUVTIHBBRVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFFUykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFFUyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQUVTIHBBRVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQUVTX0dldFN0YXR1cyhwQUVTKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQUVTLT5BRVNfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQUVTLT5BRVNfTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nDQorLy8qIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1RBUlQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU29mdFJlc2V0DQorLy8qIFxicmllZiBSZXNldCBBRVMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU29mdFJlc2V0ICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1dSU1Q7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfTG9hZE5ld1NlZWQNCisvLyogXGJyaWVmIExvYWQgTmV3IFNlZWQgaW4gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0xvYWROZXdTZWVkICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfTE9BRFNFRUQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU2V0Q3J5cHRvS2V5DQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQorew0KKwlwQUVTLT5BRVNfS0VZV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSW5wdXREYXRhDQorLy8qIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0lucHV0RGF0YSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbmRhdGENCisJKQ0KK3sNCisJcEFFUy0+QUVTX0lEQVRBeFJbaW5kZXhdID0gaW5kYXRhOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgNCisJKQ0KK3sNCisJcmV0dXJuIHBBRVMtPkFFU19PREFUQXhSW2luZGV4XTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TZXRJbml0aWFsaXphdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgU2V0IEluaXRpYWxpemF0aW9uIFZlY3RvciAob3IgQ291bnRlcikgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbml0dmVjdG9yDQorCSkNCit7DQorCXBBRVMtPkFFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRERVMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBUREVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgICAgIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVERFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfVERFUyBwVERFUykgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBUREVTLT5UREVTX0lTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUREVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfVERFUyBwVERFUykgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBUREVTLT5UREVTX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUREVTIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RERVMgcFRERVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVERFUykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUREVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfVERFUyBwVERFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfVERFU19HZXRTdGF0dXMocFRERVMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBUREVTIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIFRERVMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRNb2RlUmVnICgNCisJQVQ5MVBTX1RERVMgcFRERVMgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcFRERVMtPlRERVNfTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZw0KKy8vKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TdGFydFByb2Nlc3NpbmcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU29mdFJlc2V0DQorLy8qIFxicmllZiBSZXNldCBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TV1JTVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MQ0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDEgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KK3sNCisJcFRERVMtPlRERVNfS0VZMVd4UltpbmRleF0gPSBrZXl3b3JkOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkyDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMiBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTIgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQorew0KKwlwVERFUy0+VERFU19LRVkyV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTMNCisvLyogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAzIFdvcmQgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MyAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBrZXl3b3JkDQorCSkNCit7DQorCXBUREVTLT5UREVTX0tFWTNXeFJbaW5kZXhdID0ga2V5d29yZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSW5wdXREYXRhDQorLy8qIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19JbnB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5kYXRhDQorCSkNCit7DQorCXBUREVTLT5UREVTX0lEQVRBeFJbaW5kZXhdID0gaW5kYXRhOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRPdXRwdXREYXRhDQorLy8qIFxicmllZiBHZXQgT3V0cHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRPdXRwdXREYXRhICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleA0KKwkpDQorew0KKwlyZXR1cm4gcFRERVMtPlRERVNfT0RBVEF4UltpbmRleF07CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yDQorLy8qIFxicmllZiBTZXQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluaXR2ZWN0b3INCisJKQ0KK3sNCisJcFRERVMtPlRERVNfSVZ4UltpbmRleF0gPSBpbml0dmVjdG9yOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIERCR1UNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBEQkdVIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19EUlhEICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjhfRFRYRCAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzMF9QQ0syICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjlfUENLMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIwX1BDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIwX1BDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMl9QQ0syICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjFfUENLMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTMwX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19QQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjdfUENLMyAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1ZSRUdfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBWUkVHDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJTVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTU0MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1NDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1NDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X1JLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9USyAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjFfVEYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X1JEICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9SRiAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfVEQgICAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFdEVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVVMxKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjZfUkkxICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI0X0RTUjEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyM19EQ0QxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjVfRFRSMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE3X1NDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE4X1JUUzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE2X1RYRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE1X1JYRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE5X0NUUzEgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzApKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMF9SWEQwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9DVFMwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19SVFMwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMl9TQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMV9UWEQwICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1BJMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1BJMSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTUEkxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkxX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE2X05QQ1MxMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMF9OUENTMTEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTFfTlBDUzEyICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTRfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X05QQ1MxMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9OUENTMTAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjJfU1BDSzEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNF9NSVNPMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjZfTlBDUzEyICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIzX01PU0kxICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1BJMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTBfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1BJMCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTUEkwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEzX05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxN19OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTRfTlBDUzAyICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNl9NSVNPMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTNfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExN19NT1NJMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMThfU1BDSzAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE0X05QQ1MwMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMl9OUENTMDAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9OUENTMDIgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBSUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfRklRKSB8DQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9JUlEwKSB8DQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9JUlExKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQUlDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTMwX0lSUTAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOV9GSVEgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTRfSVJRMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9BRVMpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVFdJDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RXSSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRXSSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMV9UV0NLICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTBfVFdEICAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQURDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FEQykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFEQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE4X0FEVFJHICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIM19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMl9QV00zICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMzBfUFdNMyAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIxX1BXTTIgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyOV9QV00yICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjBfUFdNMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI4X1BXTTEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOV9QV00wICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjdfUFdNMCAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JUVENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBSVFRDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVURQDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VEUCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVERFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVERFUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgRU1BQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfRU1BQykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBFTUFDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9FTUFDX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyX0VUWDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMl9FVFhFUiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfRUNPTCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjExX0VUWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI2X0VSWDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNV9FUlhEViAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTNfRVJYMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjNfRVRYMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjhfRU1EQyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjVfRVJYMCAgICApIHwNCisJCS8vKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfRUYxMDAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE0X0VSWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI0X0VDUlNfRUNSU0RWKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxX0VUWEVOICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMF9FVFgyICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0spIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjlfRU1ESU8gICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjdfRVJYRVIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE3X0VSWENLICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzApKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjNfVElPQTAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI0X1RJT0IwICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMl9UQ0xLMCAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNV9USU9BMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjZfVElPQjEgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE5X1RDTEsxICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzJfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzJfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMyKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMyIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzJfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI4X1RJT0IyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19USU9BMiAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNV9UQ0xLMiAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9BX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT0FfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfUElPQSkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9CX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT0JfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfUElPQikpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBDQU4NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQ0FOKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQ0FOIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIwX0NBTlRYICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOV9DQU5SWCAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUFdNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfUFdNQykpOw0KK30NCisNCisjZW5kaWYgLy8gbGliX0FUOTFTQU03WDEyOF9IDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDI1Ni5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZWU5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMjU2LmgKQEAgLTAsMCArMSw0NTU4IEBACisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCisvLyogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKy8vKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KKy8vKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKy8vKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorLy8qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KKy8vKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQorLy8qIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQorLy8qIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCisvLyogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBGaWxlIE5hbWUgICAgICAgICAgIDogbGliX0FUOTFTQU03WDI1Ni5oDQorLy8qIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1gyNTYgaW5saW5lZCBmdW5jdGlvbnMNCisvLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KQ0KKy8vKg0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kYmd1LmgvMS4xL0ZyaSBKYW4gMzEgMTI6MTg6NDAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BtY19TQU03WC5oLzEuMS9UdWUgRmViICAxIDA4OjMyOjEwIDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9WUkVHXzYwODVCLmgvMS4xL1R1ZSBGZWIgIDEgMTY6MjA6NDcgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3JzdGNfNjA5OEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOToyMCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3NjLmgvMS40L0ZyaSBKYW4gMzEgMTI6MTk6MjAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3dkdGNfNjA4MEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozODozMCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdXNhcnQuaC8xLjUvVGh1IE5vdiAyMSAxNjowMTo1NCAyMDAyLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3BpMi5oLzEuMS9Nb24gQXVnIDI1IDE0OjIzOjUyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waXRjXzYwNzlBLmgvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FpY182MDc1Yi5oLzEuMS9GcmkgTWF5IDIwIDE0OjAxOjE5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZXNfNjE0OWEuaC8xLjEvTW9uIEphbiAxNyAwNzo0MzowOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdHdpLmgvMS4zL01vbiBKdWwgMTkgMTQ6Mjc6NTggMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FkYy5oLzEuNi9GcmkgT2N0IDE3IDA5OjEyOjM4IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9ydHRjXzYwODFBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MzggMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VkcC5oLzEuNC9XZWQgRmViIDE2IDA4OjM5OjM0IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kZXMzXzYxNTBhLmgvMS4xL01vbiBKYW4gMTcgMDk6MTk6MTkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3RjXzE3NTNiLmgvMS4xL0ZyaSBKYW4gMzEgMTI6MjA6MDIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX01DX1NBTTdYLmgvMS4xL1RodSBNYXIgMjUgMTU6MTk6MTQgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3Bpby5oLzEuMy9GcmkgSmFuIDMxIDEyOjE4OjU2IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9jYW5fQVQ5MS5oLzEuNC9GcmkgT2N0IDE3IDA5OjEyOjUwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BkYy5oLzEuMi9UdWUgSnVsICAyIDEzOjI5OjQwIDIwMDIvLw0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorI2lmbmRlZiBsaWJfQVQ5MVNBTTdYMjU2X0gNCisjZGVmaW5lIGxpYl9BVDkxU0FNN1gyNTZfSA0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQUlDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisjZGVmaW5lIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFICgodm9pZCAoKikgKCkpIDB4RTUxRkZGMjApIC8vIGxkciwgcGMsIFtwYywgIy0mRjIwXQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdA0KKy8vKiBcYnJpZWYgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Db25maWd1cmVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkLCAgICAgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCisJdW5zaWduZWQgaW50IHByaW9yaXR5LCAgIC8vIFxhcmcgcHJpb3JpdHkgdG8gZ2l2ZSB0byB0aGUgaW50ZXJydXB0DQorCXVuc2lnbmVkIGludCBzcmNfdHlwZSwgICAvLyBcYXJnIGFjdGl2YXRpb24gYW5kIHNlbnNlIG9mIGFjdGl2YXRpb24NCisJdm9pZCAoKm5ld0hhbmRsZXIpICh2b2lkKSApIC8vIFxhcmcgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXINCit7DQorCXVuc2lnbmVkIGludCBvbGRIYW5kbGVyOw0KKyAgICB1bnNpZ25lZCBpbnQgbWFzayA7DQorDQorICAgIG9sZEhhbmRsZXIgPSBwQWljLT5BSUNfU1ZSW2lycV9pZF07DQorDQorICAgIG1hc2sgPSAweDEgPDwgaXJxX2lkIDsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eQ0KKyAgICBwQWljLT5BSUNfU1ZSW2lycV9pZF0gPSAodW5zaWduZWQgaW50KSBuZXdIYW5kbGVyIDsNCisgICAgLy8qIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKyAgICBwQWljLT5BSUNfU01SW2lycV9pZF0gPSBzcmNfdHlwZSB8IHByaW9yaXR5ICA7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KKw0KKwlyZXR1cm4gb2xkSGFuZGxlcjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQgKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KK3sNCisgICAgLy8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSUVDUiA9IDB4MSA8PCBpcnFfaWQgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCApIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorew0KKyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDB4MSA8PCBpcnFfaWQ7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRENSID0gbWFzayA7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkNCisgICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrIDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NsZWFySXQNCisvLyogXGJyaWVmIENsZWFyIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NsZWFySXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCit7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkNCisgICAgcEFpYy0+QUlDX0lDQ1IgPSAoMHgxIDw8IGlycV9pZCk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0DQorLy8qIFxicmllZiBBY2tub3dsZWRnZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorew0KKyAgICBwQWljLT5BSUNfRU9JQ1IgPSBwQWljLT5BSUNfRU9JQ1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3INCisvLyogXGJyaWVmIENvbmZpZ3VyZSB2ZWN0b3IgaGFuZGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IgKA0KKwl1bnNpZ25lZCBpbnQgKnBWZWN0b3IsIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl2b2lkICgqSGFuZGxlcikgKCkgKSAgIC8vIFxhcmcgSW50ZXJydXB0IEhhbmRsZXINCit7DQorCXVuc2lnbmVkIGludCBvbGRWZWN0b3IgPSAqcFZlY3RvcjsNCisNCisJaWYgKCh1bnNpZ25lZCBpbnQpIEhhbmRsZXIgPT0gKHVuc2lnbmVkIGludCkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUpDQorCQkqcFZlY3RvciA9ICh1bnNpZ25lZCBpbnQpIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFOw0KKwllbHNlDQorCQkqcFZlY3RvciA9ICgoKCgodW5zaWduZWQgaW50KSBIYW5kbGVyKSAtICgodW5zaWduZWQgaW50KSBwVmVjdG9yKSAtIDB4OCkgPj4gMikgJiAweDAwRkZGRkZGKSB8IDB4RUEwMDAwMDA7DQorDQorCXJldHVybiBvbGRWZWN0b3I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19UcmlnDQorLy8qIFxicmllZiBUcmlnIGFuIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgIEFUOTFGX0FJQ19UcmlnICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlcg0KK3sNCisJcEFpYy0+QUlDX0lTQ1IgPSAoMHgxIDw8IGlycV9pZCkgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfSXNBY3RpdmUNCisvLyogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgYWN0aXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX0lzQWN0aXZlICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgSW50ZXJydXB0IE51bWJlcg0KK3sNCisJcmV0dXJuIChwQWljLT5BSUNfSVNSICYgKDB4MSA8PCBpcnFfaWQpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzUGVuZGluZw0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBwZW5kaW5nDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX0lzUGVuZGluZyAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCit7DQorCXJldHVybiAocEFpYy0+QUlDX0lQUiAmICgweDEgPDwgaXJxX2lkKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19PcGVuDQorLy8qIFxicmllZiBTZXQgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIEFJQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfT3BlbigNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpJcnFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBJUlEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRmlxSGFuZGxlcikgKCksICAvLyBcYXJnIERlZmF1bHQgRklRIHZlY3RvciBleGNlcHRpb24NCisJdm9pZCAoKkRlZmF1bHRIYW5kbGVyKSAgKCksIC8vIFxhcmcgRGVmYXVsdCBIYW5kbGVyIHNldCBpbiBJU1INCisJdm9pZCAoKlNwdXJpb3VzSGFuZGxlcikgKCksIC8vIFxhcmcgRGVmYXVsdCBTcHVyaW91cyBIYW5kbGVyDQorCXVuc2lnbmVkIGludCBwcm90ZWN0TW9kZSkgICAvLyBcYXJnIERlYnVnIENvbnRyb2wgUmVnaXN0ZXINCit7DQorCWludCBpOw0KKw0KKwkvLyBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBzZXQgSVZSIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXINCisJZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHsNCisJCUFUOTFGX0FJQ19EaXNhYmxlSXQocEFpYywgaSk7DQorCQlBVDkxRl9BSUNfQ29uZmlndXJlSXQocEFpYywgaSwgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCwgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCwgRGVmYXVsdEhhbmRsZXIpOw0KKwl9DQorDQorCS8vIFNldCB0aGUgSVJRIGV4Y2VwdGlvbiB2ZWN0b3INCisJQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvcigodW5zaWduZWQgaW50ICopIDB4MTgsIElycUhhbmRsZXIpOw0KKwkvLyBTZXQgdGhlIEZhc3QgSW50ZXJydXB0IGV4Y2VwdGlvbiB2ZWN0b3INCisJQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvcigodW5zaWduZWQgaW50ICopIDB4MUMsIEZpcUhhbmRsZXIpOw0KKw0KKwlwQWljLT5BSUNfU1BVID0gKHVuc2lnbmVkIGludCkgU3B1cmlvdXNIYW5kbGVyOw0KKwlwQWljLT5BSUNfRENSID0gcHJvdGVjdE1vZGU7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUERDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFJ4DQorLy8qIFxicmllZiBTZXQgdGhlIG5leHQgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRSeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkDQorCXVuc2lnbmVkIGludCBieXRlcykgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkDQorew0KKwlwUERDLT5QRENfUk5QUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19STkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0VHgNCisvLyogXGJyaWVmIFNldCB0aGUgbmV4dCB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRUeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSB0cmFuc21pdHRlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkDQorew0KKwlwUERDLT5QRENfVE5QUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UTkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KK3sNCisJcFBEQy0+UERDX1JQUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19SQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldFR4DQorLy8qIFxicmllZiBTZXQgdGhlIHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0VHggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZA0KK3sNCisJcFBEQy0+UERDX1RQUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgdHJhbnNtaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgdHJhbnNtaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVSeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1R4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1RDUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1ROQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNSeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gZmlsbGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNSeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1JDUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1JOQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzLCByZS1lbmFibGUgUlggYW5kIFRYDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX09wZW4gKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRGlzYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRGlzYWJsZVR4KHBQREMpOw0KKw0KKwkvLyogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QNCisJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorDQorICAgIC8vKiBFbmFibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0VuYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRW5hYmxlVHgocFBEQyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19DbG9zZSAoDQorCUFUOTFQU19QREMgcFBEQykgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19EaXNhYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19EaXNhYmxlVHgocFBEQyk7DQorDQorCS8vKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdA0KKwlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1BEQyBwUERDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCWlmIChBVDkxRl9QRENfSXNUeEVtcHR5KHBQREMpKSB7DQorCQkvLyogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXRUeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIpOw0KKwkJcmV0dXJuIDI7DQorCX0NCisJZWxzZSBpZiAoQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkocFBEQykpIHsNCisJCS8vKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWVsc2Ugew0KKwkJLy8qIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLg0KKwkJcmV0dXJuIDA7DQorCX0NCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlpZiAoQVQ5MUZfUERDX0lzUnhFbXB0eShwUERDKSkgew0KKwkJLy8qIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0UngocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyKTsNCisJCXJldHVybiAyOw0KKwl9DQorCWVsc2UgaWYgKEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5KHBQREMpKSB7DQorCQkvLyogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKwllbHNlIHsNCisJCS8vKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4NCisJCXJldHVybiAwOw0KKwl9DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgREJHVQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBEQkdVIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwRGJndS0+REJHVV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgREJHVSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwRGJndS0+REJHVV9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwRGJndS0+REJHVV9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgREJHVSBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMocERiZ3UpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoDQorLy8qIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaEFFbmFibGUsICAvLyBcYXJnIFBFUklQSCBBIHRvIGVuYWJsZQ0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSkgIC8vIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlDQorDQorew0KKwlwUGlvLT5QSU9fQVNSID0gcGVyaXBoQUVuYWJsZTsNCisJcFBpby0+UElPX0JTUiA9IHBlcmlwaEJFbmFibGU7DQorCXBQaW8tPlBJT19QRFIgPSAocGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUpOyAvLyBTZXQgaW4gUGVyaXBoIG1vZGUNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ091dHB1dA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBvdXRwdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBpb0VuYWJsZSkgICAgICAvLyBcYXJnIFBJTyB0byBiZSBlbmFibGVkDQorew0KKwlwUGlvLT5QSU9fUEVSID0gcGlvRW5hYmxlOyAvLyBTZXQgaW4gUElPIG1vZGUNCisJcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgLy8gQ29uZmlndXJlIGluIE91dHB1dA0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8gRGlzYWJsZSBvdXRwdXQNCisJcFBpby0+UElPX09EUiAgPSBpbnB1dEVuYWJsZTsNCisJcFBpby0+UElPX1BFUiAgPSBpbnB1dEVuYWJsZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24NCisJcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQorCXBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQdWxsdXANCisvLyogXGJyaWVmIEVuYWJsZSBwdWxsdXAgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1B1bGx1cCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcHVsbHVwRW5hYmxlKSAgIC8vIFxhcmcgZW5hYmxlIHB1bGx1cCBvbiBQSU8NCit7DQorCQkvLyBDb25uZWN0IG9yIG5vdCBQdWxsdXANCisJcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCisJcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUNCisvLyogXGJyaWVmIEVuYWJsZSBkaXJlY3QgZHJpdmUgb24gUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBkaXJlY3REcml2ZSkgICAgLy8gXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZQ0KKw0KK3sNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyDQorLy8qIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRGaWx0ZXIpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXINCisNCit7DQorCS8vIENvbmZpZ3VyZSB0aGUgRGlyZWN0IERyaXZlDQorCXBQaW8tPlBJT19JRkRSICA9IH5pbnB1dEZpbHRlcjsNCisJcFBpby0+UElPX0lGRVIgID0gaW5wdXRGaWx0ZXI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBpbnB1dCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0KCAvLyBccmV0dXJuIFBJTyBpbnB1dA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgaW5wdXQgZmxhZyBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0U2V0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXQocFBpbykgJiBmbGFnKTsNCit9DQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX1NldE91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDEgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19TZXRPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBzZXQNCit7DQorCXBQaW8tPlBJT19TT0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NsZWFyT3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMCBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NsZWFyT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZA0KK3sNCisJcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQNCisvLyogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZA0KK3sNCisJcFBpby0+UElPX09EU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19QRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fUERSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX1BTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlDQorLy8qIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09FUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlDQorLy8qIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0U2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZQ0KKy8vKiBcYnJpZWYgSW5wdXQgRmlsdGVyIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlDQorLy8qIFxicmllZiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JRlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW5wdXQgZmlsdGVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMNCisJQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09EU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX01ERVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlDQorLy8qIFxicmllZiBNdWx0aSBEcml2ZXIgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19NRERSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyggLy8gXHJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX01EU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBNdWx0aURyaXZlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0FfUmVnaXN0ZXJTZWxlY3Rpb24NCisvLyogXGJyaWVmIFBJTyBBIFJlZ2lzdGVyIFNlbGVjdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbg0KK3sNCisgICAgICAgIHBQaW8tPlBJT19BU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24oDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIEIgcmVnaXN0ZXIgc2VsZWN0aW9uDQorew0KKyAgICAgICAgcFBpby0+UElPX0JTUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLy8gXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fQUJTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzQUJfUmVnaXN0ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEFCIFJlZ2lzdGVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQUJfUmVnaXN0ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlDQorLy8qIFxicmllZiBPdXRwdXQgV3JpdGUgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT1dFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB3cml0ZSB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PV0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09XU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dFdyaXRlU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXRXcml0ZSBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFdyaXRlU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldENmZ1B1bGx1cA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldENmZ1B1bGx1cCggLy8gXHJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXANCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QUFVTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKH5BVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgU0NEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfU0NEUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwUE1DLT5QTUNfU0NTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCit7DQorCXBQTUMtPlBNQ19QQ0VSID0gcGVyaXBoSWRzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBEaXNhYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaElkcykgIC8vIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZQ0KK3sNCisJcFBNQy0+UE1DX1BDRFIgPSBwZXJpcGhJZHM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgR2V0IHBlcmlwaGVyYWwgY2xvY2sgc3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19QQ1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBDS0dSLT5DS0dSX01PUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3INCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvcigNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXBDS0dSLT5DS0dSX01PUiB8PSBBVDkxQ19DS0dSX01PU0NFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3INCisvLyogXGJyaWVmIERpc2FibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lDQorLy8qIFxicmllZiBDZmcgTU9SIFJlZ2lzdGVyIGFjY29yZGluZyB0byB0aGUgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAgLy8gXGFyZyBtYWluIG9zYyBzdGFydHVwIHRpbWUgaW4gbWljcm9zZWNvbmQgKHVzKQ0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9PU0NPVU5UOw0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gKChzbG93Q2xvY2sgKiBzdGFydHVwX3RpbWUpLyg4KjEwMDAwMDApKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBDS0dSLT5DS0dSX01DRlI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrDQorLy8qIFxicmllZiBSZXR1cm4gTWFpbiBjbG9jayBpbiBIeg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2sgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXJldHVybiAoKHBDS0dSLT5DS0dSX01DRlIgICYgQVQ5MUNfQ0tHUl9NQUlORikgKiBzbG93Q2xvY2spID4+IDQ7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdNQ0tSZWcNCisvLyogXGJyaWVmIENmZyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnTUNLUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUE1DLT5QTUNfTUNLUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNQ0tSZWcNCisvLyogXGJyaWVmIFJldHVybiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNQ0tSZWcoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX01DS1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrDQorLy8qIFxicmllZiBSZXR1cm4gbWFzdGVyIGNsb2NrIGluIEh6IHdoaWNoIGNvcnJlcG9uZHMgdG8gcHJvY2Vzc29yIGNsb2NrIGZvciBBUk03DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJdW5zaWduZWQgaW50IHJlZyA9IHBQTUMtPlBNQ19NQ0tSOw0KKwl1bnNpZ25lZCBpbnQgcHJlc2NhbGVyID0gKDEgPDwgKChyZWcgJiBBVDkxQ19QTUNfUFJFUykgPj4gMikpOw0KKwl1bnNpZ25lZCBpbnQgcGxsRGl2aWRlciwgcGxsTXVsdGlwbGllcjsNCisNCisJc3dpdGNoIChyZWcgJiBBVDkxQ19QTUNfQ1NTKSB7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfU0xPV19DTEs6IC8vIFNsb3cgY2xvY2sgc2VsZWN0ZWQNCisJCQlyZXR1cm4gc2xvd0Nsb2NrIC8gcHJlc2NhbGVyOw0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLOiAvLyBNYWluIGNsb2NrIGlzIHNlbGVjdGVkDQorCQkJcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKHBDS0dSLCBzbG93Q2xvY2spIC8gcHJlc2NhbGVyOw0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX1BMTF9DTEs6IC8vIFBMTEIgY2xvY2sgaXMgc2VsZWN0ZWQNCisJCQlyZWcgPSBwQ0tHUi0+Q0tHUl9QTExSOw0KKwkJCXBsbERpdmlkZXIgICAgPSAocmVnICAmIEFUOTFDX0NLR1JfRElWKTsNCisJCQlwbGxNdWx0aXBsaWVyID0gKChyZWcgICYgQVQ5MUNfQ0tHUl9NVUwpID4+IDE2KSArIDE7DQorCQkJcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKHBDS0dSLCBzbG93Q2xvY2spIC8gcGxsRGl2aWRlciAqIHBsbE11bHRpcGxpZXIgLyBwcmVzY2FsZXI7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQQ0sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2ssICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUE1DLT5QTUNfUENLUltwY2tdID0gbW9kZTsNCisJcFBNQy0+UE1DX1NDRVIgPSAoMSA8PCBwY2spIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUENLICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBjaykgIC8vIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNw0KK3sNCisJcFBNQy0+UE1DX1NDRFIgPSAoMSA8PCBwY2spIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsICAgICAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgUE1DIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BNQ19HZXRTdGF0dXMocFBNQykgJiBmbGFnKTsNCit9LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSU1RDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RTb2Z0UmVzZXQNCisvLyogXGJyaWVmIFN0YXJ0IFNvZnR3YXJlIFJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlNUU29mdFJlc2V0KA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXQpDQorew0KKwlwUlNUQy0+UlNUQ19SQ1IgPSAoMHhBNTAwMDAwMCB8IHJlc2V0KTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUU2V0TW9kZQ0KKy8vKiBcYnJpZWYgU2V0IFJlc2V0IE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RTZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBSU1RDLT5SU1RDX1JNUiA9ICgweEE1MDAwMDAwIHwgbW9kZSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVEdldE1vZGUNCisvLyogXGJyaWVmIEdldCBSZXNldCBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RHZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKHBSU1RDLT5SU1RDX1JNUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVEdldFN0YXR1cw0KKy8vKiBcYnJpZWYgR2V0IFJlc2V0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKHBSU1RDLT5SU1RDX1JTUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVElzU29mdFJzdEFjdGl2ZQ0KKy8vKiBcYnJpZWYgUmV0dXJuICE9MCBpZiBzb2Z0d2FyZSByZXNldCBpcyBzdGlsbCBub3QgY29tcGxldGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQykNCit7DQorCXJldHVybiAoKHBSU1RDLT5SU1RDX1JTUikgJiBBVDkxQ19SU1RDX1NSQ01QKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpDQorLy8qIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1zKQ0KK3sNCisJaWYgKG1zID4gMjAwMCkNCisJCXJldHVybiAxOyAgIC8vIEFUOTFDX1RJTUVfT1VUX09GX1JBTkdFDQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKCgobXMgPDwgMTUpIC8xMDAwKSAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRTZXRQcmVzY2FsZXIoKQ0KKy8vKiBcYnJpZWYgIFNldCB0aGUgbmV3IHByZXNjYWxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFNldFByZXNjYWxlcigNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHJ0cHJlcykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKHJ0cHJlcyAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gKHBSVFRDLT5SVFRDX1JUTVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVFJlc3RhcnQoKQ0KKy8vKiBcYnJpZWYgIFJlc3RhcnQgdGhlIFJUVCBwcmVzY2FsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUUmVzdGFydCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVFJTVDsJDQorfQ0KKw0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBFbmFibGUgUlRUIEFsYXJtIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KK3sNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX0FMTUlFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfQ2xlYXJBbGFybUlOVCgpDQorLy8qIFxicmllZiAgRGlzYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyQWxhcm1JTlQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfQUxNSUVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRSdHRJbmNJTlQoKQ0KKy8vKiBcYnJpZWYgIEVuYWJsZSBSVFQgSU5DIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRSdHRJbmNJTlQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRJTkNJRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyUnR0SW5jSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyUnR0SW5jSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQorew0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX1JUVElOQ0lFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgU2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybVZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMsIHVuc2lnbmVkIGludCBhbGFybSkNCit7DQorCXBSVFRDLT5SVFRDX1JUQVIgPSBhbGFybTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfR2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgR2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldEFsYXJtVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVEFSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRHZXRTdGF0dXMoKQ0KKy8vKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCBzdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRTdGF0dXMoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVFNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfUmVhZFZhbHVlKCkNCisvLyogXGJyaWVmICBSZWFkIHRoZSBSVFQgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRSZWFkVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCit7DQorICAgICAgICByZWdpc3RlciB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmFsMSx2YWwyOw0KKwlkbw0KKwl7DQorCQl2YWwxID0gcFJUVEMtPlJUVENfUlRWUjsNCisJCXZhbDIgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwl9CQ0KKwl3aGlsZSh2YWwxICE9IHZhbDIpOw0KKwlyZXR1cm4odmFsMSk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUSW5pdA0KKy8vKiBcYnJpZWYgU3lzdGVtIHRpbWVyIGluaXQgOiBwZXJpb2QgaW4gtXNlY29uZCwgc3lzdGVtIGNsb2NrIGZyZXEgaW4gTUh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUSW5pdCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXRfZnJlcXVlbmN5KQ0KK3sNCisJcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZD8gKHBlcmlvZCAqIHBpdF9mcmVxdWVuY3kgKyA4KSA+PiA0IDogMDsgLy8gKzggdG8gYXZvaWQgJTEwIGFuZCAvMTANCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUU2V0UElWDQorLy8qIFxicmllZiBTZXQgdGhlIFBJVCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVFNldFBJVigNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBpdikNCit7DQorCXBQSVRDLT5QSVRDX1BJTVIgPSBwaXYgfCAocFBJVEMtPlBJVENfUElNUiAmIChBVDkxQ19QSVRDX1BJVEVOIHwgQVQ5MUNfUElUQ19QSVRJRU4pKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElURW5hYmxlSW50DQorLy8qIFxicmllZiBFbmFibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVEVuYWJsZUludCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVElFTjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVERpc2FibGVJbnQNCisvLyogXGJyaWVmIERpc2FibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVERpc2FibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXBQSVRDLT5QSVRDX1BJTVIgJj0gfkFUOTFDX1BJVENfUElUSUVOOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0TW9kZQ0KKy8vKiBcYnJpZWYgUmVhZCBQSVQgbW9kZSByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJTVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRTdGF0dXMNCisvLyogXGJyaWVmIFJlYWQgUElUIHN0YXR1cyByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQorew0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElTUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJSVINCisvLyogXGJyaWVmIFJlYWQgUElUIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJSVIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCit7DQorCXJldHVybihwUElUQy0+UElUQ19QSUlSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0UElWUg0KKy8vKiBcYnJpZWYgUmVhZCBTeXN0ZW0gdGltZXIgQ1BJViBhbmQgUElDTlQgd2l0aG91dCByZXNzZXR0aW5nIHRoZSBjb3VudGVycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0UElWUigNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KK3sNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJVlIpOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFdEVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1dEVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IE1vZGUpDQorew0KKwlwV0RUQy0+V0RUQ19XRE1SID0gTW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUUmVzdGFydA0KKy8vKiBcYnJpZWYgUmVzdGFydCBXYXRjaGRvZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVFJlc3RhcnQoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQykNCit7DQorCXBXRFRDLT5XRFRDX1dEQ1IgPSAweEE1MDAwMDAxOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTR2V0dGF0dXMNCisvLyogXGJyaWVmIEdldCBXYXRjaGRvZyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVFNHZXR0YXR1cygNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KK3sNCisJcmV0dXJuKHBXRFRDLT5XRFRDX1dEU1IgJiAweDMpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRHZXRQZXJpb2QNCisvLyogXGJyaWVmIFRyYW5zbGF0ZSBtcyBpbnRvIFdhdGNoZG9nIENvbXBhdGlibGUgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVEdldFBlcmlvZCh1bnNpZ25lZCBpbnQgbXMpDQorew0KKwlpZiAoKG1zIDwgNCkgfHwgKG1zID4gMTYwMDApKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybigobXMgPDwgOCkgLyAxMDAwKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBWUkVHDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0VuYWJsZV9Mb3dQb3dlck1vZGUNCisvLyogXGJyaWVmIEVuYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1ZSRUcgcFZSRUcpDQorew0KKwlwVlJFRy0+VlJFR19NUiB8PSBBVDkxQ19WUkVHX1BTVERCWTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUNCisvLyogXGJyaWVmIERpc2FibGUgVlJFRyBMb3cgUG93ZXIgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUoDQorICAgICAgICBBVDkxUFNfVlJFRyBwVlJFRykNCit7DQorCXBWUkVHLT5WUkVHX01SICY9IH5BVDkxQ19WUkVHX1BTVERCWTsJDQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KKyNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICgodW5zaWduZWQgaW50KSAweDVBIDw8IDI0KSAvLyAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19SZW1hcA0KKy8vKiBcYnJpZWYgTWFrZSBSZW1hcA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX1JlbWFwICh2b2lkKSAgICAgLy8NCit7DQorICAgIEFUOTFQU19NQyBwTUMgPSAoQVQ5MVBTX01DKSBBVDkxQ19CQVNFX01DOw0KKw0KKyAgICBwTUMtPk1DX1JDUiA9IEFUOTFDX01DX1JDQjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgRUZDIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KK3sNCisJLy8gV3JpdGUgdG8gdGhlIEZNUiByZWdpc3Rlcg0KKwlwTUMtPk1DX0ZNUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKA0KKwlBVDkxUFNfTUMgcE1DKSAvLyBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBNQy0+TUNfRk1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04NCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOKA0KKwlpbnQgbWFzdGVyX2Nsb2NrKSAvLyBtYXN0ZXIgY2xvY2sgaW4gSHoNCit7DQorCXJldHVybiAobWFzdGVyX2Nsb2NrLzEwMDAwMDAgKzIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCit7DQorCXBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRTdGF0dXMoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcE1DLT5NQ19GU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX01DIHBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKHBNQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyhwTUMpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1BJDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBhIFNQSSBQb3J0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfT3BlbiAoDQorICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCkgIC8vIFxhcmcNCit7DQorICAgICAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KKyAgICAgICAgcmV0dXJuICggMCApOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnQ3MNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBTUEkgY2hpcCBzZWxlY3QgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnQ3MgKA0KKwlBVDkxUFNfU1BJIHBTUEksICAgICAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJaW50IGNzLCAgICAgLy8gU1BJIGNzIG51bWJlciAoMCB0byAzKQ0KKyAJaW50IHZhbCkgICAvLyAgY2hpcCBzZWxlY3QgcmVnaXN0ZXINCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1NSIHJlZ2lzdGVyDQorCSoocFNQSS0+U1BJX0NTUiArIGNzKSA9IHZhbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgU1BJIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGVJdCAoDQorCUFUOTFQU19TUEkgcFNQSSwgICAgIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGVJdCAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9SZXNldA0KKy8vKiBcYnJpZWYgUmVzZXQgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1Jlc2V0ICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGUgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSUVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZSAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnTW9kZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdNb2RlICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQQ1MNCisvLyogXGJyaWVmIFN3aXRjaCB0byB0aGUgY29ycmVjdCBQQ1Mgb2YgU1BJIE1vZGUgUmVnaXN0ZXIgOiBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ1BDUyAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWNoYXIgUENTX0RldmljZSkgLy8gUENTIG9mIHRoZSBEZXZpY2UNCit7CQ0KKyAJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfTVIgJj0gMHhGRkYwRkZGRjsNCisJcFNQSS0+U1BJX01SIHw9ICggKFBDU19EZXZpY2U8PDE2KSAmIEFUOTFDX1NQSV9QQ1MgKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKA0KKwlBVDkxUFNfU1BJIHBTUEksDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBTUEk6IGRpc2FibGUgSVQgZGlzYWJsZSB0cmFuc2ZlcnQsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DbG9zZSAoDQorCUFUOTFQU19TUEkgcFNQSSkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorew0KKyAgICAvLyogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3Rlcg0KKyAgICBwU1BJLT5TUElfQ1NSWzBdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbMV0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsyXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzNdID0gMCA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgU1BJIG1vZGUNCisgICAgcFNQSS0+U1BJX01SID0gMCAgOw0KKw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwU1BJLT5TUElfSURSID0gMHhGRkZGRkZGRiA7DQorDQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFNQSS0+U1BJX1JQUikpOw0KKw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQorew0KKyAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KKyAgICB2YWx1ZV9mb3JfY3MgPSAofigxIDw8IGNzX251bWJlcikpICYgMHhGOyAgLy9QbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyDQorICAgIHBTUEktPlNQSV9URFIgPSAoY2hhcmFjdGVyICYgMHhGRkZGKSB8ICh2YWx1ZV9mb3JfY3MgPDwgMTYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KK3sNCisgICAgcmV0dXJuKChwU1BJLT5TUElfUkRSKSAmIDB4RkZGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1BJIHBTcGksICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTcGkpICYgZmxhZyk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlDQorLy8qIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorDQorLy8qIFN0YW5kYXJkIEV4dGVybmFsIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19TQ0tfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0VYVCApDQorDQorLy8qIFN0YW5kYXJkIFN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkNfTU9ERSAoIEFUOTFDX1VTX1NZTkMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKw0KKy8vKiBTQ0sgdXNlZCBMYWJlbA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgKEFUOTFDX1VTX0NLTE8gfCBBVDkxQ19VU19DTEtTX0VYVCkNCisNCisvLyogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KKwkJCQkJICAgCQkgQVQ5MUNfVVNfQ0xLU19DTE9DSyArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfUEFSX0VWRU4gKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX0NLTE8gK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX09WRVIpDQorDQorLy8qIFN0YW5kYXJkIElSREEgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFICggIEFUOTFDX1VTX1VTTU9ERV9JUkRBICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUNCisvLyogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlICgNCisJY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwljb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlKSAgLy8gXGFyZyBVQVJUIGJhdWRyYXRlDQorew0KKwl1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZSA9ICgobWFpbl9jbG9jayoxMCkvKGJhdWRfcmF0ZSAqIDE2KSk7DQorCWlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKwkJYmF1ZF92YWx1ZSA9IChiYXVkX3ZhbHVlIC8gMTApICsgMTsNCisJZWxzZQ0KKwkJYmF1ZF92YWx1ZSAvPSAxMDsNCisJcmV0dXJuIGJhdWRfdmFsdWU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwl1bnNpZ25lZCBpbnQgc3BlZWQpICAgICAvLyBcYXJnIFVBUlQgYmF1ZHJhdGUNCit7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKG1haW5DbG9jaywgc3BlZWQpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRUaW1lZ3VhcmQNCisvLyogXGJyaWVmIFNldCBVU0FSVCB0aW1lZ3VhcmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRUaW1lZ3VhcmQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQpIC8vIFxhcmcgdGltZWd1YXJkIHZhbHVlDQorew0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX1RUR1IgPSB0aW1lZ3VhcmQgOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVVNBUlQgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVVNBUlQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBtb2RlICwgICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKwl1bnNpZ25lZCBpbnQgYmF1ZFJhdGUgLCAgLy8gXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvLyBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQorDQorICAgIC8vKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1RYRElTIDsNCisNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0QmF1ZHJhdGUocFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlKTsNCisNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0VGltZWd1YXJkKHBVU0FSVCwgdGltZWd1YXJkKTsNCisNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorICAgIEFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQorDQorICAgIC8vKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IG1vZGUgIDsNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgY2hhcmFjdGVycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UngNCisvLyogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorCS8vKiBSZXNldCByZWNlaXZlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlg7DQorICAgIC8vKiBSZS1FbmFibGUgcmVjZWl2ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0VHgNCisvLyogXGJyaWVmIFJlc2V0IFRyYW5zbWl0dGVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorCS8vKiBSZXNldCB0cmFuc21pdHRlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUVFg7DQorICAgIC8vKiBFbmFibGUgdHJhbnNtaXR0ZXINCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBSZWNlaXZlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUcmFuc21pdHRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBVU0FSVDogZGlzYWJsZSBJVCBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ2xvc2UgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIFJlc2V0IHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICBwVVNBUlQtPlVTX0JSR1IgPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSAwICA7DQorDQorICAgIC8vKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQorICAgIHBVU0FSVC0+VVNfVFRHUiA9IDA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gMHhGRkZGRkZGRiA7DQorDQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpKTsNCisNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseQ0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVMgfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlNUUlggOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19UeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiBpbiBVU19USFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1R4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1J4UmVhZHkNCisvLyogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSByZWFkIGluIFVTX1JIUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUnhSZWFkeSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KK3sNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1JYUkRZKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3INCisvLyogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCit7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJg0KKyAgICAJKEFUOTFDX1VTX09WUkUgfCAgLy8gT3ZlcnJ1biBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX0ZSQU1FIHwgLy8gRnJhbWluZyBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX1BBUkUpKTsgIC8vIFBhcml0eSBlcnJvcg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJaW50IGNoYXJhY3RlciApDQorew0KKyAgICBwVVNBUlQtPlVTX1RIUiA9IChjaGFyYWN0ZXIgJiAweDFGRik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0dldENoYXINCisvLyogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VU19HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCkNCit7DQorICAgIHJldHVybigocFVTQVJULT5VU19SSFIpICYgMHgxRkYpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19TZW5kRnJhbWUoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldElyZGFGaWx0ZXINCisvLyogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgSXJEYSBmaWx0ZXIgdHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCXVuc2lnbmVkIGNoYXIgdmFsdWUNCispDQorew0KKwlwVVNBUlQtPlVTX0lGID0gdmFsdWU7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uDQorDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogIG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cw0KKy8vKiAJCQkgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMNCisjZGVmaW5lIEFUOTFDX0kyU19BU1lfTUFTVEVSX1RYX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCSAgIEFUOTFDX1NTQ19DS1NfRElWICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgQVQ5MUNfU1NDX0NLR19OT05FICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkgICBBVDkxQ19TU0NfU1RUT1VUICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoMTw8MTYpICYgQVQ5MUNfU1NDX1NUVERMWSkgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAoKCgobmJfYml0X2J5X3Nsb3QqbmJfc2xvdF9ieV9mcmFtZSkvMiktMSkgPDwyNCkpDQorDQorDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzDQorI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCShuYl9iaXRfYnlfc2xvdC0xKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfTVNCRiAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfc2xvdF9ieV9mcmFtZS0xKTw8OCkgJiBBVDkxQ19TU0NfREFUTkIpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX2JpdF9ieV9zbG90LTEpPDwxNikgJiBBVDkxQ19TU0NfRlNMRU4pICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUpDQorDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX1NldEJhdWRyYXRlICgNCisgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgU1NDIGJhdWRyYXRlDQorew0KKyAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfdmFsdWU7DQorICAgICAgICAvLyogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICAgICAgaWYgKHNwZWVkID09IDApDQorICAgICAgICAgICBiYXVkX3ZhbHVlID0gMDsNCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAodW5zaWduZWQgaW50KSAobWFpbkNsb2NrICogMTApLygyKnNwZWVkKTsNCisgICAgICAgICAgIGlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHBTU0MtPlNTQ19DTVIgPSBiYXVkX3ZhbHVlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAoDQorICAgICAgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssICAvLyBcYXJnIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgICAvLyBcYXJnIEV4cGVjdGVkIEJhdWQgUmF0ZSBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgICAvLyBcYXJnIFJlY2VpdmVyIENsb2NrIFBhcmFtZXRlcnMNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgIC8vIFxhcmcgVHJhbnNtaXR0ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCkgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorew0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBTU0MtPlNTQ19JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCisNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKwlwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVMgOw0KKw0KKyAgICAvLyogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFGX1NTQ19TZXRCYXVkcmF0ZShwU1NDLCBzeXN0X2Nsb2NrLCBiYXVkX3JhdGUpOw0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1JDTVIgPSAgY2xvY2tfcng7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RDTVIgPSAgY2xvY2tfdHg7DQorDQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkZNUiA9ICBtb2RlX3J4Ow0KKw0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19URk1SID0gIG1vZGVfdHg7DQorDQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKwlBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSk7DQorDQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCisgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBFbmFibGUgIHRyYW5zbWl0dGVyDQorICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHNlbmRpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlICB0cmFuc21pdHRlcg0KKyAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfVFhESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCAoDQorCUFUOTFQU19TU0MgcFNTQywgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TU0MgcFNTQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfU2VuZEZyYW1lKA0KKwlBVDkxUFNfU1NDIHBTU0MsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwU3NjLT5TU0NfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgU1NDIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMocFNzYykgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUV0kNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9FbmFibGVJdCAoDQorCUFUOTFQU19UV0kgcFRXSSwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVFdJLT5UV0lfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUV0kgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwVFdJLT5UV0lfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0NvbmZpZ3VyZQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFRXSSBpbiBtYXN0ZXIgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9Db25maWd1cmUgKCBBVDkxUFNfVFdJIHBUV0kgKSAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKwlwVFdJLT5UV0lfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQorDQorICAgIC8vKiBSZXNldCBwZXJpcGhlcmFsDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9TV1JTVDsNCisNCisJLy8qIFNldCBNYXN0ZXIgbW9kZQ0KKwlwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfTVNFTjsNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVFdJIHBUd2kpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwVHdpLT5UV0lfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVFdJIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMocFR3aSkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQV01DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19QV01DIHBQV00pIC8vIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQV00tPlBXTUNfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQd20tPlBXTUNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQd20tPlBXTUNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUFdNKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUFdNIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0U3RhdHVzKHBQV00pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAvLyBcYXJnICBQV00gbW9kZQ0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgLy8gXGFyZyBQV00gcGVyaW9kDQorICAgICAgICB1bnNpZ25lZCBpbnQgZHV0eSkgLy8gXGFyZyBQV00gZHV0eSBjeWNsZQ0KK3sNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ01SID0gbW9kZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ0RUWVIgPSBkdXR5Ow0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCit7DQorCXBQV00tPlBXTUNfRU5BID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsDQorLy8qIFxicmllZiBEaXNhYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KK3sNCisJcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fVXBkYXRlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgVXBkYXRlIFBlcmlvZCBvciBEdXR5IEN5Y2xlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19VcGRhdGVDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCB1cGRhdGUpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQorew0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DVVBEUiA9IHVwZGF0ZTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVRFANCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVURQIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBVRFAtPlVEUF9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0QWRkcmVzcw0KKy8vKiBcYnJpZWYgU2V0IFVEUCBmdW5jdGlvbmFsIGFkZHJlc3MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0QWRkcmVzcyAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgYWRkcmVzcykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KK3sNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRVBFRFM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSAmPSB+QVQ5MUNfVURQX0VQRURTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUNCisvLyogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCit7DQorCXBVRFAtPlVEUF9HTEJTVEFURSAgJj0gfihBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKTsNCisJcFVEUC0+VURQX0dMQlNUQVRFICB8PSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0U3RhdGUNCisvLyogXGJyaWVmIHJldHVybiBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0U3RhdGUgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gKHBVRFAtPlVEUF9HTEJTVEFURSAgJiAoQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcA0KKy8vKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0DQorew0KKwlwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KKwlwVURQLT5VRFBfUlNURVAgPSAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbA0KKy8vKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUNCisvLyogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlKSAgICAgLy8gXGFyZyB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBEUFINCit7DQorCXBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdID0gdmFsdWU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQNCisvLyogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXJldHVybiBwVURQLT5VRFBfRkRSW2VuZHBvaW50XTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwRW5kT2ZXcg0KKy8vKiBcYnJpZWYgTm90aWZ5IHRoZSBVRFAgdGhhdCB2YWx1ZXMgaW4gRFBSIGFyZSByZWFkeSB0byBiZSBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwRW5kT2ZXcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KK3sNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gQVQ5MUNfVURQX1RYUEtUUkRZOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBDbGVhcg0KKy8vKiBcYnJpZWYgQ2xlYXIgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwQ2xlYXIoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSAmPSB+KGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTZXQNCisvLyogXGJyaWVmIFNldCBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTZXQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQorew0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBTdGF0dXMoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCit7DQorCXJldHVybiBwVURQLT5VRFBfQ1NSW2VuZHBvaW50XTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVURQIHBVZHApIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwVWRwLT5VRFBfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVURQIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMocFVkcCkgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFRjLT5UQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFRDIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFRjLT5UQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFRjLT5UQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRDIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUYykgJiBmbGFnKTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBDQU4NCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKyNkZWZpbmUJU1RBTkRBUkRfRk9STUFUIDANCisjZGVmaW5lCUVYVEVOREVEX0ZPUk1BVCAxDQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoKQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3gNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycyhBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LA0KKwkJCQkJCQkJaW50ICAJCQltb2RlX3JlZywNCisJCQkJCQkJCWludCAJCQlhY2NlcHRhbmNlX21hc2tfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlpZF9yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWRhdGFfbG93X3JlZywNCisJCQkJCQkJCWludCAgCQkJZGF0YV9oaWdoX3JlZywNCisJCQkJCQkJCWludCAgCQkJY29udHJvbF9yZWcpDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiAJPSAweDA7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTU1SIAk9IG1vZGVfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01BTSAJPSBhY2NlcHRhbmNlX21hc2tfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCAJPSBpZF9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURMIAk9IGRhdGFfbG93X3JlZzsgCQkNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREggCT0gZGF0YV9oaWdoX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgCT0gY29udHJvbF9yZWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VuYWJsZUNBTigpDQorLy8qIFxicmllZg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VuYWJsZUNBTigNCisJQVQ5MVBTX0NBTiBwQ0FOKSAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlwQ0FOLT5DQU5fTVIgfD0gQVQ5MUNfQ0FOX0NBTkVOOw0KKw0KKwkvLyBXYWl0IGZvciBXQUtFVVAgZmxhZyByYWlzaW5nIDw9PiAxMS1yZWNlc3NpdmUtYml0IHdlcmUgc2Nhbm5lZCBieSB0aGUgdHJhbnNjZWl2ZXINCisJd2hpbGUoIChwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQKSAhPSBBVDkxQ19DQU5fV0FLRVVQICk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0Rpc2FibGVDQU4oKQ0KKy8vKiBcYnJpZWYNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EaXNhYmxlQ0FOKA0KKwlBVDkxUFNfQ0FOIHBDQU4pICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCit7DQorCXBDQU4tPkNBTl9NUiAmPSB+QVQ5MUNfQ0FOX0NBTkVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBDQU4gaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0U3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19DQU4gcENBTikgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0NBTiBwQ0FOKSAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0FOLT5DQU5fSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19DQU4gcENBTiwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQ0FOKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19DQU4gcENBTiwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9DQU5fR2V0U3RhdHVzKHBDQU4pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXINCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcENBTi0+Q0FOX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX01SOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIEJhdWRyYXRlIG9mIHRoZSBDQU4gY29udHJvbGxlciBmb3IgdGhlIG5ldHdvcmsNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgYmF1ZHJhdGVfY2ZnKQ0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBCUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fQlIgPSBiYXVkcmF0ZV9jZmc7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yayB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEJhdWRyYXRlICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX0JSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVybmFsQ291bnRlcg0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBUaW1lciBSZWdzaXRlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEludGVybmFsQ291bnRlciAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBDQU4tPkNBTl9USU07CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0VGltZXN0YW1wDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcCAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBDQU4tPkNBTl9USU1FU1RQOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEVycm9yQ291bnRlcg0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcENBTi0+Q0FOX0VDUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0DQorLy8qIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCit7DQorCXBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdA0KKy8vKiBcYnJpZWYgQWJvcnQgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICB1bnNpZ25lZCBpbnQgYWJvcnRfY21kKQ0KK3sNCisJcENBTi0+Q0FOX0FDUiA9IGFib3J0X2NtZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qIFxicmllZiBWZXJzaW9uID09IDAgZm9yIFN0YW5kYXJkIG1lc3NzYWdlLCBWZXJzaW9uID09IDEgZm9yIEV4dGVuZGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VJRFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgaWQsDQorICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbikNCit7DQorCWlmKHZlcnNpb249PTApCS8vIElEdkEgU3RhbmRhcmQgRm9ybWF0DQorCQlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkPDwxODsNCisJZWxzZQkvLyBJRHZCIEV4dGVuZGVkIEZvcm1hdA0KKwkJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZCB8ICgxPDwyOSk7CS8vIHNldCBNSURFIGJpdA0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01JRDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtYXNrKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gPSBtYXNrOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NQU07DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRGYW1pbHlJRA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RmFtaWx5SUQgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCit7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01GSUQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmwNCisvLyogXGJyaWVmIFJlcXVlc3QgYW5kIGNvbmZpZyBmb3IgYSB0cmFuc2ZlciBvbiB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtZXNzYWdlX2N0cmxfY21kKQ0KK3sNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgPSBtZXNzYWdlX2N0cmxfY21kOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gTWFpbGJveCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NU1I7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3cNCisvLyogXGJyaWVmIFByb2dyYW0gZGF0YSBsb3cgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3cgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGRhdGEpDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ETCA9IGRhdGE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3cNCisvLyogXGJyaWVmIFJldHVybiBkYXRhIGxvdyB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93ICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREw7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoDQorLy8qIFxicmllZiBQcm9ncmFtIGRhdGEgaGlnaCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2ggKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGRhdGEpDQorew0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ESCA9IGRhdGE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoDQorLy8qIFxicmllZiBSZXR1cm4gZGF0YSBoaWdoIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorew0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREg7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBhIENBTiBQb3J0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fT3BlbiAoDQorICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCkgIC8vIFxhcmcNCit7DQorICAgICAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KKyAgICAgICAgcmV0dXJuICggMCApOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQURDIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgICAgIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldFN0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQURDIHBBREMpIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFEQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldFN0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtY2tfY2xvY2ssIC8vIGluIE1Ieg0KKwl1bnNpZ25lZCBpbnQgYWRjX2Nsb2NrLCAvLyBpbiBNSHoNCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgLy8gaW4gdXMNCisJdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lKQkvLyBpbiBucw0KK3sNCisJdW5zaWduZWQgaW50IHByZXNjYWwsc3RhcnR1cCxzaHRpbTsNCisJDQorCXByZXNjYWwgPSBtY2tfY2xvY2svKDIqYWRjX2Nsb2NrKSAtIDE7DQorCXN0YXJ0dXAgPSBhZGNfY2xvY2sqc3RhcnR1cF90aW1lLzggLSAxOw0KKwlzaHRpbSA9IGFkY19jbG9jaypzYW1wbGVfYW5kX2hvbGRfdGltZS8xMDAwIC0gMTsNCisJDQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX01SID0gKCAocHJlc2NhbDw8OCkgJiBBVDkxQ19BRENfUFJFU0NBTCkgfCAoIChzdGFydHVwPDwxNikgJiBBVDkxQ19BRENfU1RBUlRVUCkgfCAoIChzaHRpbTw8MjQpICYgQVQ5MUNfQURDX1NIVElNKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSEVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSEVSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENIRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0NIRFIgPSBjaGFubmVsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0hTUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24NCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlcXVlc3QgZm9yIGEgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVyc2lvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1NvZnRSZXNldCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19MQ0RSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDANCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAwIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIwOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDENCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAxIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIxOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDINCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAyIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIyOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAzIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIzOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA0IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI0OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA1IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI1OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA2IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI2OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA3IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI3OwkNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBRVMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIEFFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMsICAgICAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQUVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQUVTLT5BRVNfSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQUVTLT5BRVNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQUVTIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQUVTKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQUVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0U3RhdHVzKHBBRVMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFFUyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXINCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFFUy0+QUVTX01SOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1N0YXJ0UHJvY2Vzc2luZw0KKy8vKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1N0YXJ0UHJvY2Vzc2luZyAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX1NUQVJUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NvZnRSZXNldA0KKy8vKiBcYnJpZWYgUmVzZXQgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NvZnRSZXNldCAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0xvYWROZXdTZWVkDQorLy8qIFxicmllZiBMb2FkIE5ldyBTZWVkIGluIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19Mb2FkTmV3U2VlZCAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX0xPQURTRUVEOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NldENyeXB0b0tleQ0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0Q3J5cHRvS2V5ICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KK3sNCisJcEFFUy0+QUVTX0tFWVd4UltpbmRleF0gPSBrZXl3b3JkOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0lucHV0RGF0YQ0KKy8vKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19JbnB1dERhdGEgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5kYXRhDQorCSkNCit7DQorCXBBRVMtPkFFU19JREFUQXhSW2luZGV4XSA9IGluZGF0YTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRPdXRwdXREYXRhDQorLy8qIFxicmllZiBHZXQgT3V0cHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCit7DQorCXJldHVybiBwQUVTLT5BRVNfT0RBVEF4UltpbmRleF07CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgKG9yIENvdW50ZXIpIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQorew0KKwlwQUVTLT5BRVNfSVZ4UltpbmRleF0gPSBpbml0dmVjdG9yOwkNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUREVTDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVERFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1RERVMgcFRERVMsICAgICAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFRERVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldFN0YXR1cyggLy8gXHJldHVybiBUREVTIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1RERVMgcFRERVMpIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwVERFUy0+VERFU19JU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1RERVMgcFRERVMpIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwVERFUy0+VERFU19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVERFUyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RERVMgcFRERVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKwlyZXR1cm4gKEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVERFUykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUREVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfVERFUyBwVERFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfVERFU19HZXRTdGF0dXMocFRERVMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBUREVTIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXINCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwVERFUy0+VERFU19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU3RhcnRQcm9jZXNzaW5nDQorLy8qIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZyAoDQorCUFUOTFQU19UREVTIHBUREVTIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NUQVJUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IFRERVMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NvZnRSZXNldCAoDQorCUFUOTFQU19UREVTIHBUREVTIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQorew0KKwlwVERFUy0+VERFU19LRVkxV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTINCisvLyogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAyIFdvcmQgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MiAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBrZXl3b3JkDQorCSkNCit7DQorCXBUREVTLT5UREVTX0tFWTJXeFJbaW5kZXhdID0ga2V5d29yZDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5Mw0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDMgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KK3sNCisJcFRERVMtPlRERVNfS0VZM1d4UltpbmRleF0gPSBrZXl3b3JkOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19JbnB1dERhdGENCisvLyogXGJyaWVmIFNldCBJbnB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0lucHV0RGF0YSAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbmRhdGENCisJKQ0KK3sNCisJcFRERVMtPlRERVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCit7DQorCXJldHVybiBwVERFUy0+VERFU19PREFUQXhSW2luZGV4XTsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQorew0KKwlwVERFUy0+VERFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X0RSWEQgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOF9EVFhEICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQTUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUE1DIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjMwX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyOV9QQ0sxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMV9QQ0sxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEzX1BDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19QQ0szICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFZSRUcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUlNUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNTQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TU0MpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTU0Mgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfUksgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIyX1RLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9URiAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjRfUkQgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI2X1JGICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyM19URCAgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgV0RUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9SSTEgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfRFNSMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIzX0RDRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNV9EVFIxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfU0NLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfUlRTMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTZfVFhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTVfUlhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTlfQ1RTMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEwX1JYRDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X0NUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1JUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX1NDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExX1RYRDAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkxKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMV9OUENTMTIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9OUENTMTMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjlfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX05QQ1MxMCAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9TUENLMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X01JU08xICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX05QQ1MxMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfTU9TSTEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkwKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTNfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE3X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNF9OUENTMDIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE2X01JU08wICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTVfTlBDUzAzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE3X01PU0kwICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOF9TUENLMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTRfTlBDUzAyICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEyX05QQ1MwMCAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE3X05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE5X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE4X05QQ1MwMiAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFJQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9GSVEpIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTApIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTEpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBSUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X0ZJUSAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9JUlExICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FFUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUV0kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVFdJKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX1RXQ0sgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMF9UV0QgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfQURUUkcgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BXTTMgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzMF9QV00zICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gyIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjFfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BXTTIgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QV00xICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfUFdNMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE5X1BXTTAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19QV00wICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVURQKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UREVTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBFTUFDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRU1BQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9FTUFDKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEVNQUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjJfRVRYMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX0VUWEVSICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNl9FQ09MICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTFfRVRYMyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjZfRVJYMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE1X0VSWERWICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxM19FUlgyICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCM19FVFgxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCOF9FTURDICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCNV9FUlgwICAgICkgfA0KKwkJLy8oKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOF9FRjEwMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTRfRVJYMyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYpIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjFfRVRYRU4gICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX0VUWDIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSykgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCOV9FTURJTyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCN19FUlhFUiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTdfRVJYQ0sgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BNQyAodm9pZCkNCit7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMCkpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BJTyAodm9pZCkNCit7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyM19USU9BMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfVElPQjAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX1RDTEswICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMxKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUElPICh2b2lkKQ0KK3sNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI1X1RJT0ExICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9USU9CMSAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTlfVENMSzEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzIpKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfVElPQjIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI3X1RJT0EyICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X1RDTEsyICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DICh2b2lkKQ0KK3sNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9BKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0JfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9CDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9CKSk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIENBTg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9DQU4pKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBDQU4gc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQSU8gKHZvaWQpDQorew0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjBfQ0FOVFggICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE5X0NBTlJYICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQV01DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdQTUMgKHZvaWQpDQorew0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QV01DKSk7DQorfQ0KKw0KKyNlbmRpZiAvLyBsaWJfQVQ5MVNBTTdYMjU2X0gNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZjFkMgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L3BvcnQuYwpAQCAtMCwwICsxLDI5OCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBUk03IHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgUElULiAqLw0KKyNkZWZpbmUgcG9ydFBJVF9DTE9DS19ESVZJU09SCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSAxNiApDQorI2RlZmluZSBwb3J0UElUX0NPVU5URVJfVkFMVUUJCQkoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUkFURV9NUyApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisNCisjZGVmaW5lIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFICAwDQorI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgIAkoICggdW5zaWduZWQgc2hvcnQgKSAweDEgPDwgMjQgKQ0KKyNkZWZpbmUgcG9ydFBJVF9JTlRfRU5BQkxFICAgICAJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgxIDw8IDI1ICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgUElUIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCit1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1bnNpZ25lZCBsb25nICkgOTk5OTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkNCisJaWYoICggKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0JDQorCQ0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKwkvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8NCisJc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQorCXN0YXRpYyBfX2FybSBfX2lycSB2b2lkIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisJc3RhdGljIF9fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCXVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisJCQ0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCQlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJCXByb2Nlc3NvciB0aW1lIG5vIG1hdHRlciB3aGF0IGl0cyBwcmlvcml0eS4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBDbGVhciB0aGUgUElUIGludGVycnVwdC4gKi8NCisJCXVsRHVtbXkgPSBBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElWUjsNCisJCQ0KKwkJLyogRW5kIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIEFJQy4gKi8NCisJCUFUOTFDX0JBU0VfQUlDLT5BSUNfRU9JQ1IgPSB1bER1bW15Ow0KKwl9DQorDQorI2Vsc2UNCisNCisJLyogQ3VycmVudGx5IHRoZSBJQVIgcG9ydCByZXF1aXJlcyB0aGUgcHJlZW1wdGl2ZSB0aWNrIGZ1bmN0aW9uIHRvIGJlDQorCWRlZmluZWQgaW4gYW4gYXNtIGZpbGUuICovDQorDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK0FUOTFQU19QSVRDIHB4UElUID0gQVQ5MUNfQkFTRV9QSVRDOw0KKw0KKwkvKiBTZXR1cCB0aGUgQUlDIGZvciBQSVQgaW50ZXJydXB0cy4gIFRoZSBpbnRlcnJ1cHQgcm91dGluZSBjaG9zZW4gZGVwZW5kcw0KKwlvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKwkJQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBBVDkxQ19CQVNFX0FJQywgQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoKikodm9pZCkgKSB2UG9ydE5vblByZWVtcHRpdmVUaWNrICk7DQorDQorCSNlbHNlDQorCQkNCisJCWV4dGVybiB2b2lkICggdlBvcnRQcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQorCQlBVDkxRl9BSUNfQ29uZmlndXJlSXQoIEFUOTFDX0JBU0VfQUlDLCBBVDkxQ19JRF9TWVMsIEFUOTFDX0FJQ19QUklPUl9ISUdIRVNULCBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSwgKCB2b2lkICgqKSh2b2lkKSApIHZQb3J0UHJlZW1wdGl2ZVRpY2sgKTsNCisNCisJI2VuZGlmDQorDQorCS8qIENvbmZpZ3VyZSB0aGUgUElUIHBlcmlvZC4gKi8NCisJcHhQSVQtPlBJVENfUElNUiA9IHBvcnRQSVRfRU5BQkxFIHwgcG9ydFBJVF9JTlRfRU5BQkxFIHwgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFOw0KKw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gIEdsb2JhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlcyBhdCB0aGlzIHBvaW50IHNvDQorCXRoaXMgaXMgc2FmZS4gKi8NCisJQVQ5MUZfQUlDX0VuYWJsZUl0KCBBVDkxQ19CQVNFX0FJQywgQVQ5MUNfSURfU1lTICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBmaXJzdCEgKi8NCisJX19kaXNhYmxlX2ludGVycnVwdCgpOw0KKw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCisNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJX19lbmFibGVfaW50ZXJydXB0KCk7DQorCQl9DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvcG9ydGFzbS5zNzkgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0YXNtLnM3OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODdhZDFjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvcG9ydGFzbS5zNzkKQEAgLTAsMCArMSwxMTEgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorCQlSU0VHIElDT0RFOkNPREUNCisJCUNPREUzMg0KKw0KKwlFWFRFUk4gdlRhc2tTd2l0Y2hDb250ZXh0DQorCUVYVEVSTiB2VGFza0luY3JlbWVudFRpY2sNCisNCisJUFVCTElDIHZQb3J0WWllbGRQcm9jZXNzb3INCisJUFVCTElDIHZQb3J0UHJlZW1wdGl2ZVRpY2sNCisJUFVCTElDIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisNCisjaW5jbHVkZSAiQVQ5MVNBTTdTNjRfaW5jLmgiDQorI2luY2x1ZGUgIklTUl9TdXBwb3J0LmgiDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgU3RhcnRpbmcgdGhlIGZpcnN0IHRhc2sgaXMganVzdCBhIG1hdHRlciBvZiByZXN0b3JpbmcgdGhlIGNvbnRleHQgdGhhdA0KKzsgd2FzIGNyZWF0ZWQgYnkgcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCkuDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KK3ZQb3J0U3RhcnRGaXJzdFRhc2s6DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBNYW51YWwgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSBTV0kgaGFuZGVyLg0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCit2UG9ydFlpZWxkUHJvY2Vzc29yOg0KKwlBREQJCUxSLCBMUiwgIzQJCQk7IEFkZCA0IHRvIHRoZSBMUiB0byBtYWtlIHRoZSBMUiBhcHBlYXIgZXhhY3RseSANCisJCQkJCQkJCTsgYXMgaWYgdGhlIGNvbnRleHQgd2FzIHNhdmVkIGR1cmluZyBhbmQgSVJRIA0KKwkJCQkJCQkJOyBoYW5kbGVyLg0KKwkJCQkJCQkJDQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4uLg0KKwlMRFIgUjAsID12VGFza1N3aXRjaENvbnRleHQJOyBiZWZvcmUgc2VsZWN0aW5nIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4NCisJbW92ICAgICBsciwgcGMNCisJQlggUjANCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgc2VsZWN0ZWQgdGFzay4NCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBQcmVlbXB0aXZlIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyB3aWxsIG9ubHkgZXZlciBnZXQgaW5zdGFsbGVkIGlmDQorOyBwb3J0VVNFX1BSRUVNUFRJT04gaXMgc2V0IHRvIDEgaW4gcG9ydG1hY3JvLmguDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KK3ZQb3J0UHJlZW1wdGl2ZVRpY2s6DQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisNCisJTERSIFIwLCA9dlRhc2tJbmNyZW1lbnRUaWNrIDsgSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gdGhpcyBtYXkgd2FrZSBhIHRhc2suDQorCW1vdiBsciwgcGMNCisJQlggUjANCisJTERSIFIwLCA9dlRhc2tTd2l0Y2hDb250ZXh0IDsgU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4NCisJbW92IGxyLCBwYw0KKwlCWCBSMA0KKw0KKwlMRFIJUjE0LCA9QVQ5MUNfQkFTRV9QSVRDCTsgQ2xlYXIgdGhlIFBJVCBpbnRlcnJ1cHQNCisJTERSCVIwLCBbUjE0LCAjUElUQ19QSVZSIF0NCisNCisJTERSIFIxNCwgPUFUOTFDX0JBU0VfQUlDCTsgTWFyayB0aGUgRW5kIG9mIEludGVycnVwdCBvbiB0aGUgQUlDDQorICAgIFNUUglSMTQsIFtSMTQsICNBSUNfRU9JQ1JdDQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJCQk7IFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIHNlbGVjdGVkIHRhc2suDQorDQorDQorCUVORA0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmM2FmZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gKCAiTk9QIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgCVwNCit7CQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsJCQkJXA0KKwkJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgKSAJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJXA0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvSVNSX1N1cHBvcnQuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvSVNSX1N1cHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTMyZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9JU1JfU3VwcG9ydC5oCkBAIC0wLDAgKzEsNzggQEAKKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCisNCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gCQkJCQkNCisJU1RNREIJU1AhLCB7UjB9DQorDQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KKw0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAJCQkJCQkNCisJU1RNREIJUjAhLCB7TFJ9DQorDQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQorDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAJCQkNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAJCQ0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCisNCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nIA0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQorDQorCUVORE0NCisNCisNCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQorDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAJDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gCQkJCQkNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAJCQkJCQkJCQkNCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KKw0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suIAkJCQkNCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCisNCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gCQkJCQkJCQkJDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCisNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCisNCisJRU5ETQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiNDIwMwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydC5jCkBAIC0wLDAgKzEsMjk2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEF0bWVsIEFSTTcgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBIYXJkd2FyZSBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8Ym9hcmQuaD4NCisjaW5jbHVkZSA8cGlvL3Bpby5oPg0KKyNpbmNsdWRlIDxwaW8vcGlvX2l0Lmg+DQorI2luY2x1ZGUgPHBpdC9waXQuaD4NCisjaW5jbHVkZSA8YWljL2FpYy5oPg0KKyNpbmNsdWRlIDx0Yy90Yy5oPg0KKyNpbmNsdWRlIDx1dGlsaXR5L2xlZC5oPg0KKyNpbmNsdWRlIDx1dGlsaXR5L3RyYWNlLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgUElULiAqLw0KKyNkZWZpbmUgcG9ydDFNSHpfSU5fSHogCQkJCQkoIDEwMDAwMDB1bCApDQorI2RlZmluZSBwb3J0MVNFQ09ORF9JTl91UwkJCQkoIDEwMDAwMDAuMCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisNCisjZGVmaW5lIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFICAwDQorI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgIAkoICggdW5zaWduZWQgc2hvcnQgKSAweDEgPDwgMjQgKQ0KKyNkZWZpbmUgcG9ydFBJVF9JTlRfRU5BQkxFICAgICAJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgxIDw8IDI1ICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgUElUIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIFRoZSBQSVQgaW50ZXJydXB0IGhhbmRsZXIgLSB0aGUgUlRPUyB0aWNrLiAqLw0KK3N0YXRpYyB2b2lkIHZQb3J0VGlja0lTUiggdm9pZCApOw0KKw0KKy8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCit1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1bnNpZ25lZCBsb25nICkgOTk5OTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkNCisJI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KKwkjZW5kaWYNCisJDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7CQ0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBfX2FybSB2b2lkIHZQb3J0VGlja0lTUiggdm9pZCApDQorew0KK3ZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisJDQorCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHdoaWNoIG1heSB3YWtlIHNvbWUgdGFza3MgYnV0IGFzIHRoZQ0KKwlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkjZW5kaWYJDQorCQkNCisJLyogQ2xlYXIgdGhlIFBJVCBpbnRlcnJ1cHQuICovDQorCXVsRHVtbXkgPSBBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElWUjsNCisJDQorCS8qIFRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5nLiAqLw0KKwkoIHZvaWQgKSB1bER1bW15Ow0KKwkNCisJLyogVGhlIEFJQyBpcyBjbGVhcmVkIGluIHRoZSBhc20gd3JhcHBlciwgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFBlcmlvZEluX3VTID0gKCAxLjAgLyAoIGRvdWJsZSApIGNvbmZpZ1RJQ0tfUkFURV9IWiApICogcG9ydDFTRUNPTkRfSU5fdVM7DQorDQorCS8qIFNldHVwIHRoZSBQSVQgZm9yIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kuICovDQorCVBJVF9Jbml0KCB1bFBlcmlvZEluX3VTLCBCT0FSRF9NQ0sgLyBwb3J0MU1Iel9JTl9IeiApOw0KKwkNCisJLyogU2V0dXAgdGhlIFBJVCBpbnRlcnJ1cHQuICovDQorCUFJQ19EaXNhYmxlSVQoIEFUOTFDX0lEX1NZUyApOw0KKwlBSUNfQ29uZmlndXJlSVQoIEFUOTFDX0lEX1NZUywgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCwgdlBvcnRUaWNrSVNSICk7DQorCUFJQ19FbmFibGVJVCggQVQ5MUNfSURfU1lTICk7DQorCVBJVF9FbmFibGVJVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQorCV9fZGlzYWJsZV9pcnEoKTsNCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCV9fZW5hYmxlX2lycSgpOw0KKwkJfQ0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydGFzbS5zNzkgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL3BvcnRhc20uczc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWM3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL3BvcnRhc20uczc5CkBAIC0wLDAgKzEsMzQgQEAKKwkJUlNFRyBJQ09ERTpDT0RFDQorCQlDT0RFMzINCisNCisJRVhURVJOIHZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwlQVUJMSUMgdlBvcnRZaWVsZFByb2Nlc3Nvcg0KKwlQVUJMSUMgdlBvcnRTdGFydEZpcnN0VGFzaw0KKw0KKyNpbmNsdWRlICJJU1JfU3VwcG9ydC5oIg0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IFN0YXJ0aW5nIHRoZSBmaXJzdCB0YXNrIGlzIGp1c3QgYSBtYXR0ZXIgb2YgcmVzdG9yaW5nIHRoZSBjb250ZXh0IHRoYXQNCis7IHdhcyBjcmVhdGVkIGJ5IHB4UG9ydEluaXRpYWxpc2VTdGFjaygpLg0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgTWFudWFsIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgU1dJIGhhbmRlci4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRZaWVsZFByb2Nlc3NvcjoNCisJQURECQlMUiwgTFIsICM0CQkJOyBBZGQgNCB0byB0aGUgTFIgdG8gbWFrZSB0aGUgTFIgYXBwZWFyIGV4YWN0bHkNCisJCQkJCQkJCTsgYXMgaWYgdGhlIGNvbnRleHQgd2FzIHNhdmVkIGR1cmluZyBhbmQgSVJRDQorCQkJCQkJCQk7IGhhbmRsZXIuDQorCQkJCQkJCQkNCisJcG9ydFNBVkVfQ09OVEVYVAkJCTsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLi4uDQorCUxEUiBSMCwgPXZUYXNrU3dpdGNoQ29udGV4dAk7IGJlZm9yZSBzZWxlY3RpbmcgdGhlIG5leHQgdGFzayB0byBleGVjdXRlLg0KKwltb3YgICAgIGxyLCBwYw0KKwlCWCBSMA0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBzZWxlY3RlZCB0YXNrLg0KKw0KKw0KKwlFTkQNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzIxN2FjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0OCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gKCAiTk9QIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaXJxKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pcnEoKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgCVwNCit7CQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsJCQkJXA0KKwkJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgKSAJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJXA0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9JU1JfU3VwcG9ydC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9MUEMyMDAwL0lTUl9TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxY2I4MwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9JU1JfU3VwcG9ydC5oCkBAIC0wLDAgKzEsMTMwIEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7DQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCisNCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gCQkJCQkNCisJU1RNREIJU1AhLCB7UjB9DQorDQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KKw0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAJCQkJCQkNCisJU1RNREIJUjAhLCB7TFJ9DQorDQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQorDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAJCQkNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAJCQ0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCisNCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nIA0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQorDQorCUVORE0NCisNCisNCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQorDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAJDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gCQkJCQkNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAJCQkJCQkJCQkNCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KKw0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suIAkJCQkNCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCisNCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gCQkJCQkJCQkJDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCisNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCisNCisJRU5ETQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2I1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydC5jCkBAIC0wLDAgKzEsMzU1IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBoaWxpcHMgQVJNNyBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisJQ2hhbmdlcyBmcm9tIFYzLjIuMg0KKw0KKwkrIEJ1ZyBmaXggLSBUaGUgcHJlc2NhbGUgdmFsdWUgZm9yIHRoZSB0aW1lciBzZXR1cCBpcyBub3cgd3JpdHRlbiB0byBUMFBSDQorCSAgaW5zdGVhZCBvZiBUMFBDLiAgVGhpcyBidWcgd291bGQgaGF2ZSBoYWQgbm8gZWZmZWN0IHVubGVzcyBhIHByZXNjYWxlDQorCSAgdmFsdWUgd2FzIGFjdHVhbGx5IHVzZWQuDQorKi8NCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRpY2sgSVNSLiAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUgkJCSggKCB1bnNpZ25lZCBjaGFyICkgMHgwMSApDQorI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUJCQkweDAwDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX09OX01BVENICQkoICggdW5zaWduZWQgbG9uZyApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFJFU0VUX0NPVU5UX09OX01BVENICSggKCB1bnNpZ25lZCBsb25nICkgMHgwMiApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgUElULiAqLw0KKyNkZWZpbmUgcG9ydFBJVF9DTE9DS19ESVZJU09SCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSAxNiApDQorI2RlZmluZSBwb3J0UElUX0NPVU5URVJfVkFMVUUJCQkoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUkFURV9NUyApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiAqLw0KKyNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQJCSggKCB1bnNpZ25lZCBjaGFyICkgMHgwMSApDQorI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgCQkoICggdW5zaWduZWQgbG9uZyApIDAgKQ0KKw0KKw0KKyNkZWZpbmUgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUgIDANCisjZGVmaW5lIHBvcnRQSVRfRU5BQkxFICAgICAgCSggKCB1bnNpZ25lZCBzaG9ydCApIDB4MSA8PCAyNCApDQorI2RlZmluZSBwb3J0UElUX0lOVF9FTkFCTEUgICAgIAkoICggdW5zaWduZWQgc2hvcnQgKSAweDEgPDwgMjUgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgVklDIGZvciB0aGUgdGljayBJU1IuICovDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwJCSggKCB1bnNpZ25lZCBsb25nICkgMHgwMDA0ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQJKCAoIHVuc2lnbmVkIGxvbmcgKSAweDAwMTAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19FTkFCTEUJCSggKCB1bnNpZ25lZCBsb25nICkgMHgwMDIwICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgUElUIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCit1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1bnNpZ25lZCBsb25nICkgOTk5OTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkNCisJaWYoICggKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0NCisJDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7CQ0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQorDQorCS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJc3RhdGljIF9fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwlzdGF0aWMgX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCQlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJCXByb2Nlc3NvciB0aW1lIG5vIG1hdHRlciB3aGF0IGl0cyBwcmlvcml0eS4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBSZWFkeSBmb3IgdGhlIG5leHQgaW50ZXJydXB0LiAqLw0KKwkJVDBJUiA9IHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUOw0KKwkJVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCisJfQ0KKw0KKyNlbHNlDQorDQorCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gYXNtIHdyYXBwZXIsIHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIF9faXJxDQorCWtleXdvcmQuICovDQorCXZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwl2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnRlci4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkNCisJCS8qIFRoZSBuZXcgdGljayB2YWx1ZSBtaWdodCB1bmJsb2NrIGEgdGFzay4gIEVuc3VyZSB0aGUgaGlnaGVzdCB0YXNrIHRoYXQNCisJCWlzIHJlYWR5IHRvIGV4ZWN1dGUgaXMgdGhlIHRhc2sgdGhhdCB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUgdGljayBJU1INCisJCWV4aXRzLiAqLw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQ0KKwkJLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJCVQwSVIgPSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVDsNCisJCVZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7DQorCX0NCisNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQordW5zaWduZWQgbG9uZyB1bENvbXBhcmVNYXRjaDsNCisNCisJLyogQSAxbXMgdGljayBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIHRpbWVyIHByZXNjYWxlLiAgVGhpcyBpcw0KKwlkZWZhdWx0ZWQgdG8gemVybyBidXQgY2FuIGJlIHVzZWQgaWYgbmVjZXNzYXJ5LiAqLw0KKwlUMFBSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KKw0KKwkvKiBDYWxjdWxhdGUgdGhlIG1hdGNoIHZhbHVlIHJlcXVpcmVkIGZvciBvdXIgd2FudGVkIHRpY2sgcmF0ZS4gKi8NCisJdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorDQorCS8qIFByb3RlY3QgYWdhaW5zdCBkaXZpZGUgYnkgemVyby4gIFVzaW5nIGFuIGlmKCkgc3RhdGVtZW50IHN0aWxsIHJlc3VsdHMNCisJaW4gYSB3YXJuaW5nIC0gaGVuY2UgdGhlICNpZi4gKi8NCisJI2lmIHBvcnRQUkVTQ0FMRV9WQUxVRSAhPSAwDQorCXsNCisJCXVsQ29tcGFyZU1hdGNoIC89ICggcG9ydFBSRVNDQUxFX1ZBTFVFICsgMSApOw0KKwl9DQorCSNlbmRpZg0KKw0KKwlUME1SMCA9IHVsQ29tcGFyZU1hdGNoOw0KKw0KKwkvKiBHZW5lcmF0ZSB0aWNrIHdpdGggdGltZXIgMCBjb21wYXJlIG1hdGNoLiAqLw0KKwlUME1DUiA9IHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCB8IHBvcnRJTlRFUlJVUFRfT05fTUFUQ0g7DQorDQorCS8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCisJVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCisJVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCQ0KKwkvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsJDQorCQlleHRlcm4gdm9pZCAoIHZQb3J0UHJlZW1wdGl2ZVRpY2tFbnRyeSApKCB2b2lkICk7DQorDQorCQlWSUNWZWN0QWRkcjAgPSAoIHVuc2lnbmVkIGxvbmcgKSB2UG9ydFByZWVtcHRpdmVUaWNrRW50cnk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KKw0KKwkJVklDVmVjdEFkZHIwID0gKCBsb25nICkgdlBvcnROb25QcmVlbXB0aXZlVGljazsNCisJfQ0KKwkjZW5kaWYNCisNCisJVklDVmVjdENudGwwID0gcG9ydFRJTUVSX1ZJQ19DSEFOTkVMIHwgcG9ydFRJTUVSX1ZJQ19FTkFCTEU7DQorDQorCS8qIFN0YXJ0IHRoZSB0aW1lciAtIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQNCisJc28gaXQgaXMgb2theSB0byBkbyB0aGlzIGhlcmUuICovDQorCVQwVENSID0gcG9ydEVOQUJMRV9USU1FUjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KKwlfX2Rpc2FibGVfaW50ZXJydXB0KCk7DQorDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydGFzbS5zNzkgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydGFzbS5zNzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxODRmNgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0YXNtLnM3OQpAQCAtMCwwICsxLDEwMiBAQAorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOw0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisJCVJTRUcgSUNPREU6Q09ERQ0KKwkJQ09ERTMyDQorDQorCUVYVEVSTiB2VGFza1N3aXRjaENvbnRleHQNCisJRVhURVJOIHZUYXNrSW5jcmVtZW50VGljaw0KKwlFWFRFUk4gdlBvcnRQcmVlbXB0aXZlVGljaw0KKwkNCisJUFVCTElDIHZQb3J0UHJlZW1wdGl2ZVRpY2tFbnRyeQ0KKwlQVUJMSUMgdlBvcnRZaWVsZFByb2Nlc3Nvcg0KKwlQVUJMSUMgdlBvcnRTdGFydEZpcnN0VGFzaw0KKw0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKyNpbmNsdWRlICJJU1JfU3VwcG9ydC5oIg0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IFN0YXJ0aW5nIHRoZSBmaXJzdCB0YXNrIGlzIGp1c3QgYSBtYXR0ZXIgb2YgcmVzdG9yaW5nIHRoZSBjb250ZXh0IHRoYXQNCis7IHdhcyBjcmVhdGVkIGJ5IHB4UG9ydEluaXRpYWxpc2VTdGFjaygpLg0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgTWFudWFsIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgU1dJIGhhbmRlci4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRZaWVsZFByb2Nlc3NvcjoNCisJQURECQlMUiwgTFIsICM0CQkJOyBBZGQgNCB0byB0aGUgTFIgdG8gbWFrZSB0aGUgTFIgYXBwZWFyIGV4YWN0bHkNCisJCQkJCQkJCTsgYXMgaWYgdGhlIGNvbnRleHQgd2FzIHNhdmVkIGR1cmluZyBhbmQgSVJRDQorCQkJCQkJCQk7IGhhbmRsZXIuDQorCQkJCQkJCQkNCisJcG9ydFNBVkVfQ09OVEVYVAkJCTsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLi4uDQorCUxEUiBSMCwgPXZUYXNrU3dpdGNoQ29udGV4dAk7IGJlZm9yZSBzZWxlY3RpbmcgdGhlIG5leHQgdGFzayB0byBleGVjdXRlLg0KKwltb3YgICAgIGxyLCBwYw0KKwlCWCBSMA0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBzZWxlY3RlZCB0YXNrLg0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IFByZWVtcHRpdmUgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIHdpbGwgb25seSBldmVyIGdldCBpbnN0YWxsZWQgaWYNCis7IHBvcnRVU0VfUFJFRU1QVElPTiBpcyBzZXQgdG8gMSBpbiBwb3J0bWFjcm8uaC4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRQcmVlbXB0aXZlVGlja0VudHJ5Og0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4uLg0KKwlMRFIgUjAsID12UG9ydFByZWVtcHRpdmVUaWNrOyBiZWZvcmUgc2VsZWN0aW5nIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4NCisJbW92ICAgICBsciwgcGMNCisJQlggUjANCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgc2VsZWN0ZWQgdGFzay4NCisjZW5kaWYNCisNCisJRU5EDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9MUEMyMDAwL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9MUEMyMDAwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MThlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtICggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlcDQorewkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7CQkJCVwNCisJCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICkgCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0OWUyOQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnQuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCBmb3IgaGFyZHdhcmUgc2V0dXAuICBUaGUgdGljayBJU1IgcnVucyBvZmYgdGhlIEFDTEssDQorbm90IHRoZSBNQ0xLLiAqLw0KKyNkZWZpbmUgcG9ydEFDTEtfRlJFUVVFTkNZX0haCQkJKCAoIHBvcnRUaWNrVHlwZSApIDMyNzY4ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcJKCAoIHVuc2lnbmVkIHNob3J0ICkgMTAgKQ0KKyNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVECQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwOCApDQorDQorLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KKw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaA0KK3RpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGENCitjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seQ0KK2JlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQordm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qDQorICogU2V0cyB1cCB0aGUgcGVyaW9kaWMgSVNSIHVzZWQgZm9yIHRoZSBSVE9TIHRpY2suICBUaGlzIHVzZXMgdGltZXIgMCwgYnV0DQorICogY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IHVzZWQgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuDQorICovDQordm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICoNCisgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyoNCisJCVBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIGluY2x1ZGVkIGlmIHJlcXVpcmVkLg0KKw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkqLw0KKw0KKwkvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZQ0KKwlleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQorCXNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCisJYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBOZXh0IHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NDQ0NDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg1NTU1Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDY2NjY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Nzc3NzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg4ODg4Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDk5OTk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4YWFhYTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhiYmJiOw0KKwlweFRvcE9mU3RhY2stLTsJDQorCQ0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjE1LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsNCisJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZGRkZDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhlZWVlOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGZmZmY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBBIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLg0KKwlUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcw0KKwlpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDANCisgKiBidXQgY291bGQgYWx0ZXJuYXRpdmVseSB1c2UgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuDQorICovDQordm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogRW5zdXJlIHRoZSB0aW1lciBpcyBzdG9wcGVkLiAqLw0KKwlUQUNUTCA9IDA7DQorDQorCS8qIFJ1biB0aGUgdGltZXIgb2YgdGhlIEFDTEsuICovDQorCVRBQ1RMID0gVEFTU0VMXzE7DQorDQorCS8qIENsZWFyIGV2ZXJ5dGhpbmcgdG8gc3RhcnQgd2l0aC4gKi8NCisJVEFDVEwgfD0gVEFDTFI7DQorDQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KKwlUQUNDUjAgPSBwb3J0QUNMS19GUkVRVUVOQ1lfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorDQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cy4gKi8NCisJVEFDQ1RMMCA9IENDSUU7DQorDQorCS8qIFN0YXJ0IHVwIGNsZWFuLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCisNCisJLyogVXAgbW9kZS4gKi8NCisJVEFDVEwgfD0gTUNfMTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorCQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRhc20uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg3NWEzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydGFzbS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRBU01fSA0KKyNkZWZpbmUgUE9SVEFTTV9IDQorDQorcG9ydFNBVkVfQ09OVEVYVCBtYWNybw0KKw0KKwkJSU1QT1JUIHB4Q3VycmVudFRDQg0KKwkJSU1QT1JUIHVzQ3JpdGljYWxOZXN0aW5nDQorDQorCQkvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwkJcHVzaAlyNA0KKwkJcHVzaAlyNQ0KKwkJcHVzaAlyNg0KKwkJcHVzaAlyNw0KKwkJcHVzaAlyOA0KKwkJcHVzaAlyOQ0KKwkJcHVzaAlyMTANCisJCXB1c2gJcjExDQorCQlwdXNoCXIxMg0KKwkJcHVzaAlyMTMNCisJCXB1c2gJcjE0DQorCQlwdXNoCXIxNQ0KKwkJbW92LncJJnVzQ3JpdGljYWxOZXN0aW5nLCByMTQNCisJCXB1c2gJcjE0DQorCQltb3YudwkmcHhDdXJyZW50VENCLCByMTINCisJCW1vdi53CXIxLCAwKHIxMikNCisJCWVuZG0NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJCQ0KK3BvcnRSRVNUT1JFX0NPTlRFWFQgbWFjcm8NCisJCW1vdi53CSZweEN1cnJlbnRUQ0IsIHIxMg0KKwkJbW92LncJQHIxMiwgcjENCisJCXBvcAkJcjE1DQorCQltb3YudwlyMTUsICZ1c0NyaXRpY2FsTmVzdGluZw0KKwkJcG9wCQlyMTUNCisJCXBvcAkJcjE0DQorCQlwb3AJCXIxMw0KKwkJcG9wCQlyMTINCisJCXBvcAkJcjExDQorCQlwb3AJCXIxMA0KKwkJcG9wCQlyOQ0KKwkJcG9wCQlyOA0KKwkJcG9wCQlyNw0KKwkJcG9wCQlyNg0KKwkJcG9wCQlyNQ0KKwkJcG9wCQlyNA0KKw0KKwkJLyogVGhlIGxhc3QgdGhpbmcgb24gdGhlIHN0YWNrIHdpbGwgYmUgdGhlIHN0YXR1cyByZWdpc3Rlci4NCisgICAgICAgIEVuc3VyZSB0aGUgcG93ZXIgZG93biBiaXRzIGFyZSBjbGVhciByZWFkeSBmb3IgdGhlIG5leHQNCisgICAgICAgIHRpbWUgdGhpcyBwb3dlciBkb3duIHJlZ2lzdGVyIGlzIHBvcHBlZCBmcm9tIHRoZSBzdGFjay4gKi8NCisJCWJpYy53ICAgIzB4ZjAsMChTUCkNCisNCisJCXJldGkNCisJCWVuZG0NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0ZXh0LnM0MyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRleHQuczQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmYwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0ZXh0LnM0MwpAQCAtMCwwICsxLDE0NSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorI2luY2x1ZGUgInBvcnRhc20uaCINCisNCisJSU1QT1JUIHZUYXNrSW5jcmVtZW50VGljaw0KKwlJTVBPUlQgdlRhc2tTd2l0Y2hDb250ZXh0DQorCUlNUE9SVCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQNCisNCisJRVhQT1JUIHZUaWNrSVNSDQorCUVYUE9SVCB2UG9ydFlpZWxkDQorCUVYUE9SVCB4UG9ydFN0YXJ0U2NoZWR1bGVyDQorCQ0KKwlSU0VHIENPREUNCisNCisvKg0KKyAqIFRoZSBSVE9TIHRpY2sgSVNSLg0KKyAqDQorICogSWYgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBpbiB1c2UgdGhpcyBzaW1wbHkgaW5jcmVtZW50cyB0aGUgdGljaw0KKyAqIGNvdW50Lg0KKyAqDQorICogSWYgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGluIHVzZSBhIGNvbnRleHQgc3dpdGNoIGNhbiBhbHNvIG9jY3VyLg0KKyAqLw0KK3ZUaWNrSVNSOg0KKwlwb3J0U0FWRV9DT05URVhUDQorCQkJCQ0KKwljYWxsCSN2VGFza0luY3JlbWVudFRpY2sNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCWNhbGwJI3ZUYXNrU3dpdGNoQ29udGV4dA0KKwkjZW5kaWYNCisJCQ0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGVkIGJ5IHRoZSBwb3J0WUlFTEQoKSBtYWNyby4NCisgKi8NCit2UG9ydFlpZWxkOg0KKw0KKwkvKiBNaW1pYyBhbiBpbnRlcnJ1cHQgYnkgcHVzaGluZyB0aGUgU1IuICovDQorCXB1c2gJU1IJCQkNCisNCisJLyogTm93IHRoZSBTUiBpcyBzdGFja2VkIHdlIGNhbiBkaXNhYmxlIGludGVycnVwdHMuICovDQorCWRpbnQJCQkNCisJCQkJDQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVAkJCQ0KKw0KKwkvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJY2FsbAkjdlRhc2tTd2l0Y2hDb250ZXh0CQkNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKg0KKyAqIFN0YXJ0IG9mZiB0aGUgc2NoZWR1bGVyIGJ5IGluaXRpYWxpc2luZyB0aGUgUlRPUyB0aWNrIHRpbWVyLCB0aGVuIHJlc3RvcmluZw0KKyAqIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLg0KKyAqLw0KK3hQb3J0U3RhcnRTY2hlZHVsZXI6DQorDQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCXdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCWNhbGwJI3ZQb3J0U2V0dXBUaW1lckludGVycnVwdA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAgICAgCQkNCisNCisJLyogSW5zdGFsbCB2VGlja0lTUiBhcyB0aGUgdGltZXIgQTAgaW50ZXJydXB0LiAqLw0KKwlBU0VHDQorCU9SRyAweEZGRTAgKyBUSU1FUkEwX1ZFQ1RPUg0KKwkNCisJX3ZUaWNrSVNSXzogREMxNiB2VGlja0lTUg0KKwkNCisNCisJRU5EDQorCQkNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NmVkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE2NiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0U0hPUlQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfRElOVCgpOyBfTk9QKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfRUlOVCgpOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbCBtYWNyb3MuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCQkoICggdW5zaWduZWQgcG9ydFNIT1JUICkgMCApDQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0U0hPUlQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1c0NyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRTSE9SVCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkNCisjZGVmaW5lIHBvcnROT1AoKQkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmIGNvbmZpZ0lOVEVSUlVQVF9FWEFNUExFX01FVEhPRCA9PSAyDQorDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBpZiggeCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorDQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzBYL2RhdGFfbW9kZWwuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9kYXRhX21vZGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxYzc2MQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9kYXRhX21vZGVsLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgREFUQV9NT0RFTF9IDQorI2RlZmluZSBEQVRBX01PREVMX0gNCisNCisjaWZkZWYgX19EQVRBX01PREVMX1NNQUxMX18NCisJI2RlZmluZSBwdXNobV94IHB1c2htLncNCisJI2RlZmluZSBwb3BtX3ggcG9wbS53DQorCSNkZWZpbmUgcHVzaF94IHB1c2gudw0KKwkjZGVmaW5lIHBvcF94IHBvcC53DQorCSNkZWZpbmUgbW92X3ggbW92LncNCisJI2RlZmluZSBjbXBfeCBjbXAudw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX0RBVEFfTU9ERUxfTUVESVVNX18NCisJI2RlZmluZSBwdXNobV94IHB1c2htLmENCisJI2RlZmluZSBwb3BtX3ggcG9wbS5hDQorCSNkZWZpbmUgcHVzaF94IHB1c2h4LmENCisJI2RlZmluZSBwb3BfeCBwb3B4LmENCisJI2RlZmluZSBtb3ZfeCBtb3Yudw0KKwkjZGVmaW5lIGNtcF94IGNtcC53DQorI2VuZGlmDQorDQorI2lmZGVmIF9fREFUQV9NT0RFTF9MQVJHRV9fDQorCSNkZWZpbmUgcHVzaG1feCBwdXNobS5hDQorCSNkZWZpbmUgcG9wbV94IHBvcG0uYQ0KKwkjZGVmaW5lIHB1c2hfeCBwdXNoeC5hDQorCSNkZWZpbmUgcG9wX3ggcG9weC5hDQorCSNkZWZpbmUgbW92X3ggbW92eC5hDQorCSNkZWZpbmUgY21wX3ggY21weC5hDQorI2VuZGlmDQorDQorI2lmbmRlZiBwdXNobV94DQorCSNlcnJvciBUaGUgYXNzZW1ibGVyIG9wdGlvbnMgbXVzdCBkZWZpbmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogX19EQVRBX01PREVMX1NNQUxMX18sIF9fREFUQV9NT0RFTF9NRURJVU1fXywgb3IgX19EQVRBX01PREVMX0xBUkdFX18NCisjZW5kaWYNCisNCisjZW5kaWYgLyogREFUQV9NT0RFTF9IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyNmU3MAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0LmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwWCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzZXR1cC4gIFRoZSB0aWNrIElTUiBydW5zIG9mZiB0aGUgQUNMSywNCitub3QgdGhlIE1DTEsuICovDQorI2RlZmluZSBwb3J0QUNMS19GUkVRVUVOQ1lfSFoJCQkoICggcG9ydFRpY2tUeXBlICkgMzI3NjggKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORwkoICggdW5zaWduZWQgc2hvcnQgKSAxMCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDA4ICkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGguICBFYWNoDQordGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMgaW5jcmVtZW50ZWQuICBFYWNoIHRpbWUgYQ0KK2NyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5DQorYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCisNCit1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KK25vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCitzZXF1ZW5jZS4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoNCisgKiBTZXRzIHVwIHRoZSBwZXJpb2RpYyBJU1IgdXNlZCBmb3IgdGhlIFJUT1MgdGljay4gIFRoaXMgdXNlcyB0aW1lciAwLCBidXQNCisgKiBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkgdXNlZCB0aGUgd2F0Y2hkb2cgdGltZXIgb3IgdGltZXIgMS4NCisgKi8NCit2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIHNob3J0ICpwdXNUb3BPZlN0YWNrOw0KK3Vuc2lnbmVkIGxvbmcgKnB1bFRvcE9mU3RhY2s7DQorDQorCS8qDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCQlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCisJDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgzMzMzOw0KKwkqLw0KKw0KKwkvKiBwb3J0U1RBQ0tfVFlQRSBpcyBlaXRoZXIgMTYgYml0cyBvciAzMiBiaXRzIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBtb2RlbC4NCisJU29tZSBzdGFja2VkIGl0ZW1zIGRvIG5vdCBjaGFuZ2Ugc2l6ZSBkZXBlbmRpbmcgb24gdGhlIGRhdGEgbW9kZWwgc28gaGF2ZQ0KKwl0byBiZSBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGNvcnJlY3Qgc2l6ZSBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwgd29yaw0KKwl3aGljaGV2ZXIgZGF0YSBtb2RlbCBpcyBiZWluZyB1c2VkLiAqLw0KKwlpZiggc2l6ZW9mKCBwb3J0U1RBQ0tfVFlQRSApID09IHNpemVvZiggdW5zaWduZWQgc2hvcnQgKSApDQorCXsNCisJCS8qIE1ha2Ugcm9vbSBmb3IgYSAyMCBiaXQgdmFsdWUgc3RvcmVkIGFzIGEgMzIgYml0IHZhbHVlLiAqLw0KKwkJcHVzVG9wT2ZTdGFjayA9ICggdW5zaWduZWQgc2hvcnQgKiApIHB4VG9wT2ZTdGFjazsNCisJCXB1c1RvcE9mU3RhY2stLTsNCisJCXB1bFRvcE9mU3RhY2sgPSAoIHVuc2lnbmVkIGxvbmcgKiApIHB1c1RvcE9mU3RhY2s7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlwdWxUb3BPZlN0YWNrID0gKCB1bnNpZ25lZCBsb25nICogKSBweFRvcE9mU3RhY2s7DQorCX0NCisJKnB1bFRvcE9mU3RhY2sgPSAoIHVuc2lnbmVkIGxvbmcgKSBweENvZGU7DQorCQ0KKwlwdXNUb3BPZlN0YWNrID0gKCB1bnNpZ25lZCBzaG9ydCAqICkgcHVsVG9wT2ZTdGFjazsNCisJcHVzVG9wT2ZTdGFjay0tOw0KKwkqcHVzVG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsNCisJcHVzVG9wT2ZTdGFjayAtPSAoIHNpemVvZiggcG9ydFNUQUNLX1RZUEUgKSAvIDIgKTsNCisJDQorCS8qIEZyb20gaGVyZSBvbiB0aGUgc2l6ZSBvZiBzdGFja2VkIGl0ZW1zIGRlcGVuZHMgb24gdGhlIG1lbW9yeSBtb2RlbC4gKi8NCisJcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSAqICkgcHVzVG9wT2ZTdGFjazsNCisNCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJI2lmZGVmIFBSRUxPQURfUkVHSVNURVJfVkFMVUVTDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZmZmZjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsJDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDM7DQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjayAtPSA5Ow0KKwkjZW5kaWYNCisNCisNCisJLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCisJVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgaXMNCisJaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7CQ0KKw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBNU1A0MzAgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQorCWRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4NCisgKi8NCit2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgdmVjdG9yPWNvbmZpZ1RJQ0tfVkVDVE9SDQorX19pbnRlcnJ1cHQgX19yYXcgdm9pZCB2VGlja0lTUkVudHJ5KCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICk7DQorDQorCV9fYmljX1NSX3JlZ2lzdGVyX29uX2V4aXQoIFNDRzEgKyBTQ0cwICsgT1NDT0ZGICsgQ1BVT0ZGICk7DQorCXZQb3J0VGlja0lTUigpOw0KK30NCisNCisJDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRleHQuczQzIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRleHQuczQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjFmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL01TUDQzMFgvcG9ydGV4dC5zNDMKQEAgLTAsMCArMSwxNzYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKyNpbmNsdWRlICJtc3A0MzAuaCINCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisjaW5jbHVkZSAiZGF0YV9tb2RlbC5oIg0KKw0KKwlJTVBPUlQgdlRhc2tJbmNyZW1lbnRUaWNrDQorCUlNUE9SVCB2VGFza1N3aXRjaENvbnRleHQNCisJSU1QT1JUIHZQb3J0U2V0dXBUaW1lckludGVycnVwdA0KKwlJTVBPUlQgcHhDdXJyZW50VENCDQorCUlNUE9SVCB1c0NyaXRpY2FsTmVzdGluZw0KKw0KKwlFWFBPUlQgdlBvcnRUaWNrSVNSDQorCUVYUE9SVCB2UG9ydFlpZWxkDQorCUVYUE9SVCB4UG9ydFN0YXJ0U2NoZWR1bGVyDQorDQorcG9ydFNBVkVfQ09OVEVYVCBtYWNybw0KKw0KKwkvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwlwdXNobV94CSMxMiwgcjE1DQorCW1vdi53CSZ1c0NyaXRpY2FsTmVzdGluZywgcjE0DQorCXB1c2hfeCByMTQNCisJbW92X3gJJnB4Q3VycmVudFRDQiwgcjEyDQorCW1vdl94CXNwLCAwKCByMTIgKQ0KKwllbmRtDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCQkNCitwb3J0UkVTVE9SRV9DT05URVhUIG1hY3JvDQorDQorCW1vdl94CSZweEN1cnJlbnRUQ0IsIHIxMg0KKwltb3ZfeAlAcjEyLCBzcA0KKwlwb3BfeAlyMTUNCisJbW92LncJcjE1LCAmdXNDcml0aWNhbE5lc3RpbmcNCisJcG9wbV94CSMxMiwgcjE1DQorCXBvcC53CXNyDQorCXJldGENCisJZW5kbQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qDQorICogVGhlIFJUT1MgdGljayBJU1IuDQorICoNCisgKiBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGluIHVzZSB0aGlzIHNpbXBseSBpbmNyZW1lbnRzIHRoZSB0aWNrDQorICogY291bnQuDQorICoNCisgKiBJZiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgaW4gdXNlIGEgY29udGV4dCBzd2l0Y2ggY2FuIGFsc28gb2NjdXIuDQorICovDQorDQorCVJTRUcgQ09ERQ0KKwlFVkVODQorDQordlBvcnRUaWNrSVNSOg0KKw0KKwkvKiBUaGUgc3IgaXMgbm90IHNhdmVkIGluIHBvcnRTQVZFX0NPTlRFWFQoKSBiZWNhdXNlIHZQb3J0WWllbGQoKSBuZWVkcw0KKwl0byBzYXZlIGl0IG1hbnVhbGx5IGJlZm9yZSBpdCBnZXRzIG1vZGlmaWVkIChpbnRlcnJ1cHRzIGdldCBkaXNhYmxlZCkuDQorCUVudGVyaW5nIHRocm91Z2ggdGhpcyBpbnRlcnJ1cHQgbWVhbnMgdGhlIFNSIGlzIGFscmVhZHkgb24gdGhlIHN0YWNrLCBidXQNCisJdGhpcyBrZWVwcyB0aGUgc3RhY2sgZnJhbWVzIGlkZW50aWNhbC4gKi8NCisJcHVzaC53IHNyDQorCXBvcnRTQVZFX0NPTlRFWFQNCisNCisJY2FsbGEJI3ZUYXNrSW5jcmVtZW50VGljaw0KKw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJY2FsbGEJI3ZUYXNrU3dpdGNoQ29udGV4dA0KKwkjZW5kaWYNCisNCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoIGNhbGxlZCBieSB0aGUgcG9ydFlJRUxEKCkgbWFjcm8uDQorICovDQorIAlFVkVODQorDQordlBvcnRZaWVsZDoNCisNCisJLyogVGhlIHNyIG5lZWRzIHNhdmluZyBiZWZvcmUgaXQgaXMgbW9kaWZpZWQuICovDQorCXB1c2gudwlzcg0KKw0KKwkvKiBOb3cgdGhlIFNSIGlzIHN0YWNrZWQgd2UgY2FuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCisJZGludA0KKwlub3ANCisNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUDQorDQorCS8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCisJY2FsbGEJI3ZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qDQorICogU3RhcnQgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgaW5pdGlhbGlzaW5nIHRoZSBSVE9TIHRpY2sgdGltZXIsIHRoZW4gcmVzdG9yaW5nDQorICogdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suDQorICovDQorIAlFVkVODQorDQoreFBvcnRTdGFydFNjaGVkdWxlcjoNCisNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJY2FsbGEJI3ZQb3J0U2V0dXBUaW1lckludGVycnVwdA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorCUVORA0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVhMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTc3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIEhhcmR3YXJlIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJtc3A0MzAuaCINCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRTSE9SVA0KKw0KKy8qIFRoZSBzdGFjayB0eXBlIGNoYW5nZXMgZGVwZW5kaW5nIG9uIHRoZSBkYXRhIG1vZGVsLiAqLw0KKyNpZiggX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX1NNQUxMX18gKQ0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFIHVuc2lnbmVkIHNob3J0DQorI2Vsc2UNCisJI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSB1bnNpZ25lZCBsb25nDQorI2VuZGlmDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfRElOVCgpO19OT1AoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9FSU5UKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wgbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVuc2lnbmVkIHBvcnRTSE9SVCApIDAgKQ0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdXNDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovCQkJXA0KKwkvKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgKi8JXA0KKwkvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovCQkJCQkJCVwNCisJdXNDcml0aWNhbE5lc3RpbmcrKzsJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19ub19vcGVyYXRpb24oKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIGlmKCB4ICkgdlBvcnRZaWVsZCgpDQorCQ0KK3ZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIHNpemVvZiggaW50ICkgIT0gc2l6ZW9mKCBsb25nICkgc28gYSBmdWxsIHByaW50ZigpIGxpYnJhcnkgaXMgcmVxdWlyZWQgaWYNCitydW4gdGltZSBzdGF0cyBpbmZvcm1hdGlvbiBpcyB0byBiZSBkaXNwbGF5ZWQuICovDQorI2RlZmluZSBwb3J0TFVfUFJJTlRGX1NQRUNJRklFUl9SRVFVSVJFRA0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvUkw3OC9JU1JfU3VwcG9ydC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9STDc4L0lTUl9TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiOTgwOAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvUkw3OC9JU1JfU3VwcG9ydC5oCkBAIC0wLDAgKzEsMTE5IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisNCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisNCis7IFZhcmlhYmxlcyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJRVhURVJOICAgIHB4Q3VycmVudFRDQg0KKwlFWFRFUk4gICAgdXNDcml0aWNhbE5lc3RpbmcNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCis7ICAgU2F2ZXMgdGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMsIENTIGFuZCBFUyAob25seSBpbiBmYXIgDQorOwltZW1vcnkgbW9kZSkgcmVnaXN0ZXJzIHRoZSB1c0NyaXRpY2FsTmVzdGluZyBWYWx1ZSBhbmQgdGhlIFN0YWNrIFBvaW50ZXINCis7ICAgb2YgdGhlIGFjdGl2ZSBUYXNrIG9udG8gdGhlIHRhc2sgc3RhY2sNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKw0KKwlQVVNIICAgICAgQVggICAgICAgICAgICAgICAgICAgIDsgU2F2ZSBBWCBSZWdpc3RlciB0byBzdGFjay4NCisJUFVTSCAgICAgIEhMDQorI2lmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXw0KKwlNT1YgICAgICAgQSwgQ1MgICAgICAgICAgICAgICAgIDsgU2F2ZSBDUyByZWdpc3Rlci4NCisJWENIICAgICAgIEEsIFgNCisJTU9WICAgICAgIEEsIEVTICAgICAgICAgICAgICAgICA7IFNhdmUgRVMgcmVnaXN0ZXIuDQorCVBVU0ggICAgICBBWA0KKyNlbHNlDQorCU1PViAgICAgICBBLCBDUyAgICAgICAgICAgICAgICAgOyBTYXZlIENTIHJlZ2lzdGVyLg0KKwlQVVNIICAgICAgQVgNCisjZW5kaWYNCisJUFVTSCAgICAgIERFICAgICAgICAgICAgICAgICAgICA7IFNhdmUgdGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQVVNIICAgICAgQkMNCisJTU9WVyAgICAgIEFYLCB1c0NyaXRpY2FsTmVzdGluZyA7IFNhdmUgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLg0KKwlQVVNIICAgICAgQVgJDQorCU1PVlcgICAgICBBWCwgcHhDdXJyZW50VENCIAkgICAgOyBTYXZlIHRoZSBTdGFjayBwb2ludGVyLg0KKwlNT1ZXICAgICAgSEwsIEFYCQkJCQkNCisJTU9WVyAgICAgIEFYLCBTUAkJCQkJDQorCU1PVlcgICAgICBbSExdLCBBWAkJCQkJDQorCUVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorOyAgIFJlc3RvcmVzIHRoZSB0YXNrIFN0YWNrIFBvaW50ZXIgdGhlbiB1c2UgdGhpcyB0byByZXN0b3JlIHVzQ3JpdGljYWxOZXN0aW5nLA0KKzsgICBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCB0aGUgQ1MgYW5kIEVTIChvbmx5IGluIGZhciBtZW1vcnkgbW9kZSkNCis7ICAgb2YgdGhlIHNlbGVjdGVkIHRhc2sgZnJvbSB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorCU1PVlcgICAgICBBWCwgcHhDdXJyZW50VENCCSAgICA7IFJlc3RvcmUgdGhlIFN0YWNrIHBvaW50ZXIuDQorCU1PVlcgICAgICBITCwgQVgNCisJTU9WVyAgICAgIEFYLCBbSExdDQorCU1PVlcgICAgICBTUCwgQVgNCisJUE9QCSAgICAgIEFYCSAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuDQorCU1PVlcgICAgICB1c0NyaXRpY2FsTmVzdGluZywgQVgNCisJUE9QCSAgICAgIEJDICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQT1AJICAgICAgREUNCisjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fDQorCVBPUCAgICAgICBBWCAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBFUyByZWdpc3Rlci4NCisJTU9WICAgICAgIEVTLCBBDQorCVhDSCAgICAgICBBLCBYICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBDUyByZWdpc3Rlci4NCisJTU9WICAgICAgIENTLCBBDQorI2Vsc2UNCisJUE9QICAgICAgIEFYDQorCU1PViAgICAgICBDUywgQSAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIENTIHJlZ2lzdGVyLg0KKyNlbmRpZg0KKwlQT1AgICAgICAgSEwgICAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgSEwuDQorCVBPUCAgICAgICBBWCAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIEFYLg0KKwlFTkRNDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvUkw3OC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JMNzgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2MzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JMNzgvcG9ydC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBUaGUgY3JpdGljYWwgbmVzdGluZyB2YWx1ZSBpcyBpbml0aWFsaXNlZCB0byBhIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZQ0KK2ludGVycnVwdHMgZG9uJ3QgYWNjaWRlbnRhbGx5IGJlY29tZSBlbmFibGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HICAoICggdW5zaWduZWQgc2hvcnQgKSAxMCApDQorDQorLyogSW5pdGlhbCBQU1cgdmFsdWUgYWxsb2NhdGVkIHRvIGEgbmV3bHkgY3JlYXRlZCB0YXNrLg0KKyAqICAgMTEwMDAxMTAwMDAwMDAwMA0KKyAqICAgfHx8fHx8fHwtLS0tLS0tLS0tLS0tLSBGaWxsIGJ5dGUNCisgKiAgIHx8fHx8fHwtLS0tLS0tLS0tLS0tLS0gQ2FycnkgRmxhZyBjbGVhcmVkDQorICogICB8fHx8fC0tLS0tLS0tLS0tLS0tLS0tIEluLXNlcnZpY2UgcHJpb3JpdHkgRmxhZ3Mgc2V0IHRvIGxvdyBsZXZlbA0KKyAqICAgfHx8fC0tLS0tLS0tLS0tLS0tLS0tLSBSZWdpc3RlciBiYW5rIFNlbGVjdCAwIEZsYWcgY2xlYXJlZA0KKyAqICAgfHx8LS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgQ2FycnkgRmxhZyBjbGVhcmVkDQorICogICB8fC0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlZ2lzdGVyIGJhbmsgU2VsZWN0IDEgRmxhZyBjbGVhcmVkDQorICogICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFplcm8gRmxhZyBzZXQNCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIEludGVycnVwdCBGbGFnIHNldCAoZW5hYmxlZCkNCisgKi8NCisjZGVmaW5lIHBvcnRQU1cJCSAgKCAweGM2VUwgKQ0KKw0KKy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCBrbm93IG9yIG5lZWQgdG8ga25vdyBpdHMNCit0eXBlLiAqLw0KK3R5cGVkZWYgdm9pZCB0c2tUQ0I7DQorZXh0ZXJuIHZvbGF0aWxlIHRza1RDQiAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBkZXB0aC4gIEVhY2ggdGltZQ0KK2EgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsDQorc2VjdGlvbiBpcyBleGl0ZWQgdGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIC0gd2l0aCBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcNCityZS1lbmFibGVkIGlmIHRoZSBjb3VudCBpcyB6ZXJvLg0KKw0KK3VzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQorbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCitzZXF1ZW5jZS4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXRzIHVwIHRoZSBwZXJpb2RpYyBJU1IgdXNlZCBmb3IgdGhlIFJUT1MgdGljay4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBEZWZpbmVkIGluIHBvcnRhc20uczg3LCB0aGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgc2NoZWR1bGVyIGJ5IGxvYWRpbmcgdGhlDQorICogY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0byBydW4uDQorICovDQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIGxvbmcgKnB1bExvY2FsOw0KKw0KKwkjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fDQorCXsNCisJCS8qIFBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBvbiB0aGUgc3RhY2ssIGFuZCB3cml0dGVuIHVzaW5nIGEgMzJiaXQgdmFsdWUNCisJCWhlbmNlIGEgc3BhY2UgaXMgbGVmdCBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFdyaXRlIGluIHRoZSBwYXJhbWV0ZXIgdmFsdWUuICovDQorCQlwdWxMb2NhbCA9ICAoIHVuc2lnbmVkIGxvbmcgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggdW5zaWduZWQgbG9uZyApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogVGhlc2UgdmFsdWVzIGFyZSBqdXN0IHNwYWNlcnMuICBUaGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uDQorCQl3b3VsZCBub3JtYWxseSBiZSB3cml0dGVuIGhlcmUuICovDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Y2RjZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGNkY2Q7DQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFRoZSBzdGFydCBhZGRyZXNzIC8gUFNXIHZhbHVlIGlzIGFsc28gd3JpdHRlbiBpbiBhcyBhIDMyYml0IHZhbHVlLA0KKwkJc28gbGVhdmUgYSBzcGFjZSBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJDQorCQkvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgY29tYmluZWQgd2l0aCB0aGUgUFNXLiAqLw0KKwkJcHVsTG9jYWwgPSAoIHVuc2lnbmVkIGxvbmcgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggKCAoIHVuc2lnbmVkIGxvbmcgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEFYIHJlZ2lzdGVyLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkvKiBUYXNrIGZ1bmN0aW9uIGFkZHJlc3MgaXMgd3JpdHRlbiB0byB0aGUgc3RhY2sgZmlyc3QuICBBcyBpdCBpcw0KKwkJd3JpdHRlbiBhcyBhIDMyYml0IHZhbHVlIGEgc3BhY2UgaXMgbGVmdCBvbiB0aGUgc3RhY2sgZm9yIHRoZSBzZWNvbmQNCisJCXR3byBieXRlcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkJLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggdGhlIFBTVy4gKi8NCisJCXB1bExvY2FsID0gKCB1bnNpZ25lZCBsb25nICogKSBweFRvcE9mU3RhY2s7DQorCQkqcHVsTG9jYWwgPSAoICggKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlICkgfCAoIHBvcnRQU1cgPDwgMjRVTCApICk7DQorCQlweFRvcE9mU3RhY2stLTsNCisNCisJCS8qIFRoZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIEFYLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZW5kaWYNCisNCisJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEhMIHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIENTIGFuZCBFUyByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwRjAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogRmluYWxseSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgREUgYW5kIEJDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhERURFOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJDQkM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBGaW5hbGx5IHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgY291bnQgaXMgc2V0IHRvIHplcm8gd2hlbiB0aGUgdGFzaw0KKwlmaXJzdCBzdGFydHMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdGhhdCBoYXMgYmVlbmUgZ2VuZXJhdGVkIHNvIGl0DQorCWNhbgliZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQorCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogRXhlY3V0aW9uIHNob3VsZCBub3QgcmVhY2ggaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIFJMNzgvRzEzIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNDbG9ja0h6ID0gMTUwMDBVTDsgLyogSW50ZXJuYWwgY2xvY2suICovDQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNDb21wYXJlTWF0Y2ggPSAoIHVzQ2xvY2tIeiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICsgMVVMOw0KKw0KKwkvKiBVc2UgdGhlIGludGVybmFsIDE1SyBjbG9jay4gKi8NCisJT1NNQyA9IDB4MTZVOw0KKw0KKwkvKiBTdXBwbHkgdGhlIFJUQyBjbG9jay4gKi8NCisJUlRDRU4gPSAxVTsNCisJDQorCS8qIERpc2FibGUgSVRNQyBvcGVyYXRpb24uICovDQorCUlUTUMgPSAweDAwMDA7DQorCQ0KKwkvKiBEaXNhYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJSVRNSyA9IDFVOw0KKwkNCisJLyogU2V0IElOVElUIGhpZ2ggcHJpb3JpdHkgKi8NCisJSVRQUjEgPSAxVTsNCisJSVRQUjAgPSAxVTsNCisJDQorCS8qIFNldCBpbnRlcnZhbC4gKi8NCisJSVRNQyA9IHVzQ29tcGFyZU1hdGNoOw0KKw0KKwkvKiBDbGVhciBJTklUIGludGVycnVwdC4gKi8NCisJSVRJRiA9IDBVOw0KKwkNCisJLyogRW5hYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJSVRNSyA9IDBVOw0KKwkNCisJLyogRW5hYmxlIElUIG9wZXJhdGlvbi4gKi8NCisJSVRNQyB8PSAweDgwMDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvUkw3OC9wb3J0YXNtLnM4NyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvUkw3OC9wb3J0YXNtLnM4NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY0YWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9STDc4L3BvcnRhc20uczg3CkBAIC0wLDAgKzEsMTE0IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisjaW5jbHVkZSAiSVNSX1N1cHBvcnQuaCINCisNCisNCisjaWYgX19DT1JFX18gIT0gX19STDc4XzFfXw0KKwkjZXJyb3IgIlRoaXMgZmlsZSBpcyBvbmx5IGZvciBSTDc4IERldmljZXMiDQorI2VuZGlmDQorDQorI2RlZmluZSBDUyAgICAgICAgICAgICAgICAgICAgMHhGRkZGQw0KKyNkZWZpbmUgRVMgICAgICAgICAgICAgICAgICAgIDB4RkZGRkQNCisNCisJUFVCTElDICAgIHZQb3J0WWllbGQNCisJUFVCTElDICAgIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisJUFVCTElDICAgIHZQb3J0VGlja0lTUg0KKw0KKwlFWFRFUk4gICAgdlRhc2tTd2l0Y2hDb250ZXh0DQorCUVYVEVSTiAgICB2VGFza0luY3JlbWVudFRpY2sNCisNCis7IEZyZWVSVE9TIHlpZWxkIGhhbmRsZXIuICBUaGlzIGlzIGluc3RhbGxlZCBhcyB0aGUgQlJLIHNvZnR3YXJlIGludGVycnVwdA0KKzsgaGFuZGxlci4NCisgICAgUlNFRyBDT0RFOkNPREUNCit2UG9ydFlpZWxkOg0KKwlwb3J0U0FWRV9DT05URVhUCQkgICAgICAgIDsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KKwljYWxsICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0ICAgIDsgQ2FsbCB0aGUgc2NoZWR1bGVyIHRvIHNlbGVjdCB0aGUgbmV4dCB0YXNrLg0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkgICAgICAgIDsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4NCisJcmV0Yg0KKw0KKwkNCis7IFN0YXJ0cyB0aGUgc2NoZWR1bGVyIGJ5IHJlc3RvcmluZyB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IHdpbGwgZXhlY3V0ZQ0KKzsgZmlyc3QuDQorICAgIFJTRUcgQ09ERTpDT0RFDQordlBvcnRTdGFydEZpcnN0VGFzazoNCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIGNvbnRleHQgb2Ygd2hpY2hldmVyIHRhc2sgdGhlIC4uLg0KKwlyZXRpCQkJCQkgICAgICAgIDsgQW4gaW50ZXJydXB0IHN0YWNrIGZyYW1lIGlzIHVzZWQgc28gdGhlIHRhc2sNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGlzIHN0YXJ0ZWQgdXNpbmcgYSBSRVRJIGluc3RydWN0aW9uLg0KKw0KKzsgRnJlZVJUT1MgdGljayBoYW5kbGVyLiAgVGhpcyBpcyBpbnN0YWxsZWQgYXMgdGhlIGludGVydmFsIHRpbWVyIGludGVycnVwdA0KKzsgaGFuZGxlci4NCisJIFJTRUcgQ09ERTpDT0RFDQordlBvcnRUaWNrSVNSOg0KKw0KKwlwb3J0U0FWRV9DT05URVhUCQkgICAgICAgIDsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KKwljYWxsICAgICAgdlRhc2tJbmNyZW1lbnRUaWNrICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwljYWxsICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0ICAgIDsgQ2FsbCB0aGUgc2NoZWR1bGVyIHRvIHNlbGVjdCB0aGUgbmV4dCB0YXNrLg0KKyNlbmRpZg0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkgICAgICAgIDsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4NCisJcmV0aQ0KKw0KKw0KKzsgSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzDQorDQorCUNPTU1PTiBJTlRWRUM6Q09ERTpST09UKDEpDQorCU9SRyA1Ng0KKwlEVyB2UG9ydFRpY2tJU1INCisNCisJQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMSkNCisJT1JHIDEyNg0KKwlEVyB2UG9ydFlpZWxkDQorDQorDQorICAgICAgRU5EClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9STDc4L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9STDc4L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2RiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JMNzgvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorI2lmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXyAmJiBfX0NPREVfTU9ERUxfXyA9PSBfX0NPREVfTU9ERUxfTkVBUl9fDQorCSN3YXJuaW5nIFRoaXMgcG9ydCBoYXMgbm90IGJlZW4gdGVzdGVkIHdpdGggeW91ciBzZWxlY3RlZCBtZW1vcnkgbW9kZWwgY29tYmluYXRpb24uIElmIGEgZmFyIGRhdGEgbW9kZWwgaXMgcmVxdWlyZWQgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyB1c2UgYSBmYXIgY29kZSBtb2RlbC4NCisjZW5kaWYNCisNCisjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX05FQVJfXyAmJiBfX0NPREVfTU9ERUxfXyA9PSBfX0NPREVfTU9ERUxfRkFSX18NCisJI3dhcm5pbmcgVGhpcyBwb3J0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgd2l0aCB5b3VyIHNlbGVjdGVkIG1lbW9yeSBtb2RlbCBjb21iaW5hdGlvbi4gSWYgYSBmYXIgY29kZSBtb2RlbCBpcyByZXF1aXJlZCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHNvIHVzZSBhIGZhciBkYXRhIG1vZGVsLg0KKyNlbmRpZg0KKwkNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICBmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVuc2lnbmVkIHNob3J0DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgc2hvcnQNCisNCisjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fDQorCSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIHVuc2lnbmVkIGxvbmcNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSB1bnNpZ25lZCBzaG9ydA0KKyNlbmRpZg0KKw0KKwkNCisjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIGludCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIF9fYXNtICggIkRJIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkgX19hc20gKCAiRUkiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wgbWFjcm9zLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVuc2lnbmVkIHBvcnRTSE9SVCApIDAgKQ0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovCQkJXA0KKwkvKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgKi8JXA0KKwkvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovCQkJCQkJCVwNCisJdXNDcml0aWNhbE5lc3RpbmcrKzsJCQkJCQkJCQkJCQkJCVwNCit9DQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8JXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorI2RlZmluZSBwb3J0WUlFTEQoKQlfX2FzbSggIkJSSyIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisjZGVmaW5lIHBvcnROT1AoKQlfX2FzbSggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3d2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBPcHRpb24tYnl0ZXMgYW5kIHNlY3VyaXR5IElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNkZWZpbmUgT1BUX0JZVEVTX1NJWkUgICAgIDQNCisjZGVmaW5lIFNFQ1VfSURfU0laRSAgICAgICAxMA0KKyNkZWZpbmUgV0FUQ0hET0dfRElTQUJMRUQgIDB4MDANCisjZGVmaW5lIExWSV9FTkFCTEVEICAgICAgICAweEZFDQorI2RlZmluZSBMVklfRElTQUJMRUQgICAgICAgMHhGRg0KKyNkZWZpbmUgUkVTRVJWRURfRkYgICAgICAgIDB4RkYNCisjZGVmaW5lIE9DRF9ESVNBQkxFRCAgICAgICAweDA0DQorI2RlZmluZSBPQ0RfRU5BQkxFRCAgICAgICAgMHg4MQ0KKyNkZWZpbmUgT0NEX0VOQUJMRURfRVJBU0UgIDB4ODANCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODk1ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0LmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAic3RyaW5nLmgiDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNpbmNsdWRlIDxpb3J4NjJuLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KK1BTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cJICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMzAwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRlBTVwkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAwMDAwMTAwICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIHdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0DQorICogYWNjZXNzIHRvIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4NCisgKi8NCitleHRlcm4gdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKy8qDQorICogVGhlIHRpY2sgSVNSIGhhbmRsZXIuICBUaGUgcGVyaXBoZXJhbCB1c2VkIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIGFwcGxpY2F0aW9uDQorICogdmlhIGEgaG9vay9jYWxsYmFjayBmdW5jdGlvbi4NCisgKi8NCitfX2ludGVycnVwdCB2b2lkIHZUaWNrSVNSKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKyAJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOw0KKwkNCisJLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KKwl2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KKwl0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KKwkjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCisJew0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsJLyogcjE1LiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZGRkZGRkZGQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWFhYWE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Nzc3Nzc3Nzc7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDQ0NDQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisJfQ0KKwkjZW5kaWYNCisJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJCQkJDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCisJCXVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCisJCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLwkJDQorCQlfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KKwkJDQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCisJCV9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCQ0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKwkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCQlwcnZTdGFydEZpcnN0VGFzaygpOw0KKwl9DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgdmVjdG9yID0gY29uZmlnVElDS19WRUNUT1INCitfX2ludGVycnVwdCB2b2lkIHZUaWNrSVNSKCB2b2lkICkNCit7DQorCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwlfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCisJDQorCS8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQorCW5lY2Vzc2l0YXRlcy4gKi8NCisJX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCQ0KKwkvKiBPbmx5IHNlbGVjdCBhIG5ldyB0YXNrIGlmIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkJdGFza1lJRUxEKCk7DQorCSNlbmRpZg0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0X2FzbS5zIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0X2FzbS5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTkyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnRfYXNtLnMKQEAgLTAsMCArMSwxOTggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlICJQcmlvcml0eURlZmluaXRpb25zLmgiDQorDQorCVBVQkxJQyBfcHJ2U3RhcnRGaXJzdFRhc2sNCisJUFVCTElDIF9fX2ludGVycnVwdF8yNw0KKw0KKwlFWFRFUk4gX3B4Q3VycmVudFRDQg0KKwlFWFRFUk4gX3ZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwlSU0VHIENPREU6Q09ERSg0KQ0KKw0KK19wcnZTdGFydEZpcnN0VGFzazoNCisNCisJCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwkJaW50ZXJydXB0IHN0YWNrIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQuDQorCQlKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCisJCVNFVFBTVwkJVQ0KKw0KKwkJLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KKwkJcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCisJCU1PVi5MCQkjX3B4Q3VycmVudFRDQiwgUjE1DQorCQlNT1YuTAkJW1IxNV0sIFIxNQ0KKwkJTU9WLkwJCVtSMTVdLCBSMA0KKw0KKwkJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkNCisJCXB4Q3VycmVudFRDQi4gKi8NCisJCVBPUAkJCVIxNQ0KKw0KKwkJLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorCQlNVlRBQ0xPCQlSMTUNCisJCVBPUAkJCVIxNQ0KKw0KKwkJLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKwkJTVZUQUNISQkJUjE1DQorCQlQT1AJCQlSMTUNCisNCisJCS8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyB3b3JkLiAqLw0KKwkJTVZUQwkJUjE1LCBGUFNXDQorDQorCQkvKiBSMSB0byBSMTUgLSBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIFNQLiAqLw0KKwkJUE9QTQkJUjEtUjE1DQorDQorCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCQlSVEUNCisJCU5PUA0KKwkJTk9QDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIHNvZnR3YXJlIGludGVycnVwdCAtIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCAnd2VhaycgZGVmaW5pdGlvbi4gKi8NCitfX19pbnRlcnJ1cHRfMjc6DQorDQorCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJCVNFVFBTVwkJSQ0KKw0KKwkJLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KKwkJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQorDQorCQlSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCisJCVBVU0guTAkJUjE1DQorDQorCQkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCQlNVkZDCQlVU1AsIFIxNQ0KKw0KKwkJLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KKwkJU1VCCQkJIzEyLCBSMTUNCisJCU1WVEMJCVIxNSwgVVNQDQorDQorCQkvKiBDb3B5IHRoZSBkYXRhIGFjcm9zcywgUjE1LCB0aGVuIFBDLCB0aGVuIFBTVy4gKi8NCisJCU1PVi5MCQlbIFIwIF0sIFsgUjE1IF0NCisJCU1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0NCisJCU1PVi5MCQk4WyBSMCBdLCA4WyBSMTUgXQ0KKw0KKwkJLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KKwkJQURECQkjMTIsIFIwDQorDQorCQkvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQorCQlTRVRQU1cJCVUNCisNCisJCS8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQorCQlQVVNITQkJUjEtUjE0DQorDQorCQkvKiBTYXZlIHRoZSBGUFNXIGFuZCBhY2N1bXVsYXRvci4gKi8NCisJCU1WRkMJCUZQU1csIFIxNQ0KKwkJUFVTSC5MCQlSMTUNCisJCU1WRkFDSEkgCVIxNQ0KKwkJUFVTSC5MCQlSMTUNCisNCisJCS8qIE1pZGRsZSB3b3JkLiAqLw0KKwkJTVZGQUNNSQlSMTUNCisNCisJCS8qIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuICovDQorCQlTSExMCQkjMTYsIFIxNQ0KKwkJUFVTSC5MCQlSMTUNCisNCisJCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCisJCU1PVi5MCQkjX3B4Q3VycmVudFRDQiwgUjE1DQorCQlNT1YuTAkJWyBSMTUgXSwgUjE1DQorCQlNT1YuTAkJUjAsIFsgUjE1IF0NCisNCisJCS8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgaXMgc2V0IHRvIHRoZSBzeXNjYWxsIHByaW9yaXR5IHdoaWxlIHRoZSBrZXJuZWwNCisJCXN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwkJTVZUSVBMCQkjY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorDQorCQkvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQorCQlCU1IuQQkJX3ZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwkJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KKwkJTVZUSVBMCQkjY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KKw0KKwkJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwkJc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQorCQlNT1YuTAkJI19weEN1cnJlbnRUQ0IsUjE1DQorCQlNT1YuTAkJWyBSMTUgXSwgUjE1DQorCQlNT1YuTAkJWyBSMTUgXSwgUjANCisNCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQorCQlQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KKwkJUE9QCQkJUjE1DQorCQlNVlRBQ0xPIAlSMTUNCisJCVBPUAkJCVIxNQ0KKwkJTVZUQUNISSAJUjE1DQorCQlQT1AJCQlSMTUNCisJCU1WVEMJCVIxNSwgRlBTVw0KKwkJUE9QTQkJUjEtUjE1DQorCQlSVEUNCisJCU5PUA0KKwkJTk9QDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorCQlFTkQNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcxYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE1MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMgLSB0aGVzZSBhcmUgYSBiaXQgbGVnYWN5IGFuZCBub3QgcmVhbGx5IHVzZWQgbm93LCBvdGhlciB0aGFuDQorcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgJLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCS0xDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fbm9fb3BlcmF0aW9uKCkNCisNCisvKiBUaGUgbG9jYXRpb24gb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3Rlci4gIFNvZnR3YXJlIGludGVycnVwdHMgdXNlDQordmVjdG9yIDI3LiAqLw0KKyNkZWZpbmUgcG9ydElUVV9TV0lOVFIJCQkoICggdW5zaWduZWQgY2hhciAqICkgMHgwMDA4NzJFMCApDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkqcG9ydElUVV9TV0lOVFIgPSAoIHVuc2lnbmVkIGNoYXIgKSAweDAxOyBwb3J0Tk9QKCk7IHBvcnROT1AoKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCk7IHBvcnROT1AoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoICggeCApICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KKw0KKy8qDQorICogVGhlc2UgbWFjcm9zIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIHRoZSB0YXNrRU5URVJfQ1JJVElDQUwoKQ0KKyAqIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4NCisgKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdW5zaWduZWQgY2hhciApIDAgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdW5zaWduZWQgY2hhciApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorDQorLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQorDQorLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpDQorDQorLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KK3Vuc2lnbmVkIGxvbmcgdWxQb3J0R2V0SVBMKCB2b2lkICk7DQordm9pZCB2UG9ydFNldElQTCggdW5zaWduZWQgbG9uZyB1bE5ld0lQTCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1bnNpZ25lZCBjaGFyICkgKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3MXgvSVNSX1N1cHBvcnQuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L0lTUl9TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxY2I4MwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L0lTUl9TdXBwb3J0LmgKQEAgLTAsMCArMSwxMzAgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorCUVYVEVSTiBweEN1cnJlbnRUQ0INCisJRVhURVJOIHVsQ3JpdGljYWxOZXN0aW5nDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKw0KK3BvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCisNCisJOyBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAJCQkJCQ0KKwlTVE1EQglTUCEsIHtSMH0NCisNCisJOyBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gCQkJCQkNCisJU1RNREIJU1AsIHtTUH1eDQorCU5PUA0KKwlTVUIJCVNQLCBTUCwgIzQNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suIAkJCQkJCQ0KKwlTVE1EQglSMCEsIHtMUn0NCisNCisJOyBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuIAkJCQkNCisJTU9WCQlMUiwgUjANCisNCisJOyBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suIAkJCQ0KKwlMRE1JQQlTUCEsIHtSMH0NCisNCisJOyBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJDQorCVNUTURCCUxSLCB7UjAtTFJ9Xg0KKwlOT1ANCisJU1VCCQlMUiwgTFIsICM2MA0KKw0KKwk7IFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQ0KKwlNUlMJCVIwLCBTUFNSDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcgDQorCUxEUgkJUjAsIFtSMF0NCisJU1RNREIJTFIhLCB7UjB9DQorDQorCTsgU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCVNUUgkJTFIsIFtSMF0NCisNCisJRU5ETQ0KKw0KKw0KK3BvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCisNCisJOyBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAJCQkJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCUxEUgkJTFIsIFtSMF0NCisNCisJOyBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suIAkNCisJOyBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAJCQkJCQ0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERNRkQJTFIhLCB7UjF9DQorCVNUUgkJUjEsIFtSMF0NCisNCisJOyBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suIAkJCQkJCQkJCQ0KKwlMRE1GRAlMUiEsIHtSMH0NCisJTVNSCQlTUFNSX2N4c2YsIFIwDQorDQorCTsgUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gCQkJCQ0KKwlMRE1GRAlMUiwge1IwLVIxNH1eDQorCU5PUA0KKw0KKwk7IFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAJCQkJCQkJCQkNCisJTERSCQlMUiwgW0xSLCAjKzYwXQ0KKw0KKwk7IEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUgCQ0KKwk7IGNvcnJlY3QgYWRkcmVzcy4gCQkJCQkJCQkJCQkJDQorCVNVQlMJUEMsIExSLCAjNA0KKw0KKwlFTkRNDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjY3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1NUUjcxeC9wb3J0LmMKQEAgLTAsMCArMSwyOTggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU1QgU1RSNzF4IEFSTTcNCisgKiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAid2RnLmgiDQorI2luY2x1ZGUgImVpYy5oIg0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgc3RhY2suICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisjZGVmaW5lIHBvcnRNSUNST1NfUEVSX1NFQ09ORCAxMDAwMDAwDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2V0dXAgdGhlIHdhdGNoZG9nIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCit1bnNpZ25lZCBsb25nIHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1bnNpZ25lZCBsb25nICkgOTk5OTsNCisNCisvKiBUaWNrIGludGVycnVwdCByb3V0aW5lcyBmb3IgY29vcGVyYXRpdmUgYW5kIHByZWVtcHRpdmUgb3BlcmF0aW9uDQorcmVzcGVjdGl2ZWx5LiAgVGhlIHByZWVtcHRpdmUgdmVyc2lvbiBpcyBub3QgZGVmaW5lZCBhcyBfX2lycSBhcyBpdCBpcyBjYWxsZWQNCitmcm9tIGFuIGFzbSB3cmFwcGVyIGZ1bmN0aW9uLiAqLw0KK19fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KK3ZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCitwb3J0U1RBQ0tfVFlQRSAqcHhPcmlnaW5hbFRPUzsNCisNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnRJTklUSUFMX1NQU1I7DQorCQ0KKwlpZiggKCAoIHVuc2lnbmVkIGxvbmcgKSBweENvZGUgJiAweDAxVUwgKSAhPSAweDAwVUwgKQ0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQkJDQorCQ0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8NCitzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCitfX2FybSBfX2lycSB2b2lkIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KK3sNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCXByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KKwlwcm9jZXNzb3IgdGltZSBubyBtYXR0ZXIgd2hhdCBpdHMgcHJpb3JpdHkuICovDQorCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSB3YXRjaGRvZyBhbmQgRUlDLiAqLw0KKwlXREctPlNSID0gMHgwMDAwOw0KKwlwb3J0Q0xFQVJfRUlDKCk7CQkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBhc20gd3JhcHBlciwgc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgX19pcnENCitrZXl3b3JkLiAqLw0KK3ZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApDQorew0KKwkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnRlci4gKi8NCisJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCS8qIFRoZSBuZXcgdGljayB2YWx1ZSBtaWdodCB1bmJsb2NrIGEgdGFzay4gIEVuc3VyZSB0aGUgaGlnaGVzdCB0YXNrIHRoYXQNCisJaXMgcmVhZHkgdG8gZXhlY3V0ZSBpcyB0aGUgdGFzayB0aGF0IHdpbGwgZXhlY3V0ZSB3aGVuIHRoZSB0aWNrIElTUg0KKwlleGl0cy4gKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIHdhdGNoZG9nIGFuZCBFSUMuICovDQorCVdERy0+U1IgPSAweDAwMDA7DQorCXBvcnRDTEVBUl9FSUMoKTsJCQkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KKwkvKiBTZXQgdGhlIHdhdGNoZG9nIHVwIHRvIGdlbmVyYXRlIGEgcGVyaW9kaWMgdGljay4gKi8NCisJV0RHX0VDSVRDb25maWcoIERJU0FCTEUgKTsNCisJV0RHX0NudE9uT2ZmQ29uZmlnKCBESVNBQkxFICk7DQorCVdER19QZXJpb2RWYWx1ZUNvbmZpZyggcG9ydE1JQ1JPU19QRVJfU0VDT05EIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorDQorCS8qIFNldHVwIHRoZSB0aWNrIGludGVycnVwdCBpbiB0aGUgRUlDLiAqLw0KKwlFSUNfSVJRQ2hhbm5lbFByaW9yaXR5Q29uZmlnKCBXREdfSVJRQ2hhbm5lbCwgMSApOw0KKwlFSUNfSVJRQ2hhbm5lbENvbmZpZyggV0RHX0lSUUNoYW5uZWwsIEVOQUJMRSApOw0KKwlFSUNfSVJRQ29uZmlnKCBFTkFCTEUgKTsNCisJV0RHX0VDSVRDb25maWcoIEVOQUJMRSApOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBhY3R1YWxseSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50IHNvDQorCWl0IGlzIHNhZmUgdG8gZG8gdGhpcyBoZXJlLiAqLw0KKwlXREdfQ250T25PZmZDb25maWcoIEVOQUJMRSApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQorCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCV9fZW5hYmxlX2ludGVycnVwdCgpOw0KKwkJfQ0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L3BvcnRhc20uczc5IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydGFzbS5zNzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwYmYzMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L3BvcnRhc20uczc5CkBAIC0wLDAgKzEsMTAxIEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7DQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKwkJUlNFRyBJQ09ERTpDT0RFDQorCQlDT0RFMzINCisNCisJRVhURVJOIHZQb3J0UHJlZW1wdGl2ZVRpY2sNCisJRVhURVJOIHZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwlQVUJMSUMgdlBvcnRZaWVsZFByb2Nlc3Nvcg0KKwlQVUJMSUMgdlBvcnRTdGFydEZpcnN0VGFzaw0KKwlQVUJMSUMgdlBvcnRQcmVlbXB0aXZlVGlja0lTUg0KKw0KKyNpbmNsdWRlICJJU1JfU3VwcG9ydC5oIg0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IFN0YXJ0aW5nIHRoZSBmaXJzdCB0YXNrIGlzIGp1c3QgYSBtYXR0ZXIgb2YgcmVzdG9yaW5nIHRoZSBjb250ZXh0IHRoYXQNCis7IHdhcyBjcmVhdGVkIGJ5IHB4UG9ydEluaXRpYWxpc2VTdGFjaygpLg0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgTWFudWFsIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgU1dJIGhhbmRlci4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRZaWVsZFByb2Nlc3NvcjoNCisJQURECQlMUiwgTFIsICM0CQkJOyBBZGQgNCB0byB0aGUgTFIgdG8gbWFrZSB0aGUgTFIgYXBwZWFyIGV4YWN0bHkNCisJCQkJCQkJCTsgYXMgaWYgdGhlIGNvbnRleHQgd2FzIHNhdmVkIGR1cmluZyBhbmQgSVJRDQorCQkJCQkJCQk7IGhhbmRsZXIuDQorCQkJCQkJCQkNCisJcG9ydFNBVkVfQ09OVEVYVAkJCTsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLi4uDQorCUxEUiBSMCwgPXZUYXNrU3dpdGNoQ29udGV4dAk7IGJlZm9yZSBzZWxlY3RpbmcgdGhlIG5leHQgdGFzayB0byBleGVjdXRlLg0KKwltb3YgICAgIGxyLCBwYw0KKwlCWCBSMA0KKwlwb3J0UkVTVE9SRV9DT05URVhUCQkJOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBzZWxlY3RlZCB0YXNrLg0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IFByZWVtcHRpdmUgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIHdpbGwgb25seSBldmVyIGdldCB1c2VkIGlmDQorOyBwb3J0VVNFX1BSRUVNUFRJT04gaXMgc2V0IHRvIDEgaW4gcG9ydG1hY3JvLmguDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KK3ZQb3J0UHJlZW1wdGl2ZVRpY2tJU1I6DQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisNCisJTERSIFIwLCA9dlBvcnRQcmVlbXB0aXZlVGljayA7IEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHRoaXMgbWF5IHdha2UgYSB0YXNrLg0KKwlNT1YgbHIsIHBjDQorCUJYIFIwDQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJCQk7IFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIHNlbGVjdGVkIHRhc2suDQorDQorDQorCUVORA0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmOWFlMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzF4L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTU1IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0TE9ORw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJYXNtICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSAoICJOT1AiICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fZW5hYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBFSUMgdXRpbGl0aWVzLiAqLw0KKyNkZWZpbmUgcG9ydEVJQ19DSUNSX0FERFIJCSooICggdW5zaWduZWQgcG9ydExPTkcgKiApIDB4RkZGRkY4MDQgKQ0KKyNkZWZpbmUgcG9ydEVJQ19JUFJfQUREUgkJKiggKCB1bnNpZ25lZCBwb3J0TE9ORyAqICkgMHhGRkZGRjg0MCApDQorI2RlZmluZSBwb3J0Q0xFQVJfRUlDKCkJCQlwb3J0RUlDX0lQUl9BRERSID0gMHgwMSA8PCBwb3J0RUlDX0NJQ1JfQUREUg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3NXgvSVNSX1N1cHBvcnQuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L0lTUl9TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzMDU4OQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L0lTUl9TdXBwb3J0LmgKQEAgLTAsMCArMSwxMzEgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsJDQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCisNCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gCQkJCQkNCisJU1RNREIJU1AhLCB7UjB9DQorDQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KKw0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAJCQkJCQkNCisJU1RNREIJUjAhLCB7TFJ9DQorDQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQorDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAJCQkNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAJCQ0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCisNCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nIA0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQorDQorCUVORE0NCisNCisNCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQorDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAJDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gCQkJCQkNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAJCQkJCQkJCQkNCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KKw0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suIAkJCQkNCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCisNCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gCQkJCQkJCQkJDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCisNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCisNCisJRU5ETQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE3YzhjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3NXgvcG9ydC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNUIFNUUjc1eCBBUk03DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIjc1eF90Yi5oIg0KKyNpbmNsdWRlICI3NXhfZWljLmgiDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDNmICkgLyogU3lzdGVtIG1vZGUsIFRIVU1CIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVuc2lnbmVkIGxvbmcgKSAwICkNCisNCisvKiBQcmVzY2FsZSB1c2VkIG9uIHRoZSB0aW1lciBjbG9jayB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aWNrIHBlcmlvZC4gKi8NCisjZGVmaW5lIHBvcnRQUkVTQ0FMRSAyMA0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNldHVwIHRoZSBUQiB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiB1bENyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gIEl0DQorY2Fubm90IGJlIGluaXRpYWxpc2VkIHRvIDAgYXMgdGhpcyB3aWxsIGNhdXNlIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZA0KK2R1cmluZyB0aGUga2VybmVsIGluaXRpYWxpc2F0aW9uIHByb2Nlc3MuICovDQordW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9ICggdW5zaWduZWQgbG9uZyApIDk5OTk7DQorDQorLyogVGljayBpbnRlcnJ1cHQgcm91dGluZXMgZm9yIHByZWVtcHRpdmUgb3BlcmF0aW9uLiAqLw0KK19fYXJtIHZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCitwb3J0U1RBQ0tfVFlQRSAqcHhPcmlnaW5hbFRPUzsNCisNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnRJTklUSUFMX1NQU1I7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7CQ0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK19fYXJtIHZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApDQorew0KKwkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnRlci4gKi8NCisJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCS8qIFRoZSBuZXcgdGljayB2YWx1ZSBtaWdodCB1bmJsb2NrIGEgdGFzay4gIEVuc3VyZSB0aGUgaGlnaGVzdCB0YXNrIHRoYXQNCisJaXMgcmVhZHkgdG8gZXhlY3V0ZSBpcyB0aGUgdGFzayB0aGF0IHdpbGwgZXhlY3V0ZSB3aGVuIHRoZSB0aWNrIElTUg0KKwlleGl0cy4gKi8NCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkjZW5kaWYNCisNCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorRUlDX0lSUUluaXRUeXBlRGVmICBFSUNfSVJRSW5pdFN0cnVjdHVyZTsJDQorVEJfSW5pdFR5cGVEZWYgICAgICBUQl9Jbml0U3RydWN0dXJlOw0KKw0KKwkvKiBTZXR1cCB0aGUgRUlDIGZvciB0aGUgVEIuICovDQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsQ21kID0gRU5BQkxFOw0KKwlFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbCA9IFRCX0lSUUNoYW5uZWw7DQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsUHJpb3JpdHkgPSAxOw0KKwlFSUNfSVJRSW5pdCgmRUlDX0lSUUluaXRTdHJ1Y3R1cmUpOw0KKwkNCisJLyogU2V0dXAgdGhlIFRCIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCVRCX0luaXRTdHJ1Y3R1cmUuVEJfTW9kZSA9IFRCX01vZGVfVGltaW5nOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0NvdW50ZXJNb2RlID0gVEJfQ291bnRlck1vZGVfRG93bjsNCisJVEJfSW5pdFN0cnVjdHVyZS5UQl9QcmVzY2FsZXIgPSBwb3J0UFJFU0NBTEUgLSAxOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0F1dG9SZWxvYWQgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFBSRVNDQUxFICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJVEJfSW5pdCgmVEJfSW5pdFN0cnVjdHVyZSk7DQorCQ0KKwkvKiBFbmFibGUgVEIgVXBkYXRlIGludGVycnVwdCAqLw0KKwlUQl9JVENvbmZpZyhUQl9JVF9VcGRhdGUsIEVOQUJMRSk7DQorDQorCS8qIENsZWFyIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8NCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoVEJfSVRfVXBkYXRlKTsNCisNCisJLyogRW5hYmxlIFRCICovDQorCVRCX0NtZChFTkFCTEUpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQorCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCisNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCV9fZW5hYmxlX2ludGVycnVwdCgpOw0KKwkJfQ0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnRhc20uczc5IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3NXgvcG9ydGFzbS5zNzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjMzU3OQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnRhc20uczc5CkBAIC0wLDAgKzEsODkgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsJDQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKw0KKwlSU0VHIElDT0RFOkNPREUNCisJQ09ERTMyDQorDQorCUVYVEVSTiB2UG9ydFByZWVtcHRpdmVUaWNrDQorCUVYVEVSTiB2VGFza1N3aXRjaENvbnRleHQNCisNCisJUFVCTElDIHZQb3J0WWllbGRQcm9jZXNzb3INCisJUFVCTElDIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisNCisjaW5jbHVkZSAiSVNSX1N1cHBvcnQuaCINCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBTdGFydGluZyB0aGUgZmlyc3QgdGFzayBpcyBqdXN0IGEgbWF0dGVyIG9mIHJlc3RvcmluZyB0aGUgY29udGV4dCB0aGF0DQorOyB3YXMgY3JlYXRlZCBieSBweFBvcnRJbml0aWFsaXNlU3RhY2soKS4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRTdGFydEZpcnN0VGFzazoNCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IE1hbnVhbCBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbi4gIFRoaXMgaXMgdGhlIFNXSSBoYW5kZXIuDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KK3ZQb3J0WWllbGRQcm9jZXNzb3I6DQorCUFERAkJTFIsIExSLCAjNAkJCTsgQWRkIDQgdG8gdGhlIExSIHRvIG1ha2UgdGhlIExSIGFwcGVhciBleGFjdGx5DQorCQkJCQkJCQk7IGFzIGlmIHRoZSBjb250ZXh0IHdhcyBzYXZlZCBkdXJpbmcgYW5kIElSUQ0KKwkJCQkJCQkJOyBoYW5kbGVyLg0KKwkJCQkJCQkJDQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4uLg0KKwlMRFIgUjAsID12VGFza1N3aXRjaENvbnRleHQJOyBiZWZvcmUgc2VsZWN0aW5nIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4NCisJbW92ICAgICBsciwgcGMNCisJQlggUjANCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgc2VsZWN0ZWQgdGFzay4NCisNCisNCisNCisJRU5EDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3NXgvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1NUUjc1eC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAzN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI3NXgvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtICggIk5PUCIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fZW5hYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI5MXgvSVNSX1N1cHBvcnQuaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSOTF4L0lTUl9TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmOTZkMgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSOTF4L0lTUl9TdXBwb3J0LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCisNCitwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQorDQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gCQkJCQkNCisJU1RNREIJU1AhLCB7UjB9DQorDQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KKw0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAJCQkJCQkNCisJU1RNREIJUjAhLCB7TFJ9DQorDQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQorDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAJCQkNCisJTERNSUEJU1AhLCB7UjB9DQorDQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAJCQ0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCisNCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nIA0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KKw0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQorDQorCUVORE0NCisNCisNCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gCQkJCQkJCQkJDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQorDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAJDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gCQkJCQkNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAJCQkJCQkJCQkNCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KKw0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suIAkJCQkNCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCisNCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4gCQkJCQkJCQkJDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCisNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCisNCisJRU5ETQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmY2MzEzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydC5jCkBAIC0wLDAgKzEsNDcwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNUIFNUUjkxeCBBUk05DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIjkxeF9saWIuaCINCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGFzc2VydC5oPg0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKyNpZm5kZWYgY29uZmlnVVNFX1dBVENIRE9HX1RJQ0sNCisJI2Vycm9yIGNvbmZpZ1VTRV9XQVRDSERPR19USUNLIG11c3QgYmUgc2V0IHRvIGVpdGhlciAxIG9yIDAgaW4gRnJlZVJUT1NDb25maWcuaCB0byB1c2UgZWl0aGVyIHRoZSBXYXRjaGRvZyBvciB0aW1lciAyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdCByZXNwZWN0aXZlbHkuDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNpZm5kZWYgX1JVTl9UQVNLX0lOX0FSTV9NT0RFXw0KKwkjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDNmICkgLyogU3lzdGVtIG1vZGUsIFRIVU1CIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggcG9ydFNUQUNLX1RZUEUgKSA0ICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgCQkoICggdW5zaWduZWQgbG9uZyApIDAgKQ0KKw0KKyNpZm5kZWYgYWJzDQorCSNkZWZpbmUgYWJzKHgpICgoeCk+MCA/ICh4KSA6IC0oeCkpDQorI2VuZGlmDQorDQorLyoqDQorICogVG9nZ2xlIGEgbGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOg0KKyAqIGlmICggR1BJT19SZWFkQml0KEdQSU85LCBHUElPX1Bpbl8yKSApDQorICogew0KKyAqICAgR1BJT19Xcml0ZUJpdCggR1BJTzksIEdQSU9fUGluXzIsIEJpdF9SRVNFVCApOw0KKyAqIH0NCisgKiBlbHNlDQorICogew0KKyAqICAgR1BJT19Xcml0ZUJpdCggR1BJTzksIEdQSU9fUGluXzIsIEJpdF9SRVNFVCApOw0KKyAqIH0NCisgKg0KKyAqLw0KKyNkZWZpbmUgVE9HR0xFX0xFRChwb3J0LHBpbikgCQkJCQkJCQkJXA0KKwlpZiAoICgoKChwb3J0KS0+RFJbKHBpbik8PDJdKSkgJiAocGluKSkgIT0gQml0X1JFU0VUICkgCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorICAgIAkocG9ydCktPkRSWyhwaW4pIDw8Ml0gPSAweDAwOwkJCQkJCQlcDQorICAJfQkJCQkJCQkJCQkJCQkJCVwNCisgIAllbHNlCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorICAgIAkocG9ydCktPkRSWyhwaW4pIDw8Ml0gPSAocGluKTsJCQkJCQkJXA0KKyAgCX0NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgd2F0Y2hkb2cgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogdWxDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICBJdA0KK2Nhbm5vdCBiZSBpbml0aWFsaXNlZCB0byAwIGFzIHRoaXMgd2lsbCBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQNCitkdXJpbmcgdGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBwcm9jZXNzLiAqLw0KK3Vuc2lnbmVkIGxvbmcgdWxDcml0aWNhbE5lc3RpbmcgPSAoIHVuc2lnbmVkIGxvbmcgKSA5OTk5Ow0KKw0KKy8qIFRpY2sgaW50ZXJydXB0IHJvdXRpbmVzIGZvciBjb29wZXJhdGl2ZSBhbmQgcHJlZW1wdGl2ZSBvcGVyYXRpb24NCityZXNwZWN0aXZlbHkuICBUaGUgcHJlZW1wdGl2ZSB2ZXJzaW9uIGlzIG5vdCBkZWZpbmVkIGFzIF9faXJxIGFzIGl0IGlzIGNhbGxlZA0KK2Zyb20gYW4gYXNtIHdyYXBwZXIgZnVuY3Rpb24uICovDQordm9pZCBXREdfSVJRSGFuZGxlciggdm9pZCApOw0KKw0KKy8qIFZJQyBpbnRlcnJ1cHQgZGVmYXVsdCBoYW5kbGVyLiAqLw0KK3N0YXRpYyB2b2lkIHBydkRlZmF1bHRIYW5kbGVyKCB2b2lkICk7DQorDQorI2lmIGNvbmZpZ1VTRV9XQVRDSERPR19USUNLID09IDANCisJLyogVXNlZCB0byB1cGRhdGUgdGhlIE9DUiB0aW1lciByZWdpc3RlciAqLw0KKwlzdGF0aWMgdTE2IHNfblB1bHNlTGVuZ3RoOw0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJcG9ydFNUQUNLX1RZUEUgKnB4T3JpZ2luYWxUT1M7DQorDQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGFzbSB3cmFwcGVyLCBzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBfX2lycQ0KK2tleXdvcmQuICovDQorI2lmIGNvbmZpZ1VTRV9XQVRDSERPR19USUNLID09IDENCisNCisJc3RhdGljIHZvaWQgcHJ2RmluZEZhY3RvcnModTMyIG4sIHUxNiAqYSwgdTMyICpiKQ0KKwl7DQorCQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIHRoZSBTVCBTVFI3IGxpYnJhcnkgYW5kIGlzDQorCQljb3B5cmlnaHQgU1RNaWNyb2VsZWN0cm9uaWNzLiAgUmVwcm9kdWNlZCB3aXRoIHBlcm1pc3Npb24uICovDQorCQ0KKwkJdTMyIGIwOw0KKwkJdTE2IGEwOw0KKwkJbG9uZyBlcnIsIGVycl9taW49bjsNCisJDQorCQkqYSA9IGEwID0gKChuLTEpLzY1NTM2dWwpICsgMTsNCisJCSpiID0gYjAgPSBuIC8gKmE7DQorCQ0KKwkJZm9yICg7ICphIDw9IDI1NjsgKCphKSsrKQ0KKwkJew0KKwkJCSpiID0gbiAvICphOw0KKwkJCWVyciA9IChsb25nKSphICogKGxvbmcpKmIgLSAobG9uZyluOw0KKwkJCWlmIChhYnMoZXJyKSA+ICgqYSAvIDIpKQ0KKwkJCXsNCisJCQkJKCpiKSsrOw0KKwkJCQllcnIgPSAobG9uZykqYSAqIChsb25nKSpiIC0gKGxvbmcpbjsNCisJCQl9DQorCQkJaWYgKGFicyhlcnIpIDwgYWJzKGVycl9taW4pKQ0KKwkJCXsNCisJCQkJZXJyX21pbiA9IGVycjsNCisJCQkJYTAgPSAqYTsNCisJCQkJYjAgPSAqYjsNCisJCQkJaWYgKGVyciA9PSAwKSBicmVhazsNCisJCQl9DQorCQl9DQorCQ0KKwkJKmEgPSBhMDsNCisJCSpiID0gYjA7DQorCX0NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorCXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KKwl7DQorCVdER19Jbml0VHlwZURlZiB4V2RnOw0KKwl1bnNpZ25lZCBzaG9ydCBhOw0KKwl1bnNpZ25lZCBsb25nIG4gPSBjb25maWdDUFVfUEVSSVBIX0haIC8gY29uZmlnVElDS19SQVRFX0haLCBiOw0KKwkNCisJCS8qIENvbmZpZ3VyZSB0aGUgd2F0Y2hkb2cgYXMgYSBmcmVlIHJ1bm5pbmcgdGltZXIgdGhhdCBnZW5lcmF0ZXMgYQ0KKwkJcGVyaW9kaWMgaW50ZXJydXB0LiAqLw0KKwkNCisJCVNDVV9BUEJQZXJpcGhDbG9ja0NvbmZpZyggX19XREcsIEVOQUJMRSApOw0KKwkJV0RHX0RlSW5pdCgpOw0KKwkJV0RHX1N0cnVjdEluaXQoJnhXZGcpOw0KKwkJcHJ2RmluZEZhY3RvcnMoIG4sICZhLCAmYiApOw0KKwkJeFdkZy5XREdfUHJlc2NhbGVyID0gYSAtIDE7DQorCQl4V2RnLldER19QcmVsb2FkID0gYiAtIDE7DQorCQlXREdfSW5pdCggJnhXZGcgKTsNCisJCVdER19JVENvbmZpZyhFTkFCTEUpOw0KKwkJDQorCQkvKiBDb25maWd1cmUgdGhlIFZJQyBmb3IgdGhlIFdERyBpbnRlcnJ1cHQuICovDQorCQlWSUNfQ29uZmlnKCBXREdfSVRMaW5lLCBWSUNfSVJRLCAxMCApOw0KKwkJVklDX0lUQ21kKCBXREdfSVRMaW5lLCBFTkFCTEUgKTsNCisJCQ0KKwkJLyogSW5zdGFsbCB0aGUgZGVmYXVsdCBoYW5kbGVycyBmb3IgYm90aCBWSUMncy4gKi8NCisJCVZJQzAtPkRWQVIgPSAoIHVuc2lnbmVkIGxvbmcgKSBwcnZEZWZhdWx0SGFuZGxlcjsNCisJCVZJQzEtPkRWQVIgPSAoIHVuc2lnbmVkIGxvbmcgKSBwcnZEZWZhdWx0SGFuZGxlcjsNCisJCQ0KKwkJV0RHX0NtZChFTkFCTEUpOw0KKwl9DQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKwl2b2lkIFdER19JUlFIYW5kbGVyKCB2b2lkICkNCisJew0KKwkJew0KKwkJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudGVyLiAqLw0KKwkJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCQl7DQorCQkJCS8qIFRoZSBuZXcgdGljayB2YWx1ZSBtaWdodCB1bmJsb2NrIGEgdGFzay4gIEVuc3VyZSB0aGUgaGlnaGVzdCB0YXNrIHRoYXQNCisJCQkJaXMgcmVhZHkgdG8gZXhlY3V0ZSBpcyB0aGUgdGFzayB0aGF0IHdpbGwgZXhlY3V0ZSB3aGVuIHRoZSB0aWNrIElTUg0KKwkJCQlleGl0cy4gKi8NCisJCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQkJfQ0KKwkJCSNlbmRpZiAvKiBjb25maWdVU0VfUFJFRU1QVElPTi4gKi8NCisJCQ0KKwkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIHdhdGNoZG9nLiAqLw0KKwkJCVdERy0+U1IgJj0gfjB4MDAwMTsNCisJCX0NCisJfQ0KKw0KKyNlbHNlDQorDQorCXN0YXRpYyB2b2lkIHBydkZpbmRGYWN0b3JzKHUzMiBuLCB1OCAqYSwgdTE2ICpiKQ0KKwl7DQorCQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIHRoZSBTVCBTVFI3IGxpYnJhcnkgYW5kIGlzDQorCQljb3B5cmlnaHQgU1RNaWNyb2VsZWN0cm9uaWNzLiAgUmVwcm9kdWNlZCB3aXRoIHBlcm1pc3Npb24uICovDQorCQ0KKwkJdTE2IGIwOw0KKwkJdTggYTA7DQorCQlsb25nIGVyciwgZXJyX21pbj1uOw0KKwkNCisJDQorCQkqYSA9IGEwID0gKChuLTEpLzI1NikgKyAxOw0KKwkJKmIgPSBiMCA9IG4gLyAqYTsNCisJDQorCQlmb3IgKDsgKmEgPD0gMjU2OyAoKmEpKyspDQorCQl7DQorCQkJKmIgPSBuIC8gKmE7DQorCQkJZXJyID0gKGxvbmcpKmEgKiAobG9uZykqYiAtIChsb25nKW47DQorCQkJaWYgKGFicyhlcnIpID4gKCphIC8gMikpDQorCQkJew0KKwkJCQkoKmIpKys7DQorCQkJCWVyciA9IChsb25nKSphICogKGxvbmcpKmIgLSAobG9uZyluOw0KKwkJCX0NCisJCQlpZiAoYWJzKGVycikgPCBhYnMoZXJyX21pbikpDQorCQkJew0KKwkJCQllcnJfbWluID0gZXJyOw0KKwkJCQlhMCA9ICphOw0KKwkJCQliMCA9ICpiOw0KKwkJCQlpZiAoZXJyID09IDApIGJyZWFrOw0KKwkJCX0NCisJCX0NCisJDQorCQkqYSA9IGEwOw0KKwkJKmIgPSBiMDsNCisJfQ0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisJc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorCXsNCisJCXVuc2lnbmVkIGNoYXIgYTsNCisJCXVuc2lnbmVkIHNob3J0IGI7DQorCQl1bnNpZ25lZCBsb25nIG4gPSBjb25maWdDUFVfUEVSSVBIX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkJDQorCQlUSU1fSW5pdFR5cGVEZWYgdGltZXI7DQorCQkNCisJCVNDVV9BUEJQZXJpcGhDbG9ja0NvbmZpZyggX19USU0yMywgRU5BQkxFICk7DQorCQlUSU1fRGVJbml0KFRJTTIpOw0KKwkJVElNX1N0cnVjdEluaXQoJnRpbWVyKTsNCisJCXBydkZpbmRGYWN0b3JzKCBuLCAmYSwgJmIgKTsNCisJCQ0KKwkJdGltZXIuVElNX01vZGUgICAgICAgICAgID0gVElNX09DTV9DSEFOTkVMXzE7DQorCQl0aW1lci5USU1fT0MxX01vZGVzICAgICAgPSBUSU1fVElNSU5HOw0KKwkJdGltZXIuVElNX0Nsb2NrX1NvdXJjZSAgID0gVElNX0NMS19BUEI7DQorCQl0aW1lci5USU1fQ2xvY2tfRWRnZSAgICAgPSBUSU1fQ0xLX0VER0VfUklTSU5HOw0KKwkJdGltZXIuVElNX1ByZXNjYWxlciAgICAgID0gYS0xOw0KKwkJdGltZXIuVElNX1B1bHNlX0xldmVsXzEgID0gVElNX0hJR0g7DQorCQl0aW1lci5USU1fUHVsc2VfTGVuZ3RoXzEgPSBzX25QdWxzZUxlbmd0aCAgPSBiLTE7DQorCQkNCisJCVRJTV9Jbml0IChUSU0yLCAmdGltZXIpOw0KKwkJVElNX0lUQ29uZmlnKFRJTTIsIFRJTV9JVF9PQzEsIEVOQUJMRSk7DQorCQkvKiBDb25maWd1cmUgdGhlIFZJQyBmb3IgdGhlIFdERyBpbnRlcnJ1cHQuICovDQorCQlWSUNfQ29uZmlnKCBUSU0yX0lUTGluZSwgVklDX0lSUSwgMTAgKTsNCisJCVZJQ19JVENtZCggVElNMl9JVExpbmUsIEVOQUJMRSApOw0KKwkJDQorCQkvKiBJbnN0YWxsIHRoZSBkZWZhdWx0IGhhbmRsZXJzIGZvciBib3RoIFZJQydzLiAqLw0KKwkJVklDMC0+RFZBUiA9ICggdW5zaWduZWQgbG9uZyApIHBydkRlZmF1bHRIYW5kbGVyOw0KKwkJVklDMS0+RFZBUiA9ICggdW5zaWduZWQgbG9uZyApIHBydkRlZmF1bHRIYW5kbGVyOw0KKwkJDQorCQlUSU1fQ291bnRlckNtZChUSU0yLCBUSU1fQ0xFQVIpOw0KKwkJVElNX0NvdW50ZXJDbWQoVElNMiwgVElNX1NUQVJUKTsNCisJfQ0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisJdm9pZCBUSU0yX0lSUUhhbmRsZXIoIHZvaWQgKQ0KKwl7DQorCQkvKiBSZXNldCB0aGUgdGltZXIgY291bnRlciB0byBhdmlvaWQgb3ZlcmZsb3cuICovDQorCQlUSU0yLT5PQzFSICs9IHNfblB1bHNlTGVuZ3RoOw0KKwkJDQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnRlci4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJew0KKwkJCS8qIFRoZSBuZXcgdGljayB2YWx1ZSBtaWdodCB1bmJsb2NrIGEgdGFzay4gIEVuc3VyZSB0aGUgaGlnaGVzdCB0YXNrIHRoYXQNCisJCQlpcyByZWFkeSB0byBleGVjdXRlIGlzIHRoZSB0YXNrIHRoYXQgd2lsbCBleGVjdXRlIHdoZW4gdGhlIHRpY2sgSVNSDQorCQkJZXhpdHMuICovDQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQl9DQorCQkjZW5kaWYNCisJCQ0KKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBpbiB0aGUgd2F0Y2hkb2cuICovDQorCQlUSU0yLT5TUiAmPSB+VElNX0ZMQUdfT0MxOw0KKwl9DQorDQorI2VuZGlmIC8qIFVTRV9XQVRDSERPR19USUNLICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKw0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZEZWZhdWx0SGFuZGxlciggdm9pZCApDQorew0KK30NCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1NUUjkxeC9wb3J0YXNtLnM3OSBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnRhc20uczc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMmNiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1NUUjkxeC9wb3J0YXNtLnM3OQpAQCAtMCwwICsxLDk5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisJCVJTRUcgSUNPREU6Q09ERQ0KKwkJQ09ERTMyDQorDQorCUVYVEVSTiB2VGFza1N3aXRjaENvbnRleHQNCisNCisJUFVCTElDIHZQb3J0WWllbGRQcm9jZXNzb3INCisJUFVCTElDIHZQb3J0U3RhcnRGaXJzdFRhc2sNCisNCisjaW5jbHVkZSAiSVNSX1N1cHBvcnQuaCINCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBTdGFydGluZyB0aGUgZmlyc3QgdGFzayBpcyBqdXN0IGEgbWF0dGVyIG9mIHJlc3RvcmluZyB0aGUgY29udGV4dCB0aGF0DQorOyB3YXMgY3JlYXRlZCBieSBweFBvcnRJbml0aWFsaXNlU3RhY2soKS4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQordlBvcnRTdGFydEZpcnN0VGFzazoNCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IE1hbnVhbCBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbi4gIFRoaXMgaXMgdGhlIFNXSSBoYW5kZXIuDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KK3ZQb3J0WWllbGRQcm9jZXNzb3I6DQorCUFERAkJTFIsIExSLCAjNAkJCTsgQWRkIDQgdG8gdGhlIExSIHRvIG1ha2UgdGhlIExSIGFwcGVhciBleGFjdGx5DQorCQkJCQkJCQk7IGFzIGlmIHRoZSBjb250ZXh0IHdhcyBzYXZlZCBkdXJpbmcgYW5kIElSUQ0KKwkJCQkJCQkJOyBoYW5kbGVyLg0KKwkJCQkJCQkJDQorCXBvcnRTQVZFX0NPTlRFWFQJCQk7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4uLg0KKwlMRFIgUjAsID12VGFza1N3aXRjaENvbnRleHQJOyBiZWZvcmUgc2VsZWN0aW5nIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4NCisJTU9WICAgICBsciwgcGMNCisJQlggUjANCisJcG9ydFJFU1RPUkVfQ09OVEVYVAkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgc2VsZWN0ZWQgdGFzay4NCisNCisJRU5EDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1NUUjkxeC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjkyNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCQlwb3J0TE9ORw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gKCAiTk9QIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaW50ZXJydXB0KCkNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlcDQorewkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7CQkJCVwNCisJCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICkgCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9JU1JfU3VwcG9ydC5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvSVNSX1N1cHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTE4ODEyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvSVNSX1N1cHBvcnQuaApAQCAtMCwwICsxLDE4OCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorCUVYVEVSTiBweEN1cnJlbnRUQ0INCisJRVhURVJOIHVzQ3JpdGljYWxOZXN0aW5nDQorDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKw0KK3BvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCisNCisgICAgYWRkICAgICAtMHgwQyxzcAkJCTsgcHJlcGFyZSBzdGFjayB0byBzYXZlIG5lY2Vzc2FyeSB2YWx1ZXMNCisgICAgc3QudyAgICBscCw4W3NwXQkJCTsgc3RvcmUgTFAgdG8gc3RhY2sNCisgICAgc3RzciAgICAwLHIzMQ0KKyAgICBzdC53ICAgIGxwLDRbc3BdCQkJOyBzdG9yZSBFSVBDIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMSxscA0KKyAgICBzdC53ICAgIGxwLDBbc3BdCQkJOyBzdG9yZSBFSVBTVyB0byBzdGFjaw0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIHRoZSBUaW55IGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjUscjI2LHIyNyxyMjgscjI5LHIzMH0sNzYsc3AgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNzJbZXBdDQorICAgIHNzdC53ICAgcjE4LDY4W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2NFtlcF0NCisgICAgc3N0LncgICByMTYsNjBbZXBdDQorICAgIHNzdC53ICAgcjE1LDU2W2VwXQ0KKyAgICBzc3QudyAgIHIxNCw1MltlcF0NCisgICAgc3N0LncgICByMTMsNDhbZXBdDQorICAgIHNzdC53ICAgcjEyLDQ0W2VwXQ0KKyAgICBzc3QudyAgIHIxMSw0MFtlcF0NCisgICAgc3N0LncgICByMTAsMzZbZXBdDQorICAgIHNzdC53ICAgcjksMzJbZXBdDQorICAgIHNzdC53ICAgcjgsMjhbZXBdDQorICAgIHNzdC53ICAgcjcsMjRbZXBdDQorICAgIHNzdC53ICAgcjYsMjBbZXBdDQorICAgIHNzdC53ICAgcjUsMTZbZXBdDQorICAgIHNzdC53ICAgcjQsMTJbZXBdDQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVXNpbmcgdGhlIFNtYWxsL0xhcmdlIGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjYscjI3LHIyOCxyMjkscjMwfSw3MixzcCAgICAgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNjhbZXBdDQorICAgIHNzdC53ICAgcjE4LDY0W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2MFtlcF0NCisgICAgc3N0LncgICByMTYsNTZbZXBdDQorICAgIHNzdC53ICAgcjE1LDUyW2VwXQ0KKyAgICBzc3QudyAgIHIxNCw0OFtlcF0NCisgICAgc3N0LncgICByMTMsNDRbZXBdDQorICAgIHNzdC53ICAgcjEyLDQwW2VwXQ0KKyAgICBzc3QudyAgIHIxMSwzNltlcF0NCisgICAgc3N0LncgICByMTAsMzJbZXBdDQorICAgIHNzdC53ICAgcjksMjhbZXBdDQorICAgIHNzdC53ICAgcjgsMjRbZXBdDQorICAgIHNzdC53ICAgcjcsMjBbZXBdDQorICAgIHNzdC53ICAgcjYsMTZbZXBdDQorICAgIHNzdC53ICAgcjUsMTJbZXBdDQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKyAgICBzc3QudyAgIHIyLDhbZXBdDQorICAgIHNzdC53ICAgcjEsNFtlcF0NCisgICAgTU9WSEkgICBoaTEodXNDcml0aWNhbE5lc3RpbmcpLHIwLHIxCTsgc2F2ZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSB0byBzdGFjaw0KKyAgICBsZC53ICAgIGx3MSh1c0NyaXRpY2FsTmVzdGluZylbcjFdLHIyDQorICAgIHNzdC53ICAgcjIsMFtlcF0NCisgICAgTU9WSEkgICBoaTEocHhDdXJyZW50VENCKSxyMCxyMQkJCTsgc2F2ZSBTUCB0byB0b3Agb2YgY3VycmVudCBUQ0INCisgICAgbGQudyAgICBsdzEocHhDdXJyZW50VENCKVtyMV0scjINCisgICAgc3QudyAgICBzcCwwW3IyXQ0KKyAgICBFTkRNDQorDQorDQorcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KKw0KKyAgICBNT1ZISSAgIGhpMShweEN1cnJlbnRUQ0IpLHIwLHIxCQkJOyBnZXQgU3RhY2twb2ludGVyIGFkZHJlc3MNCisgICAgbGQudyAgICBsdzEocHhDdXJyZW50VENCKVtyMV0sc3ANCisgICAgTU9WICAgICBzcCxyMQ0KKyAgICBsZC53ICAgIDBbcjFdLHNwCQkJCQkJOyBsb2FkIHN0YWNrcG9pbnRlcg0KKyAgICBNT1YgICAgIHNwLGVwCQkJCQkJCTsgc2V0IHN0YWNrIHBvaW50ZXIgdG8gZWxlbWVudCBwb2ludGVyDQorICAgIHNsZC53ICAgMFtlcF0scjEJCQkJCQk7IGxvYWQgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgZnJvbSBzdGFjaw0KKyAgICBNT1ZISSAgIGhpMSh1c0NyaXRpY2FsTmVzdGluZykscjAscjINCisgICAgc3QudyAgICByMSxsdzEodXNDcml0aWNhbE5lc3RpbmcpW3IyXQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxCQkJCQkJOyByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc2xkLncgICA4W2VwXSxyMg0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMQkJCQkJOyBVc2luZyBUaW55IGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjQNCisgICAgc2xkLncgICAxNltlcF0scjUNCisgICAgc2xkLncgICAyMFtlcF0scjYNCisgICAgc2xkLncgICAyNFtlcF0scjcNCisgICAgc2xkLncgICAyOFtlcF0scjgNCisgICAgc2xkLncgICAzMltlcF0scjkNCisgICAgc2xkLncgICAzNltlcF0scjEwDQorICAgIHNsZC53ICAgNDBbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQ0W2VwXSxyMTINCisgICAgc2xkLncgICA0OFtlcF0scjEzDQorICAgIHNsZC53ICAgNTJbZXBdLHIxNA0KKyAgICBzbGQudyAgIDU2W2VwXSxyMTUNCisgICAgc2xkLncgICA2MFtlcF0scjE2DQorICAgIHNsZC53ICAgNjRbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY4W2VwXSxyMTgNCisgICAgc2xkLncgICA3MltlcF0scjE5DQorICAgIGRpc3Bvc2UgNzYse3IyMCxyMjEscjIyLHIyMyxyMjQscjI1LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2Vsc2UJCQkJCQkJCQkJOyBVc2luZyBTbWFsbC9MYXJnZSBkYXRhIG1vZGVsDQorICAgIHNsZC53ICAgMTJbZXBdLHI1DQorICAgIHNsZC53ICAgMTZbZXBdLHI2DQorICAgIHNsZC53ICAgMjBbZXBdLHI3DQorICAgIHNsZC53ICAgMjRbZXBdLHI4DQorICAgIHNsZC53ICAgMjhbZXBdLHI5DQorICAgIHNsZC53ICAgMzJbZXBdLHIxMA0KKyAgICBzbGQudyAgIDM2W2VwXSxyMTENCisgICAgc2xkLncgICA0MFtlcF0scjEyDQorICAgIHNsZC53ICAgNDRbZXBdLHIxMw0KKyAgICBzbGQudyAgIDQ4W2VwXSxyMTQNCisgICAgc2xkLncgICA1MltlcF0scjE1DQorICAgIHNsZC53ICAgNTZbZXBdLHIxNg0KKyAgICBzbGQudyAgIDYwW2VwXSxyMTcNCisgICAgc2xkLncgICA2NFtlcF0scjE4DQorICAgIHNsZC53ICAgNjhbZXBdLHIxOQ0KKyAgICBkaXNwb3NlIDcyLHtyMjAscjIxLHIyMixyMjMscjI0LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKyAgICBsZC53ICAgIDBbc3BdLGxwCQkJCQkJOyByZXN0b3JlIEVJUFNXIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwxDQorICAgIGxkLncgICAgNFtzcF0sbHAJCQkJCQk7IHJlc3RvcmUgRUlQQyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMA0KKyAgICBsZC53ICAgIDhbc3BdLGxwCQkJCQkJOyByZXN0b3JlIExQIGZyb20gc3RhY2sNCisgICAgYWRkICAgICAweDBDLHNwCQkJCQkJCTsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorDQorICAgIFJFVEkNCisNCisgICAgRU5ETQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNiZmJiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydC5jCkBAIC0wLDAgKzEsMjIyIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQ3JpdGljYWwgbmVzdGluZyBzaG91bGQgYmUgaW5pdGlhbGlzZWQgdG8gYSBub24gemVybyB2YWx1ZSBzbyBpbnRlcnJ1cHRzIGRvbid0DQorYWNjaWRlbnRhbGx5IGdldCBlbmFibGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HICAoKCBwb3J0U1RBQ0tfVFlQRSApIDEwKQ0KKw0KKy8qIFRoZSBQU1cgdmFsdWUgYXNzaWduZWQgdG8gdGFza3Mgd2hlbiB0aGV5IHN0YXJ0IHRvIHJ1biBmb3IgdGhlIGZpcnN0IHRpbWUuICovDQorI2RlZmluZSBwb3J0UFNXCQkgICgoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMCkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogS2VlcHMgdHJhY2sgb2YgdGhlIG5lc3RpbmcgbGV2ZWwgb2YgY3JpdGljYWwgc2VjdGlvbnMuICovDQordm9sYXRpbGUgcG9ydFNUQUNLX1RZUEUgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNldHMgdXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7ICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7ICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRQU1c7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgUFNXIHZhbHVlICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjAyMDIwMjA7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMTIxMjEyMTsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIyMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjIyMjIyOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjMyMzIzMjM7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyNDI0MjQyNDsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIyNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisjaWYgKF9fREFUQV9NT0RFTF9fID09IDApIHx8IChfX0RBVEFfTU9ERUxfXyA9PSAxKQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjUyNTI1MjU7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjYyNjI2MjY7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyNzI3MjcyNzsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIyNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDI4MjgyODI4OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjI4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MjkyOTI5Mjk7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgzMDMwMzAzMDsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIzMCAqLw0KKwlweFRvcE9mU3RhY2stLTsgCQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTkxOTE5MTk7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxODE4MTgxODsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE3MTcxNzE3OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjE3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTYxNjE2MTY7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxNTE1MTUxNTsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDE0MTQxNDE0OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTMxMzEzMTM7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMjEyMTIxMjsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTExMTExOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjExICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTAxMDEwMTA7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg5OTk5OTk5OTsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwOSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDg4ODg4ODg4OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjA4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Nzc3Nzc3Nzc7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg2NjY2NjY2NjsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDU1NTU1NTU1OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjA1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKyNpZiBfX0RBVEFfTU9ERUxfXyA9PSAwIHx8IF9fREFUQV9NT0RFTF9fID09IDENCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0NDQ0NDQ0OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjA0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKyNlbmRpZiAvKiBjb25maWdEQVRBX01PREUgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjIyMjIyOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjAyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsgICAgLyogUjEgaXMgZXhwZWN0ZWQgdG8gaG9sZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCS8qDQorCSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLg0KKwkgKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJdlBvcnRTdGFydCgpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZFRSVUU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgVjg1MEVTL0Z4MyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KKwlUTTBDRSAgICAgPSAwOwkvKiBUTU0wIG9wZXJhdGlvbiBkaXNhYmxlICovDQorCVRNMEVRTUswICA9IDE7CS8qIElOVFRNMEVRMCBpbnRlcnJ1cHQgZGlzYWJsZSAqLw0KKwlUTTBFUUlGMCAgPSAwOwkvKiBjbGVhciBJTlRUTTBFUTAgaW50ZXJydXB0IGZsYWcgKi8NCisNCisJI2lmZGVmIF9fSUFSX1Y4NTBFU19GeDNfXw0KKwl7DQorCQlUTTBDTVAwICAgPSAoKChjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFopIC8gMiktMSk7ICAgIC8qIGRpdmlkZWQgYnkgMiBiZWNhdXNlIHBlcmlwaGVyYWxzIG9ubHkgcnVuIGF0IENQVV9DTE9DSy8yICovDQorCX0NCisJI2Vsc2UNCisJew0KKwkJVE0wQ01QMCAgID0gKGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWik7CQ0KKwl9DQorCSNlbmRpZg0KKw0KKwlUTTBFUUlDMCAmPSAweEY4Ow0KKwlUTTBDVEwwICAgPSAweDAwOw0KKwlUTTBFUUlGMCA9ICAwOwkvKiBjbGVhciBJTlRUTTBFUTAgaW50ZXJydXB0IGZsYWcgKi8NCisJVE0wRVFNSzAgPSAgMDsJLyogSU5UVE0wRVEwIGludGVycnVwdCBlbmFibGUgKi8NCisJVE0wQ0UgPSAgICAgMTsJLyogVE1NMCBvcGVyYXRpb24gZW5hYmxlICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnRhc20uczg1IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydGFzbS5zODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkMmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnRhc20uczg1CkBAIC0wLDAgKzEsMzQxIEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCis7IE5vdGU6IFNlbGVjdCB0aGUgY29ycmVjdCBpbmNsdWRlIGZpbGVzIGZvciB0aGUgZGV2aWNlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCis7IEZ1bmN0aW9ucyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgRVhURVJOICAgIHZUYXNrU3dpdGNoQ29udGV4dA0KKyAgICBFWFRFUk4gICAgdlRhc2tJbmNyZW1lbnRUaWNrDQorDQorOyBWYXJpYWJsZXMgdXNlZCBieSBzY2hlZHVsZXINCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgIEVYVEVSTiAgICBweEN1cnJlbnRUQ0INCisgICAgRVhURVJOICAgIHVzQ3JpdGljYWxOZXN0aW5nDQorDQorOyBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmaWxlDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICBQVUJMSUMgICAgdlBvcnRZaWVsZA0KKyAgICBQVUJMSUMgICAgdlBvcnRTdGFydA0KKw0KKzsgU2VjdXJpdHkgSUQgZGVmaW5pdGlvbg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjZGVmaW5lCUNHX1NFQ1VSSVRZMAkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTEJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFkyCTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZMwkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTQJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk1CTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZNgkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTcJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk4CTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZOQkwRkZIDQorDQorOyBUaWNrIElTUiBQcm90b3R5cGUNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICBQVUJXRUFLIGA/P01EX0lOVFRNMEVRMD8/SU5UVkVDIDY0MGANCisgICAgICAgIFBVQkxJQyBNRF9JTlRUTTBFUTANCisNCitNRF9JTlRUTTBFUTAgICAgICAgIFNZTUJPTCAiTURfSU5UVE0wRVEwIg0KK2A/P01EX0lOVFRNMEVRMD8/SU5UVkVDIDY0MGAgU1lNQk9MICI/P0lOVFZFQyA2NDAiLCBNRF9JTlRUTTBFUTANCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCis7ICAgU2F2ZXMgdGhlIGNvbnRleHQgb2YgdGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQorOyAgIGFuZCB0aGUgdXNDcml0aWNhbE5lc3RpbmcgVmFsdWUgb2YgdGhlIGFjdGl2ZSBUYXNrIG9udG8gdGhlIHRhc2sgc3RhY2sNCis7ICAgc2F2ZXMgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3BvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCisjaWYgY29uZmlnREFUQV9NT0RFID09IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBVc2luZyB0aGUgVGlueSBkYXRhIG1vZGVsDQorICAgIHByZXBhcmUge3IyMCxyMjEscjIyLHIyMyxyMjQscjI1LHIyNixyMjcscjI4LHIyOSxyMzB9LDc2LHNwIDsgc2F2ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQorICAgIHNzdC53ICAgcjE5LDcyW2VwXQ0KKyAgICBzc3QudyAgIHIxOCw2OFtlcF0NCisgICAgc3N0LncgICByMTcsNjRbZXBdDQorICAgIHNzdC53ICAgcjE2LDYwW2VwXQ0KKyAgICBzc3QudyAgIHIxNSw1NltlcF0NCisgICAgc3N0LncgICByMTQsNTJbZXBdDQorICAgIHNzdC53ICAgcjEzLDQ4W2VwXQ0KKyAgICBzc3QudyAgIHIxMiw0NFtlcF0NCisgICAgc3N0LncgICByMTEsNDBbZXBdDQorICAgIHNzdC53ICAgcjEwLDM2W2VwXQ0KKyAgICBzc3QudyAgIHI5LDMyW2VwXQ0KKyAgICBzc3QudyAgIHI4LDI4W2VwXQ0KKyAgICBzc3QudyAgIHI3LDI0W2VwXQ0KKyAgICBzc3QudyAgIHI2LDIwW2VwXQ0KKyAgICBzc3QudyAgIHI1LDE2W2VwXQ0KKyAgICBzc3QudyAgIHI0LDEyW2VwXQ0KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIHRoZSBTbWFsbC9MYXJnZSBkYXRhIG1vZGVsDQorICAgIHByZXBhcmUge3IyMCxyMjEscjIyLHIyMyxyMjQscjI2LHIyNyxyMjgscjI5LHIzMH0sNzIsc3AgICAgIDsgc2F2ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQorICAgIHNzdC53ICAgcjE5LDY4W2VwXQ0KKyAgICBzc3QudyAgIHIxOCw2NFtlcF0NCisgICAgc3N0LncgICByMTcsNjBbZXBdDQorICAgIHNzdC53ICAgcjE2LDU2W2VwXQ0KKyAgICBzc3QudyAgIHIxNSw1MltlcF0NCisgICAgc3N0LncgICByMTQsNDhbZXBdDQorICAgIHNzdC53ICAgcjEzLDQ0W2VwXQ0KKyAgICBzc3QudyAgIHIxMiw0MFtlcF0NCisgICAgc3N0LncgICByMTEsMzZbZXBdDQorICAgIHNzdC53ICAgcjEwLDMyW2VwXQ0KKyAgICBzc3QudyAgIHI5LDI4W2VwXQ0KKyAgICBzc3QudyAgIHI4LDI0W2VwXQ0KKyAgICBzc3QudyAgIHI3LDIwW2VwXQ0KKyAgICBzc3QudyAgIHI2LDE2W2VwXQ0KKyAgICBzc3QudyAgIHI1LDEyW2VwXQ0KKyNlbmRpZiAvKiBjb25maWdEQVRBX01PREUgKi8NCisgICAgc3N0LncgICByMiw4W2VwXQ0KKyAgICBzc3QudyAgIHIxLDRbZXBdDQorICAgIE1PVkhJICAgaGkxKHVzQ3JpdGljYWxOZXN0aW5nKSxyMCxyMSAgICAgICAgICAgICAgICAgICAgICAgIDsgc2F2ZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSB0byBzdGFjaw0KKyAgICBsZC53ICAgIGx3MSh1c0NyaXRpY2FsTmVzdGluZylbcjFdLHIyDQorICAgIHNzdC53ICAgcjIsMFtlcF0NCisgICAgTU9WSEkgICBoaTEocHhDdXJyZW50VENCKSxyMCxyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIFNQIHRvIHRvcCBvZiBjdXJyZW50IFRDQg0KKyAgICBsZC53ICAgIGx3MShweEN1cnJlbnRUQ0IpW3IxXSxyMg0KKyAgICBzdC53ICAgIHNwLDBbcjJdDQorICAgIEVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorOyAgIEdldHMgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBjdXJyZW50IFRDQg0KKzsgICBSZXN0b3JlcyB0aGUgY29udGV4dCBvZiB0aGUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgYW5kIGdlbmVyYWwgcHVycG9zZQ0KKzsgICByZWdpc3RlcnMgb2YgdGhlIHNlbGVjdGVkIHRhc2sgZnJvbSB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorICAgIE1PVkhJICAgaGkxKHB4Q3VycmVudFRDQikscjAscjEgICAgICAgICA7IGdldCBTdGFja3BvaW50ZXIgYWRkcmVzcw0KKyAgICBsZC53ICAgIGx3MShweEN1cnJlbnRUQ0IpW3IxXSxzcA0KKyAgICBNT1YgICAgIHNwLHIxDQorICAgIGxkLncgICAgMFtyMV0sc3AgICAgICAgICAgICAgICAgICAgICAgICA7IGxvYWQgc3RhY2twb2ludGVyDQorICAgIE1PViAgICAgc3AsZXAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHNldCBzdGFjayBwb2ludGVyIHRvIGVsZW1lbnQgcG9pbnRlcg0KKyAgICBzbGQudyAgIDBbZXBdLHIxICAgICAgICAgICAgICAgICAgICAgICAgOyBsb2FkIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlIGZyb20gc3RhY2sNCisgICAgTU9WSEkgICBoaTEodXNDcml0aWNhbE5lc3RpbmcpLHIwLHIyDQorICAgIHN0LncgICAgcjEsbHcxKHVzQ3JpdGljYWxOZXN0aW5nKVtyMl0NCisgICAgc2xkLncgICA0W2VwXSxyMSAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQorICAgIHNsZC53ICAgOFtlcF0scjINCisjaWYgY29uZmlnREFUQV9NT0RFID09IDEgICAgICAgICAgICAgICAgICAgIDsgVXNpbmcgVGlueSBkYXRhIG1vZGVsDQorICAgIHNsZC53ICAgMTJbZXBdLHI0DQorICAgIHNsZC53ICAgMTZbZXBdLHI1DQorICAgIHNsZC53ICAgMjBbZXBdLHI2DQorICAgIHNsZC53ICAgMjRbZXBdLHI3DQorICAgIHNsZC53ICAgMjhbZXBdLHI4DQorICAgIHNsZC53ICAgMzJbZXBdLHI5DQorICAgIHNsZC53ICAgMzZbZXBdLHIxMA0KKyAgICBzbGQudyAgIDQwW2VwXSxyMTENCisgICAgc2xkLncgICA0NFtlcF0scjEyDQorICAgIHNsZC53ICAgNDhbZXBdLHIxMw0KKyAgICBzbGQudyAgIDUyW2VwXSxyMTQNCisgICAgc2xkLncgICA1NltlcF0scjE1DQorICAgIHNsZC53ICAgNjBbZXBdLHIxNg0KKyAgICBzbGQudyAgIDY0W2VwXSxyMTcNCisgICAgc2xkLncgICA2OFtlcF0scjE4DQorICAgIHNsZC53ICAgNzJbZXBdLHIxOQ0KKyAgICBkaXNwb3NlIDc2LHtyMjAscjIxLHIyMixyMjMscjI0LHIyNSxyMjYscjI3LHIyOCxyMjkscjMwfQ0KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBVc2luZyBTbWFsbC9MYXJnZSBkYXRhIG1vZGVsDQorICAgIHNsZC53ICAgMTJbZXBdLHI1DQorICAgIHNsZC53ICAgMTZbZXBdLHI2DQorICAgIHNsZC53ICAgMjBbZXBdLHI3DQorICAgIHNsZC53ICAgMjRbZXBdLHI4DQorICAgIHNsZC53ICAgMjhbZXBdLHI5DQorICAgIHNsZC53ICAgMzJbZXBdLHIxMA0KKyAgICBzbGQudyAgIDM2W2VwXSxyMTENCisgICAgc2xkLncgICA0MFtlcF0scjEyDQorICAgIHNsZC53ICAgNDRbZXBdLHIxMw0KKyAgICBzbGQudyAgIDQ4W2VwXSxyMTQNCisgICAgc2xkLncgICA1MltlcF0scjE1DQorICAgIHNsZC53ICAgNTZbZXBdLHIxNg0KKyAgICBzbGQudyAgIDYwW2VwXSxyMTcNCisgICAgc2xkLncgICA2NFtlcF0scjE4DQorICAgIHNsZC53ICAgNjhbZXBdLHIxOQ0KKyAgICBkaXNwb3NlIDcyLHtyMjAscjIxLHIyMixyMjMscjI0LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKyAgICBFTkRNDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4NCis7DQorOyAgIElucHV0OiAgTk9ORQ0KKzsNCis7ICAgQ2FsbDogICBDQUxMICAgIHZQb3J0U3RhcnQNCis7DQorOyAgIE91dHB1dDogTk9ORQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JDQorICAgIFJTRUcgQ09ERTpDT0RFDQordlBvcnRTdGFydDoNCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVAkgICAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB3aGljaGV2ZXIgdGFzayB0aGUgLi4uDQorICAgIGxkLncgICAgMFtzcF0sbHANCisgICAgbGRzciAgICBscCw1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBQU1cNCisgICAgREkNCisgICAgbGQudyAgICA0W3NwXSxscCAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBMUA0KKyAgICBsZC53ICAgIDhbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQDQorICAgIEFERCAgICAgMHgwQyxzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHNldCBTUCB0byByaWdodCBwb3NpdGlvbg0KKyAgICBFSQ0KKyAgICBqbXAgICAgIFtscF0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBQb3J0IFlpZWxkIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBhIFRhc2sgc3dpdGNoIGluIHRoZSBjb29wZXJhdGl2ZSBhbmQNCis7ICAgcHJlZW1wdGl2ZSBtb2RlDQorOw0KKzsgICBJbnB1dDogIE5PTkUNCis7DQorOyAgIENhbGw6ICAgQ0FMTCAgICB2UG9ydFlpZWxkDQorOw0KKzsgICBPdXRwdXQ6IE5PTkUNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorCVJTRUcgQ09ERTpDT0RFDQordlBvcnRZaWVsZDoNCisNCisgICAgYWRkICAgICAtMHgwQyxzcCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBwcmVwYXJlIHN0YWNrIHRvIHNhdmUgbmVjZXNzYXJ5IHZhbHVlcw0KKyAgICBzdC53ICAgIGxwLDhbc3BdICAgICAgICAgICAgICAgICAgICAgICAgOyBzdG9yZSBMUCB0byBzdGFjaw0KKyAgICBzdHNyICAgIDAscjMxDQorICAgIHN0LncgICAgbHAsNFtzcF0gICAgICAgICAgICAgICAgICAgICAgICA7IHN0b3JlIEVJUEMgdG8gc3RhY2sNCisgICAgc3RzciAgICAxLGxwDQorICAgIHN0LncgICAgbHAsMFtzcF0gICAgICAgICAgICAgICAgICAgICAgICA7IHN0b3JlIEVJUFNXIHRvIHN0YWNrDQorICAgIHBvcnRTQVZFX0NPTlRFWFQJCSAgICAgICAgICAgIDsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KKyAgICBqYXJsICAgIHZUYXNrU3dpdGNoQ29udGV4dCxscCAgICAgICAgICAgOyBDYWxsIHRoZSBzY2hlZHVsZXIuDQorICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQJCSAgICAgICAgICAgIDsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB3aGljaGV2ZXIgdGFzayB0aGUgLi4uDQorICAgICAgICAgICAgICAgIAkJICAgICAgICAgICAgOyAuLi4gc2NoZWR1bGVyIGRlY2lkZWQgc2hvdWxkIHJ1bi4NCisJbGQudyAgICAwW3NwXSxscCAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBFSVBTVyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMQ0KKyAgICBsZC53ICAgIDRbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEVJUEMgZnJvbSBzdGFjaw0KKyAgICBsZHNyICAgIGxwLDANCisgICAgbGQudyAgICA4W3NwXSxscCAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBMUCBmcm9tIHN0YWNrDQorICAgIGFkZCAgICAgMHgwQyxzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHNldCBTUCB0byByaWdodCBwb3NpdGlvbg0KKw0KKyAgICBSRVRJDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgUGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHN0ZXBzIG9mIHRoZSBUaWNrIENvdW50IEluY3JlbWVudCBhbmQgVGFzayBTd2l0Y2gNCis7ICAgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4ga2VybmVsIGNvbmZpZ3VyYXRpb24NCis7DQorOyAgIElucHV0OiAgTk9ORQ0KKzsNCis7ICAgQ2FsbDogICBJU1INCis7DQorOyAgIE91dHB1dDogTk9ORQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgICAgICAgICAgICAgICA7IHVzZSBwcmVlbXB0aXZlIGtlcm5lbCBtb2RlDQorDQorTURfSU5UVE0wRVEwOg0KKw0KKyAgICBhZGQgICAgIC0weDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgICA7IHByZXBhcmUgc3RhY2sgdG8gc2F2ZSBuZWNlc3NhcnkgdmFsdWVzDQorICAgIHN0LncgICAgbHAsOFtzcF0gICAgICAgICAgICAgICAgICAgICAgICA7IHN0b3JlIExQIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMCxyMzENCisgICAgc3QudyAgICBscCw0W3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQQyB0byBzdGFjaw0KKyAgICBzdHNyICAgIDEsbHANCisgICAgc3QudyAgICBscCwwW3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQU1cgdG8gc3RhY2sNCisgICAgcG9ydFNBVkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorICAgIGphcmwgICAgdlRhc2tJbmNyZW1lbnRUaWNrLGxwICAgICAgICAgICA7IENhbGwgdGhlIHRpbWVyIHRpY2sgZnVuY3Rpb24uDQorICAgIGphcmwgICAgdlRhc2tTd2l0Y2hDb250ZXh0LGxwICAgICAgICAgICA7IENhbGwgdGhlIHNjaGVkdWxlci4NCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisgICAgICAgICAgICAgICAgCQkgICAgICAgICAgICA7IC4uLiBzY2hlZHVsZXIgZGVjaWRlZCBzaG91bGQgcnVuLg0KKyAgICBsZC53ICAgIDBbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEVJUFNXIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwxDQorICAgIGxkLncgICAgNFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgRUlQQyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMA0KKyAgICBsZC53ICAgIDhbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQIGZyb20gc3RhY2sNCisgICAgYWRkICAgICAweDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorDQorICAgIFJFVEkNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHVzZSBjb29wZXJhdGl2ZSBrZXJuZWwgbW9kZQ0KKw0KK01EX0lOVFRNMEVRMDoNCisgICAgcHJlcGFyZSB7bHAsZXB9LDgsc3ANCisgICAgc3N0LncgICByMSw0W2VwXQ0KKyAgICBzc3QudyAgIHI1LDBbZXBdDQorICAgIGphcmwgICAgdlRhc2tJbmNyZW1lbnRUaWNrLGxwICAgICAgICAgICA7IENhbGwgdGhlIHRpbWVyIHRpY2sgZnVuY3Rpb24uDQorICAgIHNsZC53ICAgMFtlcF0scjUNCisgICAgc2xkLncgICA0W2VwXSxyMQ0KKyAgICBkaXNwb3NlIDgse2xwLGVwfQ0KKyAgICBSRVRJDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9QUkVFTVBUSU9OICovDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMikNCisgICAgICAgIE9SRyA2NDANCitgPz9NRF9JTlRUTTBFUTA/P0lOVFZFQyA2NDBgOg0KKyAgICAgICAgSlIgTURfSU5UVE0wRVEwDQorDQorICAgICAgICBSU0VHIE5FQVJfSUQ6Q09OU1Q6U09SVDpOT1JPT1QoMikNCitgPzxJbml0aWFsaXplciBmb3IgdXNDcml0aWNhbE5lc3Rpbmc+YDoNCisgICAgICAgIERXIDEwDQorDQorICAgICAgQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMikNCisgICAgICBPUkcgNDBIDQorYD8/dlBvcnRZaWVsZD8/SU5UVkVDIDQwYDoNCisgICAgICAgIEpSIHZQb3J0WWllbGQNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyBzZXQgbWljcm9jb250cm9sbGVyIHNlY3VyaXR5IElEDQorDQorICAgICAgQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMikNCisgICAgICBPUkcgNzBIDQorYFNFQ1VJRGA6DQorICAgICAgREIgQ0dfU0VDVVJJVFkwDQorICAgICAgREIgQ0dfU0VDVVJJVFkxDQorICAgICAgREIgQ0dfU0VDVVJJVFkyDQorICAgICAgREIgQ0dfU0VDVVJJVFkzDQorICAgICAgREIgQ0dfU0VDVVJJVFk0DQorICAgICAgREIgQ0dfU0VDVVJJVFk1DQorICAgICAgREIgQ0dfU0VDVVJJVFk2DQorICAgICAgREIgQ0dfU0VDVVJJVFk3DQorICAgICAgREIgQ0dfU0VDVVJJVFk4DQorICAgICAgREIgQ0dfU0VDVVJJVFk5DQorDQorDQorICAgICAgRU5EDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydGFzbV9GeDMuczg1IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydGFzbV9GeDMuczg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTM0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0YXNtX0Z4My5zODUKQEAgLTAsMCArMSwzNjEgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsJDQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKzsgTm90ZTogU2VsZWN0IHRoZSBjb3JyZWN0IGluY2x1ZGUgZmlsZXMgZm9yIHRoZSBkZXZpY2UgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzsgRnVuY3Rpb25zIHVzZWQgYnkgc2NoZWR1bGVyDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICBFWFRFUk4gICAgdlRhc2tTd2l0Y2hDb250ZXh0DQorICAgIEVYVEVSTiAgICB2VGFza0luY3JlbWVudFRpY2sNCisNCis7IFZhcmlhYmxlcyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgRVhURVJOICAgIHB4Q3VycmVudFRDQg0KKyAgICBFWFRFUk4gICAgdXNDcml0aWNhbE5lc3RpbmcNCisNCis7IEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiB0aGlzIGZpbGUNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgIFBVQkxJQyAgICB2UG9ydFlpZWxkDQorICAgIFBVQkxJQyAgICB2UG9ydFN0YXJ0DQorDQorOyBTZWN1cml0eSBJRCBkZWZpbml0aW9uDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyNkZWZpbmUJQ0dfU0VDVVJJVFkwCTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZMQkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTIJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFkzCTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZNAkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTUJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk2CTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZNwkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTgJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk5CTBGRkgNCisNCis7IE9wdGlvbiBCeXRlIGRlZmluaXRpb25zDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyNkZWZpbmUJQ0dfT1BUSU9ON0EJMHgwMA0KKyNkZWZpbmUJQ0dfT1BUSU9ON0IJMHgwNA0KKyNkZWZpbmUJT1BUN0MJCTB4MDANCisjZGVmaW5lCU9QVDdECQkweDAwDQorI2RlZmluZQlPUFQ3RQkJMHgwMA0KKyNkZWZpbmUJT1BUN0YJCTB4MDANCisNCis7IFRpY2sgSVNSIFByb3RvdHlwZQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgIFBVQldFQUsgYD8/TURfSU5UVE0wRVEwPz9JTlRWRUMgNjA4YA0KKyAgICAgICAgUFVCTElDIE1EX0lOVFRNMEVRMA0KKw0KK01EX0lOVFRNMEVRMCAgICAgICAgU1lNQk9MICJNRF9JTlRUTTBFUTAiDQorYD8/TURfSU5UVE0wRVEwPz9JTlRWRUMgNjA4YCBTWU1CT0wgIj8/SU5UVkVDIDYwOCIsIE1EX0lOVFRNMEVRMA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKzsgICBTYXZlcyB0aGUgY29udGV4dCBvZiB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCis7ICAgYW5kIHRoZSB1c0NyaXRpY2FsTmVzdGluZyBWYWx1ZSBvZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KKzsgICBzYXZlcyBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0INCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIHRoZSBUaW55IGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjUscjI2LHIyNyxyMjgscjI5LHIzMH0sNzYsc3AgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNzJbZXBdDQorICAgIHNzdC53ICAgcjE4LDY4W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2NFtlcF0NCisgICAgc3N0LncgICByMTYsNjBbZXBdDQorICAgIHNzdC53ICAgcjE1LDU2W2VwXQ0KKyAgICBzc3QudyAgIHIxNCw1MltlcF0NCisgICAgc3N0LncgICByMTMsNDhbZXBdDQorICAgIHNzdC53ICAgcjEyLDQ0W2VwXQ0KKyAgICBzc3QudyAgIHIxMSw0MFtlcF0NCisgICAgc3N0LncgICByMTAsMzZbZXBdDQorICAgIHNzdC53ICAgcjksMzJbZXBdDQorICAgIHNzdC53ICAgcjgsMjhbZXBdDQorICAgIHNzdC53ICAgcjcsMjRbZXBdDQorICAgIHNzdC53ICAgcjYsMjBbZXBdDQorICAgIHNzdC53ICAgcjUsMTZbZXBdDQorICAgIHNzdC53ICAgcjQsMTJbZXBdDQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVXNpbmcgdGhlIFNtYWxsL0xhcmdlIGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjYscjI3LHIyOCxyMjkscjMwfSw3MixzcCAgICAgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNjhbZXBdDQorICAgIHNzdC53ICAgcjE4LDY0W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2MFtlcF0NCisgICAgc3N0LncgICByMTYsNTZbZXBdDQorICAgIHNzdC53ICAgcjE1LDUyW2VwXQ0KKyAgICBzc3QudyAgIHIxNCw0OFtlcF0NCisgICAgc3N0LncgICByMTMsNDRbZXBdDQorICAgIHNzdC53ICAgcjEyLDQwW2VwXQ0KKyAgICBzc3QudyAgIHIxMSwzNltlcF0NCisgICAgc3N0LncgICByMTAsMzJbZXBdDQorICAgIHNzdC53ICAgcjksMjhbZXBdDQorICAgIHNzdC53ICAgcjgsMjRbZXBdDQorICAgIHNzdC53ICAgcjcsMjBbZXBdDQorICAgIHNzdC53ICAgcjYsMTZbZXBdDQorICAgIHNzdC53ICAgcjUsMTJbZXBdDQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKyAgICBzc3QudyAgIHIyLDhbZXBdDQorICAgIHNzdC53ICAgcjEsNFtlcF0NCisgICAgTU9WSEkgICBoaTEodXNDcml0aWNhbE5lc3RpbmcpLHIwLHIxICAgICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlIHRvIHN0YWNrDQorICAgIGxkLncgICAgbHcxKHVzQ3JpdGljYWxOZXN0aW5nKVtyMV0scjINCisgICAgc3N0LncgICByMiwwW2VwXQ0KKyAgICBNT1ZISSAgIGhpMShweEN1cnJlbnRUQ0IpLHIwLHIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHNhdmUgU1AgdG8gdG9wIG9mIGN1cnJlbnQgVENCDQorICAgIGxkLncgICAgbHcxKHB4Q3VycmVudFRDQilbcjFdLHIyDQorICAgIHN0LncgICAgc3AsMFtyMl0NCisgICAgRU5ETQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIHBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCis7ICAgR2V0cyBzdGFjayBwb2ludGVyIGZyb20gdGhlIGN1cnJlbnQgVENCDQorOyAgIFJlc3RvcmVzIHRoZSBjb250ZXh0IG9mIHRoZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSBhbmQgZ2VuZXJhbCBwdXJwb3NlDQorOyAgIHJlZ2lzdGVycyBvZiB0aGUgc2VsZWN0ZWQgdGFzayBmcm9tIHRoZSB0YXNrIHN0YWNrDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3BvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCisgICAgTU9WSEkgICBoaTEocHhDdXJyZW50VENCKSxyMCxyMSAgICAgICAgIDsgZ2V0IFN0YWNrcG9pbnRlciBhZGRyZXNzDQorICAgIGxkLncgICAgbHcxKHB4Q3VycmVudFRDQilbcjFdLHNwDQorICAgIE1PViAgICAgc3AscjENCisgICAgbGQudyAgICAwW3IxXSxzcCAgICAgICAgICAgICAgICAgICAgICAgIDsgbG9hZCBzdGFja3BvaW50ZXINCisgICAgTU9WICAgICBzcCxlcCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IHN0YWNrIHBvaW50ZXIgdG8gZWxlbWVudCBwb2ludGVyDQorICAgIHNsZC53ICAgMFtlcF0scjEgICAgICAgICAgICAgICAgICAgICAgICA7IGxvYWQgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgZnJvbSBzdGFjaw0KKyAgICBNT1ZISSAgIGhpMSh1c0NyaXRpY2FsTmVzdGluZykscjAscjINCisgICAgc3QudyAgICByMSxsdzEodXNDcml0aWNhbE5lc3RpbmcpW3IyXQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc2xkLncgICA4W2VwXSxyMg0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMSAgICAgICAgICAgICAgICAgICAgOyBVc2luZyBUaW55IGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjQNCisgICAgc2xkLncgICAxNltlcF0scjUNCisgICAgc2xkLncgICAyMFtlcF0scjYNCisgICAgc2xkLncgICAyNFtlcF0scjcNCisgICAgc2xkLncgICAyOFtlcF0scjgNCisgICAgc2xkLncgICAzMltlcF0scjkNCisgICAgc2xkLncgICAzNltlcF0scjEwDQorICAgIHNsZC53ICAgNDBbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQ0W2VwXSxyMTINCisgICAgc2xkLncgICA0OFtlcF0scjEzDQorICAgIHNsZC53ICAgNTJbZXBdLHIxNA0KKyAgICBzbGQudyAgIDU2W2VwXSxyMTUNCisgICAgc2xkLncgICA2MFtlcF0scjE2DQorICAgIHNsZC53ICAgNjRbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY4W2VwXSxyMTgNCisgICAgc2xkLncgICA3MltlcF0scjE5DQorICAgIGRpc3Bvc2UgNzYse3IyMCxyMjEscjIyLHIyMyxyMjQscjI1LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIFNtYWxsL0xhcmdlIGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjUNCisgICAgc2xkLncgICAxNltlcF0scjYNCisgICAgc2xkLncgICAyMFtlcF0scjcNCisgICAgc2xkLncgICAyNFtlcF0scjgNCisgICAgc2xkLncgICAyOFtlcF0scjkNCisgICAgc2xkLncgICAzMltlcF0scjEwDQorICAgIHNsZC53ICAgMzZbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQwW2VwXSxyMTINCisgICAgc2xkLncgICA0NFtlcF0scjEzDQorICAgIHNsZC53ICAgNDhbZXBdLHIxNA0KKyAgICBzbGQudyAgIDUyW2VwXSxyMTUNCisgICAgc2xkLncgICA1NltlcF0scjE2DQorICAgIHNsZC53ICAgNjBbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY0W2VwXSxyMTgNCisgICAgc2xkLncgICA2OFtlcF0scjE5DQorICAgIGRpc3Bvc2UgNzIse3IyMCxyMjEscjIyLHIyMyxyMjQscjI2LHIyNyxyMjgscjI5LHIzMH0NCisjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQorICAgIEVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLg0KKzsNCis7ICAgSW5wdXQ6ICBOT05FDQorOw0KKzsgICBDYWxsOiAgIENBTEwgICAgdlBvcnRTdGFydA0KKzsNCis7ICAgT3V0cHV0OiBOT05FDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkNCisgICAgUlNFRyBDT0RFOkNPREUNCit2UG9ydFN0YXJ0Og0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUCSAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisgICAgbGQudyAgICAwW3NwXSxscA0KKyAgICBsZHNyICAgIGxwLDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIFBTVw0KKyAgICBESQ0KKyAgICBsZC53ICAgIDRbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQDQorICAgIGxkLncgICAgOFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgTFANCisgICAgQUREICAgICAweDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorICAgIEVJDQorICAgIGptcCAgICAgW2xwXQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIFBvcnQgWWllbGQgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIGEgVGFzayBzd2l0Y2ggaW4gdGhlIGNvb3BlcmF0aXZlIGFuZA0KKzsgICBwcmVlbXB0aXZlIG1vZGUNCis7DQorOyAgIElucHV0OiAgTk9ORQ0KKzsNCis7ICAgQ2FsbDogICBDQUxMICAgIHZQb3J0WWllbGQNCis7DQorOyAgIE91dHB1dDogTk9ORQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisJUlNFRyBDT0RFOkNPREUNCit2UG9ydFlpZWxkOg0KKw0KKyAgICBhZGQgICAgIC0weDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgICA7IHByZXBhcmUgc3RhY2sgdG8gc2F2ZSBuZWNlc3NhcnkgdmFsdWVzDQorICAgIHN0LncgICAgbHAsOFtzcF0gICAgICAgICAgICAgICAgICAgICAgICA7IHN0b3JlIExQIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMCxyMzENCisgICAgc3QudyAgICBscCw0W3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQQyB0byBzdGFjaw0KKyAgICBzdHNyICAgIDEsbHANCisgICAgc3QudyAgICBscCwwW3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQU1cgdG8gc3RhY2sNCisgICAgcG9ydFNBVkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorICAgIGphcmwgICAgdlRhc2tTd2l0Y2hDb250ZXh0LGxwICAgICAgICAgICA7IENhbGwgdGhlIHNjaGVkdWxlci4NCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisgICAgICAgICAgICAgICAgCQkgICAgICAgICAgICA7IC4uLiBzY2hlZHVsZXIgZGVjaWRlZCBzaG91bGQgcnVuLg0KKwlsZC53ICAgIDBbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEVJUFNXIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwxDQorICAgIGxkLncgICAgNFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgRUlQQyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMA0KKyAgICBsZC53ICAgIDhbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQIGZyb20gc3RhY2sNCisgICAgYWRkICAgICAweDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorDQorICAgIFJFVEkNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgb2YgdGhlIFRpY2sgQ291bnQgSW5jcmVtZW50IGFuZCBUYXNrIFN3aXRjaA0KKzsgICBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBrZXJuZWwgY29uZmlndXJhdGlvbg0KKzsNCis7ICAgSW5wdXQ6ICBOT05FDQorOw0KKzsgICBDYWxsOiAgIElTUg0KKzsNCis7ICAgT3V0cHV0OiBOT05FDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAgICAgICAgICAgICAgIDsgdXNlIHByZWVtcHRpdmUga2VybmVsIG1vZGUNCisNCitNRF9JTlRUTTBFUTA6DQorDQorICAgIGFkZCAgICAgLTB4MEMsc3AgICAgICAgICAgICAgICAgICAgICAgICAgIDsgcHJlcGFyZSBzdGFjayB0byBzYXZlIG5lY2Vzc2FyeSB2YWx1ZXMNCisgICAgc3QudyAgICBscCw4W3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgTFAgdG8gc3RhY2sNCisgICAgc3RzciAgICAwLHIzMQ0KKyAgICBzdC53ICAgIGxwLDRbc3BdICAgICAgICAgICAgICAgICAgICAgICAgOyBzdG9yZSBFSVBDIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMSxscA0KKyAgICBzdC53ICAgIGxwLDBbc3BdICAgICAgICAgICAgICAgICAgICAgICAgOyBzdG9yZSBFSVBTVyB0byBzdGFjaw0KKyAgICBwb3J0U0FWRV9DT05URVhUCQkgICAgICAgICAgICA7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisgICAgamFybCAgICB2VGFza0luY3JlbWVudFRpY2ssbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisgICAgamFybCAgICB2VGFza1N3aXRjaENvbnRleHQsbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgc2NoZWR1bGVyLg0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUCQkgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIGNvbnRleHQgb2Ygd2hpY2hldmVyIHRhc2sgdGhlIC4uLg0KKyAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgIDsgLi4uIHNjaGVkdWxlciBkZWNpZGVkIHNob3VsZCBydW4uDQorICAgIGxkLncgICAgMFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgRUlQU1cgZnJvbSBzdGFjaw0KKyAgICBsZHNyICAgIGxwLDENCisgICAgbGQudyAgICA0W3NwXSxscCAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBFSVBDIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwwDQorICAgIGxkLncgICAgOFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgTFAgZnJvbSBzdGFjaw0KKyAgICBhZGQgICAgIDB4MEMsc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBzZXQgU1AgdG8gcmlnaHQgcG9zaXRpb24NCisNCisgICAgUkVUSQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgdXNlIGNvb3BlcmF0aXZlIGtlcm5lbCBtb2RlDQorDQorTURfSU5UVE0wRVEwOg0KKyAgICBwcmVwYXJlIHtscCxlcH0sOCxzcA0KKyAgICBzc3QudyAgIHIxLDRbZXBdDQorICAgIHNzdC53ICAgcjUsMFtlcF0NCisgICAgamFybCAgICB2VGFza0luY3JlbWVudFRpY2ssbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisgICAgc2xkLncgICAwW2VwXSxyNQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxDQorICAgIGRpc3Bvc2UgOCx7bHAsZXB9DQorICAgIFJFVEkNCisjZW5kaWYgLyogY29uZmlnVVNFX1BSRUVNUFRJT04gKi8NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgICAgT1JHIDYwOA0KK2A/P01EX0lOVFRNMEVRMD8/SU5UVkVDIDYwOGA6DQorICAgICAgICBKUiBNRF9JTlRUTTBFUTANCisNCisgICAgICAgIFJTRUcgTkVBUl9JRDpDT05TVDpTT1JUOk5PUk9PVCgyKQ0KK2A/PEluaXRpYWxpemVyIGZvciB1c0NyaXRpY2FsTmVzdGluZz5gOg0KKyAgICAgICAgRFcgMTANCisNCisgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgIE9SRyA0MEgNCitgPz92UG9ydFlpZWxkPz9JTlRWRUMgNDBgOg0KKyAgICAgICAgSlIgdlBvcnRZaWVsZA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7IHNldCBtaWNyb2NvbnRyb2xsZXIgc2VjdXJpdHkgSUQNCisNCisgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgIE9SRyA3MEgNCitgU0VDVUlEYDoNCisgICAgICBEQiBDR19TRUNVUklUWTANCisgICAgICBEQiBDR19TRUNVUklUWTENCisgICAgICBEQiBDR19TRUNVUklUWTINCisgICAgICBEQiBDR19TRUNVUklUWTMNCisgICAgICBEQiBDR19TRUNVUklUWTQNCisgICAgICBEQiBDR19TRUNVUklUWTUNCisgICAgICBEQiBDR19TRUNVUklUWTYNCisgICAgICBEQiBDR19TRUNVUklUWTcNCisgICAgICBEQiBDR19TRUNVUklUWTgNCisgICAgICBEQiBDR19TRUNVUklUWTkNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyBzZXQgbWljcm9jb250cm9sbGVyIG9wdGlvbiBieXRlcw0KKw0KKyAgICAgIENPTU1PTiBJTlRWRUM6Q09ERTpST09UKDIpDQorICAgICAgT1JHIDdBSA0KK2BPUFRCWVRFU2A6DQorICAgICAgREIgQ0dfT1BUSU9ON0ENCisgICAgICBEQiBDR19PUFRJT043Qg0KKyAgICAgIERCIE9QVDdDDQorICAgICAgREIgT1BUN0QNCisgICAgICBEQiBPUFQ3RQ0KKyAgICAgIERCIE9QVDdGDQorDQorICAgICAgRU5EClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydGFzbV9IeDIuczg1IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydGFzbV9IeDIuczg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDA3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0YXNtX0h4Mi5zODUKQEAgLTAsMCArMSwzNzYgQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsJDQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKzsgTm90ZTogU2VsZWN0IHRoZSBjb3JyZWN0IGluY2x1ZGUgZmlsZXMgZm9yIHRoZSBkZXZpY2UgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uDQorI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKzsgRnVuY3Rpb25zIHVzZWQgYnkgc2NoZWR1bGVyDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICBFWFRFUk4gICAgdlRhc2tTd2l0Y2hDb250ZXh0DQorICAgIEVYVEVSTiAgICB2VGFza0luY3JlbWVudFRpY2sNCisNCis7IFZhcmlhYmxlcyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgRVhURVJOICAgIHB4Q3VycmVudFRDQg0KKyAgICBFWFRFUk4gICAgdXNDcml0aWNhbE5lc3RpbmcNCisNCis7IEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiB0aGlzIGZpbGUNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgIFBVQkxJQyAgICB2UG9ydFlpZWxkDQorICAgIFBVQkxJQyAgICB2UG9ydFN0YXJ0DQorDQorOyBTZWN1cml0eSBJRCBkZWZpbml0aW9uDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyNkZWZpbmUJQ0dfU0VDVVJJVFkwCTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZMQkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTIJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFkzCTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZNAkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTUJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk2CTBGRkgNCisjZGVmaW5lCUNHX1NFQ1VSSVRZNwkwRkZIDQorI2RlZmluZQlDR19TRUNVUklUWTgJMEZGSA0KKyNkZWZpbmUJQ0dfU0VDVVJJVFk5CTBGRkgNCisNCis7IFRpY2sgSVNSIFByb3RvdHlwZQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgIFBVQldFQUsgYD8/TURfSU5UVE0wRVEwPz9JTlRWRUMgNTQ0YA0KKyAgICAgICAgUFVCTElDIE1EX0lOVFRNMEVRMA0KKw0KK01EX0lOVFRNMEVRMCAgICAgICAgU1lNQk9MICJNRF9JTlRUTTBFUTAiDQorYD8/TURfSU5UVE0wRVEwPz9JTlRWRUMgNTQ0YCBTWU1CT0wgIj8/SU5UVkVDIDU0NCIsIE1EX0lOVFRNMEVRMA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKzsgICBTYXZlcyB0aGUgY29udGV4dCBvZiB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCis7ICAgYW5kIHRoZSB1c0NyaXRpY2FsTmVzdGluZyBWYWx1ZSBvZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KKzsgICBzYXZlcyBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0INCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIHRoZSBUaW55IGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjUscjI2LHIyNyxyMjgscjI5LHIzMH0sNzYsc3AgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNzJbZXBdDQorICAgIHNzdC53ICAgcjE4LDY4W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2NFtlcF0NCisgICAgc3N0LncgICByMTYsNjBbZXBdDQorICAgIHNzdC53ICAgcjE1LDU2W2VwXQ0KKyAgICBzc3QudyAgIHIxNCw1MltlcF0NCisgICAgc3N0LncgICByMTMsNDhbZXBdDQorICAgIHNzdC53ICAgcjEyLDQ0W2VwXQ0KKyAgICBzc3QudyAgIHIxMSw0MFtlcF0NCisgICAgc3N0LncgICByMTAsMzZbZXBdDQorICAgIHNzdC53ICAgcjksMzJbZXBdDQorICAgIHNzdC53ICAgcjgsMjhbZXBdDQorICAgIHNzdC53ICAgcjcsMjRbZXBdDQorICAgIHNzdC53ICAgcjYsMjBbZXBdDQorICAgIHNzdC53ICAgcjUsMTZbZXBdDQorICAgIHNzdC53ICAgcjQsMTJbZXBdDQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVXNpbmcgdGhlIFNtYWxsL0xhcmdlIGRhdGEgbW9kZWwNCisgICAgcHJlcGFyZSB7cjIwLHIyMSxyMjIscjIzLHIyNCxyMjYscjI3LHIyOCxyMjkscjMwfSw3MixzcCAgICAgOyBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc3N0LncgICByMTksNjhbZXBdDQorICAgIHNzdC53ICAgcjE4LDY0W2VwXQ0KKyAgICBzc3QudyAgIHIxNyw2MFtlcF0NCisgICAgc3N0LncgICByMTYsNTZbZXBdDQorICAgIHNzdC53ICAgcjE1LDUyW2VwXQ0KKyAgICBzc3QudyAgIHIxNCw0OFtlcF0NCisgICAgc3N0LncgICByMTMsNDRbZXBdDQorICAgIHNzdC53ICAgcjEyLDQwW2VwXQ0KKyAgICBzc3QudyAgIHIxMSwzNltlcF0NCisgICAgc3N0LncgICByMTAsMzJbZXBdDQorICAgIHNzdC53ICAgcjksMjhbZXBdDQorICAgIHNzdC53ICAgcjgsMjRbZXBdDQorICAgIHNzdC53ICAgcjcsMjBbZXBdDQorICAgIHNzdC53ICAgcjYsMTZbZXBdDQorICAgIHNzdC53ICAgcjUsMTJbZXBdDQorI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KKyAgICBzc3QudyAgIHIyLDhbZXBdDQorICAgIHNzdC53ICAgcjEsNFtlcF0NCisgICAgTU9WSEkgICBoaTEodXNDcml0aWNhbE5lc3RpbmcpLHIwLHIxICAgICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlIHRvIHN0YWNrDQorICAgIGxkLncgICAgbHcxKHVzQ3JpdGljYWxOZXN0aW5nKVtyMV0scjINCisgICAgc3N0LncgICByMiwwW2VwXQ0KKyAgICBNT1ZISSAgIGhpMShweEN1cnJlbnRUQ0IpLHIwLHIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHNhdmUgU1AgdG8gdG9wIG9mIGN1cnJlbnQgVENCDQorICAgIGxkLncgICAgbHcxKHB4Q3VycmVudFRDQilbcjFdLHIyDQorICAgIHN0LncgICAgc3AsMFtyMl0NCisgICAgRU5ETQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIHBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCis7ICAgR2V0cyBzdGFjayBwb2ludGVyIGZyb20gdGhlIGN1cnJlbnQgVENCDQorOyAgIFJlc3RvcmVzIHRoZSBjb250ZXh0IG9mIHRoZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSBhbmQgZ2VuZXJhbCBwdXJwb3NlDQorOyAgIHJlZ2lzdGVycyBvZiB0aGUgc2VsZWN0ZWQgdGFzayBmcm9tIHRoZSB0YXNrIHN0YWNrDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3BvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCisgICAgTU9WSEkgICBoaTEocHhDdXJyZW50VENCKSxyMCxyMSAgICAgICAgIDsgZ2V0IFN0YWNrcG9pbnRlciBhZGRyZXNzDQorICAgIGxkLncgICAgbHcxKHB4Q3VycmVudFRDQilbcjFdLHNwDQorICAgIE1PViAgICAgc3AscjENCisgICAgbGQudyAgICAwW3IxXSxzcCAgICAgICAgICAgICAgICAgICAgICAgIDsgbG9hZCBzdGFja3BvaW50ZXINCisgICAgTU9WICAgICBzcCxlcCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IHN0YWNrIHBvaW50ZXIgdG8gZWxlbWVudCBwb2ludGVyDQorICAgIHNsZC53ICAgMFtlcF0scjEgICAgICAgICAgICAgICAgICAgICAgICA7IGxvYWQgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgZnJvbSBzdGFjaw0KKyAgICBNT1ZISSAgIGhpMSh1c0NyaXRpY2FsTmVzdGluZykscjAscjINCisgICAgc3QudyAgICByMSxsdzEodXNDcml0aWNhbE5lc3RpbmcpW3IyXQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc2xkLncgICA4W2VwXSxyMg0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMSAgICAgICAgICAgICAgICAgICAgOyBVc2luZyBUaW55IGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjQNCisgICAgc2xkLncgICAxNltlcF0scjUNCisgICAgc2xkLncgICAyMFtlcF0scjYNCisgICAgc2xkLncgICAyNFtlcF0scjcNCisgICAgc2xkLncgICAyOFtlcF0scjgNCisgICAgc2xkLncgICAzMltlcF0scjkNCisgICAgc2xkLncgICAzNltlcF0scjEwDQorICAgIHNsZC53ICAgNDBbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQ0W2VwXSxyMTINCisgICAgc2xkLncgICA0OFtlcF0scjEzDQorICAgIHNsZC53ICAgNTJbZXBdLHIxNA0KKyAgICBzbGQudyAgIDU2W2VwXSxyMTUNCisgICAgc2xkLncgICA2MFtlcF0scjE2DQorICAgIHNsZC53ICAgNjRbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY4W2VwXSxyMTgNCisgICAgc2xkLncgICA3MltlcF0scjE5DQorICAgIGRpc3Bvc2UgNzYse3IyMCxyMjEscjIyLHIyMyxyMjQscjI1LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzaW5nIFNtYWxsL0xhcmdlIGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjUNCisgICAgc2xkLncgICAxNltlcF0scjYNCisgICAgc2xkLncgICAyMFtlcF0scjcNCisgICAgc2xkLncgICAyNFtlcF0scjgNCisgICAgc2xkLncgICAyOFtlcF0scjkNCisgICAgc2xkLncgICAzMltlcF0scjEwDQorICAgIHNsZC53ICAgMzZbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQwW2VwXSxyMTINCisgICAgc2xkLncgICA0NFtlcF0scjEzDQorICAgIHNsZC53ICAgNDhbZXBdLHIxNA0KKyAgICBzbGQudyAgIDUyW2VwXSxyMTUNCisgICAgc2xkLncgICA1NltlcF0scjE2DQorICAgIHNsZC53ICAgNjBbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY0W2VwXSxyMTgNCisgICAgc2xkLncgICA2OFtlcF0scjE5DQorICAgIGRpc3Bvc2UgNzIse3IyMCxyMjEscjIyLHIyMyxyMjQscjI2LHIyNyxyMjgscjI5LHIzMH0NCisjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQorICAgIEVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLg0KKzsNCis7ICAgSW5wdXQ6ICBOT05FDQorOw0KKzsgICBDYWxsOiAgIENBTEwgICAgdlBvcnRTdGFydA0KKzsNCis7ICAgT3V0cHV0OiBOT05FDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkNCisgICAgUlNFRyBDT0RFOkNPREUNCit2UG9ydFN0YXJ0Og0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUCSAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisgICAgbGQudyAgICAwW3NwXSxscA0KKyAgICBsZHNyICAgIGxwLDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIFBTVw0KKyAgICBESQ0KKyAgICBsZC53ICAgIDRbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQDQorICAgIGxkLncgICAgOFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgTFANCisgICAgQUREICAgICAweDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorICAgIEVJDQorICAgIGptcCAgICAgW2xwXQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIFBvcnQgWWllbGQgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIGEgVGFzayBzd2l0Y2ggaW4gdGhlIGNvb3BlcmF0aXZlIGFuZA0KKzsgICBwcmVlbXB0aXZlIG1vZGUNCis7DQorOyAgIElucHV0OiAgTk9ORQ0KKzsNCis7ICAgQ2FsbDogICBDQUxMICAgIHZQb3J0WWllbGQNCis7DQorOyAgIE91dHB1dDogTk9ORQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisJUlNFRyBDT0RFOkNPREUNCit2UG9ydFlpZWxkOg0KKw0KKyAgICBhZGQgICAgIC0weDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgICA7IHByZXBhcmUgc3RhY2sgdG8gc2F2ZSBuZWNlc3NhcnkgdmFsdWVzDQorICAgIHN0LncgICAgbHAsOFtzcF0gICAgICAgICAgICAgICAgICAgICAgICA7IHN0b3JlIExQIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMCxyMzENCisgICAgc3QudyAgICBscCw0W3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQQyB0byBzdGFjaw0KKyAgICBzdHNyICAgIDEsbHANCisgICAgc3QudyAgICBscCwwW3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgRUlQU1cgdG8gc3RhY2sNCisgICAgcG9ydFNBVkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suDQorICAgIGphcmwgICAgdlRhc2tTd2l0Y2hDb250ZXh0LGxwICAgICAgICAgICA7IENhbGwgdGhlIHNjaGVkdWxlci4NCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVAkJICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoZXZlciB0YXNrIHRoZSAuLi4NCisgICAgICAgICAgICAgICAgCQkgICAgICAgICAgICA7IC4uLiBzY2hlZHVsZXIgZGVjaWRlZCBzaG91bGQgcnVuLg0KKwlsZC53ICAgIDBbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEVJUFNXIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwxDQorICAgIGxkLncgICAgNFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgRUlQQyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMA0KKyAgICBsZC53ICAgIDhbc3BdLGxwICAgICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIExQIGZyb20gc3RhY2sNCisgICAgYWRkICAgICAweDBDLHNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2V0IFNQIHRvIHJpZ2h0IHBvc2l0aW9uDQorDQorICAgIFJFVEkNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgb2YgdGhlIFRpY2sgQ291bnQgSW5jcmVtZW50IGFuZCBUYXNrIFN3aXRjaA0KKzsgICBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBrZXJuZWwgY29uZmlndXJhdGlvbg0KKzsNCis7ICAgSW5wdXQ6ICBOT05FDQorOw0KKzsgICBDYWxsOiAgIElTUg0KKzsNCis7ICAgT3V0cHV0OiBOT05FDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAgICAgICAgICAgICAgIDsgdXNlIHByZWVtcHRpdmUga2VybmVsIG1vZGUNCisNCitNRF9JTlRUTTBFUTA6DQorDQorICAgIGFkZCAgICAgLTB4MEMsc3AgICAgICAgICAgICAgICAgICAgICAgICAgIDsgcHJlcGFyZSBzdGFjayB0byBzYXZlIG5lY2Vzc2FyeSB2YWx1ZXMNCisgICAgc3QudyAgICBscCw4W3NwXSAgICAgICAgICAgICAgICAgICAgICAgIDsgc3RvcmUgTFAgdG8gc3RhY2sNCisgICAgc3RzciAgICAwLHIzMQ0KKyAgICBzdC53ICAgIGxwLDRbc3BdICAgICAgICAgICAgICAgICAgICAgICAgOyBzdG9yZSBFSVBDIHRvIHN0YWNrDQorICAgIHN0c3IgICAgMSxscA0KKyAgICBzdC53ICAgIGxwLDBbc3BdICAgICAgICAgICAgICAgICAgICAgICAgOyBzdG9yZSBFSVBTVyB0byBzdGFjaw0KKyAgICBwb3J0U0FWRV9DT05URVhUCQkgICAgICAgICAgICA7IFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisgICAgamFybCAgICB2VGFza0luY3JlbWVudFRpY2ssbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisgICAgamFybCAgICB2VGFza1N3aXRjaENvbnRleHQsbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgc2NoZWR1bGVyLg0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUCQkgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIGNvbnRleHQgb2Ygd2hpY2hldmVyIHRhc2sgdGhlIC4uLg0KKyAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgIDsgLi4uIHNjaGVkdWxlciBkZWNpZGVkIHNob3VsZCBydW4uDQorICAgIGxkLncgICAgMFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgRUlQU1cgZnJvbSBzdGFjaw0KKyAgICBsZHNyICAgIGxwLDENCisgICAgbGQudyAgICA0W3NwXSxscCAgICAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBFSVBDIGZyb20gc3RhY2sNCisgICAgbGRzciAgICBscCwwDQorICAgIGxkLncgICAgOFtzcF0sbHAgICAgICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgTFAgZnJvbSBzdGFjaw0KKyAgICBhZGQgICAgIDB4MEMsc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBzZXQgU1AgdG8gcmlnaHQgcG9zaXRpb24NCisNCisgICAgUkVUSQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgdXNlIGNvb3BlcmF0aXZlIGtlcm5lbCBtb2RlDQorDQorTURfSU5UVE0wRVEwOg0KKyAgICBwcmVwYXJlIHtscCxlcH0sOCxzcA0KKyAgICBzc3QudyAgIHIxLDRbZXBdDQorICAgIHNzdC53ICAgcjUsMFtlcF0NCisgICAgamFybCAgICB2VGFza0luY3JlbWVudFRpY2ssbHAgICAgICAgICAgIDsgQ2FsbCB0aGUgdGltZXIgdGljayBmdW5jdGlvbi4NCisgICAgc2xkLncgICAwW2VwXSxyNQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxDQorICAgIGRpc3Bvc2UgOCx7bHAsZXB9DQorICAgIFJFVEkNCisjZW5kaWYgLyogY29uZmlnVVNFX1BSRUVNUFRJT04gKi8NCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgICAgT1JHIDU0NA0KK2A/P01EX0lOVFRNMEVRMD8/SU5UVkVDIDU0NGA6DQorICAgICAgICBKUiBNRF9JTlRUTTBFUTANCisNCisgICAgICAgIFJTRUcgTkVBUl9JRDpDT05TVDpTT1JUOk5PUk9PVCgyKQ0KK2A/PEluaXRpYWxpemVyIGZvciB1c0NyaXRpY2FsTmVzdGluZz5gOg0KKyAgICAgICAgRFcgMTANCisNCisgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgIE9SRyA0MEgNCitgPz92UG9ydFlpZWxkPz9JTlRWRUMgNDBgOg0KKyAgICAgICAgSlIgdlBvcnRZaWVsZA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7IHNldCBtaWNyb2NvbnRyb2xsZXIgc2VjdXJpdHkgSUQNCisNCisgICAgICBDT01NT04gSU5UVkVDOkNPREU6Uk9PVCgyKQ0KKyAgICAgIE9SRyA3MEgNCitgU0VDVUlEYDoNCisgICAgICBEQiBDR19TRUNVUklUWTANCisgICAgICBEQiBDR19TRUNVUklUWTENCisgICAgICBEQiBDR19TRUNVUklUWTINCisgICAgICBEQiBDR19TRUNVUklUWTMNCisgICAgICBEQiBDR19TRUNVUklUWTQNCisgICAgICBEQiBDR19TRUNVUklUWTUNCisgICAgICBEQiBDR19TRUNVUklUWTYNCisgICAgICBEQiBDR19TRUNVUklUWTcNCisgICAgICBEQiBDR19TRUNVUklUWTgNCisgICAgICBEQiBDR19TRUNVUklUWTkNCisNCisNCis7IHNldCBtaWNyb2NvbnRyb2xsZXIgT3B0aW9uIGJ5dGVzDQorDQorICAgICAgQ09NTU9OIElOVFZFQzpDT0RFOlJPT1QoMikNCisgICAgICBPUkcgMTIyDQorYE9QVEJZVEVTYDoNCisgICAgICBEQiAweEZEDQorICAgICAgREIgMHhGRg0KKyAgICAgIERCIDB4RkYNCisgICAgICBEQiAweEZGDQorICAgICAgREIgMHhGRg0KKyAgICAgIERCIDB4RkYNCisNCisjaWYgY29uZmlnT0NEX1VTQUdFID09IDENCisNCisgICAgICBDT01NT04gICBJTlRWRUM6Q09ERTpST09UKDQpDQorICAgICAgT1JHICAgICAgMHgyMzANCisgICAgICBQVUJMSUMgUk9NX0lOVDINCitST01fSU5UMjoNCisgICAgICBEQiAweGZmLCAweGZmLCAweGZmLCAweGZmDQorICAgICAgREIgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZg0KKyAgICAgIERCIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYNCisgICAgICBEQiAweGZmLCAweGZmLCAweGZmLCAweGZmDQorDQorDQorICAgICAgQ09NTU9OICAgSU5UVkVDOkNPREU6Uk9PVCg0KQ0KKyAgICAgIE9SRyAgICAgIDB4NjANCisgICAgICBQVUJMSUMgICBST01fSU5UDQorUk9NX0lOVDoNCisgICAgICBEQiAweGZmLCAweGZmLCAweGZmLCAweGZmDQorICAgICAgREIgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZg0KKyAgICAgIERCIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYNCisgICAgICBEQiAweGZmLCAweGZmLCAweGZmLCAweGZmDQorDQorI2VuZGlmIC8qIGNvbmZpZ09DRF9VU0FHRSAqLw0KKw0KKyAgICAgIEVORA0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiNTJlOQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTcwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgdW5zaWduZWQgaW50DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgaW50DQorDQorDQorI2lmIChjb25maWdVU0VfMTZfQklUX1RJQ0tTPT0xKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSAoICJESSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJIF9fYXNtICggIkVJIiApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIC8qdW5zaWduZWQgcG9ydFNIT1JUKi8gcG9ydFNUQUNLX1RZUEUgdXNDcml0aWNhbE5lc3Rpbmc7CQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwkJXA0KKwkvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovCQkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgLyp1bnNpZ25lZCBwb3J0U0hPUlQqLyBwb3J0U1RBQ0tfVFlQRSB1c0NyaXRpY2FsTmVzdGluZzsJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCQlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwkJXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHBvcnRTQVZFX0NPTlRFWFQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCBwb3J0UkVTVE9SRV9DT05URVhUKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQlfX2FzbSAoICJ0cmFwIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQlfX2FzbSAoICJOT1AiICkNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHd3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAk0DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9LZWlsL1NlZS1hbHNvLXRoZS1SVkRTLWRpcmVjdG9yeS50eHQgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvS2VpbC9TZWUtYWxzby10aGUtUlZEUy1kaXJlY3RvcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkN2ZhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvS2VpbC9TZWUtYWxzby10aGUtUlZEUy1kaXJlY3RvcnkudHh0CkBAIC0wLDAgKzEgQEAKK05vdGhpbmcgdG8gc2VlIGhlcmUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzE4Ri9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMThGL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZjZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzE4Ri9wb3J0LmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIA0KK0NoYW5nZXMgYmV0d2VlbiBWMS4yLjQgYW5kIFYxLjIuNQ0KKw0KKwkrIEludHJvZHVjZWQgcG9ydEdMT0JBTF9JTlRFUlJVUFRfRkxBRyBkZWZpbml0aW9uIHRvIHRlc3QgdGhlIGdsb2JhbCANCisJICBpbnRlcnJ1cHQgZmxhZyBzZXR0aW5nLiAgVXNpbmcgdGhlIHR3byBiaXRzIGRlZmluZWQgd2l0aGluDQorCSAgcG9ydElOSVRBTF9JTlRFUlJVUFRfU1RBVEUgd2FzIGNhdXNpbmcgdGhlIHcgcmVnaXN0ZXIgdG8gZ2V0IGNsb2JiZXJlZA0KKwkgIGJlZm9yZSB0aGUgdGVzdCB3YXMgcGVyZm9ybWVkLg0KKw0KK0NoYW5nZXMgZnJvbSBWMS4yLjUNCisNCisJKyBTZXQgdGhlIGludGVycnVwdCB2ZWN0b3IgYWRkcmVzcyB0byAweDA4LiAgUHJldmlvdXNseSBpdCB3YXMgYXQgdGhlDQorCSAgaW5jb3JyZWN0IGFkZHJlc3MgZm9yIGNvbXBhdGliaWxpdHkgbW9kZSBvZiAweDE4Lg0KKw0KK0NoYW5nZXMgZnJvbSBWMi4xLjENCisNCisJKyBQQ0xBVFUgYW5kIFBDTEFUSCBhcmUgbm93IHNhdmVkIGFzIHBhcnQgb2YgdGhlIGNvbnRleHQuICBUaGlzIGFsbG93cw0KKwkgIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGJlIHVzZWQgd2l0aGluIHRhc2tzLiAgVGhhbmtzIHRvIEphdmllciBFc3BlY2hlDQorCSAgZm9yIHRoZSBlbmhhbmNlbWVudC4gDQorDQorQ2hhbmdlcyBmcm9tIFYyLjMuMQ0KKw0KKwkrIFRBQkxBVCBpcyBub3cgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0Lg0KKwkNCitDaGFuZ2VzIGZyb20gVjMuMi4wDQorDQorCSsgVEJMUFRSVSBpcyBub3cgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGUgTVBMQUIgY29tcGlsZXIgZXhwZWN0cyB0aGlzDQorCSAgdmFsdWUgYW5kIGRvZXMgbm90IHdyaXRlIHRvIHRoZSByZWdpc3Rlci4NCisqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlIGZpbGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogTVBMQUIgbGlicmFyeSBpbmNsdWRlIGZpbGUuICovDQorI2luY2x1ZGUgInRpbWVycy5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUElDIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzZXR1cCBmb3IgdGljay4gKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9GT1NDX1NDQUxFCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSA0ICkNCisNCisvKiBJbml0aWFsIGludGVycnVwdCBlbmFibGUgc3RhdGUgZm9yIG5ld2x5IGNyZWF0ZWQgdGFza3MuICBUaGlzIHZhbHVlIGlzDQorY29waWVkIGludG8gSU5UQ09OIHdoZW4gYSB0YXNrIHN3aXRjaGVzIGluIGZvciB0aGUgZmlyc3QgdGltZS4gKi8NCisjZGVmaW5lIHBvcnRJTklUQUxfSU5URVJSVVBUX1NUQVRFCQkJMHhjMA0KKw0KKy8qIEp1c3QgdGhlIGJpdCB3aXRoaW4gSU5UQ09OIGZvciB0aGUgZ2xvYmFsIGludGVycnVwdCBmbGFnLiAqLw0KKyNkZWZpbmUgcG9ydEdMT0JBTF9JTlRFUlJVUFRfRkxBRwkJCTB4ODANCisNCisvKiBDb25zdGFudCB1c2VkIGZvciBjb250ZXh0IHN3aXRjaCBtYWNybyB3aGVuIHdlIHJlcXVpcmUgdGhlIGludGVycnVwdCANCitlbmFibGUgc3RhdGUgdG8gYmUgdW5jaGFuZ2VkIHdoZW4gdGhlIGludGVycnVwdGVkIHRhc2sgaXMgc3dpdGNoZWQgYmFjayBpbi4gKi8NCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRTX1VOQ0hBTkdFRAkJCTB4MDANCisNCisvKiBTb21lIG1lbW9yeSBhcmVhcyBnZXQgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgVGhlc2UgbWVtb3J5DQorYXJlYSdzIGdldCB1c2VkIGJ5IHRoZSBjb21waWxlciBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UsIGVzcGVjaWFsbHkgd2hlbiANCitwZXJmb3JtaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zLCBvciB3aGVuIHVzaW5nIDMyYml0IGRhdGEgdHlwZXMuICBUaGlzDQorY29uc3RhbnQgZGVmaW5lcyB0aGUgc2l6ZSBvZiBtZW1vcnkgYXJlYSB3aGljaCBtdXN0IGJlIHNhdmVkLiAqLw0KKyNkZWZpbmUgcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkUJKCAoIHVuc2lnbmVkIGNoYXIgKSAweDEzICkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogSU8gcG9ydCBjb25zdGFudHMuICovDQorI2RlZmluZSBwb3J0QklUX1NFVAkJKCAoIHVuc2lnbmVkIGNoYXIgKSAxICkNCisjZGVmaW5lIHBvcnRCSVRfQ0xFQVIJKCAoIHVuc2lnbmVkIGNoYXIgKSAwICkNCisNCisvKg0KKyAqIFRoZSBzZXJpYWwgcG9ydCBJU1IncyBhcmUgZGVmaW5lZCBpbiBzZXJpYWwuYywgYnV0IGFyZSBjYWxsZWQgZnJvbSBwb3J0YWJsZQ0KKyAqIGFzIHRoZXkgdXNlIHRoZSBzYW1lIHZlY3RvciBhcyB0aGUgdGljayBJU1IuDQorICovDQordm9pZCB2U2VyaWFsVHhJU1IoIHZvaWQgKTsNCit2b2lkIHZTZXJpYWxSeElTUiggdm9pZCApOw0KKw0KKy8qDQorICogUGVyZm9ybSBoYXJkd2FyZSBzZXR1cCB0byBlbmFibGUgdGlja3MuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KKw0KKy8qIA0KKyAqIElTUiB0byBtYWludGFpbiB0aGUgdGljaywgYW5kIHBlcmZvcm0gdGljayBjb250ZXh0IHN3aXRjaGVzIGlmIHRoZQ0KKyAqIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2VGlja0lTUiggdm9pZCApOw0KKw0KKy8qDQorICogSVNSIHBsYWNlZCBvbiB0aGUgbG93IHByaW9yaXR5IHZlY3Rvci4gIFRoaXMgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIElTUiBmb3INCisgKiB0aGUgYWN0dWFsIGludGVycnVwdC4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZMb3dJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiANCisgKiBNYWNybyB0aGF0IHB1c2hlcyBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRleHQgb2YgYSB0YXNrIG9udG8NCisgKiB0aGUgc3RhY2ssIHRoZW4gc2F2ZXMgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgaW50byB0aGUgVENCLg0KKyAqIA0KKyAqIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYW4gSVNSIHRoZW4gdGhlIGludGVycnVwdCBlbmFibGUgYml0cyBtdXN0IGhhdmUgYmVlbiANCisgKiBzZXQgZm9yIHRoZSBJU1IgdG8gZXZlciBnZXQgY2FsbGVkLiAgVGhlcmVmb3JlIHdlIHdhbnQgdG8gc2F2ZSB0aGUgSU5UQ09ODQorICogcmVnaXN0ZXIgd2l0aCB0aGUgZW5hYmxlIGJpdHMgZm9yY2VkIHRvIGJlIHNldCAtIGFuZCB1Y0ZvcmNlZEludGVycnVwdEZsYWdzIA0KKyAqIG11c3QgY29udGFpbiB0aGVzZSBiaXQgc2V0dGluZ3MuICBUaGlzIG1lYW5zIHRoZSBpbnRlcnJ1cHRzIHdpbGwgYWdhaW4gYmUNCisgKiBlbmFibGVkIHdoZW4gdGhlIGludGVycnVwdGVkIHRhc2sgaXMgc3dpdGNoZWQgYmFjayBpbi4NCisgKg0KKyAqIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYSBtYW51YWwgY29udGV4dCBzd2l0Y2ggKGkuZS4gZnJvbSBhIGNhbGwgdG8geWllbGQpLA0KKyAqIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZSBJTlRDT04gc28gaXQgaXMgcmVzdG9yZWQgd2l0aCBpdHMgY3VycmVudCBzdGF0ZSwNCisgKiBhbmQgdWNGb3JjZWRJbnRlcnJ1cHRGbGFncyBtdXN0IGJlIDAuICBUaGlzIGFsbG93cyBhIHlpZWxkIGZyb20gd2l0aGluDQorICogYSBjcml0aWNhbCBzZWN0aW9uLg0KKyAqDQorICogVGhlIGNvbXBpbGVyIHVzZXMgc29tZSBsb2NhdGlvbnMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkNCisgKiBzdG9yYWdlIGR1cmluZyBtYXRoIGFuZCBvdGhlciBjb21wdXRhdGlvbnMuICBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZg0KKyAqIDMyYml0IGRhdGEgdHlwZXMgYXJlIHV0aWxpc2VkIChhcyB0aGV5IGFyZSBieSB0aGUgc2NoZWR1bGVyKS4gIFRoZSAudG1wZGF0YQ0KKyAqIGFuZCBNQVRIX0RBVEEgc2VjdGlvbnMgaGF2ZSB0byBiZSBzdG9yZWQgaW4gdGhlcmUgZW50aXJldHkgYXMgcGFydCBvZiBhIHRhc2sNCisgKiBjb250ZXh0LiAgVGhpcyBtYWNybyBzdG9yZXMgZnJvbSBkYXRhIGFkZHJlc3MgMHgwMCB0byANCisgKiBwb3J0Q09NUElMRVJfTUFOQUdFRF9NRU1PUllfU0laRS4gIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgdGhlIGRlbW8gDQorICogYXBwbGljYXRpb25zIGJ1dCB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBtYXAgZmlsZSBmb3IgeW91ciBwcm9qZWN0IHRvIGVuc3VyZSANCisgKiB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIHlvdXIgbmVlZHMuICBJdCBpcyBub3QgY2xlYXIgd2hldGhlciB0aGlzIHNpemUgaXMgDQorICogZml4ZWQgZm9yIGFsbCBjb21waWxhdGlvbnMgb3IgaGFzIHRoZSBwb3RlbnRpYWwgdG8gYmUgcHJvZ3JhbSBzcGVjaWZpYy4NCisgKi8NCisjZGVmaW5lCXBvcnRTQVZFX0NPTlRFWFQoIHVjRm9yY2VkSW50ZXJydXB0RmxhZ3MgKQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFNhdmUgdGhlIHN0YXR1cyBhbmQgV1JFRyByZWdpc3RlcnMgZmlyc3QsIGFzIHRoZXNlIHdpbGwgZ2V0IG1vZGlmaWVkCVwNCisJCWJ5IHRoZSBvcGVyYXRpb25zIGJlbG93LiAqLwkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVdSRUcsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYgICBTVEFUVVMsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJLyogU2F2ZSB0aGUgSU5UQ09OIHJlZ2lzdGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGJpdHMgZm9yY2VkIGlmCQkJXA0KKwkJbmVjZXNzYXJ5IC0gYXMgZGVzY3JpYmVkIGFib3ZlLiAqLwkJCQkJCQkJCQlcDQorCQlNT1ZGRglJTlRDT04sIFdSRUcJCQkJCQkJCQkJCQkJXA0KKwkJSU9STFcJdWNGb3JjZWRJbnRlcnJ1cHRGbGFncwkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJV1JFRywgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogU3RvcmUgdGhlIG5lY2Vzc2FyeSByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiAqLwkJCQkJCVwNCisJCU1PVkZGCUJTUiwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IyTCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IySCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IwTCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IwSCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglUQUJMQVQsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJVEJMUFRSVSwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVRCTFBUUkgsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglUQkxQVFJMLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUFJPREgsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUFJPREwsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUENMQVRVLCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBDTEFUSCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQkvKiBTdG9yZSB0aGUgLnRlbXBkYXRhIGFuZCBNQVRIX0RBVEEgYXJlYXMgYXMgZGVzY3JpYmVkIGFib3ZlLiAqLwkJXA0KKwkJQ0xSRglGU1IwTCwgMAkJCQkJCQkJCQkJCQkJXA0KKwkJQ0xSRglGU1IwSCwgMAkJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglJTkRGMCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IwTCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IwSCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQkvKiBTdG9yZSB0aGUgaGFyZHdhcmUgc3RhY2sgcG9pbnRlciBpbiBhIHRlbXAgcmVnaXN0ZXIgYmVmb3JlIHdlCQlcDQorCQltb2RpZnkgaXQuICovCQkJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJU1RLUFRSLCBGU1IwTAkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBTdG9yZSBlYWNoIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgc3RhY2suICovCQkJCQkJXA0KKwkJd2hpbGUoIFNUS1BUUiA+ICggdW5zaWduZWQgY2hhciApIDAgKQkJCQkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlfYXNtCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJTU9WRkYJVE9TTCwgUFJFSU5DMQkJCQkJCQkJCQkJXA0KKwkJCQlNT1ZGRglUT1NILCBQUkVJTkMxCQkJCQkJCQkJCQlcDQorCQkJCU1PVkZGCVRPU1UsIFBSRUlOQzEJCQkJCQkJCQkJCVwNCisJCQkJUE9QCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9hc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBTdG9yZSB0aGUgbnVtYmVyIG9mIGFkZHJlc3NlcyBvbiB0aGUgaGFyZHdhcmUgc3RhY2sgKGZyb20gdGhlCQlcDQorCQl0ZW1wb3JhcnkgcmVnaXN0ZXIpLiAqLwkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IwTCwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGCVBSRUlOQzEsIDEsIDAJCQkJCQkJCQkJCQkJXA0KKwlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHRoZSBzb2Z0d2FyZSBzdGFjayBpbiB0aGUgVENCLiAqLwkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJcHhDdXJyZW50VENCLCBGU1IwTAkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCXB4Q3VycmVudFRDQiArIDEsIEZTUjBICQkJCQkJCQkJCQlcDQorCQlNT1ZGRglGU1IxTCwgUE9TVElOQzAJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMUgsIFBPU1RJTkMwCQkJCQkJCQkJCQkJCVwNCisJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIHBvcnRTQVZFX0NPTlRFWFQuICBTZWUgcG9ydFNBVkVfQ09OVEVYVCBmb3IgbW9yZQ0KKyAqIGRldGFpbHMuDQorICovDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFNldCBGU1IwIHRvIHBvaW50IHRvIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrLiAqLwkJCQkJXA0KKwkJTU9WRkYJcHhDdXJyZW50VENCLCBGU1IwTAkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCXB4Q3VycmVudFRDQiArIDEsIEZTUjBICQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZS1yZWZlcmVuY2UgRlNSMCB0byBzZXQgdGhlIGFkZHJlc3MgaXQgaG9sZHMgaW50byBGU1IxLgkJCQlcDQorCQkoaS5lLiAqKCBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayApICkuICovCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgRlNSMUwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIEZTUjFICQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIEhvdyBtYW55IHJldHVybiBhZGRyZXNzZXMgYXJlIHRoZXJlIG9uIHRoZSBoYXJkd2FyZSBzdGFjaz8gIERpc2NhcmQJXA0KKwkJdGhlIGZpcnN0IGJ5dGUgYXMgd2UgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXh0IGZyZWUgc3BhY2UuICovCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBMCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IwTAkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEZpbGwgdGhlIGhhcmR3YXJlIHN0YWNrIGZyb20gb3VyIHNvZnR3YXJlIHN0YWNrLiAqLwkJCQkJCVwNCisJU1RLUFRSID0gMDsJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJd2hpbGUoIFNUS1BUUiA8IEZTUjBMICkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfYXNtCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJUFVTSAkJCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NVLCAwCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NILCAwCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NMLCAwCQkJCQkJCQkJCQkJCQlcDQorCQlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogUmVzdG9yZSB0aGUgLnRtcGRhdGEgYW5kIE1BVEhfREFUQSBtZW1vcnkuICovCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBICQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IwTAkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgSU5ERjAJCQkJCQkJCQkJCQkJXA0KKwkJLyogUmVzdG9yZSB0aGUgb3RoZXIgcmVnaXN0ZXJzIGZvcm1pbmcgdGhlIHRhc2tzIGNvbnRleHQuICovCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFBDTEFUSAkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBQQ0xBVFUJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUFJPREwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFBST0RICQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBUQkxQVFJMCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFRCTFBUUkgJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgVEJMUFRSVQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBUQUJMQVQJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgRlNSMEgJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBMCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IySAkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgRlNSMkwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEJTUgkJCQkJCQkJCQkJCQlcDQorCQkvKiBUaGUgbmV4dCBieXRlIGlzIHRoZSBJTlRDT04gcmVnaXN0ZXIuICBSZWFkIHRoaXMgaW50byBXUkVHIGFzIHNvbWUJXA0KKwkJbWFuaXB1bGF0aW9uIGlzIHJlcXVpcmVkLiAqLwkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFdSRUcJCQkJCQkJCQkJCQkJXA0KKwlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBGcm9tIHRoZSBJTlRDT04gcmVnaXN0ZXIsIG9ubHkgdGhlIGludGVycnVwdCBlbmFibGUgYml0cyBmb3JtIHBhcnQJCVwNCisJb2YgdGhlIHRhc2tzIGNvbnRleHQuICBJdCBpcyBwZXJmZWN0bHkgbGVnaXRpbWF0ZSBmb3IgYW5vdGhlciB0YXNrIHRvCQlcDQorCWhhdmUgbW9kaWZpZWQgYW55IG90aGVyIGJpdHMuICBXZSB0aGVyZWZvcmUgb25seSByZXN0b3JlIHRoZSB0b3AgdHdvIGJpdHMuCVwNCisJKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggV1JFRyAmIHBvcnRHTE9CQUxfSU5URVJSVVBUX0ZMQUcgKQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2FzbSAJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlNT1ZGRglQT1NUREVDMSwgU1RBVFVTCQkJCQkJCQkJCQlcDQorCQkJTU9WRkYJUE9TVERFQzEsIFdSRUcJCQkJCQkJCQkJCQlcDQorCQkJLyogUmV0dXJuIGVuYWJsaW5nIGludGVycnVwdHMuICovCQkJCQkJCQkJXA0KKwkJCVJFVEZJRQkwCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfYXNtIAkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCU1PVkZGCVBPU1RERUMxLCBTVEFUVVMJCQkJCQkJCQkJCVwNCisJCQlNT1ZGRglQT1NUREVDMSwgV1JFRwkJCQkJCQkJCQkJCVwNCisJCQkvKiBSZXR1cm4gd2l0aG91dCBlZmZlY3RpbmcgaW50ZXJydXB0cy4gIFRoZSBjb250ZXh0IG1heSBoYXZlCQlcDQorCQkJYmVlbiBzYXZlZCBmcm9tIGEgY3JpdGljYWwgcmVnaW9uLiAqLwkJCQkJCQkJXA0KKwkJCVJFVFVSTgkwCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsQWRkcmVzczsNCit1bnNpZ25lZCBjaGFyIHVjQmxvY2s7DQorDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisNCisJLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkgZ2VuZXJhdGVkDQorCWJ5IHRoZSBjb21waWxlci4gDQorDQorCUZpcnN0IHN0b3JlIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAgVGhpcyBpcyB3aGVyZSB0aGUgdGFzayB3aWxsIGV4cGVjdCB0bw0KKwlmaW5kIHRoZW0gd2hlbiBpdCBzdGFydHMgcnVubmluZy4gKi8NCisJdWxBZGRyZXNzID0gKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdWxBZGRyZXNzICYgKCB1bnNpZ25lZCBsb25nICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwl1bEFkZHJlc3MgPj49IDg7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1bEFkZHJlc3MgJiAoIHVuc2lnbmVkIGxvbmcgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIE5leHQgd2UganVzdCBsZWF2ZSBhIHNwYWNlLiAgV2hlbiBhIGNvbnRleHQgaXMgc2F2ZWQgdGhlIHN0YWNrIHBvaW50ZXINCisJaXMgaW5jcmVtZW50ZWQgYmVmb3JlIGl0IGlzIHVzZWQgc28gYXMgbm90IHRvIGNvcnJ1cHQgd2hhdGV2ZXIgdGhlIHN0YWNrDQorCXBvaW50ZXIgaXMgYWN0dWFsbHkgcG9pbnRpbmcgdG8uICBUaGlzIGlzIGVzcGVjaWFsbHkgbmVjZXNzYXJ5IGR1cmluZyANCisJZnVuY3Rpb24gZXBpbG9ndWUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDsNCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIE5leHQgYXJlIGFsbCB0aGUgcmVnaXN0ZXJzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQorCQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NjY7IC8qIFdSRUcuICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Y2M7IC8qIFN0YXR1cy4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIElOVENPTiBpcyBzYXZlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwb3J0SU5JVEFMX0lOVEVSUlVQVF9TVEFURTsgLyogSU5UQ09OICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTE7IC8qIEJTUi4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjsgLyogRlNSMkwuICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MzM7IC8qIEZTUjJILiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0OyAvKiBGU1IwTC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg1NTsgLyogRlNSMEguICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NjY7IC8qIFRBQkxBVC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDsgLyogVEJMUFRSVS4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg4ODsgLyogVEJMUFRSVUguICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4OTk7IC8qIFRCTFBUUlVMLiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGFhOyAvKiBQUk9ESC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhiYjsgLyogUFJPREwuICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDA7IC8qIFBDTEFUVS4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDsgLyogUENMQVRILiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJLyogTmV4dCB0aGUgLnRtcGRhdGEgYW5kIE1BVEhfREFUQSBzZWN0aW9ucy4gKi8NCisJZm9yKCB1Y0Jsb2NrID0gMDsgdWNCbG9jayA8PSBwb3J0Q09NUElMRVJfTUFOQUdFRF9NRU1PUllfU0laRTsgdWNCbG9jaysrICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSB1Y0Jsb2NrOw0KKwkJKnB4VG9wT2ZTdGFjaysrOw0KKwl9DQorDQorCS8qIFN0b3JlIHRoZSB0b3Agb2YgdGhlIGdsb2JhbCBkYXRhIHNlY3Rpb24uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkU7IC8qIExvdy4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDsgLyogSGlnaC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIFRoZSBvbmx5IGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHNvIGZhciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgDQorCXRhc2suICovDQorCXVsQWRkcmVzcyA9ICggdW5zaWduZWQgbG9uZyApIHB4Q29kZTsNCisNCisJLyogVE9TIGxvdy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVsQWRkcmVzcyAmICggdW5zaWduZWQgbG9uZyApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2srKzsNCisJdWxBZGRyZXNzID4+PSA4Ow0KKw0KKwkvKiBUT1MgaGlnaC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHVsQWRkcmVzcyAmICggdW5zaWduZWQgbG9uZyApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2srKzsNCisJdWxBZGRyZXNzID4+PSA4Ow0KKw0KKwkvKiBUT1MgZXZlbiBoaWdoZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCB1bEFkZHJlc3MgJiAoIHVuc2lnbmVkIGxvbmcgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIFN0b3JlIHRoZSBudW1iZXIgb2YgcmV0dXJuIGFkZHJlc3NlcyBvbiB0aGUgaGFyZHdhcmUgc3RhY2sgLSBzbyBmYXIgb25seQ0KKwl0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeSBwb2ludC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAxOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFNldHVwIGEgdGltZXIgZm9yIHRoZSB0aWNrIElTUiBpcyB1c2luZyB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsgDQorDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICBVc2UgdGhlIGZ1bmN0aW9uIG5hbWUgdG8gc3RvcCBjb21waWxlciB3YXJuaW5ncy4gKi8NCisJKCB2b2lkICkgcHJ2TG93SW50ZXJydXB0Ow0KKwkoIHZvaWQgKSBwcnZUaWNrSVNSOw0KKw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIHNjaGVkdWxlciBmb3IgdGhlIFBJQyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQNCisJb25jZSBydW5uaW5nLiAgSWYgcmVxdWlyZWQgZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZSwgdGhlbiByZXR1cm4gDQorCXRvIHhQb3J0U3RhcnRTY2hlZHVsZXIoKS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2guICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRpY2sgY29udGV4dCBzd2l0Y2gsDQorICogYnV0IGRvZXMgbm90IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gIEl0IG11c3QgYmUgaWRlbnRpY2FsIHRvIHRoZQ0KKyAqIHRpY2sgY29udGV4dCBzd2l0Y2ggaW4gaG93IGl0IHN0b3JlcyB0aGUgc3RhY2sgb2YgYSB0YXNrLg0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQorew0KKwkvKiBUaGlzIGNhbiBnZXQgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlaXRoZXIgZW5hYmxlZCBvciBkaXNhYmxlZC4gIFdlDQorCXdpbGwgc2F2ZSB0aGUgSU5UQ09OIHJlZ2lzdGVyIHdpdGggdGhlIGludGVycnVwdCBlbmFibGUgYml0cyB1bm1vZGlmaWVkLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCBwb3J0SU5URVJSVVBUU19VTkNIQU5HRUQgKTsNCisNCisJLyogU3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKw0KKwkvKiBTdGFydCBleGVjdXRpbmcgdGhlIHRhc2sgd2UgaGF2ZSBqdXN0IHN3aXRjaGVkIHRvLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogVmVjdG9yIGZvciBJU1IuICBOb3RoaW5nIGhlcmUgbXVzdCBhbHRlciBhbnkgcmVnaXN0ZXJzIQ0KKyAqLw0KKyNwcmFnbWEgY29kZSBoaWdoX3ZlY3Rvcj0weDA4DQorc3RhdGljIHZvaWQgcHJ2TG93SW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIFdhcyB0aGUgaW50ZXJydXB0IHRoZSB0aWNrPyAqLw0KKwlpZiggUElSMWJpdHMuQ0NQMUlGICkNCisJewkJDQorCQlfYXNtDQorCQkJZ290byBwcnZUaWNrSVNSDQorCQlfZW5kYXNtDQorCX0NCisNCisJLyogV2FzIHRoZSBpbnRlcnJ1cHQgYSBieXRlIGJlaW5nIHJlY2VpdmVkPyAqLw0KKwlpZiggUElSMWJpdHMuUkNJRiApDQorCXsNCisJCV9hc20NCisJCQlnb3RvIHZTZXJpYWxSeElTUg0KKwkJX2VuZGFzbQ0KKwl9DQorDQorCS8qIFdhcyB0aGUgaW50ZXJydXB0IHRoZSBUeCByZWdpc3RlciBiZWNvbWluZyBlbXB0eT8gKi8NCisJaWYoIFBJUjFiaXRzLlRYSUYgKQ0KKwl7DQorCQlpZiggUElFMWJpdHMuVFhJRSApDQorCQl7DQorCQkJX2FzbQ0KKwkJCQlnb3RvIHZTZXJpYWxUeElTUg0KKwkJCV9lbmRhc20NCisJCX0NCisJfQ0KK30NCisjcHJhZ21hIGNvZGUNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIElTUiBmb3IgdGhlIHRpY2suDQorICogVGhpcyBpbmNyZW1lbnRzIHRoZSB0aWNrIGNvdW50IGFuZCwgaWYgdXNpbmcgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyLCANCisgKiBwZXJmb3JtcyBhIGNvbnRleHQgc3dpdGNoLiAgVGhpcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUgbWFudWFsIA0KKyAqIGNvbnRleHQgc3dpdGNoIGluIGhvdyBpdCBzdG9yZXMgdGhlIGNvbnRleHQgb2YgYSB0YXNrLiANCisgKi8NCitzdGF0aWMgdm9pZCBwcnZUaWNrSVNSKCB2b2lkICkNCit7DQorCS8qIEludGVycnVwdHMgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgdGhlIElTUiB0byBmaXJlLCBzbyB3ZSBoYXZlIHRvIA0KKwlzYXZlIHRoZSBjb250ZXh0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCBwb3J0R0xPQkFMX0lOVEVSUlVQVF9GTEFHICk7DQorCVBJUjFiaXRzLkNDUDFJRiA9IDA7DQorDQorCS8qIE1haW50YWluIHRoZSB0aWNrIGNvdW50LiAqLw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJew0KKwkJLyogU3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJfQ0KKwkjZW5kaWYNCisNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldHVwIGEgdGltZXIgZm9yIGEgcmVndWxhciB0aWNrLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsQ29uc3RDb21wYXJlVmFsdWUgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFRJTUVSX0ZPU0NfU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KK3Vuc2lnbmVkIGxvbmcgdWxDb21wYXJlVmFsdWU7DQordW5zaWduZWQgY2hhciB1Y0J5dGU7DQorDQorCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuDQorDQorCVNldHVwIENDUDEgdG8gcHJvdmlkZSB0aGUgdGljayBpbnRlcnJ1cHQgdXNpbmcgYSBjb21wYXJlIG1hdGNoIG9uIHRpbWVyDQorCTEuDQorDQorCUNsZWFyIHRoZSB0aW1lIGNvdW50IHRoZW4gc2V0dXAgdGltZXIuICovDQorCVRNUjFIID0gKCB1bnNpZ25lZCBjaGFyICkgMHgwMDsNCisJVE1SMUwgPSAoIHVuc2lnbmVkIGNoYXIgKSAweDAwOw0KKw0KKwkvKiBTZXQgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUuICovDQorCXVsQ29tcGFyZVZhbHVlID0gdWxDb25zdENvbXBhcmVWYWx1ZTsNCisJQ0NQUjFMID0gKCB1bnNpZ25lZCBjaGFyICkgKCB1bENvbXBhcmVWYWx1ZSAmICggdW5zaWduZWQgbG9uZyApIDB4ZmYgKTsNCisJdWxDb21wYXJlVmFsdWUgPj49ICggdW5zaWduZWQgbG9uZyApIDg7DQorCUNDUFIxSCA9ICggdW5zaWduZWQgY2hhciApICggdWxDb21wYXJlVmFsdWUgJiAoIHVuc2lnbmVkIGxvbmcgKSAweGZmICk7CQ0KKw0KKwlDQ1AxQ09OYml0cy5DQ1AxTTAgPSBwb3J0QklUX1NFVDsJLyo8IENvbXBhcmUgbWF0Y2ggbW9kZS4gKi8NCisJQ0NQMUNPTmJpdHMuQ0NQMU0xID0gcG9ydEJJVF9TRVQ7CS8qPCBDb21wYXJlIG1hdGNoIG1vZGUuICovDQorCUNDUDFDT05iaXRzLkNDUDFNMiA9IHBvcnRCSVRfQ0xFQVI7CS8qPCBDb21wYXJlIG1hdGNoIG1vZGUuICovDQorCUNDUDFDT05iaXRzLkNDUDFNMyA9IHBvcnRCSVRfU0VUOwkvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KKwlQSUUxYml0cy5DQ1AxSUUgPSBwb3J0QklUX1NFVDsJCS8qPCBJbnRlcnJ1cHQgZW5hYmxlLiAqLw0KKw0KKwkvKiBXZSBhcmUgb25seSBnb2luZyB0byB1c2UgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0LCBzbyBzZXQgdGhlIHBlcmlwaGVyYWwNCisJYml0IHRvIHRydWUuICovDQorCUlOVENPTmJpdHMuR0lFTCA9IHBvcnRCSVRfU0VUOw0KKw0KKwkvKiBQcm92aWRlZCBsaWJyYXJ5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgcHJvZHVjZSB0aGUNCisJdGljay4gKi8NCisJT3BlblRpbWVyMSggVDFfMTZCSVRfUlcgJiBUMV9TT1VSQ0VfSU5UICYgVDFfUFNfMV8xICYgVDFfQ0NQMV9UM19DQ1AyICk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMxOEYvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMThGL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDdiODAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMThGL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCWludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgY2hhcg0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydEdMT0JBTF9JTlRfRU5BQkxFX0JJVAkweDgwDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlJTlRDT05iaXRzLkdJRUggPSAwOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCUlOVENPTmJpdHMuR0lFSCA9IDE7DQorDQorLyogUHVzaCB0aGUgSU5UQ09OIHJlZ2lzdGVyIG9udG8gdGhlIHN0YWNrLCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQlQT1NUSU5DMSA9IElOVENPTjsJCQkJXA0KKwkJCQkJCQkJCUlOVENPTmJpdHMuR0lFSCA9IDA7DQorDQorLyogUmV0cmlldmUgdGhlIElOVENPTiByZWdpc3RlciBmcm9tIHRoZSBzdGFjaywgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzDQoraWYgdGhleSB3ZXJlIHNhdmVkIGFzIGJlaW5nIGVuYWJsZWQuICBEb24ndCBtb2RpZnkgYW55IG90aGVyIGJpdHMNCit3aXRoaW4gdGhlIElOVENPTiByZWdpc3RlciBhcyB0aGVzZSBtYXkgaGF2ZSBsYWdpdGltYXRlbHkgaGF2ZSBiZWVuDQorbW9kaWZpZWQgd2l0aGluIHRoZSBjcml0aWNhbCByZWdpb24uICovDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJX2FzbQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJTU9WRglQT1NUREVDMSwgMSwgMAkJCQlcDQorCQkJCQkJCQkJX2VuZGFzbQkJCQkJCQkJCVwNCisJCQkJCQkJCQlpZiggSU5ERjEgJiBwb3J0R0xPQkFMX0lOVF9FTkFCTEVfQklUICkJXA0KKwkJCQkJCQkJCXsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQlcDQorCQkJCQkJCQkJfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCXZQb3J0WWllbGQoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBSZXF1aXJlZCBieSB0aGUga2VybmVsIGF3YXJlIGRlYnVnZ2VyLiAqLw0KKyNpZmRlZiBfX0RFQlVHDQorCSNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorI2VuZGlmDQorDQorDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJX2FzbQlcDQorCQkJCQkJCQkJTk9QIFwNCisJCQkJCQkJCV9lbmRhc20NCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMThGL3N0ZGlvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMThGL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMxOEYvc3RkaW8uaApkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjNzA4MQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0LmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorCUNoYW5nZXMgZnJvbSBWNC4yLjENCisNCisJKyBJbnRyb2R1Y2VkIHRoZSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIGRlZmluaXRpb24uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzI0IHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZSBmaWxlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCSVRfU0VUIDENCisjZGVmaW5lIHBvcnRUSU1FUl9QUkVTQ0FMRSA4DQorI2RlZmluZSBwb3J0SU5JVElBTF9TUgkwDQorDQorLyogRGVmaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSB3aXRoIHByb2plY3QgY3JlYXRlZCBwcmlvciB0byANCitGcmVlUlRPUy5vcmcgVjQuMy4wLiAqLw0KKyNpZm5kZWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkjZGVmaW5lIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgMQ0KKyNlbmRpZg0KKw0KKy8qIFRoZSBwcm9ncmFtIGNvdW50ZXIgaXMgb25seSAyMyBiaXRzLiAqLw0KKyNkZWZpbmUgcG9ydFVOVVNFRF9QUl9CSVRTCTB4N2YNCisNCisvKiBSZWNvcmRzIHRoZSBuZXN0aW5nIGRlcHRoIG9mIGNhbGxzIHRvIHBvcnRFTlRFUl9DUklUSUNBTCgpLiAqLw0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3RpbmcgPSAweGVmOw0KKw0KKyNpZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICE9IDENCisJI2Vycm9yIElmIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMgbm90IDEgdGhlbiB0aGUgIzMyIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIG5lZWRzIGNoYW5naW5nIHRvIGVxdWFsIHRoZSBwb3J0SU5URVJSVVBUX0JJVFMgdmFsdWUsIHdoaWNoIGlzICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCA1ICkNCisjZW5kaWYNCisNCisjaWZkZWYgTVBMQUJfUElDMjRfUE9SVA0KKw0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUoCSJNT1YJX3B4Q3VycmVudFRDQiwgVzAJCVxuIgkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkJCQkJCSJNT1YJW1cwXSwgVzE1CQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlXMAkJCQkJCVxuIgkvKiBSZXN0b3JlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50ZXIgZm9yIHRoZSB0YXNrLiAqLwlcDQorCQkJCQkJIk1PVglXMCwgX3V4Q3JpdGljYWxOZXN0aW5nCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlQU1ZQQUcJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlDT1JDT04JCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlUQkxQQUcJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlSQ09VTlQJCQkJCVxuIgkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suICovCQkJCQlcDQorCQkJCQkJIlBPUAlXMTQJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXMTIJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXMTAJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXOAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVc2CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QLkQJVzQJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXMgkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcwCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCVNSCQkJCQkJICAiICk7DQorDQorI2VuZGlmIC8qIE1QTEFCX1BJQzI0X1BPUlQgKi8NCisNCisjaWZkZWYgTVBMQUJfRFNQSUNfUE9SVA0KKw0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUoCSJNT1YJX3B4Q3VycmVudFRDQiwgVzAJCVxuIgkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkJCQkJCSJNT1YJW1cwXSwgVzE1CQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlXMAkJCQkJCVxuIgkvKiBSZXN0b3JlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50ZXIgZm9yIHRoZSB0YXNrLiAqLwlcDQorCQkJCQkJIk1PVglXMCwgX3V4Q3JpdGljYWxOZXN0aW5nCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlQU1ZQQUcJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlDT1JDT04JCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET0VOREgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET0VOREwJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET1NUQVJUSAkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJRE9TVEFSVEwJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCURDT1VOVAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCUFDQ0JVCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJQUNDQkgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlBQ0NCTAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCUFDQ0FVCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJQUNDQUgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlBQ0NBTAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCVRCTFBBRwkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCVJDT1VOVAkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCVwNCisJCQkJCQkiUE9QCVcxNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcxMgkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcxMAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVc4CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QLkQJVzYJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcyCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QLkQJVzAJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJU1IJCQkJCQkgICIgKTsNCisNCisjZW5kaWYgLyogTVBMQUJfRFNQSUNfUE9SVCAqLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIHNob3J0IHVzQ29kZTsNCitwb3J0QkFTRV9UWVBFIGk7DQorDQorY29uc3QgcG9ydFNUQUNLX1RZUEUgeEluaXRpYWxTdGFja1tdID0gDQorew0KKwkweDExMTEsCS8qIFcxICovDQorCTB4MjIyMiwgLyogVzIgKi8NCisJMHgzMzMzLCAvKiBXMyAqLw0KKwkweDQ0NDQsIC8qIFc0ICovDQorCTB4NTU1NSwgLyogVzUgKi8NCisJMHg2NjY2LCAvKiBXNiAqLw0KKwkweDc3NzcsIC8qIFc3ICovDQorCTB4ODg4OCwgLyogVzggKi8NCisJMHg5OTk5LCAvKiBXOSAqLw0KKwkweGFhYWEsIC8qIFcxMCAqLw0KKwkweGJiYmIsIC8qIFcxMSAqLw0KKwkweGNjY2MsIC8qIFcxMiAqLw0KKwkweGRkZGQsIC8qIFcxMyAqLw0KKwkweGVlZWUsIC8qIFcxNCAqLw0KKwkweGNkY2UsIC8qIFJDT1VOVCAqLw0KKwkweGFiYWMsIC8qIFRCTFBBRyAqLw0KKw0KKwkvKiBkc1BJQyBzcGVjaWZpYyByZWdpc3RlcnMuICovDQorCSNpZmRlZiBNUExBQl9EU1BJQ19QT1JUDQorCQkweDAyMDIsIC8qIEFDQ0FMICovDQorCQkweDAzMDMsIC8qIEFDQ0FIICovDQorCQkweDA0MDQsIC8qIEFDQ0FVICovDQorCQkweDA1MDUsIC8qIEFDQ0JMICovDQorCQkweDA2MDYsIC8qIEFDQ0JIICovDQorCQkweDA3MDcsIC8qIEFDQ0JVICovDQorCQkweDA4MDgsIC8qIERDT1VOVCAqLw0KKwkJMHgwOTBhLCAvKiBET1NUQVJUTCAqLw0KKwkJMHgxMDEwLCAvKiBET1NUQVJUSCAqLw0KKwkJMHgxMTEwLCAvKiBET0VOREwgKi8NCisJCTB4MTIxMiwgLyogRE9FTkRIICovDQorCSNlbmRpZg0KK307DQorDQorCS8qIFNldHVwIHRoZSBzdGFjayBhcyBpZiBhIHlpZWxkIGhhZCBvY2N1cnJlZC4NCisNCisJU2F2ZSB0aGUgbG93IGJ5dGVzIG9mIHRoZSBwcm9ncmFtIGNvdW50ZXIuICovDQorCXVzQ29kZSA9ICggdW5zaWduZWQgc2hvcnQgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdXNDb2RlOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJLyogU2F2ZSB0aGUgaGlnaCBieXRlIG9mIHRoZSBwcm9ncmFtIGNvdW50ZXIuICBUaGlzIHdpbGwgYWx3YXlzIGJlIHplcm8NCisJaGVyZSBhcyBpdCBpcyBwYXNzZWQgaW4gYSAxNmJpdCBwb2ludGVyLiAgSWYgdGhlIGFkZHJlc3MgaXMgZ3JlYXRlciB0aGFuDQorCTE2IGJpdHMgdGhlbiB0aGUgcG9pbnRlciB3aWxsIHBvaW50IHRvIGEganVtcCB0YWJsZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAwOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJLyogU3RhdHVzIHJlZ2lzdGVyIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1I7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkvKiBQYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4gVzAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJZm9yKCBpID0gMDsgaSA8ICggc2l6ZW9mKCB4SW5pdGlhbFN0YWNrICkgLyBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKTsgaSsrICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9IHhJbml0aWFsU3RhY2tbIGkgXTsNCisJCXB4VG9wT2ZTdGFjaysrOw0KKwl9DQorDQorCSpweFRvcE9mU3RhY2sgPSBDT1JDT047DQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gUFNWUEFHOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJLyogRmluYWxseSB0aGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU2V0dXAgYSB0aW1lciBmb3IgdGhlIHRpY2sgSVNSLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7IA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRvIHJ1bi4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKwkvKiBTaW11bGF0ZSB0aGUgZW5kIG9mIHRoZSB5aWVsZCBmdW5jdGlvbi4gKi8NCisJYXNtIHZvbGF0aWxlICggInJldHVybiIgKTsNCisNCisJLyogU2hvdWxkIG5vdCByZWFjaCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIHNjaGVkdWxlciBmb3IgdGhlIFBJQyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQNCisJb25jZSBydW5uaW5nLiAgSWYgcmVxdWlyZWQgZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZSwgdGhlbiByZXR1cm4gDQorCXRvIHhQb3J0U3RhcnRTY2hlZHVsZXIoKS4gKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCBhIHRpbWVyIGZvciBhIHJlZ3VsYXIgdGljay4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bENvbXBhcmVNYXRjaCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMTsNCisNCisJLyogUHJlc2NhbGUgb2YgOC4gKi8NCisJVDFDT04gPSAwOw0KKwlUTVIxID0gMDsNCisNCisJUFIxID0gKCB1bnNpZ25lZCBzaG9ydCApIHVsQ29tcGFyZU1hdGNoOw0KKw0KKwkvKiBTZXR1cCB0aW1lciAxIGludGVycnVwdCBwcmlvcml0eS4gKi8NCisJSVBDMGJpdHMuVDFJUCA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYXMgYSBzdGFydGluZyBjb25kaXRpb24uICovDQorCUlGUzBiaXRzLlQxSUYgPSAwOw0KKw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gKi8NCisJSUVDMGJpdHMuVDFJRSA9IDE7DQorDQorCS8qIFNldHVwIHRoZSBwcmVzY2FsZSB2YWx1ZS4gKi8NCisJVDFDT05iaXRzLlRDS1BTMCA9IDE7DQorCVQxQ09OYml0cy5UQ0tQUzEgPSAwOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIuICovDQorCVQxQ09OYml0cy5UT04gPSAxOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXV4Q3JpdGljYWxOZXN0aW5nKys7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJdXhDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIF9fYXR0cmlidXRlX18oKF9faW50ZXJydXB0X18sIGF1dG9fcHN2KSkgX1QxSW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENsZWFyIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCUlGUzBiaXRzLlQxSUYgPSAwOw0KKw0KKwl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCXBvcnRZSUVMRCgpOw0KKwkjZW5kaWYNCit9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRhc21fUElDMjQuUyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0YXNtX1BJQzI0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjODJkZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0YXNtX1BJQzI0LlMKQEAgLTAsMCArMSwxMTcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyAgICAgICAgLmdsb2JhbCBfdlBvcnRZaWVsZA0KKwkJLmV4dGVybiBfdlRhc2tTd2l0Y2hDb250ZXh0DQorCQkuZXh0ZXJuIHV4Q3JpdGljYWxOZXN0aW5nDQorDQorX3ZQb3J0WWllbGQ6DQorDQorCQlQVVNICVNSCQkJCQkJLyogU2F2ZSB0aGUgU1IgdXNlZCBieSB0aGUgdGFzay4uLi4gKi8NCisJCVBVU0gJVzAJCQkJCQkvKiAuLi4udGhlbiBkaXNhYmxlIGludGVycnVwdHMuICovDQorCQlNT1YJCSMzMiwgVzANCisJCU1PVgkJVzAsIFNSDQorCQlQVVNICVcxCQkJCQkJLyogU2F2ZSByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiAqLw0KKwkJUFVTSC5ECVcyDQorCQlQVVNILkQJVzQNCisJCVBVU0guRAlXNg0KKwkJUFVTSC5EIAlXOA0KKwkJUFVTSC5EIAlXMTANCisJCVBVU0guRAlXMTINCisJCVBVU0gJVzE0DQorCQlQVVNICVJDT1VOVA0KKwkJUFVTSAlUQkxQQUcNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDQorCQlQVVNICUNPUkNPTg0KKwkJUFVTSAlQU1ZQQUcNCisJCU1PVgkJX3V4Q3JpdGljYWxOZXN0aW5nLCBXMAkJLyogU2F2ZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudGVyIGZvciB0aGUgdGFzay4gKi8NCisJCVBVU0gJVzANCisJCU1PVgkJX3B4Q3VycmVudFRDQiwgVzAJCQkvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIFRDQi4gKi8NCisJCU1PVgkJVzE1LCBbVzBdDQorDQorCQljYWxsIAlfdlRhc2tTd2l0Y2hDb250ZXh0DQorDQorCQlNT1YJCV9weEN1cnJlbnRUQ0IsIFcwCQkJLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2suICovDQorCQlNT1YJCVtXMF0sIFcxNQ0KKwkJUE9QCQlXMAkJCQkJCQkvKiBSZXN0b3JlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50ZXIgZm9yIHRoZSB0YXNrLiAqLw0KKwkJTU9WCQlXMCwgX3V4Q3JpdGljYWxOZXN0aW5nDQorCQlQT1AJCVBTVlBBRw0KKwkJUE9QCQlDT1JDT04NCisJCVBPUAkJVEJMUEFHDQorCQlQT1AJCVJDT1VOVAkJCQkJCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8NCisJCVBPUAkJVzE0DQorCQlQT1AuRAlXMTINCisJCVBPUC5ECVcxMA0KKwkJUE9QLkQJVzgNCisJCVBPUC5ECVc2DQorCQlQT1AuRAlXNA0KKwkJUE9QLkQJVzINCisJCVBPUC5ECVcwDQorCQlQT1AJCVNSDQorDQorICAgICAgICByZXR1cm4NCisNCisgICAgICAgIC5lbmQNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMjRfZHNQSUMvcG9ydGFzbV9kc1BJQy5TIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRhc21fZHNQSUMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZjMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRhc21fZHNQSUMuUwpAQCAtMCwwICsxLDE0MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorICAgICAgICAuZ2xvYmFsIF92UG9ydFlpZWxkDQorCQkuZXh0ZXJuIF92VGFza1N3aXRjaENvbnRleHQNCisJCS5leHRlcm4gdXhDcml0aWNhbE5lc3RpbmcNCisNCitfdlBvcnRZaWVsZDoNCisNCisJCVBVU0gJU1IJCQkJCQkvKiBTYXZlIHRoZSBTUiB1c2VkIGJ5IHRoZSB0YXNrLi4uLiAqLw0KKwkJUFVTSAlXMAkJCQkJCS8qIC4uLi50aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCisJCU1PVgkJIzMyLCBXMA0KKwkJTU9WCQlXMCwgU1INCisJCVBVU0gJVzEJCQkJCQkvKiBTYXZlIHJlZ2lzdGVycyB0byB0aGUgc3RhY2suICovDQorCQlQVVNILkQJVzINCisJCVBVU0guRAlXNA0KKwkJUFVTSC5ECVc2DQorCQlQVVNILkQgCVc4DQorCQlQVVNILkQgCVcxMA0KKwkJUFVTSC5ECVcxMg0KKwkJUFVTSAlXMTQNCisJCVBVU0gJUkNPVU5UDQorCQlQVVNICVRCTFBBRw0KKwkJUFVTSAlBQ0NBTA0KKwkJUFVTSAlBQ0NBSA0KKwkJUFVTSAlBQ0NBVQ0KKwkJUFVTSAlBQ0NCTA0KKwkJUFVTSAlBQ0NCSA0KKwkJUFVTSAlBQ0NCVQ0KKwkJUFVTSAlEQ09VTlQNCisJCVBVU0gJRE9TVEFSVEwNCisJCVBVU0gJRE9TVEFSVEgNCisJCVBVU0gJRE9FTkRMDQorCQlQVVNICURPRU5ESA0KKwkJDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ0KKwkJUFVTSAlDT1JDT04NCisJCVBVU0gJUFNWUEFHDQorCQlNT1YJCV91eENyaXRpY2FsTmVzdGluZywgVzAJCS8qIFNhdmUgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnRlciBmb3IgdGhlIHRhc2suICovDQorCQlQVVNICVcwDQorCQlNT1YJCV9weEN1cnJlbnRUQ0IsIFcwCQkJLyogU2F2ZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBpbnRvIHRoZSBUQ0IuICovDQorCQlNT1YJCVcxNSwgW1cwXQ0KKw0KKwkJY2FsbCAJX3ZUYXNrU3dpdGNoQ29udGV4dA0KKw0KKwkJTU9WCQlfcHhDdXJyZW50VENCLCBXMAkJCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIHRoZSB0YXNrLiAqLw0KKwkJTU9WCQlbVzBdLCBXMTUNCisJCVBPUAkJVzAJCQkJCQkJLyogUmVzdG9yZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudGVyIGZvciB0aGUgdGFzay4gKi8NCisJCU1PVgkJVzAsIF91eENyaXRpY2FsTmVzdGluZw0KKwkJUE9QCQlQU1ZQQUcNCisJCVBPUAkJQ09SQ09ODQorCQlQT1AJCURPRU5ESA0KKwkJUE9QCQlET0VOREwNCisJCVBPUAkJRE9TVEFSVEgNCisJCVBPUAkJRE9TVEFSVEwNCisJCVBPUAkJRENPVU5UDQorCQlQT1AJCUFDQ0JVDQorCQlQT1AJCUFDQ0JIDQorCQlQT1AJCUFDQ0JMDQorCQlQT1AJCUFDQ0FVDQorCQlQT1AJCUFDQ0FIDQorCQlQT1AJCUFDQ0FMDQorCQlQT1AJCVRCTFBBRw0KKwkJUE9QCQlSQ09VTlQJCQkJCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suICovDQorCQlQT1AJCVcxNA0KKwkJUE9QLkQJVzEyDQorCQlQT1AuRAlXMTANCisJCVBPUC5ECVc4DQorCQlQT1AuRAlXNg0KKwkJUE9QLkQJVzQNCisJCVBPUC5ECVcyDQorCQlQT1AuRAlXMA0KKwkJUE9QCQlTUg0KKw0KKyAgICAgICAgcmV0dXJuDQorDQorICAgICAgICAuZW5kDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWY0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMjRfZHNQSUMvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHNob3J0DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXNob3J0DQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCTENCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX0JJVFMJCQkoICggdW5zaWduZWQgcG9ydFNIT1JUICkgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCAoIHVuc2lnbmVkIHBvcnRTSE9SVCApIDUgKQ0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCVNSIHw9IHBvcnRJTlRFUlJVUFRfQklUUyAgICAgICAgICAgICAgICAgICAgDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJU1IgJj0gfnBvcnRJTlRFUlJVUFRfQklUUw0KKw0KKy8qIE5vdGUgdGhhdCBleGl0aW5nIGEgY3JpdGljYWwgc2VjdGlubyB3aWxsIHNldCB0aGUgSVBMIGJpdHMgdG8gMCwgbm9tYXR0ZXINCit3aGF0IHRoZWlyIHZhbHVlIHdhcyBwcmlvciB0byBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8NCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCWFzbSB2b2xhdGlsZSAoICJDQUxMIF92UG9ydFlpZWxkCQkJXG4iCQlcDQorCQkJCQkJCQkJCQkJIk5PUAkJCQkJICAiICk7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgYXdhcmUgZGVidWdnZXIuICovDQorI2lmZGVmIF9fREVCVUcNCisJI2RlZmluZSBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCisjZW5kaWYNCisNCisjZGVmaW5lIHBvcnROT1AoKQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL0lTUl9TdXBwb3J0LmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9JU1JfU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTI2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9JU1JfU3VwcG9ydC5oCkBAIC0wLDAgKzEsMjMwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisNCisjZGVmaW5lIHBvcnRDT05URVhUX1NJWkUgMTMyDQorI2RlZmluZSBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OCTEyNA0KKyNkZWZpbmUgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTiAxMjgNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAJDQorLm1hY3JvCXBvcnRTQVZFX0NPTlRFWFQNCisNCisJLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gd2UgY2FuIA0KKwltYW5pcHVsYXRlIGl0LCBhbmQgdGhlIGNhdXNlIGFuZCBFUEMgcmVnaXN0ZXJzIHNvIHdlIGNhcHR1cmUgdGhlaXIgDQorCW9yaWdpbmFsIHZhbHVlcyBpbiBjYXNlIG9mIGludGVycnVwdCBuZXN0aW5nLiAqLw0KKwltZmMwCQlrMCwgX0NQMF9DQVVTRQ0KKwlhZGRpdQkJc3AsCXNwLCAtcG9ydENPTlRFWFRfU0laRQ0KKwltZmMwCQlrMSwgX0NQMF9TVEFUVVMNCisNCisJLyogQWxzbyBzYXZlIHM2IGFuZCBzNSBzbyB3ZSBjYW4gdXNlIHRoZW0gZHVyaW5nIHRoaXMgaW50ZXJydXB0LiAgQW55DQorCW5lc3RpbmcgaW50ZXJydXB0cyBzaG91bGQgbWFpbnRhaW4gdGhlIHZhbHVlcyBvZiB0aGVzZSByZWdpc3RlcnMNCisJYWNyb3NzIHRoZSBJU1IuICovDQorCXN3CQkJczYsIDQ0KHNwKQ0KKwlzdwkJCXM1LCA0MChzcCkNCisJc3cJCQlrMSwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTihzcCkNCisNCisJLyogRW5hYmxlIGludGVycnVwdHMgYWJvdmUgdGhlIGN1cnJlbnQgcHJpb3JpdHkuICovDQorCXNybAkJCWswLCBrMCwgMHhhDQorCWlucyAJCWsxLCBrMCwgMTAsIDYNCisJaW5zCQkJazEsIHplcm8sIDEsIDQNCisNCisJLyogczUgaXMgdXNlZCBhcyB0aGUgZnJhbWUgcG9pbnRlci4gKi8NCisJYWRkCQkJczUsIHplcm8sIHNwDQorDQorCS8qIENoZWNrIHRoZSBuZXN0aW5nIGNvdW50IHZhbHVlLiAqLw0KKwlsYQkJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCisJbHcJCQlzNiwgKGswKQ0KKw0KKwkvKiBJZiB0aGUgbmVzdGluZyBjb3VudCBpcyAwIHRoZW4gc3dhcCB0byB0aGUgdGhlIHN5c3RlbSBzdGFjaywgb3RoZXJ3aXNlDQorCXRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KKwlibmUJCQlzNiwgemVybywgLisyMA0KKwlub3ANCisNCisJLyogU3dhcCB0byB0aGUgc3lzdGVtIHN0YWNrLiAqLw0KKwlsYQkJCXNwLCB4SVNSU3RhY2tUb3ANCisJbHcJCQlzcCwgKHNwKQ0KKw0KKwkvKiBJbmNyZW1lbnQgYW5kIHNhdmUgdGhlIG5lc3RpbmcgY291bnQuICovDQorCWFkZGl1CQlzNiwgczYsIDENCisJc3cJCQlzNiwgMChrMCkNCisNCisJLyogczYgaG9sZHMgdGhlIEVQQyB2YWx1ZSwgdGhpcyBpcyBzYXZlZCBhZnRlciBpbnRlcnJ1cHRzIGFyZSByZS1lbmFibGVkLiAqLw0KKwltZmMwIAkJczYsIF9DUDBfRVBDDQorDQorCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwltdGMwCQlrMSwgX0NQMF9TVEFUVVMNCisNCisJLyogU2F2ZSB0aGUgY29udGV4dCBpbnRvIHRoZSBzcGFjZSBqdXN0IGNyZWF0ZWQuICBzNiBpcyBzYXZlZCBhZ2Fpbg0KKwloZXJlIGFzIGl0IG5vdyBjb250YWlucyB0aGUgRVBDIHZhbHVlLiAgTm8gb3RoZXIgcyByZWdpc3RlcnMgbmVlZCBiZQ0KKwlzYXZlZC4gKi8NCisJc3cJCQlyYSwJMTIwKHM1KQ0KKwlzdwkJCXM4LCAxMTYoczUpDQorCXN3CQkJdDksIDExMihzNSkNCisJc3cJCQl0OCwJMTA4KHM1KQ0KKwlzdwkJCXQ3LAkxMDQoczUpDQorCXN3CQkJdDYsIDEwMChzNSkNCisJc3cJCQl0NSwgOTYoczUpDQorCXN3CQkJdDQsIDkyKHM1KQ0KKwlzdwkJCXQzLCA4OChzNSkNCisJc3cJCQl0MiwgODQoczUpDQorCXN3CQkJdDEsIDgwKHM1KQ0KKwlzdwkJCXQwLCA3NihzNSkNCisJc3cJCQlhMywgNzIoczUpDQorCXN3CQkJYTIsIDY4KHM1KQ0KKwlzdwkJCWExLCA2NChzNSkNCisJc3cJCQlhMCwgNjAoczUpDQorCXN3CQkJdjEsIDU2KHM1KQ0KKwlzdwkJCXYwLCA1MihzNSkNCisJc3cJCQlzNiwgcG9ydEVQQ19TVEFDS19MT0NBVElPTihzNSkNCisJc3cJCQkkMSwgMTYoczUpDQorDQorCS8qIHM2IGlzIHVzZWQgYXMgYSBzY3JhdGNoIHJlZ2lzdGVyLiAqLw0KKwltZmhpCQlzNg0KKwlzdwkJCXM2LCAxMihzNSkNCisJbWZsbwkJczYNCisJc3cJCQlzNiwgOChzNSkNCisNCisJLyogVXBkYXRlIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIgdmFsdWUgaWYgbmVzdGluZyBpcyB6ZXJvLiAqLw0KKwlsYQkJCXM2LCB1eEludGVycnVwdE5lc3RpbmcNCisJbHcJCQlzNiwgKHM2KQ0KKwlhZGRpdQkJczYsIHM2LCAtMQ0KKwlibmUJCQlzNiwgemVybywgLisyMA0KKwlub3ANCisNCisJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJbGEJCQlzNiwgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXINCisJc3cJCQlzNSwgKHM2KQ0KKw0KKwkuZW5kbQ0KKwkNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkNCisubWFjcm8JcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gIFRoaXMgaXMgb25seSBkb25lIGlmIHRoZQ0KKwluZXN0aW5nIGNvdW50IGlzIDEuICovDQorCWxhCQkJczYsIHV4SW50ZXJydXB0TmVzdGluZw0KKwlsdwkJCXM2LCAoczYpDQorCWFkZGl1CQlzNiwgczYsIC0xDQorCWJuZQkJCXM2LCB6ZXJvLCAuKzIwDQorCW5vcA0KKwlsYQkJCXM2LCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlcg0KKwlsdwkJCXM1LCAoczYpDQorCQ0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KKwlsdwkJCXM2LCA4KHM1KQ0KKwltdGxvCQlzNg0KKwlsdwkJCXM2LCAxMihzNSkNCisJbXRoaQkJczYNCisJbHcJCQkkMSwgMTYoczUpDQorCS8qIHM2IGlzIGxvYWRlZCBhcyBpdCB3YXMgdXNlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIHRoZXJlZm9yZSBzYXZlZA0KKwlhcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4gKi8NCisJbHcJCQlzNiwgNDQoczUpDQorCWx3CQkJdjAsIDUyKHM1KQ0KKwlsdwkJCXYxLCA1NihzNSkNCisJbHcJCQlhMCwgNjAoczUpDQorCWx3CQkJYTEsIDY0KHM1KQ0KKwlsdwkJCWEyLCA2OChzNSkNCisJbHcJCQlhMywgNzIoczUpDQorCWx3CQkJdDAsIDc2KHM1KQ0KKwlsdwkJCXQxLCA4MChzNSkNCisJbHcJCQl0MiwgODQoczUpDQorCWx3CQkJdDMsIDg4KHM1KQ0KKwlsdwkJCXQ0LCA5MihzNSkNCisJbHcJCQl0NSwgOTYoczUpDQorCWx3CQkJdDYsIDEwMChzNSkNCisJbHcJCQl0NywgMTA0KHM1KQ0KKwlsdwkJCXQ4LCAxMDgoczUpDQorCWx3CQkJdDksIDExMihzNSkNCisJbHcJCQlzOCwgMTE2KHM1KQ0KKwlsdwkJCXJhLCAxMjAoczUpDQorDQorCS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCisJZGkNCisNCisJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KKwlsYQkJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCisJbHcJCQlrMSwgKGswKQ0KKwlhZGRpdQkJazEsIGsxLCAtMQ0KKwlzdwkJCWsxLCAwKGswKQ0KKw0KKwlsdwkJCWswLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KKwlsdwkJCWsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KKw0KKwkvKiBMZWF2ZSB0aGUgc3RhY2sgaG93IHdlIGZvdW5kIGl0LiAgRmlyc3QgbG9hZCBzcCBmcm9tIHM1LCB0aGVuIHJlc3RvcmUNCisJczUgZnJvbSB0aGUgc3RhY2suICovDQorCWFkZAkJCXNwLCB6ZXJvLCBzNQ0KKwlsdwkJCXM1LCA0MChzcCkNCisJYWRkaXUJCXNwLAlzcCwJcG9ydENPTlRFWFRfU0laRQ0KKw0KKwltdGMwCQlrMCwgX0NQMF9TVEFUVVMNCisJbXRjMCAJCWsxLCBfQ1AwX0VQQw0KKwllaGINCisJZXJldCANCisJbm9wDQorDQorCS5lbmRtDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0LmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUElDMzJNWCBwb3J0Lg0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlIGZpbGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFRJTUVSX1BSRVNDQUxFIDgNCisNCisvKiBCaXRzIHdpdGhpbiB2YXJpb3VzIHJlZ2lzdGVycy4gKi8NCisjZGVmaW5lIHBvcnRJRV9CSVQJCQkJCSggMHgwMDAwMDAwMSApDQorI2RlZmluZSBwb3J0RVhMX0JJVAkJCQkJKCAweDAwMDAwMDAyICkNCisNCisvKiBUaGUgRVhMIGJpdCBpcyBzZXQgdG8gZW5zdXJlIGludGVycnVwdHMgZG8gbm90IG9jY3VyIHdoaWxlIHRoZSBjb250ZXh0IG9mDQordGhlIGZpcnN0IHRhc2sgaXMgYmVpbmcgcmVzdG9yZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCApDQorDQorLyogUmVjb3JkcyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBUaGlzIHN0YXJ0cyBhdCBvbmUgYXMgaXQgd2lsbCBiZQ0KK2RlY3JlbWVudGVkIHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICovDQordm9sYXRpbGUgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eEludGVycnVwdE5lc3RpbmcgPSAweDAxOw0KKw0KKy8qIFN0b3JlcyB0aGUgdGFzayBzdGFjayBwb2ludGVyIHdoZW4gYSBzd2l0Y2ggaXMgbWFkZSB0byB1c2UgdGhlIHN5c3RlbSBzdGFjay4gKi8NCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gMDsNCisNCisvKiBUaGUgc3RhY2sgdXNlZCBieSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyB0aGF0IGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorcG9ydFNUQUNLX1RZUEUgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSBdID0geyAwIH07DQorDQorLyogVGhlIHRvcCBvZiBzdGFjayB2YWx1ZSBlbnN1cmVzIHRoZXJlIGlzIGVub3VnaCBzcGFjZSB0byBzdG9yZSA2IHJlZ2lzdGVycyBvbiANCit0aGUgY2FsbGVycyBzdGFjaywgYXMgc29tZSBmdW5jdGlvbnMgc2VlbSB0byB3YW50IHRvIGRvIHRoaXMuICovDQorY29uc3QgcG9ydFNUQUNLX1RZUEUgKiBjb25zdCB4SVNSU3RhY2tUb3AgPSAmKCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFIC0gNyBdICk7DQorDQorLyogDQorICogUGxhY2UgdGhlIHByb3RvdHlwZSBoZXJlIHRvIGVuc3VyZSB0aGUgaW50ZXJydXB0IHZlY3RvciBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiANCisgKiBOb3RlIHRoYXQgYmVjYXVzZSB0aGUgaW50ZXJydXB0IGlzIHdyaXR0ZW4gaW4gYXNzZW1ibHksIHRoZSBJUEwgc2V0dGluZyBpbiB0aGUNCisgKiBmb2xsb3dpbmcgbGluZSBvZiBjb2RlIGhhcyBubyBlZmZlY3QuICBUaGUgaW50ZXJydXB0IHByaW9yaXR5IGlzIHNldCBieSB0aGUNCisgKiBjYWxsIHRvIENvbmZpZ0ludFRpbWVyMSgpIGluIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKS4gDQorICovDQorZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXyggKGludGVycnVwdChpcGwxKSwgdmVjdG9yKF9USU1FUl8xX1ZFQ1RPUikpKSB2VDFJbnRlcnJ1cHRIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgc29mdHdhcmUgaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBwZXJmb3JtcyB0aGUgeWllbGQuICBOb3RlIHRoYXQsIGJlY2F1c2UNCisgKiB0aGUgaW50ZXJydXB0IGlzIHdyaXR0ZW4gaW4gYXNzZW1ibHksIHRoZSBJUEwgc2V0dGluZyBpbiB0aGUgZm9sbG93aW5nIGxpbmUgb2YNCisgKiBjb2RlIGhhcyBubyBlZmZlY3QuICBUaGUgaW50ZXJydXB0IHByaW9yaXR5IGlzIHNldCBieSB0aGUgY2FsbCB0byANCisgKiBtQ29uZmlnSW50Q29yZVNXMCgpIGluIHhQb3J0U3RhcnRTY2hlZHVsZXIoKS4gDQorICovDQordm9pZCBfX2F0dHJpYnV0ZV9fKCAoaW50ZXJydXB0KGlwbDEpLCB2ZWN0b3IoX0NPUkVfU09GVFdBUkVfMF9WRUNUT1IpKSkgdlBvcnRZaWVsZElTUiggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIEVuc3VyZSBieXRlIGFsaWdubWVudCBpcyBtYWludGFpbmVkIHdoZW4gbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IChwb3J0U1RBQ0tfVFlQRSkgMHhERUFEQkVFRjsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAocG9ydFNUQUNLX1RZUEUpIDB4MTIzNDU2Nzg7CS8qIFdvcmQgdG8gd2hpY2ggdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGFmdGVyIGNvbnRleHQgcmVzdG9yZS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAocG9ydFNUQUNLX1RZUEUpIF9DUDBfR0VUX0NBVVNFKCk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKHBvcnRTVEFDS19UWVBFKSBwb3J0SU5JVElBTF9TUjsgLyogQ1AwX1NUQVRVUyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IChwb3J0U1RBQ0tfVFlQRSkgcHhDb2RlOyAJCS8qIENQMF9FUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAocG9ydFNUQUNLX1RZUEUpIE5VTEw7ICAJCS8qIHJhICovDQorCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IChwb3J0U1RBQ0tfVFlQRSkgcHZQYXJhbWV0ZXJzOyAvKiBQYXJhbWV0ZXJzIHRvIHBhc3MgaW4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDE0Ow0KKw0KKwkqcHhUb3BPZlN0YWNrID0gKHBvcnRTVEFDS19UWVBFKSAweDAwMDAwMDAwOyAJLyogY3JpdGljYWwgbmVzdGluZyBsZXZlbCAtIG5vIGxvbmdlciB1c2VkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgYSB0aW1lciBmb3IgYSByZWd1bGFyIHRpY2suDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bENvbXBhcmVNYXRjaCA9ICggKGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUpIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxOw0KKw0KKwlPcGVuVGltZXIxKCAoIFQxX09OIHwgVDFfUFNfMV84IHwgVDFfU09VUkNFX0lOVCApLCB1bENvbXBhcmVNYXRjaCApOw0KKwlDb25maWdJbnRUaW1lcjEoIFQxX0lOVF9PTiB8IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgc2NoZWR1bGVyIGZvciB0aGUgUElDIHBvcnQgd2lsbCBnZXQgc3RvcHBlZA0KKwlvbmNlIHJ1bm5pbmcuICBJZiByZXF1aXJlZCBkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLCB0aGVuIHJldHVybiANCisJdG8geFBvcnRTdGFydFNjaGVkdWxlcigpLiAqLw0KKwlmb3IoIDs7ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KKw0KKwkvKiBTZXR1cCB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KKwltQ29uZmlnSW50Q29yZVNXMCggQ1NXX0lOVF9PTiB8IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgfCBDU1dfSU5UX1NVQl9QUklPUl8wICk7DQorDQorCS8qIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgd2lsbCBoYXZlIGJlZW4gDQorCWRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEtpY2sgb2ZmIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIHNvIGZhci4gDQorCUl0cyBzdGFjayBsb2NhdGlvbiBpcyBsb2FkZWQgaW50byB1eFNhdmVkVGFza1N0YWNrUG9pbnRlci4gKi8NCisJdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPSAqKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICogKSBweEN1cnJlbnRUQ0I7DQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmcuICovDQorCXJldHVybiBwZEZBTFNFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0SW5jcmVtZW50VGljayggdm9pZCApDQorew0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhTYXZlZFN0YXR1czsNCisNCisJdXhTYXZlZFN0YXR1cyA9IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQorCQ0KKwkvKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIHRoZW4gd2UgbWlnaHQgd2FudCB0byBzZWxlY3QNCisJYSBkaWZmZXJlbnQgdGFzayB0byBleGVjdXRlLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJU2V0Q29yZVNXMCgpOw0KKwkjZW5kaWYgLyogY29uZmlnVVNFX1BSRUVNUFRJT04gKi8NCisNCisJLyogQ2xlYXIgdGltZXIgMCBpbnRlcnJ1cHQuICovDQorCW1UMUNsZWFySW50RmxhZygpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCB2b2lkICkNCit7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQorDQorCWFzbSB2b2xhdGlsZSAoICJkaSIgKTsNCisJdXhTYXZlZFN0YXR1c1JlZ2lzdGVyID0gX0NQMF9HRVRfU1RBVFVTKCkgfCAweDAxOw0KKwkvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvIA0KKwljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkDQorCWZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUgDQorCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBzbywgd2hlbiB1c2VkIGNvcnJlY3RseSwgdGhlIGFjdGlvbg0KKwljYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQorCWxvd2VyZWQuICovDQorCV9DUDBfU0VUX1NUQVRVUyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCisNCisJcmV0dXJuIHV4U2F2ZWRTdGF0dXNSZWdpc3RlcjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCit7DQorCV9DUDBfU0VUX1NUQVRVUyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnRfYXNtLlMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0X2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNGE0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0X2FzbS5TCkBAIC0wLDAgKzEsMzA2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisgDQorI2luY2x1ZGUgPHAzMnh4eHguaD4NCisjaW5jbHVkZSA8c3lzL2FzbS5oPg0KKyNpbmNsdWRlICJJU1JfU3VwcG9ydC5oIg0KKyANCisNCisJLnNldAlub21pcHMxNg0KKyAJLnNldCAJbm9yZW9yZGVyDQorIAkNCisgCS5leHRlcm4gcHhDdXJyZW50VENCDQorIAkuZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dA0KKyAJLmV4dGVybiB2UG9ydEluY3JlbWVudFRpY2sNCisJLmV4dGVybiB4SVNSU3RhY2tUb3ANCisgCQ0KKyAJLmdsb2JhbCB2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorCS5nbG9iYWwgdlBvcnRZaWVsZElTUg0KKwkuZ2xvYmFsIHZUMUludGVycnVwdEhhbmRsZXINCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyAJLnNldAkJbm9yZW9yZGVyDQorCS5zZXQgCQlub2F0DQorIAkuZW50CQl2VDFJbnRlcnJ1cHRIYW5kbGVyDQorCQ0KK3ZUMUludGVycnVwdEhhbmRsZXI6DQorDQorCXBvcnRTQVZFX0NPTlRFWFQNCisNCisJamFsIAkJdlBvcnRJbmNyZW1lbnRUaWNrDQorCW5vcA0KKw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorCS5lbmQgdlQxSW50ZXJydXB0SGFuZGxlcg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorIAkuc2V0CQlub3Jlb3JkZXINCisJLnNldCAJCW5vYXQNCisgCS5lbnQJCXhQb3J0U3RhcnRTY2hlZHVsZXINCisNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KKw0KKwkvKiBTaW1wbHkgcmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4NCisJY3JlYXRlZCBzbyBmYXIuICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisNCisJLmVuZCB4UG9ydFN0YXJ0U2NoZWR1bGVyDQorDQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorIAkuc2V0CQlub3Jlb3JkZXINCisJLnNldCAJCW5vYXQNCisgCS5lbnQJCXZQb3J0WWllbGRJU1INCisNCit2UG9ydFlpZWxkSVNSOg0KKw0KKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBjb250ZXh0LiBGaXJzdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyBzbyB3ZSBjYW4gDQorCW1hbmlwdWxhdGUgaXQsIGFuZCB0aGUgY2F1c2UgYW5kIEVQQyByZWdpc3RlcnMgc28gd2UgY2FwdHVyZSB0aGVpciANCisJb3JpZ2luYWwgdmFsdWVzIGluIGNhc2Ugb2YgaW50ZXJydXB0IG5lc3RpbmcuICovDQorCW1mYzAJCWswLCBfQ1AwX0NBVVNFDQorCWFkZGl1CQlzcCwJc3AsIC1wb3J0Q09OVEVYVF9TSVpFDQorCW1mYzAJCWsxLCBfQ1AwX1NUQVRVUw0KKw0KKwkvKiBBbHNvIHNhdmUgczYgYW5kIHM1IHNvIHdlIGNhbiB1c2UgdGhlbSBkdXJpbmcgdGhpcyBpbnRlcnJ1cHQuICBBbnkNCisJbmVzdGluZyBpbnRlcnJ1cHRzIHNob3VsZCBtYWludGFpbiB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlZ2lzdGVycw0KKwlhY3Jvc3MgdGhlIElTUi4gKi8NCisJc3cJCQlzNiwgNDQoc3ApDQorCXN3CQkJczUsIDQwKHNwKQ0KKwlzdwkJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KKw0KKwkvKiBFbmFibGUgaW50ZXJydXB0cyBhYm92ZSB0aGUgY3VycmVudCBwcmlvcml0eS4gKi8NCisJc3JsCQkJazAsIGswLCAweGENCisJaW5zIAkJazEsIGswLCAxMCwgNg0KKwlpbnMJCQlrMSwgemVybywgMSwgNA0KKw0KKwkvKiBzNSBpcyB1c2VkIGFzIHRoZSBmcmFtZSBwb2ludGVyLiAqLw0KKwlhZGQJCQlzNSwgemVybywgc3ANCisNCisJLyogU3dhcCB0byB0aGUgc3lzdGVtIHN0YWNrLiAgVGhpcyBpcyBub3QgY29uZGl0aW9uYWwgb24gdGhlIG5lc3RpbmcNCisJY291bnQgYXMgdGhpcyBpbnRlcnJ1cHQgaXMgYWx3YXlzIHRoZSBsb3dlc3QgcHJpb3JpdHkgYW5kIHRoZXJlZm9yZQ0KKwl0aGUgbmVzdGluZyBpcyBhbHdheXMgMC4gKi8NCisJbGEJCQlzcCwgeElTUlN0YWNrVG9wDQorCWx3CQkJc3AsIChzcCkNCisNCisJLyogU2V0IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KKwlsYQkJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCisJYWRkaXUJCXM2LCB6ZXJvLCAxDQorCXN3CQkJczYsIDAoazApDQorDQorCS8qIHM2IGhvbGRzIHRoZSBFUEMgdmFsdWUsIHRoaXMgaXMgc2F2ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29udGV4dA0KKwlhZnRlciBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiAqLw0KKwltZmMwIAkJczYsIF9DUDBfRVBDDQorDQorCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwltdGMwCQlrMSwgX0NQMF9TVEFUVVMNCisNCisJLyogU2F2ZSB0aGUgY29udGV4dCBpbnRvIHRoZSBzcGFjZSBqdXN0IGNyZWF0ZWQuICBzNiBpcyBzYXZlZCBhZ2Fpbg0KKwloZXJlIGFzIGl0IG5vdyBjb250YWlucyB0aGUgRVBDIHZhbHVlLiAqLw0KKwlzdwkJCXJhLAkxMjAoczUpDQorCXN3CQkJczgsIDExNihzNSkNCisJc3cJCQl0OSwgMTEyKHM1KQ0KKwlzdwkJCXQ4LAkxMDgoczUpDQorCXN3CQkJdDcsCTEwNChzNSkNCisJc3cJCQl0NiwgMTAwKHM1KQ0KKwlzdwkJCXQ1LCA5NihzNSkNCisJc3cJCQl0NCwgOTIoczUpDQorCXN3CQkJdDMsIDg4KHM1KQ0KKwlzdwkJCXQyLCA4NChzNSkNCisJc3cJCQl0MSwgODAoczUpDQorCXN3CQkJdDAsIDc2KHM1KQ0KKwlzdwkJCWEzLCA3MihzNSkNCisJc3cJCQlhMiwgNjgoczUpDQorCXN3CQkJYTEsIDY0KHM1KQ0KKwlzdwkJCWEwLCA2MChzNSkNCisJc3cJCQl2MSwgNTYoczUpDQorCXN3CQkJdjAsIDUyKHM1KQ0KKwlzdwkJCXM3LCA0OChzNSkNCisJc3cJCQlzNiwgcG9ydEVQQ19TVEFDS19MT0NBVElPTihzNSkNCisJLyogczUgYW5kIHM2IGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQuICovDQorCXN3CQkJczQsCTM2KHM1KQ0KKwlzdwkJCXMzLCAzMihzNSkNCisJc3cJCQlzMiwgMjgoczUpDQorCXN3CQkJczEsIDI0KHM1KQ0KKwlzdwkJCXMwLCAyMChzNSkNCisJc3cJCQkkMSwgMTYoczUpDQorDQorCS8qIHM3IGlzIHVzZWQgYXMgYSBzY3JhdGNoIHJlZ2lzdGVyIGFzIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzYXZlZCBhY3Jvc3MNCisJbmVzdGluZyBpbnRlcnJ1cHRzLiAqLw0KKwltZmhpCQlzNw0KKwlzdwkJCXM3LCAxMihzNSkNCisJbWZsbwkJczcNCisJc3cJCQlzNywgOChzNSkNCisNCisJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgdGFzay4gKi8NCisJbGEJCQlzNywgcHhDdXJyZW50VENCDQorCWx3CQkJczcsIChzNykNCisJc3cJCQlzNSwgKHM3KQ0KKw0KKwkvKiBTZXQgdGhlIGludGVycnVwdCBtYXNrIHRvIHRoZSBtYXggcHJpb3JpdHkgdGhhdCBjYW4gdXNlIHRoZSBBUEkuICBUaGUNCisJeWllbGQgaGFuZGxlciB3aWxsIG9ubHkgYmUgY2FsbGVkIGF0IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2hpY2gNCisJaXMgYmVsb3cgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIC0gc28gdGhpcyBjYW4gb25seSBldmVyDQorCXJhaXNlIHRoZSBJUEwgdmFsdWUgYW5kIG5ldmVyIGxvd2VyIGl0LiAqLw0KKwlkaQ0KKwltZmMwCQlzNywgX0NQMF9TVEFUVVMNCisJaW5zIAkJczcsICQwLCAxMCwgNg0KKwlvcmkJCQlzNiwgczcsICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IDEwICkgfCAxDQorDQorCS8qIFRoaXMgbXRjMCByZS1lbmFibGVzIGludGVycnVwdHMsIGJ1dCBvbmx5IGFib3ZlIA0KKwljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQorCW10YzAJCXM2LCBfQ1AwX1NUQVRVUw0KKw0KKwkvKiBDbGVhciB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGluIHRoZSBjb3JlLiAqLw0KKwltZmMwCQlzNiwgX0NQMF9DQVVTRQ0KKwlhZGRpdSAgICAgICBzNCx6ZXJvLC0yNTcNCisJYW5kCQkJczYsIHM2LCBzNA0KKwltdGMwCQlzNiwgX0NQMF9DQVVTRQ0KKw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8NCisJbGEJCQlzNiwgSUZTMENMUg0KKwlhZGRpdQkJczQsIHplcm8sIDINCisJc3cJCQlzNCwgKHM2KQ0KKw0KKwlqYWwJCQl2VGFza1N3aXRjaENvbnRleHQNCisJbm9wDQorDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgbWFzayBhZ2Fpbi4gIFRoZSBzYXZlZCBzdGF0dXMgdmFsdWUgaXMgc3RpbGwgaW4gczcuICovDQorCW10YzAJCXM3LCBfQ1AwX1NUQVRVUw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8NCisJbGEJCQlzMCwgcHhDdXJyZW50VENCDQorCWx3CQkJczAsIChzMCkNCisJbHcJCQlzNSwgKHMwKQ0KKw0KKwkvKiBSZXN0b3JlIHRoZSByZXN0IG9mIHRoZSBjb250ZXh0LiAqLw0KKwlsdwkJCXMwLCA4KHM1KQ0KKwltdGxvCQlzMA0KKwlsdwkJCXMwLCAxMihzNSkNCisJbXRoaQkJczANCisJbHcJCQkkMSwgMTYoczUpDQorCWx3CQkJczAsIDIwKHM1KQ0KKwlsdwkJCXMxLCAyNChzNSkNCisJbHcJCQlzMiwgMjgoczUpDQorCWx3CQkJczMsIDMyKHM1KQ0KKwlsdwkJCXM0LCAzNihzNSkNCisJLyogczUgaXMgbG9hZGVkIGxhdGVyLiAqLw0KKwlsdwkJCXM2LCA0NChzNSkNCisJbHcJCQlzNywgNDgoczUpDQorCWx3CQkJdjAsIDUyKHM1KQ0KKwlsdwkJCXYxLCA1NihzNSkNCisJbHcJCQlhMCwgNjAoczUpDQorCWx3CQkJYTEsIDY0KHM1KQ0KKwlsdwkJCWEyLCA2OChzNSkNCisJbHcJCQlhMywgNzIoczUpDQorCWx3CQkJdDAsIDc2KHM1KQ0KKwlsdwkJCXQxLCA4MChzNSkNCisJbHcJCQl0MiwgODQoczUpDQorCWx3CQkJdDMsIDg4KHM1KQ0KKwlsdwkJCXQ0LCA5MihzNSkNCisJbHcJCQl0NSwgOTYoczUpDQorCWx3CQkJdDYsIDEwMChzNSkNCisJbHcJCQl0NywgMTA0KHM1KQ0KKwlsdwkJCXQ4LCAxMDgoczUpDQorCWx3CQkJdDksIDExMihzNSkNCisJbHcJCQlzOCwgMTE2KHM1KQ0KKwlsdwkJCXJhLCAxMjAoczUpDQorDQorCS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCisJZGkNCisNCisJLyogU2V0IG5lc3RpbmcgYmFjayB0byB6ZXJvLiAgQXMgdGhlIGxvd2VzdCBwcmlvcml0eSBpbnRlcnJ1cHQgdGhpcw0KKwlpbnRlcnJ1cHQgY2Fubm90IGhhdmUgbmVzdGVkLiAqLw0KKwlsYQkJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCisJc3cJCQl6ZXJvLCAwKGswKQ0KKw0KKwkvKiBTd2l0Y2ggYmFjayB0byB1c2UgdGhlIHJlYWwgc3RhY2sgcG9pbnRlci4gKi8NCisJYWRkCQkJc3AsIHplcm8sIHM1DQorDQorCS8qIFJlc3RvcmUgdGhlIHJlYWwgczUgdmFsdWUuICovDQorCWx3CQkJczUsIDQwKHNwKQ0KKw0KKwkvKiBQb3AgdGhlIHN0YXR1cyBhbmQgZXBjIHZhbHVlcy4gKi8NCisJbHcJCQlrMSwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTihzcCkNCisJbHcJCQlrMCwgcG9ydEVQQ19TVEFDS19MT0NBVElPTihzcCkNCisNCisJLyogUmVtb3ZlIHN0YWNrIGZyYW1lLiAqLw0KKwlhZGRpdQkJc3AsCXNwLAlwb3J0Q09OVEVYVF9TSVpFDQorDQorCW10YzAJCWsxLCBfQ1AwX1NUQVRVUwkNCisJbXRjMCAJCWswLCBfQ1AwX0VQQw0KKwllaGINCisJZXJldCANCisJbm9wDQorDQorCS5lbmQJCXZQb3J0WWllbGRJU1INCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzIxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE5MyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisvKiBTeXN0ZW0gaW5jbHVkZSBmaWxlcyAqLw0KKyNpbmNsdWRlIDxwbGliLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIGxvbmcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCS0xDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKyNkZWZpbmUgcG9ydElQTF9TSElGVAkJCQkoIDEwVUwgKQ0KKyNkZWZpbmUgcG9ydEFMTF9JUExfQklUUwkJCSggMHgzZlVMIDw8IHBvcnRJUExfU0hJRlQgKQ0KKyNkZWZpbmUgcG9ydFNXMF9CSVQJCQkJCSggMHgwMSA8PCA4ICkNCisNCisvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvIA0KK2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQNCitmcm9tIGFuIGludGVycnVwdCwgc28gdGhlcmVmb3JlIHdpbGwgbm90IGJlIGNhbGxlZCB3aXRoIGFuIElQTCBzZXR0aW5nDQorYWJvdmUgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhlcmVmb3JlLCB3aGVuIHVzZWQgY29ycmVjdGx5LCB0aGUgDQoraW5zdHJ1Y3Rpb25zIGluIHRoaXMgbWFjcm8gY2FuIG9ubHkgcmVzdWx0IGluIHRoZSBJUEwgYmVpbmcgcmFpc2VkLCBhbmQgDQordGhlcmVmb3JlIG5ldmVyIGxvd2VyZWQuICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQordW5zaWduZWQgbG9uZyB1bFN0YXR1czsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8JXA0KKwl1bFN0YXR1cyA9IF9DUDBfR0VUX1NUQVRVUygpOwkJCQkJCQkJCQlcDQorCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOwkJCQkJCQkJCQlcDQorCV9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IFwNCit9DQorDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQordW5zaWduZWQgbG9uZyB1bFN0YXR1czsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVW5tYXNrIGFsbCBpbnRlcnJ1cHRzLiAqLwkJCQkJCQkJCQlcDQorCXVsU3RhdHVzID0gX0NQMF9HRVRfU1RBVFVTKCk7CQkJCQkJCQkJCVwNCisJdWxTdGF0dXMgJj0gfnBvcnRBTExfSVBMX0JJVFM7CQkJCQkJCQkJCVwNCisJX0NQMF9TRVRfU1RBVFVTKCB1bFN0YXR1cyApOwkJCQkJCQkJCQlcDQorfQ0KKw0KKw0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJMQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KKw0KK2V4dGVybiB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQorDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQlcDQordW5zaWduZWQgbG9uZyB1bFN0YXR1czsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCVwNCisJLyogVHJpZ2dlciBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovCQkJXA0KKwl1bFN0YXR1cyA9IF9DUDBfR0VUX0NBVVNFKCk7CQkJCVwNCisJdWxTdGF0dXMgfD0gcG9ydFNXMF9CSVQ7CQkJCQlcDQorCV9DUDBfU0VUX0NBVVNFKCB1bFN0YXR1cyApOwkJCQkJXA0KK30NCisNCisNCisjZGVmaW5lIHBvcnROT1AoKQlhc20gdm9sYXRpbGUgKCAJIm5vcCIgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKQlpZiggeFN3aXRjaFJlcXVpcmVkICkJXA0KKwkJCQkJCQkJCQkJCQl7CQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJcG9ydFlJRUxEKCk7CQlcDQorCQkJCQkJCQkJCQkJCX0NCisNCisvKiBSZXF1aXJlZCBieSB0aGUga2VybmVsIGF3YXJlIGRlYnVnZ2VyLiAqLw0KKyNpZmRlZiBfX0RFQlVHDQorCSNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorI2VuZGlmDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYzYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01TVkMtTWluZ1cvcG9ydC5jCkBAIC0wLDAgKzEsNTEwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTEgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisjaW5jbHVkZSA8c3RkaW8uaD4NCisNCisjZGVmaW5lIHBvcnRNQVhfSU5URVJSVVBUUwkJCQkoICggdW5zaWduZWQgbG9uZyApIHNpemVvZiggdW5zaWduZWQgbG9uZyApICogOFVMICkgLyogVGhlIG51bWJlciBvZiBiaXRzIGluIGFuIHVuc2lnbmVkIGxvbmcuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAJCSggKCB1bnNpZ25lZCBsb25nICkgMCApDQorDQorLyoNCisgKiBDcmVhdGVkIGFzIGEgaGlnaCBwcmlvcml0eSB0aHJlYWQsIHRoaXMgZnVuY3Rpb24gdXNlcyBhIHRpbWVyIHRvIHNpbXVsYXRlDQorICogYSB0aWNrIGludGVycnVwdCBiZWluZyBnZW5lcmF0ZWQgb24gYW4gZW1iZWRkZWQgdGFyZ2V0LiAgSW4gdGhpcyBXaW5kb3dzDQorICogZW52aXJvbm1lbnQgdGhlIHRpbWVyIGRvZXMgbm90IGFjaGlldmUgYW55dGhpbmcgYXBwcm9hY2hpbmcgcmVhbCB0aW1lIA0KKyAqIHBlcmZvcm1hbmNlIHRob3VnaC4NCisgKi8NCitzdGF0aWMgRFdPUkQgV0lOQVBJIHBydlNpbXVsYXRlZFBlcmlwaGVyYWxUaW1lciggTFBWT0lEIGxwUGFyYW1ldGVyICk7DQorDQorLyogDQorICogUHJvY2VzcyBhbGwgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHRzIC0gZWFjaCByZXByZXNlbnRlZCBieSBhIGJpdCBpbiANCisgKiB1bFBlbmRpbmdJbnRlcnJ1cHRzIHZhcmlhYmxlLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlByb2Nlc3NTaW11bGF0ZWRJbnRlcnJ1cHRzKCB2b2lkICk7DQorDQorLyoNCisgKiBJbnRlcnJ1cHQgaGFuZGxlcnMgdXNlZCBieSB0aGUga2VybmVsIGl0c2VsZi4gIFRoZXNlIGFyZSBleGVjdXRlZCBmcm9tIHRoZQ0KKyAqIHNpbXVsYXRlZCBpbnRlcnJ1cHQgaGFuZGxlciB0aHJlYWQuDQorICovDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJ2UHJvY2Vzc1lpZWxkSW50ZXJydXB0KCB2b2lkICk7DQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJ2UHJvY2Vzc1RpY2tJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgV0lOMzIgc2ltdWxhdG9yIHJ1bnMgZWFjaCB0YXNrIGluIGEgdGhyZWFkLiAgVGhlIGNvbnRleHQgc3dpdGNoaW5nIGlzDQorbWFuYWdlZCBieSB0aGUgdGhyZWFkcywgc28gdGhlIHRhc2sgc3RhY2sgZG9lcyBub3QgaGF2ZSB0byBiZSBtYW5hZ2VkIGRpcmVjdGx5LA0KK2FsdGhvdWdoIHRoZSB0YXNrIHN0YWNrIGlzIHN0aWxsIHVzZWQgdG8gaG9sZCBhbiB4VGhyZWFkU3RhdGUgc3RydWN0dXJlIHRoaXMgaXMNCit0aGUgb25seSB0aGluZyBpdCB3aWxsIGV2ZXIgaG9sZC4gIFRoZSBzdHJ1Y3R1cmUgaW5kaXJlY3RseSBtYXBzIHRoZSB0YXNrIGhhbmRsZSANCit0byBhIHRocmVhZCBoYW5kbGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCS8qIEhhbmRsZSBvZiB0aGUgdGhyZWFkIHRoYXQgZXhlY3V0ZXMgdGhlIHRhc2suICovDQorCXZvaWQgKnB2VGhyZWFkOw0KKw0KK30geFRocmVhZFN0YXRlOw0KKw0KKy8qIFNpbXVsYXRlZCBpbnRlcnJ1cHRzIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkLiAgVGhpcyBpcyBhIGJpdCBtYXNrIHdoZXJlIGVhY2gNCitiaXQgcmVwcmVzZW50cyBvbmUgaW50ZXJydXB0LCBzbyBhIG1heGltdW0gb2YgMzIgaW50ZXJydXB0cyBjYW4gYmUgc2ltdWxhdGVkLiAqLw0KK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsUGVuZGluZ0ludGVycnVwdHMgPSAwVUw7DQorDQorLyogQW4gZXZlbnQgdXNlZCB0byBpbmZvcm0gdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyB0aHJlYWQgKGEgaGlnaCANCitwcmlvcml0eSB0aHJlYWQgdGhhdCBzaW11bGF0ZWQgaW50ZXJydXB0IHByb2Nlc3NpbmcpIHRoYXQgYW4gaW50ZXJydXB0IGlzDQorcGVuZGluZy4gKi8NCitzdGF0aWMgdm9pZCAqcHZJbnRlcnJ1cHRFdmVudCA9IE5VTEw7DQorDQorLyogTXV0ZXggdXNlZCB0byBwcm90ZWN0IGFsbCB0aGUgc2ltdWxhdGVkIGludGVycnVwdCB2YXJpYWJsZXMgdGhhdCBhcmUgYWNjZXNzZWQgDQorYnkgbXVsdGlwbGUgdGhyZWFkcy4gKi8NCitzdGF0aWMgdm9pZCAqcHZJbnRlcnJ1cHRFdmVudE11dGV4ID0gTlVMTDsNCisNCisvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBmb3IgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzay4gIFRoaXMgaXMgDQoraW5pdGlhbGlzZWQgdG8gYSBub24temVybyB2YWx1ZSBzbyBpbnRlcnJ1cHRzIGRvIG5vdCBiZWNvbWUgZW5hYmxlZCBkdXJpbmcgDQordGhlIGluaXRpYWxpc2F0aW9uIHBoYXNlLiAgQXMgZWFjaCB0YXNrIGhhcyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcgdmFsdWUgDQordWxDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgZmlyc3QgdGFzayBydW5zLiAgVGhpcyANCitpbml0aWFsaXNhdGlvbiBpcyBwcm9iYWJseSBub3QgY3JpdGljYWwgaW4gdGhpcyBzaW11bGF0ZWQgZW52aXJvbm1lbnQgYXMgdGhlDQorc2ltdWxhdGVkIGludGVycnVwdCBoYW5kbGVycyBkbyBub3QgZ2V0IGNyZWF0ZWQgdW50aWwgdGhlIEZyZWVSVE9TIHNjaGVkdWxlciBpcyANCitzdGFydGVkIGFueXdheS4gKi8NCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCisNCisvKiBIYW5kbGVycyBmb3IgYWxsIHRoZSBzaW11bGF0ZWQgc29mdHdhcmUgaW50ZXJydXB0cy4gIFRoZSBmaXJzdCB0d28gcG9zaXRpb25zDQorYXJlIHVzZWQgZm9yIHRoZSBZaWVsZCBhbmQgVGljayBpbnRlcnJ1cHRzIHNvIGFyZSBoYW5kbGVkIHNsaWdodGx5IGRpZmZlcmVudGx5LA0KK2FsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyBjYW4gYmUgdXNlciBkZWZpbmVkLiAqLw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nICgqdWxJc3JIYW5kbGVyWyBwb3J0TUFYX0lOVEVSUlVQVFMgXSkoIHZvaWQgKSA9IHsgMCB9Ow0KKw0KKy8qIFBvaW50ZXIgdG8gdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLiAqLw0KK2V4dGVybiB2b2lkICpweEN1cnJlbnRUQ0I7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIERXT1JEIFdJTkFQSSBwcnZTaW11bGF0ZWRQZXJpcGhlcmFsVGltZXIoIExQVk9JRCBscFBhcmFtZXRlciApDQorew0KK3BvcnRUaWNrVHlwZSB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgPSAoIHBvcnRUaWNrVHlwZSApIDIwOw0KKw0KKwkvKiBKdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuICovDQorCSggdm9pZCApIGxwUGFyYW1ldGVyOw0KKw0KKwlmb3IoOzspDQorCXsNCisJCS8qIFdhaXQgdW50aWwgdGhlIHRpbWVyIGV4cGlyZXMgYW5kIHdlIGNhbiBhY2Nlc3MgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgDQorCQl2YXJpYWJsZXMuICAqTk9URSogdGhpcyBpcyBub3QgYSAncmVhbCB0aW1lJyB3YXkgb2YgZ2VuZXJhdGluZyB0aWNrIA0KKwkJZXZlbnRzIGFzIHRoZSBuZXh0IHdha2UgdGltZSBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHdha2UgDQorCQl0aW1lLCBub3QgdGhlIHRpbWUgdGhhdCBTbGVlcCgpIGlzIGNhbGxlZC4gIEl0IGlzIGRvbmUgdGhpcyB3YXkgdG8gDQorCQlwcmV2ZW50IG92ZXJydW5zIGluIHRoaXMgdmVyeSBub24gcmVhbCB0aW1lIHNpbXVsYXRlZC9lbXVsYXRlZCANCisJCWVudmlyb25tZW50LiAqLw0KKwkJaWYoIHBvcnRUSUNLX1JBVEVfTVMgPCB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgKQ0KKwkJew0KKwkJCVNsZWVwKCB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlTbGVlcCggcG9ydFRJQ0tfUkFURV9NUyApOw0KKwkJfQ0KKw0KKwkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKw0KKwkJLyogVGhlIHRpbWVyIGhhcyBleHBpcmVkLCBnZW5lcmF0ZSB0aGUgc2ltdWxhdGVkIHRpY2sgZXZlbnQuICovDQorCQl1bFBlbmRpbmdJbnRlcnJ1cHRzIHw9ICggMSA8PCBwb3J0SU5URVJSVVBUX1RJQ0sgKTsNCisNCisJCS8qIFRoZSBpbnRlcnJ1cHQgaXMgbm93IHBlbmRpbmcgLSBub3RpZnkgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgDQorCQloYW5kbGVyIHRocmVhZC4gKi8NCisJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQorDQorCQkvKiBHaXZlIGJhY2sgdGhlIG11dGV4IHNvIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IGhhbmRsZXIgdW5ibG9ja3MgDQorCQlhbmQgY2FuCWFjY2VzcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdmFyaWFibGVzLiAqLw0KKwkJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCisJfQ0KKw0KKwkjaWZkZWYgX19HTlVDX18NCisJCS8qIFNob3VsZCBuZXZlciByZWFjaCBoZXJlIC0gTWluZ1cgY29tcGxhaW5zIGlmIHlvdSBsZWF2ZSB0aGlzIGxpbmUgb3V0LA0KKwkJTVNWQyBjb21wbGFpbnMgaWYgeW91IHB1dCBpdCBpbi4gKi8NCisJCXJldHVybiAwOw0KKwkjZW5kaWYNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCit4VGhyZWFkU3RhdGUgKnB4VGhyZWFkU3RhdGUgPSBOVUxMOw0KKw0KKwkvKiBJbiB0aGlzIHNpbXVsYXRlZCBjYXNlIGEgc3RhY2sgaXMgbm90IGluaXRpYWxpc2VkLCBidXQgaW5zdGVhZCBhIHRocmVhZA0KKwlpcyBjcmVhdGVkIHRoYXQgd2lsbCBleGVjdXRlIHRoZSB0YXNrIGJlaW5nIGNyZWF0ZWQuICBUaGUgdGhyZWFkIGhhbmRsZXMNCisJdGhlIGNvbnRleHQgc3dpdGNoaW5nIGl0c2VsZi4gIFRoZSB4VGhyZWFkU3RhdGUgb2JqZWN0IGlzIHBsYWNlZCBvbnRvDQorCXRoZSBzdGFjayB0aGF0IHdhcyBjcmVhdGVkIGZvciB0aGUgdGFzayAtIHNvIHRoZSBzdGFjayBidWZmZXIgaXMgc3RpbGwNCisJdXNlZCwganVzdCBub3QgaW4gdGhlIGNvbnZlbnRpb25hbCB3YXkuICBJdCB3aWxsIG5vdCBiZSB1c2VkIGZvciBhbnl0aGluZw0KKwlvdGhlciB0aGFuIGhvbGRpbmcgdGhpcyBzdHJ1Y3R1cmUuICovDQorCXB4VGhyZWFkU3RhdGUgPSAoIHhUaHJlYWRTdGF0ZSAqICkgKCBweFRvcE9mU3RhY2sgLSBzaXplb2YoIHhUaHJlYWRTdGF0ZSApICk7DQorDQorCS8qIENyZWF0ZSB0aGUgdGhyZWFkIGl0c2VsZi4gKi8NCisJcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgPSBDcmVhdGVUaHJlYWQoIE5VTEwsIDAsICggTFBUSFJFQURfU1RBUlRfUk9VVElORSApIHB4Q29kZSwgcHZQYXJhbWV0ZXJzLCBDUkVBVEVfU1VTUEVOREVELCBOVUxMICk7DQorCVNldFRocmVhZEFmZmluaXR5TWFzayggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDB4MDEgKTsNCisJU2V0VGhyZWFkUHJpb3JpdHlCb29zdCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIFRSVUUgKTsNCisJU2V0VGhyZWFkUHJpb3JpdHkoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkLCBUSFJFQURfUFJJT1JJVFlfSURMRSApOw0KKwkNCisJcmV0dXJuICggcG9ydFNUQUNLX1RZUEUgKiApIHB4VGhyZWFkU3RhdGU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK3ZvaWQgKnB2SGFuZGxlOw0KK2xvbmcgbFN1Y2Nlc3MgPSBwZFBBU1M7DQoreFRocmVhZFN0YXRlICpweFRocmVhZFN0YXRlOw0KKw0KKwkvKiBJbnN0YWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgdXNlZCBieSB0aGUgc2NoZWR1bGVyIGl0c2VsZi4gKi8NCisJdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCBwb3J0SU5URVJSVVBUX1lJRUxELCBwcnZQcm9jZXNzWWllbGRJbnRlcnJ1cHQgKTsNCisJdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCBwb3J0SU5URVJSVVBUX1RJQ0ssIHBydlByb2Nlc3NUaWNrSW50ZXJydXB0ICk7DQorDQorCS8qIENyZWF0ZSB0aGUgZXZlbnRzIGFuZCBtdXRleGVzIHRoYXQgYXJlIHVzZWQgdG8gc3luY2hyb25pc2UgYWxsIHRoZQ0KKwl0aHJlYWRzLiAqLw0KKwlwdkludGVycnVwdEV2ZW50TXV0ZXggPSBDcmVhdGVNdXRleCggTlVMTCwgRkFMU0UsIE5VTEwgKTsNCisJcHZJbnRlcnJ1cHRFdmVudCA9IENyZWF0ZUV2ZW50KCBOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwgKTsNCisNCisJaWYoICggcHZJbnRlcnJ1cHRFdmVudE11dGV4ID09IE5VTEwgKSB8fCAoIHB2SW50ZXJydXB0RXZlbnQgPT0gTlVMTCApICkNCisJew0KKwkJbFN1Y2Nlc3MgPSBwZEZBSUw7DQorCX0NCisNCisJLyogU2V0IHRoZSBwcmlvcml0eSBvZiB0aGlzIHRocmVhZCBzdWNoIHRoYXQgaXQgaXMgYWJvdmUgdGhlIHByaW9yaXR5IG9mIA0KKwl0aGUgdGhyZWFkcyB0aGF0IHJ1biB0YXNrcy4gIFRoaXMgaGlnaGVyIHByaW9yaXR5IGlzIHJlcXVpcmVkIHRvIGVuc3VyZQ0KKwlzaW11bGF0ZWQgaW50ZXJydXB0cyB0YWtlIHByaW9yaXR5IG92ZXIgdGFza3MuICovDQorCXB2SGFuZGxlID0gR2V0Q3VycmVudFRocmVhZCgpOw0KKwlpZiggcHZIYW5kbGUgPT0gTlVMTCApDQorCXsNCisJCWxTdWNjZXNzID0gcGRGQUlMOw0KKwl9DQorCQ0KKwlpZiggbFN1Y2Nlc3MgPT0gcGRQQVNTICkNCisJew0KKwkJaWYoIFNldFRocmVhZFByaW9yaXR5KCBwdkhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCApID09IDAgKQ0KKwkJew0KKwkJCWxTdWNjZXNzID0gcGRGQUlMOw0KKwkJfQ0KKwkJU2V0VGhyZWFkUHJpb3JpdHlCb29zdCggcHZIYW5kbGUsIFRSVUUgKTsNCisJCVNldFRocmVhZEFmZmluaXR5TWFzayggcHZIYW5kbGUsIDB4MDEgKTsNCisJfQ0KKw0KKwlpZiggbFN1Y2Nlc3MgPT0gcGRQQVNTICkNCisJew0KKwkJLyogU3RhcnQgdGhlIHRocmVhZCB0aGF0IHNpbXVsYXRlcyB0aGUgdGltZXIgcGVyaXBoZXJhbCB0byBnZW5lcmF0ZQ0KKwkJdGljayBpbnRlcnJ1cHRzLiAgVGhlIHByaW9yaXR5IGlzIHNldCBiZWxvdyB0aGF0IG9mIHRoZSBzaW11bGF0ZWQgDQorCQlpbnRlcnJ1cHQgaGFuZGxlciBzbyB0aGUgaW50ZXJydXB0IGV2ZW50IG11dGV4IGlzIHVzZWQgZm9yIHRoZQ0KKwkJaGFuZHNoYWtlIC8gb3ZlcnJ1biBwcm90ZWN0aW9uLiAqLw0KKwkJcHZIYW5kbGUgPSBDcmVhdGVUaHJlYWQoIE5VTEwsIDAsIHBydlNpbXVsYXRlZFBlcmlwaGVyYWxUaW1lciwgTlVMTCwgMCwgTlVMTCApOw0KKwkJaWYoIHB2SGFuZGxlICE9IE5VTEwgKQ0KKwkJew0KKwkJCVNldFRocmVhZFByaW9yaXR5KCBwdkhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX0JFTE9XX05PUk1BTCApOw0KKwkJCVNldFRocmVhZFByaW9yaXR5Qm9vc3QoIHB2SGFuZGxlLCBUUlVFICk7DQorCQkJU2V0VGhyZWFkQWZmaW5pdHlNYXNrKCBwdkhhbmRsZSwgMHgwMSApOw0KKwkJfQ0KKwkJDQorCQkvKiBTdGFydCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIGJ5IG9idGFpbmluZyBpdHMgYXNzb2NpYXRlZCB0aHJlYWQgDQorCQlzdGF0ZSBzdHJ1Y3R1cmUsIGluIHdoaWNoIGlzIHN0b3JlZCB0aGUgdGhyZWFkIGhhbmRsZS4gKi8NCisJCXB4VGhyZWFkU3RhdGUgPSAoIHhUaHJlYWRTdGF0ZSAqICkgKiggKCB1bnNpZ25lZCBsb25nICogKSBweEN1cnJlbnRUQ0IgKTsNCisJCXVsQ3JpdGljYWxOZXN0aW5nID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQorDQorCQkvKiBCdW1wIHVwIHRoZSBwcmlvcml0eSBvZiB0aGUgdGhyZWFkIHRoYXQgaXMgZ29pbmcgdG8gcnVuLCBpbiB0aGUNCisJCWhvcGUgdGhhdCB0aGlzIHdpbGwgYXNpc3QgaW4gZ2V0dGluZyB0aGUgV2luZG93cyB0aHJlYWQgc2NoZWR1bGVyIHRvDQorCQliZWhhdmUgYXMgYW4gZW1iZWRkZWQgZW5naW5lZXIgbWlnaHQgZXhwZWN0LiAqLw0KKwkJUmVzdW1lVGhyZWFkKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCApOw0KKw0KKwkJLyogSGFuZGxlIGFsbCBzaW11bGF0ZWQgaW50ZXJydXB0cyAtIGluY2x1ZGluZyB5aWVsZCByZXF1ZXN0cyBhbmQgDQorCQlzaW11bGF0ZWQgdGlja3MuICovDQorCQlwcnZQcm9jZXNzU2ltdWxhdGVkSW50ZXJydXB0cygpOw0KKwl9CQ0KKwkNCisJLyogV291bGQgbm90IGV4cGVjdCB0byByZXR1cm4gZnJvbSBwcnZQcm9jZXNzU2ltdWxhdGVkSW50ZXJydXB0cygpLCBzbyBzaG91bGQgDQorCW5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBydlByb2Nlc3NZaWVsZEludGVycnVwdCggdm9pZCApDQorew0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcnZQcm9jZXNzVGlja0ludGVycnVwdCggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxTd2l0Y2hSZXF1aXJlZDsNCisNCisJLyogUHJvY2VzcyB0aGUgdGljayBpdHNlbGYuICovDQorCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OICE9IDAgKQ0KKwl7DQorCQkvKiBBIGNvbnRleHQgc3dpdGNoIGlzIG9ubHkgYXV0b21hdGljYWxseSBwZXJmb3JtZWQgZnJvbSB0aGUgdGljaw0KKwkJaW50ZXJydXB0IGlmIHRoZSBwcmUtZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJCXVsU3dpdGNoUmVxdWlyZWQgPSBwZFRSVUU7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJdWxTd2l0Y2hSZXF1aXJlZCA9IHBkRkFMU0U7DQorCX0NCisJI2VuZGlmDQorDQorCXJldHVybiB1bFN3aXRjaFJlcXVpcmVkOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZQcm9jZXNzU2ltdWxhdGVkSW50ZXJydXB0cyggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxTd2l0Y2hSZXF1aXJlZCwgaTsNCit4VGhyZWFkU3RhdGUgKnB4VGhyZWFkU3RhdGU7DQordm9pZCAqcHZPYmplY3RMaXN0WyAyIF07DQorDQorCS8qIEdvaW5nIHRvIGJsb2NrIG9uIHRoZSBtdXRleCB0aGF0IGVuc3VyZWQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2ltdWxhdGVkIA0KKwlpbnRlcnJ1cHQgb2JqZWN0cywgYW5kIHRoZSBldmVudCB0aGF0IHNpZ25hbHMgdGhhdCBhIHNpbXVsYXRlZCBpbnRlcnJ1cHQNCisJc2hvdWxkIGJlIHByb2Nlc3NlZC4gKi8NCisJcHZPYmplY3RMaXN0WyAwIF0gPSBwdkludGVycnVwdEV2ZW50TXV0ZXg7DQorCXB2T2JqZWN0TGlzdFsgMSBdID0gcHZJbnRlcnJ1cHRFdmVudDsNCisNCisJZm9yKDs7KQ0KKwl7DQorCQlXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKCBzaXplb2YoIHB2T2JqZWN0TGlzdCApIC8gc2l6ZW9mKCB2b2lkICogKSwgcHZPYmplY3RMaXN0LCBUUlVFLCBJTkZJTklURSApOw0KKw0KKwkJLyogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IHByb2Nlc3NpbmcgaGFzDQorCQluZWNlc3NpdGF0ZWQgYSBjb250ZXh0IHN3aXRjaCB0byBhbm90aGVyIHRhc2svdGhyZWFkLiAqLw0KKwkJdWxTd2l0Y2hSZXF1aXJlZCA9IHBkRkFMU0U7DQorDQorCQkvKiBGb3IgZWFjaCBpbnRlcnJ1cHQgd2UgYXJlIGludGVyZXN0ZWQgaW4gcHJvY2Vzc2luZywgZWFjaCBvZiB3aGljaCBpcw0KKwkJcmVwcmVzZW50ZWQgYnkgYSBiaXQgaW4gdGhlIDMyYml0IHVsUGVuZGluZ0ludGVycnVwdHMgdmFyaWFibGUuICovDQorCQlmb3IoIGkgPSAwOyBpIDwgcG9ydE1BWF9JTlRFUlJVUFRTOyBpKysgKQ0KKwkJew0KKwkJCS8qIElzIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IHBlbmRpbmc/ICovDQorCQkJaWYoIHVsUGVuZGluZ0ludGVycnVwdHMgJiAoIDFVTCA8PCBpICkgKQ0KKwkJCXsNCisJCQkJLyogSXMgYSBoYW5kbGVyIGluc3RhbGxlZD8gKi8NCisJCQkJaWYoIHVsSXNySGFuZGxlclsgaSBdICE9IE5VTEwgKQ0KKwkJCQl7DQorCQkJCQkvKiBSdW4gdGhlIGFjdHVhbCBoYW5kbGVyLiAqLw0KKwkJCQkJaWYoIHVsSXNySGFuZGxlclsgaSBdKCkgIT0gcGRGQUxTRSApDQorCQkJCQl7DQorCQkJCQkJdWxTd2l0Y2hSZXF1aXJlZCB8PSAoIDEgPDwgaSApOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuICovDQorCQkJCXVsUGVuZGluZ0ludGVycnVwdHMgJj0gfiggMVVMIDw8IGkgKTsNCisJCQl9DQorCQl9DQorDQorCQlpZiggdWxTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl2b2lkICpwdk9sZEN1cnJlbnRUQ0I7DQorDQorCQkJcHZPbGRDdXJyZW50VENCID0gcHhDdXJyZW50VENCOw0KKw0KKwkJCS8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisNCisJCQkvKiBJZiB0aGUgdGFzayBzZWxlY3RlZCB0byBlbnRlciB0aGUgcnVubmluZyBzdGF0ZSBpcyBub3QgdGhlIHRhc2sNCisJCQl0aGF0IGlzIGFscmVhZHkgaW4gdGhlIHJ1bm5pbmcgc3RhdGUuICovDQorCQkJaWYoIHB2T2xkQ3VycmVudFRDQiAhPSBweEN1cnJlbnRUQ0IgKQ0KKwkJCXsNCisJCQkJLyogU3VzcGVuZCB0aGUgb2xkIHRocmVhZC4gKi8NCisJCQkJcHhUaHJlYWRTdGF0ZSA9ICggeFRocmVhZFN0YXRlICopICooICggdW5zaWduZWQgbG9uZyAqICkgcHZPbGRDdXJyZW50VENCICk7DQorCQkJCVN1c3BlbmRUaHJlYWQoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkICk7DQorDQorCQkJCS8qIE9idGFpbiB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgbm93IHNlbGVjdGVkIHRvIGVudGVyIHRoZSANCisJCQkJUnVubmluZyBzdGF0ZS4gKi8NCisJCQkJcHhUaHJlYWRTdGF0ZSA9ICggeFRocmVhZFN0YXRlICogKSAoICooIHVuc2lnbmVkIGxvbmcgKikgcHhDdXJyZW50VENCICk7DQorCQkJCVJlc3VtZVRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgKTsNCisJCQl9DQorCQl9DQorDQorCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnREZWxldGVUaHJlYWQoIHZvaWQgKnB2VGFza1RvRGVsZXRlICkNCit7DQoreFRocmVhZFN0YXRlICpweFRocmVhZFN0YXRlOw0KKw0KKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KCBwdkludGVycnVwdEV2ZW50TXV0ZXgsIElORklOSVRFICk7DQorDQorCS8qIEZpbmQgdGhlIGhhbmRsZSBvZiB0aGUgdGhyZWFkIGJlaW5nIGRlbGV0ZWQuICovDQorCXB4VGhyZWFkU3RhdGUgPSAoIHhUaHJlYWRTdGF0ZSAqICkgKCAqKCB1bnNpZ25lZCBsb25nICopIHB2VGFza1RvRGVsZXRlICk7DQorCVRlcm1pbmF0ZVRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDAgKTsNCisNCisJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBUaGlzIGZ1bmN0aW9uIElTIE5PVCBURVNURUQhICovDQorCVRlcm1pbmF0ZVByb2Nlc3MoIEdldEN1cnJlbnRQcm9jZXNzKCksIDAgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEdlbmVyYXRlU2ltdWxhdGVkSW50ZXJydXB0KCB1bnNpZ25lZCBsb25nIHVsSW50ZXJydXB0TnVtYmVyICkNCit7DQoreFRocmVhZFN0YXRlICpweFRocmVhZFN0YXRlOw0KKw0KKwlpZiggKCB1bEludGVycnVwdE51bWJlciA8IHBvcnRNQVhfSU5URVJSVVBUUyApICYmICggcHZJbnRlcnJ1cHRFdmVudE11dGV4ICE9IE5VTEwgKSApDQorCXsNCisJCS8qIFlpZWxkIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBldmVuIHdoZW4gY3JpdGljYWwgbmVzdGluZyBpcyBub24temVyby4gKi8NCisJCVdhaXRGb3JTaW5nbGVPYmplY3QoIHB2SW50ZXJydXB0RXZlbnRNdXRleCwgSU5GSU5JVEUgKTsNCisJCXVsUGVuZGluZ0ludGVycnVwdHMgfD0gKCAxIDw8IHVsSW50ZXJydXB0TnVtYmVyICk7DQorDQorCQkvKiBUaGUgc2ltdWxhdGVkIGludGVycnVwdCBpcyBub3cgaGVsZCBwZW5kaW5nLCBidXQgZG9uJ3QgYWN0dWFsbHkgcHJvY2VzcyBpdA0KKwkJeWV0IGlmIHRoaXMgY2FsbCBpcyB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgcG9zc2libGUgZm9yIHRoaXMgdG8NCisJCWJlIGluIGEgY3JpdGljYWwgc2VjdGlvbiBhcyBjYWxscyB0byB3YWl0IGZvciBtdXRleGVzIGFyZSBhY2N1bXVsYXRpdmUuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCQl7DQorCQkJLyogVGhlIGV2ZW50IGhhbmRsZXIgbmVlZHMgdG8ga25vdyB0byBzaWduYWwgdGhlIGludGVycnVwdCBhY2tub3dsZWRnZSBldmVudA0KKwkJCXRoZSBuZXh0IHRpbWUgdGhpcyB0YXNrIHJ1bnMuICovDQorCQkJcHhUaHJlYWRTdGF0ZSA9ICggeFRocmVhZFN0YXRlICogKSAqKCAoIHVuc2lnbmVkIGxvbmcgKiApIHB4Q3VycmVudFRDQiApOw0KKwkJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7CQkJDQorCQl9DQorDQorCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCB1bnNpZ25lZCBsb25nIHVsSW50ZXJydXB0TnVtYmVyLCB1bnNpZ25lZCBsb25nICgqcHZIYW5kbGVyKSggdm9pZCApICkNCit7DQorCWlmKCB1bEludGVycnVwdE51bWJlciA8IHBvcnRNQVhfSU5URVJSVVBUUyApDQorCXsNCisJCWlmKCBwdkludGVycnVwdEV2ZW50TXV0ZXggIT0gTlVMTCApDQorCQl7DQorCQkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKwkJCXVsSXNySGFuZGxlclsgdWxJbnRlcnJ1cHROdW1iZXIgXSA9IHB2SGFuZGxlcjsNCisJCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXVsSXNySGFuZGxlclsgdWxJbnRlcnJ1cHROdW1iZXIgXSA9IHB2SGFuZGxlcjsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQorew0KKwlpZiggeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSgpICE9IHRhc2tTQ0hFRFVMRVJfTk9UX1NUQVJURUQgKQ0KKwl7DQorCQkvKiBUaGUgaW50ZXJydXB0IGV2ZW50IG11dGV4IGlzIGhlbGQgZm9yIHRoZSBlbnRpcmUgY3JpdGljYWwgc2VjdGlvbiwNCisJCWVmZmVjdGl2ZWx5IGRpc2FibGluZyAoc2ltdWxhdGVkKSBpbnRlcnJ1cHRzLiAqLw0KKwkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKwkJdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJfQ0KKwllbHNlDQorCXsNCisJCXVsQ3JpdGljYWxOZXN0aW5nKys7DQorCX0JDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCit4VGhyZWFkU3RhdGUgKnB4VGhyZWFkU3RhdGU7DQorbG9uZyBsTXV0ZXhOZWVkc1JlbGVhc2luZzsNCisNCisJLyogVGhlIGludGVycnVwdCBldmVudCBtdXRleCBzaG91bGQgYWxyZWFkeSBiZSBoZWxkIGJ5IHRoaXMgdGhyZWFkIGFzIGl0IHdhcw0KKwlvYnRhaW5lZCBvbiBlbnRyeSB0byB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisNCisJbE11dGV4TmVlZHNSZWxlYXNpbmcgPSBwZFRSVUU7DQorDQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09ICggcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKyAxICkgKQ0KKwkJew0KKwkJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorCQkJLyogV2VyZSBhbnkgaW50ZXJydXB0cyBzZXQgdG8gcGVuZGluZyB3aGlsZSBpbnRlcnJ1cHRzIHdlcmUgDQorCQkJKHNpbXVsYXRlZCkgZGlzYWJsZWQ/ICovDQorCQkJaWYoIHVsUGVuZGluZ0ludGVycnVwdHMgIT0gMFVMICkNCisJCQl7DQorCQkJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQorDQorCQkJCS8qIFRoZSBldmVudCBoYW5kbGVyIG5lZWRzIHRvIGtub3cgdG8gc2lnbmFsIHRoZSBpbnRlcnJ1cHQgDQorCQkJCWFja25vd2xlZGdlIGV2ZW50IHRoZSBuZXh0IHRpbWUgdGhpcyB0YXNrIHJ1bnMuICovDQorCQkJCXB4VGhyZWFkU3RhdGUgPSAoIHhUaHJlYWRTdGF0ZSAqICkgKiggKCB1bnNpZ25lZCBsb25nICogKSBweEN1cnJlbnRUQ0IgKTsNCisNCisJCQkJLyogTXV0ZXggd2lsbCBiZSByZWxlYXNlZCBub3csIHNvIGRvZXMgbm90IHJlcXVpcmUgcmVsZWFzaW5nDQorCQkJCW9uIGZ1bmN0aW9uIGV4aXQuICovDQorCQkJCWxNdXRleE5lZWRzUmVsZWFzaW5nID0gcGRGQUxTRTsNCisJCQkJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCisJCQl9DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJLyogVGljayBpbnRlcnJ1cHRzIHdpbGwgc3RpbGwgbm90IGJlIHByb2Nlc3NlZCBhcyB0aGUgY3JpdGljYWwNCisJCQluZXN0aW5nIGRlcHRoIHdpbGwgbm90IGJlIHplcm8uICovDQorCQkJdWxDcml0aWNhbE5lc3RpbmctLTsNCisJCX0NCisJfQ0KKw0KKwlpZiggbE11dGV4TmVlZHNSZWxlYXNpbmcgPT0gcGRUUlVFICkNCisJew0KKwkJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVNWQy1NaW5nVy9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGFhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTVNWQy1NaW5nVy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDEzNyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDExIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaW5jbHVkZSA8V2luZG93cy5oPg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisJRGVmaW5lcw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKyAgICB0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorICAgIHR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk0DQorDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJdlBvcnRHZW5lcmF0ZVNpbXVsYXRlZEludGVycnVwdCggcG9ydElOVEVSUlVQVF9ZSUVMRCApDQorDQordm9pZCB2UG9ydERlbGV0ZVRocmVhZCggdm9pZCAqcHZUaHJlYWRUb0RlbGV0ZSApOw0KKyNkZWZpbmUgcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKQl2UG9ydERlbGV0ZVRocmVhZCggcHhUQ0IgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorDQorDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX1lJRUxECQkJCSggMFVMICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfVElDSwkJCQkoIDFVTCApDQorDQorLyogDQorICogUmFpc2UgYSBzaW11bGF0ZWQgaW50ZXJydXB0IHJlcHJlc2VudGVkIGJ5IHRoZSBiaXQgbWFzayBpbiB1bEludGVycnVwdE1hc2suDQorICogRWFjaCBiaXQgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IGFuIGluZGl2aWR1YWwgaW50ZXJydXB0IC0gd2l0aCB0aGUgZmlyc3QNCisgKiB0d28gYml0cyBiZWluZyB1c2VkIGZvciB0aGUgWWllbGQgYW5kIFRpY2sgaW50ZXJydXB0cyByZXNwZWN0aXZlbHkuDQorKi8NCit2b2lkIHZQb3J0R2VuZXJhdGVTaW11bGF0ZWRJbnRlcnJ1cHQoIHVuc2lnbmVkIGxvbmcgdWxJbnRlcnJ1cHROdW1iZXIgKTsNCisNCisvKg0KKyAqIEluc3RhbGwgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gYmUgY2FsbGVkIGJ5IHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IGhhbmRsZXIgDQorICogdGhyZWFkLiAgVGhlIGludGVycnVwdCBudW1iZXIgbXVzdCBiZSBhYm92ZSBhbnkgdXNlZCBieSB0aGUga2VybmVsIGl0c2VsZg0KKyAqIChhdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoZSBrZXJuZWwgd2FzIHVzaW5nIGludGVycnVwdCBudW1iZXJzIDAsIDEsIGFuZCAyDQorICogYXMgZGVmaW5lZCBhYm92ZSkuICBUaGUgbnVtYmVyIG11c3QgYWxzbyBiZSBsb3dlciB0aGFuIDMyLiANCisgKg0KKyAqIEludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9ucyBtdXN0IHJldHVybiBhIG5vbi16ZXJvIHZhbHVlIGlmIGV4ZWN1dGluZyB0aGUNCisgKiBoYW5kbGVyIHJlc3VsdGVkIGluIGEgdGFzayBzd2l0Y2ggYmVpbmcgcmVxdWlyZWQuIA0KKyAqLw0KK3ZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCB1bnNpZ25lZCBsb25nIHVsSW50ZXJydXB0TnVtYmVyLCB1bnNpZ25lZCBsb25nICgqcHZIYW5kbGVyKSggdm9pZCApICk7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01lbU1hbmcvaGVhcF8xLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ1ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01lbU1hbmcvaGVhcF8xLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKy8qDQorICogVGhlIHNpbXBsZXN0IHBvc3NpYmxlIGltcGxlbWVudGF0aW9uIG9mIHB2UG9ydE1hbGxvYygpLiAgTm90ZSB0aGF0IHRoaXMNCisgKiBpbXBsZW1lbnRhdGlvbiBkb2VzIE5PVCBhbGxvdyBhbGxvY2F0ZWQgbWVtb3J5IHRvIGJlIGZyZWVkIGFnYWluLg0KKyAqDQorICogU2VlIGhlYXBfMi5jLCBoZWFwXzMuYyBhbmQgaGVhcF80LmMgZm9yIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZSANCisgKiBtZW1vcnkgbWFuYWdlbWVudCBwYWdlcyBvZiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCisgKi8NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KK2FsbCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB1c2UgdGhlIE1QVSB3cmFwcGVycy4gIFRoYXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuDQordGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCisjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisjdW5kZWYgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCisNCisvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0aGUgaGVhcC4gIFRoZSBzdHJ1Y3QgaXMgdXNlZCB0byBmb3JjZSBieXRlDQorYWxpZ25tZW50IHdpdGhvdXQgdXNpbmcgYW55IG5vbi1wb3J0YWJsZSBjb2RlLiAqLw0KK3N0YXRpYyB1bmlvbiB4UlRPU19IRUFQDQorew0KKwkjaWYgcG9ydEJZVEVfQUxJR05NRU5UID09IDgNCisJCXZvbGF0aWxlIHBvcnRET1VCTEUgZER1bW15Ow0KKwkjZWxzZQ0KKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKwkjZW5kaWYJDQorCXVuc2lnbmVkIGNoYXIgdWNIZWFwWyBjb25maWdUT1RBTF9IRUFQX1NJWkUgXTsNCit9IHhIZWFwOw0KKw0KK3N0YXRpYyBzaXplX3QgeE5leHRGcmVlQnl0ZSA9ICggc2l6ZV90ICkgMDsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkICpwdlBvcnRNYWxsb2MoIHNpemVfdCB4V2FudGVkU2l6ZSApDQorew0KK3ZvaWQgKnB2UmV0dXJuID0gTlVMTDsgDQorDQorCS8qIEVuc3VyZSB0aGF0IGJsb2NrcyBhcmUgYWx3YXlzIGFsaWduZWQgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gKi8NCisJI2lmIHBvcnRCWVRFX0FMSUdOTUVOVCAhPSAxDQorCQlpZiggeFdhbnRlZFNpemUgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApDQorCQl7DQorCQkJLyogQnl0ZSBhbGlnbm1lbnQgcmVxdWlyZWQuICovDQorCQkJeFdhbnRlZFNpemUgKz0gKCBwb3J0QllURV9BTElHTk1FTlQgLSAoIHhXYW50ZWRTaXplICYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSApOw0KKwkJfQ0KKwkjZW5kaWYNCisNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorCXsNCisJCS8qIENoZWNrIHRoZXJlIGlzIGVub3VnaCByb29tIGxlZnQgZm9yIHRoZSBhbGxvY2F0aW9uLiAqLw0KKwkJaWYoICggKCB4TmV4dEZyZWVCeXRlICsgeFdhbnRlZFNpemUgKSA8IGNvbmZpZ1RPVEFMX0hFQVBfU0laRSApICYmDQorCQkJKCAoIHhOZXh0RnJlZUJ5dGUgKyB4V2FudGVkU2l6ZSApID4geE5leHRGcmVlQnl0ZSApCSkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovDQorCQl7DQorCQkJLyogUmV0dXJuIHRoZSBuZXh0IGZyZWUgYnl0ZSB0aGVuIGluY3JlbWVudCB0aGUgaW5kZXggcGFzdCB0aGlzDQorCQkJYmxvY2suICovDQorCQkJcHZSZXR1cm4gPSAmKCB4SGVhcC51Y0hlYXBbIHhOZXh0RnJlZUJ5dGUgXSApOw0KKwkJCXhOZXh0RnJlZUJ5dGUgKz0geFdhbnRlZFNpemU7CQkJDQorCQl9CQ0KKwl9DQorCXhUYXNrUmVzdW1lQWxsKCk7DQorCQ0KKwkjaWYoIGNvbmZpZ1VTRV9NQUxMT0NfRkFJTEVEX0hPT0sgPT0gMSApDQorCXsNCisJCWlmKCBwdlJldHVybiA9PSBOVUxMICkNCisJCXsNCisJCQlleHRlcm4gdm9pZCB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCB2b2lkICk7DQorCQkJdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vaygpOw0KKwkJfQ0KKwl9DQorCSNlbmRpZgkNCisNCisJcmV0dXJuIHB2UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RnJlZSggdm9pZCAqcHYgKQ0KK3sNCisJLyogTWVtb3J5IGNhbm5vdCBiZSBmcmVlZCB1c2luZyB0aGlzIHNjaGVtZS4gIFNlZSBoZWFwXzIuYywgaGVhcF8zLmMgYW5kDQorCWhlYXBfNC5jIGZvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcGFnZXMgb2YgDQorCWh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLiAqLw0KKwkoIHZvaWQgKSBwdjsNCisJDQorCS8qIEZvcmNlIGFuIGFzc2VydCBhcyBpdCBpcyBpbnZhbGlkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8NCisJY29uZmlnQVNTRVJUKCBwdiA9PSBOVUxMICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRJbml0aWFsaXNlQmxvY2tzKCB2b2lkICkNCit7DQorCS8qIE9ubHkgcmVxdWlyZWQgd2hlbiBzdGF0aWMgbWVtb3J5IGlzIG5vdCBjbGVhcmVkLiAqLw0KKwl4TmV4dEZyZWVCeXRlID0gKCBzaXplX3QgKSAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaXplX3QgeFBvcnRHZXRGcmVlSGVhcFNpemUoIHZvaWQgKQ0KK3sNCisJcmV0dXJuICggY29uZmlnVE9UQUxfSEVBUF9TSVpFIC0geE5leHRGcmVlQnl0ZSApOw0KK30NCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzIuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTc4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzIuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCisgKiBBIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBwdlBvcnRNYWxsb2MoKSBhbmQgdlBvcnRGcmVlKCkgdGhhdCBwZXJtaXRzDQorICogYWxsb2NhdGVkIGJsb2NrcyB0byBiZSBmcmVlZCwgYnV0IGRvZXMgbm90IGNvbWJpbmUgYWRqYWNlbnQgZnJlZSBibG9ja3MNCisgKiBpbnRvIGEgc2luZ2xlIGxhcmdlciBibG9jayAoYW5kIHNvIHdpbGwgZnJhZ21lbnQgbWVtb3J5KS4gIFNlZSBoZWFwXzQuYyBmb3IgDQorICogYW4gYXF1aXZhbGVudCB0aGF0IGRvZXMgY29tYmluZSBhZGphY2VudCBibG9ja3MgaW50byBzaW5nbGUgbGFyZ2VyIGJsb2Nrcy4NCisgKg0KKyAqIFNlZSBoZWFwXzEuYywgaGVhcF8zLmMgYW5kIGhlYXBfNC5jIGZvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgDQorICogbWVtb3J5IG1hbmFnZW1lbnQgcGFnZXMgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICovDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKy8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCithbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KK3Rhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQorI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgdGhlIGhlYXAuICBUaGUgc3RydWN0IGlzIHVzZWQgdG8gZm9yY2UgYnl0ZQ0KK2FsaWdubWVudCB3aXRob3V0IHVzaW5nIGFueSBub24tcG9ydGFibGUgY29kZS4gKi8NCitzdGF0aWMgdW5pb24geFJUT1NfSEVBUA0KK3sNCisJI2lmIHBvcnRCWVRFX0FMSUdOTUVOVCA9PSA4DQorCQl2b2xhdGlsZSBwb3J0RE9VQkxFIGREdW1teTsNCisJI2Vsc2UNCisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisJI2VuZGlmDQorCXVuc2lnbmVkIGNoYXIgdWNIZWFwWyBjb25maWdUT1RBTF9IRUFQX1NJWkUgXTsNCit9IHhIZWFwOw0KKw0KKy8qIERlZmluZSB0aGUgbGlua2VkIGxpc3Qgc3RydWN0dXJlLiAgVGhpcyBpcyB1c2VkIHRvIGxpbmsgZnJlZSBibG9ja3MgaW4gb3JkZXINCitvZiB0aGVpciBzaXplLiAqLw0KK3R5cGVkZWYgc3RydWN0IEFfQkxPQ0tfTElOSw0KK3sNCisJc3RydWN0IEFfQkxPQ0tfTElOSyAqcHhOZXh0RnJlZUJsb2NrOwkvKjw8IFRoZSBuZXh0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QuICovDQorCXNpemVfdCB4QmxvY2tTaXplOwkJCQkJCS8qPDwgVGhlIHNpemUgb2YgdGhlIGZyZWUgYmxvY2suICovDQorfSB4QmxvY2tMaW5rOw0KKw0KKw0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCAgaGVhcFNUUlVDVF9TSVpFCT0gKCBzaXplb2YoIHhCbG9ja0xpbmsgKSArIHBvcnRCWVRFX0FMSUdOTUVOVCAtICggc2l6ZW9mKCB4QmxvY2tMaW5rICkgJSBwb3J0QllURV9BTElHTk1FTlQgKSApOw0KKyNkZWZpbmUgaGVhcE1JTklNVU1fQkxPQ0tfU0laRQkoICggc2l6ZV90ICkgKCBoZWFwU1RSVUNUX1NJWkUgKiAyICkgKQ0KKw0KKy8qIENyZWF0ZSBhIGNvdXBsZSBvZiBsaXN0IGxpbmtzIHRvIG1hcmsgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGxpc3QuICovDQorc3RhdGljIHhCbG9ja0xpbmsgeFN0YXJ0LCB4RW5kOw0KKw0KKy8qIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZnJlZSBieXRlcyByZW1haW5pbmcsIGJ1dCBzYXlzIG5vdGhpbmcgYWJvdXQNCitmcmFnbWVudGF0aW9uLiAqLw0KK3N0YXRpYyBzaXplX3QgeEZyZWVCeXRlc1JlbWFpbmluZyA9IGNvbmZpZ1RPVEFMX0hFQVBfU0laRTsNCisNCisvKiBTVEFUSUMgRlVOQ1RJT05TIEFSRSBERUZJTkVEIEFTIE1BQ1JPUyBUTyBNSU5JTUlaRSBUSEUgRlVOQ1RJT04gQ0FMTCBERVBUSC4gKi8NCisNCisvKg0KKyAqIEluc2VydCBhIGJsb2NrIGludG8gdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MgLSB3aGljaCBpcyBvcmRlcmVkIGJ5IHNpemUgb2YNCisgKiB0aGUgYmxvY2suICBTbWFsbCBibG9ja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IGFuZCBsYXJnZSBibG9ja3MgYXQgdGhlIGVuZA0KKyAqIG9mIHRoZSBsaXN0Lg0KKyAqLw0KKyNkZWZpbmUgcHJ2SW5zZXJ0QmxvY2tJbnRvRnJlZUxpc3QoIHB4QmxvY2tUb0luc2VydCApCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit4QmxvY2tMaW5rICpweEl0ZXJhdG9yOwkJCQkJCQkJCQkJCQkJCQlcDQorc2l6ZV90IHhCbG9ja1NpemU7CQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl4QmxvY2tTaXplID0gcHhCbG9ja1RvSW5zZXJ0LT54QmxvY2tTaXplOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgYSBibG9jayBpcyBmb3VuZCB0aGF0IGhhcyBhIGxhcmdlciBzaXplICovCVwNCisJLyogdGhhbiB0aGUgYmxvY2sgd2UgYXJlIGluc2VydGluZy4gKi8JCQkJCQkJCQkJCVwNCisJZm9yKCBweEl0ZXJhdG9yID0gJnhTdGFydDsgcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrLT54QmxvY2tTaXplIDwgeEJsb2NrU2l6ZTsgcHhJdGVyYXRvciA9IHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jayApCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlIC0ganVzdCBpdGVyYXRlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uLiAqLwlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFVwZGF0ZSB0aGUgbGlzdCB0byBpbmNsdWRlIHRoZSBibG9jayBiZWluZyBpbnNlcnRlZCBpbiB0aGUgY29ycmVjdCAqLwkJXA0KKwkvKiBwb3NpdGlvbi4gKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisJcHhCbG9ja1RvSW5zZXJ0LT5weE5leHRGcmVlQmxvY2sgPSBweEl0ZXJhdG9yLT5weE5leHRGcmVlQmxvY2s7CQkJCQlcDQorCXB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jayA9IHB4QmxvY2tUb0luc2VydDsJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcHJ2SGVhcEluaXQoKQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit4QmxvY2tMaW5rICpweEZpcnN0RnJlZUJsb2NrOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogeFN0YXJ0IGlzIHVzZWQgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3Qgb2YgZnJlZSAqLwlcDQorCS8qIGJsb2Nrcy4gIFRoZSB2b2lkIGNhc3QgaXMgdXNlZCB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLiAqLwkJCQlcDQorCXhTdGFydC5weE5leHRGcmVlQmxvY2sgPSAoIHZvaWQgKiApIHhIZWFwLnVjSGVhcDsJCQkJCQkJCVwNCisJeFN0YXJ0LnhCbG9ja1NpemUgPSAoIHNpemVfdCApIDA7CQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogeEVuZCBpcyB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8JCQkJCVwNCisJeEVuZC54QmxvY2tTaXplID0gY29uZmlnVE9UQUxfSEVBUF9TSVpFOwkJCQkJCQkJCQlcDQorCXhFbmQucHhOZXh0RnJlZUJsb2NrID0gTlVMTDsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVG8gc3RhcnQgd2l0aCB0aGVyZSBpcyBhIHNpbmdsZSBmcmVlIGJsb2NrIHRoYXQgaXMgc2l6ZWQgdG8gdGFrZSB1cCB0aGUJCVwNCisJZW50aXJlIGhlYXAgc3BhY2UuICovCQkJCQkJCQkJCQkJCQkJXA0KKwlweEZpcnN0RnJlZUJsb2NrID0gKCB2b2lkICogKSB4SGVhcC51Y0hlYXA7CQkJCQkJCQkJCVwNCisJcHhGaXJzdEZyZWVCbG9jay0+eEJsb2NrU2l6ZSA9IGNvbmZpZ1RPVEFMX0hFQVBfU0laRTsJCQkJCQkJXA0KKwlweEZpcnN0RnJlZUJsb2NrLT5weE5leHRGcmVlQmxvY2sgPSAmeEVuZDsJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkICpwdlBvcnRNYWxsb2MoIHNpemVfdCB4V2FudGVkU2l6ZSApDQorew0KK3hCbG9ja0xpbmsgKnB4QmxvY2ssICpweFByZXZpb3VzQmxvY2ssICpweE5ld0Jsb2NrTGluazsNCitzdGF0aWMgcG9ydEJBU0VfVFlQRSB4SGVhcEhhc0JlZW5Jbml0aWFsaXNlZCA9IHBkRkFMU0U7DQordm9pZCAqcHZSZXR1cm4gPSBOVUxMOw0KKw0KKwl2VGFza1N1c3BlbmRBbGwoKTsNCisJew0KKwkJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBtYWxsb2MgdGhlbiB0aGUgaGVhcCB3aWxsIHJlcXVpcmUNCisJCWluaXRpYWxpc2F0aW9uIHRvIHNldHVwIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KKwkJaWYoIHhIZWFwSGFzQmVlbkluaXRpYWxpc2VkID09IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXBydkhlYXBJbml0KCk7DQorCQkJeEhlYXBIYXNCZWVuSW5pdGlhbGlzZWQgPSBwZFRSVUU7DQorCQl9DQorDQorCQkvKiBUaGUgd2FudGVkIHNpemUgaXMgaW5jcmVhc2VkIHNvIGl0IGNhbiBjb250YWluIGEgeEJsb2NrTGluaw0KKwkJc3RydWN0dXJlIGluIGFkZGl0aW9uIHRvIHRoZSByZXF1ZXN0ZWQgYW1vdW50IG9mIGJ5dGVzLiAqLw0KKwkJaWYoIHhXYW50ZWRTaXplID4gMCApDQorCQl7DQorCQkJeFdhbnRlZFNpemUgKz0gaGVhcFNUUlVDVF9TSVpFOw0KKw0KKwkJCS8qIEVuc3VyZSB0aGF0IGJsb2NrcyBhcmUgYWx3YXlzIGFsaWduZWQgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gKi8NCisJCQlpZiggeFdhbnRlZFNpemUgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApDQorCQkJew0KKwkJCQkvKiBCeXRlIGFsaWdubWVudCByZXF1aXJlZC4gKi8NCisJCQkJeFdhbnRlZFNpemUgKz0gKCBwb3J0QllURV9BTElHTk1FTlQgLSAoIHhXYW50ZWRTaXplICYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSApOw0KKwkJCX0NCisJCX0NCisNCisJCWlmKCAoIHhXYW50ZWRTaXplID4gMCApICYmICggeFdhbnRlZFNpemUgPCBjb25maWdUT1RBTF9IRUFQX1NJWkUgKSApDQorCQl7DQorCQkJLyogQmxvY2tzIGFyZSBzdG9yZWQgaW4gYnl0ZSBvcmRlciAtIHRyYXZlcnNlIHRoZSBsaXN0IGZyb20gdGhlIHN0YXJ0DQorCQkJKHNtYWxsZXN0KSBibG9jayB1bnRpbCBvbmUgb2YgYWRlcXVhdGUgc2l6ZSBpcyBmb3VuZC4gKi8NCisJCQlweFByZXZpb3VzQmxvY2sgPSAmeFN0YXJ0Ow0KKwkJCXB4QmxvY2sgPSB4U3RhcnQucHhOZXh0RnJlZUJsb2NrOw0KKwkJCXdoaWxlKCAoIHB4QmxvY2stPnhCbG9ja1NpemUgPCB4V2FudGVkU2l6ZSApICYmICggcHhCbG9jay0+cHhOZXh0RnJlZUJsb2NrICE9IE5VTEwgKSApDQorCQkJew0KKwkJCQlweFByZXZpb3VzQmxvY2sgPSBweEJsb2NrOw0KKwkJCQlweEJsb2NrID0gcHhCbG9jay0+cHhOZXh0RnJlZUJsb2NrOw0KKwkJCX0NCisNCisJCQkvKiBJZiB3ZSBmb3VuZCB0aGUgZW5kIG1hcmtlciB0aGVuIGEgYmxvY2sgb2YgYWRlcXVhdGUgc2l6ZSB3YXMgbm90IGZvdW5kLiAqLw0KKwkJCWlmKCBweEJsb2NrICE9ICZ4RW5kICkNCisJCQl7DQorCQkJCS8qIFJldHVybiB0aGUgbWVtb3J5IHNwYWNlIC0ganVtcGluZyBvdmVyIHRoZSB4QmxvY2tMaW5rIHN0cnVjdHVyZQ0KKwkJCQlhdCBpdHMgc3RhcnQuICovDQorCQkJCXB2UmV0dXJuID0gKCB2b2lkICogKSAoICggKCB1bnNpZ25lZCBjaGFyICogKSBweFByZXZpb3VzQmxvY2stPnB4TmV4dEZyZWVCbG9jayApICsgaGVhcFNUUlVDVF9TSVpFICk7DQorDQorCQkJCS8qIFRoaXMgYmxvY2sgaXMgYmVpbmcgcmV0dXJuZWQgZm9yIHVzZSBzbyBtdXN0IGJlIHRha2VuIG91dCBvZiB0aGUNCisJCQkJbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCisJCQkJcHhQcmV2aW91c0Jsb2NrLT5weE5leHRGcmVlQmxvY2sgPSBweEJsb2NrLT5weE5leHRGcmVlQmxvY2s7DQorDQorCQkJCS8qIElmIHRoZSBibG9jayBpcyBsYXJnZXIgdGhhbiByZXF1aXJlZCBpdCBjYW4gYmUgc3BsaXQgaW50byB0d28uICovDQorCQkJCWlmKCAoIHB4QmxvY2stPnhCbG9ja1NpemUgLSB4V2FudGVkU2l6ZSApID4gaGVhcE1JTklNVU1fQkxPQ0tfU0laRSApDQorCQkJCXsNCisJCQkJCS8qIFRoaXMgYmxvY2sgaXMgdG8gYmUgc3BsaXQgaW50byB0d28uICBDcmVhdGUgYSBuZXcgYmxvY2sNCisJCQkJCWZvbGxvd2luZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZC4gVGhlIHZvaWQgY2FzdCBpcw0KKwkJCQkJdXNlZCB0byBwcmV2ZW50IGJ5dGUgYWxpZ25tZW50IHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyLiAqLw0KKwkJCQkJcHhOZXdCbG9ja0xpbmsgPSAoIHZvaWQgKiApICggKCAoIHVuc2lnbmVkIGNoYXIgKiApIHB4QmxvY2sgKSArIHhXYW50ZWRTaXplICk7DQorDQorCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHNpemVzIG9mIHR3byBibG9ja3Mgc3BsaXQgZnJvbSB0aGUgc2luZ2xlDQorCQkJCQlibG9jay4gKi8NCisJCQkJCXB4TmV3QmxvY2tMaW5rLT54QmxvY2tTaXplID0gcHhCbG9jay0+eEJsb2NrU2l6ZSAtIHhXYW50ZWRTaXplOw0KKwkJCQkJcHhCbG9jay0+eEJsb2NrU2l6ZSA9IHhXYW50ZWRTaXplOw0KKw0KKwkJCQkJLyogSW5zZXJ0IHRoZSBuZXcgYmxvY2sgaW50byB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCisJCQkJCXBydkluc2VydEJsb2NrSW50b0ZyZWVMaXN0KCAoIHB4TmV3QmxvY2tMaW5rICkgKTsNCisJCQkJfQ0KKwkJCQkNCisJCQkJeEZyZWVCeXRlc1JlbWFpbmluZyAtPSBweEJsb2NrLT54QmxvY2tTaXplOw0KKwkJCX0NCisJCX0NCisJfQ0KKwl4VGFza1Jlc3VtZUFsbCgpOw0KKw0KKwkjaWYoIGNvbmZpZ1VTRV9NQUxMT0NfRkFJTEVEX0hPT0sgPT0gMSApDQorCXsNCisJCWlmKCBwdlJldHVybiA9PSBOVUxMICkNCisJCXsNCisJCQlleHRlcm4gdm9pZCB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCB2b2lkICk7DQorCQkJdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vaygpOw0KKwkJfQ0KKwl9DQorCSNlbmRpZg0KKw0KKwlyZXR1cm4gcHZSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRGcmVlKCB2b2lkICpwdiApDQorew0KK3Vuc2lnbmVkIGNoYXIgKnB1YyA9ICggdW5zaWduZWQgY2hhciAqICkgcHY7DQoreEJsb2NrTGluayAqcHhMaW5rOw0KKw0KKwlpZiggcHYgIT0gTlVMTCApDQorCXsNCisJCS8qIFRoZSBtZW1vcnkgYmVpbmcgZnJlZWQgd2lsbCBoYXZlIGFuIHhCbG9ja0xpbmsgc3RydWN0dXJlIGltbWVkaWF0ZWx5DQorCQliZWZvcmUgaXQuICovDQorCQlwdWMgLT0gaGVhcFNUUlVDVF9TSVpFOw0KKw0KKwkJLyogVGhpcyBjYXN0aW5nIGlzIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGZyb20gaXNzdWluZyB3YXJuaW5ncy4gKi8NCisJCXB4TGluayA9ICggdm9pZCAqICkgcHVjOw0KKw0KKwkJdlRhc2tTdXNwZW5kQWxsKCk7DQorCQl7DQorCQkJLyogQWRkIHRoaXMgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MuICovDQorCQkJcHJ2SW5zZXJ0QmxvY2tJbnRvRnJlZUxpc3QoICggKCB4QmxvY2tMaW5rICogKSBweExpbmsgKSApOw0KKwkJCXhGcmVlQnl0ZXNSZW1haW5pbmcgKz0gcHhMaW5rLT54QmxvY2tTaXplOw0KKwkJfQ0KKwkJeFRhc2tSZXN1bWVBbGwoKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaXplX3QgeFBvcnRHZXRGcmVlSGVhcFNpemUoIHZvaWQgKQ0KK3sNCisJcmV0dXJuIHhGcmVlQnl0ZXNSZW1haW5pbmc7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRJbml0aWFsaXNlQmxvY2tzKCB2b2lkICkNCit7DQorCS8qIFRoaXMganVzdCBleGlzdHMgdG8ga2VlcCB0aGUgbGlua2VyIHF1aWV0LiAqLw0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzMuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNmRhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzMuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyoNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBwdlBvcnRNYWxsb2MoKSBhbmQgdlBvcnRGcmVlKCkgdGhhdCByZWxpZXMgb24gdGhlDQorICogY29tcGlsZXJzIG93biBtYWxsb2MoKSBhbmQgZnJlZSgpIGltcGxlbWVudGF0aW9ucy4NCisgKg0KKyAqIFRoaXMgZmlsZSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBsaW5rZXIgaXMgY29uZmlndXJlZCB0byB0byBnZW5lcmF0ZQ0KKyAqIGEgaGVhcCBtZW1vcnkgYXJlYS4NCisgKg0KKyAqIFNlZSBoZWFwXzEuYywgaGVhcF8yLmMgYW5kIGhlYXBfNC5jIGZvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgDQorICogbWVtb3J5IG1hbmFnZW1lbnQgcGFnZXMgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKy8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCithbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KK3Rhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQorI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCAqcHZQb3J0TWFsbG9jKCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KK3sNCit2b2lkICpwdlJldHVybjsNCisNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorCXsNCisJCXB2UmV0dXJuID0gbWFsbG9jKCB4V2FudGVkU2l6ZSApOw0KKwl9DQorCXhUYXNrUmVzdW1lQWxsKCk7DQorDQorCSNpZiggY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyA9PSAxICkNCisJew0KKwkJaWYoIHB2UmV0dXJuID09IE5VTEwgKQ0KKwkJew0KKwkJCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soIHZvaWQgKTsNCisJCQl2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCk7DQorCQl9DQorCX0NCisJI2VuZGlmDQorCQ0KKwlyZXR1cm4gcHZSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRGcmVlKCB2b2lkICpwdiApDQorew0KKwlpZiggcHYgKQ0KKwl7DQorCQl2VGFza1N1c3BlbmRBbGwoKTsNCisJCXsNCisJCQlmcmVlKCBwdiApOw0KKwkJfQ0KKwkJeFRhc2tSZXN1bWVBbGwoKTsNCisJfQ0KK30NCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMTBiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwXzQuYwpAQCAtMCwwICsxLDM1NyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwNCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXINCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorICogQSBzYW1wbGUgaW1wbGVtZW50YXRpb24gb2YgcHZQb3J0TWFsbG9jKCkgYW5kIHZQb3J0RnJlZSgpIHRoYXQgY29tYmluZXMgDQorICogKGNvYWxlc2NlbmNlcykgYWRqYWNlbnQgbWVtb3J5IGJsb2NrcyBhcyB0aGV5IGFyZSBmcmVlZCwgYW5kIGluIHNvIGRvaW5nIA0KKyAqIGxpbWl0cyBtZW1vcnkgZnJhZ21lbnRhdGlvbi4NCisgKg0KKyAqIFNlZSBoZWFwXzEuYywgaGVhcF8yLmMgYW5kIGhlYXBfMy5jIGZvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgDQorICogbWVtb3J5IG1hbmFnZW1lbnQgcGFnZXMgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorICovDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKy8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCithbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KK3Rhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQorI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorLyogQmxvY2sgc2l6ZXMgbXVzdCBub3QgZ2V0IHRvbyBzbWFsbC4gKi8NCisjZGVmaW5lIGhlYXBNSU5JTVVNX0JMT0NLX1NJWkUJKCAoIHNpemVfdCApICggaGVhcFNUUlVDVF9TSVpFICogMiApICkNCisNCisvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0aGUgaGVhcC4gIFRoZSBzdHJ1Y3QgaXMgdXNlZCB0byBmb3JjZSBieXRlDQorYWxpZ25tZW50IHdpdGhvdXQgdXNpbmcgYW55IG5vbi1wb3J0YWJsZSBjb2RlLiAqLw0KK3N0YXRpYyB1bmlvbiB4UlRPU19IRUFQDQorew0KKwkjaWYgcG9ydEJZVEVfQUxJR05NRU5UID09IDgNCisJCXZvbGF0aWxlIHBvcnRET1VCTEUgZER1bW15Ow0KKwkjZWxzZQ0KKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKwkjZW5kaWYNCisJdW5zaWduZWQgY2hhciB1Y0hlYXBbIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSBdOw0KK30geEhlYXA7DQorDQorLyogRGVmaW5lIHRoZSBsaW5rZWQgbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGlzIHVzZWQgdG8gbGluayBmcmVlIGJsb2NrcyBpbiBvcmRlcg0KK29mIHRoZWlyIG1lbW9yeSBhZGRyZXNzLiAqLw0KK3R5cGVkZWYgc3RydWN0IEFfQkxPQ0tfTElOSw0KK3sNCisJc3RydWN0IEFfQkxPQ0tfTElOSyAqcHhOZXh0RnJlZUJsb2NrOwkvKjw8IFRoZSBuZXh0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QuICovDQorCXNpemVfdCB4QmxvY2tTaXplOwkJCQkJCS8qPDwgVGhlIHNpemUgb2YgdGhlIGZyZWUgYmxvY2suICovDQorfSB4QmxvY2tMaW5rOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSW5zZXJ0cyBhIGJsb2NrIG9mIG1lbW9yeSB0aGF0IGlzIGJlaW5nIGZyZWVkIGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gDQorICogdGhlIGxpc3Qgb2YgZnJlZSBtZW1vcnkgYmxvY2tzLiAgVGhlIGJsb2NrIGJlaW5nIGZyZWVkIHdpbGwgYmUgbWVyZ2VkIHdpdGgNCisgKiB0aGUgYmxvY2sgaW4gZnJvbnQgaXQgYW5kL29yIHRoZSBibG9jayBiZWhpbmQgaXQgaWYgdGhlIG1lbW9yeSBibG9ja3MgYXJlDQorICogYWRqYWNlbnQgdG8gZWFjaCBvdGhlci4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZJbnNlcnRCbG9ja0ludG9GcmVlTGlzdCggeEJsb2NrTGluayAqcHhCbG9ja1RvSW5zZXJ0ICk7DQorDQorLyoNCisgKiBDYWxsZWQgYXV0b21hdGljYWxseSB0byBzZXR1cCB0aGUgcmVxdWlyZWQgaGVhcCBzdHJ1Y3R1cmVzIHRoZSBmaXJzdCB0aW1lDQorICogcHZQb3J0TWFsbG9jKCkgaXMgY2FsbGVkLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydkhlYXBJbml0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGFsbG9jYXRlZCBtZW1vcnkNCitibG9jayBtdXN0IGJ5IGNvcnJlY3RseSBieXRlIGFsaWduZWQuICovDQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhlYXBTVFJVQ1RfU0laRQk9ICggc2l6ZW9mKCB4QmxvY2tMaW5rICkgKyBwb3J0QllURV9BTElHTk1FTlQgLSAoIHNpemVvZiggeEJsb2NrTGluayApICUgcG9ydEJZVEVfQUxJR05NRU5UICkgKTsNCisNCisvKiBFbnN1cmUgdGhlIHB4RW5kIHBvaW50ZXIgd2lsbCBlbmQgdXAgb24gdGhlIGNvcnJlY3QgYnl0ZSBhbGlnbm1lbnQuICovDQorc3RhdGljIGNvbnN0IHNpemVfdCB4VG90YWxIZWFwU2l6ZSA9ICggKCBzaXplX3QgKSBjb25maWdUT1RBTF9IRUFQX1NJWkUgKSAmICggKCBzaXplX3QgKSB+cG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKTsNCisNCisvKiBDcmVhdGUgYSBjb3VwbGUgb2YgbGlzdCBsaW5rcyB0byBtYXJrIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBsaXN0LiAqLw0KK3N0YXRpYyB4QmxvY2tMaW5rIHhTdGFydCwgKnB4RW5kID0gTlVMTDsNCisNCisvKiBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGZyZWUgYnl0ZXMgcmVtYWluaW5nLCBidXQgc2F5cyBub3RoaW5nIGFib3V0DQorZnJhZ21lbnRhdGlvbi4gKi8NCitzdGF0aWMgc2l6ZV90IHhGcmVlQnl0ZXNSZW1haW5pbmcgPSAoICggc2l6ZV90ICkgY29uZmlnVE9UQUxfSEVBUF9TSVpFICkgJiAoICggc2l6ZV90ICkgfnBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICk7DQorDQorLyogU1RBVElDIEZVTkNUSU9OUyBBUkUgREVGSU5FRCBBUyBNQUNST1MgVE8gTUlOSU1JWkUgVEhFIEZVTkNUSU9OIENBTEwgREVQVEguICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCAqcHZQb3J0TWFsbG9jKCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KK3sNCit4QmxvY2tMaW5rICpweEJsb2NrLCAqcHhQcmV2aW91c0Jsb2NrLCAqcHhOZXdCbG9ja0xpbms7DQordm9pZCAqcHZSZXR1cm4gPSBOVUxMOw0KKw0KKwl2VGFza1N1c3BlbmRBbGwoKTsNCisJew0KKwkJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBtYWxsb2MgdGhlbiB0aGUgaGVhcCB3aWxsIHJlcXVpcmUNCisJCWluaXRpYWxpc2F0aW9uIHRvIHNldHVwIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KKwkJaWYoIHB4RW5kID09IE5VTEwgKQ0KKwkJew0KKwkJCXBydkhlYXBJbml0KCk7DQorCQl9DQorDQorCQkvKiBUaGUgd2FudGVkIHNpemUgaXMgaW5jcmVhc2VkIHNvIGl0IGNhbiBjb250YWluIGEgeEJsb2NrTGluaw0KKwkJc3RydWN0dXJlIGluIGFkZGl0aW9uIHRvIHRoZSByZXF1ZXN0ZWQgYW1vdW50IG9mIGJ5dGVzLiAqLw0KKwkJaWYoIHhXYW50ZWRTaXplID4gMCApDQorCQl7DQorCQkJeFdhbnRlZFNpemUgKz0gaGVhcFNUUlVDVF9TSVpFOw0KKw0KKwkJCS8qIEVuc3VyZSB0aGF0IGJsb2NrcyBhcmUgYWx3YXlzIGFsaWduZWQgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiANCisJCQlieXRlcy4gKi8NCisJCQlpZiggeFdhbnRlZFNpemUgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApDQorCQkJew0KKwkJCQkvKiBCeXRlIGFsaWdubWVudCByZXF1aXJlZC4gKi8NCisJCQkJeFdhbnRlZFNpemUgKz0gKCBwb3J0QllURV9BTElHTk1FTlQgLSAoIHhXYW50ZWRTaXplICYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSApOw0KKwkJCX0NCisJCX0NCisNCisJCWlmKCAoIHhXYW50ZWRTaXplID4gMCApICYmICggeFdhbnRlZFNpemUgPCB4VG90YWxIZWFwU2l6ZSApICkNCisJCXsNCisJCQkvKiBUcmF2ZXJzZSB0aGUgbGlzdCBmcm9tIHRoZSBzdGFydAkobG93ZXN0IGFkZHJlc3MpIGJsb2NrIHVudGlsIG9uZQ0KKwkJCW9mIGFkZXF1YXRlIHNpemUgaXMgZm91bmQuICovDQorCQkJcHhQcmV2aW91c0Jsb2NrID0gJnhTdGFydDsNCisJCQlweEJsb2NrID0geFN0YXJ0LnB4TmV4dEZyZWVCbG9jazsNCisJCQl3aGlsZSggKCBweEJsb2NrLT54QmxvY2tTaXplIDwgeFdhbnRlZFNpemUgKSAmJiAoIHB4QmxvY2stPnB4TmV4dEZyZWVCbG9jayAhPSBOVUxMICkgKQ0KKwkJCXsNCisJCQkJcHhQcmV2aW91c0Jsb2NrID0gcHhCbG9jazsNCisJCQkJcHhCbG9jayA9IHB4QmxvY2stPnB4TmV4dEZyZWVCbG9jazsNCisJCQl9DQorDQorCQkJLyogSWYgdGhlIGVuZCBtYXJrZXIgd2FzIHJlYWNoZWQgdGhlbiBhIGJsb2NrIG9mIGFkZXF1YXRlIHNpemUgd2FzDQorCQkJbm90IGZvdW5kLiAqLw0KKwkJCWlmKCBweEJsb2NrICE9IHB4RW5kICkNCisJCQl7DQorCQkJCS8qIFJldHVybiB0aGUgbWVtb3J5IHNwYWNlIC0ganVtcGluZyBvdmVyIHRoZSB4QmxvY2tMaW5rIHN0cnVjdHVyZQ0KKwkJCQlhdCBpdHMgc3RhcnQuICovDQorCQkJCXB2UmV0dXJuID0gKCB2b2lkICogKSAoICggKCB1bnNpZ25lZCBjaGFyICogKSBweFByZXZpb3VzQmxvY2stPnB4TmV4dEZyZWVCbG9jayApICsgaGVhcFNUUlVDVF9TSVpFICk7DQorDQorCQkJCS8qIFRoaXMgYmxvY2sgaXMgYmVpbmcgcmV0dXJuZWQgZm9yIHVzZSBzbyBtdXN0IGJlIHRha2VuIG91dCBvZg0KKwkJCQl0aGUJbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCisJCQkJcHhQcmV2aW91c0Jsb2NrLT5weE5leHRGcmVlQmxvY2sgPSBweEJsb2NrLT5weE5leHRGcmVlQmxvY2s7DQorDQorCQkJCS8qIElmIHRoZSBibG9jayBpcyBsYXJnZXIgdGhhbiByZXF1aXJlZCBpdCBjYW4gYmUgc3BsaXQgaW50byB0d28uICovDQorCQkJCWlmKCAoIHB4QmxvY2stPnhCbG9ja1NpemUgLSB4V2FudGVkU2l6ZSApID4gaGVhcE1JTklNVU1fQkxPQ0tfU0laRSApDQorCQkJCXsNCisJCQkJCS8qIFRoaXMgYmxvY2sgaXMgdG8gYmUgc3BsaXQgaW50byB0d28uICBDcmVhdGUgYSBuZXcgYmxvY2sNCisJCQkJCWZvbGxvd2luZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZC4gVGhlIHZvaWQgY2FzdCBpcw0KKwkJCQkJdXNlZCB0byBwcmV2ZW50IGJ5dGUgYWxpZ25tZW50IHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyLiAqLw0KKwkJCQkJcHhOZXdCbG9ja0xpbmsgPSAoIHZvaWQgKiApICggKCAoIHVuc2lnbmVkIGNoYXIgKiApIHB4QmxvY2sgKSArIHhXYW50ZWRTaXplICk7DQorDQorCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHNpemVzIG9mIHR3byBibG9ja3Mgc3BsaXQgZnJvbSB0aGUgc2luZ2xlDQorCQkJCQlibG9jay4gKi8NCisJCQkJCXB4TmV3QmxvY2tMaW5rLT54QmxvY2tTaXplID0gcHhCbG9jay0+eEJsb2NrU2l6ZSAtIHhXYW50ZWRTaXplOw0KKwkJCQkJcHhCbG9jay0+eEJsb2NrU2l6ZSA9IHhXYW50ZWRTaXplOw0KKw0KKwkJCQkJLyogSW5zZXJ0IHRoZSBuZXcgYmxvY2sgaW50byB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCisJCQkJCXBydkluc2VydEJsb2NrSW50b0ZyZWVMaXN0KCAoIHB4TmV3QmxvY2tMaW5rICkgKTsNCisJCQkJfQ0KKw0KKwkJCQl4RnJlZUJ5dGVzUmVtYWluaW5nIC09IHB4QmxvY2stPnhCbG9ja1NpemU7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXhUYXNrUmVzdW1lQWxsKCk7DQorDQorCSNpZiggY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyA9PSAxICkNCisJew0KKwkJaWYoIHB2UmV0dXJuID09IE5VTEwgKQ0KKwkJew0KKwkJCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soIHZvaWQgKTsNCisJCQl2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCk7DQorCQl9DQorCX0NCisJI2VuZGlmDQorDQorCXJldHVybiBwdlJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEZyZWUoIHZvaWQgKnB2ICkNCit7DQordW5zaWduZWQgY2hhciAqcHVjID0gKCB1bnNpZ25lZCBjaGFyICogKSBwdjsNCit4QmxvY2tMaW5rICpweExpbms7DQorDQorCWlmKCBwdiAhPSBOVUxMICkNCisJew0KKwkJLyogVGhlIG1lbW9yeSBiZWluZyBmcmVlZCB3aWxsIGhhdmUgYW4geEJsb2NrTGluayBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHkNCisJCWJlZm9yZSBpdC4gKi8NCisJCXB1YyAtPSBoZWFwU1RSVUNUX1NJWkU7DQorDQorCQkvKiBUaGlzIGNhc3RpbmcgaXMgdG8ga2VlcCB0aGUgY29tcGlsZXIgZnJvbSBpc3N1aW5nIHdhcm5pbmdzLiAqLw0KKwkJcHhMaW5rID0gKCB2b2lkICogKSBwdWM7DQorDQorCQl2VGFza1N1c3BlbmRBbGwoKTsNCisJCXsNCisJCQkvKiBBZGQgdGhpcyBibG9jayB0byB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCisJCQl4RnJlZUJ5dGVzUmVtYWluaW5nICs9IHB4TGluay0+eEJsb2NrU2l6ZTsNCisJCQlwcnZJbnNlcnRCbG9ja0ludG9GcmVlTGlzdCggKCAoIHhCbG9ja0xpbmsgKiApIHB4TGluayApICk7CQkJDQorCQl9DQorCQl4VGFza1Jlc3VtZUFsbCgpOw0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpemVfdCB4UG9ydEdldEZyZWVIZWFwU2l6ZSggdm9pZCApDQorew0KKwlyZXR1cm4geEZyZWVCeXRlc1JlbWFpbmluZzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEluaXRpYWxpc2VCbG9ja3MoIHZvaWQgKQ0KK3sNCisJLyogVGhpcyBqdXN0IGV4aXN0cyB0byBrZWVwIHRoZSBsaW5rZXIgcXVpZXQuICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydkhlYXBJbml0KCB2b2lkICkNCit7DQoreEJsb2NrTGluayAqcHhGaXJzdEZyZWVCbG9jazsNCit1bnNpZ25lZCBjaGFyICpwdWNIZWFwRW5kOw0KKw0KKwkvKiBFbnN1cmUgdGhlIHN0YXJ0IG9mIHRoZSBoZWFwIGlzIGFsaWduZWQuICovDQorCWNvbmZpZ0FTU0VSVCggKCAoICggdW5zaWduZWQgbG9uZyApIHhIZWFwLnVjSGVhcCApICYgKCAoIHVuc2lnbmVkIGxvbmcgKSBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApICkgPT0gMFVMICk7DQorDQorCS8qIHhTdGFydCBpcyB1c2VkIHRvIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IG9mIGZyZWUNCisJYmxvY2tzLiAgVGhlIHZvaWQgY2FzdCBpcyB1c2VkIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuICovDQorCXhTdGFydC5weE5leHRGcmVlQmxvY2sgPSAoIHZvaWQgKiApIHhIZWFwLnVjSGVhcDsNCisJeFN0YXJ0LnhCbG9ja1NpemUgPSAoIHNpemVfdCApIDA7DQorDQorCS8qIHB4RW5kIGlzIHVzZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzIGFuZCBpcyBpbnNlcnRlZA0KKwlhdCB0aGUgZW5kIG9mIHRoZSBoZWFwIHNwYWNlLiAqLw0KKwlwdWNIZWFwRW5kID0geEhlYXAudWNIZWFwICsgeFRvdGFsSGVhcFNpemU7DQorCXB1Y0hlYXBFbmQgLT0gaGVhcFNUUlVDVF9TSVpFOw0KKwlweEVuZCA9ICggdm9pZCAqICkgcHVjSGVhcEVuZDsNCisJY29uZmlnQVNTRVJUKCAoICggKCB1bnNpZ25lZCBsb25nICkgcHhFbmQgKSAmICggKCB1bnNpZ25lZCBsb25nICkgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSApID09IDBVTCApOw0KKwlweEVuZC0+eEJsb2NrU2l6ZSA9IDA7DQorCXB4RW5kLT5weE5leHRGcmVlQmxvY2sgPSBOVUxMOw0KKw0KKwkvKiBUbyBzdGFydCB3aXRoIHRoZXJlIGlzIGEgc2luZ2xlIGZyZWUgYmxvY2sgdGhhdCBpcyBzaXplZCB0byB0YWtlIHVwIHRoZQ0KKwllbnRpcmUgaGVhcCBzcGFjZSwgbWludXMgdGhlIHNwYWNlIHRha2VuIGJ5IHB4RW5kLiAqLw0KKwlweEZpcnN0RnJlZUJsb2NrID0gKCB2b2lkICogKSB4SGVhcC51Y0hlYXA7DQorCXB4Rmlyc3RGcmVlQmxvY2stPnhCbG9ja1NpemUgPSB4VG90YWxIZWFwU2l6ZSAtIGhlYXBTVFJVQ1RfU0laRTsNCisJcHhGaXJzdEZyZWVCbG9jay0+cHhOZXh0RnJlZUJsb2NrID0gcHhFbmQ7DQorDQorCS8qIFRoZSBoZWFwIG5vdyBjb250YWlucyBweEVuZC4gKi8NCisJeEZyZWVCeXRlc1JlbWFpbmluZyAtPSBoZWFwU1RSVUNUX1NJWkU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydkluc2VydEJsb2NrSW50b0ZyZWVMaXN0KCB4QmxvY2tMaW5rICpweEJsb2NrVG9JbnNlcnQgKQ0KK3sNCit4QmxvY2tMaW5rICpweEl0ZXJhdG9yOw0KK3Vuc2lnbmVkIGNoYXIgKnB1YzsNCisNCisJLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IHVudGlsIGEgYmxvY2sgaXMgZm91bmQgdGhhdCBoYXMgYSBoaWdoZXIgYWRkcmVzcw0KKwl0aGFuIHRoZSBibG9jayBiZWluZyBpbnNlcnRlZC4gKi8NCisJZm9yKCBweEl0ZXJhdG9yID0gJnhTdGFydDsgcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrIDwgcHhCbG9ja1RvSW5zZXJ0OyBweEl0ZXJhdG9yID0gcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrICkNCisJew0KKwkJLyogTm90aGluZyB0byBkbyBoZXJlLCBqdXN0IGl0ZXJhdGUgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uLiAqLw0KKwl9DQorDQorCS8qIERvIHRoZSBibG9jayBiZWluZyBpbnNlcnRlZCwgYW5kIHRoZSBibG9jayBpdCBpcyBiZWluZyBpbnNlcnRlZCBhZnRlcg0KKwltYWtlIGEgY29udGlndW91cyBibG9jayBvZiBtZW1vcnk/ICovCQ0KKwlwdWMgPSAoIHVuc2lnbmVkIGNoYXIgKiApIHB4SXRlcmF0b3I7DQorCWlmKCAoIHB1YyArIHB4SXRlcmF0b3ItPnhCbG9ja1NpemUgKSA9PSAoIHVuc2lnbmVkIGNoYXIgKiApIHB4QmxvY2tUb0luc2VydCApDQorCXsNCisJCXB4SXRlcmF0b3ItPnhCbG9ja1NpemUgKz0gcHhCbG9ja1RvSW5zZXJ0LT54QmxvY2tTaXplOw0KKwkJcHhCbG9ja1RvSW5zZXJ0ID0gcHhJdGVyYXRvcjsNCisJfQ0KKw0KKwkvKiBEbyB0aGUgYmxvY2sgYmVpbmcgaW5zZXJ0ZWQsIGFuZCB0aGUgYmxvY2sgaXQgaXMgYmVpbmcgaW5zZXJ0ZWQgYmVmb3JlDQorCW1ha2UgYSBjb250aWd1b3VzIGJsb2NrIG9mIG1lbW9yeT8gKi8NCisJcHVjID0gKCB1bnNpZ25lZCBjaGFyICogKSBweEJsb2NrVG9JbnNlcnQ7DQorCWlmKCAoIHB1YyArIHB4QmxvY2tUb0luc2VydC0+eEJsb2NrU2l6ZSApID09ICggdW5zaWduZWQgY2hhciAqICkgcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrICkNCisJew0KKwkJaWYoIHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jayAhPSBweEVuZCApDQorCQl7DQorCQkJLyogRm9ybSBvbmUgYmlnIGJsb2NrIGZyb20gdGhlIHR3byBibG9ja3MuICovDQorCQkJcHhCbG9ja1RvSW5zZXJ0LT54QmxvY2tTaXplICs9IHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jay0+eEJsb2NrU2l6ZTsNCisJCQlweEJsb2NrVG9JbnNlcnQtPnB4TmV4dEZyZWVCbG9jayA9IHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jay0+cHhOZXh0RnJlZUJsb2NrOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXB4QmxvY2tUb0luc2VydC0+cHhOZXh0RnJlZUJsb2NrID0gcHhFbmQ7DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQlweEJsb2NrVG9JbnNlcnQtPnB4TmV4dEZyZWVCbG9jayA9IHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jazsJCQ0KKwl9DQorDQorCS8qIElmIHRoZSBibG9jayBiZWluZyBpbnNlcnRlZCBwbHVnZ2VkIGEgZ2FiLCBzbyB3YXMgbWVyZ2VkIHdpdGggdGhlIGJsb2NrDQorCWJlZm9yZSBhbmQgdGhlIGJsb2NrIGFmdGVyLCB0aGVuIGl0J3MgcHhOZXh0RnJlZUJsb2NrIHBvaW50ZXIgd2lsbCBoYXZlDQorCWFscmVhZHkgYmVlbiBzZXQsIGFuZCBzaG91bGQgbm90IGJlIHNldCBoZXJlIGFzIHRoYXQgd291bGQgbWFrZSBpdCBwb2ludA0KKwl0byBpdHNlbGYuICovDQorCWlmKCBweEl0ZXJhdG9yICE9IHB4QmxvY2tUb0luc2VydCApDQorCXsNCisJCXB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jayA9IHB4QmxvY2tUb0luc2VydDsNCisJfQ0KK30NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwX2Vycm9yLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvTWVtTWFuZy9oZWFwX2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjZjE3YQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfZXJyb3IuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcKK2FsbCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB1c2UgdGhlIE1QVSB3cmFwcGVycy4gIFRoYXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuCit0YXNrLmggaXMgaW5jbHVkZWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBmaWxlLiAqLworI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQorCisjaW5jbHVkZSAiRnJlZVJUT1MuaCIKKyNpbmNsdWRlICJ0YXNrLmgiCisKKyN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQorCisKK3ZvaWQgKnB2UG9ydE1hbGxvYyggc2l6ZV90IHhXYW50ZWRTaXplICkKK3sJCisJI2lmKCBjb25maWdVU0VfTUFMTE9DX0ZBSUxFRF9IT09LID09IDEgKQorCXsKKyAgICAgICAgZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vayggdm9pZCApOworICAgICAgICB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCk7CisJfQorCSNlbmRpZgorCisJY29uZmlnQVNTRVJUKCBOVUxMICk7CisKKwlyZXR1cm4gTlVMTDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZQb3J0RnJlZSggdm9pZCAqcHYgKQorewkKKwkvKiBGb3JjZSBhbiBhc3NlcnQgYXMgaXQgaXMgaW52YWxpZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24uICovCisJY29uZmlnQVNTRVJUKCBwdiA9PSBOVUxMICk7Cit9CisKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfcG9zaXguYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfcG9zaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAwZjlmCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01lbU1hbmcvaGVhcF9wb3NpeC5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZworYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4KK3Rhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovCisjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFCisKKyNpbmNsdWRlICJGcmVlUlRPUy5oIgorI2luY2x1ZGUgInRhc2suaCIKKworI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFCisKKwordm9pZCAqcHZQb3J0TWFsbG9jKCBzaXplX3QgeFdhbnRlZFNpemUgKQorewkKKwlyZXR1cm4gbWFsbG9jKHhXYW50ZWRTaXplKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZQb3J0RnJlZSggdm9pZCAqcHYgKQorewkKKwkvKiBGb3JjZSBhbiBhc3NlcnQgYXMgaXQgaXMgaW52YWxpZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24uICovCisJY29uZmlnQVNTRVJUKCBwdiA9PSBOVUxMICk7CisgICAgZnJlZShwdik7Cit9CisKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL3N0YXRpYy1hbGxvY2F0b3IuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9NZW1NYW5nL3N0YXRpYy1hbGxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjRlYzZiCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01lbU1hbmcvc3RhdGljLWFsbG9jYXRvci5jCkBAIC0wLDAgKzEsMTUxIEBACisKKyNpbmNsdWRlICJGcmVlUlRPUy5oIgorI2luY2x1ZGUgInN0YXRpYy1hbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInRhc2suaCIKKwordHlwZWRlZiBzdHJ1Y3QgcHJpdl9zdGF0aWNfcG9vbF9zIHsKKyAgICB1aW50OF90KiAgYmFja2luZ19zdG9yZTsKKyAgICB1aW50MzJfdCogZmxhZ3M7CisgICAgaW50ICAgICAgIGl0ZW1fc2l6ZTsKKyAgICBpbnQgICAgICAgbnVtX2l0ZW1zOworfSBwcml2X3N0YXRpY19wb29sX3Q7CisKKyNpZmRlZiBQT1JUQUJMRV9BUkNIX0FSTV9DTTMKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgc3RhdGljIGlubGluZSB1aW50OF90IF9fQ0xaKHVpbnQzMl90IHZhbHVlKQoreworICAgIHVpbnQ4X3QgcmVzdWx0OworICAgIF9fYXNtX18gdm9sYXRpbGUgKCJjbHogJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKHZhbHVlKSApOworICAgIHJldHVybihyZXN1bHQpOworfQorI2Vsc2UKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgc3RhdGljIGlubGluZSB1aW50OF90IF9fQ0xaKHVpbnQzMl90IHZhbHVlKQoreworICAgIHVpbnQ4X3QgcmVzdWx0ID0gMDsKKyAgICB1aW50MzJfdCBtYXNrID0gMHgxPDwzMTsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChtYXNrICYgdmFsdWUpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCsrOworICAgICAgICBtYXNrID4+PSAxOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKyNpZmRlZiBQT1JUQUJMRV9BUkNIX0FSTV9DTTMKK19fYXR0cmlidXRlX18oKG5ha2VkKSkgc3RhdGljIHZvaWQgYXRvbWljQ2xlYXJGbGFnKCB1aW50MzJfdCogYWRkcmVzcywgaW50IGJpdE51bWJlciApCit7CisgICBfX2FzbV9fIHZvbGF0aWxlICgKKyAgICAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAiICAgbGRyZXggICByMiwgWyUwXSAgICAgICAgXG5cdCIKKyAgICAgICAiICAgYmljICAgICByMiwgJTEgICAgICAgICAgXG5cdCIKKyAgICAgICAiICAgc3RyZXggICByMywgcjIsIFslMF0gICAgXG5cdCIKKyAgICAgICAiICAgY21wICAgICByMywjMCAgICAgICAgICAgXG5cdCIKKyAgICAgICAiICAgYm5lICAgICAxYiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAiICAgYnggICAgICBsciAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICA6IC8vT3V0cHV0IEFyZ3VtZW50CisgICAgICAgOiJyIihhZGRyZXNzKSwiciIoYml0TnVtYmVyKSAgICAgICAgLy9JbnB1dCBBcmd1bWVudHMKKyAgICAgICA6ImNjIiwgInIyIiwgInIzIik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgYXRvbWljQ2xlYXJGbGFnKCB1aW50MzJfdCogYWRkcmVzcywgaW50IGJpdE51bWJlciApCit7CisgICAgKmFkZHJlc3MgJj0gfihiaXROdW1iZXIpOworfQorI2VuZGlmCisKKyNpZmRlZiBQT1JUQUJMRV9BUkNIX0FSTV9DTTMKK19fYXR0cmlidXRlX18oKG5ha2VkKSkgc3RhdGljIHZvaWQgIGF0b21pY1NldEZsYWcoIHVpbnQzMl90KiBhZGRyZXNzLCBpbnQgYml0TnVtYmVyICkKK3sKKyAgIF9fYXNtX18gdm9sYXRpbGUgKAorICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICIgICBsZHJleCAgIHIyLCBbJTBdICAgICAgICBcblx0IgorICAgICAgICIgICBvcnIgICAgIHIyLCAlMSAgICAgICAgICBcblx0IgorICAgICAgICIgICBzdHJleCAgIHIzLCByMiwgWyUwXSAgICBcblx0IgorICAgICAgICIgICBjbXAgICAgIHIzLCMwICAgICAgICAgICBcblx0IgorICAgICAgICIgICBibmUgICAgIDFiICAgICAgICAgICAgICBcblx0IgorICAgICAgICIgICBieCAgICAgIGxyICAgICAgICAgICAgICBcblx0IgorICAgICAgIDoKKyAgICAgICA6InIiKGFkZHJlc3MpLCJyIihiaXROdW1iZXIpCisgICAgICAgOiJjYyIsICJyMiIsICJyMyIpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkICBhdG9taWNTZXRGbGFnKCB1aW50MzJfdCogYWRkcmVzcywgaW50IGJpdE51bWJlciApCit7CisgICAgKmFkZHJlc3MgfD0gKGJpdE51bWJlcik7Cit9CisjZW5kaWYKKworI2RlZmluZSBOVU1fSVRFTVNfVE9fTlVNX0ZMQUdTKGl0ZW1zKSAoKChpdGVtcykrMzEpLzMyKQorCit2b2lkIHBvb2xJbml0KCBzdGF0aWNfcG9vbF90KiBpblBvb2wsIGludCBpbkl0ZW1TaXplLCBpbnQgaW5OdW1JdGVtcywgdm9pZCogaW5CYWNraW5nU3RvcmUsIHZvaWQqIGluRmxhZ3MpCit7CisgICAgcHJpdl9zdGF0aWNfcG9vbF90KiBhUG9vbCA9IChwcml2X3N0YXRpY19wb29sX3QqKSBpblBvb2w7CisgICAgaW50IGk7CisgICAgYVBvb2wtPml0ZW1fc2l6ZSA9IGluSXRlbVNpemU7CisgICAgYVBvb2wtPm51bV9pdGVtcyA9IGluTnVtSXRlbXM7CisgICAgYVBvb2wtPmJhY2tpbmdfc3RvcmUgPSBpbkJhY2tpbmdTdG9yZTsKKyAgICBhUG9vbC0+ZmxhZ3MgPSBpbkZsYWdzOworICAgIGZvcihpID0gMDsgaSA8IE5VTV9JVEVNU19UT19OVU1fRkxBR1MoaW5OdW1JdGVtcyk7IGkrKykKKyAgICB7CisgICAgICAgIGFQb29sLT5mbGFnc1tpXSA9IH4oKHVpbnQzMl90KTB4MHVsKTsKKyAgICB9CisgICAgaWYgKGluTnVtSXRlbXMgJSAzMikKKyAgICB7CisgICAgICAgIC8vbWFyayBhbGwgZmxhZ3MgYXMgYWxyZWFkeSB0YWtlbiB0aGF0IGRvbid0IHJlcHJlc2VudCBhbiBpdGVtLgorICAgICAgICBhUG9vbC0+ZmxhZ3NbaS0xXSA9IGFQb29sLT5mbGFnc1tpLTFdIDw8ICgzMiAtIChpbk51bUl0ZW1zICUgMzIpKTsKKyAgICB9Cit9CisKK3ZvaWQgKnBvb2xBbGxvY2F0ZUJ1ZmZlciggc3RhdGljX3Bvb2xfdCogaW5Qb29sICkKK3sKKyAgICB2VGFza1N1c3BlbmRBbGwoKTsKKworICAgIHByaXZfc3RhdGljX3Bvb2xfdCogYVBvb2wgPSAocHJpdl9zdGF0aWNfcG9vbF90KikgaW5Qb29sOworICAgIHZvaWQgKnJldHZhbCA9IE5VTEw7CisgICAgaW50IGZsYWdJbmRleDsKKyAgICBmb3IoZmxhZ0luZGV4ID0gMDsgZmxhZ0luZGV4IDwgTlVNX0lURU1TX1RPX05VTV9GTEFHUyhhUG9vbC0+bnVtX2l0ZW1zKTsgZmxhZ0luZGV4KyspCisgICAgeworICAgICAgICBpbnQ4X3QgbGVhZGluZ1plcm9zID0gX19DTFooYVBvb2wtPmZsYWdzW2ZsYWdJbmRleF0pOworICAgICAgICBpZihsZWFkaW5nWmVyb3MgIT0gMzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludDhfdCBiaXRJbmRleCA9IDMxLWxlYWRpbmdaZXJvczsKKyAgICAgICAgICAgIGludDhfdCBpdGVtSW5kZXggPSAzMipmbGFnSW5kZXgrKDMxLWJpdEluZGV4KTsKKyAgICAgICAgICAgIGF0b21pY0NsZWFyRmxhZygmYVBvb2wtPmZsYWdzW2ZsYWdJbmRleF0sIDEgPDwgYml0SW5kZXgpOworICAgICAgICAgICAgcmV0dmFsID0gJmFQb29sLT5iYWNraW5nX3N0b3JlW2FQb29sLT5pdGVtX3NpemUqaXRlbUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgeFRhc2tSZXN1bWVBbGwoKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgcG9vbEZyZWVCdWZmZXIoIHN0YXRpY19wb29sX3QqIGluUG9vbCwgdm9pZCogaW5Qb2ludGVyKQoreworICAgIHZUYXNrU3VzcGVuZEFsbCgpOworCisgICAgcHJpdl9zdGF0aWNfcG9vbF90KiBhUG9vbCA9IChwcml2X3N0YXRpY19wb29sX3QqKSBpblBvb2w7CisKKyAgICBpbnQgaXRlbUluZGV4ID0gKChpbnRwdHJfdClpblBvaW50ZXIgLSAoaW50cHRyX3QpaW5Qb29sLT5iYWNraW5nX3N0b3JlKS9pblBvb2wtPml0ZW1fc2l6ZTsKKyAgICBpbnQgZmxhZ0luZGV4ID0gaXRlbUluZGV4IC8gMzI7CisgICAgaW50IGJpdEluZGV4ID0gMzEtKGl0ZW1JbmRleCAlIDMyKTsKKyAgICBpZihmbGFnSW5kZXggPj0gTlVNX0lURU1TX1RPX05VTV9GTEFHUyhhUG9vbC0+bnVtX2l0ZW1zKSkKKyAgICB7CisgICAgICAgIHByaW50ZigiRVJST1IgZnJlZWluZyBwb29sICVwLCBQb2ludGVyICVwIGRvZXNudCBiZWxvbmcgaGVyZVxuIiwgaW5Qb29sLCBpblBvaW50ZXIpOworICAgICAgICB3aGlsZSgxKQorICAgICAgICAgICAgOworICAgIH0KKworICAgIGF0b21pY1NldEZsYWcoJmFQb29sLT5mbGFnc1tmbGFnSW5kZXhdLCAxIDw8IGJpdEluZGV4KTsKKworICAgIHhUYXNrUmVzdW1lQWxsKCk7Cit9CmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2MTEyZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnQuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBUZXJuIEVFIDE4Ng0KKyAqIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBMaWJyYXJ5IGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxlbWJlZGRlZC5oPg0KKyNpbmNsdWRlIDxhZS5oPg0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJwb3J0YXNtLmgiDQorDQorLyogVGhlIHRpbWVyIGluY3JlbWVudHMgZXZlcnkgZm91ciBjbG9ja3MsIGhlbmNlIHRoZSBkaXZpZGUgYnkgNC4gKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFICggdW5zaWduZWQgc2hvcnQgKSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLyAoIHVuc2lnbmVkIGxvbmcgKSA0ICkNCisNCisvKiBGcm9tIHRoZSBSREMgZGF0YSBzaGVldC4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVJfQU5EX0lOVEVSUlVQVCAoIHVuc2lnbmVkIHNob3J0ICkgMHhlMDAxDQorDQorLyogSW50ZXJydXB0IGNvbnRyb2wuICovDQorI2RlZmluZSBwb3J0RUlPX1JFR0lTVEVSIDB4ZmYyMg0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVCAweDAwMDgNCisNCisvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIHRpY2sgZnJlcXVlbmN5LiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KK2lzIGJlaW5nIHVzZWQuICovDQorI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorI2Vsc2UNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKyNlbmRpZg0KKw0KKy8qIFRyYXAgcm91dGluZSB1c2VkIGJ5IHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKTsNCisNCisvKiBUaGUgdGltZXIgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGxlYXZlIGludGVycnVwdHMgZW5hYmxlZCwNCit3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiAgVGhpcyBJU1IgaXMgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IGluIGNhc2UNCit0aGUgdGltZXIgZmlyZXMgYmVmb3JlIHdlIGdldCBhIGNoYW5nZSB0byBkaXNhYmxlIGludGVycnVwdHMgYWdhaW4uICovDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2RHVtbXlJU1IoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgRFNfUmVnID0gMDsNCisNCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorDQorCSpweFRvcE9mU3RhY2sgPSAweDExMTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFdlIGFyZSBnb2luZyB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHVzaW5nIGEgcmV0dXJuIGZyb20gaW50ZXJydXB0DQorCWluc3RydWN0aW9uIHRvIGxvYWQgdGhlIHByb2dyYW0gY291bnRlciwgc28gZmlyc3QgdGhlcmUgd291bGQgYmUgdGhlDQorCWZ1bmN0aW9uIGNhbGwgd2l0aCBwYXJhbWV0ZXJzIHByZWFtYmxlLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHZQYXJhbWV0ZXJzICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBOZXh0IHRoZSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGludGVycnVwdCByZXR1cm4gYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIHdvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgb3VyIGNvbnRleHQNCisJc3dpdGNoIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHZhbHVlcyBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcNCisJZWFzaWVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4QUFBQTsJLyogQVggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhCQkJCOwkvKiBCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweENDQ0M7CS8qIENYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RERERDsJLyogRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhFRUVFOwkvKiBFUyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQorCV9fYXNtewlNT1YgRFNfUmVnLCBEUyB9Ow0KKw0KKwkqcHhUb3BPZlN0YWNrID0gRFNfUmVnOwkJCQkJCS8qIERTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEREREOwkvKiBESSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJCQkI7CS8qIEJQICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCisNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCXNldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCisNCisJLyogU2V0dXAgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCisJcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydkR1bW15SVNSKCB2b2lkICkNCit7DQorCS8qIFRoZSB0aW1lciBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgbGVhdmUgaW50ZXJydXB0cyBlbmFibGVkLA0KKwl3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiAgVGhpcyBJU1IgaXMgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IGluIGNhc2UNCisJdGhlIHRpbWVyIGZpcmVzIGJlZm9yZSB3ZSBnZXQgYSBjaGFuZ2UgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLw0KKwlvdXRwb3J0KCBwb3J0RUlPX1JFR0lTVEVSLCBwb3J0Q0xFQVJfSU5URVJSVVBUICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyDQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisNCisJCS8qIFJlc2V0IGludGVycnVwdC4gKi8NCisJCW91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCS8qIFJlc2V0IGludGVycnVwdC4gKi8NCisJCW91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICkNCit7DQorCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJcG9ydFNXSVRDSF9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNUaW1lckFDb21wYXJlID0gcG9ydFRJTUVSX0NPTVBBUkUsIHVzVGltZXJBTW9kZSA9IHBvcnRFTkFCTEVfVElNRVJfQU5EX0lOVEVSUlVQVDsNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1c1QyX0lSUSA9IDB4MTM7DQorDQorCS8qIENvbmZpZ3VyZSB0aGUgdGltZXIsIHRoZSBkdW1teSBoYW5kbGVyIGlzIHVzZWQgaGVyZSBhcyB0aGUgaW5pdA0KKwlmdW5jdGlvbiBsZWF2ZXMgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwl0Ml9pbml0KCB1c1RpbWVyQU1vZGUsIHVzVGltZXJBQ29tcGFyZSwgcHJ2RHVtbXlJU1IgKTsNCisNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluIGJlZm9yZSBpbnN0YWxsaW5nIHRoZSByZWFsIGhhbmRsZXJzLiAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorDQorCSNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCQkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQlzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCisJI2Vsc2UNCisJCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQlzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCisJI2VuZGlmDQorfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRhc20uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjlhNzlkCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvbGFyZ2VfdW50ZXN0ZWQvcG9ydGFzbS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorDQorLyoNCisgKiBTYXZlcyB0aGUgc3RhY2sgcG9pbnRlciBmb3Igb25lIHRhc2sgaW50byBpdHMgVENCLCBjYWxscw0KKyAqIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIHVwZGF0ZSB0aGUgVENCIGJlaW5nIHVzZWQsIHRoZW4gcmVzdG9yZXMgdGhlIHN0YWNrDQorICogZnJvbSB0aGUgbmV3IFRDQiByZWFkIHRvIHJ1biB0aGUgdGFzay4NCisgKi8NCit2b2lkIHBvcnRTV0lUQ0hfQ09OVEVYVCggdm9pZCApOw0KKw0KKy8qDQorICogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0Igb2YgdGhlIHRhc2sgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZmlyc3QNCisgKiB0byBleGVjdXRlLiAgVGhlbiBmb3JjZSBhbiBJUkVUIHNvIHRoZSByZWdpc3RlcnMgYW5kIElQIGFyZSBwb3BwZWQgb2ZmIHRoZQ0KKyAqIHN0YWNrLg0KKyAqLw0KK3ZvaWQgcG9ydEZJUlNUX0NPTlRFWFQoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRTV0lUQ0hfQ09OVEVYVCgpCQkJCQkJCQkJCSBcDQorCQkJCQkJYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9IFwNCisJCQkJCQkJYXNtIHsgbW92CWRzLCBheAkJCQkJCX0gIFwNCisJCQkJCQkJYXNtIHsgbGVzCWJ4LCBweEN1cnJlbnRUQ0IJCQl9CS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCLiAqLyAgICBcDQorCQkJCQkJCWFzbSB7IG1vdgllczoweDJbIGJ4IF0sIHNzCQkJfSAgIFwNCisJCQkJCQkJYXNtIHsgbW92CWVzOlsgYnggXSwgc3AJCQkJfSAgIFwNCisJCQkJCQkJYXNtIHsgY2FsbCAgZmFyIHB0ciB2VGFza1N3aXRjaENvbnRleHQJfQkvKiBQZXJmb3JtIHRoZSBzd2l0Y2guICovICAgXA0KKwkJCQkJCQlhc20geyBtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IJCX0JLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0IuICovICBcDQorCQkJCQkJCWFzbSB7IG1vdglkcywgYXgJCQkJCQl9ICAgXA0KKwkJCQkJCQlhc20geyBsZXMJYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IJfSAgIFwNCisJCQkJCQkJYXNtIHsgbW92CXNzLCBlczpbIGJ4ICsgMiBdCQkJfSAgICAgIFwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBlczpbIGJ4IF0JCQkJfQ0KKw0KKyNkZWZpbmUgcG9ydEZJUlNUX0NPTlRFWFQoKQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CWRzLCBheAkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBsZXMJYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IJfQlcDQorCQkJCQkJCWFzbSB7IG1vdglzcywgZXM6WyBieCArIDIgXQkJCX0JXA0KKwkJCQkJCQlhc20geyBtb3YJc3AsIGVzOlsgYnggXQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWJwCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJZGkJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlzaQkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWRzCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJZXMJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlkeAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWN4CQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJYngJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlheAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgaXJldAkJCQkJCQkJfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvbGFyZ2VfdW50ZXN0ZWQvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiN2FlZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlsb25nDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0U0hPUlQNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQlfX2FzbXsgcHVzaGYgfSAgXA0KKwkJCQkJCQkJCQlfX2FzbXsgY2xpIAkgfQlcDQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCV9fYXNteyBwb3BmIH0NCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJX19hc217IGNsaSB9DQorDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCV9fYXNteyBzdGkgfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJCV9fYXNteyBub3AgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiAJCQkweDgwDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0gDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCTINCisjZGVmaW5lIHBvcnRJTklUSUFMX1NXCQkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIgKQkvKiBTdGFydCB0aGUgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29tcGlsZXIgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkJCQkJaW5wKCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkJb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydElOUFVUX1dPUkQoIHhBZGRyICkJCQkJaW5wdyggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9XT1JEKCB4QWRkciwgdXNWYWx1ZSApCW91dHB3KCB4QWRkciwgdXNWYWx1ZSApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdlRhc2tGdW5jdGlvbiwgdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY3OWEyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFRlcm4gRUUgMTg2DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPGVtYmVkZGVkLmg+DQorI2luY2x1ZGUgPGFlLmg+DQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorI2luY2x1ZGUgInBvcnRhc20uaCINCisNCisvKiBUaGUgdGltZXIgaW5jcmVtZW50cyBldmVyeSBmb3VyIGNsb2NrcywgaGVuY2UgdGhlIGRpdmlkZSBieSA0LiAqLw0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFICggMTYgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkUgKCBjb25maWdDUFVfQ0xPQ0tfSFogIC8gKCBjb25maWdUSUNLX1JBVEVfSFogKiA0VUwgKSApDQorDQorLyogRnJvbSB0aGUgUkRDIGRhdGEgc2hlZXQuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX1RJTUVSX0FORF9JTlRFUlJVUFQgCSggdW5zaWduZWQgc2hvcnQgKSAweGUwMGINCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkJKCB1bnNpZ25lZCBzaG9ydCApIDB4QzAwMQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sLiAqLw0KKyNkZWZpbmUgcG9ydEVJT19SRUdJU1RFUiAweGZmMjINCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFQgMHgwMDA4DQorDQorLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSByZXF1aXJlZCB0aWNrIGZyZXF1ZW5jeS4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKyNlbHNlDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisjZW5kaWYNCisNCisvKiBUcmFwIHJvdXRpbmUgdXNlZCBieSB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KK3N0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFIERTX1JlZyA9IDA7DQorDQorCS8qIFdlIG5lZWQgdGhlIHRydWUgZGF0YSBzZWdtZW50LiAqLw0KKwlfX2FzbXsJTU9WIERTX1JlZywgRFMgfTsNCisNCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorDQorCSpweFRvcE9mU3RhY2sgPSAweDExMTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFdlIGFyZSBnb2luZyB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHVzaW5nIGEgcmV0dXJuIGZyb20gaW50ZXJydXB0DQorCWluc3RydWN0aW9uIHRvIGxvYWQgdGhlIHByb2dyYW0gY291bnRlciwgc28gZmlyc3QgdGhlcmUgd291bGQgYmUgdGhlDQorCWZ1bmN0aW9uIGNhbGwgd2l0aCBwYXJhbWV0ZXJzIHByZWFtYmxlLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHZQYXJhbWV0ZXJzICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIE5leHQgdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgaW50ZXJydXB0IHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgd291bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBieSBvdXIgY29udGV4dA0KKwlzd2l0Y2ggZnVuY3Rpb24uICBUaGVzZSBhcmUgbG9hZGVkIHdpdGggdmFsdWVzIHNpbXBseSB0byBtYWtlIGRlYnVnZ2luZw0KKwllYXNpZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBQUFBOwkvKiBBWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJCQkI7CS8qIEJYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Q0NDQzsJLyogQ1ggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEREREOwkvKiBEWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEVFRUU7CS8qIEVTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gRFNfUmVnOwkJCQkJCS8qIERTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhEREREOwkvKiBESSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweEJCQkI7CS8qIEJQICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCisNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCXNldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCisNCisJLyogU2V0dXAgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCS8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCisJcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyDQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQlwb3J0RU5EX1NXSVRDSElOR19JU1IoKTsNCisNCisJCS8qIFJlc2V0IGludGVycnVwdC4gKi8NCisJCW91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCS8qIFJlc2V0IGludGVycnVwdC4gKi8NCisJCW91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICkNCit7DQorCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bENvbXBhcmVWYWx1ZSA9IHBvcnRUSU1FUl9DT01QQVJFOw0KK3Vuc2lnbmVkIHNob3J0IHVzVGltZXJDb21wYXJlOw0KKw0KKwl1c1RpbWVyQ29tcGFyZSA9ICggdW5zaWduZWQgc2hvcnQgKSAoIHVsQ29tcGFyZVZhbHVlID4+IDQgKTsNCisgICAgdDJfaW5pdCggcG9ydEVOQUJMRV9USU1FUiwgcG9ydFBSRVNDQUxFX1ZBTFVFLCBOVUxMICk7DQorDQorCSNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCQkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQl0MV9pbml0KCBwb3J0RU5BQkxFX1RJTUVSX0FORF9JTlRFUlJVUFQsIHVzVGltZXJDb21wYXJlLCB1c1RpbWVyQ29tcGFyZSwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCisJI2Vsc2UNCisJCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQl0MV9pbml0KCBwb3J0RU5BQkxFX1RJTUVSX0FORF9JTlRFUlJVUFQsIHVzVGltZXJDb21wYXJlLCB1c1RpbWVyQ29tcGFyZSwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCisJI2VuZGlmDQorfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRhc20uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWMwYWIxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydGFzbS5oCkBAIC0wLDAgKzEsMTExIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRfQVNNX0gNCisjZGVmaW5lIFBPUlRfQVNNX0gNCisNCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorDQorLyoNCisgKiBTYXZlcyB0aGUgc3RhY2sgcG9pbnRlciBmb3Igb25lIHRhc2sgaW50byBpdHMgVENCLCBjYWxscw0KKyAqIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIHVwZGF0ZSB0aGUgVENCIGJlaW5nIHVzZWQsIHRoZW4gcmVzdG9yZXMgdGhlIHN0YWNrDQorICogZnJvbSB0aGUgbmV3IFRDQiByZWFkIHRvIHJ1biB0aGUgdGFzay4NCisgKi8NCit2b2lkIHBvcnRFTkRfU1dJVENISU5HX0lTUiggdm9pZCApOw0KKw0KKy8qDQorICogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0Igb2YgdGhlIHRhc2sgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZmlyc3QNCisgKiB0byBleGVjdXRlLiAgVGhlbiBmb3JjZSBhbiBJUkVUIHNvIHRoZSByZWdpc3RlcnMgYW5kIElQIGFyZSBwb3BwZWQgb2ZmIHRoZQ0KKyAqIHN0YWNrLg0KKyAqLw0KK3ZvaWQgcG9ydEZJUlNUX0NPTlRFWFQoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQlcDQorCQkJCQkJCWFzbSB7IG1vdglieCwgW3B4Q3VycmVudFRDQl0JCQl9ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc20geyBtb3YJd29yZCBwdHIgW2J4XSwgc3AJCQl9CVwNCisJCQkJCQkJYXNtIHsgY2FsbCAgZmFyIHB0ciB2VGFza1N3aXRjaENvbnRleHQJfQlcDQorCQkJCQkJCWFzbSB7IG1vdglieCwgW3B4Q3VycmVudFRDQl0JCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBbYnhdCQkJCQl9DQorDQorI2RlZmluZSBwb3J0RklSU1RfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorCQkJCQkJCWFzbSB7IG1vdglieCwgW3B4Q3VycmVudFRDQl0JCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBbYnhdCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWJwCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJZGkJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlzaQkJCQkJCQl9CVwNCisgICAJCQkJCQkJYXNtIHsgcG9wCWRzCQkJCQkJCX0JXA0KKyAgIAkJCQkJCQlhc20geyBwb3AJZXMJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlkeAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWN4CQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJYngJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlheAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgaXJldAkJCQkJCQkJfQ0KKw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzZTYxOAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQxIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlsb25nDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0U0hPUlQNCisNCit0eXBlZGVmIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhJU1IgKSgpOw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCV9fYXNteyBwdXNoZiB9ICBcDQorCQkJCQkJCQkJCV9fYXNteyBjbGkgCSB9CVwNCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCisNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJX19hc217IHN0aSB9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQkJX19hc217IG5vcCB9DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIAkJCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfSANCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJMg0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1cJCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApCS8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0SU5QVVRfQllURSggeEFkZHIgKQkJCQlpbnAoIHhBZGRyICkNCisjZGVmaW5lIHBvcnRPVVRQVVRfQllURSggeEFkZHIsIHVjVmFsdWUgKQlvdXRwKCB4QWRkciwgdWNWYWx1ZSApDQorI2RlZmluZSBwb3J0SU5QVVRfV09SRCggeEFkZHIgKQkJCQlpbnB3KCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX1dPUkQoIHhBZGRyLCB1c1ZhbHVlICkJb3V0cHcoIHhBZGRyLCB1c1ZhbHVlICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNN19MUEMyMXh4L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3MTZiMAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0LmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgdGFzayBjb250ZXh0LiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDQgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkoICggcG9ydFNUQUNLX1RZUEUgKSAwICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRpY2sgSVNSLiAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUgkJCSggKCB1bnNpZ25lZCBwb3J0Q0hBUiApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJMHgwMA0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSAkJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMHgwMSApDQorI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0gJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMHgwMiApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aWNrIElTUi4gKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTAkJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMHgwMDA0ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMHgwMDEwICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfRU5BQkxFCQkoICggdW5zaWduZWQgcG9ydExPTkcgKSAweDAwMjAgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gKi8NCisjZGVmaW5lIHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUCQkoICggdW5zaWduZWQgcG9ydENIQVIgKSAweDAxICkNCisjZGVmaW5lIHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUCQkoICggdW5zaWduZWQgcG9ydExPTkcgKSAwICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEtlaWwgY29tcGlsZXIgZG9lcyBub3QgbWFpbnRhaW4gc2VwYXJhdGUNCitzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZSBwb3J0RU5URVJfQ1JJVElDQUwgbWFjcm8gY2Fubm90IHRoZXJlZm9yZQ0KK3VzZSB0aGUgc3RhY2sgYXMgcGVyIG90aGVyIHBvcnRzLiAgSW5zdGVhZCBhIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcA0KK3RyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCithcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gYSBub24gemVybyB2YWx1ZS4gKi8NCisNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkoICggdW5zaWduZWQgcG9ydExPTkcgKSAwICkNCit2b2xhdGlsZSB1bnNpZ25lZCBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvIA0KKyAqIHZQb3J0U3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuIA0KKyAqLw0KK2V4dGVybiBfX2FzbSB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRTVEFDS19UWVBFICpweE9yaWdpbmFsVE9TOw0KKw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcyANCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCisNCisJUmVtZW1iZXIgd2hlcmUgdGhlIHRvcCBvZiB0aGUgKHNpbXVsYXRlZCkgc3RhY2sgaXMgYmVmb3JlIHdlIHBsYWNlIA0KKwlhbnl0aGluZyBvbiBpdC4gKi8NCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCisJc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnRJTklUSUFMX1NQU1I7DQorDQorCWlmKCAoICggdW5zaWduZWQgbG9uZyApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDBVTCApDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEtlaWwgY29tcGlsZXIgZG9lcyBub3QgbWFpbnRhaW4gc2VwYXJhdGUNCisJc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCisJdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQorCXRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCisJYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gIFRoaXMgaXMgZG9uZSBmcm9tIHBvcnRJU1IuYyBhcyBBUk0gbW9kZSBtdXN0IGJlDQorCXVzZWQuICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiB0aGlzIGlzIHJlcXVpcmVkIC0gc3RvcCB0aGUgdGljayBJU1IgdGhlbg0KKwlyZXR1cm4gYmFjayB0byBtYWluLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKw0KKwkvKiANCisJICogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvIA0KKwkgKiBzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gDQorCSAqLw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9faXJxOw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9faXJxDQorCXsNCisJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHRoaXMgbWF5IG1ha2UgYSBkZWxheWluZyB0YXNrIHJlYWR5DQorCQl0byBydW4gLSBidXQgYSBjb250ZXh0IHN3aXRjaCBpcyBub3QgcGVyZm9ybWVkLiAqLwkJDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisNCisJCVQwSVIgPSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVDsJCQkJLyogQ2xlYXIgdGhlIHRpbWVyIGV2ZW50ICovDQorCQlWSUNWZWN0QWRkciA9IHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUOwkJLyogQWNrbm93bGVkZ2UgdGhlIEludGVycnVwdCAqLw0KKwl9DQorDQorICNlbHNlDQorDQorCS8qDQorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKwkgKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgSVNSIGlzIHdyaXR0ZW4gaW4gYXNzZW1ibGVyIGFuZCBjYW4gYmUgZm91bmQgICANCisJICogaW4gdGhlIHBvcnRBU00ucyBmaWxlLiBUaGlzIHdpbGwgb25seSBnZXQgdXNlZCBpZiBwb3J0VVNFX1BSRUVNUFRJT04NCisJICogaXMgc2V0IHRvIDEgaW4gcG9ydG1hY3JvLmgNCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKwkgKi8NCisNCisJICB2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBwb3J0TE9ORyB1bENvbXBhcmVNYXRjaDsNCisNCisJLyogQSAxbXMgdGljayBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIHRpbWVyIHByZXNjYWxlLiAgVGhpcyBpcw0KKwlkZWZhdWx0ZWQgdG8gemVybyBidXQgY2FuIGJlIHVzZWQgaWYgbmVjZXNzYXJ5LiAqLw0KKwlUMFBSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KKw0KKwkvKiBDYWxjdWxhdGUgdGhlIG1hdGNoIHZhbHVlIHJlcXVpcmVkIGZvciBvdXIgd2FudGVkIHRpY2sgcmF0ZS4gKi8NCisJdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorDQorCS8qIFByb3RlY3QgYWdhaW5zdCBkaXZpZGUgYnkgemVyby4gIFVzaW5nIGFuIGlmKCkgc3RhdGVtZW50IHN0aWxsIHJlc3VsdHMNCisJaW4gYSB3YXJuaW5nIC0gaGVuY2UgdGhlICNpZi4gKi8NCisJI2lmIHBvcnRQUkVTQ0FMRV9WQUxVRSAhPSAwDQorCXsNCisJCXVsQ29tcGFyZU1hdGNoIC89ICggcG9ydFBSRVNDQUxFX1ZBTFVFICsgMSApOw0KKwl9DQorCSNlbmRpZg0KKw0KKwlUME1SMCA9IHVsQ29tcGFyZU1hdGNoOw0KKw0KKwkvKiBHZW5lcmF0ZSB0aWNrIHdpdGggdGltZXIgMCBjb21wYXJlIG1hdGNoLiAqLw0KKwlUME1DUiA9IHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCB8IHBvcnRJTlRFUlJVUFRfT05fTUFUQ0g7DQorDQorCS8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCisJVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCisJVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCQ0KKwkvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsJDQorCQlWSUNWZWN0QWRkcjAgPSAoIHVuc2lnbmVkIHBvcnRMT05HICkgdlByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCVZJQ1ZlY3RBZGRyMCA9ICggdW5zaWduZWQgcG9ydExPTkcgKSB2Tm9uUHJlZW1wdGl2ZVRpY2s7DQorCX0NCisJI2VuZGlmDQorDQorCVZJQ1ZlY3RDbnRsMCA9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTCB8IHBvcnRUSU1FUl9WSUNfRU5BQkxFOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkDQorCXNvIGl0IGlzIG9rYXkgdG8gZG8gdGhpcyBoZXJlLiAqLw0KKwlUMFRDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCit7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAJCQkJCQkJKi8NCisJX19kaXNhYmxlX2lycSgpOw0KKw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkIA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RVhJVF9DUklUSUNBTCgpLiAqLw0KKwkJCV9fZW5hYmxlX2lycSgpOw0KKwkJfQ0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0QVNNLnMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydEFTTS5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDM3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydEFTTS5zCkBAIC0wLDAgKzEsMTQ4IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisJSU5DTFVERSBwb3J0bWFjcm8uaW5jDQorDQorCUlNUE9SVAl2VGFza1N3aXRjaENvbnRleHQNCisJSU1QT1JUCXZUYXNrSW5jcmVtZW50VGljaw0KKw0KKwlFWFBPUlQJdlBvcnRZaWVsZFByb2Nlc3Nvcg0KKwlFWFBPUlQJdlBvcnRTdGFydEZpcnN0VGFzaw0KKwlFWFBPUlQJdlByZWVtcHRpdmVUaWNrDQorCUVYUE9SVAl2UG9ydFlpZWxkDQorDQorDQorVklDVkVDVEFERFIJRVFVCTB4RkZGRkYwMzANCitUMElSCQlFUVUJMHhFMDAwNDAwMA0KK1QwTUFUQ0hCSVQJRVFVCTB4MDAwMDAwMDENCisNCisJQVJNDQorCUFSRUEJUE9SVF9BU00sIENPREUsIFJFQURPTkxZDQorDQorDQorDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgU3RhcnRpbmcgdGhlIGZpcnN0IHRhc2sgaXMgZG9uZSBieSBqdXN0IHJlc3RvcmluZyB0aGUgY29udGV4dCANCis7IHNldHVwIGJ5IHB4UG9ydEluaXRpYWxpc2VTdGFjaw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCit2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorDQorCVBSRVNFUlZFOA0KKw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQordlBvcnRZaWVsZA0KKw0KKwlQUkVTRVJWRTgNCisNCisJU1ZDIDANCisJYnggbHINCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciB0aGUgU1dJIGludGVycnVwdC4gIFRoZSB2ZWN0b3IgdGFibGUgaXMNCis7IGNvbmZpZ3VyZWQgaW4gdGhlIHN0YXJ0dXAucyBmaWxlLg0KKzsNCis7IHZQb3J0WWllbGRQcm9jZXNzb3IoKSBpcyB1c2VkIHRvIG1hbnVhbGx5IGZvcmNlIGEgY29udGV4dCBzd2l0Y2guICBUaGUNCis7IFNXSSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IGEgY2FsbCB0byB0YXNrWUlFTEQoKSBvciBwb3J0WUlFTEQoKS4NCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorDQordlBvcnRZaWVsZFByb2Nlc3Nvcg0KKw0KKwlQUkVTRVJWRTgNCisNCisJOyBXaXRoaW4gYW4gSVJRIElTUiB0aGUgbGluayByZWdpc3RlciBoYXMgYW4gb2Zmc2V0IGZyb20gdGhlIHRydWUgcmV0dXJuIA0KKwk7IGFkZHJlc3MsIGJ1dCBhbiBTV0kgSVNSIGRvZXMgbm90LiAgQWRkIHRoZSBvZmZzZXQgbWFudWFsbHkgc28gdGhlIHNhbWUgDQorCTsgSVNSIHJldHVybiBjb2RlIGNhbiBiZSB1c2VkIGluIGJvdGggY2FzZXMuDQorCUFERAlMUiwgTFIsICM0DQorDQorCTsgUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2guDQorCXBvcnRTQVZFX0NPTlRFWFQJCQkJCTsgU2F2ZSBjdXJyZW50IHRhc2sgY29udGV4dAkJCQkNCisJTERSIFIwLCA9dlRhc2tTd2l0Y2hDb250ZXh0CQkJOyBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uDQorCU1PViBMUiwgUEMJCQkJCQkJOyBTdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MNCisJQlgJUjAJCQkJCQkJCTsgQ2FsbCB0aGUgY29udGVkeHQgc3dpdGNoIGZ1bmN0aW9uDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJCQkJCTsgcmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgc2VsZWN0ZWQgdGFzawkNCisNCisNCisNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBwcmVlbXB0aXZlIHNjaGVkdWxlciB0aWNrIHRpbWVyDQorOyBPbmx5IHVzZWQgaWYgcG9ydFVTRV9QUkVFTVBUSU9OIGlzIHNldCB0byAxIGluIHBvcnRtYWNyby5oDQorOw0KKzsgVXNlcyB0aW1lciAwIG9mIExQQzIxWFggRmFtaWx5DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwkNCisNCit2UHJlZW1wdGl2ZVRpY2sNCisNCisJUFJFU0VSVkU4DQorDQorCXBvcnRTQVZFX0NPTlRFWFQJCQkJCTsgU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLgkNCisNCisJTERSIFIwLCA9dlRhc2tJbmNyZW1lbnRUaWNrCQkJOyBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQuICANCisJTU9WIExSLCBQQwkJCQkJCQk7IFRoaXMgbWF5IG1ha2UgYSBkZWxheWVkIHRhc2sgcmVhZHkNCisJQlggUjAJCQkJCQkJCTsgdG8gcnVuLg0KKwkNCisJTERSIFIwLCA9dlRhc2tTd2l0Y2hDb250ZXh0CQkJOyBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCANCisJTU9WIExSLCBQQwkJCQkJCQk7IGlzIHJlYWR5IHRvIHJ1bi4NCisJQlggUjANCisJDQorCU1PViBSMCwgI1QwTUFUQ0hCSVQJCQkJCTsgQ2xlYXIgdGhlIHRpbWVyIGV2ZW50DQorCUxEUiBSMSwgPVQwSVINCisJU1RSIFIwLCBbUjFdIA0KKw0KKwlMRFIJUjAsID1WSUNWRUNUQUREUgkJCQk7IEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQJDQorCVNUUglSMCxbUjBdDQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQJCQkJCTsgUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgaGlnaGVzdCANCisJCQkJCQkJCQkJOyBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLg0KKwlFTkQNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwOTlkZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE4MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCisgKiBpcyByZXF1aXJlZCBmcm9tIGFuIElTUi4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIElmIGEgc3dpdGNoIGlzIHJlcXVpcmVkIHRoZW4gd2UganVzdCBuZWVkIHRvIGNhbGwgKi8JDQorLyogdlRhc2tTd2l0Y2hDb250ZXh0KCkgYXMgdGhlIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiAqLw0KKy8qIHNhdmVkLiAqLw0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUihTd2l0Y2hSZXF1aXJlZCkJCQkJIFwNCit7CQkJCQkJCQkJCQkJCQkJIFwNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQodm9pZCk7CQkJCQkJIFwNCisJCQkJCQkJCQkJCQkJCQkgXA0KKwkJaWYoU3dpdGNoUmVxdWlyZWQpCQkJCQkJCQkJIFwNCisJCXsJCQkJCQkJCQkJCQkJIFwNCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJIFwNCisJCX0JCQkJCQkJCQkJCQkJIFwNCit9CQkJCQkJCQkJCQkJCQkJIFwNCisNCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorLyoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgd2hldGhlciB3ZSdyZSBpbiBBUk0gb3INCisgKiBUSFVNQiBtb2RlIHdpdGggdGhlIEtlaWwgUmVhbCBWaWV3IGNvbXBpbGVyIHdoZW4gZW5hYmxpbmcgDQorICogb3IgZGlzYWJsaW5nIGludGVycnVwdHMgYXMgdGhlIGNvbXBpbGVyJ3MgaW50cmluc2ljIGZ1bmN0aW9ucyANCisgKiB0YWtlIGNhcmUgb2YgdGhhdCBmb3IgdXMuDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaXJxKCkJCQkJCQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fZW5hYmxlX2lycSgpDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KKyAqDQorICogVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBLZWlsIGNvbXBpbGVyIGRvZXMgbm90IG1haW50YWluIHNlcGFyYXRlDQorICogc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCisgKiB1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCisgKiB0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyBuZWNlc3NpdGF0ZXMgdGhlIHVzZSBvZiBhIA0KKyAqIGZ1bmN0aW9uIGluIHBsYWNlIG9mIHRoZSBtYWNyby4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQ29tcGlsZXIgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgaW5saW5lDQorI2RlZmluZSByZWdpc3Rlcg0KKyNkZWZpbmUgcG9ydE5PUCgpCV9fYXNteyBOT1AgfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaW5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNN19MUEMyMXh4L3BvcnRtYWNyby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5ZTY4MQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaW5jCkBAIC0wLDAgKzEsMTE3IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisJSU1QT1JUICB1bENyaXRpY2FsTmVzdGluZwkJOw0KKwlJTVBPUlQJcHhDdXJyZW50VENCCQkJOw0KKw0KKw0KKwlNQUNSTw0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorDQorDQorCUxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gIFRoZSBsb2NhdGlvbiB3YXMuLi4NCisJTERSCQlSMCwgW1IwXQkJCQk7IC4uLiBzdG9yZWQgaW4gcHhDdXJyZW50VENCDQorCUxEUgkJTFIsIFtSMF0NCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24uLi4gDQorCUxETUZECUxSISwge1IxfQkJCQk7IC4uLnRoZSBzdGFjay4gIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyLg0KKwlTVFIJCVIxLCBbUjBdCQkJCTsNCisNCisJTERNRkQJTFIhLCB7UjB9CQkJCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLg0KKwlNU1IJCVNQU1JfY3hzZiwgUjAJCQk7DQorDQorCUxETUZECUxSLCB7UjAtUjE0fV4JCQk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQorCU5PUAkJCQkJCQkJOw0KKw0KKwlMRFIJCUxSLCBbTFIsICMrNjBdCQkJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcw0KKw0KKwkJCQkJCQkJCTsgQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIC4uLg0KKwlTVUJTCVBDLCBMUiwgIzQJCQkJOyAuLi50aGUgY29ycmVjdCBhZGRyZXNzLg0KKw0KKwlNRU5EDQorDQorOyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisJTUFDUk8NCisJcG9ydFNBVkVfQ09OVEVYVA0KKw0KKw0KKwlTVE1EQiAJU1AhLCB7UjB9CQkJCTsgU3RvcmUgUjAgZmlyc3QgYXMgd2UgbmVlZCB0byB1c2UgaXQuDQorDQorCVNUTURCCVNQLHtTUH1eCQkJCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQorCU5PUAkJCQkJCQkJOw0KKwlTVUIJCVNQLCBTUCwgIzQJCQkJOw0KKwlMRE1JQQlTUCEse1IwfQkJCQk7DQorDQorCVNUTURCCVIwISwge0xSfQkJCQk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLg0KKwlNT1YJCUxSLCBSMAkJCQkJOyBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuDQorCUxETUlBCVNQISwge1IwfQkJCQk7IFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4NCisNCisJU1RNREIJTFIse1IwLUxSfV4JCQkJOyBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suDQorCU5PUAkJCQkJCQkJOw0KKwlTVUIJCUxSLCBMUiwgIzYwCQkJCTsNCisNCisJTVJTCQlSMCwgU1BTUgkJCQk7IFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4NCisJU1RNREIJTFIhLCB7UjB9CQkJCTsNCisNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCTsNCisJTERSCQlSMCwgW1IwXQkJCQk7DQorCVNUTURCCUxSISwge1IwfQkJCQk7DQorDQorCUxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCTsgU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLg0KKwlMRFIJCVIxLCBbUjBdCQkJCTsgCQkgDQorCVNUUgkJTFIsIFtSMV0JCQkJOw0KKwkNCisJTUVORA0KKwkNCisJRU5EDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNMy9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk1fQ00zL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA5Y2VjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNMy9wb3J0LmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVJNIENNMyBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorI2lmbmRlZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQorCSNkZWZpbmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAyNTUNCisjZW5kaWYNCisNCisjaWYgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCisJI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IG5vdCBiZSBzZXQgdG8gMC4gIFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGUwMTAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19MT0FECQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDE0ICkNCisjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQyMCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NMSwkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19JTlQJCTB4MDAwMDAwMDINCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFCQkweDAwMDAwMDAxDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVQJCQkweDEwMDAwMDAwDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAxNiApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX1BSSQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAyNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzIGluIHRoZSBjcml0aWNhbCBuZXN0aW5nDQordmFyaWFibGUuICovDQorc3RhdGljIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDcml0aWNhbE5lc3RpbmcgPSAweGFhYWFhYWFhOw0KKw0KKy8qIA0KKyAqIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEV4Y2VwdGlvbiBoYW5kbGVycy4NCisgKi8NCit2b2lkIHhQb3J0UGVuZFNWSGFuZGxlciggdm9pZCApOw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApOw0KK3ZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBTdGFydCBmaXJzdCB0YXNrIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHRlc3RlZCBpbiBpc29sYXRpb24uDQorICovDQordm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogU2ltdWxhdGUgdGhlIHN0YWNrIGZyYW1lIGFzIGl0IHdvdWxkIGJlIGNyZWF0ZWQgYnkgYSBjb250ZXh0IHN3aXRjaA0KKwlpbnRlcnJ1cHQuICovDQorCXB4VG9wT2ZTdGFjay0tOyAvKiBPZmZzZXQgYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhlIHdheSB0aGUgTUNVIHVzZXMgdGhlIHN0YWNrIG9uIGVudHJ5L2V4aXQgb2YgaW50ZXJydXB0cy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1hQU1I7CS8qIHhQU1IgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOwkvKiBQQyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDA7CS8qIExSICovDQorCXB4VG9wT2ZTdGFjayAtPSA1OwkvKiBSMTIsIFIzLCBSMiBhbmQgUjEuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOwkvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2sgLT0gODsJLyogUjExLCBSMTAsIFI5LCBSOCwgUjcsIFI2LCBSNSBhbmQgUjQuICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK19fYXNtIHZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICkNCit7DQorCVBSRVNFUlZFOA0KKw0KKwlsZHIJcjMsID1weEN1cnJlbnRUQ0IJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQuICovDQorCWxkciByMSwgW3IzXQkJCQkvKiBVc2UgcHhDdXJyZW50VENCQ29uc3QgdG8gZ2V0IHRoZSBweEN1cnJlbnRUQ0IgYWRkcmVzcy4gKi8NCisJbGRyIHIwLCBbcjFdCQkJCS8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQorCWxkbWlhIHIwISwge3I0LXIxMX0JCS8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeSBhbmQgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQuICovDQorCW1zciBwc3AsIHIwCQkJCQkvKiBSZXN0b3JlIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovDQorCW1vdiByMCwgIzANCisJbXNyCWJhc2VwcmksIHIwDQorCW9yciByMTQsICMweGQJCQkJDQorCWJ4IHIxNAkJCQkJCQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FzbSB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KK3sNCisJUFJFU0VSVkU4DQorDQorCS8qIFVzZSB0aGUgTlZJQyBvZmZzZXQgcmVnaXN0ZXIgdG8gbG9jYXRlIHRoZSBzdGFjay4gKi8NCisJbGRyIHIwLCA9MHhFMDAwRUQwOA0KKwlsZHIgcjAsIFtyMF0NCisJbGRyIHIwLCBbcjBdDQorCS8qIFNldCB0aGUgbXNwIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCisJbXNyIG1zcCwgcjANCisJLyogR2xvYmFsbHkgZW5hYmxlIGludGVycnVwdHMuICovDQorCWNwc2llIGkNCisJLyogQ2FsbCBTVkMgdG8gc3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXN2YyAwDQorCW5vcA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTWFrZSBQZW5kU1YsIENhbGxTViBhbmQgU3lzVGljayB0aGUgc2FtZSBwcmlyb2l0eSBhcyB0aGUga2VybmVsLiAqLw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1BFTkRTVl9QUkk7DQorCSoocG9ydE5WSUNfU1lTUFJJMikgfD0gcG9ydE5WSUNfU1lTVElDS19QUkk7DQorDQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJDQorCS8qIEluaXRpYWxpc2UgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgcmVhZHkgZm9yIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl1eENyaXRpY2FsTmVzdGluZyA9IDA7DQorDQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIENNMyBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApDQorew0KKwkvKiBTZXQgYSBQZW5kU1YgdG8gcmVxdWVzdCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCXV4Q3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkNCisJew0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hc20gdm9pZCB4UG9ydFBlbmRTVkhhbmRsZXIoIHZvaWQgKQ0KK3sNCisJZXh0ZXJuIHV4Q3JpdGljYWxOZXN0aW5nOw0KKwlleHRlcm4gcHhDdXJyZW50VENCOw0KKwlleHRlcm4gdlRhc2tTd2l0Y2hDb250ZXh0Ow0KKw0KKwlQUkVTRVJWRTgNCisNCisJbXJzIHIwLCBwc3AJCQkJCQkgDQorDQorCWxkcglyMywgPXB4Q3VycmVudFRDQgkJIAkgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQorCWxkcglyMiwgW3IzXQkJCQkJCQ0KKw0KKwlzdG1kYiByMCEsIHtyNC1yMTF9CQkJCSAvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwlzdHIgcjAsIFtyMl0JCQkJCSAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKw0KKwlzdG1kYiBzcCEsIHtyMywgcjE0fQkJDQorCW1vdiByMCwgI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwltc3IgYmFzZXByaSwgcjAJCSANCisJYmwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCW1vdiByMCwgIzANCisJbXNyIGJhc2VwcmksIHIwDQorCWxkbWlhIHNwISwge3IzLCByMTR9CQkJDQorDQorCWxkciByMSwgW3IzXQkJCQkJIA0KKwlsZHIgcjAsIFtyMV0JCQkJCSAvKiBUaGUgZmlyc3QgaXRlbSBpbiBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgdG9wIG9mIHN0YWNrLiAqLw0KKwlsZG1pYSByMCEsIHtyNC1yMTF9CQkJIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudC4gKi8NCisJbXNyIHBzcCwgcjAJCQkJCQkgDQorCWJ4IHIxNA0KKwlub3ANCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICkNCit7DQordW5zaWduZWQgbG9uZyB1bER1bW15Ow0KKw0KKwkvKiBJZiB1c2luZyBwcmVlbXB0aW9uLCBhbHNvIGZvcmNlIGEgY29udGV4dCBzd2l0Y2guICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsJDQorCSNlbmRpZg0KKw0KKwl1bER1bW15ID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCB0aGUgc3lzdGljayB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzIGF0IHRoZSByZXF1aXJlZA0KKyAqIGZyZXF1ZW5jeS4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogQ29uZmlndXJlIFN5c1RpY2sgdG8gaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZS4gKi8NCisJKihwb3J0TlZJQ19TWVNUSUNLX0xPQUQpID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTDsNCisJKihwb3J0TlZJQ19TWVNUSUNLX0NUUkwpID0gcG9ydE5WSUNfU1lTVElDS19DTEsgfCBwb3J0TlZJQ19TWVNUSUNLX0lOVCB8IHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitfX2FzbSB2b2lkIHZQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApDQorew0KKwlQUkVTRVJWRTgNCisNCisJbW92IHIwLCAjY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorCW1zciBiYXNlcHJpLCByMA0KKwlieCByMTQNCit9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hc20gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdm9pZCApDQorew0KKwlQUkVTRVJWRTgNCisNCisJLyogRkFROiAgU2V0dGluZyBCQVNFUFJJIHRvIDAgaXMgbm90IGEgYnVnLiAgUGxlYXNlIHNlZSANCisJaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBiZWZvcmUgZGlzYWdyZWVpbmcuICovDQorCW1vdiByMCwgIzANCisJbXNyIGJhc2VwcmksIHIwDQorCWJ4IHIxNA0KK30NCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk1fQ00zL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNMy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjYwZWIyCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNMy9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE0OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisNCisvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCXZQb3J0WWllbGRGcm9tSVNSKCkNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZQb3J0WWllbGRGcm9tSVNSKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCXZQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJdlBvcnRDbGVhckludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKw0KKy8qIEZBUTogIFNldHRpbmcgQkFTRVBSSSB0byAwIGlzIG5vdCBhIGJ1Zy4gIFBsZWFzZSBzZWUgDQoraHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBiZWZvcmUgZGlzYWdyZWVpbmcuICovDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCTA7dlBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQl2UG9ydENsZWFySW50ZXJydXB0TWFzaygpOyh2b2lkKXgNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2RlZmluZSBwb3J0Tk9QKCkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNNEYvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNNEYvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmRhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk1fQ000Ri9wb3J0LmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVJNIENNNEYgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKyNpZm5kZWYgX19UQVJHRVRfRlBVX1ZGUCANCisJI2Vycm9yIFRoaXMgcG9ydCBjYW4gb25seSBiZSB1c2VkIHdoZW4gdGhlIHByb2plY3Qgb3B0aW9ucyBhcmUgY29uZmlndXJlZCB0byBlbmFibGUgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydC4NCisjZW5kaWYNCisNCisjaWYgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCisJI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IG5vdCBiZSBzZXQgdG8gMC4gIFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sDQorI2VuZGlmDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIDB4ZTAwMGUwMTAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19MT0FECQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAweGUwMDBlMDE0ICkNCisjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgMHhlMDAwZWQyMCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NMSwkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19JTlQJCTB4MDAwMDAwMDINCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfRU5BQkxFCQkweDAwMDAwMDAxDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVQJCQkweDEwMDAwMDAwDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZfUFJJCQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAxNiApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX1BSSQkJKCAoICggdW5zaWduZWQgbG9uZyApIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCAyNCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIFZGUC4gKi8NCisjZGVmaW5lIHBvcnRGUENDUgkJCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVmMzQgKSAvKiBGbG9hdGluZyBwb2ludCBjb250ZXh0IGNvbnRyb2wgcmVnaXN0ZXIuICovDQorI2RlZmluZSBwb3J0QVNQRU5fQU5EX0xTUEVOX0JJVFMJKCAweDNVTCA8PCAzMFVMICkNCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfWFBTUgkJCSggMHgwMTAwMDAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9FWEVDX1JFVFVSTgkJKCAweGZmZmZmZmZkICkNCisNCisvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cyBpbiB0aGUgY3JpdGljYWwgbmVzdGluZw0KK3ZhcmlhYmxlLiAqLw0KK3N0YXRpYyB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nID0gMHhhYWFhYWFhYTsNCisNCisvKiANCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBFeGNlcHRpb24gaGFuZGxlcnMuDQorICovDQordm9pZCB4UG9ydFBlbmRTVkhhbmRsZXIoIHZvaWQgKTsNCit2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKTsNCit2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApOw0KKw0KKy8qDQorICogU3RhcnQgZmlyc3QgdGFzayBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgaW4gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorDQorLyoNCisgKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YXNtLnMgdG8gZW5hYmxlIHRoZSBWRlAuDQorICovDQorc3RhdGljIHZvaWQgcHJ2RW5hYmxlVkZQKCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogU2ltdWxhdGUgdGhlIHN0YWNrIGZyYW1lIGFzIGl0IHdvdWxkIGJlIGNyZWF0ZWQgYnkgYSBjb250ZXh0IHN3aXRjaA0KKwlpbnRlcnJ1cHQuICovDQorCQ0KKwkvKiBPZmZzZXQgYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhlIHdheSB0aGUgTUNVIHVzZXMgdGhlIHN0YWNrIG9uIGVudHJ5L2V4aXQNCisJb2YgaW50ZXJydXB0cywgYW5kIHRvIGVuc3VyZSBhbGlnbm1lbnQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkJDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9YUFNSOwkvKiB4UFNSICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB4Q29kZTsJLyogUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAwOwkvKiBMUiAqLw0KKwkNCisJLyogU2F2ZSBjb2RlIHNwYWNlIGJ5IHNraXBwaW5nIHJlZ2lzdGVyIGluaXRpYWxpc2F0aW9uLiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gNTsJLyogUjEyLCBSMywgUjIgYW5kIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHB2UGFyYW1ldGVyczsJLyogUjAgKi8NCisNCisJLyogQSBzYXZlIG1ldGhvZCBpcyBiZWluZyB1c2VkIHRoYXQgcmVxdWlyZXMgZWFjaCB0YXNrIHRvIG1haW50YWluIGl0cw0KKwlvd24gZXhlYyByZXR1cm4gdmFsdWUuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRVhFQ19SRVRVUk47DQorDQorCXB4VG9wT2ZTdGFjayAtPSA4OwkvKiBSMTEsIFIxMCwgUjksIFI4LCBSNywgUjYsIFI1IGFuZCBSNC4gKi8NCisJDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK19fYXNtIHZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICkNCit7DQorCVBSRVNFUlZFOA0KKw0KKwkvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisJbGRyCXIzLCA9cHhDdXJyZW50VENCDQorCWxkciByMSwgW3IzXQ0KKwlsZHIgcjAsIFtyMV0NCisJLyogUG9wIHRoZSBjb3JlIHJlZ2lzdGVycy4gKi8NCisJbGRtaWEgcjAhLCB7cjQtcjExLCByMTR9DQorCW1zciBwc3AsIHIwDQorCW1vdiByMCwgIzANCisJbXNyCWJhc2VwcmksIHIwCQ0KKwlieCByMTQNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hc20gdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApDQorew0KKwlQUkVTRVJWRTgNCisNCisJLyogVXNlIHRoZSBOVklDIG9mZnNldCByZWdpc3RlciB0byBsb2NhdGUgdGhlIHN0YWNrLiAqLw0KKwlsZHIgcjAsID0weEUwMDBFRDA4DQorCWxkciByMCwgW3IwXQ0KKwlsZHIgcjAsIFtyMF0NCisJLyogU2V0IHRoZSBtc3AgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLiAqLw0KKwltc3IgbXNwLCByMA0KKwkvKiBHbG9iYWxseSBlbmFibGUgaW50ZXJydXB0cy4gKi8NCisJY3BzaWUgaQ0KKwkvKiBDYWxsIFNWQyB0byBzdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJc3ZjIDANCisJbm9wDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK19fYXNtIHZvaWQgcHJ2RW5hYmxlVkZQKCB2b2lkICkNCit7DQorCVBSRVNFUlZFOA0KKwkNCisJLyogVGhlIEZQVSBlbmFibGUgYml0cyBhcmUgaW4gdGhlIENQQUNSLiAqLw0KKwlsZHIudyByMCwgPTB4RTAwMEVEODgNCisJbGRyCXIxLCBbcjBdDQorCQ0KKwkvKiBFbmFibGUgQ1AxMCBhbmQgQ1AxMSBjb3Byb2Nlc3NvcnMsIHRoZW4gc2F2ZSBiYWNrLiAqLw0KKwlvcnIJcjEsIHIxLCAjKCAweGYgPDwgMjAgKQ0KKwlzdHIgcjEsIFtyMF0NCisJYngJcjE0CQ0KKwlub3ANCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE1ha2UgUGVuZFNWLCBDYWxsU1YgYW5kIFN5c1RpY2sgdGhlIHNhbWUgcHJpcm9pdHkgYXMgdGhlIGtlcm5lbC4gKi8NCisJKihwb3J0TlZJQ19TWVNQUkkyKSB8PSBwb3J0TlZJQ19QRU5EU1ZfUFJJOw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1NZU1RJQ0tfUFJJOw0KKw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCQ0KKwkvKiBJbml0aWFsaXNlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IHJlYWR5IGZvciB0aGUgZmlyc3QgdGFzay4gKi8NCisJdXhDcml0aWNhbE5lc3RpbmcgPSAwOw0KKw0KKwkvKiBFbnN1cmUgdGhlIFZGUCBpcyBlbmFibGVkIC0gaXQgc2hvdWxkIGJlIGFueXdheS4gKi8NCisJcHJ2RW5hYmxlVkZQKCk7DQorCQ0KKwkvKiBMYXp5IHNhdmUgYWx3YXlzLiAqLw0KKwkqKCBwb3J0RlBDQ1IgKSB8PSBwb3J0QVNQRU5fQU5EX0xTUEVOX0JJVFM7DQorCQ0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJcHJ2U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQ000RiBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApDQorew0KKwkvKiBTZXQgYSBQZW5kU1YgdG8gcmVxdWVzdCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCXV4Q3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkNCisJew0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hc20gdm9pZCB4UG9ydFBlbmRTVkhhbmRsZXIoIHZvaWQgKQ0KK3sNCisJZXh0ZXJuIHV4Q3JpdGljYWxOZXN0aW5nOw0KKwlleHRlcm4gcHhDdXJyZW50VENCOw0KKwlleHRlcm4gdlRhc2tTd2l0Y2hDb250ZXh0Ow0KKw0KKwlQUkVTRVJWRTgNCisNCisJbXJzIHIwLCBwc3AJCQkJCQkNCisJDQorCS8qIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLiAqLw0KKwlsZHIJcjMsID1weEN1cnJlbnRUQ0IJCQkNCisJbGRyCXIyLCBbcjNdCQkJCQkJDQorDQorCS8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCisJdHN0IHIxNCwgIzB4MTANCisJaXQgZXENCisJdnN0bWRiZXEgcjAhLCB7czE2LXMzMX0NCisNCisJLyogU2F2ZSB0aGUgY29yZSByZWdpc3RlcnMuICovDQorCXN0bWRiIHIwISwge3I0LXIxMSwgcjE0fQkJCQkNCisJDQorCS8qIFNhdmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgaW50byB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBUQ0IuICovDQorCXN0ciByMCwgW3IyXQ0KKwkNCisJc3RtZGIgc3AhLCB7cjMsIHIxNH0NCisJbW92IHIwLCAjY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorCW1zciBiYXNlcHJpLCByMA0KKwlibCB2VGFza1N3aXRjaENvbnRleHQJCQkNCisJbW92IHIwLCAjMA0KKwltc3IgYmFzZXByaSwgcjANCisJbGRtaWEgc3AhLCB7cjMsIHIxNH0NCisNCisJLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCisJbGRyIHIxLCBbcjNdCQ0KKwlsZHIgcjAsIFtyMV0NCisJDQorCS8qIFBvcCB0aGUgY29yZSByZWdpc3RlcnMuICovDQorCWxkbWlhIHIwISwge3I0LXIxMSwgcjE0fQ0KKw0KKwkvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcG9wIHRoZSBoaWdoIHZmcCByZWdpc3RlcnMgDQorCXRvby4gKi8NCisJdHN0IHIxNCwgIzB4MTANCisJaXQgZXENCisJdmxkbWlhZXEgcjAhLCB7czE2LXMzMX0NCisJDQorCW1zciBwc3AsIHIwCQkJCQkJDQorCWJ4IHIxNAkJDQorCW5vcAkJCQkJDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxEdW1teTsNCisNCisJLyogSWYgdXNpbmcgcHJlZW1wdGlvbiwgYWxzbyBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkJKihwb3J0TlZJQ19JTlRfQ1RSTCkgPSBwb3J0TlZJQ19QRU5EU1ZTRVQ7CQ0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19hc20gdm9pZCB2UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKQ0KK3sNCisJUFJFU0VSVkU4DQorDQorCW1vdiByMCwgI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwltc3IgYmFzZXByaSwgcjANCisJYnggcjE0DQorfQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK19fYXNtIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHZvaWQgKQ0KK3sNCisJUFJFU0VSVkU4DQorDQorCS8qIEZBUTogIFNldHRpbmcgQkFTRVBSSSB0byAwIGlzIG5vdCBhIGJ1Zy4gIFBsZWFzZSBzZWUgDQorCWh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLiAqLw0KKwltb3YgcjAsICMwDQorCW1zciBiYXNlcHJpLCByMA0KKwlieCByMTQNCit9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNNEYvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUlZEUy9BUk1fQ000Ri9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2I4NmIwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JWRFMvQVJNX0NNNEYvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorDQorLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkRnJvbUlTUigpDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KK2V4dGVybiB2b2lkIHZQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQl2UG9ydFNldEludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisNCisvKiBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KK2h0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLiAqLw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCQkwO3ZQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJdlBvcnRDbGVhckludGVycnVwdE1hc2soKTsodm9pZCl4DQorDQorLyogVGhlcmUgYXJlIGFuIHVuZXZlbiBudW1iZXIgb2YgaXRlbXMgb24gdGhlIGluaXRpYWwgc3RhY2ssIHNvIA0KK3BvcnRBTElHTk1FTlRfQVNTRVJUX3B4Q3VycmVudFRDQigpIHdpbGwgdHJpZ2dlciBmYWxzZSBwb3NpdGl2ZSBhc3NlcnRzLiAqLw0KKyNkZWZpbmUgcG9ydEFMSUdOTUVOVF9BU1NFUlRfcHhDdXJyZW50VENCICggdm9pZCApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNkZWZpbmUgcG9ydE5PUCgpDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDk0MTMwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlgyMDAvcG9ydC5jCkBAIC0wLDAgKzEsMzYxIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgInN0cmluZy5oIg0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjaW5jbHVkZSAiaW9kZWZpbmUuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrcyBzaG91bGQgc3RhcnQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIGluIFN1cGVydmlzb3IgbW9kZSwgdGhlcmVmb3JlIA0KK1BTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMzAwMDAgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHRvIGVuc3VyZSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCwNCisgYW5kIHRoZXJlZm9yZSBpbnN0YWxsZWQgaW4gdGhlIHZlY3RvciB0YWJsZSwgd2hlbiB0aGUgRnJlZVJUT1MgY29kZSBpcyBidWlsdA0KK2FzIGEgbGlicmFyeS4gKi8NCitleHRlcm4gcG9ydEJBU0VfVFlQRSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeTsNCitjb25zdCBwb3J0QkFTRV9UWVBFICogcF92U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSA9ICZ2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIHdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0DQorICogYWNjZXNzIHRvIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4gDQorICovDQorc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisvKg0KKyAqIFNvZnR3YXJlIGludGVycnVwdCBoYW5kbGVyLiAgUGVyZm9ybXMgdGhlIGFjdHVhbCBjb250ZXh0IHN3aXRjaCAoc2F2aW5nIGFuZA0KKyAqIHJlc3RvcmluZyBvZiByZWdpc3RlcnMpLiAgV3JpdHRlbiBpbiBhc20gY29kZSBhcyBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGlzDQorICogcmVxdWlyZWQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2WWllbGRIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoaXMgaXMgdGhlIGZ1bmN0aW9uDQorICogdGhhdCBjYWxscyB0aGUgaW5saW5lIGFzbSBmdW5jdGlvbiBwcnZZaWVsZEhhbmRsZXIoKS4gIEl0IGlzIGluc3RhbGxlZCBpbiANCisgKiB0aGUgdmVjdG9yIHRhYmxlLCBidXQgdGhlIGNvZGUgdGhhdCBpbnN0YWxscyBpdCBpcyBpbiBwcnZZaWVsZEhhbmRsZXIgcmF0aGVyDQorICogdGhhbiB1c2luZyBhICNwcmFnbWEuDQorICovDQordm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGlzIGlzIGFjY2Vzc2VkIGJ5IHRoZSBpbmxpbmUgYXNzZW1ibGVyIGZ1bmN0aW9ucyBzbyBpcyBmaWxlIHNjb3BlIGZvcg0KK2NvbnZlbmllbmNlLiAqLw0KK2V4dGVybiB2b2lkICpweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKyAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorCQ0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGZmZmZmZmZmOwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwl9DQorCSNlbmRpZg0KKwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkJCQkNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8gDQorCQl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCQl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8JCQ0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCQ0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQorCQkNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KKwkJX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJDQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCisNCisJLyogSnVzdCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgaW5saW5lX2FzbSBwcnZTdGFydEZpcnN0VGFzaw0KK3N0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCit7DQorCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQorDQorCS8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sgDQorCXB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIxNQ0KKwlNT1YuTAlbUjE1XSwgUjANCisNCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkgDQorCXB4Q3VycmVudFRDQi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUgCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUgCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUE0JUjEtUjE1IAkJLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCisgICAgUlRFCQkJCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorICAgIE5PUA0KKyAgICBOT1ANCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI3ByYWdtYSBpbnRlcnJ1cHQgKCB2VGlja0lTUiggdmVjdCA9IF9WRUNUKCBjb25maWdUSUNLX1ZFQ1RPUiApLCBlbmFibGUgKSApDQordm9pZCB2VGlja0lTUiggdm9pZCApDQorew0KKwkvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KKwluZWNlc3NpdGF0ZXMuICovDQorCXNldF9pcGwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwl7DQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKwlzZXRfaXBsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCQ0KKwkvKiBPbmx5IHNlbGVjdCBhIG5ldyB0YXNrIGlmIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkJdGFza1lJRUxEKCk7DQorCSNlbmRpZg0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApDQorew0KKwlwcnZZaWVsZEhhbmRsZXIoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI3ByYWdtYSBpbmxpbmVfYXNtIHBydllpZWxkSGFuZGxlcg0KK3N0YXRpYyB2b2lkIHBydllpZWxkSGFuZGxlciggdm9pZCApDQorew0KKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJU0VUUFNXCUkNCisNCisJLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KKwl0aGUgaW50ZXJydXB0IG9jY3VycmVkIGZyb20gdGhlIGludGVycnVwdCBzdGFjayB0byB0aGUgdXNlciBzdGFjay4gIA0KKwkNCisJUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQorCVBVU0guTAlSMTUNCisJDQorCS8qIFJlYWQgdGhlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8NCisJTVZGQwlVU1AsIFIxNQ0KKwkNCisJLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KKwlTVUIJCSMxMiwgUjE1DQorCU1WVEMJUjE1LCBVU1ANCisJDQorCS8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLiAqLw0KKwlNT1YuTAlbIFIwIF0sIFsgUjE1IF0gOyBSMTUNCisJTU9WLkwgCTRbIFIwIF0sIDRbIFIxNSBdICA7IFBDDQorCU1PVi5MCThbIFIwIF0sIDhbIFIxNSBdICA7IFBTVw0KKw0KKwkvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQorCUFERAkjMTIsIFIwDQorCQ0KKwkvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQorDQorCS8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQorCVBVU0hNCVIxLVIxNA0KKwkNCisJLyogU2F2ZSB0aGUgYWNjdW11bGF0b3IuICovDQorCU1WRkFDSEkJUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNNSQlSMTUJOyBNaWRkbGUgb3JkZXIgd29yZC4NCisJU0hMTAkjMTYsIFIxNSA7IFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuDQorCVBVU0guTAlSMTUNCisNCisJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQiwgUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlSMCwgWyBSMTUgXQ0KKwkJCQ0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQorCXN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKw0KKwkvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQorCUJTUi5BCV92VGFza1N3aXRjaENvbnRleHQNCisNCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisNCisJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KKwlQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0xPCVIxNQ0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0hJCVIxNQ0KKwlQT1BNCVIxLVIxNQ0KKwlSVEUNCisJTk9QDQorCU5PUA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gKi8NCisJDQorCS8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBqdXN0IHRvIHByZXZlbnQgdGhlIHN5bWJvbCBnZXR0aW5nIG9wdGltaXNlZCBhd2F5LiAqLw0KKwkoIHZvaWQgKSB2VGFza1N3aXRjaENvbnRleHQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlgyMDAvcG9ydF9hc20uc3JjIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlgyMDAvcG9ydF9hc20uc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNTA2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDIwMC9wb3J0X2FzbS5zcmMKQEAgLTAsMCArMSw2NyBAQAorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOw0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisJCS5HTEIJX3ZTb2Z0d2FyZUludGVycnVwdElTUg0KKyAgICAgICAgICAgICAgICAuR0xCICAgIF92U29mdHdhcmVJbnRlcnJ1cHRFbnRyeQ0KKw0KKwkJLlNFQ1RJT04gICBQLENPREUNCisJCQ0KK192U29mdHdhcmVJbnRlcnJ1cHRFbnRyeToNCisNCisJQlJBCV92U29mdHdhcmVJbnRlcnJ1cHRJU1INCisNCisJCS5SVkVDVE9SCTI3LCBfdlNvZnR3YXJlSW50ZXJydXB0RW50cnkNCisNCisJCS5FTkQNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDIwMC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWIxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDIwMC9wb3J0bWFjcm8uaApAQCAtMCwwICsxLDE1MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2luY2x1ZGUgIm1hY2hpbmUuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMgLSB0aGVzZSBhcmUgYSBiaXQgbGVnYWN5IGFuZCBub3QgcmVhbGx5IHVzZWQgbm93LCBvdGhlciB0aGFuDQorcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdW5zaWduZWQgcG9ydExPTkcNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRMT05HIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmZmZmZg0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQlub3AoKQ0KKw0KKy8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyLiAgU29mdHdhcmUgaW50ZXJydXB0cyB1c2UNCit2ZWN0b3IgMjcuICovDQorI2RlZmluZSBwb3J0SVRVX1NXSU5UUgkJCSggKCB1bnNpZ25lZCBjaGFyICogKSAweDAwMDg3MkUwICkNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCSpwb3J0SVRVX1NXSU5UUiA9IDB4MDE7IG5vcCgpOyBub3AoKTsgbm9wKCk7IG5vcCgpOyBub3AoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQorDQorLyoNCisgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHRocm91Z2ggdGhlIHRhc2tFTlRFUl9DUklUSUNBTCgpDQorICogYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLg0KKyAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgCXNldF9pcGwoIDAgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKw0KKy8qIENyaXRpY2FsIG5lc3RpbmcgY291bnRzIGFyZSBzdG9yZWQgaW4gdGhlIFRDQi4gKi8NCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAoIDEgKQ0KKw0KKy8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0YXNrcy5jLiAqLw0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQl2VGFza0VudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCk7DQorDQorLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIGdldF9pcGwoKTsgc2V0X2lwbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIHNldF9pcGwoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDAvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDAvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzBhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDYwMC9wb3J0LmMKQEAgLTAsMCArMSwzNjggQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAic3RyaW5nLmgiDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNpbmNsdWRlICJpb2RlZmluZS5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2tzIHNob3VsZCBzdGFydCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgaW4gU3VwZXJ2aXNvciBtb2RlLCB0aGVyZWZvcmUgDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAzMDAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9GUFNXICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDAxMDAgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHRvIGVuc3VyZSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCwNCisgYW5kIHRoZXJlZm9yZSBpbnN0YWxsZWQgaW4gdGhlIHZlY3RvciB0YWJsZSwgd2hlbiB0aGUgRnJlZVJUT1MgY29kZSBpcyBidWlsdA0KK2FzIGEgbGlicmFyeS4gKi8NCitleHRlcm4gcG9ydEJBU0VfVFlQRSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeTsNCitjb25zdCBwb3J0QkFTRV9UWVBFICogcF92U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSA9ICZ2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIHdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0DQorICogYWNjZXNzIHRvIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4gDQorICovDQorc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisvKg0KKyAqIFNvZnR3YXJlIGludGVycnVwdCBoYW5kbGVyLiAgUGVyZm9ybXMgdGhlIGFjdHVhbCBjb250ZXh0IHN3aXRjaCAoc2F2aW5nIGFuZA0KKyAqIHJlc3RvcmluZyBvZiByZWdpc3RlcnMpLiAgV3JpdHRlbiBpbiBhc20gY29kZSBhcyBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGlzDQorICogcmVxdWlyZWQuDQorICovDQorc3RhdGljIHZvaWQgcHJ2WWllbGRIYW5kbGVyKCB2b2lkICk7DQorDQorLyoNCisgKiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoaXMgaXMgdGhlIGZ1bmN0aW9uDQorICogdGhhdCBjYWxscyB0aGUgaW5saW5lIGFzbSBmdW5jdGlvbiBwcnZZaWVsZEhhbmRsZXIoKS4gIEl0IGlzIGluc3RhbGxlZCBpbiANCisgKiB0aGUgdmVjdG9yIHRhYmxlLCBidXQgdGhlIGNvZGUgdGhhdCBpbnN0YWxscyBpdCBpcyBpbiBwcnZZaWVsZEhhbmRsZXIgcmF0aGVyDQorICogdGhhbiB1c2luZyBhICNwcmFnbWEuDQorICovDQordm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUaGlzIGlzIGFjY2Vzc2VkIGJ5IHRoZSBpbmxpbmUgYXNzZW1ibGVyIGZ1bmN0aW9ucyBzbyBpcyBmaWxlIHNjb3BlIGZvcg0KK2NvbnZlbmllbmNlLiAqLw0KK2V4dGVybiB2b2lkICpweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKyAJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOw0KKwkNCisJLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KKwl2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KKwl0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KKwkjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCisJew0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsJLyogcjE1LiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZGRkZGRkZGQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWFhYWE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Nzc3Nzc3Nzc7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDQ0NDQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisJfQ0KKwkjZW5kaWYNCisJDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJCQkJDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8gDQorCQl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCQl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorDQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8JCQ0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCQ0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQorCQkNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KKwkJX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJDQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCisNCisJLyogSnVzdCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgaW5saW5lX2FzbSBwcnZTdGFydEZpcnN0VGFzaw0KK3N0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCit7DQorCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQorDQorCS8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sgDQorCXB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIxNQ0KKwlNT1YuTAlbUjE1XSwgUjANCisNCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkgDQorCXB4Q3VycmVudFRDQi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUgCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUgCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEMJUjE1LEZQU1cgCS8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyB3b3JkLiAqLw0KKyAgICBQT1BNCVIxLVIxNSAJCS8qIFIxIHRvIFIxNSAtIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgU1AuICovDQorICAgIFJURQkJCQkJLyogVGhpcyBwb3BzIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKyAgICBOT1ANCisgICAgTk9QDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgaW50ZXJydXB0ICggdlRpY2tJU1IoIHZlY3QgPSBfVkVDVCggY29uZmlnVElDS19WRUNUT1IgKSwgZW5hYmxlICkgKQ0KK3ZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KK3sNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAqLw0KKwlzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJc2V0X2lwbCggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwkNCisJLyogT25seSBzZWxlY3QgYSBuZXcgdGFzayBpZiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisJCXRhc2tZSUVMRCgpOw0KKwkjZW5kaWYNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKQ0KK3sNCisJcHJ2WWllbGRIYW5kbGVyKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNwcmFnbWEgaW5saW5lX2FzbSBwcnZZaWVsZEhhbmRsZXINCitzdGF0aWMgdm9pZCBwcnZZaWVsZEhhbmRsZXIoIHZvaWQgKQ0KK3sNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCVNFVFBTVwlJDQorDQorCS8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCisJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suICANCisJDQorCVIxNSBpcyBzYXZlZCBiZWZvcmUgaXQgaXMgY2xvYmJlcmVkLiAqLw0KKwlQVVNILkwJUjE1DQorCQ0KKwkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCU1WRkMJVVNQLCBSMTUNCisJDQorCS8qIE1vdmUgdGhlIGFkZHJlc3MgZG93biB0byB0aGUgZGF0YSBiZWluZyBtb3ZlZC4gKi8NCisJU1VCCQkjMTIsIFIxNQ0KKwlNVlRDCVIxNSwgVVNQDQorCQ0KKwkvKiBDb3B5IHRoZSBkYXRhIGFjcm9zcy4gKi8NCisJTU9WLkwJWyBSMCBdLCBbIFIxNSBdIDsgUjE1DQorCU1PVi5MIAk0WyBSMCBdLCA0WyBSMTUgXSAgOyBQQw0KKwlNT1YuTAk4WyBSMCBdLCA4WyBSMTUgXSAgOyBQU1cNCisNCisJLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KKwlBREQJIzEyLCBSMA0KKwkNCisJLyogQWxsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGRpcmVjdGx5IHRvIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwlTRVRQU1cJVQ0KKw0KKwkvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KKwlQVVNITQlSMS1SMTQNCisJDQorCS8qIFNhdmUgdGhlIEZQU1cgYW5kIGFjY3VtdWxhdG9yLiAqLw0KKwlNVkZDCUZQU1csIFIxNQ0KKwlQVVNILkwJUjE1DQorCU1WRkFDSEkJUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNNSQlSMTUJOyBNaWRkbGUgb3JkZXIgd29yZC4NCisJU0hMTAkjMTYsIFIxNSA7IFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuDQorCVBVU0guTAlSMTUNCisNCisJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQiwgUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlSMCwgWyBSMTUgXQ0KKwkJCQ0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQorCXN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKw0KKwkvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQorCUJTUi5BCV92VGFza1N3aXRjaENvbnRleHQNCisNCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisNCisJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMA0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KKwlQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0xPCVIxNQ0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0hJCVIxNQ0KKwlQT1AJCVIxNQ0KKwlNVlRDCVIxNSxGUFNXDQorCVBPUE0JUjEtUjE1DQorCVJURQ0KKwlOT1ANCisJTk9QDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KKwkNCisJLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGp1c3QgdG8gcHJldmVudCB0aGUgc3ltYm9sIGdldHRpbmcgb3B0aW1pc2VkIGF3YXkuICovDQorCSggdm9pZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDYwMC9wb3J0X2FzbS5zcmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9SWDYwMC9wb3J0X2FzbS5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1MDZiMwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnRfYXNtLnNyYwpAQCAtMCwwICsxLDY3IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7DQorOw0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCis7ICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorOyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorOyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKzsgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCis7ICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorOyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKzsgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorOw0KKzsNCis7ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorOw0KKzsgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKzsgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorOyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorOyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCis7ICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorOyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKzsgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorOyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKzsgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKzsgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCis7ICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCis7ICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCis7ICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorOyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCis7DQorOyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCis7DQorOyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIGxhdGVzdCBpbmZvcm1hdGlvbiwgbGljZW5zZSBhbmQNCis7ICAgIGNvbnRhY3QgZGV0YWlscy4NCis7DQorOyAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEEgdmVyc2lvbiB0aGF0IGlzIGNlcnRpZmllZCBmb3IgdXNlIGluIHNhZmV0eQ0KKzsgICAgY3JpdGljYWwgc3lzdGVtcy4NCis7DQorOyAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQorOyAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKzsqLw0KKwkJLkdMQglfdlNvZnR3YXJlSW50ZXJydXB0SVNSDQorICAgICAgICAgICAgICAgIC5HTEIgICAgX3ZTb2Z0d2FyZUludGVycnVwdEVudHJ5DQorDQorCQkuU0VDVElPTiAgIFAsQ09ERQ0KKwkJDQorX3ZTb2Z0d2FyZUludGVycnVwdEVudHJ5Og0KKw0KKwlCUkEJX3ZTb2Z0d2FyZUludGVycnVwdElTUg0KKw0KKwkJLlJWRUNUT1IJMjcsIF92U29mdHdhcmVJbnRlcnJ1cHRFbnRyeQ0KKw0KKwkJLkVORA0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDAvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhYjE0NgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTUwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCisjaW5jbHVkZSAibWFjaGluZS5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucyAtIHRoZXNlIGFyZSBhIGJpdCBsZWdhY3kgYW5kIG5vdCByZWFsbHkgdXNlZCBub3csIG90aGVyIHRoYW4NCitwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCTgJLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJCW5vcCgpDQorDQorLyogVGhlIGxvY2F0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcmVnaXN0ZXIuICBTb2Z0d2FyZSBpbnRlcnJ1cHRzIHVzZQ0KK3ZlY3RvciAyNy4gKi8NCisjZGVmaW5lIHBvcnRJVFVfU1dJTlRSCQkJKCAoIHVuc2lnbmVkIGNoYXIgKiApIDB4MDAwODcyRTAgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJKnBvcnRJVFVfU1dJTlRSID0gMHgwMTsgbm9wKCk7IG5vcCgpOyBub3AoKTsgbm9wKCk7IG5vcCgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKQlpZiggeCAhPSBwZEZBTFNFICkgcG9ydFlJRUxEKCkNCisNCisvKg0KKyAqIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUgdGFza0VOVEVSX0NSSVRJQ0FMKCkNCisgKiBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuDQorICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJc2V0X2lwbCggMCApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCXNldF9pcGwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorDQorLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQorDQorLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJdlRhc2tFeGl0Q3JpdGljYWwoKTsNCisNCisvKiBBcyB0aGlzIHBvcnQgYWxsb3dzIGludGVycnVwdCBuZXN0aW5nLi4uICovDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgZ2V0X2lwbCgpOyBzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgc2V0X2lwbCggdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9TSDJBX0ZQVS9JU1JfU3VwcG9ydC5pbmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUmVuZXNhcy9TSDJBX0ZQVS9JU1JfU3VwcG9ydC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllODBjMQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL0lTUl9TdXBwb3J0LmluYwpAQCAtMCwwICsxLDEwMCBAQAorOy8qDQorOyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorOw0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisJLm1hY3JvIHBvcnRTQVZFX0NPTlRFWFQNCisNCisJOyBTYXZlIHIwIHRvIHIxNCBhbmQgcHIuDQorCW1vdm1sLmwgcjE1LCBALXIxNQ0KKwkNCisJOyBTYXZlIG1hYzEsIG1hY2ggYW5kIGdicg0KKwlzdHMubAltYWNsLCBALXIxNQ0KKwlzdHMubAltYWNoLCBALXIxNQ0KKwlzdGMubAlnYnIsIEAtcjE1DQorCQ0KKwk7IEdldCB0aGUgYWRkcmVzcyBvZiBweEN1cnJlbnRUQ0INCisJbW92LmwJI19weEN1cnJlbnRUQ0IsIHIwDQorCQ0KKwk7IEdldCB0aGUgYWRkcmVzcyBvZiBweFRvcE9mU3RhY2sgZnJvbSB0aGUgVENCLg0KKwltb3YubAlAcjAsIHIwDQorCQ0KKwk7IFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW4gcHhUb3BPZlN0YWNrLg0KKwltb3YubAlyMTUsIEByMA0KKw0KKwkuZW5kbQ0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKwkubWFjcm8gcG9ydFJFU1RPUkVfQ09OVEVYVA0KKw0KKwk7IEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLg0KKwltb3YubAkjX3B4Q3VycmVudFRDQiwgcjANCisNCisJOyBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgc3RhY2sgZnJvbSBweEN1cnJlbnRUQ0IuDQorCW1vdi5sCUByMCwgcjANCisNCisJOyBHZXQgdGhlIHRhc2sgc3RhY2sgaXRzZWxmIGludG8gdGhlIHN0YWNrIHBvaW50ZXIuIA0KKwltb3YubAlAcjAsIHIxNQkJDQorDQorCTsgUmVzdG9yZSBzeXN0ZW0gcmVnaXN0ZXJzLg0KKwlsZGMubAlAcjE1KywgZ2JyDQorCWxkcy5sCUByMTUrLCBtYWNoDQorCWxkcy5sCUByMTUrLCBtYWNsDQorDQorCTsgUmVzdG9yZSByMCB0byByMTQgYW5kIFBSDQorCW1vdm1sLmwJQHIxNSssIHIxNQ0KKwkNCisJOyBQb3AgdGhlIFNSIGFuZCBQQyB0byBqdW1wIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFzay4NCisJcnRlDQorCW5vcA0KKw0KKwkuZW5kbQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzYzYjIxCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvU0gyQV9GUFUvcG9ydC5jCkBAIC0wLDAgKzEsMzA2IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qIExpYnJhcnkgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgInN0cmluZy5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSBTUiBhc3NpZ25lZCB0byBhIG5ld2x5IGNyZWF0ZWQgdGFzay4gIFRoZSBvbmx5IGltcG9ydGFudCB0aGluZyBpbiB0aGlzDQordmFsdWUgaXMgZm9yIGFsbCBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCQkoIDBVTCApDQorDQorLyogRGltZW5zaW9ucyB0aGUgYXJyYXkgaW50byB3aGljaCB0aGUgZmxvYXRpbmcgcG9pbnQgY29udGV4dCBpcyBzYXZlZC4gIA0KK0FsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgRlBSMCB0byBGUFIxNSwgRlBVTCBhbmQgRlBTQ1IsIGVhY2ggb2Ygd2hpY2ggaXMgNA0KK2J5dGVzIGJpZy4gIElmIHRoaXMgbnVtYmVyIGlzIGNoYW5nZWQgdGhlbiB0aGUgNzIgaW4gcG9ydGFzbS5zcmMgYWxzbyBuZWVkcw0KK2NoYW5naW5nLiAqLw0KKyNkZWZpbmUgcG9ydEZMT1BfUkVHSVNURVJTX1RPX1NUT1JFCSggMTggKQ0KKyNkZWZpbmUgcG9ydEZMT1BfU1RPUkFHRV9TSVpFIAkJKCBwb3J0RkxPUF9SRUdJU1RFUlNfVE9fU1RPUkUgKiA0ICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFRoZSBUUkFQQSBoYW5kbGVyIHVzZWQgdG8gZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4NCisgKi8NCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisNCisvKg0KKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIGRlZmluZWQgaW4gcG9ydGFzbS5zcmMuDQorICovDQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KKw0KKy8qDQorICogT2J0YWlucyB0aGUgY3VycmVudCBHQlIgdmFsdWUgLSBkZWZpbmVkIGluIHBvcnRhc20uc3JjLg0KKyAqLw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIHVsUG9ydEdldEdCUiggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIE1hcmsgdGhlIGVuZCBvZiB0aGUgc3RhY2sgLSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seSBhbmQgY2FuIGJlIHJlbW92ZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAweDExMTExMTExVUw7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMlVMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzNVTDsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1I7IA0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCS8qIFBDLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCB1bnNpZ25lZCBsb25nICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCS8qIFBSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkNCisJLyogMTQuICovDQorCSpweFRvcE9mU3RhY2sgPSAxNDsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFIxMy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDEzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjEyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSMTEuICovDQorCSpweFRvcE9mU3RhY2sgPSAxMTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFIxMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDEwOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjkuICovDQorCSpweFRvcE9mU3RhY2sgPSA5Ow0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjguICovDQorCSpweFRvcE9mU3RhY2sgPSA4Ow0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjcuICovDQorCSpweFRvcE9mU3RhY2sgPSA3Ow0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjYuICovDQorCSpweFRvcE9mU3RhY2sgPSA2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjUuICovDQorCSpweFRvcE9mU3RhY2sgPSA1Ow0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogUjQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHVuc2lnbmVkIGxvbmcgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSMy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSMi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBSMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkNCisJLyogUjAgKi8NCisJKnB4VG9wT2ZTdGFjayA9IDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkNCisJLyogTUFDTC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDE2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCS8qIE1BQ0guICovDQorCSpweFRvcE9mU3RhY2sgPSAxNzsNCisJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkvKiBHQlIuICovDQorCSpweFRvcE9mU3RhY2sgPSB1bFBvcnRHZXRHQlIoKTsNCisJDQorCS8qIEdCUiA9IGdsb2JhbCBiYXNlIHJlZ2lzdGVyLg0KKwkgICBWQlIgPSB2ZWN0b3IgYmFzZSByZWdpc3Rlci4NCisJICAgVEJSID0ganVtcCB0YWJsZSBiYXNlIHJlZ2lzdGVyLg0KKwkgICBSMTUgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisJLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCisJdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvIA0KKwl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICBUaGlzIHdpbGwgb25seSByZXN0b3JlIHRoZSBzdGFuZGFyZCByZWdpc3RlcnMgYW5kDQorCW5vdCB0aGUgZmxvcCByZWdpc3RlcnMuICBUaGlzIGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgdGhvdWdoIGJlY2F1c2UgdGhlIG9ubHkNCisJZmxvcCByZWdpc3RlciB0aGF0IGlzIGluaXRpYWxpc2VkIHRvIGEgcGFydGljdWxhciB2YWx1ZSBpcyBmcHNjciwgYW5kIGl0IGlzDQorCW9ubHkgaW5pdGlhbGlzZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUsIHdoaWNoIHdpbGwgc3RpbGwgYmUgdGhlIGN1cnJlbnQgdmFsdWUNCisJd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMgZXhlY3V0aW5nLiAqLw0KKwl0cmFwYSggcG9ydFNUQVJUX1NDSEVEVUxFUl9UUkFQX05PICk7DQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCitsb25nIGxJbnRlcnJ1cHRNYXNrOw0KKw0KKwkvKiBFbnN1cmUgdGhlIHlpZWxkIHRyYXAgcnVucyBhdCB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgb3RoZXIgaW50ZXJydXB0cw0KKwl0aGF0IGNhbiBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwlsSW50ZXJydXB0TWFzayA9IGdldF9pbWFzaygpOw0KKw0KKwkvKiB0YXNrWUlFTEQoKSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHRhc2ssIG5vdCBhbiBpbnRlcnJ1cHQsIHNvIHRoZQ0KKwljdXJyZW50IGludGVycnVwdCBtYXNrIGNhbiBvbmx5IGJlIDAgb3IgcG9ydEtFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgYW5kDQorCXRoZSBtYXNrIGNhbiBiZSBzZXQgd2l0aG91dCByaXNrIG9mIGFjY2lkZW50YWxseSBsb3dlcmluZyB0aGUgbWFzayB2YWx1ZS4gKi8JDQorCXNldF9pbWFzayggcG9ydEtFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJDQorCXRyYXBhKCBwb3J0WUlFTERfVFJBUF9OTyApOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgaW50ZXJydXB0IG1hc2sgdG8gd2hhdGV2ZXIgaXQgd2FzIHByZXZpb3VzbHkgKHdoZW4gdGhlDQorCWZ1bmN0aW9uIHdhcyBlbnRlcmVkKS4gKi8NCisJc2V0X2ltYXNrKCAoIGludCApIGxJbnRlcnJ1cHRNYXNrICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRVc2VzRmxvYXRpbmdQb2ludCggeFRhc2tIYW5kbGUgeFRhc2sgKQ0KK3sNCit1bnNpZ25lZCBsb25nICpwdWxGbG9wQnVmZmVyOw0KK3BvcnRCQVNFX1RZUEUgeFJldHVybjsNCitleHRlcm4gdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCisNCisJLyogVGhpcyBmdW5jdGlvbiB0ZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayBpcw0KKwlnb2luZyB0byB1c2UgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZQ0KKwlmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgc2F2ZWQgYXMgcGFydCBvZiBpdHMgY29udGV4dC4gKi8NCisNCisJLyogUGFzc2luZyBOVUxMIGFzIHhUYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGlzIHRoZQ0KKwlzdWJqZWN0IHRhc2sgLSBzbyBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgaGFuZGxlLiAqLw0KKwlpZiggeFRhc2sgPT0gTlVMTCApDQorCXsNCisJCXhUYXNrID0gKCB4VGFza0hhbmRsZSApIHB4Q3VycmVudFRDQjsNCisJfQ0KKw0KKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGZsb3AgcmVnaXN0ZXJzLiAqLw0KKwlwdWxGbG9wQnVmZmVyID0gKCB1bnNpZ25lZCBsb25nICogKSBwdlBvcnRNYWxsb2MoIHBvcnRGTE9QX1NUT1JBR0VfU0laRSApOw0KKwkNCisJaWYoIHB1bEZsb3BCdWZmZXIgIT0gTlVMTCApDQorCXsNCisJCS8qIFN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycyBpbiBhIGJlbmlnbiBzdGF0ZS4gKi8NCisJCW1lbXNldCggKCB2b2lkICogKSBwdWxGbG9wQnVmZmVyLCAweDAwLCBwb3J0RkxPUF9TVE9SQUdFX1NJWkUgKTsNCisJCQ0KKwkJLyogVGhlIGZpcnN0IHRoaW5nIHRvIGdldCBzYXZlZCBpbiB0aGUgYnVmZmVyIGlzIHRoZSBGUFNDUiB2YWx1ZSAtDQorCQlpbml0aWFsaXNlIHRoaXMgdG8gdGhlIGN1cnJlbnQgRlBTQ1IgdmFsdWUuICovDQorCQkqcHVsRmxvcEJ1ZmZlciA9IGdldF9mcHNjcigpOw0KKwkJDQorCQkvKiBVc2UgdGhlIHRhc2sgdGFnIHRvIHBvaW50IHRvIHRoZSBmbG9wIGJ1ZmZlci4gIFBhc3MgcG9pbnRlciB0byBqdXN0IA0KKwkJYWJvdmUgdGhlIGJ1ZmZlciBiZWNhdXNlIHRoZSBmbG9wIHNhdmUgcm91dGluZSB1c2VzIGEgcHJlLWRlY3JlbWVudC4gKi8NCisJCXZUYXNrU2V0QXBwbGljYXRpb25UYXNrVGFnKCB4VGFzaywgKCB2b2lkICogKSAoIHB1bEZsb3BCdWZmZXIgKyBwb3J0RkxPUF9SRUdJU1RFUlNfVE9fU1RPUkUgKSApOwkJDQorCQl4UmV0dXJuID0gcGRQQVNTOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwkNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnRhc20uc3JjIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvU0gyQV9GUFUvcG9ydGFzbS5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNjJkZQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnRhc20uc3JjCkBAIC0wLDAgKzEsMTc2IEBACis7LyoNCis7ICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCis7CQ0KKzsNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorOyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKzsgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKzsgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCis7ICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorOyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKzsgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCis7ICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKzsNCis7DQorOyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKzsNCis7ICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCis7ICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKzsgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKzsgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorOyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKzsgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCis7ICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKzsgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCis7ICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCis7ICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorOyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorOyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKzsgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorOw0KKzsgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorOw0KKzsgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorOyAgICBjb250YWN0IGRldGFpbHMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCis7ICAgIGNyaXRpY2FsIHN5c3RlbXMuDQorOw0KKzsgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKzsgICAgbGljZW5zaW5nIGFuZCB0cmFpbmluZyBzZXJ2aWNlcy4NCis7Ki8NCisNCisJLmltcG9ydCBfcHhDdXJyZW50VENCDQorCS5pbXBvcnQgX3ZUYXNrU3dpdGNoQ29udGV4dA0KKwkuaW1wb3J0IF92VGFza0luY3JlbWVudFRpY2sNCisNCisJLmV4cG9ydCBfdlBvcnRTdGFydEZpcnN0VGFzaw0KKwkuZXhwb3J0IF91bFBvcnRHZXRHQlINCisJLmV4cG9ydCBfdlBvcnRZaWVsZEhhbmRsZXINCisJLmV4cG9ydCBfdlBvcnRQcmVlbXB0aXZlVGljaw0KKwkuZXhwb3J0IF92UG9ydENvb3BlcmF0aXZlVGljaw0KKwkuZXhwb3J0IF92UG9ydFNhdmVGbG9wUmVnaXN0ZXJzDQorCS5leHBvcnQgX3ZQb3J0UmVzdG9yZUZsb3BSZWdpc3RlcnMNCisNCisgICAgLnNlY3Rpb24gICAgUA0KKw0KKwkuSU5DTFVERSAiSVNSX1N1cHBvcnQuaW5jIg0KKwkNCitfdlBvcnRTdGFydEZpcnN0VGFzazoNCisJCQ0KKwlwb3J0UkVTVE9SRV9DT05URVhUDQorCQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK192UG9ydFlpZWxkSGFuZGxlcjoNCisNCisJcG9ydFNBVkVfQ09OVEVYVA0KKw0KKwltb3YubAkjX3ZUYXNrU3dpdGNoQ29udGV4dCwgcjANCisJanNyCQlAcjANCisJbm9wDQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisJDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorX3ZQb3J0UHJlZW1wdGl2ZVRpY2sNCisNCisJcG9ydFNBVkVfQ09OVEVYVA0KKwkNCisJbW92LmwJI192VGFza0luY3JlbWVudFRpY2ssIHIwDQorCWpzcgkJQHIwDQorCW5vcA0KKw0KKwltb3YubAkjX3ZUYXNrU3dpdGNoQ29udGV4dCwgcjANCisJanNyCQlAcjANCisJbm9wDQorDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisJDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorX3ZQb3J0Q29vcGVyYXRpdmVUaWNrDQorDQorCXBvcnRTQVZFX0NPTlRFWFQNCisJDQorCW1vdi5sCSNfdlRhc2tJbmNyZW1lbnRUaWNrLCByMA0KKwlqc3IJCUByMA0KKwlub3ANCisNCisJcG9ydFJFU1RPUkVfQ09OVEVYVA0KKwkNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitfdWxQb3J0R2V0R0JSOg0KKw0KKwlzdGMubAlnYnIsIHIwDQorCXJ0cw0KKwlub3ANCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitfdlBvcnRTYXZlRmxvcFJlZ2lzdGVyczoNCisNCisJZm1vdi5zCWZyMCwgQC1yNA0KKwlmbW92LnMJZnIxLCBALXI0DQorCWZtb3YucwlmcjIsIEAtcjQNCisJZm1vdi5zCWZyMywgQC1yNA0KKwlmbW92LnMJZnI0LCBALXI0DQorCWZtb3YucwlmcjUsIEAtcjQNCisJZm1vdi5zCWZyNiwgQC1yNA0KKwlmbW92LnMJZnI3LCBALXI0DQorCWZtb3YucwlmcjgsIEAtcjQNCisJZm1vdi5zCWZyOSwgQC1yNA0KKwlmbW92LnMJZnIxMCwgQC1yNA0KKwlmbW92LnMJZnIxMSwgQC1yNA0KKwlmbW92LnMJZnIxMiwgQC1yNA0KKwlmbW92LnMJZnIxMywgQC1yNA0KKwlmbW92LnMJZnIxNCwgQC1yNA0KKwlmbW92LnMJZnIxNSwgQC1yNAkNCisJc3RzLmwgICBmcHVsLCBALXI0DQorCXN0cy5sICAgZnBzY3IsIEAtcjQNCisJDQorCXJ0cw0KKwlub3ANCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJDQorX3ZQb3J0UmVzdG9yZUZsb3BSZWdpc3RlcnM6DQorDQorCWFkZC5sICAjLTcyLCByNA0KKwlsZHMubCAgQHI0KywgZnBzY3INCisJbGRzLmwgIEByNCssIGZwdWwJDQorCWZtb3YucyBAcjQrLCBmcjE1DQorCWZtb3YucyBAcjQrLCBmcjE0DQorCWZtb3YucyBAcjQrLCBmcjEzDQorCWZtb3YucyBAcjQrLCBmcjEyDQorCWZtb3YucyBAcjQrLCBmcjExDQorCWZtb3YucyBAcjQrLCBmcjEwDQorCWZtb3YucyBAcjQrLCBmcjkNCisJZm1vdi5zIEByNCssIGZyOA0KKwlmbW92LnMgQHI0KywgZnI3DQorCWZtb3YucyBAcjQrLCBmcjYNCisJZm1vdi5zIEByNCssIGZyNQ0KKwlmbW92LnMgQHI0KywgZnI0DQorCWZtb3YucyBAcjQrLCBmcjMNCisJZm1vdi5zIEByNCssIGZyMg0KKwlmbW92LnMgQHI0KywgZnIxDQorCWZtb3YucyBAcjQrLCBmcjANCisJDQorCXJ0cw0KKwlub3ANCisJDQorCS5lbmQNCisJCQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1JlbmVzYXMvU0gyQV9GUFUvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkYTAzMAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTcwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpbmNsdWRlIDxtYWNoaW5lLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXIgdGhhbg0KK3BvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRMT05HDQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJCW5vcCgpDQorI2RlZmluZSBwb3J0U1RBUlRfU0NIRURVTEVSX1RSQVBfTk8JCSggMzIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX1RSQVBfTk8JCQkJKCAzMyApDQorI2RlZmluZSBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQkoIDEgKQ0KKw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQl2UG9ydFlpZWxkKCkNCisNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCQkJaWYoIHggIT0gcGRGQUxTRSApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorDQorLyogDQorICogVGhpcyBmdW5jdGlvbiB0ZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayBpcyBnb2luZyB0byANCisgKiB1c2UgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZSBmbG9hdGluZyBwb2ludCANCisgKiByZWdpc3RlcnMgc2F2ZWQgYXMgcGFydCBvZiBpdHMgY29udGV4dC4gDQorICovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFVzZXNGbG9hdGluZ1BvaW50KCB2b2lkKiB4VGFzayApOw0KKw0KKy8qDQorICogVGhlIGZsb3Agc2F2ZSBhbmQgcmVzdG9yZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gcG9ydGFzbS5zcmMgYW5kIGNhbGxlZCBieQ0KKyAqIHRoZSB0cmFjZSAidGFzayBzd2l0Y2hlZCBpbiIgYW5kICJ0cmFjZSB0YXNrIHN3aXRjaGVkIG91dCIgbWFjcm9zLiANCisgKi8NCit2b2lkIHZQb3J0U2F2ZUZsb3BSZWdpc3RlcnMoIHZvaWQgKnB1bEJ1ZmZlciApOw0KK3ZvaWQgdlBvcnRSZXN0b3JlRmxvcFJlZ2lzdGVycyggdm9pZCAqcHVsQnVmZmVyICk7DQorDQorLyoNCisgKiBweFRhc2tUYWcgaXMgdXNlZCB0byBwb2ludCB0byB0aGUgYnVmZmVyIGludG8gd2hpY2ggdGhlIGZsb2F0aW5nIHBvaW50IA0KKyAqIGNvbnRleHQgc2hvdWxkIGJlIHNhdmVkLiAgSWYgcHhUYXNrVGFnIGlzIE5VTEwgdGhlbiB0aGUgdGFzayBkb2VzIG5vdCB1c2UNCisgKiBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQuDQorICovDQorI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfT1VUKCkgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSB2UG9ydFNhdmVGbG9wUmVnaXN0ZXJzKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApDQorI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKSBpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApIHZQb3J0UmVzdG9yZUZsb3BSZWdpc3RlcnMoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICkNCisNCisvKg0KKyAqIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUgdGFza0VOVEVSX0NSSVRJQ0FMKCkNCisgKiBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuDQorICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJc2V0X2ltYXNrKCAweDAwICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJc2V0X2ltYXNrKCBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApDQorDQorLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQorDQorLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJdlRhc2tFeGl0Q3JpdGljYWwoKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvQVJNNy9yZWFkbWUudHh0IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Jvd2xleS9BUk03L3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvQVJNNy9yZWFkbWUudHh0CkBAIC0wLDAgKzEgQEAKK1RoZSBSb3dsZXkgQVJNNyBkZW1vIHVzZXMgdGhlIEdDQyBBUk03IHBvcnQgZmlsZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnQuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyZGYwMwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0LmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlIHNldHVwLiAgVGhlIHRpY2sgSVNSIHJ1bnMgb2ZmIHRoZSBBQ0xLLCANCitub3QgdGhlIE1DTEsuICovDQorI2RlZmluZSBwb3J0QUNMS19GUkVRVUVOQ1lfSFoJCQkoICggcG9ydFRpY2tUeXBlICkgMzI3NjggKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORwkoICggdW5zaWduZWQgc2hvcnQgKSAxMCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDA4ICkNCisNCisvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyogRWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGguICBFYWNoIA0KK3RpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgDQorY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgdGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIC0gd2l0aCBpbnRlcnJ1cHRzIG9ubHkgDQorYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCisNCit1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KK25vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCitzZXF1ZW5jZS4gKi8NCit2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB1c0NyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoNCisgKiBTZXRzIHVwIHRoZSBwZXJpb2RpYyBJU1IgdXNlZCBmb3IgdGhlIFJUT1MgdGljay4gIFRoaXMgdXNlcyB0aW1lciAwLCBidXQNCisgKiBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkgdXNlZCB0aGUgd2F0Y2hkb2cgdGltZXIgb3IgdGltZXIgMS4NCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKiANCisgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwkJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBjYW4gYmUgaW5jbHVkZWQgaWYgcmVxdWlyZWQuDQorDQorCQkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07IA0KKwkqLw0KKw0KKwkvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZSANCisJZXhlY3V0aW5nIGFuIElTUi4gIFdlIHdhbnQgdGhlIHN0YWNrIHRvIGxvb2sganVzdCBhcyBpZiB0aGlzIGhhcyBoYXBwZW5lZA0KKwlzbyBwbGFjZSBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIG9uIHRoZSBzdGFjayBmaXJzdCAtIGZvbGxvd2VkDQorCWJ5IHRoZSBmbGFncyB3ZSB3YW50IHRoZSB0YXNrIHRvIHVzZSB3aGVuIGl0IHN0YXJ0cyB1cC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0NDQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NTU1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg2NjY2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDc3Nzc7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ODg4ODsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHg5OTk5Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGFhYWE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4YmJiYjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhjY2NjOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweGRkZGQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4ZWVlZTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMTUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIA0KKwlUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyANCisJaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7CQ0KKw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBNU1A0MzAgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQorCWRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogSGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gIFRoaXMgdXNlcyB0aW1lciAwDQorICogYnV0IGNvdWxkIGFsdGVybmF0aXZlbHkgdXNlIHRoZSB3YXRjaGRvZyB0aW1lciBvciB0aW1lciAxLiANCisgKi8NCit2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisJLyogRW5zdXJlIHRoZSB0aW1lciBpcyBzdG9wcGVkLiAqLw0KKwlUQUNUTCA9IDA7DQorDQorCS8qIFJ1biB0aGUgdGltZXIgb2YgdGhlIEFDTEsuICovDQorCVRBQ1RMID0gVEFTU0VMXzE7DQorDQorCS8qIENsZWFyIGV2ZXJ5dGhpbmcgdG8gc3RhcnQgd2l0aC4gKi8NCisJVEFDVEwgfD0gVEFDTFI7DQorDQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KKwlUQUNDUjAgPSBwb3J0QUNMS19GUkVRVUVOQ1lfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorDQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cy4gKi8NCisJVEFDQ1RMMCA9IENDSUU7DQorDQorCS8qIFN0YXJ0IHVwIGNsZWFuLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCisNCisJLyogVXAgbW9kZS4gKi8NCisJVEFDVEwgfD0gTUNfMTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorCQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0YXNtLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydGFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDhiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydGFzbS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRfQVNNX0gNCisjZGVmaW5lIFBPUlRfQVNNX0gNCisNCitwb3J0U0FWRV9DT05URVhUIG1hY3JvDQorICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCQlwdXNoCXI0DQorCQlwdXNoCXI1DQorCQlwdXNoCXI2DQorCQlwdXNoCXI3DQorCQlwdXNoCXI4DQorCQlwdXNoCXI5DQorCQlwdXNoCXIxMA0KKwkJcHVzaAlyMTENCisJCXB1c2gJcjEyDQorCQlwdXNoCXIxMw0KKwkJcHVzaAlyMTQNCisJCXB1c2gJcjE1DQorCQltb3YudwkmX3VzQ3JpdGljYWxOZXN0aW5nLCByMTQNCisJCXB1c2gJcjE0DQorCQltb3YudwkmX3B4Q3VycmVudFRDQiwgcjEyDQorCQltb3YudwlyMSwgQHIxMg0KKwkJZW5kbQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkJDQorcG9ydFJFU1RPUkVfQ09OVEVYVCBtYWNybw0KKwkJbW92LncJJl9weEN1cnJlbnRUQ0IsIHIxMg0KKwkJbW92LncJQHIxMiwgcjENCisJCXBvcAkJcjE1DQorCQltb3YudwlyMTUsICZfdXNDcml0aWNhbE5lc3RpbmcNCisJCXBvcAkJcjE1DQorCQlwb3AJCXIxNA0KKwkJcG9wCQlyMTMNCisJCXBvcAkJcjEyDQorCQlwb3AJCXIxMQ0KKwkJcG9wCQlyMTANCisJCXBvcAkJcjkNCisJCXBvcAkJcjgNCisJCXBvcAkJcjcNCisJCXBvcAkJcjYNCisJCXBvcAkJcjUNCisJCXBvcAkJcjQNCisNCisJCS8qIFRoZSBsYXN0IHRoaW5nIG9uIHRoZSBzdGFjayB3aWxsIGJlIHRoZSBzdGF0dXMgcmVnaXN0ZXIuDQorICAgICAgICAgICAgICAgIEVuc3VyZSB0aGUgcG93ZXIgZG93biBiaXRzIGFyZSBjbGVhciByZWFkeSBmb3IgdGhlIG5leHQNCisgICAgICAgICAgICAgICAgdGltZSB0aGlzIHBvd2VyIGRvd24gcmVnaXN0ZXIgaXMgcG9wcGVkIGZyb20gdGhlIHN0YWNrLiAqLw0KKwkJYmljLncgICAjMHhmMCwwKFNQKQ0KKw0KKwkJcmV0aQ0KKwkJZW5kbQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0ZXh0LmFzbSBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0ZXh0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRkMmMwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRleHQuYXNtCkBAIC0wLDAgKzEsMTQyIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisjaW5jbHVkZSAicG9ydGFzbS5oIg0KKw0KKw0KKy5DT0RFDQorDQorLyoNCisgKiBUaGUgUlRPUyB0aWNrIElTUi4NCisgKg0KKyAqIElmIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgaW4gdXNlIHRoaXMgc2ltcGx5IGluY3JlbWVudHMgdGhlIHRpY2sgDQorICogY291bnQuDQorICoNCisgKiBJZiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgaW4gdXNlIGEgY29udGV4dCBzd2l0Y2ggY2FuIGFsc28gb2NjdXIuDQorICovDQorX3ZUaWNrSVNSOg0KKwkJcG9ydFNBVkVfQ09OVEVYVA0KKwkJCQkNCisJCWNhbGwJI192VGFza0luY3JlbWVudFRpY2sNCisNCisJCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQkJY2FsbAkjX3ZUYXNrU3dpdGNoQ29udGV4dA0KKwkJI2VuZGlmDQorCQkNCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgdGhlIHBvcnRZSUVMRCgpIG1hY3JvLg0KKyAqLyAgICAgICAgICAgICAgICANCitfdlBvcnRZaWVsZDo6DQorDQorCQkvKiBNaW1pYyBhbiBpbnRlcnJ1cHQgYnkgcHVzaGluZyB0aGUgU1IuICovDQorCQlwdXNoCVNSCQkJDQorDQorCQkvKiBOb3cgdGhlIFNSIGlzIHN0YWNrZWQgd2UgY2FuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCisJCWRpbnQJCQkNCisJCQkJDQorCQkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUCQkJDQorDQorCQkvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCWNhbGwJI192VGFza1N3aXRjaENvbnRleHQJCQ0KKw0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCQlwb3J0UkVTVE9SRV9DT05URVhUDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoNCisgKiBTdGFydCBvZmYgdGhlIHNjaGVkdWxlciBieSBpbml0aWFsaXNpbmcgdGhlIFJUT1MgdGljayB0aW1lciwgdGhlbiByZXN0b3JpbmcNCisgKiB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4NCisgKi8NCitfeFBvcnRTdGFydFNjaGVkdWxlcjo6DQorDQorCQkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCANCisJCXdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCQljYWxsCSNfcHJ2U2V0dXBUaW1lckludGVycnVwdA0KKw0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gICAgICAgICAgDQorICAgICAgCQkNCisNCisJCS8qIFBsYWNlIHRoZSB0aWNrIElTUiBpbiB0aGUgY29ycmVjdCB2ZWN0b3IuICovDQorCQkuVkVDVE9SUw0KKwkJDQorCQkuS0VFUA0KKwkJDQorCQlPUkcJCVRJTUVSQTBfVkVDVE9SDQorCQlEVwkJX3ZUaWNrSVNSDQorCQkNCisNCisNCisJCUVORA0KKwkJDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NGNiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0U0hPUlQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfRElOVCgpOyBfTk9QKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfRUlOVCgpOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbCBtYWNyb3MuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCQkoICggdW5zaWduZWQgcG9ydFNIT1JUICkgMCApDQorDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0U0hPUlQgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1c0NyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRTSE9SVCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIHV0aWxpdGllcy4gKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4gIA0KKyAqLw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsgDQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkNCisjZGVmaW5lIHBvcnROT1AoKQkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fdG9wbGV2ZWwNCisNCisjaWYgY29uZmlnSU5URVJSVVBUX0VYQU1QTEVfTUVUSE9EID09IDINCisNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIGlmKCB4ICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisNCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU0RDQy9DeWduYWwvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM3NTMzCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnQuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBDeWduYWwgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisNCisvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGltZXIgMiB0byBwcm9kdWNlIHRoZSBSVE9TIHRpY2suICovDQorI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUgkJCQkoICggdW5zaWduZWQgbG9uZyApIDEyICkNCisjZGVmaW5lIHBvcnRNQVhfVElNRVJfVkFMVUUJCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSAweGZmZmYgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUgkJCQkoICggdW5zaWduZWQgY2hhciApIDB4MDQgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSXzJfSU5URVJSVVBUX0VOQUJMRQkoICggdW5zaWduZWQgY2hhciApIDB4MjAgKQ0KKw0KKy8qIFRoZSB2YWx1ZSB1c2VkIGluIHRoZSBJRSByZWdpc3RlciB3aGVuIGEgdGFzayBmaXJzdCBzdGFydHMuICovDQorI2RlZmluZSBwb3J0R0xPQkFMX0lOVEVSUlVQVF9CSVQJKCAoIHBvcnRTVEFDS19UWVBFICkgMHg4MCApDQorDQorLyogVGhlIHZhbHVlIHVzZWQgaW4gdGhlIFBTVyByZWdpc3RlciB3aGVuIGEgdGFzayBmaXJzdCBzdGFydHMuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMCApDQorDQorLyogTWFjcm8gdG8gY2xlYXIgdGhlIHRpbWVyIDIgaW50ZXJydXB0IGZsYWcuICovDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX0ZMQUcoKQlUTVIyQ04gJj0gfjB4ODA7DQorDQorLyogVXNlZCBkdXJpbmcgYSBjb250ZXh0IHN3aXRjaCB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgYmVpbmcgY29waWVkDQordG8gb3IgZnJvbSBYUkFNLiAqLw0KK2RhdGEgc3RhdGljIHVuc2lnbmVkIGNoYXIgdWNTdGFja0J5dGVzOw0KKw0KKy8qIFVzZWQgZHVyaW5nIGEgY29udGV4dCBzd2l0Y2ggdG8gcG9pbnQgdG8gdGhlIG5leHQgYnl0ZSBpbiBYUkFNIGZyb20vdG8gd2hpY2gNCithIFJBTSBieXRlIGlzIHRvIGJlIGNvcGllZC4gKi8NCit4ZGF0YSBzdGF0aWMgcG9ydFNUQUNLX1RZUEUgKiBkYXRhIHB4WFJBTVN0YWNrOw0KKw0KKy8qIFVzZWQgZHVyaW5nIGEgY29udGV4dCBzd2l0Y2ggdG8gcG9pbnQgdG8gdGhlIG5leHQgYnl0ZSBpbiBSQU0gZnJvbS90byB3aGljaA0KK2FuIFhSQU0gYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovDQorZGF0YSBzdGF0aWMgcG9ydFNUQUNLX1RZUEUgKiBkYXRhIHB4UkFNU3RhY2s7DQorDQorLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KKw0KKy8qDQorICogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIGFuIGludGVycnVwdCBvZmYgdGltZXIgMiBhdCB0aGUgcmVxdWlyZWQgDQorICogZnJlcXVlbmN5Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKg0KKyAqIE1hY3JvIHRoYXQgY29waWVzIHRoZSBjdXJyZW50IHN0YWNrIGZyb20gaW50ZXJuYWwgUkFNIHRvIFhSQU0uICBUaGlzIGlzIA0KKyAqIHJlcXVpcmVkIGFzIHRoZSA4MDUxIG9ubHkgY29udGFpbnMgZW5vdWdoIGludGVybmFsIFJBTSBmb3IgYSBzaW5nbGUgc3RhY2ssIA0KKyAqIGJ1dCB3ZSBoYXZlIGEgc3RhY2sgZm9yIGV2ZXJ5IHRhc2suDQorICovDQorI2RlZmluZSBwb3J0Q09QWV9TVEFDS19UT19YUkFNKCkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIHB4Q3VycmVudFRDQiBwb2ludHMgdG8gYSBUQ0Igd2hpY2ggaXRzZWxmIHBvaW50cyB0byB0aGUgbG9jYXRpb24gaW50bwkJCQkJXA0KKwl3aGljaCB0aGUgZmlyc3QJc3RhY2sgYnl0ZSBzaG91bGQgYmUgY29waWVkLiAgU2V0IHB4WFJBTVN0YWNrIHRvIHBvaW50CQkJCQkJXA0KKwl0byB0aGUgbG9jYXRpb24gaW50byB3aGljaCB0aGUgZmlyc3Qgc3RhY2sgYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovCQkJCQkJCVwNCisJcHhYUkFNU3RhY2sgPSAoIHhkYXRhIHBvcnRTVEFDS19UWVBFICogKSAqKCAoIHhkYXRhIHBvcnRTVEFDS19UWVBFICoqICkgcHhDdXJyZW50VENCICk7CQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgcHhSQU1TdGFjayB0byBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSB0byBiZSBjb3BlZCBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCVwNCisJcHhSQU1TdGFjayA9ICggZGF0YSBwb3J0U1RBQ0tfVFlQRSAqIGRhdGEgKSBjb25maWdTVEFDS19TVEFSVDsJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgd2UgYXJlIGFib3V0IHRvIGNvcHkgZnJvbSB0aGUgY3VycmVudAkJCQkJXA0KKwlzdGFjayBwb2ludGVyIHZhbHVlLiAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJdWNTdGFja0J5dGVzID0gU1AgLSAoIGNvbmZpZ1NUQUNLX1NUQVJUIC0gMSApOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEJlZm9yZSBzdGFydGluZyB0byBjb3B5IHRoZSBzdGFjaywgc3RvcmUgdGhlIGNhbGN1bGF0ZWQgc3RhY2sgc2l6ZSBzbwkJCQkJXA0KKwl0aGUgc3RhY2sgY2FuIGJlIHJlc3RvcmVkIHdoZW4gdGhlIHRhc2sgaXMgcmVzdW1lZC4gKi8JCQkJCQkJCQkJXA0KKwkqcHhYUkFNU3RhY2sgPSB1Y1N0YWNrQnl0ZXM7CQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIENvcHkgZWFjaCBzdGFjayBieXRlIGluIHR1cm4uICBweFhSQU1TdGFjayBpcyBpbmNyZW1lbnRlZCBmaXJzdCBhcyB3ZQkJCQkJXA0KKwloYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBzdGFjayBzaXplIGludG8gWFJBTS4gKi8JCQkJCQkJCQkJCVwNCisJd2hpbGUoIHVjU3RhY2tCeXRlcyApCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlweFhSQU1TdGFjaysrOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkqcHhYUkFNU3RhY2sgPSAqcHhSQU1TdGFjazsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHhSQU1TdGFjaysrOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQl1Y1N0YWNrQnl0ZXMtLTsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFjcm8gdGhhdCBjb3BpZXMgdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGJlaW5nIHJlc3VtZWQgZnJvbSBYUkFNIGludG8gDQorICogaW50ZXJuYWwgUkFNLg0KKyAqLw0KKyNkZWZpbmUgcG9ydENPUFlfWFJBTV9UT19TVEFDSygpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXR1cCB0aGUgcG9pbnRlcnMgYXMgcGVyIHBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKSwgYnV0IHRoaXMgdGltZSB0bwkJCQkJCVwNCisJY29weSB0aGUgZGF0YSBiYWNrIG91dCBvZiBYUkFNIGFuZCBpbnRvIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJXA0KKwlweFhSQU1TdGFjayA9ICggeGRhdGEgcG9ydFNUQUNLX1RZUEUgKiApICooICggeGRhdGEgcG9ydFNUQUNLX1RZUEUgKiogKSBweEN1cnJlbnRUQ0IgKTsJCVwNCisJcHhSQU1TdGFjayA9ICggZGF0YSBwb3J0U1RBQ0tfVFlQRSAqIGRhdGEgKSAoIGNvbmZpZ1NUQUNLX1NUQVJUIC0gMSApOwkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFRoZSBmaXJzdCB2YWx1ZSBzdG9yZWQgaW4gWFJBTSB3YXMgdGhlIHNpemUgb2YgdGhlIHN0YWNrIC0gaS5lLiB0aGUJCQkJCQlcDQorCW51bWJlciBvZiBieXRlcyB3ZSBuZWVkIHRvIGNvcHkgYmFjay4gKi8JCQkJCQkJCQkJCQkJXA0KKwl1Y1N0YWNrQnl0ZXMgPSBweFhSQU1TdGFja1sgMCBdOwkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIENvcHkgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBiYWNrIGludG8gdGhlIHN0YWNrLiAqLwkJCQkJCQkJXA0KKwlkbwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlweFhSQU1TdGFjaysrOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlweFJBTVN0YWNrKys7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSpweFJBTVN0YWNrID0gKnB4WFJBTVN0YWNrOwkJCQkJCQkJCQkJCQkJCQlcDQorCQl1Y1N0YWNrQnl0ZXMtLTsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9IHdoaWxlKCB1Y1N0YWNrQnl0ZXMgKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgcmVhZHkgdG8gdXNlIHRoZSByZXN0b3JlZCBzdGFjay4gKi8JCQkJCQkJXA0KKwlTUCA9ICggdW5zaWduZWQgY2hhciApIHB4UkFNU3RhY2s7CQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFjcm8gdG8gcHVzaCB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCBvbnRvIHRoZSBzdGFjaywgYmVmb3JlIHRoZSBzdGFjayANCisgKiBpcyBtb3ZlZCB0byBYUkFNLiANCisgKi8NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFB1c2ggQUNDIGZpcnN0LCBhcyB3aGVuIHJlc3RvcmluZyB0aGUgY29udGV4dCBpdCBtdXN0IGJlIHJlc3RvcmVkCQkJCQlcDQorCQlsYXN0IChpdCBpcyB1c2VkIHRvIHNldCB0aGUgSUUgcmVnaXN0ZXIpLiAqLwkJCQkJCQkJCQkJXA0KKwkJcHVzaAlBQ0MJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFN0b3JlIHRoZSBJRSByZWdpc3RlciB0aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8JCQkJCQkJCQlcDQorCQlwdXNoCUlFCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQljbHIJCV9FQQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlEUEwJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJRFBICQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXIyCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyMwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlhcjQJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXI1CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyNgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlhcjcJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyMQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlQU1cJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2VuZGFzbTsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlQU1cgPSAwOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJX2JwCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc207CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hY3JvIHRoYXQgcmVzdG9yZXMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZyb20gdGhlIHN0YWNrLiAgVGhlIGV4ZWN1dGlvbiANCisgKiBjb250ZXh0IHdhcyBzYXZlZCBpbnRvIHRoZSBzdGFjayBiZWZvcmUgdGhlIHN0YWNrIHdhcyBjb3BpZWQgaW50byBYUkFNLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCV9icAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlQU1cJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXIxCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyMAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlhcjcJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXI2CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyNQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlhcjQJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXIzCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyMgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQliCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCURQSAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlEUEwJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFRoZSBuZXh0IGJ5dGUgb2YgdGhlIHN0YWNrIGlzIHRoZSBJRSByZWdpc3Rlci4gIE9ubHkgdGhlIGdsb2JhbAkJCQkJCVwNCisJCWVuYWJsZSBiaXQgZm9ybXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgUG9wIG9mZiB0aGUgSUUgdGhlbiBzZXQJCQkJCQlcDQorCQl0aGUgZ2xvYmFsIGVuYWJsZSBiaXQgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgc3RvcmVkIElFIHJlZ2lzdGVyLiAqLwkJCQkJCVwNCisJCXBvcAkJQUNDCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlKQgkJQUNDLjcsMDA5OCQJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlDTFIJCUlFLjcJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJTEpNUAkwMDk5JAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCTAwOTgkOgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlTRVRCCUlFLjcJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkwMDk5JDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRmluYWxseSBwb3Agb2ZmIHRoZSBBQ0MsIHdoaWNoIHdhcyB0aGUgZmlyc3QgcmVnaXN0ZXIgc2F2ZWQuICovCQkJCQkJXA0KKwkJcG9wCQlBQ0MJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXJldGkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc207CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3Vuc2lnbmVkIGxvbmcgdWxBZGRyZXNzOw0KK3BvcnRTVEFDS19UWVBFICpweFN0YXJ0T2ZTdGFjazsNCisNCisJLyogTGVhdmUgc3BhY2UgdG8gd3JpdGUgdGhlIHNpemUgb2YgdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCBieXRlLiAqLw0KKwlweFN0YXJ0T2ZTdGFjayA9IHB4VG9wT2ZTdGFjazsNCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIHVuY29tbWVudGVkIGlmIHJlcXVpcmVkLg0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqLw0KKw0KKwkvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHRoZSBzY2hlZHVsZXIgdGljayANCisJSVNSLiANCisNCisJVGhlIHJldHVybiBhZGRyZXNzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHB1c2hlZCBieSB0aGUgTUNVLiAqLw0KKwl1bEFkZHJlc3MgPSAoIHVuc2lnbmVkIGxvbmcgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdWxBZGRyZXNzOw0KKwl1bEFkZHJlc3MgPj49IDg7DQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggdWxBZGRyZXNzICk7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkvKiBOZXh0IGFsbCB0aGUgcmVnaXN0ZXJzIHdpbGwgaGF2ZSBiZWVuIHB1c2hlZCBieSBwb3J0U0FWRV9DT05URVhUKCkuICovDQorCSpweFRvcE9mU3RhY2sgPSAweGFhOwkvKiBhY2MgKi8NCisJcHhUb3BPZlN0YWNrKys7CQ0KKw0KKwkvKiBXZSB3YW50IHRhc2tzIHRvIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydEdMT0JBTF9JTlRFUlJVUFRfQklUOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJLyogVGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgaW4gdGhlIERQVFIgYW5kIEIgcmVnaXN0ZXIgYXMNCisJYSB0aHJlZSBieXRlIGdlbmVyaWMgcG9pbnRlciBpcyB1c2VkLiAqLw0KKwl1bEFkZHJlc3MgPSAoIHVuc2lnbmVkIGxvbmcgKSBwdlBhcmFtZXRlcnM7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdWxBZGRyZXNzOwkvKiBEUEwgKi8NCisJdWxBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgdWxBZGRyZXNzOwkvKiBEUEggKi8NCisJdWxBZGRyZXNzID4+PSA4Ow0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSB1bEFkZHJlc3M7CS8qIGIgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFyZSBzdHJhaWdodCBmb3J3YXJkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7CS8qIFBTVyAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4YmI7CS8qIEJQICovDQorDQorCS8qIERvbnQgaW5jcmVtZW50IHRoZSBzdGFjayBzaXplIGhlcmUgYXMgd2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlDQorCXRoZSBzdGFjayBzaXplIGJ5dGUgYXMgcGFydCBvZiB0aGUgc3RhY2sgc2l6ZSBjb3VudC4NCisNCisJRmluYWxseSB3ZSBwbGFjZSB0aGUgc3RhY2sgc2l6ZSBhdCB0aGUgYmVnaW5uaW5nLiAqLw0KKwkqcHhTdGFydE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCBweFRvcE9mU3RhY2sgLSBweFN0YXJ0T2ZTdGFjayApOw0KKw0KKwkvKiBVbmxpa2UgbW9zdCBwb3J0cywgd2UgcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgc3RhY2sgYXMgdGhpcyBpcyB3aGVyZSB0aGUNCisJc2l6ZSBvZiB0aGUgc3RhY2sgaXMgc3RvcmVkLiAqLw0KKwlyZXR1cm4gcHhTdGFydE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KKyAqLw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTZXR1cCB0aW1lciAyIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsJDQorDQorCS8qIE1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIHRoZSBleHBlY3RlZCBTRlIgcGFnZS4gIFRoaXMgbGluZSBzaG91bGQgbm90DQorCXJlYWxseSBiZSByZXF1aXJlZC4gKi8NCisJU0ZSUEFHRSA9IDA7DQorDQorCS8qIENvcHkgdGhlIHN0YWNrIGZvciB0aGUgZmlyc3QgdGFzayB0byBleGVjdXRlIGZyb20gWFJBTSBpbnRvIHRoZSBzdGFjaywNCisJcmVzdG9yZSB0aGUgdGFzayBjb250ZXh0IGZyb20gdGhlIG5ldyBzdGFjaywgdGhlbiBzdGFydCBydW5uaW5nIHRoZSB0YXNrLiAqLw0KKwlwb3J0Q09QWV9YUkFNX1RPX1NUQUNLKCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlISAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwb3J0LiAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSByZWdpc3RlcnMgc28gd2UNCisgKiBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlLg0KKyAqLw0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApIF9uYWtlZA0KK3sNCisJLyogU2F2ZSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb250byB0aGUgc3RhY2ssIHRoZW4gY29weSB0aGUgZW50aXJlIHN0YWNrDQorCXRvIFhSQU0uICBUaGlzIGlzIG5lY2Vzc2FyeSBhcyB0aGUgaW50ZXJuYWwgUkFNIGlzIG9ubHkgbGFyZ2UgZW5vdWdoIHRvDQorCWhvbGQgb25lIHN0YWNrLCBhbmQgd2Ugd2FudCBvbmUgcGVyIHRhc2suIA0KKwkNCisJUEVSRk9STUFOQ0UgQ09VTEQgQkUgSU1QUk9WRUQgQlkgT05MWSBDT1BZSU5HIFRPIFhSQU0gSUYgQSBUQVNLIFNXSVRDSA0KKwlJUyBSRVFVSVJFRC4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwlwb3J0Q09QWV9TVEFDS19UT19YUkFNKCk7DQorDQorCS8qIENhbGwgdGhlIHN0YW5kYXJkIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbi4gKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCS8qIENvcHkgdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGFib3V0IHRvIGV4ZWN1dGUgZnJvbSBYUkFNIGludG8gUkFNIGFuZA0KKwlyZXN0b3JlIGl0J3MgY29udGV4dCByZWFkeSB0byBydW4gb24gZXhpdGluZy4gKi8NCisJcG9ydENPUFlfWFJBTV9UT19TVEFDSygpOw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXZvaWQgdlRpbWVyMklTUiggdm9pZCApIGludGVycnVwdCA1IF9uYWtlZA0KKwl7DQorCQkvKiBQcmVlbXB0aXZlIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgdGltZXIgMiBJU1IuDQorCQlUaGlzIGRvZXMgdGhlIHNhbWUgYXMgdlBvcnRZaWVsZCgpIChzZWUgYWJvdmUpIHdpdGggdGhlIGFkZGl0aW9uDQorCQlvZiBpbmNyZW1lbnRpbmcgdGhlIFJUT1MgdGljayBjb3VudC4gKi8NCisNCisJCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJCXBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKTsNCisNCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQkNCisJCXBvcnRDTEVBUl9JTlRFUlJVUFRfRkxBRygpOw0KKwkJcG9ydENPUFlfWFJBTV9UT19TVEFDSygpOw0KKwkJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwl9DQorI2Vsc2UNCisJdm9pZCB2VGltZXIySVNSKCB2b2lkICkgaW50ZXJydXB0IDUNCisJew0KKwkJLyogV2hlbiB1c2luZyB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHRoZSB0aW1lciAyIElTUiBpcyBvbmx5IA0KKwkJcmVxdWlyZWQgdG8gaW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQuICovDQorDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBvcnRDTEVBUl9JTlRFUlJVUFRfRkxBRygpOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorew0KK3Vuc2lnbmVkIGNoYXIgdWNPcmlnaW5hbFNGUlBhZ2U7DQorDQorLyogQ29uc3RhbnRzIGNhbGN1bGF0ZWQgdG8gZ2l2ZSB0aGUgcmVxdWlyZWQgdGltZXIgY2FwdHVyZSB2YWx1ZXMuICovDQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFRpY2tzUGVyU2Vjb25kID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1I7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bENhcHR1cmVUaW1lID0gdWxUaWNrc1BlclNlY29uZCAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsQ2FwdHVyZVZhbHVlID0gcG9ydE1BWF9USU1FUl9WQUxVRSAtIHVsQ2FwdHVyZVRpbWU7DQorY29uc3QgdW5zaWduZWQgY2hhciB1Y0xvd0NhcHR1cmVCeXRlID0gKCB1bnNpZ25lZCBjaGFyICkgKCB1bENhcHR1cmVWYWx1ZSAmICggdW5zaWduZWQgbG9uZyApIDB4ZmYgKTsNCitjb25zdCB1bnNpZ25lZCBjaGFyIHVjSGlnaENhcHR1cmVCeXRlID0gKCB1bnNpZ25lZCBjaGFyICkgKCB1bENhcHR1cmVWYWx1ZSA+PiAoIHVuc2lnbmVkIGxvbmcgKSA4ICk7DQorDQorCS8qIE5PVEU6ICBUaGlzIHVzZXMgYSB0aW1lciBvbmx5IHByZXNlbnQgb24gODA1MiBhcmNoaXRlY3R1cmUuICovDQorDQorCS8qIFJlbWVtYmVyIHRoZSBjdXJyZW50IFNGUiBwYWdlIHNvIHdlIGNhbiByZXN0b3JlIGl0IGF0IHRoZSBlbmQgb2YgdGhlDQorCWZ1bmN0aW9uLiAqLw0KKwl1Y09yaWdpbmFsU0ZSUGFnZSA9IFNGUlBBR0U7DQorCVNGUlBBR0UgPSAwOw0KKw0KKwkvKiBUTVIyQ0YgY2FuIGJlIGxlZnQgaW4gaXRzIGRlZmF1bHQgc3RhdGUuICovCQ0KKwlUTVIyQ0YgPSAoIHVuc2lnbmVkIGNoYXIgKSAwOw0KKw0KKwkvKiBTZXR1cCB0aGUgb3ZlcmZsb3cgcmVsb2FkIHZhbHVlLiAqLw0KKwlSQ0FQMkwgPSB1Y0xvd0NhcHR1cmVCeXRlOw0KKwlSQ0FQMkggPSB1Y0hpZ2hDYXB0dXJlQnl0ZTsNCisNCisJLyogVGhlIGluaXRpYWwgbG9hZCBpcyBwZXJmb3JtZWQgbWFudWFsbHkuICovDQorCVRNUjJMID0gdWNMb3dDYXB0dXJlQnl0ZTsNCisJVE1SMkggPSB1Y0hpZ2hDYXB0dXJlQnl0ZTsNCisNCisJLyogRW5hYmxlIHRoZSB0aW1lciAyIGludGVycnVwdHMuICovDQorCUlFIHw9IHBvcnRUSU1FUl8yX0lOVEVSUlVQVF9FTkFCTEU7DQorDQorCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBpcyBjYWxsZWQgc28gdGhlIHRpbWVyIGNhbiBiZSBzdGFydGVkDQorCWhlcmUuICovDQorCVRNUjJDTiA9IHBvcnRFTkFCTEVfVElNRVI7DQorDQorCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFNGUiBwYWdlLiAqLw0KKwlTRlJQQUdFID0gdWNPcmlnaW5hbFNGUlBhZ2U7DQorfQ0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9TRENDL0N5Z25hbC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9TRENDL0N5Z25hbC9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWRmMjQwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTUwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQorCXZvaWQgdlRpbWVyMklTUiggdm9pZCApIGludGVycnVwdCA1Ow0KKyNlbHNlDQorCXZvaWQgdlRpbWVyMklTUiggdm9pZCApIGludGVycnVwdCA1IF9uYWtlZDsNCisjZW5kaWYNCisNCit2b2lkIHZTZXJpYWxJU1IoIHZvaWQgKSBpbnRlcnJ1cHQgNDsNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gIA0KKyAqDQorICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCisgKiBnaXZlbiBoYXJkd2FyZSBhbmQgY29tcGlsZXIuDQorICoNCisgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKy8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZmxvYXQNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0Q0hBUg0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQlfYXNtCQlcDQorCQkJCQkJCQkJcHVzaAlBQ0MJXA0KKwkJCQkJCQkJCXB1c2gJSUUJXA0KKwkJCQkJCQkJCV9lbmRhc207CVwNCisJCQkJCQkJCQlFQSA9IDA7DQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJX2FzbQkJCVwNCisJCQkJCQkJCQlwb3AJCUFDQwkJXA0KKwkJCQkJCQkJCV9lbmRhc207CQlcDQorCQkJCQkJCQkJQUNDICY9IDB4ODA7CVwNCisJCQkJCQkJCQlJRSB8PSBBQ0M7CQlcDQorCQkJCQkJCQkJX2FzbQkJCVwNCisJCQkJCQkJCQlwb3AJCUFDQwkJXA0KKwkJCQkJCQkJCV9lbmRhc207DQorDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJRUEgPSAwOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCUVBID0gMTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHVuc2lnbmVkIHBvcnRMT05HICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogVGFzayB1dGlsaXRpZXMuICovDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX25ha2VkOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJdlBvcnRZaWVsZCgpOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisjZGVmaW5lIHBvcnROT1AoKQkJCQlfYXNtCVwNCisJCQkJCQkJCQlub3AgXA0KKwkJCQkJCQkJX2VuZGFzbTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvX19TVERfTElCX3NicmsuYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvX19TVERfTElCX3NicmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTcwZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9fX1NURF9MSUJfc2Jyay5jCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisJc3RhdGljICBsb25nICAgICAgICAgYnJrX3NpeiAgPSAgMDsNCisvLwkjaWYgIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSAhPSAwDQorCXR5cGVkZWYgaW50ICAgICAgICAgIF9oZWVwX3Q7DQorCSNkZWZpbmUgUk9VTkRVUChzKSAgICgoKHMpK3NpemVvZihfaGVlcF90KS0xKSZ+KHNpemVvZihfaGVlcF90KS0xKSkNCisJc3RhdGljICBfaGVlcF90ICAgICAgX2hlZXBbUk9VTkRVUChjb25maWdUT1RBTF9IRUFQX1NJWkUpL3NpemVvZihfaGVlcF90KV07DQorCSNkZWZpbmUgICAgICAgICAgICAgIF9oZWVwX3NpemUgICAgICBST1VORFVQKGNvbmZpZ1RPVEFMX0hFQVBfU0laRSkNCisvKgkjZWxzZQ0KKwlleHRlcm4gIGNoYXIgICAgICAgICpfaGVlcDsNCisJZXh0ZXJuICBsb25nICAgICAgICBfaGVlcF9zaXplOw0KKwkjZW5kaWYNCisqLwkNCisJZXh0ZXJuICBjaGFyICAqc2JyayhpbnQgIHNpemUpDQorCXsNCisJICAgaWYgIChicmtfc2l6ICArICBzaXplICA+ICBfaGVlcF9zaXplICB8fCAgYnJrX3NpeiAgKyAgc2l6ZSAgPCAgMCkNCisNCisgICAgICAgICAgcmV0dXJuKChjaGFyKiktMSk7DQorCSAgIGJya19zaXogICs9ICBzaXplOw0KKwkgICByZXR1cm4oICAoY2hhciopX2hlZXAgICsgIGJya19zaXogIC0gIHNpemUpOw0KKwl9DQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBkMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0LmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorI2luY2x1ZGUgIm1iOTE0NjdkLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyANCisjcHJhZ21hIGFzbQ0KKyNtYWNybyAgU2F2ZUNvbnRleHQNCisJIE9SQ0NSICMweDIwCQkJCQkJCQk7U3dpdGNoIHRvIHVzZXIgc3RhY2sNCisJIFNUIFJQLEAtUjE1CQkJCQkJCQk7U3RvcmUgUlANCisJIFNUTTAgKFI3LFI2LFI1LFI0LFIzLFIyLFIxLFIwKQkJCQk7U3RvcmUgUjctUjANCisJIFNUTTEgKFIxNCxSMTMsUjEyLFIxMSxSMTAsUjksUjgpCQkJO1N0b3JlIFIxNC1SOA0KKwkgU1QgTURILCBALVIxNQkJCQkJCQkJO1N0b3JlIE1ESA0KKwkgU1QgTURMLCBALVIxNQkJCQkJCQkJO1N0b3JlIE1ETA0KKwkgDQorCSBBTkRDQ1IgIzB4REYJCQkJCQkJCTtTd2l0Y2ggYmFjayB0byBzeXN0ZW0gc3RhY2sNCisJIExEIEBSMTUrLFIwCQkJCQkJCQk7U3RvcmUgUEMgdG8gUjAgDQorCSBPUkNDUiAjMHgyMAkJCQkJCQkJO1N3aXRjaCB0byB1c2VyIHN0YWNrDQorCSBTVCBSMCxALVIxNQkJCQkJCQkJO1N0b3JlIFBDIHRvIFVzZXIgc3RhY2sNCisJIA0KKwkgQU5EQ0NSICMweERGCQkJCQkJCQk7U3dpdGNoIGJhY2sgdG8gc3lzdGVtIHN0YWNrDQorCSBMRCBAUjE1KyxSMAkJCQkJCQkJO1N0b3JlIFBTIHRvIFIwDQorCSBPUkNDUiAjMHgyMAkJCQkJCQkJO1N3aXRjaCB0byB1c2VyIHN0YWNrDQorCSBTVCBSMCxALVIxNQkJCQkJCQkJO1N0b3JlIFBTIHRvIFVzZXIgc3RhY2sNCisJIA0KKwkgTERJICNfcHhDdXJyZW50VENCLCBSMAkJCQkJCTtHZXQgcHhDdXJyZW50VENCIGFkZHJlc3MNCisJIExEIEBSMCwgUjAJCQkJCQkJCQk7R2V0IHRoZSBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayBhZGRyZXNzDQorCSBTVCBSMTUsQFIwCQkJCQkJCQkJO1N0b3JlIFVTUCB0byBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjaw0KKwkgDQorCSBBTkRDQ1IgIzB4REYJCQkJCQkJCTtTd2l0Y2ggYmFjayB0byBzeXN0ZW0gc3RhY2sgZm9yIHRoZSByZXN0IG9mIHRpY2sgSVNSDQorI2VuZG0NCisNCisjbWFjcm8gUmVzdG9yZUNvbnRleHQNCisJIExESSAjX3B4Q3VycmVudFRDQiwgUjAJCQkJCQk7R2V0IHB4Q3VycmVudFRDQiBhZGRyZXNzDQorCSBMRCBAUjAsIFIwCQkJCQkJCQkJO0dldCB0aGUgcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgYWRkcmVzcw0KKwkgT1JDQ1IgIzB4MjAJCQkJCQkJCTtTd2l0Y2ggdG8gdXNlciBzdGFjaw0KKwkgTEQgQFIwLCBSMTUJCQkJCQkJCTtSZXN0b3JlIFVTUCBmcm9tIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrDQorDQorCSBMRCBAUjE1KyxSMAkJCQkJCQkJO1N0b3JlIFBTIHRvIFIwDQorCSBBTkRDQ1IgIzB4REYJCQkJCQkJCTtTd2l0Y2ggdG8gc3lzdGVtIHN0YWNrDQorCSBTVCBSMCxALVIxNQkJCQkJCQkJO1N0b3JlIFBTIHRvIHN5c3RlbSBzdGFjaw0KKw0KKwkgT1JDQ1IgIzB4MjAJCQkJCQkJCTtTd2l0Y2ggdG8gdXNlciBzdGFjaw0KKwkgTEQgQFIxNSssUjAJCQkJCQkJCTtTdG9yZSBQQyB0byBSMA0KKwkgQU5EQ0NSICMweERGCQkJCQkJCQk7U3dpdGNoIHRvIHN5c3RlbSBzdGFjaw0KKwkgU1QgUjAsQC1SMTUJCQkJCQkJCTtTdG9yZSBQQyB0byBzeXN0ZW0gc3RhY2sNCisNCisJIE9SQ0NSICMweDIwCQkJCQkJCQk7U3dpdGNoIGJhY2sgdG8gcmV0cmlldmUgdGhlIHJlbWFpbmluZyBjb250ZXh0DQorDQorCSBMRCBAUjE1KywgTURMCQkJCQkJCQk7UmVzdG9yZSBNREwNCisJIExEIEBSMTUrLCBNREgJCQkJCQkJCTtSZXN0b3JlIE1ESA0KKwkgTERNMSAoUjE0LFIxMyxSMTIsUjExLFIxMCxSOSxSOCkJCQk7UmVzdG9yZSBSMTQtUjgNCisJIExETTAgKFI3LFI2LFI1LFI0LFIzLFIyLFIxLFIwKQkJCQk7UmVzdG9yZSBSNy1SMA0KKwkgTEQgQFIxNSssIFJQCQkJCQkJCQk7UmVzdG9yZSBSUA0KKwkgDQorCSBBTkRDQ1IgIzB4REYJCQkJCQkJCTtTd2l0Y2ggYmFjayB0byBzeXN0ZW0gc3RhY2sgZm9yIHRoZSByZXN0IG9mIHRpY2sgSVNSDQorI2VuZG0NCisjcHJhZ21hIGVuZGFzbQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogUGVyZm9ybSBoYXJkd2FyZSBzZXR1cCB0byBlbmFibGUgdGlja3MgZnJvbSB0aW1lciAxLA0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCisgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCisgKiANCisgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQorICovDQorcG9ydFNUQUNLX1RZUEUgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggcG9ydFNUQUNLX1RZUEUgKnB4VG9wT2ZTdGFjaywgcGRUQVNLX0NPREUgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGlzIGlzIGEgcmVkdW5kYW50IHB1c2ggdG8gdGhlIHN0YWNrLCBpdCBtYXkgYmUgcmVxdWlyZWQgaWYgDQorCWluIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBjb21waWxlciB0aGUgcGFyYW1ldGVyIHRvIHRoZSB0YXNrIA0KKwlpcyBwYXNzZWQgb24gdG8gdGhlIHN0YWNrIHJhdGhlciB0aGFuIGluIFI0IHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKHBvcnRTVEFDS19UWVBFKShwdlBhcmFtZXRlcnMpOw0KKwlweFRvcE9mU3RhY2stLTsgICAgICAgICAgICAgICAgICANCisgICAgDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwMDAwMDsJLyogUlAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwNzc3NzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwNjY2NjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwNTU1NTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcGlsZXIgdGhlIGZpcnN0IA0KKwlwYXJhbWV0ZXIgdG8gdGhlIHRhc2sgKG9yIGZ1bmN0aW9uKSBpcyBwYXNzZWQgdmlhIFI0IHBhcmFtZXRlciANCisJdG8gdGhlIHRhc2ssIGhlbmNlIHRoZSBwdlBhcmFtZXRlcnMgcG9pbnRlciBpcyBjb3BpZWQgaW50byB0aGUgUjQgDQorCXJlZ2lzdGVyLiBTZWUgY29tcGlsZXIgbWFudWFsIHNlY3Rpb24gNC42LjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKHB2UGFyYW1ldGVycyk7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDMzMzM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDIyMjI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDExMTE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDAwMDE7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwMDBFRUVFOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwRERERDsJLyogUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMENDQ0M7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAwMDBCQkJCOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDAwQUFBQTsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDk5OTk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDAwMDg4ODg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTEwMDAwOwkvKiBNREggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjIyMDAwMDsJLyogTURMICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBweENvZGU7CS8qIFBDICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkgDQorICAgIC8qIFBTIC0gVXNlciBNb2RlLCBVU1AsIElMTT0zMSwgSW50ZXJydXB0cyBlbmFibGVkICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHgwMDFGMDAzMDsJLyogUFMgKi8NCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwkjcHJhZ21hIGFzbQ0KKwkJUmVzdG9yZUNvbnRleHQNCisJI3ByYWdtYSBlbmRhc20NCisNCisJLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cNCisJanVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLwkNCisJX19hc20oIiByZXRpICIpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRGQUlMOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCAtIHVubGlrZWx5IHRvIGV2ZXIgYmUgcmVxdWlyZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0bw0KKwlyZXR1cm4gdG8uICovDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisvKiBUaGUgcGVyaXBoZXJhbCBjbG9jayBkaXZpZGVkIGJ5IDMyIGlzIHVzZWQgYnkgdGhlIHRpbWVyLiAqLw0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzUmVsb2FkVmFsdWUgPSAoIHVuc2lnbmVkIHNob3J0ICkgKCAoICggY29uZmlnUEVSX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLyAzMlVMICkgLSAxVUwgKTsNCisNCisJLyogU2V0dXAgUkxUMCB0byBnZW5lcmF0ZSBhIHRpY2sgaW50ZXJydXB0LiAqLw0KKw0KKwlUTUNTUjBfQ05URSA9IDA7CQkvKiBDb3VudCBEaXNhYmxlICovDQorICAgIFRNQ1NSMF9DU0wgPSAweDI7CQkvKiBDTEtQLzMyICovDQorICAgIFRNQ1NSMF9NT0QgPSAwOwkJCS8qIFNvZnR3YXJlIHRyaWdnZXIgKi8NCisgICAgVE1DU1IwX1JFTEQgPSAxOwkJLyogUmVsb2FkICovDQorICAgIA0KKyAgICBUTUNTUjBfVUYgPSAwOwkJCS8qIENsZWFyIHVuZGVyZmxvdyBmbGFnICovDQorCVRNUkxSMCA9IHVzUmVsb2FkVmFsdWU7DQorCVRNQ1NSMF9JTlRFID0gMTsJCS8qIEludGVycnVwdCBFbmFibGUgKi8NCisJVE1DU1IwX0NOVEUgPSAxOwkJLyogQ291bnQgRW5hYmxlICovDQorCVRNQ1NSMF9UUkcgPSAxOwkJCS8qIFRyaWdnZXIgKi8NCisJDQorICAgIFBPUlRFTiA9IDB4MzsJCQkvKiBQb3J0IEVuYWJsZSAqLw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKw0KKwkvKiANCisJICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiBUaGUgdGljayBjb3VudCBpcyBpbmNyZW1lbnRlZCANCisJICogYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuIFRoZW4gdGhlIGNvbnRleHQgaXMgc3dpdGNoZWQgaWYgcmVxdWlyZWQsDQorCSAqIGFuZCBsYXN0IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHdoaWNoIGlzIHRvIGJlIHJlc3VtZWQgaXMgcmVzdG9yZWQuDQorCSAqLw0KKw0KKwkjcHJhZ21hIGFzbQ0KKw0KKwkuZ2xvYmFsIF9SZWxvYWRUaW1lcjBfSVJRSGFuZGxlcg0KKwlfUmVsb2FkVGltZXIwX0lSUUhhbmRsZXI6DQorDQorCUFORENDUiAjMHhFRgkJCQkJCQk7RGlzYWJsZSBJbnRlcnJ1cHRzDQorCVNhdmVDb250ZXh0CQkJCQkJCQk7U2F2ZSBjb250ZXh0DQorCU9SQ0NSICMweDEwCQkJCQkJCQk7UmUtZW5hYmxlIEludGVycnVwdHMNCisNCisJTERJICMweEZGRkIsUjENCisJTERJICNfdG1jc3IwLCBSMA0KKwlBTkQgUjEsQFIwCQkJCQkJCQk7Q2xlYXIgUkxUMCBpbnRlcnJ1cHQgZmxhZw0KKw0KKwlDQUxMMzIJIF92VGFza0luY3JlbWVudFRpY2ssUjEyCQk7SW5jcmVtZW50IFRpY2sNCisJQ0FMTDMyCSBfdlRhc2tTd2l0Y2hDb250ZXh0LFIxMgkJO1N3aXRjaCBjb250ZXh0IGlmIHJlcXVpcmVkDQorDQorCUFORENDUiAjMHhFRgkJCQkJCQk7RGlzYWJsZSBJbnRlcnJ1cHRzDQorCVJlc3RvcmVDb250ZXh0CQkJCQkJCTtSZXN0b3JlIGNvbnRleHQNCisJT1JDQ1IgIzB4MTAJCQkJCQkJCTtSZS1lbmFibGUgSW50ZXJydXB0cw0KKw0KKwlSRVRJDQorDQorCSNwcmFnbWEgZW5kYXNtDQorCQ0KKyNlbHNlDQorCQ0KKwkvKiANCisJICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuICBBbGwgdGhpcyBkb2VzIGlzIGluY3JlbWVudCB0aGUNCisJICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KKwkgKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7DQorCSAqLw0KKwlfX2ludGVycnVwdCB2b2lkIFJlbG9hZFRpbWVyMF9JUlFIYW5kbGVyKCB2b2lkICkNCisJew0KKwkJLyogQ2xlYXIgUkxUMCBpbnRlcnJ1cHQgZmxhZyAqLw0KKwkJVE1DU1IwX1VGID0gMDsgDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKw0KKyNlbmRpZg0KKw0KKy8qDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlICBhcyB0aGUgY29udGV4dCANCisgKiB3b3VsZCBiZSBzYXZlZCBieSBQb3J0U0FWRV9DT05URVhUKCkuICBUaGUgY29udGV4dCBpcyBzd2l0Y2hlZCBhbmQgdGhlbiANCisgKiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2sgaXMgcmVzdG9yZWQgc2F2ZWQuIA0KKyAqLw0KKyNwcmFnbWEgYXNtDQorDQorCS5nbG9iYWwgX3ZQb3J0WWllbGREZWxheWVkDQorCV92UG9ydFlpZWxkRGVsYXllZDoNCisNCisJQU5EQ0NSICMweEVGCQkJCQkJCTtEaXNhYmxlIEludGVycnVwdHMNCisJU2F2ZUNvbnRleHQJCQkJCQkJCTtTYXZlIGNvbnRleHQNCisJT1JDQ1IgIzB4MTAJCQkJCQkJCTtSZS1lbmFibGUgSW50ZXJydXB0cw0KKw0KKwlMREkgI19kaWNyLCBSMA0KKwlCQU5ETCAjMHgwRSwgQFIwCQkJCQkJO0NsZWFyIERlbGF5ZWQgaW50ZXJydXB0IGZsYWcNCisNCisJQ0FMTDMyCSBfdlRhc2tTd2l0Y2hDb250ZXh0LFIxMgkJO1N3aXRjaCBjb250ZXh0IGlmIHJlcXVpcmVkDQorDQorCUFORENDUiAjMHhFRgkJCQkJCQk7RGlzYWJsZSBJbnRlcnJ1cHRzDQorCVJlc3RvcmVDb250ZXh0CQkJCQkJCTtSZXN0b3JlIGNvbnRleHQNCisJT1JDQ1IgIzB4MTAJCQkJCQkJCTtSZS1lbmFibGUgSW50ZXJydXB0cw0KKw0KKwlSRVRJDQorDQorI3ByYWdtYSBlbmRhc20NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gV2UgY2FuIHVzZSBhIF9fbm9zYXZlcmVnIGF0dHJpYnV0ZSAgYXMgdGhlIGNvbnRleHQgDQorICogd291bGQgYmUgc2F2ZWQgYnkgUG9ydFNBVkVfQ09OVEVYVCgpLiAgVGhlIGNvbnRleHQgaXMgc3dpdGNoZWQgYW5kIHRoZW4gDQorICogdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrIGlzIHJlc3RvcmVkIHNhdmVkLiANCisgKi8gCSANCisjcHJhZ21hIGFzbQ0KKw0KKwkuZ2xvYmFsIF92UG9ydFlpZWxkDQorCV92UG9ydFlpZWxkOg0KKw0KKwlTYXZlQ29udGV4dAkJCQkJCQkJO1NhdmUgY29udGV4dA0KKwlDQUxMMzIJIF92VGFza1N3aXRjaENvbnRleHQsUjEyCQk7U3dpdGNoIGNvbnRleHQgaWYgcmVxdWlyZWQNCisJUmVzdG9yZUNvbnRleHQJCQkJCQkJO1Jlc3RvcmUgY29udGV4dA0KKwkNCisJUkVUSQ0KKw0KKyNwcmFnbWEgZW5kYXNtDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0bWFjcm8uaCBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmZmEzYwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorLyogSGFyZHdhcmUgc3BlY2lmaWMgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgIm1iOTE0NjdkLmgiDQorDQorLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCisjaWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAhPSAzMA0KKwkjZXJyb3IgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAoc2V0IGluIEZyZWVSVE9TQ29uZmlnLmgpIG11c3QgbWF0Y2ggdGhlIElMTSB2YWx1ZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lIC0gMzAgKDFFaCkgYmVpbmcgdGhlIGRlZmF1bHQuDQorI2VuZGlmDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgX19hc20oIiBTVElMTSAjMUVoICIpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSgiIFNUSUxNICMxRmggIikNCisNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCVwNCisJX19hc20oIiBTVCBQUyxALVIxNSAiKTsJCVwNCisJX19hc20oIiBBTkRDQ1IgIzB4ZWYgIik7CVwNCisNCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCVwNCisJX19hc20oIiBMRCBAUjE1KyxQUyAiKTsJCVwNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NUwkJCSggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkJCQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlfX2FzbSggIiBub3AgIiApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIHBvcnRZSUVMRCgpIHVzZXMgYSBTVyBpbnRlcnJ1cHQgKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlfX2FzbSggIiBJTlQgIzQwSCAiICk7DQorDQorLyogcG9ydFlJRUxEX0ZST01fSVNSKCkgdXNlcyBkZWxheWVkIGludGVycnVwdCAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkJCQlESUNSX0RMWUkgPSAxDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNkZWZpbmUgcG9ydE1JTklNQUxfU1RBQ0tfU0laRSBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUNCisNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL19fU1REX0xJQl9zYnJrLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL19fU1REX0xJQl9zYnJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyMGFmZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTYzNDAvX19TVERfTElCX3NicmsuYwpAQCAtMCwwICsxLDI4IEBACisvKiBUSElTIFNBTVBMRSBDT0RFIElTIFBST1ZJREVEIEFTIElTIEFORCBJUyBTVUJKRUNUIFRPIEFMVEVSQVRJT05TLiBGVUpJVFNVICovDQorLyogTUlDUk9FTEVDVFJPTklDUyBBQ0NFUFRTIE5PIFJFU1BPTlNJQklMSVRZIE9SIExJQUJJTElUWSBGT1IgQU5ZIEVSUk9SUyBPUiAqLw0KKy8qIEVMSUdJQklMSVRZIEZPUiBBTlkgUFVSUE9TRVMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgKEMpIEZ1aml0c3UgTWljcm9lbGVjdHJvbmljcyBFdXJvcGUgR21iSCAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIF9fU1REX0xJQl9zYnJrLkMNCisgIC0gVXNlZCBieSBoZWFwXzMuYyBmb3IgbWVtb3J5IGFjY29jYXRpb24gYW5kIGRlbGV0aW9uLg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorCXN0YXRpYyAgbG9uZyAgICAgICAgIGJya19zaXogID0gIDA7DQorCXR5cGVkZWYgaW50ICAgICAgICAgIF9oZWVwX3Q7DQorCSNkZWZpbmUgUk9VTkRVUChzKSAgICgoKHMpK3NpemVvZihfaGVlcF90KS0xKSZ+KHNpemVvZihfaGVlcF90KS0xKSkNCisJc3RhdGljICBfaGVlcF90ICAgICAgX2hlZXBbUk9VTkRVUChjb25maWdUT1RBTF9IRUFQX1NJWkUpL3NpemVvZihfaGVlcF90KV07DQorCSNkZWZpbmUgICAgICAgICAgICAgIF9oZWVwX3NpemUgICAgICBST1VORFVQKGNvbmZpZ1RPVEFMX0hFQVBfU0laRSkNCisNCisJZXh0ZXJuICBjaGFyICAqc2JyayhpbnQgIHNpemUpDQorCXsNCisJICAgaWYgIChicmtfc2l6ICArICBzaXplICA+ICBfaGVlcF9zaXplICB8fCAgYnJrX3NpeiAgKyAgc2l6ZSAgPCAgMCkNCisNCisgICAgICAgICAgcmV0dXJuKChjaGFyKiktMSk7DQorCSAgIGJya19zaXogICs9ICBzaXplOw0KKwkgICByZXR1cm4oICAoY2hhciopX2hlZXAgICsgIGJya19zaXogIC0gIHNpemUpOw0KKwl9DQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBiMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0LmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSAxNkZYIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBHZXQgY3VycmVudCB2YWx1ZSBvZiBEUFIgYW5kIEFEQiByZWdpc3RlcnMgDQorICovDQorcG9ydFNUQUNLX1RZUEUgeEdldF9EUFJfQURCX2JhbmsoIHZvaWQgKTsgDQorDQorLyogDQorICogR2V0IGN1cnJlbnQgdmFsdWUgb2YgRFRCIGFuZCBQQ0IgcmVnaXN0ZXJzIA0KKyAqLw0KK3BvcnRTVEFDS19UWVBFIHhHZXRfRFRCX1BDQl9iYW5rKCB2b2lkICk7DQorDQorLyoNCisgKiBTZXRzIHVwIHRoZSBwZXJpb2RpYyBJU1IgdXNlZCBmb3IgdGhlIFJUT1MgdGljay4gIFRoaXMgdXNlcyBSTFQwLCBidXQNCisgKiBjYW4gYmUgZG9uZSB1c2luZyBhbnkgZ2l2ZW4gUkxULg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlNldHVwUkxUMEludGVycnVwdCggdm9pZCApOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KKyAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiANCisgKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogTWFjcm8gdG8gc2F2ZSBhIHRhc2sgY29udGV4dCB0byB0aGUgdGFzayBzdGFjay4gVGhpcyBtYWNybyAgY29waWVzIHRoZSANCisgKiBzYXZlZCBjb250ZXh0IChBSDpBTCwgRFBSOkFEQiwgRFRCOlBDQiAsIFBDIGFuZCBQUykgZnJvbSAgdGhlICAgc3lzdGVtIA0KKyAqIHN0YWNrIHRvIHRhc2sgc3RhY2sgcG9pbnRlZCBieSB1c2VyIHN0YWNrIHBvaW50ZXIgKCBVU1AgIGZvciBTTUFMTCBhbmQgDQorICogTUVESVVNIG1lbW9yeSBtb2RlbCBhbWQgVVNCOlVTUCBmb3IgQ09NUEFDVCAgYW5kIExBUkdFIG1lbW9yeSBtb2RlbCApLA0KKyAqIHRoZW4gIGl0IHB1c2hlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBSVzAtUlc3ICBvbiAgdG8gdGhlIHRhc2sgDQorICogc3RhY2suIEZpbmFsbHkgdGhlICByZXN1bHRhbnQgIHN0YWNrICBwb2ludGVyICB2YWx1ZSBpcyBzYXZlZCBpbnRvIHRoZSANCisgKiB0YXNrICBjb250cm9sICBibG9jayAgc28gIGl0ICBjYW4gIGJlIHJldHJpZXZlZCB0aGUgbmV4dCB0aW1lIHRoZSB0YXNrIA0KKyAqIGV4ZWN1dGVzLg0KKyAqLyANCisjaWYoICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydFNNQUxMICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TUVESVVNICkgKQ0KKw0KKwkjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJXA0KKwkJCXsJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJICAgIAkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAoUlcwLFJXMSxSVzIsUlczLFJXNCxSVzUsUlc2LFJXNykgIik7CQlcDQorCQkJCV9fYXNtKCIgTU9WVyBBLCBfcHhDdXJyZW50VENCICIpOwkJCQkJCVwNCisJCQkJX19hc20oIiBNT1ZXIEEsIFNQICIpOwkJCQkJCQkJCVwNCisgIAkJCQlfX2FzbSgiIFNXQVBXICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBAQUwsIEFIICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCX0NCisNCisvKiANCisgKiBNYWNybyB0byByZXN0b3JlIGEgdGFzayBjb250ZXh0IGZyb20gdGhlIHRhc2sgc3RhY2suICBUaGlzIGlzIGVmZmVjdGktDQorICogdmVseSB0aGUgcmV2ZXJzZSBvZiBTQVZFX0NPTlRFWFQoKS4gRmlyc3QgdGhlIHN0YWNrIHBvaW50ZXIgIHZhbHVlDQorICogKFVTUCBmb3IgU01BTEwgYW5kIE1FRElVTSBtZW1vcnkgbW9kZWwgYW1kICBVU0I6VVNQICBmb3IgIENPTVBBQ1QgIGFuZCANCisgKiBMQVJHRSBtZW1vcnkgbW9kZWwgKSBpcyBsb2FkZWQgZnJvbSB0aGUgdGFzayAgY29udHJvbCBibG9jay4gIE5leHQgdGhlIA0KKyAqIHZhbHVlIG9mIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBSVzAtUlc3IGlzIHJldHJpZXZlZC4gRmluYS0NCisgKiBsbHkgaXQgY29waWVzIG9mIHRoZSBjb250ZXh0ICggQUg6QUwsICBEUFI6QURCLCBEVEI6UENCLCBQQyBhbmQgUFMpIG9mIA0KKyAqIHRoZSB0YXNrIHRvIGJlIGV4ZWN1dGVkIHVwb24gUkVUSSBmcm9tIHVzZXIgc3RhY2sgdG8gc3lzdGVtIHN0YWNrLiAgDQorICovDQorIA0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQlcDQorCQkJewlfX2FzbSgiIE1PVlcgQSwgX3B4Q3VycmVudFRDQiAiKTsJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBBLCBAQSAiKTsJCQkJCQkJCQlcDQorICAJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorICAJCQkJX19hc20oIiBNT1ZXIFNQLCBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXIChSVzAsUlcxLFJXMixSVzMsUlc0LFJXNSxSVzYsUlc3KSAiKTsJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCX0NCisJCQ0KKyNlbGlmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UgKSApDQorDQorCSNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorCQkJewlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkgICAgCQlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBPUFcgIEEgIik7CQkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXIChSVzAsUlcxLFJXMixSVzMsUlc0LFJXNSxSVzYsUlc3KSAiKTsJCVwNCisJCQkJX19hc20oIiBNT1ZMIEEsIF9weEN1cnJlbnRUQ0IgIik7CQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVkwgUkwyLCBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1ZXIEEsIFNQICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1ZXIEBSTDIrMCwgQSAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1YgQSwgVVNCICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1YgQFJMMisyLCBBICIpOwkJCQkJCQkJXA0KKwkJCX0JDQorICAgICAgICAgICAgDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCVwNCisJCQl7CV9fYXNtKCIgTU9WTCBBLCBfcHhDdXJyZW50VENCICIpOwkJCQkJCVwNCisJCQkJX19hc20oIiBNT1ZMIFJMMiwgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBBLCBAUkwyKzAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgQU5EICBDQ1IsI0gnREYgIik7ICAJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVlcgU1AsIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PViBBLCBAUkwyKzIgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WIFVTQiwgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAoUlcwLFJXMSxSVzIsUlczLFJXNCxSVzUsUlc2LFJXNykgIik7CQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE9SICAgQ0NSLCNIJzIwICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIFBVU0hXICBBICIpOwkJCQkJCQkJCVwNCisJCQl9DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIA0KKyAqIEZ1bmN0aW9ucyBmb3Igb2J0YWluaW5nIHRoZSBjdXJyZW50IHZhbHVlICBvZiAgRFBSOkFEQiwgRFRCOlBDQiBiYW5rIHJlZ2lzdGVycw0KKyAqLw0KKyANCisjcHJhZ21hIGFzbQ0KKw0KKyAgICAgICAgLkdMT0JBTCAgICBfeEdldF9EUFJfQURCX2JhbmsNCisgICAgICAgIC5HTE9CQUwgICAgX3hHZXRfRFRCX1BDQl9iYW5rDQorICAgICAgICAuU0VDVElPTiAgIENPREUsIENPREUsIEFMSUdOPTENCisNCitfeEdldF9EUFJfQURCX2Jhbms6DQorDQorICAgIE1PViBBLCBEUFINCisgICAgU1dBUA0KKyAgICBNT1YgQSwgQURCDQorICAgIE9SVyBBDQorCSNpZiBjb25maWdNRU1NT0RFTCA9PSBwb3J0TUVESVVNIHx8IGNvbmZpZ01FTU1PREVMID09IHBvcnRMQVJHRQ0KKwkJUkVUUA0KKwkjZWxpZiBjb25maWdNRU1NT0RFTCA9PSBwb3J0U01BTEwgfHwgY29uZmlnTUVNTU9ERUwgPT0gcG9ydENPTVBBQ1QgICANCisJCVJFVA0KKwkjZW5kaWYgDQorDQorDQorX3hHZXRfRFRCX1BDQl9iYW5rOg0KKw0KKyAgICBNT1YgQSwgRFRCDQorICAgIFNXQVANCisgICAgTU9WIEEsIFBDQg0KKyAgICBPUlcgQQ0KKwkjaWYgY29uZmlnTUVNTU9ERUwgPT0gcG9ydE1FRElVTSB8fCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UNCisJCVJFVFANCisJI2VsaWYgY29uZmlnTUVNTU9ERUwgPT0gcG9ydFNNQUxMIHx8IGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUICAgDQorCQlSRVQNCisJI2VuZGlmIA0KKw0KKyNwcmFnbWEgZW5kYXNtDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQorICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQorICogDQorICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4MTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogT25jZSB0aGUgdGFzayBpcyBjYWxsZWQgdGhlIHRhc2sgIHdvdWxkICBwdXNoICB0aGUgIHBvaW50ZXIgdG8gdGhlDQorCXBhcmFtZXRlciBvbnRvIHRoZSBzdGFjay4gSGVuY2UgaGVyZSB0aGUgcG9pbnRlciB3b3VsZCBiZSBjb3BpZWQgdG8gdGhlIHN0YWNrDQorCWZpcnN0LiAgV2hlbiB1c2luZyB0aGUgQ09NUEFDVCBvciBMQVJHRSBtZW1vcnkgbW9kZWwgdGhlIHBvaW50ZXIgd291bGQgYmUgMjQgDQorCWJpdHMsIGFuZCB3aGVuIHVzaW5nIHRoZSBTTUFMTCBvciBNRURJVU0gbWVtb3J5IG1vZGVsIHRoZSBwb2ludGVyIHdvdWxkIGJlIDE2IA0KKwliaXRzLiAqLyANCisJI2lmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UgKSApDQorCXsNCisJCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCAoIHVuc2lnbmVkIGxvbmcgKSAoIHB2UGFyYW1ldGVycyApID4+IDE2ICk7DQorCQlweFRvcE9mU3RhY2stLTsgICAgICAgICANCisJfQ0KKwkjZW5kaWYNCisNCisgICAgKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAoIHB2UGFyYW1ldGVycyApOw0KKyAgICBweFRvcE9mU3RhY2stLTsgICAgICAgICAgICAgICAgICANCisgICAgDQorICAgIC8qIFRoaXMgaXMgcmVkdW5kYW50IHB1c2ggdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGludHJvZHVjZSANCisgICAgYW4gb2Zmc2V0IHNvIHRoYXQgdGhlIHRhc2sgYWNjZXNzZXMgYSBwYXJhbWV0ZXIgY29ycmVjdGx5IHRoYXQgaXMgcGFzc2VkIG9uIHRvIA0KKyAgICB0aGUgdGFzayBzdGFjay4gKi8NCisJI2lmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRNRURJVU0gKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRMQVJHRSApICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9ICggeEdldF9EVEJfUENCX2JhbmsoKSAmIDB4ZmYwMCApIHwgKCAoICggbG9uZyApICggcHhDb2RlICkgPj4gMTYgKSAmIDB4ZmYgKTsgICAgICANCisJCXB4VG9wT2ZTdGFjay0tOyAgICAgICANCisJfQ0KKwkjZW5kaWYNCisNCisgICAgLyogVGhpcyBpcyByZWR1bmRhbnQgcHVzaCB0byB0aGUgc3RhY2suIFRoaXMgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gaW50cm9kdWNlIA0KKyAgICBhbiBvZmZzZXQgc28gdGhlIHRhc2sgY29ycmVjdGx5IGFjY2Vzc2VzIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIG9uIHRoZSB0YXNrIHN0YWNrLiAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApICggcHhDb2RlICk7DQorICAgIHB4VG9wT2ZTdGFjay0tOyAgICAgICANCisNCisgICAgLyogUFMgLSBVc2VyIE1vZGUsIElMTT03LCBSQj0wLCBJbnRlcnJ1cHRzIGVuYWJsZWQsVVNQICovDQorICAgICpweFRvcE9mU3RhY2sgPSAweEUwQzA7CQkJCQkJCQ0KKwlweFRvcE9mU3RhY2stLTsgDQorDQorCS8qIFBDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgKCBweENvZGUgKTsgICAgIA0KKyAgICBweFRvcE9mU3RhY2stLTsgICAgICANCisgICAgDQorICAgIC8qIERUQiB8IFBDQiAqLw0KKwkjaWYgY29uZmlnTUVNTU9ERUwgPT0gcG9ydFNNQUxMIHx8IGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUDQorCXsNCisJCSpweFRvcE9mU3RhY2sgPSB4R2V0X0RUQl9QQ0JfYmFuaygpOyAgICAgICAgIAkNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkvKiBEVEIgfCBQQ0IsIGluIGNhc2Ugb2YgTUVESVVNIGFuZCBMQVJHRSBtZW1vcnkgbW9kZWxzLCBQQ0Igd291bGQgYmUgdXNlZA0KKwlhbG9uZyB3aXRoIFBDIHRvIGluZGljYXRlIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gKi8NCisJI2lmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRNRURJVU0gKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRMQVJHRSApICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9ICggeEdldF9EVEJfUENCX2JhbmsoKSAmIDB4ZmYwMCApIHwgKCAoICggbG9uZyApICggcHhDb2RlICkgPj4gMTYgKSAmIDB4ZmYgKTsNCisJCXB4VG9wT2ZTdGFjay0tOyAgICAgICANCisJfQ0KKwkjZW5kaWYNCisNCisJLyogRFBSIHwgQURCICAqLw0KKwkqcHhUb3BPZlN0YWNrID0geEdldF9EUFJfQURCX2JhbmsoKTsJCQkJDQorCXB4VG9wT2ZTdGFjay0tOw0KKyAgICANCisJLyogQUwgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDk5OTk7CQkNCisJcHhUb3BPZlN0YWNrLS07DQorDQorCS8qIEFIICovDQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhBQUFBOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkNCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDc3Nzc7CS8qIFJXNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDY2NjY7CS8qIFJXNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDU1NTU7CS8qIFJXNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDQ0NDQ7CS8qIFJXNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDMzMzM7CS8qIFJXMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDIyMjI7CS8qIFJXMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDExMTE7CS8qIFJXMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDg4ODg7CS8qIFJXMCAqLw0KKwkJDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldHVwUkxUMEludGVycnVwdCggdm9pZCApDQorew0KKy8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGRpdmlkZWQgYnkgMTYgaXMgdXNlZCBieSB0aGUgdGltZXIuICovDQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNSZWxvYWRWYWx1ZSA9ICggdW5zaWduZWQgc2hvcnQgKSAoICggKCBjb25maWdDTEtQMV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC8gMTZVTCApIC0gMVVMICk7DQorDQorCS8qIHNldCByZWxvYWQgdmFsdWUgPSAzNDk5OSsxLCBUSUNLIEludGVycnVwdCBhZnRlciAxMCBtcyBAIDU2TUh6IG9mIENMS1AxICovDQorCVRNUkxSMCA9IHVzUmVsb2FkVmFsdWU7ICAgIA0KKyAgICANCisgICAgLyogcHJlc2NhbGVyIDE6MTYsIHJlbG9hZCwgaW50ZXJydXB0IGVuYWJsZSwgY291bnQgZW5hYmxlLCB0cmlnZ2VyICovDQorICAgIFRNQ1NSMCA9IDB4MDQxQjsgICAgDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQorCXBydlNldHVwUkxUMEludGVycnVwdCgpOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKwkvKiBTaW11bGF0ZSBhIGZ1bmN0aW9uIGNhbGwgZW5kIGFzIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuICBXZSB3aWxsIG5vdw0KKwlqdW1wIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayB0aGUgY29udGV4dCBvZiB3aGljaCB3ZSBoYXZlIGp1c3QgcmVzdG9yZWQuICovCQ0KKwlfX2FzbSgiIHJldGkgIik7DQorDQorDQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZFRSVUU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogTm90IGltcGxlbWVudGVkIC0gdW5saWtlbHkgdG8gZXZlciBiZSByZXF1aXJlZCBhcyB0aGVyZSBpcyBub3RoaW5nIHRvDQorCXJldHVybiB0by4gKi8NCit9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZS1lbXB0aXZlDQorICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgb3Igbm90Lg0KKyAqLw0KKw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorDQorCS8qIA0KKwkgKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlDQorCSAqIGFzIHRoZSBjb250ZXh0IGlzIHRvIGJlIHNhdmVkIGJ5IHRoZSBwb3J0U0FWRV9DT05URVhUKCkgbWFjcm8sIG5vdCB0aGUNCisJICogY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUuICBUaGUgdGljayBjb3VudCBpcyBpbmNyZW1lbnRlZCBhZnRlciB0aGUgY29udGV4dCANCisJICogaXMgc2F2ZWQuIA0KKwkgKi8NCisJX19ub3NhdmVyZWcgX19pbnRlcnJ1cHQgdm9pZCBwcnZSTFQwX1RJQ0tJU1IoIHZvaWQgKQ0KKwl7DQorCQkvKiBEaXNhYmxlIGludGVycnVwdHMgc28gdGhhdCBwb3J0U0FWRV9DT05URVhUKCkgaXMgbm90IGludGVycnVwdGVkICovDQorCQlfX0RJKCk7DQorCQkNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUKCk7DQorCQkNCisJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovDQorCQlfX0VJKCk7DQorCQkNCisJCS8qIENsZWFyIFJMVDAgaW50ZXJydXB0IGZsYWcgKi8NCisJCVRNQ1NSMF9VRiA9IDA7ICAgICAgDQorCQkNCisJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCB0aGVuIHN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrDQorCQl0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCQkvKiBEaXNhYmxlIGludGVycnVwdHMgc28gdGhhdCBwb3J0UkVTVE9SRV9DT05URVhUKCkgaXMgbm90IGludGVycnVwdGVkICovDQorCQlfX0RJKCk7DQorCQkNCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwkJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkJDQorCQkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwkJX19FSSgpOw0KKwl9DQorDQorI2Vsc2UNCisNCisJLyoNCisJICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuICBBbGwgdGhpcyBkb2VzIGlzIGluY3JlbWVudCB0aGUNCisJICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KKwkgKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7DQorCSAqLw0KKwlfX2ludGVycnVwdCB2b2lkIHBydlJMVDBfVElDS0lTUiggdm9pZCApDQorCXsNCisJCS8qIENsZWFyIFJMVDAgaW50ZXJydXB0IGZsYWcgKi8NCisJCVRNQ1NSMF9VRiA9IDA7ICANCisJCQ0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisNCisjZW5kaWYNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gV2UgY2FuIHVzZSBhIF9fbm9zYXZlcmVnIGF0dHJpYnV0ZSAgYXMgdGhlIGNvbnRleHQgDQorICogaXMgdG8gYmUgc2F2ZWQgYnkgdGhlIHBvcnRTQVZFX0NPTlRFWFQoKSBtYWNybywgbm90IHRoZSBjb21waWxlciBnZW5lcmF0ZWQgDQorICogY29kZS4NCisgKi8NCitfX25vc2F2ZXJlZyBfX2ludGVycnVwdCB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkNCisJLyogU3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorX19ub3NhdmVyZWcgX19pbnRlcnJ1cHQgdm9pZCB2UG9ydFlpZWxkRGVsYXllZCggdm9pZCApDQoreyAgICANCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgcG9ydFNBVkVfQ09OVEVYVCgpIGlzIG5vdCBpbnRlcnJ1cHRlZCAqLyAgICAgIA0KKwlfX0RJKCk7DQorCQ0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQorCQ0KKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwlfX0VJKCk7DQorCQkJCQ0KKwkvKiBDbGVhciBkZWxheWVkIGludGVycnVwdCBmbGFnICovDQorICAgIF9fYXNtICgiIENMUkIgIDAzQTRIOjAgIik7DQorCQ0KKwkvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQ0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgc28gdGhhdCBwb3J0U0FWRV9DT05URVhUKCkgaXMgbm90IGludGVycnVwdGVkICovICAgDQorCV9fREkoKTsNCisJDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorDQorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovDQorCV9fRUkoKTsNCit9CQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9Tb2Z0dW5lL01COTYzNDAvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjllNGEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTUwIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKy8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisNCisvKiBDb25zdGFudHMgZGVub3RpbmcgdGhlIGF2YWlsYWJsZSBtZW1vcnkgbW9kZWxzLiAgVGhlc2UgYXJlIHVzZWQgd2l0aGluDQorRnJlZVJUT1NDb25maWcuaCB0byBzZXQgdGhlIGNvbmZpZ01FTU1PREVMIHZhbHVlLiAqLw0KKyNkZWZpbmUgcG9ydFNNQUxMICAgICAwDQorI2RlZmluZSBwb3J0TUVESVVNICAgIDENCisjZGVmaW5lIHBvcnRDT01QQUNUICAgMg0KKyNkZWZpbmUgcG9ydExBUkdFICAgICAzDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0U0hPUlQNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydFNIT1JUIHBvcnRUaWNrVHlwZTsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggcG9ydFRpY2tUeXBlICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZmZmZmYNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCisjaWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAhPSA2DQorCSNlcnJvciBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIChzZXQgaW4gRnJlZVJUT1NDb25maWcuaCkgbXVzdCBtYXRjaCB0aGUgSUxNIHZhbHVlIHNldCBpbiB0aGUgZm9sbG93aW5nIGxpbmUgLSAjMDZIIGJlaW5nIHRoZSBkZWZhdWx0Lg0KKyNlbmRpZg0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fYXNtKCIgTU9WIElMTSwgIzA2aCAiKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fYXNtKCIgTU9WIElMTSwgIzA3aCAiKQ0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCVwNCisJCXsJX19hc20oIiBQVVNIVyBQUyAiKTsJCQkJCQkJXA0KKwkJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQlcDQorCQl9DQorDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJXA0KKwkJewlfX2FzbSgiIFBPUFcgUFMgIik7CQkJCQkJCQlcDQorCQl9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJCQkoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCQkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTINCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20oICIgTk9QICIgKTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBwb3J0WUlFTEQoKSB1c2VzIFNXIGludGVycnVwdCAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtKCAiIElOVCAjMTIyICIgKTsNCisNCisvKiBwb3J0WUlFTERfRlJPTV9JU1IoKSB1c2VzIGRlbGF5ZWQgaW50ZXJydXB0ICovDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKQkJIF9fYXNtKCAiIFNFVEIgIDAzQTRIOjAgIiApOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnRNSU5JTUFMX1NUQUNLX1NJWkUgY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFDQorDQorDQorI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Rhc2tpbmcvQVJNX0NNNEYvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Rhc2tpbmcvQVJNX0NNNEYvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMGJmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvVGFza2luZy9BUk1fQ000Ri9wb3J0LmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk0gQ000RiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KKyNpbmNsdWRlICJGcmVlUlRPUy5oIg0KKyNpbmNsdWRlICJ0YXNrLmgiDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIG1hbmlwdWxhdGUgdGhlIE5WSUMuICovDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0NUUkwJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlMDEwICkNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfTE9BRAkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGUwMTQgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkwJCQkoICggdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqICkgMHhlMDAwZWQwNCApDQorI2RlZmluZSBwb3J0TlZJQ19TWVNQUkkyCQkJKCAoIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiApIDB4ZTAwMGVkMjAgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19DTEsJCTB4MDAwMDAwMDQNCisjZGVmaW5lIHBvcnROVklDX1NZU1RJQ0tfSU5UCQkweDAwMDAwMDAyDQorI2RlZmluZSBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRQkJMHgwMDAwMDAwMQ0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUCQkJMHgxMDAwMDAwMA0KKyNkZWZpbmUgcG9ydE5WSUNfUEVORFNWX1BSSQkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMTYgKQ0KKyNkZWZpbmUgcG9ydE5WSUNfU1lTVElDS19QUkkJCSggKCAoIHVuc2lnbmVkIGxvbmcgKSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgMjQgKQ0KKw0KKy8qIENvbnN0YW50cyByZXF1aXJlZCB0byBtYW5pcHVsYXRlIHRoZSBWRlAuICovDQorI2RlZmluZSBwb3J0RlBDQ1IJCQkJCSggKCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogKSAweGUwMDBlZjM0ICkgLyogRmxvYXRpbmcgcG9pbnQgY29udGV4dCBjb250cm9sIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgcG9ydEFTUEVOX0FORF9MU1BFTl9CSVRTCSggMHgzVUwgPDwgMzBVTCApDQorDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1hQU1IJCQkoIDB4MDEwMDAwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRVhFQ19SRVRVUk4JCSggMHhmZmZmZmZmZCApDQorDQorLyogVGhlIHByaW9yaXR5IHVzZWQgYnkgdGhlIGtlcm5lbCBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIHRvIG1ha2UgYWNjZXNzDQorZnJvbSBpbmxpbmUgYXNzZW1ibGVyIGVhc2llci4gKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIHVsS2VybmVsUHJpb3JpdHkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzIGluIHRoZSBjcml0aWNhbCBuZXN0aW5nDQordmFyaWFibGUuICovDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdWxDcml0aWNhbE5lc3RpbmcgPSAweGFhYWFhYWFhVUw7DQorDQorLyoNCisgKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorDQorLyoNCisgKiBFeGNlcHRpb24gaGFuZGxlcnMuDQorICovDQordm9pZCBTeXNUaWNrX0hhbmRsZXIoIHZvaWQgKTsNCisNCisvKg0KKyAqIEZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRfYXNtLmFzbS4NCisgKi8NCitleHRlcm4gdm9pZCB2UG9ydEVuYWJsZVZGUCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCisNCisvKiBUaGlzIGV4aXN0cyBwdXJlbHkgdG8gYWxsb3cgdGhlIGNvbnN0IHRvIGJlIHVzZWQgZnJvbSB3aXRoaW4gdGhlDQorcG9ydF9hc20uYXNtIGFzc2VtYmx5IGZpbGUuICovDQorY29uc3QgdW5zaWduZWQgbG9uZyB1bE1heFN5c2NhbGxJbnRlcnJ1cHRQcmlvcml0eUNvbnN0ID0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLCBwZFRBU0tfQ09ERSBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KKwkvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQorCWludGVycnVwdC4gKi8NCisNCisJLyogT2Zmc2V0IGFkZGVkIHRvIGFjY291bnQgZm9yIHRoZSB3YXkgdGhlIE1DVSB1c2VzIHRoZSBzdGFjayBvbiBlbnRyeS9leGl0DQorCW9mIGludGVycnVwdHMsIGFuZCB0byBlbnN1cmUgYWxpZ25tZW50LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1hQU1I7CS8qIHhQU1IgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgcHhDb2RlOwkvKiBQQyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDA7CS8qIExSICovDQorDQorCS8qIFNhdmUgY29kZSBzcGFjZSBieSBza2lwcGluZyByZWdpc3RlciBpbml0aWFsaXNhdGlvbi4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDU7CS8qIFIxMiwgUjMsIFIyIGFuZCBSMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSBwdlBhcmFtZXRlcnM7CS8qIFIwICovDQorDQorCS8qIEEgc2F2ZSBtZXRob2QgaXMgYmVpbmcgdXNlZCB0aGF0IHJlcXVpcmVzIGVhY2ggdGFzayB0byBtYWludGFpbiBpdHMNCisJb3duIGV4ZWMgcmV0dXJuIHZhbHVlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VYRUNfUkVUVVJOOw0KKw0KKwlweFRvcE9mU3RhY2sgLT0gODsJLyogUjExLCBSMTAsIFI5LCBSOCwgUjcsIFI2LCBSNSBhbmQgUjQuICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisgKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwLg0KKwlTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCAqLw0KKwljb25maWdBU1NFUlQoICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKTsNCisNCisJLyogTWFrZSBQZW5kU1YgYW5kIFN5c1RpY2sgdGhlIGxvd2VzdCBwcmlvcml0eSBpbnRlcnJ1cHRzLiAqLw0KKwkqKHBvcnROVklDX1NZU1BSSTIpIHw9IHBvcnROVklDX1BFTkRTVl9QUkk7DQorCSoocG9ydE5WSUNfU1lTUFJJMikgfD0gcG9ydE5WSUNfU1lTVElDS19QUkk7DQorDQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisNCisJLyogSW5pdGlhbGlzZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCByZWFkeSBmb3IgdGhlIGZpcnN0IHRhc2suICovDQorCXVsQ3JpdGljYWxOZXN0aW5nID0gMDsNCisNCisJLyogRW5zdXJlIHRoZSBWRlAgaXMgZW5hYmxlZCAtIGl0IHNob3VsZCBiZSBhbnl3YXkuICovDQorCXZQb3J0RW5hYmxlVkZQKCk7DQorDQorCS8qIExhenkgc2F2ZSBhbHdheXMuICovDQorCSooIHBvcnRGUENDUiApIHw9IHBvcnRBU1BFTl9BTkRfTFNQRU5fQklUUzsNCisNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQ000RiBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApDQorew0KKwkvKiBTZXQgYSBQZW5kU1YgdG8gcmVxdWVzdCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkqKHBvcnROVklDX0lOVF9DVFJMKSA9IHBvcnROVklDX1BFTkRTVlNFVDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCit7DQorCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwICkNCisJew0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCBTeXNUaWNrX0hhbmRsZXIoIHZvaWQgKQ0KK3sNCit1bnNpZ25lZCBsb25nIHVsRHVtbXk7DQorDQorCS8qIElmIHVzaW5nIHByZWVtcHRpb24sIGFsc28gZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCSoocG9ydE5WSUNfSU5UX0NUUkwpID0gcG9ydE5WSUNfUEVORFNWU0VUOw0KKwkjZW5kaWYNCisNCisJdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bER1bW15ICk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCisgKiBmcmVxdWVuY3kuDQorICovDQordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCit7DQorCS8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQorCSoocG9ydE5WSUNfU1lTVElDS19MT0FEKSA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorCSoocG9ydE5WSUNfU1lTVElDS19DVFJMKSA9IHBvcnROVklDX1NZU1RJQ0tfQ0xLIHwgcG9ydE5WSUNfU1lTVElDS19JTlQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Rhc2tpbmcvQVJNX0NNNEYvcG9ydF9hc20uYXNtIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Rhc2tpbmcvQVJNX0NNNEYvcG9ydF9hc20uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzM2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvVGFza2luZy9BUk1fQ000Ri9wb3J0X2FzbS5hc20KQEAgLTAsMCArMSwxNjggQEAKKzsvKg0KKzsgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKzsNCis7DQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKzsgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCis7ICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCis7ICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorOyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKzsgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCis7ICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorOyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCis7ICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorOyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKzsgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCis7ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorOyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCis7DQorOw0KKzsgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCis7DQorOyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorOyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCis7ICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCis7ICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKzsgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCis7ICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorOyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCis7ICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorOyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorOyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzsgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKzsgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKzsgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCis7ICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKzsNCis7ICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsNCis7ICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KKzsgICAgY29udGFjdCBkZXRhaWxzLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5DQorOyAgICBjcml0aWNhbCBzeXN0ZW1zLg0KKzsNCis7ICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gQ29tbWVyY2lhbCBzdXBwb3J0LCBkZXZlbG9wbWVudCwgcG9ydGluZywNCis7ICAgIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQorOyovDQorDQorCS5leHRlcm4gcHhDdXJyZW50VENCDQorCS5leHRlcm4gdlRhc2tTd2l0Y2hDb250ZXh0DQorCS5leHRlcm4gdWxNYXhTeXNjYWxsSW50ZXJydXB0UHJpb3JpdHlDb25zdA0KKw0KKwkuZ2xvYmFsIFBlbmRTVl9IYW5kbGVyDQorCS5nbG9iYWwgU1ZDX0hhbmRsZXINCisJLmdsb2JhbCB2UG9ydFN0YXJ0Rmlyc3RUYXNrDQorCS5nbG9iYWwgdlBvcnRFbmFibGVWRlANCisJDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorCS5zZWN0aW9uIC50ZXh0DQorCS50aHVtYg0KKwkuYWxpZ24gNA0KK1BlbmRTVl9IYW5kbGVyOiAudHlwZSBmdW5jDQorCW1ycyByMCwgcHNwDQorDQorCTtHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4NCisJbGRyLncJcjMsID1weEN1cnJlbnRUQ0INCisJbGRyCXIyLCBbcjNdDQorDQorCTtJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcHVzaCBoaWdoIHZmcCByZWdpc3RlcnMuDQorCXRzdCByMTQsICMweDEwDQorCWl0IGVxDQorCXZzdG1kYmVxIHIwISwge3MxNi1zMzF9DQorDQorCTtTYXZlIHRoZSBjb3JlIHJlZ2lzdGVycy4NCisJc3RtZGIgcjAhLCB7cjQtcjExLCByMTR9DQorDQorCTtTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLg0KKwlzdHIgcjAsIFtyMl0NCisNCisJc3RtZGIgc3AhLCB7cjMsIHIxNH0NCisJbGRyLncgcjAsID11bE1heFN5c2NhbGxJbnRlcnJ1cHRQcmlvcml0eUNvbnN0DQorCW1zciBiYXNlcHJpLCByMA0KKwlibCB2VGFza1N3aXRjaENvbnRleHQNCisJbW92IHIwLCAjMA0KKwltc3IgYmFzZXByaSwgcjANCisJbGRtaWEgc3AhLCB7cjMsIHIxNH0NCisNCisJO1RoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suDQorCWxkciByMSwgW3IzXQ0KKwlsZHIgcjAsIFtyMV0NCisNCisJO1BvcCB0aGUgY29yZSByZWdpc3RlcnMuDQorCWxkbWlhIHIwISwge3I0LXIxMSwgcjE0fQ0KKw0KKwk7SXMgdGhlIHRhc2sgdXNpbmcgdGhlIEZQVSBjb250ZXh0PyAgSWYgc28sIHBvcCB0aGUgaGlnaCB2ZnAgcmVnaXN0ZXJzIHRvby4NCisJdHN0IHIxNCwgIzB4MTANCisJaXQgZXENCisJdmxkbWlhZXEgcjAhLCB7czE2LXMzMX0NCisNCisJbXNyIHBzcCwgcjANCisJYnggcjE0DQorDQorCS5zaXplCVBlbmRTVl9IYW5kbGVyLCAkLVBlbmRTVl9IYW5kbGVyDQorCS5lbmRzZWMNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisJLnNlY3Rpb24gLnRleHQNCisJLnRodW1iDQorCS5hbGlnbiA0DQorU1ZDX0hhbmRsZXI6IC50eXBlIGZ1bmMNCisJO0dldCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgVENCLg0KKwlsZHIudwlyMywgPXB4Q3VycmVudFRDQg0KKwlsZHIgcjEsIFtyM10NCisJbGRyIHIwLCBbcjFdDQorCTtQb3AgdGhlIGNvcmUgcmVnaXN0ZXJzLg0KKwlsZG1pYSByMCEsIHtyNC1yMTEsIHIxNH0NCisJbXNyIHBzcCwgcjANCisJbW92IHIwLCAjMA0KKwltc3IJYmFzZXByaSwgcjANCisJYnggcjE0DQorCS5zaXplCVNWQ19IYW5kbGVyLCAkLVNWQ19IYW5kbGVyDQorCS5lbmRzZWMNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisJLnNlY3Rpb24gLnRleHQNCisJLnRodW1iDQorCS5hbGlnbiA0DQordlBvcnRTdGFydEZpcnN0VGFzayAudHlwZSBmdW5jDQorCTtVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suDQorCWxkci53IHIwLCA9MHhFMDAwRUQwOA0KKwlsZHIgcjAsIFtyMF0NCisJbGRyIHIwLCBbcjBdDQorCTtTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suDQorCW1zciBtc3AsIHIwDQorCTtDYWxsIFNWQyB0byBzdGFydCB0aGUgZmlyc3QgdGFzay4NCisJY3BzaWUgaQ0KKwlzdmMgMA0KKwkuc2l6ZQl2UG9ydFN0YXJ0Rmlyc3RUYXNrLCAkLXZQb3J0U3RhcnRGaXJzdFRhc2sNCisJLmVuZHNlYw0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKwkuc2VjdGlvbiAudGV4dA0KKwkudGh1bWINCisJLmFsaWduIDQNCit2UG9ydEVuYWJsZVZGUCAudHlwZSBmdW5jDQorCTtUaGUgRlBVIGVuYWJsZSBiaXRzIGFyZSBpbiB0aGUgQ1BBQ1IuDQorCWxkci53IHIwLCA9MHhFMDAwRUQ4OA0KKwlsZHIJcjEsIFtyMF0NCisNCisJO0VuYWJsZSBDUDEwIGFuZCBDUDExIGNvcHJvY2Vzc29ycywgdGhlbiBzYXZlIGJhY2suDQorCW9ycglyMSwgcjEsICMoIDB4ZiA8PCAyMCApDQorCXN0ciByMSwgW3IwXQ0KKwlieAlyMTQNCisJLnNpemUJdlBvcnRFbmFibGVWRlAsICQtdlBvcnRFbmFibGVWRlANCisJLmVuZHNlYw0KKw0KKw0KKwkuZW5kDQorCQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9UYXNraW5nL0FSTV9DTTRGL3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1Rhc2tpbmcvQVJNX0NNNEYvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExZTg3OAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9UYXNraW5nL0FSTV9DTTRGL3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTY1IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TCQkJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCQ0KKw0KKw0KKy8qIFNjaGVkdWxlciB1dGlsaXRpZXMuICovDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQl2UG9ydFlpZWxkRnJvbUlTUigpDQorDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSB2UG9ydFlpZWxkRnJvbUlTUigpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KKw0KKy8qIA0KKyAqIFNldCBiYXNlcHJpIHRvIHBvcnRNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2l0aG91dCBlZmZlY3Rpbmcgb3RoZXINCisgKiByZWdpc3RlcnMuICByMCBpcyBjbG9iYmVyZWQuDQorICovIA0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTSygpIF9fc2V0X0JBU0VQUkkoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorCQ0KKy8qDQorICogU2V0IGJhc2VwcmkgYmFjayB0byAwIHdpdGhvdXQgZWZmZWN0aXZlIG90aGVyIHJlZ2lzdGVycy4NCisgKiByMCBpcyBjbG9iYmVyZWQuICBGQVE6ICBTZXR0aW5nIEJBU0VQUkkgdG8gMCBpcyBub3QgYSBidWcuICBQbGVhc2Ugc2VlIA0KKyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgYmVmb3JlIGRpc2FncmVlaW5nLg0KKyAqLw0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkgX19zZXRfQkFTRVBSSSggMCApDQorDQorLyogRkFROiAgU2V0dGluZyBCQVNFUFJJIHRvIDAgaXMgbm90IGEgYnVnLiAgUGxlYXNlIHNlZSANCitodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sIGJlZm9yZSBkaXNhZ3JlZWluZy4gKi8NCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJMDtwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsodm9pZCl4DQorDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKw0KKy8qIFRoZXJlIGFyZSBhbiB1bmV2ZW4gbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZSBpbml0aWFsIHN0YWNrLCBzbyANCitwb3J0QUxJR05NRU5UX0FTU0VSVF9weEN1cnJlbnRUQ0IoKSB3aWxsIHRyaWdnZXIgZmFsc2UgcG9zaXRpdmUgYXNzZXJ0cy4gKi8NCisjZGVmaW5lIHBvcnRBTElHTk1FTlRfQVNTRVJUX3B4Q3VycmVudFRDQiAoIHZvaWQgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisNCisjZGVmaW5lIHBvcnROT1AoKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvV2l6Qy9QSUMxOC9Ecml2ZXJzL1RpY2svVGljay5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL1RpY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg0NTcwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL1RpY2suYwpAQCAtMCwwICsxLDE3NyBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyogDQorQ2hhbmdlcyBmcm9tIFYzLjAuMA0KKwkrIElTUmNvZGUgaXMgcHVsbGVkIGlubGluZSBhbmQgcG9ydFRJQ0tpc3IoKSBpcyB0aGVyZWZvcmUNCisJICBkZWxldGVkIGZyb20gdGhpcyBmaWxlLg0KKw0KKwkrIFByZXNjYWxlciBsb2dpYyBmb3IgVGltZXIxIGFkZGVkIHRvIGFsbG93IGZvciBhIHdpZGVyDQorCSAgcmFuZ2Ugb2YgVGlja1JhdGVzLg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4wLjENCisqLw0KKw0KKyNpbmNsdWRlIDxGcmVlUlRPUy5oPg0KKyNpbmNsdWRlIDx0YXNrLmg+DQorDQorLyogSU8gcG9ydCBjb25zdGFudHMuICovDQorI2RlZmluZSBwb3J0QklUX1NFVAkJKDEpDQorI2RlZmluZSBwb3J0QklUX0NMRUFSCSgwKQ0KKw0KKy8qIA0KKyAqIEhhcmR3YXJlIHNldHVwIGZvciB0aGUgdGljay4NCisgKiBXZSB1c2UgYSBjb21wYXJlIG1hdGNoIG9uIHRpbWVyMS4gRGVwZW5kaW5nIG9uIE1QVS1mcmVxdWVuY3kNCisgKiBhbmQgcmVxdWVzdGVkIHRpY2tyYXRlLCBhIHByZXNjYWxlZCB2YWx1ZSB3aXRoIGEgbWF0Y2hpbmcNCisgKiBwcmVzY2FsZXIgYXJlIGRldGVybWluZWQuDQorICovDQorI2RlZmluZQlwb3J0VElNRVJfQ09NUEFSRV9CQVNFCQkJKChBUFJPQ0ZSRVEvNCkvY29uZmlnVElDS19SQVRFX0haKQ0KKw0KKyNpZiBwb3J0VElNRVJfQ09NUEFSRV9CQVNFICAgPCAweDEwMDAwDQorCSNkZWZpbmUJcG9ydFRJTUVSX0NPTVBBUkVfVkFMVUUJCShwb3J0VElNRVJfQ09NUEFSRV9CQVNFKQ0KKwkjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMQkJKHBvcnRCSVRfQ0xFQVIpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMwCQkocG9ydEJJVF9DTEVBUikNCisjZWxpZiBwb3J0VElNRVJfQ09NUEFSRV9CQVNFIDwgMHgyMDAwMA0KKwkjZGVmaW5lCXBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFCQkocG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAvIDIpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMxCQkocG9ydEJJVF9DTEVBUikNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzAJCShwb3J0QklUX1NFVCkNCisjZWxpZiBwb3J0VElNRVJfQ09NUEFSRV9CQVNFIDwgMHg0MDAwMA0KKwkjZGVmaW5lCXBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFCQkocG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAvIDQpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMxCQkocG9ydEJJVF9TRVQpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMwCQkocG9ydEJJVF9DTEVBUikNCisjZWxpZiBwb3J0VElNRVJfQ09NUEFSRV9CQVNFIDwgMHg4MDAwMA0KKwkjZGVmaW5lCXBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFCQkocG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAvIDgpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMxCQkocG9ydEJJVF9TRVQpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMwCQkocG9ydEJJVF9TRVQpDQorI2Vsc2UNCisJI2Vycm9yICJUaWNrUmF0ZSBvdXQgb2YgcmFuZ2UiDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBTZXR1cCBhIHRpbWVyIGZvciBhIHJlZ3VsYXIgdGljay4NCisgKi8NCit2b2lkIHBvcnRTZXR1cFRpY2soIHZvaWQgKQ0KK3sNCisJLyoNCisJICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisJICovDQorDQorCS8qDQorCSAqIFNldHVwIENDUDENCisJICogUHJvdmlkZSB0aGUgdGljayBpbnRlcnJ1cHQgdXNpbmcgYSBjb21wYXJlIG1hdGNoIG9uIHRpbWVyMS4NCisJICovDQorDQorCS8qDQorCSAqIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4NCisJICovDQorCUNDUFIxSCA9ICggdW5zaWduZWQgY2hhciApICggKCBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSA+PiA4ICkgJiAweGZmICk7DQorCUNDUFIxTCA9ICggdW5zaWduZWQgY2hhciApICAgKCBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSAmIDB4ZmYgKTsNCisNCisJLyoNCisJICogU2V0IENvbXBhcmUgU3BlY2lhbCBFdmVudCBUcmlnZ2VyIE1vZGUNCisJICovDQorCWJDQ1AxTTMgCT0gcG9ydEJJVF9TRVQ7DQorCWJDQ1AxTTIgCT0gcG9ydEJJVF9DTEVBUjsNCisJYkNDUDFNMSAJPSBwb3J0QklUX1NFVDsNCisJYkNDUDFNMAkJPSBwb3J0QklUX1NFVDsNCisNCisJLyoNCisJICogRW5hYmxlIENDUDEgaW50ZXJydXB0DQorCSAqLw0KKwliQ0NQMUlFIAk9IHBvcnRCSVRfU0VUOw0KKw0KKwkvKg0KKwkgKiBXZSBhcmUgb25seSBnb2luZyB0byB1c2UgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0LCBzbyBkaXNhYmxlDQorCSAqIGludGVycnVwdHByaW9yaXRpZXMgYW5kIGVuYWJsZSBwZXJpcGhlcmFsIGludGVycnVwdHMuDQorCSAqLw0KKwliSVBFTgkJPSBwb3J0QklUX0NMRUFSOw0KKwliUEVJRQkJPSBwb3J0QklUX1NFVDsNCisNCisJLyoNCisJICogU2V0IHVwIHRpbWVyMQ0KKwkgKiBJdCB3aWxsIHByb2R1Y2UgdGhlIHN5c3RlbSB0aWNrLg0KKwkgKi8NCisNCisJLyoNCisJICogQ2xlYXIgdGhlIHRpbWUgY291bnQNCisJICovDQorCVRNUjFIID0gKCB1bnNpZ25lZCBjaGFyICkgMHgwMDsNCisJVE1SMUwgPSAoIHVuc2lnbmVkIGNoYXIgKSAweDAwOw0KKw0KKwkvKg0KKwkgKiBTZXR1cCB0aGUgdGltZXINCisJICovDQorCWJSRDE2CQk9IHBvcnRCSVRfU0VUOwkJCQkvLyAxNi1iaXQNCisJYlQxQ0tQUzEJPSBwb3J0VElNRVJfQ09NUEFSRV9QUzE7CS8vIHByZXNjYWxlcg0KKwliVDFDS1BTMAk9IHBvcnRUSU1FUl9DT01QQVJFX1BTMDsJLy8gcHJlc2NhbGVyDQorCWJUMU9TQ0VOCT0gcG9ydEJJVF9TRVQ7CQkJCS8vIE9zY2lsbGF0b3IgZW5hYmxlDQorCWJUMVNZTkMJCT0gcG9ydEJJVF9TRVQ7CQkJCS8vIE5vIGV4dGVybmFsIGNsb2NrIHN5bmMNCisJYlRNUjFDUwkJPSBwb3J0QklUX0NMRUFSOwkJCS8vIEludGVybmFsIGNsb2NrDQorCQ0KKwliVE1SMU9OCQk9IHBvcnRCSVRfU0VUOwkJCQkvLyBTdGFydCB0aW1lcjENCit9DQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL2lzclRpY2suYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L0RyaXZlcnMvVGljay9pc3JUaWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NzFkZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L0RyaXZlcnMvVGljay9pc3JUaWNrLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qIA0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisJKyBJU1Jjb2RlIHB1bGxlZCBpbmxpbmUgdG8gcmVkdWNlIHN0YWNrLXVzYWdlLg0KKw0KKwkrIEFkZGVkIGZ1bmN0aW9uYWxpdHkgdG8gb25seSBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIG9uY2UNCisJICB3aGVuIGhhbmRsaW5nIG11bHRpcGxlIGludGVycnVwdHNvdXJjZXMgaW4gYSBzaW5nbGUgaW50ZXJydXB0Y2FsbC4NCisNCisJKyBGaWxlbmFtZSBjaGFuZ2VkIHRvIGEgLmMgZXh0ZW5zaW9uIHRvIGFsbG93IHN0ZXBwaW5nIHRocm91Z2ggY29kZQ0KKwkgIHVzaW5nIEY3Lg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4wLjENCisqLw0KKw0KKy8qDQorICogSVNSIGZvciB0aGUgdGljay4NCisgKiBUaGlzIGluY3JlbWVudHMgdGhlIHRpY2sgY291bnQgYW5kLCBpZiB1c2luZyB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIsIA0KKyAqIHBlcmZvcm1zIGEgY29udGV4dCBzd2l0Y2guICBUaGlzIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRoZSBtYW51YWwgDQorICogY29udGV4dCBzd2l0Y2ggaW4gaG93IGl0IHN0b3JlcyB0aGUgY29udGV4dCBvZiBhIHRhc2suIA0KKyAqLw0KKw0KKyNpZm5kZWYgX0ZSRUVSVE9TX0RSSVZFUlNfVElDS19JU1JUSUNLX0MNCisjZGVmaW5lIF9GUkVFUlRPU19EUklWRVJTX1RJQ0tfSVNSVElDS19DDQorDQorew0KKwkvKg0KKwkgKiBXYXMgdGhlIGludGVycnVwdCB0aGUgU3lzdGVtQ2xvY2s/DQorCSAqLw0KKwlpZiggYkNDUDFJRiAmJiBiQ0NQMUlFICkNCisJew0KKwkJLyoNCisJCSAqIFJlc2V0IHRoZSBpbnRlcnJ1cHQgZmxhZw0KKwkJICovDQorCQliQ0NQMUlGID0gMDsNCisJDQorCQkvKg0KKwkgCSAqIE1haW50YWluIHRoZSB0aWNrIGNvdW50Lg0KKwkgCSAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQkNCisJCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQl7DQorCQkJLyoNCisJCSAJICogQXNrIGZvciBhIHN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrDQorCQkgCSAqIHRoYXQgaXMgcmVhZHkgdG8gcnVuLg0KKwkJIAkgKi8NCisJCQl1eFN3aXRjaFJlcXVlc3RlZCA9IHBkVFJVRTsNCisJCX0NCisJCSNlbmRpZg0KKwl9DQorfQ0KKw0KKyNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vVGljay5jIg0KKw0KKyNlbmRpZgkvKiBfRlJFRVJUT1NfRFJJVkVSU19USUNLX0lTUlRJQ0tfQyAqLw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L0luc3RhbGwuYmF0IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvSW5zdGFsbC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1Yjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L0luc3RhbGwuYmF0CkBAIC0wLDAgKzEsMjI1IEBACitSRU0vKg0KK1JFTSAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorUkVNDQorUkVNDQorUkVNICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK1JFTSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KK1JFTSAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KK1JFTSAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KK1JFTSAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KK1JFTSAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KK1JFTSAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KK1JFTSAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KK1JFTSAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KK1JFTSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KK1JFTSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KK1JFTSAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCitSRU0NCitSRU0NCitSRU0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCitSRU0NCitSRU0gICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZVJFTSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorUkVNICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KK1JFTSAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorUkVNICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KK1JFTSAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KK1JFTSAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KK1JFTSAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCitSRU0gICAgV0lUSE9VVCBBTlkgV0FSUkFOVFlSRU0gd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KK1JFTSAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorUkVNICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorUkVNICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TUkVNIGlmIG5vdCBpdA0KK1JFTSAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorUkVNICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorUkVNICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KK1JFTQ0KK1JFTSAgICAxIHRhYiA9PSA0IHNwYWNlcyENCitSRU0NCitSRU0gICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorUkVNICAgIGNvbnRhY3QgZGV0YWlscy4NCitSRU0NCitSRU0gICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCitSRU0gICAgY3JpdGljYWwgc3lzdGVtcy4NCitSRU0NCitSRU0gICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KK1JFTSAgICBsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KK1JFTSovDQorDQorDQorQGVjaG8gb2ZmDQorY2xzDQorDQorU0VUIFBBQ0tBR0VOQU1FPXRoZSBGcmVlUlRPUyBwb3J0IGZvciBmZWRDIGFuZCB3aXpDDQorDQorZWNoby4NCitlY2hvIEhlbGxvLCBJJ20gdGhlIGluc3RhbGxhdGlvbnNjcmlwdCBmb3IgJVBBQ0tBR0VOQU1FJS4NCitlY2hvLg0KKw0KKzpDSEVDS0ZFREMNCisgIHNldCBGRUQ9QzpcUHJvZ3JhbSBGaWxlc1xGRURcUElDX0MNCisgIGVjaG8uDQorICBlY2hvIEknbSBjaGVja2luZyB5b3VyIHN5c3RlbSBmb3IgZmVkQw0KKyAgaWYgbm90IGV4aXN0ICIlRkVEJSIgZ290byBOT0ZFREMNCisgIGVjaG8gWUVTLCBJIGZvdW5kIGEgZmVkQy1pbnN0YWxsYXRpb24hDQorICBnb3RvIEZPVU5ERkVEDQorOk5PRkVEQw0KKyAgZWNobyBJIGNvdWxkIG5vdCBmaW5kIGEgZmVkQy1pbnN0YWxsYXRpb24uDQorDQorDQorOkNIRUNLV0laQw0KKyAgc2V0IEZFRD1DOlxQcm9ncmFtIEZpbGVzXEZFRFxQSVhJRQ0KKyAgZWNoby4NCisgIGVjaG8gSSdtIGNoZWNraW5nIHlvdXIgc3lzdGVtIGZvciB3aXpDDQorICBpZiBub3QgZXhpc3QgIiVGRUQlIiBnb3RvIE5PV0laQw0KKyAgZWNobyBZRVMsIEkgZm91bmQgYSB3aXpDLWluc3RhbGxhdGlvbiENCisgIGdvdG8gRk9VTkRGRUQNCis6bm9XSVpDDQorICBlY2hvIEkgY291bGQgbm90IGZpbmQgYSB3aXpDLWluc3RhbGxhdGlvbi4NCisNCisNCis6RVJST1INCisgIGVjaG8uDQorICBlY2hvLg0KKyAgZWNobyBJIGNvdWxkIG5vdCBmaW5kIGEgRkVEIEMtY29tcGlsZXIgaW5zdGFsbGF0aW9uIG9uIHlvdXIgc3lzdGVtLg0KKyAgZWNoby4NCisgIGVjaG8gUGVyaGFwcyBJIGdvdCBjb25mdXNlZCBiZWNhdXNlIHlvdSBpbnN0YWxsZWQgZmVkQyBvciB3aXpDIGluIGEgbm9uLWRlZmF1bHQgZGlyZWN0b3J5Lg0KKyAgZWNobyBJZiB0aGlzIGlzIHRoZSBjYXNlLCBwbGVhc2UgY2hhbmdlIHRoZSBwYXRoIGF0IHRoZSB0b3Agb2YgdGhpcyBpbnN0YWxsLXNjcmlwdC4NCisgIGVjaG8gQWZ0ZXIgdGhhdCByZXJ1biB0aGUgc2NyaXB0IGFuZCBJIHdpbGwgYmUgaGFwcHkgdG8gdHJ5IGFnYWluLg0KKyAgZWNoby4NCisgIGdvdG8gRU5ESVQNCisNCisNCis6Rk9VTkRGRUQNCisgIGVjaG8uDQorICBlY2hvLg0KKw0KKyAgc2V0IEZFRExJQlM9JUZFRCVcTGlicw0KKyAgc2V0IEZFRExJQlNVU0VSPSVGRURMSUJTJVxMaWJzVXNlcg0KKw0KKyAgaWYgZXhpc3QgIiVGRURMSUJTJSIgZ290byBJTlNUQUxMDQorICBlY2hvIFRoZSBGRUQgaW5zdGFsbGF0aW9uZGlyZWN0b3J5ICIlRkVEJSINCisgIGVjaG8gY29udGFpbnMgbm8gTGlicyBzdWJkaXJlY3RvcnkuIFRoaXMgaXMgd2VpcmQhDQorICBlY2hvLg0KKyAgZWNobyBJbnN0YWxsYXRpb24gaXMgYWJvcnRlZCwgc29ycnkuLi4NCisgIGdvdG8gRU5ESVQNCisNCisNCis6SU5TVEFMTA0KKyAgZWNobyBJIGFtIGFib3V0IHRvIGluc3RhbGwgJVBBQ0tBR0VOQU1FJQ0KKyAgZWNobyBpbnRvIGRpcmVjdG9yeSAlRkVETElCU1VTRVIlDQorICBlY2hvLg0KKyAgZWNobyAgIFByZXNzICdlbnRlcicgIHRvIGxldCBtZSBkbyBteSB0aGluZw0KKyAgZWNobyAgIFByZXNzICdjdHJsLWMnIHRvIHN0b3AgbWUNCisgIHBhdXNlID5udWwNCisgIGVjaG8uDQorICBlY2hvIEluc3RhbGxpbmcuLi4NCisNCisNCis6UkVTRVRfUkVBRE9OTFkNCisgIGVjaG8uDQorICBlY2hvICAgUmVtb3ZpbmcgUmVhZE9ubHkgYXR0cmlidXRlcw0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXNcQ3JvdXRpbmUuYyIgICAgID5udWwNCisgIGF0dHJpYiAtUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xNb2R1bGVzXFBvcnQuYyIgICAgICAgICA+bnVsDQorICBhdHRyaWIgLVIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlc1xMaXN0LmMiICAgICAgICAgPm51bA0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXNcUXVldWUuYyIgICAgICAgID5udWwNCisgIGF0dHJpYiAtUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xNb2R1bGVzXFRhc2tzLmMiICAgICAgICA+bnVsDQorICBhdHRyaWIgLVIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcRHJpdmVyc1xUaWNrXFRpY2suYyIgICAgPm51bA0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXERyaXZlcnNcVGlja1xpc3JUaWNrLmMiID5udWwNCisgIGF0dHJpYiAtUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFBvcnRtYWNyby5oIiAgICA+bnVsDQorICBhdHRyaWIgLVIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxDcm91dGluZS5oIiAgICAgPm51bA0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcTGlzdC5oIiAgICAgICAgID5udWwNCisgIGF0dHJpYiAtUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFBvcnRhYmxlLmgiICAgICA+bnVsDQorICBhdHRyaWIgLVIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxQcm9qZGVmcy5oIiAgICAgPm51bA0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcUXVldWUuaCIgICAgICAgID5udWwNCisgIGF0dHJpYiAtUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFNlbXBoci5oIiAgICAgICA+bnVsDQorICBhdHRyaWIgLVIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxUYXNrLmgiICAgICAgICAgPm51bA0KKyAgYXR0cmliIC1SICIlRkVETElCU1VTRVIlXEZyZWVSVE9TLmgiICAgICAgICAgICAgICAgICAgICAgICAgID5udWwNCisgIGVjaG8gICBEb25lDQorDQorOkNSRUFURV9ESVJFQ1RPUklFUw0KKyAgZWNoby4NCisgIGVjaG8gICBDcmVhdGluZyBkaXJlY3RvcmllcyAoaWYgbmVjZXNzYXJ5KS4uLg0KKyAgaWYgbm90IGV4aXN0ICIlRkVETElCU1VTRVIlIiAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIgIiVGRURMSUJTVVNFUiUiDQorICBpZiBub3QgZXhpc3QgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1MiICAgICAgICAgICAgICBta2RpciAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPUyINCisgIGlmIG5vdCBleGlzdCAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xEcml2ZXJzIiAgICAgIG1rZGlyICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXERyaXZlcnMiDQorICBpZiBub3QgZXhpc3QgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcRHJpdmVyc1xUaWNrIiBta2RpciAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xEcml2ZXJzXFRpY2siDQorICBpZiBub3QgZXhpc3QgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZSIgICAgICBta2RpciAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlIg0KKyAgaWYgbm90IGV4aXN0ICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXMiICAgICAgbWtkaXIgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlcyINCisgIGVjaG8gICBEb25lDQorDQorDQorICBlY2hvLg0KKyAgZWNobyAgIENvcHlpbmcgRmlsZXMuLi4NCis6Q09QWV9NT0RVTEVTDQorICBlY2hvICAgICBNb2R1bGVzLi4uDQorICBjb3B5IC9WIC9ZICJQb3J0LmMiICAgICAgICAgICAgICAgICAgICAgICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXNcUG9ydC5jIiAgICAgICAgID5udWwNCisgIGNvcHkgL1YgL1kgIi4uXC4uXC4uXENyb3V0aW5lLmMiICAgICAgICAgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlc1xDcm91dGluZS5jIiAgICAgPm51bA0KKyAgY29weSAvViAvWSAiLi5cLi5cLi5cTGlzdC5jIiAgICAgICAgICAgICAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xNb2R1bGVzXExpc3QuYyIgICAgICAgICA+bnVsDQorICBjb3B5IC9WIC9ZICIuLlwuLlwuLlxRdWV1ZS5jIiAgICAgICAgICAgICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXNcUXVldWUuYyIgICAgICAgID5udWwNCisgIGNvcHkgL1YgL1kgIi4uXC4uXC4uXFRhc2tzLmMiICAgICAgICAgICAgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlc1xUYXNrcy5jIiAgICAgICAgPm51bA0KKw0KKzpDT1BZX0RSSVZFUlMNCisgIGVjaG8gICAgIERyaXZlcnMuLi4NCisgIGNvcHkgL1YgL1kgIkRyaXZlcnNcVGlja1xUaWNrLmMiICAgICAgICAgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcRHJpdmVyc1xUaWNrXFRpY2suYyIgICAgPm51bA0KKyAgY29weSAvViAvWSAiRHJpdmVyc1xUaWNrXGlzclRpY2suYyIgICAgICAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xEcml2ZXJzXFRpY2tcaXNyVGljay5jIiA+bnVsDQorDQorOkNPUFlfSEVBREVSUw0KKyAgZWNobyAgICAgSGVhZGVycy4uLg0KKyAgY29weSAvViAvWSAicG9ydG1hY3JvLmgiICAgICAgICAgICAgICAgICAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFBvcnRtYWNyby5oIiAgICA+bnVsDQorICBjb3B5IC9WIC9ZICIuLlwuLlwuLlxpbmNsdWRlXENyb3V0aW5lLmgiICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcQ3JvdXRpbmUuaCIgICAgID5udWwNCisgIGNvcHkgL1YgL1kgIi4uXC4uXC4uXGluY2x1ZGVcTGlzdC5oIiAgICAgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxMaXN0LmgiICAgICAgICAgPm51bA0KKyAgY29weSAvViAvWSAiLi5cLi5cLi5caW5jbHVkZVxQb3J0YWJsZS5oIiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFBvcnRhYmxlLmgiICAgICA+bnVsDQorICBjb3B5IC9WIC9ZICIuLlwuLlwuLlxpbmNsdWRlXFByb2pkZWZzLmgiICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcUHJvamRlZnMuaCIgICAgID5udWwNCisgIGNvcHkgL1YgL1kgIi4uXC4uXC4uXGluY2x1ZGVcUXVldWUuaCIgICAgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxRdWV1ZS5oIiAgICAgICAgPm51bA0KKyAgY29weSAvViAvWSAiLi5cLi5cLi5caW5jbHVkZVxTZW1waHIuaCIgICAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFNlbXBoci5oIiAgICAgICA+bnVsDQorICBjb3B5IC9WIC9ZICIuLlwuLlwuLlxpbmNsdWRlXFRhc2suaCIgICAgICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcVGFzay5oIiAgICAgICAgID5udWwNCisgIGNvcHkgL1YgL1kgImFkZEZyZWVSVE9TLmgiICsgIi4uXC4uXC4uXGluY2x1ZGVcRnJlZVJUT1MuaCIgIiVGRURMSUJTVVNFUiVcRnJlZVJUT1MuaCIgICAgICAgPm51bA0KKw0KKw0KKyAgZWNobyAgIERvbmUNCisNCisNCis6U0VUX1JFQURPTkxZDQorICBlY2hvLg0KKyAgZWNobyAgIFNldHRpbmcgZmlsZXMgdG8gUmVhZE9ubHkNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xNb2R1bGVzXFBvcnQuYyIgICAgICAgICA+bnVsDQorICBhdHRyaWIgK1IgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlc1xDcm91dGluZS5jIiAgICAgPm51bA0KKyAgYXR0cmliICtSICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXE1vZHVsZXNcTGlzdC5jIiAgICAgICAgID5udWwNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xNb2R1bGVzXFF1ZXVlLmMiICAgICAgICA+bnVsDQorICBhdHRyaWIgK1IgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcTW9kdWxlc1xUYXNrcy5jIiAgICAgICAgPm51bA0KKyAgYXR0cmliICtSICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXERyaXZlcnNcVGlja1xUaWNrLmMiICAgID5udWwNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xEcml2ZXJzXFRpY2tcaXNyVGljay5jIiA+bnVsDQorICBhdHRyaWIgK1IgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxQb3J0bWFjcm8uaCIgICAgPm51bA0KKyAgYXR0cmliICtSICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcQ3JvdXRpbmUuaCIgICAgID5udWwNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXExpc3QuaCIgICAgICAgICA+bnVsDQorICBhdHRyaWIgK1IgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxQb3J0YWJsZS5oIiAgICAgPm51bA0KKyAgYXR0cmliICtSICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcUHJvamRlZnMuaCIgICAgID5udWwNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxsaWJGcmVlUlRPU1xJbmNsdWRlXFF1ZXVlLmgiICAgICAgICA+bnVsDQorICBhdHRyaWIgK1IgIiVGRURMSUJTVVNFUiVcbGliRnJlZVJUT1NcSW5jbHVkZVxTZW1waHIuaCIgICAgICAgPm51bA0KKyAgYXR0cmliICtSICIlRkVETElCU1VTRVIlXGxpYkZyZWVSVE9TXEluY2x1ZGVcVGFzay5oIiAgICAgICAgID5udWwNCisgIGF0dHJpYiArUiAiJUZFRExJQlNVU0VSJVxGcmVlUlRPUy5oIiAgICAgICAgICAgICAgICAgICAgICAgICA+bnVsDQorICBlY2hvICAgRG9uZQ0KKw0KKw0KKzpGSU5JU0hFRA0KKyAgZWNoby4NCisgIGVjaG8gVGhlIGluc3RhbGxhdGlvbiBvZiAlUEFDS0FHRU5BTUUlIGlzIGNvbXBsZXRlZC4NCisgIGVjaG8uDQorICBlY2hvIFBsZWFzZSByZXZpZXcgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYXMgYWRkaXRpb25hbCBsaWJyYXJpZXMNCisgIGVjaG8gIGFuZCBmZWRDL3dpekMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBtYXkgYmUgbmVlZGVkIGZvciBGcmVlUlRPUw0KKyAgZWNobyAgdG8gZnVuY3Rpb24gY29ycmVjdGx5Lg0KKw0KKyAgZ290byBFTkRJVA0KKw0KKw0KKzpFTkRJVA0KKyAgZWNoby4NCisgIGVjaG8uDQorICBlY2hvIFByZXNzICdlbnRlcicgdG8gY2xvc2UgdGhpcyB3aW5kb3cNCisgIHBhdXNlID5udWwNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvV2l6Qy9QSUMxOC9hZGRGcmVlUlRPUy5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvYWRkRnJlZVJUT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzRmNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvYWRkRnJlZVJUT1MuaApAQCAtMCwwICsxLDkyIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKg0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisNCitDaGFuZ2VzIGZyb20gVjMuMC4xDQorDQorQ2hhbmdlcyBmcm9tIFY0LjAuMQ0KKyAgICBVc2VsaWIgcHJhZ21hIGFkZGVkIGZvciBDcm91dGluZS5jDQorKi8NCisNCisvKg0KKyAqIFRoZSBpbnN0YWxsYXRpb24gc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBwcmVwZW5kIHRoaXMgZmlsZSB0byB0aGUgZGVmYXVsdCBGcmVlUlRPUy5oLg0KKyAqLw0KKw0KKyNpZm5kZWYgV0laQ19GUkVFUlRPU19IDQorI2RlZmluZSBXSVpDX0ZSRUVSVE9TX0gNCisNCisjcHJhZ21hCW5vaGVhcA0KKyNwcmFnbWEgd2l6Y3BwIGV4cGFuZG5sICAgb24NCisjcHJhZ21hIHdpemNwcCBzZWFyY2hwYXRoICIkX19QQVRITkFNRV9fL2xpYkZyZWVSVE9TL0luY2x1ZGUvIg0KKyNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9Dcm91dGluZS5jIg0KKyNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9UYXNrcy5jIg0KKyNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9RdWV1ZS5jIg0KKyNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9MaXN0LmMiDQorI3ByYWdtYSB3aXpjcHAgdXNlbGliICAgICAiJF9fUEFUSE5BTUVfXy9saWJGcmVlUlRPUy9Nb2R1bGVzL1BvcnQuYyINCisNCisjZW5kaWYJLyogV0laQ19GUkVFUlRPU19IICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4N2YyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0LmMKQEAgLTAsMCArMSwzNDcgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKy8qDQorQ2hhbmdlcyBmcm9tIFYzLjIuMQ0KKwkrIENhbGxSZXR1cm4gRGVwdGggaW5jcmVhc2VkIGZyb20gOCB0byAxMCBsZXZlbHMgdG8gYWNjb21vZGF0ZSB3aXpDL2ZlZEMgVjEyLg0KKwkNCitDaGFuZ2VzIGZyb20gVjMuMi4wDQorCSsgVEJMUFRSVSBpcyBub3cgaW5pdGlhbGlzZWQgdG8gemVybyBkdXJpbmcgdGhlIGluaXRpYWwgc3RhY2sgY3JlYXRpb24gb2YgYSBuZXcgdGFzay4gVGhpcyBzb2x2ZXMNCisJYW4gZXJyb3Igb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiA2NGtCIFJPTS4NCisNCitDaGFuZ2VzIGZyb20gVjMuMC4wDQorCSsgdWNDcml0aWNhbE5lc3RpbmcgaXMgbm93IGluaXRpYWxpc2VkIHRvIDB4N0YgdG8gcHJldmVudCBpbnRlcnJ1cHRzIGZyb20gYmVpbmcNCisgICAgICAgICAgaGFuZGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4wLjENCisqLw0KKw0KKy8qIFNjaGVkdWxlciBpbmNsdWRlIGZpbGVzLiAqLw0KKyNpbmNsdWRlIDxGcmVlUlRPUy5oPg0KKyNpbmNsdWRlIDx0YXNrLmg+DQorDQorI2luY2x1ZGUgPG1hbGxvYy5oPg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFdpekMgUElDMTggcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvDQorICoga25vdyBhbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4NCisgKi8NCit0eXBlZGVmIHZvaWQgdHNrVENCOw0KK2V4dGVybiB2b2xhdGlsZSB0c2tUQ0IgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQorDQorLyoNCisgKiBEZWZpbmUgbWluaW1hbC1zdGFjayBjb25zdGFudHMNCisgKiAtLS0tLQ0KKyAqIEZTUidzOg0KKyAqCQlTVEFUVVMsIFdSRUcsIEJTUiwgUFJPREgsIFBST0RMLCBGU1IwSCwgRlNSMEwsDQorICoJCUZTUjFILCBGU1IxTCxUQUJMQVQsIChUQkxQVFJVKSwgVEJMUFRSSCwgVEJMUFRSTCwNCisgKgkJKFBDTEFUVSksIFBDTEFUSA0KKyAqCQlzZnIncyB3aXRoaW4gcGFyZW50aGVzaXMgb25seSBvbiBkZXZpY2VzID4gNjRrQg0KKyAqIC0tLS0tDQorICogQ2FsbC9SZXR1cm4gc3RhY2s6DQorICoJCSAyIGJ5dGVzIHBlciBlbnRyeSBvbiBkZXZpY2VzIDw9IDY0a0INCisgKgkJIDMgYnl0ZXMgcGVyIGVudHJ5IG9uIGRldmljZXMgPiAgNjRrQg0KKyAqIC0tLS0tDQorICogT3RoZXIgYnl0ZXM6DQorICoJCSAyIGJ5dGVzOiBGdW5jdGlvblBhcmFtZXRlciBmb3IgaW5pdGlhbCB0YXNrY29kZQ0KKyAqCQkgMSBieXRlIDogTnVtYmVyIG9mIGVudHJpZXMgb24gY2FsbC9yZXR1cm4gc3RhY2sNCisgKgkJIDEgYnl0ZSA6IHVjQ3JpdGljYWxOZXN0aW5nDQorICoJCTE2IGJ5dGVzOiBGcmVlIHNwYWNlIG9uIHN0YWNrDQorICovDQorI2lmIF9ST01TSVpFID4gMHg4MDAwDQorCSNkZWZpbmUgcG9ydFNUQUNLX0ZTUl9CWVRFUwkJCQkoIDE1ICkNCisJI2RlZmluZSBwb3J0U1RBQ0tfQ0FMTFJFVFVSTl9FTlRSWV9TSVpFCSggIDMgKQ0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydFNUQUNLX0ZTUl9CWVRFUwkJCQkoIDEzICkNCisJI2RlZmluZSBwb3J0U1RBQ0tfQ0FMTFJFVFVSTl9FTlRSWV9TSVpFCSggIDIgKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgcG9ydFNUQUNLX01JTklNQUxfQ0FMTFJFVFVSTl9ERVBUSAkoIDEwICkNCisjZGVmaW5lIHBvcnRTVEFDS19PVEhFUl9CWVRFUwkJCQkoIDIwICkNCisNCit1bnNpZ25lZCBzaG9ydCB1c0NhbGNNaW5TdGFja1NpemUJCT0gMDsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFdlIGluaXRpYWxpc2UgdWNDcml0aWNhbE5lc3RpbmcgdG8gdGhlIG1pZGRsZSB2YWx1ZSBhbiANCisgKiB1bnNpZ25lZCBjaGFyIGNhbiBjb250YWluLiBUaGlzIHdheSBwb3J0RU5URVJfQ1JJVElDQUwoKQ0KKyAqIGFuZCBwb3J0RVhJVF9DUklUSUNBTCgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBpbnRlcnJ1cHRzDQorICogYmVpbmcgZW5hYmxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydHMuDQorICovDQorcmVnaXN0ZXIgdW5zaWduZWQgY2hhciB1Y0NyaXRpY2FsTmVzdGluZyA9IDB4N0Y7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSBuZXcgdGFzay4NCisgKiBTZWUgcG9ydFNBVkVfQ09OVEVYVCBtYWNybyBmb3IgZGVzY3JpcHRpb24uIA0KKyAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQordW5zaWduZWQgY2hhciB1Y1NjcmF0Y2g7DQorCS8qDQorCSAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgUkFNYXJlYSBpbiBwYWdlIDAgdXNlZCBieSB0aGUgY29tcGlsZXINCisJICogV2UgZG8gdGhpcyBoZXJlIGFscmVhZHkgdG8gYXZvaWQgVy1yZWdpc3RlciBjb25mbGljdHMuDQorCSAqLw0KKwlfUHJhZ21hKCJhc20iKQ0KKwkJbW92bHcJT1ZFUkhFQURQQUdFMC1MT0NPUFRTSVpFK01BWExPQ09QVFNJWkUNCisJCW1vdndmCVBST0RMLEFDQ0VTUwkJOyBQUk9ETCBpcyB1c2VkIGFzIHRlbXAgcmVnaXN0ZXINCisJX1ByYWdtYSgiYXNtZW5kIikNCisJdWNTY3JhdGNoID0gUFJPREw7DQorDQorCS8qDQorCSAqIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCSAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4NCisJICovDQorLy8JKnB4VG9wT2ZTdGFjay0tCT0gMHgxMTsNCisvLwkqcHhUb3BPZlN0YWNrLS0gPSAweDIyOw0KKy8vCSpweFRvcE9mU3RhY2stLSA9IDB4MzM7DQorDQorCS8qDQorCSAqIFNpbXVsYXRlIGhvdyB0aGUgc3RhY2sgd291bGQgbG9vayBhZnRlciBhIGNhbGwgdG8gdlBvcnRZaWVsZCgpDQorCSAqIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuDQorCSAqLw0KKw0KKwkvKg0KKwkgKiBGaXJzdCBzdG9yZSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gIFRoaXMgaXMgd2hlcmUgdGhlIHRhc2sgZXhwZWN0cw0KKwkgKiB0byBmaW5kIHRoZW0gd2hlbiBpdCBzdGFydHMgcnVubmluZy4NCisJICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAoICgoIHVuc2lnbmVkIHNob3J0ICkgcHZQYXJhbWV0ZXJzID4+IDgpICYgMHgwMGZmICk7DQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAoICAoIHVuc2lnbmVkIHNob3J0ICkgcHZQYXJhbWV0ZXJzICAgICAgICYgMHgwMGZmICk7DQorDQorCS8qDQorCSAqIE5leHQgYXJlIGFsbCB0aGUgcmVnaXN0ZXJzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuDQorCSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgxMTsgLyogU1RBVFVTLiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHgyMjsgLyogV1JFRy4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MzM7IC8qIEJTUi4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4NDQ7IC8qIFBST0RILiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHg1NTsgLyogUFJPREwuICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDY2OyAvKiBGU1IwSC4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4Nzc7IC8qIEZTUjBMLiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHg4ODsgLyogRlNSMUguICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDk5OyAvKiBGU1IxTC4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4QUE7IC8qIFRBQkxBVC4gKi8NCisjaWYgX1JPTVNJWkUgPiAweDgwMDANCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDA7IC8qIFRCTFBUUlUuICovDQorI2VuZGlmDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAweENDOyAvKiBUQkxQVFJILiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgMHhERDsgLyogVEJMUFRSTC4gKi8NCisjaWYgX1JPTVNJWkUgPiAweDgwMDANCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RUU7IC8qIFBDTEFUVS4gKi8NCisjZW5kaWYNCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RkY7IC8qIFBDTEFUSC4gKi8NCisNCisJLyoNCisJICogTmV4dCB0aGUgY29tcGlsZXIncyBzY3JhdGNoc3BhY2UuDQorCSAqLw0KKwl3aGlsZSh1Y1NjcmF0Y2gtLSA+IDApDQorCXsNCisJCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAwOw0KKwl9DQorCQ0KKwkvKg0KKwkgKiBUaGUgb25seSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyBzbyBmYXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgZW50cnkuDQorCSAqIFRoZSBvcmRlciBpcyBUT1NVL1RPU0gvVE9TTC4gRm9yIGRldmljZXMgPiA2NGtCLCBUT1NVIGlzIHB1dCBvbiB0aGUgDQorCSAqIHN0YWNrLCB0b28uIFRPU1UgaXMgYWx3YXlzIHdyaXR0ZW4gYXMgemVybyBoZXJlIGJlY2F1c2Ugd2l6QyBkb2VzIG5vdCBhbGxvdw0KKwkgKiBmdW5jdGlvbnBvaW50ZXJzIHRvIHBvaW50IGFib3ZlIDY0a0IgaW4gUk9NLg0KKwkgKi8NCisjaWYgX1JPTVNJWkUgPiAweDgwMDANCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApIDA7DQorI2VuZGlmDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAoICggKCB1bnNpZ25lZCBzaG9ydCApIHB4Q29kZSA+PiA4ICkgJiAweDAwZmYgKTsNCisJKnB4VG9wT2ZTdGFjay0tID0gKCBwb3J0U1RBQ0tfVFlQRSApICggKCAgIHVuc2lnbmVkIHNob3J0ICkgcHhDb2RlICAgICAgICAmIDB4MDBmZiApOw0KKw0KKwkvKg0KKwkgKiBTdG9yZSB0aGUgbnVtYmVyIG9mIHJldHVybiBhZGRyZXNzZXMgb24gdGhlIGhhcmR3YXJlIHN0YWNrLg0KKwkgKiBTbyBmYXIgb25seSB0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeSBwb2ludC4NCisJICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggcG9ydFNUQUNLX1RZUEUgKSAxOw0KKw0KKwkvKg0KKwkgKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgd2l6QyBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KKwkgKiBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZXJlZm9yZSB0aGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCANCisJICogdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQorCSAqIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCisJICogYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8uDQorCSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIHBvcnRTVEFDS19UWVBFICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsJDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3Vuc2lnbmVkIHNob3J0IHVzUG9ydENBTENVTEFURV9NSU5JTUFMX1NUQUNLX1NJWkUoIHZvaWQgKQ0KK3sNCisJLyoNCisJICogRmV0Y2ggdGhlIHNpemUgb2YgY29tcGlsZXIncyBzY3JhdGNoc3BhY2UuDQorCSAqLw0KKwlfUHJhZ21hKCJhc20iKQ0KKwkJbW92bHcJT1ZFUkhFQURQQUdFMC1MT0NPUFRTSVpFK01BWExPQ09QVFNJWkUNCisJCW1vdmxiCXVzQ2FsY01pblN0YWNrU2l6ZT4+OA0KKwkJbW92d2YJdXNDYWxjTWluU3RhY2tTaXplLEJBTktFRA0KKwlfUHJhZ21hKCJhc21lbmQiKQ0KKw0KKwkvKg0KKwkgKiBBZGQgbWluaW11bSBuZWVkZWQgc3RhY2tzcGFjZQ0KKwkgKi8NCisJdXNDYWxjTWluU3RhY2tTaXplCSs9CSggcG9ydFNUQUNLX0ZTUl9CWVRFUyApDQorCQkrCSggcG9ydFNUQUNLX01JTklNQUxfQ0FMTFJFVFVSTl9ERVBUSCAqIHBvcnRTVEFDS19DQUxMUkVUVVJOX0VOVFJZX1NJWkUgKQ0KKwkJKwkoIHBvcnRTVEFDS19PVEhFUl9CWVRFUyApOw0KKw0KKwlyZXR1cm4odXNDYWxjTWluU3RhY2tTaXplKTsNCit9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCWV4dGVybiB2b2lkIHBvcnRTZXR1cFRpY2soIHZvaWQgKTsNCisNCisJLyoNCisJICogU2V0dXAgYSB0aW1lciBmb3IgdGhlIHRpY2sgSVNSIGZvciB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuDQorCSAqLw0KKwlwb3J0U2V0dXBUaWNrKCk7IA0KKw0KKwkvKg0KKwkgKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRvIHJ1bi4NCisJICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisNCisJLyoNCisJICogVGhpcyBwb2ludCBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCBkdXJpbmcgZXhlY3V0aW9uLg0KKwkgKi8NCisJcmV0dXJuIHBkVFJVRTsNCit9DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKg0KKwkgKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBzY2hlZHVsZXIgZm9yIHRoZSBQSUMgcG9ydCB3aWxsIGdldCBzdG9wcGVkDQorCSAqIG9uY2UgcnVubmluZy4gV2hlbiBjYWxsZWQgYSByZXNldCBpcyBkb25lIHdoaWNoIGlzIHByb2JhYmx5IHRoZQ0KKwkgKiBtb3N0IHZhbGlkIGFjdGlvbi4NCisJICovDQorCV9QcmFnbWEoYXNtbGluZSByZXNldCk7DQorfQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0aWNrIGNvbnRleHQgc3dpdGNoLA0KKyAqIGJ1dCBkb2VzIG5vdCBpbmNyZW1lbnQgdGhlIHRpY2sgY291bnQuICBJdCBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUNCisgKiB0aWNrIGNvbnRleHQgc3dpdGNoIGluIGhvdyBpdCBzdG9yZXMgdGhlIHN0YWNrIG9mIGEgdGFzay4NCisgKi8NCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJLyoNCisJICogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KKwkgKi8NCisJcG9ydFNBVkVfQ09OVEVYVCggcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VEICk7DQorDQorCS8qDQorCSAqIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLg0KKwkgKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorDQorCS8qDQorCSAqIFN0YXJ0IGV4ZWN1dGluZyB0aGUgdGFzayB3ZSBoYXZlIGp1c3Qgc3dpdGNoZWQgdG8uDQorCSAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorfQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgKnB2UG9ydE1hbGxvYyggdW5zaWduZWQgc2hvcnQgdXNXYW50ZWRTaXplICkNCit7DQordm9pZCAqcHZSZXR1cm47DQorDQorCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwl7DQorCQlwdlJldHVybiA9IG1hbGxvYyggKCBtYWxsb2NfdCApIHVzV2FudGVkU2l6ZSApOw0KKwl9DQorCXhUYXNrUmVzdW1lQWxsKCk7DQorDQorCXJldHVybiBwdlJldHVybjsNCit9DQorDQordm9pZCB2UG9ydEZyZWUoIHZvaWQgKnB2ICkNCit7DQorCWlmKCBwdiApDQorCXsNCisJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJew0KKwkJCWZyZWUoIHB2ICk7DQorCQl9DQorCQl4VGFza1Jlc3VtZUFsbCgpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L3BvcnRtYWNyby5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL1dpekMvUElDMTgvcG9ydG1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhM2MxZAotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9XaXpDL1BJQzE4L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsNDU3IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiANCitDaGFuZ2VzIGZyb20gVjMuMC4wDQorDQorQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KKyovDQorI2lmbmRlZiBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCisNCisjaWYgIWRlZmluZWQoX1NFUklFUykgfHwgX1NFUklFUyAhPSAxOA0KKwkjZXJyb3IgIldpekMgc3VwcG9ydHMgRnJlZVJUT1Mgb24gdGhlIE1pY3JvY2hpcCBQSUMxOC1zZXJpZXMgb25seSINCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoUVVJQ0tDQUxMKSB8fCBRVUlDS0NBTEwgIT0gMQ0KKwkjZXJyb3IgIlF1aWNrQ2FsbCBtdXN0IGJlIGVuYWJsZWQgKHNlZSBQcm9qZWN0T3B0aW9ucy9PcHRpbWlzYXRpb25zKSINCisjZW5kaWYNCisNCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHBpYy5oPg0KKw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCXBvcnRGTE9BVA0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVuc2lnbmVkIGNoYXINCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KKw0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0U0hPUlQgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKQkoIDB4RkZGRiApDQorI2Vsc2UNCisJdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApCSggMHhGRkZGRkZGRiApDQorI2VuZGlmDQorDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkxDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBDb25zdGFudCB1c2VkIGZvciBjb250ZXh0IHN3aXRjaCBtYWNybyB3aGVuIHdlIHJlcXVpcmUgdGhlIGludGVycnVwdCANCisgKiBlbmFibGUgc3RhdGUgdG8gYmUgZm9yY2VkIHdoZW4gdGhlIGludGVycnVwdGVkIHRhc2sgaXMgc3dpdGNoZWQgYmFjayBpbi4NCisgKi8NCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRTX0ZPUkNFRAkJCQkoMHgwMSkNCisNCisvKg0KKyAqIENvbnN0YW50IHVzZWQgZm9yIGNvbnRleHQgc3dpdGNoIG1hY3JvIHdoZW4gd2UgcmVxdWlyZSB0aGUgaW50ZXJydXB0IA0KKyAqIGVuYWJsZSBzdGF0ZSB0byBiZSB1bmNoYW5nZWQgd2hlbiB0aGUgaW50ZXJydXB0ZWQgdGFzayBpcyBzd2l0Y2hlZCBiYWNrIGluLg0KKyAqLw0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VECQkJKDB4MDApDQorDQorLyogSW5pdGlhbCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXRlIGZvciBuZXdseSBjcmVhdGVkIHRhc2tzLiAgVGhpcyB2YWx1ZSBpcw0KKyAqIHVzZWQgd2hlbiBhIHRhc2sgc3dpdGNoZXMgaW4gZm9yIHRoZSBmaXJzdCB0aW1lLg0KKyAqLw0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVFNfSU5JVElBTF9TVEFURQkJKHBvcnRJTlRFUlJVUFRTX0ZPUkNFRCkNCisNCisvKg0KKyAqIE1hY3JvcyB0byBtb2RpZnkgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpbiBJTlRDT04uDQorICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJXA0KKwlkbwkJCQkJCQkJXA0KKwl7CQkJCQkJCQlcDQorCQliR0lFPTA7CQkJCQkJXA0KKwl9IHdoaWxlKGJHSUUpCS8vIE1pY3JvQ2hpcCByZWNvbW1lbmRzIHRoaXMgY2hlY2shDQorCQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCVwNCisJZG8JCQkJCQkJCVwNCisJewkJCQkJCQkJXA0KKwkJYkdJRT0xOwkJCQkJCVwNCisJfSB3aGlsZSgwKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwkNCisNCisvKg0KKyAqIENyaXRpY2FsIHNlY3Rpb24gbWFjcm9zLg0KKyAqLw0KK2V4dGVybiB1bnNpZ25lZCBwb3J0Q0hBUiB1Y0NyaXRpY2FsTmVzdGluZzsNCisNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1bnNpZ25lZCBwb3J0Q0hBUiApIDAgKQ0KKw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJXA0KKwlkbwkJCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qCQkJCQkJCQkJCQkJCQkJXA0KKwkJICogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVjQ3JpdGljYWxOZXN0aW5nCQkJXA0KKwkJICogY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiBJbmNyZW1lbnQJCQkJCQlcDQorCQkgKiB1Y0NyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93CQkJCQlcDQorCQkgKiBtYW55IHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gCQlcDQorCQkgKi8JCQkJCQkJCQkJCQkJCQlcDQorCQl1Y0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCisNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCVwNCisJZG8JCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWlmKHVjQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORykJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQlcDQorCQkJLyoJCQkJCQkJCQkJCQkJCVwNCisJCQkgKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYQkJXA0KKwkJCSAqIGNyaXRpY2FsIHNlY3Rpb24uCQkJCQkJCQkJXA0KKwkJCSAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCXVjQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qCQkJCQkJCQkJCQkJCQkJXA0KKwkJICogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuCQkJCVwNCisJCSAqIGludGVycnVwdHMgc2hvdWxkIGJlIHJlLWVuYWJsZWQuCQkJCQkJCVwNCisJCSAqLwkJCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1Y0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFRoZSBtaW5pbWFsIHN0YWNrc2l6ZSBpcyBjYWxjdWxhdGVkIG9uIHRoZSBmaXJzdCByZWZlcmVuY2Ugb2YNCisgKiBwb3J0TUlOSU1BTF9TVEFDS19TSVpFLiBTb21lIGlucHV0IHRvIHRoaXMgY2FsY3VsYXRpb24gaXMNCisgKiBjb21waWxldGltZSBkZXRlcm1pbmVkLCBvdGhlciBpbnB1dCBpcyBwb3J0LWRlZmluZWQgKHNlZSBwb3J0LmMpDQorICovDQorZXh0ZXJuIHVuc2lnbmVkIHBvcnRTSE9SVCB1c1BvcnRDQUxDVUxBVEVfTUlOSU1BTF9TVEFDS19TSVpFKCB2b2lkICk7DQorZXh0ZXJuIHVuc2lnbmVkIHBvcnRTSE9SVCB1c0NhbGNNaW5TdGFja1NpemU7DQorDQorI2RlZmluZSBwb3J0TUlOSU1BTF9TVEFDS19TSVpFCQkJCQlcDQorCSgodXNDYWxjTWluU3RhY2tTaXplID09IDApCQkJCQlcDQorCQk/IHVzUG9ydENBTENVTEFURV9NSU5JTUFMX1NUQUNLX1NJWkUoKQlcDQorCQk6IHVzQ2FsY01pblN0YWNrU2l6ZSApDQorDQorLyoNCisgKiBXaXpDIHVzZXMgYSBkb3duZ3Jvd2luZyBzdGFjaw0KKyAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFjcm8ncyB0aGF0IHB1c2hlcyBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRleHQgb2YgYSB0YXNrIG9udG8NCisgKiB0aGUgc3RhY2ssIHRoZW4gc2F2ZXMgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgaW50byB0aGUgVENCLiBUT1NVIGFuZCBUQkxQVFJVDQorICogYXJlIG9ubHkgc2F2ZWQvcmVzdG9yZWQgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiA2NGtCICgzMmsgV29yZHMpIFJPTS4NCisgKiANCisgKiBUaGUgc3RhY2twb2ludGVyIGlzIGhlbHQgYnkgV2l6QyBpbiBGU1IyIGFuZCBwb2ludHMgdG8gdGhlIGZpcnN0IGZyZWUgYnl0ZS4NCisgKiBXaXpDIHVzZXMgYSAiZG93bmdyb3dpbmciIHN0YWNrLiBUaGVyZSBpcyBubyBmcmFtZXBvaW50ZXIuDQorICoNCisgKiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBpbnRlcnJ1cHRzdGF0dXMgdXNpbmcgdWNDcml0aWNhbE5lc3RpbmcuIFdoZW4gdGhpcw0KKyAqIHZhbHVlIGVxdWFscyB6ZXJvLCBpbnRlcnJ1cHRzIGhhdmUgdG8gYmUgZW5hYmxlZCB1cG9uIGV4aXQgZnJvbSB0aGUNCisgKiBwb3J0UkVTVE9SRV9DT05URVhUIG1hY3JvLg0KKyAqIA0KKyAqIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYW4gSVNSIHRoZW4gdGhlIGludGVycnVwdCBlbmFibGUgYml0cyBtdXN0IGhhdmUgYmVlbiANCisgKiBzZXQgZm9yIHRoZSBJU1IgdG8gZXZlciBnZXQgY2FsbGVkLiAgVGhlcmVmb3JlIHdlIHdhbnQgdG8gc2F2ZQ0KKyAqIHVjQ3JpdGljYWxOZXN0aW5nIHdpdGggdmFsdWUgemVyby4gVGhpcyBtZWFucyB0aGUgaW50ZXJydXB0cyB3aWxsIGFnYWluIGJlDQorICogcmUtZW5hYmxlZCB3aGVuIHRoZSBpbnRlcnJ1cHRlZCB0YXNrIGlzIHN3aXRjaGVkIGJhY2sgaW4uDQorICoNCisgKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgbWFudWFsIGNvbnRleHQgc3dpdGNoIChpLmUuIGZyb20gYSBjYWxsIHRvIHlpZWxkKSwNCisgKiB0aGVuIHdlIHdhbnQgdG8ga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBvZiB1Y0NyaXRpYWxOZXN0aW5nIHNvIGl0IGlzIHJlc3RvcmVkDQorICogd2l0aCBpdHMgY3VycmVudCB2YWx1ZS4gVGhpcyBhbGxvd3MgYSB5aWVsZCBmcm9tIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uDQorICoNCisgKiBUaGUgY29tcGlsZXIgdXNlcyBzb21lIGxvY2F0aW9ucyBhdCB0aGUgYm90dG9tIG9mIFJBTSBmb3IgdGVtcG9yYXJ5DQorICogc3RvcmFnZS4gVGhlIGNvbXBpbGVyIG1heSBhbHNvIGhhdmUgYmVlbiBpbnN0cnVjdGVkIHRvIG9wdGltaXplDQorICogZnVuY3Rpb24tcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRvIGdsb2JhbCBzdG9yYWdlLiBUaGUgY29tcGlsZXINCisgKiB1c2VzIGFuIGFyZWEgY2FsbGVkIExvY09wdCBmb3IgdGhpcyB3aXpDIGZlYXR1cmUuDQorICogVGhlIHRvdGFsIG92ZXJoZWFkc3RvcmFnZSBoYXMgdG8gYmUgc2F2ZWQgaW4gaXQncyBlbnRpcmV0eSBhcyBwYXJ0IG9mDQorICogYSB0YXNrIGNvbnRleHQuIFRoZXNlIG1hY3JvJ3Mgc3RvcmUvcmVzdG9yZSBmcm9tIGRhdGEgYWRkcmVzcyAweDAwMDAgdG8NCisgKiAoT1ZFUkhFQURQQUdFMC1MT0NPUFRTSVpFK01BWExPQ09QVFNJWkUgLSAxKS4NCisgKiBPVkVSSEVBRFBBR0UwLCBMT0NPUFRTSVpFIGFuZCBNQVhMT0NPUFRTSVpFIGFyZSBjb21waWxlci1nZW5lcmF0ZWQNCisgKiBhc3NlbWJsZXIgZGVmaW5pdGlvbnMuDQorICovDQorDQorI2RlZmluZQlwb3J0U0FWRV9DT05URVhUKCB1Y0ludGVycnVwdEZvcmNlZCApCQkJCQkJXA0KKwlkbwkJCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCV9QcmFnbWEoImFzbSIpCQkJCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IFB1c2ggdGhlIHJlbGV2YW50IFNGUidzIG9udG8gdGhlIHRhc2sncyBzdGFjawkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYgICBTVEFUVVMsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJV1JFRyxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglCU1IsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJPREgsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJPREwsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJRlNSMEgsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJRlNSMEwsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJRlNSMUgsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJRlNSMUwsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJbW92ZmYJVEFCTEFULFBPU1RERUMyCQkJCQkJCQkJXA0KKwkJCWlmIF9fUk9NU0laRSA+IDB4ODAwMAkJCQkJCQkJCVwNCisJCQkJbW92ZmYJVEJMUFRSVSxQT1NUREVDMgkJCQkJCQlcDQorCQkJZW5kaWYJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVRCTFBUUkgsUE9TVERFQzIJCQkJCQkJCVwNCisJCQltb3ZmZglUQkxQVFJMLFBPU1RERUMyCQkJCQkJCQlcDQorCQkJaWYgX19ST01TSVpFID4gMHg4MDAwCQkJCQkJCQkJXA0KKwkJCQltb3ZmZglQQ0xBVFUsUE9TVERFQzIJCQkJCQkJCVwNCisJCQllbmRpZgkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJUENMQVRILFBPU1RERUMyCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IFN0b3JlIHRoZSBjb21waWxlci1zY3JhdGNoLWFyZWEgYXMgZGVzY3JpYmVkIGFib3ZlLglcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmx3CU9WRVJIRUFEUEFHRTAtTE9DT1BUU0laRStNQVhMT0NPUFRTSVpFCQkJXA0KKwkJCWNscmYJRlNSMEwsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCWNscmYJRlNSMEgsQUNDRVNTCQkJCQkJCQkJXA0KKwkJX3J0b3NfUzE6CQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQT1NUSU5DMCxQT1NUREVDMgkJCQkJCQkJXA0KKwkJCWRlY2ZzeglXUkVHLFcsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCVNNQVJUSlVNUCBfcnRvc19TMQkJCQkJCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCTsgU2F2ZSB0aGUgcGljIGNhbGwvcmV0dXJuLXN0YWNrIGJlbG9uZ2luZyB0byB0aGUJCVwNCisJCQk7IGN1cnJlbnQgdGFzayBieSBjb3B5aW5nIGl0IHRvIHRoZSB0YXNrJ3Mgc29mdHdhcmUtCVwNCisJCQk7IHN0YWNrLiBXZSBzYXZlIHRoZSBoYXJkd2FyZSBzdGFjayBwb2ludGVyICh3aGljaAkJXA0KKwkJCTsgaXMgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgb24gdGhlIHN0YWNrKSBpbiB0aGUJCVwNCisJCQk7IFctcmVnaXN0ZXIgZmlyc3QgYmVjYXVzZSB3ZSBuZWVkIGl0IGxhdGVyIGFuZCBpdAkJXA0KKwkJCTsgaXMgbW9kaWZpZWQgaW4gdGhlIHNhdmUtbG9vcCBieSBleGVjdXRpbmcgcG9wJ3MuCQlcDQorCQkJOyBBZnRlciB0aGUgbG9vcCB0aGUgVy1yZWdpc3RlciBpcyBzdG9yZWQgb24gdGhlCQlcDQorCQkJOyBzdGFjaywgdG9vLgkJCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmCVNUS1BUUixXLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQliegkJX3J0b3NfczMJCQkJCQkJCQkJXA0KKwkJX3J0b3NfUzI6CQkJCQkJCQkJCQkJCVwNCisJCQlpZiBfX1JPTVNJWkUgPiAweDgwMDAJCQkJCQkJCQlcDQorCQkJCW1vdmZmCVRPU1UsUE9TVERFQzIJCQkJCQkJCVwNCisJCQllbmRpZgkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJVE9TSCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglUT1NMLFBPU1RERUMyCQkJCQkJCQkJXA0KKwkJCXBvcAkJCQkJCQkJCQkJCQkJXA0KKwkJCXRzdGZzeglTVEtQVFIsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCVNNQVJUSlVNUCBfcnRvc19TMgkJCQkJCQkJCQlcDQorCQlfcnRvc19zMzoJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdndmCVBPU1RERUMyLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBOZXh0IHRoZSB2YWx1ZSBmb3IgdWNDcml0aWNhbE5lc3RpbmcgdXNlZCBieSB0aGUJCVwNCisJCQk7IHRhc2sgaXMgc3RvcmVkIG9uIHRoZSBzdGFjay4gV2hlbgkJCQkJCVwNCisJCQk7ICh1Y0ludGVycnVwdEZvcmNlZCA9PSBwb3J0SU5URVJSVVBUU19GT1JDRUQpLCB3ZSBzYXZlCVwNCisJCQk7IGl0IGFzIDAgKHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcpLgkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJaWYgdWNJbnRlcnJ1cHRGb3JjZWQgPT0gcG9ydElOVEVSUlVQVFNfRk9SQ0VECQkJXA0KKwkJCQljbHJmIFBPU1RERUMyLEFDQ0VTUwkJCQkJCQkJXA0KKwkJCWVsc2UJCQkJCQkJCQkJCQkJXA0KKwkJCQltb3ZmZgl1Y0NyaXRpY2FsTmVzdGluZyxQT1NUREVDMgkJCQkJXA0KKwkJCWVuZGlmCQkJCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBTYXZlIHRoZSBuZXcgdG9wIG9mIHRoZSBzb2Z0d2FyZSBzdGFjayBpbiB0aGUgVENCLglcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCXB4Q3VycmVudFRDQixGU1IwTAkJCQkJCQkJXA0KKwkJCW1vdmZmCXB4Q3VycmVudFRDQisxLEZTUjBICQkJCQkJCVwNCisJCQltb3ZmZglGU1IyTCxQT1NUSU5DMAkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IySCxQT1NUSU5DMAkJCQkJCQkJCVwNCisJCV9QcmFnbWEoImFzbWVuZCIpCQkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qDQorICogVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBwb3J0U0FWRV9DT05URVhULg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCVwNCisJZG8JCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCV9QcmFnbWEoImFzbSIpCQkJCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IFNldCBGU1IwIHRvIHBvaW50IHRvIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrLgkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglweEN1cnJlbnRUQ0IsRlNSMEwJCQkJCQkJCVwNCisJCQltb3ZmZglweEN1cnJlbnRUQ0IrMSxGU1IwSAkJCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCTsgRGUtcmVmZXJlbmNlIEZTUjAgdG8gc2V0IHRoZSBhZGRyZXNzIGl0IGhvbGRzIGludG8JXA0KKwkJCTsgRlNSMiAoaS5lLiAqKCBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayApICkuIEZTUjIJXA0KKwkJCTsgaXMgdXNlZCBieSB3aXpDIGFzIHN0YWNrcG9pbnRlci4JCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBPU1RJTkMwLEZTUjJMCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBPU1RJTkMwLEZTUjJICQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IE5leHQsIHRoZSB2YWx1ZSBmb3IgdWNDcml0aWNhbE5lc3RpbmcgdXNlZCBieSB0aGUJCVwNCisJCQk7IHRhc2sgaXMgcmV0cmlldmVkIGZyb20gdGhlIHN0YWNrLgkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMix1Y0NyaXRpY2FsTmVzdGluZwkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBSZWJ1aWxkIHRoZSBwaWMgY2FsbC9yZXR1cm4tc3RhY2suIFRoZSBudW1iZXIgb2YJCVwNCisJCQk7IHJldHVybiBhZGRyZXNzZXMgaXMgdGhlIG5leHQgaXRlbSBvbiB0aGUgdGFzayBzdGFjay4JXA0KKwkJCTsgU2F2ZSB0aGlzIG51bWJlciBpbiBQUk9ETC4gVGhlbiBmZXRjaCB0aGUgYWRkcmVzc2VzCVwNCisJCQk7IGFuZCBzdG9yZSB0aGVtIG9uIHRoZSBoYXJkd2FyZXN0YWNrLgkJCQkJXA0KKwkJCTsgVGhlIGRhdGFzaGVldHMgc2F5IHdlIGNhbid0IHVzZSBtb3ZmZiBoZXJlLi4uCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLFBST0RMCS8vIFVzZSBQUk9ETCBhcyB0ZW1wcmVnaXN0ZXIJXA0KKwkJCWNscmYJU1RLUFRSLEFDQ0VTUwkJCQkJCQkJCVwNCisJCV9ydG9zX1IxOgkJCQkJCQkJCQkJCQlcDQorCQkJcHVzaAkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZglQUkVJTkMyLFcsQUNDRVNTCQkJCQkJCQlcDQorCQkJbW92d2YJVE9TTCxBQ0NFU1MJCQkJCQkJCQkJXA0KKwkJCW1vdmYJUFJFSU5DMixXLEFDQ0VTUwkJCQkJCQkJXA0KKwkJCW1vdndmCVRPU0gsQUNDRVNTCQkJCQkJCQkJCVwNCisJCQlpZiBfX1JPTVNJWkUgPiAweDgwMDAJCQkJCQkJCQlcDQorCQkJCW1vdmYJUFJFSU5DMixXLEFDQ0VTUwkJCQkJCQlcDQorCQkJCW1vdndmCVRPU1UsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCWVsc2UJCQkJCQkJCQkJCQkJXA0KKwkJCQljbHJmCVRPU1UsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCWVuZGlmCQkJCQkJCQkJCQkJCVwNCisJCQlkZWNmc3oJUFJPREwsRixBQ0NFU1MJCQkJCQkJCQlcDQorCQkJU01BUlRKVU1QIF9ydG9zX1IxCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBSZXN0b3JlIHRoZSBjb21waWxlcidzIHdvcmtpbmcgc3RvcmFnZSBhcmVhIHRvIHBhZ2UgMAlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmx3CU9WRVJIRUFEUEFHRTAtTE9DT1BUU0laRStNQVhMT0NPUFRTSVpFCQkJXA0KKwkJCW1vdndmCUZTUjBMLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQljbHJmCUZTUjBILEFDQ0VTUwkJCQkJCQkJCVwNCisJCV9ydG9zX1IyOgkJCQkJCQkJCQkJCQlcDQorCQkJZGVjZglGU1IwTCxGLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLElOREYwCQkJCQkJCQkJXA0KKwkJCXRzdGZzeglGU1IwTCxBQ0NFU1MJCQkJCQkJCQlcDQorCQkJU01BUlRKVU1QIF9ydG9zX1IyCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBSZXN0b3JlIHRoZSBzZnIncyBmb3JtaW5nIHRoZSB0YXNrcyBjb250ZXh0LgkJCVwNCisJCQk7IFdlIGNhbm5vdCB5ZXQgcmVzdG9yZSBic3IsIHcgYW5kIHN0YXR1cyBiZWNhdXNlCQlcDQorCQkJOyB3ZSBuZWVkIHRoZXNlCXJlZ2lzdGVycyBmb3IgYSBmaW5hbCB0ZXN0LgkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsUENMQVRICQkJCQkJCQkJXA0KKwkJCWlmIF9fUk9NU0laRSA+IDB4ODAwMAkJCQkJCQkJCVwNCisJCQkJbW92ZmYJUFJFSU5DMixQQ0xBVFUJCQkJCQkJCVwNCisJCQllbHNlCQkJCQkJCQkJCQkJCVwNCisJCQkJY2xyZglQQ0xBVFUsQUNDRVNTCQkJCQkJCQlcDQorCQkJZW5kaWYJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsVEJMUFRSTAkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLFRCTFBUUkgJCQkJCQkJCQlcDQorCQkJaWYgX19ST01TSVpFID4gMHg4MDAwCQkJCQkJCQkJXA0KKwkJCQltb3ZmZglQUkVJTkMyLFRCTFBUUlUJCQkJCQkJCVwNCisJCQllbHNlCQkJCQkJCQkJCQkJCVwNCisJCQkJY2xyZglUQkxQVFJVLEFDQ0VTUwkJCQkJCQkJXA0KKwkJCWVuZGlmCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLFRBQkxBVAkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLEZTUjFMCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsRlNSMUgJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMixGU1IwTAkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLEZTUjBICQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsUFJPREwJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMixQUk9ESAkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBUaGUgcmV0dXJuIGZyb20gcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGRlcGVuZHMgb24JCVwNCisJCQk7IHRoZSB2YWx1ZSBvZiB1Y0NyaXRpY2FsTmVzdGluZy4gV2hlbiBpdCBpcyB6ZXJvLAkJXA0KKwkJCTsgaW50ZXJydXB0cyBuZWVkIHRvIGJlIGVuYWJsZWQuIFRoaXMgaXMgZG9uZSB2aWEgYQkJXA0KKwkJCTsgcmV0ZmllIGluc3RydWN0aW9uIGJlY2F1c2Ugd2UgbmVlZCB0aGUJCQkJXA0KKwkJCTsgaW50ZXJydXB0LWVuYWJsaW5nIGFuZCB0aGUgcmV0dXJuIHRvIHRoZSByZXN0b3JlZAkJXA0KKwkJCTsgdGFzayB0byBiZSB1bmludGVycnVwdGFibGUuCQkJCQkJCVwNCisJIAkJOyBCZWNhdXNlIGJzciwgc3RhdHVzIGFuZCBXIGFyZSBhZmZlY3RlZCBieSB0aGUgdGVzdAlcDQorCSAJCTsgdGhleSBhcmUgcmVzdG9yZWQgYWZ0ZXIgdGhlIHRlc3QuCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZsYgl1Y0NyaXRpY2FsTmVzdGluZz4+OAkJCQkJCQlcDQorCQkJdHN0ZnN6CXVjQ3JpdGljYWxOZXN0aW5nLEJBTktFRAkJCQkJCVwNCisJCQlTTUFSVEpVTVAgX3J0b3NfUjQJCQkJCQkJCQkJXA0KKwkJX3J0b3NfUjM6CQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLEJTUgkJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMixXUkVHCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsU1RBVFVTCQkJCQkJCQkJXA0KKwkJCXJldGZpZQkwCQk7IFJldHVybiBlbmFibGluZyBpbnRlcnJ1cHRzCQkJXA0KKwkJX3J0b3NfUjQ6CQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLEJTUgkJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMixXUkVHCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBSRUlOQzIsU1RBVFVTCQkJCQkJCQkJXA0KKwkJCXJldHVybgkwCQk7IFJldHVybiB3aXRob3V0IGFmZmVjdGluZyBpbnRlcnJ1cHRzCVwNCisJCV9QcmFnbWEoImFzbWVuZCIpCQkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQkJDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJdlBvcnRZaWVsZCgpDQorDQorI2RlZmluZSBwb3J0Tk9QKCkJX1ByYWdtYSgiYXNtIikJCQkJCQkJCQlcDQorCQkJCQkJbm9wCQkJCQkJCQkJCQlcDQorCQkJCQlfUHJhZ21hKCJhc21lbmQiKQ0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHhGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJIAlcDQorCXZvaWQgcG9pbnRlZCB4RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApCQlcDQorCV9QcmFnbWEoYXNtZnVuYyB4RnVuY3Rpb24pDQorDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTwkJcG9ydFRBU0tfRlVOQ1RJT04NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjZGVmaW5lIHZvbGF0aWxlDQorI2RlZmluZSByZWdpc3Rlcg0KKw0KKyNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL0Zsc2gxODYvcG9ydC5jIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvRmxzaDE4Ni9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljZmY1OQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL0Zsc2gxODYvcG9ydC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKg0KK0NoYW5nZXMgZnJvbSBWMS4wMDoNCisJDQorCSsgQ2FsbCB0byB0YXNrWUlFTEQoKSBmcm9tIHdpdGhpbiB0aWNrIElTUiBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgbW9yZQ0KKwkgIGVmZmljaWVudCBwb3J0U1dJVENIX0NPTlRFWFQoKS4NCisJKyBJU1IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVuYW1lZCB0byBpbmNsdWRlIHRoZSBwcnYgcHJlZml4Lg0KKw0KK0NoYW5nZXMgZnJvbSBWMS4yLjA6DQorDQorCSsgcG9ydFJFU0VUX1BJQygpIGlzIG5vdyBjYWxsZWQgbGFzdCB0aGluZyBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgcHJlZW1wdGl2ZQ0KKwkgIHRpY2sgcm91dGluZS4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCisJICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KKyovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBGbGFzaGxpdGUgMTg2DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8aTg2Lmg+DQorI2luY2x1ZGUgPGRvcy5oPg0KKyNpbmNsdWRlIDxzZXRqbXAuaD4NCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJwb3J0YXNtLmgiDQorDQorLypsaW50IC1lOTUwIE5vbiBBTlNJIHJlc2VydmVkIHdvcmRzIG9rYXkgaW4gdGhpcyBmaWxlIG9ubHkuICovDQorDQorI2RlZmluZSBwb3J0VElNRVJfRU9JX1RZUEUJCSggOCApDQorI2RlZmluZSBwb3J0UkVTRVRfUElDKCkJCQlwb3J0T1VUUFVUX1dPUkQoICggdW5zaWduZWQgc2hvcnQgKSAweGZmMjIsIHBvcnRUSU1FUl9FT0lfVFlQRSApDQorI2RlZmluZSBwb3J0VElNRVJfSU5UX05VTUJFUgkweDEyDQorDQorI2RlZmluZSBwb3J0VElNRVJfMV9DT05UUk9MX1JFR0lTVEVSCSggKCB1bnNpZ25lZCBzaG9ydCApIDB4ZmY1ZSApDQorI2RlZmluZSBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSCSggKCB1bnNpZ25lZCBzaG9ydCApIDB4ZmY1NiApDQorI2RlZmluZSBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRQkJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgyMDAwICkNCisNCisvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIHRpY2sgZnJlcXVlbmN5LiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVuc2lnbmVkIGxvbmcgdWxUaWNrUmF0ZUh6ICk7DQorDQorLyogU2V0IHRoZSBoYXJkd2FyZSBiYWNrIHRvIHRoZSBzdGF0ZSBhcyBwZXIgYmVmb3JlIHRoZSBzY2hlZHVsZXIgc3RhcnRlZC4gKi8NCitzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKTsNCisNCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisjZWxzZQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzIA0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKyNlbmRpZg0KKw0KKy8qIFRyYXAgcm91dGluZSB1c2VkIGJ5IHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKTsNCisNCisvKmxpbnQgLWU5NTYgRmlsZSBzY29wZXMgbmVjZXNzYXJ5IGhlcmUuICovDQorDQorLyogU2V0IHRydWUgd2hlbiB0aGUgdmVjdG9ycyBhcmUgc2V0IHNvIHRoZSBzY2hlZHVsZXIgd2lsbCBzZXJ2aWNlIHRoZSB0aWNrLiAqLw0KK3N0YXRpYyBzaG9ydCBzU2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7DQorDQorLyogUG9pbnRzIHRvIHRoZSBvcmlnaW5hbCByb3V0aW5lIGluc3RhbGxlZCBvbiB0aGUgdmVjdG9yIHdlIHVzZSBmb3IgbWFudWFsIGNvbnRleHQgc3dpdGNoZXMuICBUaGlzIGlzIHRoZW4gdXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCByb3V0aW5lIGR1cmluZyBwcnZFeGl0RnVuY3Rpb24oKS4gKi8NCitzdGF0aWMgdm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9sZFN3aXRjaElTUiApKCk7DQorDQorLyogVXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBET1MgY29udGV4dCB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgZW5kZWQuICovDQorc3RhdGljIGptcF9idWYgeEp1bXBCdWY7DQorDQorLypsaW50ICtlOTU2ICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorcG9ydEJBU0VfVFlQRSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KKw0KKwkvKiBSZW1lbWJlciB3aGF0IHdhcyBvbiB0aGUgaW50ZXJydXB0cyB3ZSBhcmUgZ29pbmcgdG8gdXNlDQorCXNvIHdlIGNhbiBwdXQgdGhlbSBiYWNrIGxhdGVyIGlmIHJlcXVpcmVkLiAqLw0KKwlweE9sZFN3aXRjaElTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICk7DQorDQorCS8qIFB1dCBvdXIgbWFudWFsIHN3aXRjaCAoeWllbGQpIGZ1bmN0aW9uIG9uIGEga25vd24NCisJdmVjdG9yLiAqLw0KKwlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJewkJDQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2VuZGlmDQorDQorCXBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQorDQorCQkvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCQlwb3J0RklSU1RfQ09OVEVYVCgpOw0KKwl9DQorDQorCXJldHVybiBzU2NoZWR1bGVyUnVubmluZzsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhlIHRpY2sgSVNSIHVzZWQgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQora2VybmVsIGlzIGJlaW5nIHVzZWQuICovDQorI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBHZXQgdGhlIHNjaGVkdWxlciB0byB1cGRhdGUgdGhlIHRhc2sgc3RhdGVzIGZvbGxvd2luZyB0aGUgdGljay4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKw0KKwkJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwkJcG9ydFNXSVRDSF9DT05URVhUKCk7DQorDQorCQkvKiBSZXNldCB0aGUgUElDIHJlYWR5IGZvciB0aGUgbmV4dCB0aW1lLiAqLw0KKwkJcG9ydFJFU0VUX1BJQygpOw0KKwl9DQorI2Vsc2UNCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KKwkJc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCisJCXZUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJcG9ydFJFU0VUX1BJQygpOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KK3sNCisJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBKdW1wIGJhY2sgdG8gdGhlIHByb2Nlc3NvciBzdGF0ZSBwcmlvciB0byBzdGFydGluZyB0aGUNCisJc2NoZWR1bGVyLiAgVGhpcyBtZWFucyB3ZSBhcmUgbm90IGdvaW5nIHRvIGJlIHVzaW5nIGENCisJdGFzayBzdGFjayBmcmFtZSBzbyB0aGUgdGFzayBjYW4gYmUgZGVsZXRlZC4gKi8NCisJbG9uZ2ptcCggeEp1bXBCdWYsIDEgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2RXhpdEZ1bmN0aW9uKCB2b2lkICkNCit7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNUaW1lckRpc2FibGUgPSAweDAwMDA7DQordW5zaWduZWQgc2hvcnQgdXNUaW1lcjBDb250cm9sOw0KKw0KKwkvKiBJbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCBoZXJlIGFueXdheSAtIGJ1dCBubyANCisJaGFybSBpbiBtYWtpbmcgc3VyZS4gKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlpZiggc1NjaGVkdWxlclJ1bm5pbmcgPT0gcGRUUlVFICkNCisJew0KKwkJLyogUHV0IGJhY2sgdGhlIHN3aXRjaCBpbnRlcnJ1cHQgcm91dGluZXMgdGhhdCB3YXMgaW4gcGxhY2UNCisJCWJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0ZWQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHhPbGRTd2l0Y2hJU1IgKTsNCisJfQ0KKw0KKwkvKiBEaXNhYmxlIHRoZSB0aW1lciB1c2VkIGZvciB0aGUgdGljayB0byBlbnN1cmUgdGhlIHNjaGVkdWxlciBpcw0KKwlub3QgY2FsbGVkIGJlZm9yZSByZXN0b3JpbmcgaW50ZXJydXB0cy4gIFRoZXJlIHdhcyBwcmV2aW91c2x5IG5vdGhpbmcNCisJb24gdGhpcyB0aW1lciBzbyB0aGVyZSBpcyBubyBvbGQgSVNSIHRvIHJlc3RvcmUuICovDQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckRpc2FibGUgKTsNCisNCisJLyogUmVzdGFydCB0aGUgRE9TIHRpY2suICovDQorCXVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQorCXVzVGltZXIwQ29udHJvbCB8PSBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCisNCisNCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVuc2lnbmVkIGxvbmcgdWxUaWNrUmF0ZUh6ICkNCit7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNNYXhDb3VudFJlZ2lzdGVyID0gMHhmZjVhOw0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzVGltZXJQcmlvcml0eVJlZ2lzdGVyID0gMHhmZjMyOw0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IHVzVGltZXJFbmFibGUgPSAweEMwMDA7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNSZXRyaWdnZXIgPSAweDAwMDE7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNUaW1lckhpZ2hQcmlvcml0eSA9IDB4MDAwMDsNCit1bnNpZ25lZCBzaG9ydCB1c1RpbWVyMENvbnRyb2w7DQorDQorLyogKCBDUFUgZnJlcXVlbmN5IC8gNCApIC8gY2xvY2sgMiBtYXggY291bnQgW2lucHcoIDB4ZmY2MiApID0gN10gKi8NCisNCitjb25zdCB1bnNpZ25lZCBsb25nIHVsQ2xvY2tGcmVxdWVuY3kgPSAweDdmMzFhMDsNCisNCit1bnNpZ25lZCBsb25nIHVsVGltZXJDb3VudCA9IHVsQ2xvY2tGcmVxdWVuY3kgLyB1bFRpY2tSYXRlSHo7DQorDQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckVuYWJsZSB8IHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFIHwgdXNSZXRyaWdnZXIgKTsNCisJcG9ydE9VVFBVVF9XT1JEKCB1c01heENvdW50UmVnaXN0ZXIsICggdW5zaWduZWQgc2hvcnQgKSB1bFRpbWVyQ291bnQgKTsNCisJcG9ydE9VVFBVVF9XT1JEKCB1c1RpbWVyUHJpb3JpdHlSZWdpc3RlciwgdXNUaW1lckhpZ2hQcmlvcml0eSApOw0KKw0KKwkvKiBTdG9wIHRoZSBET1MgdGljayAtIGRvbid0IGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gbWFpbnRhaW4gYSBUT0QgY2xvY2suICovDQorCXVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQorCXVzVGltZXIwQ29udHJvbCAmPSB+cG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEU7DQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lcjBDb250cm9sICk7DQorfQ0KKw0KKw0KKy8qbGludCArZTk1MCAqLw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL0Zsc2gxODYvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnRtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnRtYWNyby5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorCQ0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisjaWZuZGVmIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLiAgDQorICoNCisgKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZQ0KKyAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCisgKg0KKyAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorDQorDQorLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICBjaGFyDQorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICBsb25nDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIGludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVuc2lnbmVkIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlwb3J0U0hPUlQNCisNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmYNCisjZWxzZQ0KKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBwb3J0TE9ORyBwb3J0VGlja1R5cGU7DQorICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KK3ZvaWQgcG9ydEVOVEVSX0NSSVRJQ0FMKCB2b2lkICk7DQorI3ByYWdtYSBhdXggcG9ydEVOVEVSX0NSSVRJQ0FMID0gInB1c2hmIiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaSI7DQorDQordm9pZCBwb3J0RVhJVF9DUklUSUNBTCggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFWElUX0NSSVRJQ0FMICAgPSAicG9wZiI7DQorDQordm9pZCBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCB2b2lkICk7DQorI3ByYWdtYSBhdXggcG9ydERJU0FCTEVfSU5URVJSVVBUUyA9ICJjbGkiOw0KKw0KK3ZvaWQgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCB2b2lkICk7DQorI3ByYWdtYSBhdXggcG9ydEVOQUJMRV9JTlRFUlJVUFRTID0gInN0aSI7DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICggLTEgKQ0KKyNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSICAgMHg4MA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfSANCisjZGVmaW5lIHBvcnRUSUNLX1JBVEVfTVMgICAgICAgICggKCBwb3J0VGlja1R5cGUgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgIDINCisjZGVmaW5lIHBvcnRJTklUSUFMX1NXICAgICAgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApICAgLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCV9fYXNteyBub3AgfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbXBpbGVyIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRJTlBVVF9CWVRFKCB4QWRkciApICAgICAgICAgICAgICAgICBpbnAoIHhBZGRyICkNCisjZGVmaW5lIHBvcnRPVVRQVVRfQllURSggeEFkZHIsIHVjVmFsdWUgKSAgICAgICBvdXRwKCB4QWRkciwgdWNWYWx1ZSApDQorI2RlZmluZSBwb3J0SU5QVVRfV09SRCggeEFkZHIgKSAgICAgICAgICAgICAgICAgaW5wdyggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9XT1JEKCB4QWRkciwgdXNWYWx1ZSApICAgICAgIG91dHB3KCB4QWRkciwgdXNWYWx1ZSApDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9QQy9wb3J0LmMgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9QQy9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiZTM4MQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL1BDL3BvcnQuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCitDaGFuZ2VzIGZyb20gVjEuMDA6DQorCQ0KKwkrIENhbGwgdG8gdGFza1lJRUxEKCkgZnJvbSB3aXRoaW4gdGljayBJU1IgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG1vcmUNCisJICBlZmZpY2llbnQgcG9ydFNXSVRDSF9DT05URVhUKCkuDQorCSsgSVNSIGZ1bmN0aW9uIGRlZmluaXRpb25zIHJlbmFtZWQgdG8gaW5jbHVkZSB0aGUgcHJ2IHByZWZpeC4NCisNCitDaGFuZ2VzIGZyb20gVjEuMi4wOg0KKw0KKwkrIHBydlBvcnRSZXNldFBJQygpIGlzIG5vdyBjYWxsZWQgbGFzdCB0aGluZyBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgDQorCSAgcHJlZW1wdGl2ZSB0aWNrIHJvdXRpbmUuDQorDQorQ2hhbmdlcyBmcm9tIFYyLjYuMQ0KKw0KKwkrIFJlcGxhY2VkIHRoZSBzVXNpbmdQcmVlbXB0aW9uIHZhcmlhYmxlIHdpdGggdGhlIGNvbmZpZ1VTRV9QUkVFTVBUSU9ODQorCSAgbWFjcm8gdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBsYXRlciBwb3J0cy4NCisNCitDaGFuZ2VzIGZyb20gVjQuMC4xDQorCQ0KKwkrIEFkZCBmdW5jdGlvbiBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpIHRvIHNldCB0aGUgRE9TIHRpY2sgYmFjayB0bw0KKwkgIGl0cyBwcm9wZXIgdmFsdWUgd2hlbiB0aGUgc2NoZWR1bGVyIGV4aXRzLiANCisqLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8aTg2Lmg+DQorI2luY2x1ZGUgPGRvcy5oPg0KKyNpbmNsdWRlIDxzZXRqbXAuaD4NCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJwb3J0YXNtLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBpbmR1c3RyaWFsDQorICogUEMgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qbGludCAtZTk1MCBOb24gQU5TSSByZXNlcnZlZCB3b3JkcyBva2F5IGluIHRoaXMgZmlsZSBvbmx5LiAqLw0KKw0KKyNkZWZpbmUgcG9ydFRJTUVSX0lOVF9OVU1CRVIJMHgwOA0KKw0KKy8qIFNldHVwIGhhcmR3YXJlIGZvciByZXF1aXJlZCB0aWNrIGludGVycnVwdCByYXRlLiAqLw0KK3N0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVuc2lnbmVkIGxvbmcgdWxUaWNrUmF0ZUh6ICk7DQorDQorLyogUmVzdG9yZSBoYXJkd2FyZSB0byBhcyBpdCB3YXMgcHJpb3IgdG8gc3RhcnRpbmcgdGhlIHNjaGVkdWxlci4gKi8NCitzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKTsNCisNCisvKiBFaXRoZXIgY2hhaW4gdG8gdGhlIERPUyB0aWNrICh3aGljaCBpdHNlbGYgY2xlYXJzIHRoZSBQSUMpIG9yIGNsZWFyIHRoZSBQSUMNCitkaXJlY3RseS4gIFdlIGNoYWluIHRvIHRoZSBET1MgdGljayBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgc3RhbmRhcmQgRE9TDQordGljayByYXRlLiAqLw0KK3N0YXRpYyB2b2lkIHBydlBvcnRSZXNldFBJQyggdm9pZCApOw0KKw0KKy8qIFRoZSB0aWNrIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKyNlbHNlDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMgDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorI2VuZGlmDQorLyogVHJhcCByb3V0aW5lIHVzZWQgYnkgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCitzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApOw0KKw0KKy8qIFNldCB0aGUgdGljayBmcmVxdWVuY3kgYmFjayBzbyB0aGUgZmxvcHB5IGRyaXZlIHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZQ0KK3NjaGVkdWxlciBleGl0cy4gKi8NCitzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCggdm9pZCApOw0KKw0KKy8qbGludCAtZTk1NiBGaWxlIHNjb3BlcyBuZWNlc3NhcnkgaGVyZS4gKi8NCisNCisvKiBVc2VkIHRvIHNpZ25hbCB3aGVuIHRvIGNoYWluIHRvIHRoZSBET1MgdGljaywgYW5kIHdoZW4gdG8ganVzdCBjbGVhciB0aGUgUElDIG91cnNlbHZlcy4gKi8NCitzdGF0aWMgc2hvcnQgc0RPU1RpY2tDb3VudGVyOwkJCQkJCQkNCisNCisvKiBTZXQgdHJ1ZSB3aGVuIHRoZSB2ZWN0b3JzIGFyZSBzZXQgc28gdGhlIHNjaGVkdWxlciB3aWxsIHNlcnZpY2UgdGhlIHRpY2suICovDQorc3RhdGljIHNob3J0IHNTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsJCQkJDQorDQorLyogUG9pbnRzIHRvIHRoZSBvcmlnaW5hbCByb3V0aW5lIGluc3RhbGxlZCBvbiB0aGUgdmVjdG9yIHdlIHVzZSBmb3IgbWFudWFsIGNvbnRleHQgc3dpdGNoZXMuICBUaGlzIGlzIHRoZW4gdXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCByb3V0aW5lIGR1cmluZyBwcnZFeGl0RnVuY3Rpb24oKS4gKi8NCitzdGF0aWMgdm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9sZFN3aXRjaElTUiApKCk7CQkNCisNCisvKiBQb2ludHMgdG8gdGhlIG9yaWdpbmFsIHJvdXRpbmUgaW5zdGFsbGVkIG9uIHRoZSB2ZWN0b3Igd2UgdXNlIHRvIGNoYWluIHRvIHRoZSBET1MgdGljay4gIFRoaXMgaXMgdGhlbiB1c2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvdXRpbmUgZHVyaW5nIHBydkV4aXRGdW5jdGlvbigpLiAqLw0KK3N0YXRpYyB2b2lkICggX19pbnRlcnJ1cHQgX19mYXIgKnB4T2xkU3dpdGNoSVNSUGx1czEgKSgpOwkNCisNCisvKiBVc2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIERPUyBjb250ZXh0IHdoZW4gdGhlIHNjaGVkdWxlciBpcyBlbmRlZC4gKi8NCitzdGF0aWMgam1wX2J1ZiB4SnVtcEJ1ZjsNCisNCisvKmxpbnQgK2U5NTYgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KK3sNCitweElTUiBweE9yaWdpbmFsVGlja0lTUjsNCisJDQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KKw0KKwkvKiBSZW1lbWJlciB3aGF0IHdhcyBvbiB0aGUgaW50ZXJydXB0cyB3ZSBhcmUgZ29pbmcgdG8gdXNlDQorCXNvIHdlIGNhbiBwdXQgdGhlbSBiYWNrIGxhdGVyIGlmIHJlcXVpcmVkLiAqLw0KKwlweE9sZFN3aXRjaElTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICk7DQorCXB4T3JpZ2luYWxUaWNrSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiApOw0KKwlweE9sZFN3aXRjaElTUlBsdXMxID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxICk7DQorDQorCXBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKw0KKwkvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQorCXZlY3Rvci4gKi8NCisJX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHBydllpZWxkUHJvY2Vzc29yICk7DQorDQorCS8qIFB1dCB0aGUgb2xkIHRpY2sgb24gYSBkaWZmZXJlbnQgaW50ZXJydXB0IG51bWJlciBzbyB3ZSBjYW4NCisJY2FsbCBpdCB3aGVuIHdlIHdhbnQuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPcmlnaW5hbFRpY2tJU1IgKTsNCisNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJewkJDQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2VuZGlmDQorDQorCS8qIFNldHVwIGEgY291bnRlciB0aGF0IGlzIHVzZWQgdG8gY2FsbCB0aGUgRE9TIGludGVycnVwdCBhcyBjbG9zZQ0KKwl0byBpdCdzIG9yaWdpbmFsIGZyZXF1ZW5jeSBhcyBjYW4gYmUgYWNoaWV2ZWQgZ2l2ZW4gb3VyIGNob3NlbiB0aWNrDQorCWZyZXF1ZW5jeS4gKi8NCisJc0RPU1RpY2tDb3VudGVyID0gcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCisNCisJLyogQ2xlYW4gdXAgZnVuY3Rpb24gaWYgd2Ugd2FudCB0byByZXR1cm4gdG8gRE9TLiAqLw0KKwlpZiggc2V0am1wKCB4SnVtcEJ1ZiApICE9IDAgKQ0KKwl7DQorCQlwcnZFeGl0RnVuY3Rpb24oKTsNCisJCXNTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXNTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKw0KKwkJLyogS2ljayBvZmYgdGhlIHNjaGVkdWxlciBieSBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisJfQ0KKw0KKwlyZXR1cm4gc1NjaGVkdWxlclJ1bm5pbmc7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFRoZSB0aWNrIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJdlRhc2tJbmNyZW1lbnRUaWNrKCk7DQorDQorCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisNCisJCS8qIFJlc2V0IHRoZSBQSUMgcmVhZHkgZm9yIHRoZSBuZXh0IHRpbWUuICovDQorCQlwcnZQb3J0UmVzZXRQSUMoKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBydlBvcnRSZXNldFBJQygpOw0KKwl9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KK3sNCisJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2UG9ydFJlc2V0UElDKCB2b2lkICkNCit7DQorCS8qIFdlIGFyZSBnb2luZyB0byBjYWxsIHRoZSBET1MgdGljayBpbnRlcnJ1cHQgYXQgYXMgY2xvc2UgYQ0KKwlmcmVxdWVuY3kgdG8gdGhlIG5vcm1hbCBET1MgdGljayBhcyBwb3NzaWJsZS4gKi8NCisNCisJLyogV0UgU0hPVUxEIE5PVCBETyBUSElTIElGIFlJRUxEIFdBUyBDQUxMRUQuICovDQorCS0tc0RPU1RpY2tDb3VudGVyOw0KKwlpZiggc0RPU1RpY2tDb3VudGVyIDw9IDAgKQ0KKwl7DQorCQlzRE9TVGlja0NvdW50ZXIgPSAoIHNob3J0ICkgcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCisJCV9fYXNteyBpbnQJcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSB9OwkJIA0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogUmVzZXQgdGhlIFBJQyBhcyB0aGUgRE9TIHRpY2sgaXMgbm90IGJlaW5nIGNhbGxlZCB0bw0KKwkJZG8gaXQuICovDQorCQlfX2FzbQ0KKwkJew0KKwkJCW1vdglhbCwgMjBIDQorCQkJb3V0IDIwSCwgYWwNCisJCX07DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBKdW1wIGJhY2sgdG8gdGhlIHByb2Nlc3NvciBzdGF0ZSBwcmlvciB0byBzdGFydGluZyB0aGUNCisJc2NoZWR1bGVyLiAgVGhpcyBtZWFucyB3ZSBhcmUgbm90IGdvaW5nIHRvIGJlIHVzaW5nIGENCisJdGFzayBzdGFjayBmcmFtZSBzbyB0aGUgdGFzayBjYW4gYmUgZGVsZXRlZC4gKi8NCisJbG9uZ2ptcCggeEp1bXBCdWYsIDEgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2RXhpdEZ1bmN0aW9uKCB2b2lkICkNCit7DQordm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9yaWdpbmFsVGlja0lTUiApKCk7DQorDQorCS8qIEludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUgYW55d2F5IC0gYnV0IG5vIA0KKwloYXJtIGluIG1ha2luZyBzdXJlLiAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCBzU2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KKwl7DQorCQkvKiBTZXQgdGhlIERPUyB0aWNrIGJhY2sgb250byB0aGUgdGltZXIgdGlja2VyLiAqLw0KKwkJcHhPcmlnaW5hbFRpY2tJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgKTsNCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHB4T3JpZ2luYWxUaWNrSVNSICk7DQorCQlwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpOw0KKw0KKwkJLyogUHV0IGJhY2sgdGhlIHN3aXRjaCBpbnRlcnJ1cHQgcm91dGluZXMgdGhhdCB3YXMgaW4gcGxhY2UNCisJCWJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0ZWQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHhPbGRTd2l0Y2hJU1IgKTsNCisJCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPbGRTd2l0Y2hJU1JQbHVzMSApOw0KKwl9DQorCS8qIFRoZSB0aWNrIHRpbWVyIGlzIGJhY2sgaG93IERPUyB3YW50cyBpdC4gIFdlIGNhbiByZS1lbmFibGUNCisJaW50ZXJydXB0cyB3aXRob3V0IHRoZSBzY2hlZHVsZXIgYmVpbmcgY2FsbGVkLiAqLw0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeSggdW5zaWduZWQgbG9uZyB1bFRpY2tSYXRlSHogKQ0KK3sNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1c1BJVF9NT0RFID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDM7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNQSVQwID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDA7DQorY29uc3QgdW5zaWduZWQgbG9uZyB1bFBJVF9DT05TVCA9ICggdW5zaWduZWQgbG9uZyApIDExOTMxODA7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXM4MjU0X0NUUjBfTU9ERTMgPSAoIHVuc2lnbmVkIHNob3J0ICkgMHgzNjsNCit1bnNpZ25lZCBsb25nIHVsT3V0cHV0Ow0KKw0KKwkvKiBTZXR1cCB0aGUgODI0NSB0byB0aWNrIGF0IHRoZSB3YW50ZWQgZnJlcXVlbmN5LiAqLw0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUX01PREUsIHVzODI1NF9DVFIwX01PREUzICk7DQorCXVsT3V0cHV0ID0gdWxQSVRfQ09OU1QgLyB1bFRpY2tSYXRlSHo7DQorICAgDQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLCAoIHVuc2lnbmVkIHNob3J0ICkoIHVsT3V0cHV0ICYgKCB1bnNpZ25lZCBsb25nICkgMHhmZiApICk7DQorCXVsT3V0cHV0ID4+PSA4Ow0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1bnNpZ25lZCBzaG9ydCApICggdWxPdXRwdXQgJiAoIHVuc2lnbmVkIGxvbmcgKSAweGZmICkgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeURlZmF1bHQoIHZvaWQgKQ0KK3sNCitjb25zdCB1bnNpZ25lZCBzaG9ydCB1c1BJVF9NT0RFID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDM7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXNQSVQwID0gKCB1bnNpZ25lZCBzaG9ydCApIDB4NDA7DQorY29uc3QgdW5zaWduZWQgc2hvcnQgdXM4MjU0X0NUUjBfTU9ERTMgPSAoIHVuc2lnbmVkIHNob3J0ICkgMHgzNjsNCisNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVF9NT0RFLCB1czgyNTRfQ1RSMF9NT0RFMyApOw0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwwICk7DQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLDAgKTsNCit9DQorDQorDQorLypsaW50ICtlOTUwICovDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydG1hY3JvLmggYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9QQy9wb3J0bWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGNlMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydG1hY3JvLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qDQorICAgIEZyZWVSVE9TIFY3LjIuMCAtIENvcHlyaWdodCAoQykgMjAxMiBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCisJDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpZm5kZWYgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICANCisgKg0KKyAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlDQorICogZ2l2ZW4gaGFyZHdhcmUgYW5kIGNvbXBpbGVyLg0KKyAqDQorICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCisvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBwb3J0U0hPUlQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQorDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIHBvcnRTSE9SVCBwb3J0VGlja1R5cGU7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIHBvcnRUaWNrVHlwZSApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdW5zaWduZWQgcG9ydExPTkcgcG9ydFRpY2tUeXBlOw0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBwb3J0VGlja1R5cGUgKSAweGZmZmZmZmZmDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ3JpdGljYWwgc2VjdGlvbiBkZWZpbml0aW9ucy4gIHBvcnRFTlRFUl9DUklUSUNBTCgpIG11c3QgYmUgZGVmaW5lZCBhcyBhDQorbWFjcm8gZm9yIHBvcnRhYmxlLmggdG8gd29yayBwcm9wZXJseS4gKi8NCit2b2lkIHBvcnRMT0NBTF9FTlRFUl9DUklUSUNBTCggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRMT0NBTF9FTlRFUl9DUklUSUNBTCA9IAkicHVzaGYiIFwNCisJCQkJCQkJCQkJImNsaSI7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSBwb3J0TE9DQUxfRU5URVJfQ1JJVElDQUwoKQ0KKwkJCQkJCQkJCQkNCit2b2lkIHBvcnRFWElUX0NSSVRJQ0FMKCB2b2lkICk7DQorI3ByYWdtYSBhdXggcG9ydEVYSVRfQ1JJVElDQUwJPQkJInBvcGYiOw0KKw0KK3ZvaWQgcG9ydERJU0FCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMgPQkiY2xpIjsNCisNCit2b2lkIHBvcnRFTkFCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFTkFCTEVfSU5URVJSVVBUUyA9CQkic3RpIjsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJKCAtMSApDQorI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0gDQorI2RlZmluZSBwb3J0RE9TX1RJQ0tfUkFURQkJKCAxOC4yMDY0OCApDQorI2RlZmluZSBwb3J0VElDS19SQVRFX01TICAgICAgICAoICggcG9ydFRpY2tUeXBlICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0VElDS1NfUEVSX0RPU19USUNLCSggKCB1bnNpZ25lZCBwb3J0U0hPUlQgKSAoICggKCBwb3J0RE9VQkxFICkgY29uZmlnVElDS19SQVRFX0haIC8gcG9ydERPU19USUNLX1JBVEUgKSArIDAuNSApICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NXCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjAyICkJLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkoIDIgKQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENvbXBpbGVyIHNwZWNpZmljcy4gKi8NCisjZGVmaW5lIHBvcnRJTlBVVF9CWVRFKCB4QWRkciApCQkJCWlucCggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApCW91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCisjZGVmaW5lIHBvcnROT1AoKSBfX2FzbXsgbm9wIH0NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisNCisjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvY29tbW9uL3BvcnRhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY4ZDZjCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvY29tbW9uL3BvcnRhc20uaApAQCAtMCwwICsxLDE0OSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQordHlwZWRlZiB2b2lkIHRza1RDQjsNCitleHRlcm4gdm9sYXRpbGUgdHNrVENCICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKw0KKy8qIA0KKyAqIFNhdmVzIHRoZSBzdGFjayBwb2ludGVyIGZvciBvbmUgdGFzayBpbnRvIGl0cyBUQ0IsIGNhbGxzIA0KKyAqIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIHVwZGF0ZSB0aGUgVENCIGJlaW5nIHVzZWQsIHRoZW4gcmVzdG9yZXMgdGhlIHN0YWNrIA0KKyAqIGZyb20gdGhlIG5ldyBUQ0IgcmVhZCB0byBydW4gdGhlIHRhc2suIA0KKyAqLw0KK3ZvaWQgcG9ydFNXSVRDSF9DT05URVhUKCB2b2lkICk7DQorDQorLyoNCisgKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQiBvZiB0aGUgdGFzayB3aGljaCBpcyBnb2luZyB0byBiZSBmaXJzdA0KKyAqIHRvIGV4ZWN1dGUuICBUaGVuIGZvcmNlIGFuIElSRVQgc28gdGhlIHJlZ2lzdGVycyBhbmQgSVAgYXJlIHBvcHBlZCBvZmYgdGhlDQorICogc3RhY2suDQorICovDQordm9pZCBwb3J0RklSU1RfQ09OVEVYVCggdm9pZCApOw0KKw0KKy8qIFRoZXJlIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGFyZSBidWlsZGluZw0KK3RvIGluY2x1ZGUgZGVidWdnZXIgaW5mb3JtYXRpb24uICBJZiBkZWJ1Z2dlciBpbmZvcm1hdGlvbiBpcyB1c2VkIHRoZW4gdGhlcmUNCithcmUgYSBjb3VwbGUgb2YgZXh0cmEgYnl0ZXMgbGVmdCBvZiB0aGUgSVNSIHN0YWNrIChwcmVzdW1hYmx5IGZvciB1c2UgYnkgdGhlDQorZGVidWdnZXIpLiAgVGhlIHRydWUgc3RhY2sgcG9pbnRlciBpcyB0aGVuIHN0b3JlZCBpbiB0aGUgYnAgcmVnaXN0ZXIuICBXZSBhZGQNCisyIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIHJlbW92ZSB0aGUgZXh0cmEgYnl0ZXMgYmVmb3JlIHdlIHJlc3RvcmUgb3VyIGNvbnRleHQuICovDQorDQorI2lmZGVmIERFQlVHX0JVSUxEDQorDQorCSNwcmFnbWEgYXV4IHBvcnRTV0lUQ0hfQ09OVEVYVCA9CSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJZHMsIGF4IgkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJImxlcwlieCwgcHhDdXJyZW50VENCIgkJCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCLiAqLwkJXA0KKwkJCQkJCQkJCQkibW92CWVzOjB4MlsgYnggXSwgc3MiCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWVzOlsgYnggXSwgc3AiCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJImNhbGwJdlRhc2tTd2l0Y2hDb250ZXh0IgkJCS8qIFBlcmZvcm0gdGhlIHN3aXRjaC4gKi8JCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8JXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJsZXMJYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IiCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJIm1vdglzcywgZXM6WyBieCArIDIgXSIJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3AsIGVzOlsgYnggXSIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWJwLCBzcCIJCQkJCQkvKiBQcmVwYWlyIHRoZSBicCByZWdpc3RlciBmb3IgdGhlIHJlc3RvcmF0aW9uIG9mIHRoZSBTUCBpbiB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkIHBvcnRpb24gb2YgdGhlIElTUiAqLwlcDQorCQkJCQkJCQkJCSJhZGQJYnAsIDB4MDAwMiINCisNCisJCQkJCQkJCQkJDQorDQorCSNwcmFnbWEgYXV4IHBvcnRGSVJTVF9DT05URVhUID0JCSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkJXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJXA0KKwkJCQkJCQkJCQkibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIgkJXA0KKwkJCQkJCQkJCQkibW92CXNzLCBlczpbIGJ4ICsgMiBdIgkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3AsIGVzOlsgYnggXSIJCQkJCVwNCisJCQkJCQkJCQkJImFkZAlzcCwgMHgwMDAyIgkJCQkJCS8qIFJlbW92ZSB0aGUgZXh0cmEgYnl0ZXMgdGhhdCBleGlzdCBpbiBkZWJ1ZyBidWlsZHMgYmVmb3JlIHJlc3RvcmluZyB0aGUgY29udGV4dC4gKi8gXA0KKwkJCQkJCQkJCQkicG9wCWF4IgkJCQkJCQkJXA0KKwkJCQkJCQkJCQkicG9wCWF4IgkJCQkJCQkJXA0KKwkJCQkJCQkJCQkicG9wCWVzIgkJCQkJCQkJXA0KKwkJCQkJCQkJCQkicG9wCWRzIgkJCQkJCQkJXA0KKwkJCQkJCQkJCQkicG9wYSIJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJpcmV0IgkJCQkJCQkJCQ0KKyNlbHNlDQorDQorCSNwcmFnbWEgYXV4IHBvcnRTV0lUQ0hfQ09OVEVYVCA9CSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJZHMsIGF4IgkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJImxlcwlieCwgcHhDdXJyZW50VENCIgkJCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCLiAqLwkJXA0KKwkJCQkJCQkJCQkibW92CWVzOjB4MlsgYnggXSwgc3MiCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWVzOlsgYnggXSwgc3AiCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJImNhbGwJdlRhc2tTd2l0Y2hDb250ZXh0IgkJCS8qIFBlcmZvcm0gdGhlIHN3aXRjaC4gKi8JCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8JXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJsZXMJYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IiCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJIm1vdglzcywgZXM6WyBieCArIDIgXSIJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3AsIGVzOlsgYnggXSINCisJCQkJCQkJCQkJDQorDQorCSNwcmFnbWEgYXV4IHBvcnRGSVJTVF9DT05URVhUID0JCSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkJXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJXA0KKwkJCQkJCQkJCQkibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIgkJXA0KKwkJCQkJCQkJCQkibW92CXNzLCBlczpbIGJ4ICsgMiBdIgkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3AsIGVzOlsgYnggXSIJCQkJCVwNCisJCQkJCQkJCQkJInBvcAlheCIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAlheCIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAllcyIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAlkcyIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcGEiCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkiaXJldCIJCQkJCQkJCQkNCisjZW5kaWYNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL2NvbW1vbi9wb3J0Y29tbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjYzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9GcmVlUlRPUy9Tb3VyY2UvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYwpAQCAtMCwwICsxLDE4MCBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorLyoNCitDaGFuZ2VzIGZyb20gVjEuMDA6DQorCQ0KKwkrIHB4UG9ydEluaXRpYWxpc2VTdGFjaygpIG5vdyBpbml0aWFsaXNlcyB0aGUgc3RhY2sgb2YgbmV3IHRhc2tzIHRvIHRoZSANCisJICBzYW1lIGZvcm1hdCB1c2VkIGJ5IHRoZSBjb21waWxlci4gIFRoaXMgYWxsb3dzIHRoZSBjb21waWxlciBnZW5lcmF0ZWQNCisJICBpbnRlcnJ1cHQgbWVjaGFuaXNtIHRvIGJlIHVzZWQgZm9yIGNvbnRleHQgc3dpdGNoZXMuDQorDQorQ2hhbmdlcyBmcm9tIFYyLjQuMjoNCisNCisJKyBwdlBvcnRNYWxsb2MgYW5kIHZQb3J0RnJlZSBoYXZlIGJlZW4gcmVtb3ZlZC4gIFRoZSBwcm9qZWN0cyBub3cgdXNlDQorCSAgdGhlIGRlZmluaXRpb25zIGZyb20gdGhlIHNvdXJjZS9wb3J0YWJsZS9NZW1NYW5nIGRpcmVjdG9yeS4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xOg0KKw0KKwkrIHVzUG9ydENoZWNrRnJlZVN0YWNrU3BhY2UoKSBoYXMgYmVlbiBtb3ZlZCB0byB0YXNrcy5jLg0KKyovDQorDQorCQ0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiAqLw0KK3BvcnRTVEFDS19UWVBFICpweFBvcnRJbml0aWFsaXNlU3RhY2soIHBvcnRTVEFDS19UWVBFICpweFRvcE9mU3RhY2ssIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCit7DQorcG9ydFNUQUNLX1RZUEUgRFNfUmVnID0gMCwgKnB4T3JpZ2luYWxTUDsNCisNCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzMzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorDQorDQorCS8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCisNCisJLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCisJaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCisJc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgcmV0dXJuIGFkZHJlc3MuICBXZSBtYWtlIHRoaXMgdGhlIHN0YXJ0IA0KKwlvZiB0aGUgdGFzay4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NXOyANCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKw0KKwkvKiBXZSBhcmUgZ29pbmcgdG8gc2V0dXAgdGhlIHN0YWNrIGZvciB0aGUgbmV3IHRhc2sgdG8gbG9vayBsaWtlDQorCXRoZSBzdGFjayBmcmFtZSB3YXMgc2V0dXAgYnkgYSBjb21waWxlciBnZW5lcmF0ZWQgSVNSLiAgV2UgbmVlZCB0byBrbm93DQorCXRoZSBhZGRyZXNzIG9mIHRoZSBleGlzdGluZyBzdGFjayB0b3AgdG8gcGxhY2UgaW4gdGhlIFNQIHJlZ2lzdGVyIHdpdGhpbg0KKwl0aGUgc3RhY2sgZnJhbWUuICBweE9yaWdpbmFsU1AgaG9sZHMgU1AgYmVmb3JlIChzaW11bGF0ZWQpIHB1c2hhIHdhcyANCisJY2FsbGVkLiAqLw0KKwlweE9yaWdpbmFsU1AgPSBweFRvcE9mU3RhY2s7DQorDQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIHdvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgb3VyIGNvbnRleHQgDQorCXN3aXRjaCBmdW5jdGlvbi4gIFRoZXNlIGFyZSBsb2FkZWQgd2l0aCB2YWx1ZXMgc2ltcGx5IHRvIG1ha2UgZGVidWdnaW5nDQorCWVhc2llci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHZQYXJhbWV0ZXJzICk7CQkvKiBBWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweENDQ0M7CS8qIENYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBwdlBhcmFtZXRlcnMgKTsJCS8qIERYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4QkJCQjsJLyogQlggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4T3JpZ2luYWxTUCApOwkJLyogU1AgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhCQkJCOwkvKiBCUCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKSAweDAxMjM7CS8qIFNJICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSApIDB4RERERDsJLyogREkgKi8NCisNCisJLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQorCV9fYXNtewlNT1YgRFNfUmVnLCBEUyB9Ow0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IERTX1JlZzsJLyogRFMgKi8NCisNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRTVEFDS19UWVBFICkgMHhFRUVFOwkvKiBFUyAqLw0KKw0KKwkvKiBUaGUgQVggcmVnaXN0ZXIgaXMgcHVzaGVkIGFnYWluIHR3aWNlIC0gZG9uJ3Qga25vdyB3aHkuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsJCS8qIEFYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsJCS8qIEFYICovDQorDQorDQorCSNpZmRlZiBERUJVR19CVUlMRA0KKwkJLyogVGhlIGNvbXBpbGVyIGFkZHMgc3BhY2UgdG8gZWFjaCBJU1Igc3RhY2sgaWYgYnVpbGRpbmcgdG8NCisJCWluY2x1ZGUgZGVidWcgaW5mb3JtYXRpb24uICBQcmVzdW1hYmx5IHRoaXMgaXMgdXNlZCBieSB0aGUNCisJCWRlYnVnZ2VyIC0gd2UgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXNlIGl0IHRvIGFueXRoaW5nIGp1c3QNCisJCW1ha2Ugc3VyZSBpdCBpcyB0aGVyZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZW5kaWYNCisNCisJLypsaW50ICtlOTUwICtlNjExICtlOTIzICovDQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9yZWFkbWUudHh0IGIvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwZDY4NwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9wb3J0YWJsZS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0VhY2ggcmVhbCB0aW1lIGtlcm5lbCBwb3J0IGNvbnNpc3RzIG9mIHRocmVlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgY29yZSBrZXJuZWwNCitjb21wb25lbnRzIGFuZCBhcmUgY29tbW9uIHRvIGV2ZXJ5IHBvcnQsIGFuZCBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0IGFyZSANCitzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbWljcm9jb250cm9sbGVyIGFuZC9vciBjb21waWxlci4NCisNCisNCisrIFRoZSBGcmVlUlRPUy9Tb3VyY2UvUG9ydGFibGUvTWVtTWFuZyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHRocmVlIHNhbXBsZSANCittZW1vcnkgYWxsb2NhdG9ycyBhcyBkZXNjcmliZWQgb24gdGhlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFdFQiBzaXRlLg0KKw0KKysgVGhlIG90aGVyIGRpcmVjdG9yaWVzIGVhY2ggY29udGFpbiBmaWxlcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgDQorbWljcm9jb250cm9sbGVyIG9yIGNvbXBpbGVyLg0KKw0KKw0KKw0KK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIEdDQyBwb3J0IGZvciB0aGUgQVRNZWdhMzIzIA0KK21pY3JvY29udHJvbGxlciB0aGVuIHRoZSBwb3J0IHNwZWNpZmljIGZpbGVzIGFyZSBjb250YWluZWQgaW4NCitGcmVlUlRPUy9Tb3VyY2UvUG9ydGFibGUvR0NDL0FUTWVnYTMyMyBkaXJlY3RvcnkuICBJZiB0aGlzIGlzIHRoZSBvbmx5DQorcG9ydCB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdGhlbiBhbGwgdGhlIG90aGVyIGRpcmVjdG9yaWVzIGNhbiBiZQ0KK2lnbm9yZWQuDQorDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvU291cmNlL3F1ZXVlLmMgYi9GcmVlUlRPUy9Tb3VyY2UvcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE3MWIwCi0tLSAvZGV2L251bGwKKysrIGIvRnJlZVJUT1MvU291cmNlL3F1ZXVlLmMKQEAgLTAsMCArMSwxNzQzIEBACisvKg0KKyAgICBGcmVlUlRPUyBWNy4yLjAgLSBDb3B5cmlnaHQgKEMpIDIwMTIgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQorDQorDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBGcmVlUlRPUyB0dXRvcmlhbCBib29rcyBhcmUgYXZhaWxhYmxlIGluIHBkZiBhbmQgcGFwZXJiYWNrLiAgICAgICAgKg0KKyAgICAgKiAgICBDb21wbGV0ZSwgcmV2aXNlZCwgYW5kIGVkaXRlZCBwZGYgcmVmZXJlbmNlIG1hbnVhbHMgYXJlIGFsc28gICAgICAgKg0KKyAgICAgKiAgICBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBQdXJjaGFzaW5nIEZyZWVSVE9TIGRvY3VtZW50YXRpb24gd2lsbCBub3Qgb25seSBoZWxwIHlvdSwgYnkgICAgICAgKg0KKyAgICAgKiAgICBlbnN1cmluZyB5b3UgZ2V0IHJ1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBhbmQgd2l0aCBhbiAgICAgICAgKg0KKyAgICAgKiAgICBpbi1kZXB0aCBrbm93bGVkZ2Ugb2YgaG93IHRvIHVzZSBGcmVlUlRPUywgaXQgd2lsbCBhbHNvIGhlbHAgICAgICAgKg0KKyAgICAgKiAgICB0aGUgRnJlZVJUT1MgcHJvamVjdCB0byBjb250aW51ZSB3aXRoIGl0cyBtaXNzaW9uIG9mIHByb3ZpZGluZyAgICAgKg0KKyAgICAgKiAgICBwcm9mZXNzaW9uYWwgZ3JhZGUsIGNyb3NzIHBsYXRmb3JtLCBkZSBmYWN0byBzdGFuZGFyZCBzb2x1dGlvbnMgICAgKg0KKyAgICAgKiAgICBmb3IgbWljcm9jb250cm9sbGVycyAtIGNvbXBsZXRlbHkgZnJlZSBvZiBjaGFyZ2UhICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICA+Pj4gU2VlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIDw8PCAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBUaGFuayB5b3UgZm9yIHVzaW5nIEZyZWVSVE9TLCBhbmQgdGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisNCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEFORCBNT0RJRklFRCBCWSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KKyAgICA+Pj5OT1RFPDw8IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8NCisgICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8NCisgICAgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1MNCisgICAga2VybmVsLiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZDQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3INCisgICAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgICAgTGljZW5zZSBhbmQgdGhlIEZyZWVSVE9TIGxpY2Vuc2UgZXhjZXB0aW9uIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCBpdA0KKyAgICBjYW4gYmUgdmlld2VkIGhlcmU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sIGFuZCBhbHNvIG9idGFpbmVkDQorICAgIGJ5IHdyaXRpbmcgdG8gUmljaGFyZCBCYXJyeSwgY29udGFjdCBkZXRhaWxzIGZvciB3aG9tIGFyZSBhdmFpbGFibGUgb24gdGhlDQorICAgIEZyZWVSVE9TIFdFQiBzaXRlLg0KKw0KKyAgICAxIHRhYiA9PSA0IHNwYWNlcyENCisgICAgDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZyB0aGUgRkFRICJNeSBhcHBsaWNhdGlvbiBkb2VzICAgKg0KKyAgICAgKiAgICBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgdHJhaW5pbmcsIGxhdGVzdCBpbmZvcm1hdGlvbiwgDQorICAgIGxpY2Vuc2UgYW5kIGNvbnRhY3QgZGV0YWlscy4NCisgICAgDQorICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQorICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wuDQorDQorICAgIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcywgd2hvIHNlbGwgDQorICAgIHRoZSBjb2RlIHdpdGggY29tbWVyY2lhbCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24sIGFuZCBtaWRkbGV3YXJlLCB1bmRlciANCisgICAgdGhlIE9wZW5SVE9TIGJyYW5kOiBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbS4gIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbw0KKyAgICBwcm92aWRlIGEgc2FmZXR5IGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiB1bmRlciANCisgICAgdGhlIFNhZmVSVE9TIGJyYW5kOiBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbS4NCisqLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KK2FsbCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB1c2UgdGhlIE1QVSB3cmFwcGVycy4gIFRoYXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuDQordGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCisjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQorI2luY2x1ZGUgInRhc2suaCINCisjaW5jbHVkZSAic3RhdGljLWFsbG9jYXRvci5oIg0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxICkNCisJI2luY2x1ZGUgImNyb3V0aW5lLmgiDQorI2VuZGlmDQorDQorI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBVQkxJQyBMSVNUIEFQSSBkb2N1bWVudGVkIGluIGxpc3QuaA0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogQ29uc3RhbnRzIHVzZWQgd2l0aCB0aGUgY1J4TG9jayBhbmQgeFR4TG9jayBzdHJ1Y3R1cmUgbWVtYmVycy4gKi8NCisjZGVmaW5lIHF1ZXVlVU5MT0NLRUQJCQkJCSggKCBzaWduZWQgcG9ydEJBU0VfVFlQRSApIC0xICkNCisjZGVmaW5lIHF1ZXVlTE9DS0VEX1VOTU9ESUZJRUQJCQkoICggc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwICkNCisNCisjZGVmaW5lIHF1ZXVlRVJST05FT1VTX1VOQkxPQ0sJCQkoIC0xICkNCisNCisvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICovDQorI2RlZmluZQlxdWV1ZVNFTkRfVE9fQkFDSwkJCQkoIDAgKQ0KKyNkZWZpbmUJcXVldWVTRU5EX1RPX0ZST05UCQkJCSggMSApDQorDQorLyogRWZmZWN0aXZlbHkgbWFrZSBhIHVuaW9uIG91dCBvZiB0aGUgeFFVRVVFIHN0cnVjdHVyZS4gKi8NCisjZGVmaW5lIHB4TXV0ZXhIb2xkZXIJCQkJCXBjVGFpbA0KKyNkZWZpbmUgdXhRdWV1ZVR5cGUJCQkJCQlwY0hlYWQNCisjZGVmaW5lIHV4UmVjdXJzaXZlQ2FsbENvdW50CQkJcGNSZWFkRnJvbQ0KKyNkZWZpbmUgcXVldWVRVUVVRV9JU19NVVRFWAkJCQlOVUxMDQorDQorLyogU2VtYXBob3JlcyBkbyBub3QgYWN0dWFsbHkgc3RvcmUgb3IgY29weSBkYXRhLCBzbyBoYXZlIGFuIGl0ZW1zIHNpemUgb2YNCit6ZXJvLiAqLw0KKyNkZWZpbmUgcXVldWVTRU1BUEhPUkVfUVVFVUVfSVRFTV9MRU5HVEggKCAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwICkNCisjZGVmaW5lIHF1ZXVlRE9OVF9CTE9DSwkJCQkJICggKCBwb3J0VGlja1R5cGUgKSAwVSApDQorI2RlZmluZSBxdWV1ZU1VVEVYX0dJVkVfQkxPQ0tfVElNRQkJICggKCBwb3J0VGlja1R5cGUgKSAwVSApDQorDQorLyogVGhlc2UgZGVmaW5pdGlvbnMgKm11c3QqIG1hdGNoIHRob3NlIGluIHF1ZXVlLmguICovDQorI2RlZmluZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRQkJCQkoIDBVICkNCisjZGVmaW5lIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWCAJCQkJKCAxVSApDQorI2RlZmluZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFCSggMlUgKQ0KKyNkZWZpbmUgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkUJKCAzVSApDQorI2RlZmluZSBxdWV1ZVFVRVVFX1RZUEVfUkVDVVJTSVZFX01VVEVYCQkoIDRVICkNCisNCisvKg0KKyAqIERlZmluaXRpb24gb2YgdGhlIHF1ZXVlIHVzZWQgYnkgdGhlIHNjaGVkdWxlci4NCisgKiBJdGVtcyBhcmUgcXVldWVkIGJ5IGNvcHksIG5vdCByZWZlcmVuY2UuDQorICovDQordHlwZWRlZiBzdHJ1Y3QgUXVldWVEZWZpbml0aW9uDQorew0KKwlzaWduZWQgY2hhciAqcGNIZWFkOwkJCQkvKjwgUG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYS4gKi8NCisJc2lnbmVkIGNoYXIgKnBjVGFpbDsJCQkJLyo8IFBvaW50cyB0byB0aGUgYnl0ZSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZSBzdG9yYWdlIGFyZWEuICBPbmNlIG1vcmUgYnl0ZSBpcyBhbGxvY2F0ZWQgdGhhbiBuZWNlc3NhcnkgdG8gc3RvcmUgdGhlIHF1ZXVlIGl0ZW1zLCB0aGlzIGlzIHVzZWQgYXMgYSBtYXJrZXIuICovDQorDQorCXNpZ25lZCBjaGFyICpwY1dyaXRlVG87CQkJCS8qPCBQb2ludHMgdG8gdGhlIGZyZWUgbmV4dCBwbGFjZSBpbiB0aGUgc3RvcmFnZSBhcmVhLiAqLw0KKwlzaWduZWQgY2hhciAqcGNSZWFkRnJvbTsJCQkvKjwgUG9pbnRzIHRvIHRoZSBsYXN0IHBsYWNlIHRoYXQgYSBxdWV1ZWQgaXRlbSB3YXMgcmVhZCBmcm9tLiAqLw0KKw0KKwl4TGlzdCB4VGFza3NXYWl0aW5nVG9TZW5kOwkJCQkvKjwgTGlzdCBvZiB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgdG8gcG9zdCBvbnRvIHRoaXMgcXVldWUuICBTdG9yZWQgaW4gcHJpb3JpdHkgb3JkZXIuICovDQorCXhMaXN0IHhUYXNrc1dhaXRpbmdUb1JlY2VpdmU7CQkJLyo8IExpc3Qgb2YgdGFza3MgdGhhdCBhcmUgYmxvY2tlZCB3YWl0aW5nIHRvIHJlYWQgZnJvbSB0aGlzIHF1ZXVlLiAgU3RvcmVkIGluIHByaW9yaXR5IG9yZGVyLiAqLw0KKw0KKwl2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4TWVzc2FnZXNXYWl0aW5nOy8qPCBUaGUgbnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuICovDQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhMZW5ndGg7CQkvKjwgVGhlIGxlbmd0aCBvZiB0aGUgcXVldWUgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGl0IHdpbGwgaG9sZCwgbm90IHRoZSBudW1iZXIgb2YgYnl0ZXMuICovDQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJdGVtU2l6ZTsJCS8qPCBUaGUgc2l6ZSBvZiBlYWNoIGl0ZW1zIHRoYXQgdGhlIHF1ZXVlIHdpbGwgaG9sZC4gKi8NCisNCisJdm9sYXRpbGUgc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJ4TG9jazsJLyo8IFN0b3JlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlIChyZW1vdmVkIGZyb20gdGhlIHF1ZXVlKSB3aGlsZSB0aGUgcXVldWUgd2FzIGxvY2tlZC4gIFNldCB0byBxdWV1ZVVOTE9DS0VEIHdoZW4gdGhlIHF1ZXVlIGlzIG5vdCBsb2NrZWQuICovDQorCXZvbGF0aWxlIHNpZ25lZCBwb3J0QkFTRV9UWVBFIHhUeExvY2s7CS8qPCBTdG9yZXMgdGhlIG51bWJlciBvZiBpdGVtcyB0cmFuc21pdHRlZCB0byB0aGUgcXVldWUgKGFkZGVkIHRvIHRoZSBxdWV1ZSkgd2hpbGUgdGhlIHF1ZXVlIHdhcyBsb2NrZWQuICBTZXQgdG8gcXVldWVVTkxPQ0tFRCB3aGVuIHRoZSBxdWV1ZSBpcyBub3QgbG9ja2VkLiAqLw0KKw0KKyAgICB1bnNpZ25lZCBjaGFyIHVjUXVldWVUeXBlOw0KKyAgICANCisJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KKwkJdW5zaWduZWQgY2hhciB1Y1F1ZXVlTnVtYmVyOw0KKwkjZW5kaWYNCisNCit9IHhRVUVVRTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIEluc2lkZSB0aGlzIGZpbGUgeFF1ZXVlSGFuZGxlIGlzIGEgcG9pbnRlciB0byBhIHhRVUVVRSBzdHJ1Y3R1cmUuDQorICogVG8ga2VlcCB0aGUgZGVmaW5pdGlvbiBwcml2YXRlIHRoZSBBUEkgaGVhZGVyIGZpbGUgZGVmaW5lcyBpdCBhcyBhDQorICogcG9pbnRlciB0byB2b2lkLg0KKyAqLw0KK3R5cGVkZWYgeFFVRVVFICogeFF1ZXVlSGFuZGxlOw0KKw0KKy8qDQorICogUHJvdG90eXBlcyBmb3IgcHVibGljIGZ1bmN0aW9ucyBhcmUgaW5jbHVkZWQgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvDQorICogaW5jbHVkZSB0aGUgQVBJIGhlYWRlciBmaWxlIChhcyBpdCBkZWZpbmVzIHhRdWV1ZUhhbmRsZSBkaWZmZXJlbnRseSkuICBUaGVzZQ0KKyAqIGZ1bmN0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgQVBJIGhlYWRlciBmaWxlLg0KKyAqLw0KK3ZvaWQgeEluaXRRdWV1ZXModm9pZCk7DQoreFF1ZXVlSGFuZGxlIHhRdWV1ZUdlbmVyaWNDcmVhdGUoIHZvaWQqICwgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTGVuZ3RoLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SXRlbVNpemUsIHVuc2lnbmVkIGNoYXIgdWNRdWV1ZVR5cGUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeENvcHlQb3NpdGlvbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nKCBjb25zdCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQordm9pZCB2UXVldWVEZWxldGUoIHhRdWV1ZUhhbmRsZSB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiwgcG9ydEJBU0VfVFlQRSB4Q29weVBvc2l0aW9uICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVHZW5lcmljUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwgcG9ydEJBU0VfVFlQRSB4SnVzdFBlZWtpbmcgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoreFF1ZXVlSGFuZGxlIHhRdWV1ZUNyZWF0ZU11dGV4KCB1bnNpZ25lZCBjaGFyIHVjUXVldWVUeXBlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCit4UXVldWVIYW5kbGUgeFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDb3VudFZhbHVlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5pdGlhbENvdW50ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCitwb3J0QkFTRV9UWVBFIHhRdWV1ZVRha2VNdXRleFJlY3Vyc2l2ZSggeFF1ZXVlSGFuZGxlIHhNdXRleCwgcG9ydFRpY2tUeXBlIHhCbG9ja1RpbWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3BvcnRCQVNFX1RZUEUgeFF1ZXVlR2l2ZU11dGV4UmVjdXJzaXZlKCB4UXVldWVIYW5kbGUgeE11dGV4ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhDb3B5UG9zaXRpb24gKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUFsdEdlbmVyaWNSZWNlaXZlKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhKdXN0UGVla2luZyApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlSXNRdWV1ZUVtcHR5RnJvbUlTUiggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUlzUXVldWVGdWxsRnJvbUlTUiggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZ0Zyb21JU1IoIGNvbnN0IHhRdWV1ZUhhbmRsZSBweFF1ZXVlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCit2b2lkIHZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KK3Vuc2lnbmVkIGNoYXIgdWNRdWV1ZUdldFF1ZXVlTnVtYmVyKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQordm9pZCB2UXVldWVTZXRRdWV1ZU51bWJlciggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHVuc2lnbmVkIGNoYXIgdWNRdWV1ZU51bWJlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQordW5zaWduZWQgY2hhciB1Y1F1ZXVlR2V0UXVldWVUeXBlKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorcG9ydEJBU0VfVFlQRSB4UXVldWVHZW5lcmljUmVzZXQoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCBwb3J0QkFTRV9UWVBFIHhOZXdRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoreFRhc2tIYW5kbGUgeFF1ZXVlR2V0TXV0ZXhIb2xkZXIoIHhRdWV1ZUhhbmRsZSB4U2VtYXBob3JlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIENvLXJvdXRpbmUgcXVldWUgZnVuY3Rpb25zIGRpZmZlciBmcm9tIHRhc2sgcXVldWUgZnVuY3Rpb25zLiAgQ28tcm91dGluZXMgYXJlDQorICogYW4gb3B0aW9uYWwgY29tcG9uZW50Lg0KKyAqLw0KKyNpZiBjb25maWdVU0VfQ09fUk9VVElORVMgPT0gMQ0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVDUlNlbmRGcm9tSVNSKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwgc2lnbmVkIHBvcnRCQVNFX1RZUEUgeENvUm91dGluZVByZXZpb3VzbHlXb2tlbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUNSUmVjZWl2ZUZyb21JU1IoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICpwdkJ1ZmZlciwgc2lnbmVkIHBvcnRCQVNFX1RZUEUgKnB4VGFza1dva2VuICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisJc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlQ1JTZW5kKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUNSUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKnB2QnVmZmVyLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisjZW5kaWYNCisNCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKS9zaXplb2YoYVswXSkpDQorDQorI2lmbmRlZiBjb25maWdNQVhfTlVNX09GX1FVRVVFUw0KKyNkZWZpbmUgY29uZmlnTUFYX05VTV9PRl9RVUVVRVMgKDY0KQ0KKyNlbmRpZg0KKyNkZWZpbmUgTlVNX09GX1FVRVVFX0ZMQUdTICgoY29uZmlnTUFYX05VTV9PRl9RVUVVRVMrMzEpLzMyKQ0KK3N0YXRpYyB4UVVFVUUgc05sUXVldWVzW2NvbmZpZ01BWF9OVU1fT0ZfUVVFVUVTXTsNCitzdGF0aWMgdWludDMyX3Qgc05sUXVldWVzRmxhZ3NbTlVNX09GX1FVRVVFX0ZMQUdTXTsNCitzdGF0aWMgc3RhdGljX3Bvb2xfdCBzUXVldWVzUG9vbDsNCisNCisjaWYgY29uZmlnVVNFX0NPVU5USU5HX1NFTUFQSE9SRVMgPT0gMQ0KK3N0YXRpYyB1aW50OF90IHNObENvdW50aW5nU2VtYXBob3Jlc1tjb25maWdNQVhfQ09VTlRJTkdfU0VNQVBIT1JFU107DQorI2RlZmluZSBNQVhfQ09VTlRJTkdfU0VNQVBIT1JFU19GTEFHUyAoKGNvbmZpZ01BWF9DT1VOVElOR19TRU1BUEhPUkVTKzMxKS8zMikNCitzdGF0aWMgdWludDMyX3Qgc05sQ291bnRpbmdTZW1hcGhvcmVzRmxhZ3NbTUFYX0NPVU5USU5HX1NFTUFQSE9SRVNfRkxBR1NdOw0KK3N0YXRpYyBzdGF0aWNfcG9vbF90IHNTZW1hcGhvcmVzUG9vbDsNCit4UXVldWVIYW5kbGUgeFNlbWFwaG9yZUNyZWF0ZUJpbmFyeSh2b2lkKTsNCisjZW5kaWYNCisNCisvLyB4eHgNCisjZGVmaW5lIHNlbVNFTUFQSE9SRV9RVUVVRV9JVEVNX0xFTkdUSAkJKCAoIHVuc2lnbmVkIGNoYXIgKSAwVSApDQorDQoreFF1ZXVlSGFuZGxlIHhTZW1hcGhvcmVDcmVhdGVCaW5hcnkodm9pZCkNCit7ICAgDQorICAgIHZvaWQqIGJpbmFyeVNlbWEgPSBwb29sQWxsb2NhdGVCdWZmZXIoJnNTZW1hcGhvcmVzUG9vbCk7DQorICAgIHhRdWV1ZUhhbmRsZSByZXR2YWwgPSB4UXVldWVHZW5lcmljQ3JlYXRlKCBiaW5hcnlTZW1hLCAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAxLCBzZW1TRU1BUEhPUkVfUVVFVUVfSVRFTV9MRU5HVEgsIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFICk7DQorICAgIGlmKHJldHZhbCAhPSBOVUxMICkNCisgICAgew0KKyAgICAgICAgLy8geFNlbWFwaG9yZUdpdmUNCisgICAgICAgIHhRdWV1ZUdlbmVyaWNTZW5kKCByZXR2YWwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gYmxvY2sgdGltZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlU0VORF9UT19CQUNLICk7DQorICAgIH0NCisgICAgcmV0dXJuIHJldHZhbDsNCit9DQorDQorDQordm9pZCB4SW5pdFF1ZXVlcyh2b2lkKQ0KK3sNCisgICAgcG9vbEluaXQoICZzUXVldWVzUG9vbCwNCisgICAgICAgICAgICAgIHNpemVvZihzTmxRdWV1ZXNbMF0pLA0KKyAgICAgICAgICAgICAgQVJSQVlfU0laRShzTmxRdWV1ZXMpLA0KKyAgICAgICAgICAgICAgJnNObFF1ZXVlcywNCisgICAgICAgICAgICAgICZzTmxRdWV1ZXNGbGFncyk7DQorDQorI2lmIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTID09IDENCisgICAgcG9vbEluaXQoICZzU2VtYXBob3Jlc1Bvb2wsDQorICAgICAgICAgICAgICBzaXplb2Yoc05sQ291bnRpbmdTZW1hcGhvcmVzWzBdKSwNCisgICAgICAgICAgICAgIEFSUkFZX1NJWkUoc05sQ291bnRpbmdTZW1hcGhvcmVzKSwNCisgICAgICAgICAgICAgICZzTmxDb3VudGluZ1NlbWFwaG9yZXMsDQorICAgICAgICAgICAgICAmc05sQ291bnRpbmdTZW1hcGhvcmVzRmxhZ3MpOw0KKyNlbmRpZg0KK30NCisNCisNCisvKg0KKyAqIFRoZSBxdWV1ZSByZWdpc3RyeSBpcyBqdXN0IGEgbWVhbnMgZm9yIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMgdG8gbG9jYXRlDQorICogcXVldWUgc3RydWN0dXJlcy4gIEl0IGhhcyBubyBvdGhlciBwdXJwb3NlIHNvIGlzIGFuIG9wdGlvbmFsIGNvbXBvbmVudC4NCisgKi8NCisjaWYgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDANCisNCisJLyogVGhlIHR5cGUgc3RvcmVkIHdpdGhpbiB0aGUgcXVldWUgcmVnaXN0cnkgYXJyYXkuICBUaGlzIGFsbG93cyBhIG5hbWUNCisJdG8gYmUgYXNzaWduZWQgdG8gZWFjaCBxdWV1ZSBtYWtpbmcga2VybmVsIGF3YXJlIGRlYnVnZ2luZyBhIGxpdHRsZQ0KKwltb3JlIHVzZXIgZnJpZW5kbHkuICovDQorCXR5cGVkZWYgc3RydWN0IFFVRVVFX1JFR0lTVFJZX0lURU0NCisJew0KKwkJc2lnbmVkIGNoYXIgKnBjUXVldWVOYW1lOw0KKwkJeFF1ZXVlSGFuZGxlIHhIYW5kbGU7DQorCX0geFF1ZXVlUmVnaXN0cnlJdGVtOw0KKw0KKwkvKiBUaGUgcXVldWUgcmVnaXN0cnkgaXMgc2ltcGx5IGFuIGFycmF5IG9mIHhRdWV1ZVJlZ2lzdHJ5SXRlbSBzdHJ1Y3R1cmVzLg0KKwlUaGUgcGNRdWV1ZU5hbWUgbWVtYmVyIG9mIGEgc3RydWN0dXJlIGJlaW5nIE5VTEwgaXMgaW5kaWNhdGl2ZSBvZiB0aGUNCisJYXJyYXkgcG9zaXRpb24gYmVpbmcgdmFjYW50LiAqLw0KKwl4UXVldWVSZWdpc3RyeUl0ZW0geFF1ZXVlUmVnaXN0cnlbIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgXTsNCisNCisJLyogUmVtb3ZlcyBhIHF1ZXVlIGZyb20gdGhlIHJlZ2lzdHJ5IGJ5IHNpbXBseSBzZXR0aW5nIHRoZSBwY1F1ZXVlTmFtZQ0KKwltZW1iZXIgdG8gTlVMTC4gKi8NCisJc3RhdGljIHZvaWQgdlF1ZXVlVW5yZWdpc3RlclF1ZXVlKCB4UXVldWVIYW5kbGUgeFF1ZXVlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisJdm9pZCB2UXVldWVBZGRUb1JlZ2lzdHJ5KCB4UXVldWVIYW5kbGUgeFF1ZXVlLCBzaWduZWQgY2hhciAqcGNRdWV1ZU5hbWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKyNlbmRpZg0KKw0KKy8qDQorICogVW5sb2NrcyBhIHF1ZXVlIGxvY2tlZCBieSBhIGNhbGwgdG8gcHJ2TG9ja1F1ZXVlLiAgTG9ja2luZyBhIHF1ZXVlIGRvZXMgbm90DQorICogcHJldmVudCBhbiBJU1IgZnJvbSBhZGRpbmcgb3IgcmVtb3ZpbmcgaXRlbXMgdG8gdGhlIHF1ZXVlLCBidXQgZG9lcyBwcmV2ZW50DQorICogYW4gSVNSIGZyb20gcmVtb3ZpbmcgdGFza3MgZnJvbSB0aGUgcXVldWUgZXZlbnQgbGlzdHMuICBJZiBhbiBJU1IgZmluZHMgYQ0KKyAqIHF1ZXVlIGlzIGxvY2tlZCBpdCB3aWxsIGluc3RlYWQgaW5jcmVtZW50IHRoZSBhcHByb3ByaWF0ZSBxdWV1ZSBsb2NrIGNvdW50DQorICogdG8gaW5kaWNhdGUgdGhhdCBhIHRhc2sgbWF5IHJlcXVpcmUgdW5ibG9ja2luZy4gIFdoZW4gdGhlIHF1ZXVlIGluIHVubG9ja2VkDQorICogdGhlc2UgbG9jayBjb3VudHMgYXJlIGluc3BlY3RlZCwgYW5kIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gdGFrZW4uDQorICovDQorc3RhdGljIHZvaWQgcHJ2VW5sb2NrUXVldWUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFVzZXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkgZGF0YSBpbiBhIHF1ZXVlLg0KKyAqDQorICogQHJldHVybiBwZFRSVUUgaWYgdGhlIHF1ZXVlIGNvbnRhaW5zIG5vIGl0ZW1zLCBvdGhlcndpc2UgcGRGQUxTRS4NCisgKi8NCitzdGF0aWMgc2lnbmVkIHBvcnRCQVNFX1RZUEUgcHJ2SXNRdWV1ZUVtcHR5KCBjb25zdCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBVc2VzIGEgY3JpdGljYWwgc2VjdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW55IHNwYWNlIGluIGEgcXVldWUuDQorICoNCisgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGVyZSBpcyBubyBzcGFjZSwgb3RoZXJ3aXNlIHBkRkFMU0U7DQorICovDQorc3RhdGljIHNpZ25lZCBwb3J0QkFTRV9UWVBFIHBydklzUXVldWVGdWxsKCBjb25zdCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBDb3BpZXMgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSwgZWl0aGVyIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgb3IgdGhlDQorICogYmFjayBvZiB0aGUgcXVldWUuDQorICovDQorc3RhdGljIHZvaWQgcHJ2Q29weURhdGFUb1F1ZXVlKCB4UVVFVUUgKnB4UXVldWUsIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsIHBvcnRCQVNFX1RZUEUgeFBvc2l0aW9uICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIENvcGllcyBhbiBpdGVtIG91dCBvZiBhIHF1ZXVlLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydkNvcHlEYXRhRnJvbVF1ZXVlKCB4UVVFVUUgKiBjb25zdCBweFF1ZXVlLCBjb25zdCB2b2lkICpwdkJ1ZmZlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBNYWNybyB0byBtYXJrIGEgcXVldWUgYXMgbG9ja2VkLiAgTG9ja2luZyBhIHF1ZXVlIHByZXZlbnRzIGFuIElTUiBmcm9tDQorICogYWNjZXNzaW5nIHRoZSBxdWV1ZSBldmVudCBsaXN0cy4NCisgKi8NCisjZGVmaW5lIHBydkxvY2tRdWV1ZSggcHhRdWV1ZSApCQkJCQkJCQlcDQorCXRhc2tFTlRFUl9DUklUSUNBTCgpOwkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoICggcHhRdWV1ZSApLT54UnhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJXA0KKwkJCSggcHhRdWV1ZSApLT54UnhMb2NrID0gcXVldWVMT0NLRURfVU5NT0RJRklFRDsJXA0KKwkJfQkJCQkJCQkJCQkJCQlcDQorCQlpZiggKCBweFF1ZXVlICktPnhUeExvY2sgPT0gcXVldWVVTkxPQ0tFRCApCQkJXA0KKwkJewkJCQkJCQkJCQkJCQlcDQorCQkJKCBweFF1ZXVlICktPnhUeExvY2sgPSBxdWV1ZUxPQ0tFRF9VTk1PRElGSUVEOwlcDQorCQl9CQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJXA0KKwl0YXNrRVhJVF9DUklUSUNBTCgpDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBVQkxJQyBRVUVVRSBNQU5BR0VNRU5UIEFQSSBkb2N1bWVudGVkIGluIHF1ZXVlLmgNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFF1ZXVlR2VuZXJpY1Jlc2V0KCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgcG9ydEJBU0VfVFlQRSB4TmV3UXVldWUgKQ0KK3sNCisJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorDQorCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwl7DQorCQlweFF1ZXVlLT5wY1RhaWwgPSBweFF1ZXVlLT5wY0hlYWQgKyAoIHB4UXVldWUtPnV4TGVuZ3RoICogcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KKwkJcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsNCisJCXB4UXVldWUtPnBjV3JpdGVUbyA9IHB4UXVldWUtPnBjSGVhZDsNCisJCXB4UXVldWUtPnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQgKyAoICggcHhRdWV1ZS0+dXhMZW5ndGggLSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAxVSApICogcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KKwkJcHhRdWV1ZS0+eFJ4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQorCQlweFF1ZXVlLT54VHhMb2NrID0gcXVldWVVTkxPQ0tFRDsNCisNCisJCWlmKCB4TmV3UXVldWUgPT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogSWYgdGhlcmUgYXJlIHRhc2tzIGJsb2NrZWQgd2FpdGluZyB0byByZWFkIGZyb20gdGhlIHF1ZXVlLCB0aGVuIA0KKwkJCXRoZSB0YXNrcyB3aWxsIHJlbWFpbiBibG9ja2VkIGFzIGFmdGVyIHRoaXMgZnVuY3Rpb24gZXhpdHMgdGhlIHF1ZXVlIA0KKwkJCXdpbGwgc3RpbGwgYmUgZW1wdHkuICBJZiB0aGVyZSBhcmUgdGFza3MgYmxvY2tlZCB3YWl0aW5nIHRvCXdyaXRlIHRvIA0KKwkJCXRoZSBxdWV1ZSwgdGhlbiBvbmUgc2hvdWxkIGJlIHVuYmxvY2tlZCBhcyBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4aXRzIA0KKwkJCWl0IHdpbGwgYmUgcG9zc2libGUgdG8gd3JpdGUgdG8gaXQuICovDQorCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkVFJVRSApDQorCQkJCXsNCisJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJLyogRW5zdXJlIHRoZSBldmVudCBxdWV1ZXMgc3RhcnQgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuICovDQorCQkJdkxpc3RJbml0aWFsaXNlKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKTsNCisJCQl2TGlzdEluaXRpYWxpc2UoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApOwkJDQorCQl9DQorCX0NCisJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisNCisJLyogQSB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgY2FsbGluZyBzZW1hbnRpYyBjb25zaXN0ZW5jeSB3aXRoIHByZXZpb3VzDQorCXZlcnNpb25zLiAqLw0KKwlyZXR1cm4gcGRQQVNTOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit4UXVldWVIYW5kbGUgeFF1ZXVlR2VuZXJpY0NyZWF0ZSggdm9pZCogcXVldWVCdWZmZXIsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UXVldWVMZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhJdGVtU2l6ZSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdWNRdWV1ZVR5cGUgKQ0KK3sNCit4UVVFVUUgKnB4TmV3UXVldWUgPSAoeFFVRVVFICopMHhkZWFkYmVlZjsNCit4UXVldWVIYW5kbGUgeFJldHVybiA9IE5VTEw7DQorDQorCS8qIEFsbG9jYXRlIHRoZSBuZXcgcXVldWUgc3RydWN0dXJlLiAqLw0KKwlpZiggdXhRdWV1ZUxlbmd0aCA+ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDAgKQ0KKwl7DQorICAgICAgICBweE5ld1F1ZXVlID0gKHhRVUVVRSopIHBvb2xBbGxvY2F0ZUJ1ZmZlcigmc1F1ZXVlc1Bvb2wpOw0KKwkJaWYoIHB4TmV3UXVldWUgIT0gTlVMTCApDQorCQl7DQorCQkJcHhOZXdRdWV1ZS0+cGNIZWFkID0gKCBzaWduZWQgY2hhciAqICkgcXVldWVCdWZmZXI7DQorCQkJaWYoIHB4TmV3UXVldWUtPnBjSGVhZCAhPSBOVUxMICkNCisJCQl7DQorCQkJCS8qIEluaXRpYWxpc2UgdGhlIHF1ZXVlIG1lbWJlcnMgYXMgZGVzY3JpYmVkIGFib3ZlIHdoZXJlIHRoZQ0KKwkJCQlxdWV1ZSB0eXBlIGlzIGRlZmluZWQuICovDQorCQkJCXB4TmV3UXVldWUtPnV4TGVuZ3RoID0gdXhRdWV1ZUxlbmd0aDsNCisJCQkJcHhOZXdRdWV1ZS0+dXhJdGVtU2l6ZSA9IHV4SXRlbVNpemU7DQorCQkJCXhRdWV1ZUdlbmVyaWNSZXNldCggcHhOZXdRdWV1ZSwgcGRUUlVFICk7DQorICAgICAgICAgICAgICAgIHB4TmV3UXVldWUtPnVjUXVldWVUeXBlID0gdWNRdWV1ZVR5cGU7DQorDQorCQkJCXRyYWNlUVVFVUVfQ1JFQVRFKCBweE5ld1F1ZXVlICk7DQorCQkJCXhSZXR1cm4gPSBweE5ld1F1ZXVlOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQl0cmFjZVFVRVVFX0NSRUFURV9GQUlMRUQoIHVjUXVldWVUeXBlICk7DQorCQkJCXBvb2xGcmVlQnVmZmVyKCAmc1F1ZXVlc1Bvb2wsIHB4TmV3UXVldWUgKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJY29uZmlnQVNTRVJUKCB4UmV0dXJuICk7DQorDQorCXJldHVybiB4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisNCisJeFF1ZXVlSGFuZGxlIHhRdWV1ZUNyZWF0ZU11dGV4KCB1bnNpZ25lZCBjaGFyIHVjUXVldWVUeXBlICkNCisJew0KKwl4UVVFVUUgKnB4TmV3UXVldWU7DQorDQorCQkvKiBQcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBwYXJhbWV0ZXJzIGlmDQorCQljb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgZG9lcyBub3QgZXF1YWwgMS4gKi8NCisJCSggdm9pZCApIHVjUXVldWVUeXBlOw0KKw0KKwkJLyogQWxsb2NhdGUgdGhlIG5ldyBxdWV1ZSBzdHJ1Y3R1cmUuICovDQorICAgICAgICBweE5ld1F1ZXVlID0gKHhRVUVVRSopIHBvb2xBbGxvY2F0ZUJ1ZmZlcigmc1F1ZXVlc1Bvb2wpOw0KKwkJaWYoIHB4TmV3UXVldWUgIT0gTlVMTCApDQorCQl7DQorCQkJLyogSW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIHByaW9yaXR5IGluaGVyaXRhbmNlLiAqLw0KKwkJCXB4TmV3UXVldWUtPnB4TXV0ZXhIb2xkZXIgPSBOVUxMOw0KKwkJCXB4TmV3UXVldWUtPnV4UXVldWVUeXBlID0gcXVldWVRVUVVRV9JU19NVVRFWDsNCisNCisJCQkvKiBRdWV1ZXMgdXNlZCBhcyBhIG11dGV4IG5vIGRhdGEgaXMgYWN0dWFsbHkgY29waWVkIGludG8gb3Igb3V0DQorCQkJb2YgdGhlIHF1ZXVlLiAqLw0KKwkJCXB4TmV3UXVldWUtPnBjV3JpdGVUbyA9IE5VTEw7DQorCQkJcHhOZXdRdWV1ZS0+cGNSZWFkRnJvbSA9IE5VTEw7DQorDQorCQkJLyogRWFjaCBtdXRleCBoYXMgYSBsZW5ndGggb2YgMSAobGlrZSBhIGJpbmFyeSBzZW1hcGhvcmUpIGFuZA0KKwkJCWFuIGl0ZW0gc2l6ZSBvZiAwIGFzIG5vdGhpbmcgaXMgYWN0dWFsbHkgY29waWVkIGludG8gb3Igb3V0DQorCQkJb2YgdGhlIG11dGV4LiAqLw0KKwkJCXB4TmV3UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFU7DQorCQkJcHhOZXdRdWV1ZS0+dXhMZW5ndGggPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAxVTsNCisJCQlweE5ld1F1ZXVlLT51eEl0ZW1TaXplID0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFU7DQorCQkJcHhOZXdRdWV1ZS0+eFJ4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQorCQkJcHhOZXdRdWV1ZS0+eFR4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQorDQorICAgICAgICAgICAgcHhOZXdRdWV1ZS0+dWNRdWV1ZVR5cGUgPSB1Y1F1ZXVlVHlwZTsNCisNCisJCQkvKiBFbnN1cmUgdGhlIGV2ZW50IHF1ZXVlcyBzdGFydCB3aXRoIHRoZSBjb3JyZWN0IHN0YXRlLiAqLw0KKwkJCXZMaXN0SW5pdGlhbGlzZSggJiggcHhOZXdRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICk7DQorCQkJdkxpc3RJbml0aWFsaXNlKCAmKCBweE5ld1F1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKTsNCisNCisJCQl0cmFjZUNSRUFURV9NVVRFWCggcHhOZXdRdWV1ZSApOw0KKw0KKwkJCS8qIFN0YXJ0IHdpdGggdGhlIHNlbWFwaG9yZSBpbiB0aGUgZXhwZWN0ZWQgc3RhdGUuICovDQorCQkJeFF1ZXVlR2VuZXJpY1NlbmQoIHB4TmV3UXVldWUsIE5VTEwsICggcG9ydFRpY2tUeXBlICkgMFUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJdHJhY2VDUkVBVEVfTVVURVhfRkFJTEVEKCk7DQorCQl9DQorDQorCQljb25maWdBU1NFUlQoIHB4TmV3UXVldWUgKTsNCisJCXJldHVybiBweE5ld1F1ZXVlOw0KKwl9DQorDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkgJiYgKCBJTkNMVURFX3hRdWV1ZUdldE11dGV4SG9sZGVyID09IDEgKSApDQorDQorCXZvaWQqIHhRdWV1ZUdldE11dGV4SG9sZGVyKCB4UXVldWVIYW5kbGUgeFNlbWFwaG9yZSApDQorCXsNCisJdm9pZCAqcHhSZXR1cm47DQorDQorCQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB4U2VtYXBob3JlR2V0TXV0ZXhIb2xkZXIoKSwgYW5kIHNob3VsZCBub3QNCisJCWJlIGNhbGxlZCBkaXJlY3RseS4gIE5vdGU6ICBUaGlzIGlzIGlzIGEgZ29vZCB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgdGhlDQorCQljYWxsaW5nIHRhc2sgaXMgdGhlIG11dGV4IGhvbGRlciwgYnV0IG5vdCBhIGdvb2Qgd2F5IG9mIGRldGVybWluaW5nIHRoZQ0KKwkJaWRlbnRpdHkgb2YgdGhlIG11dGV4IGhvbGRlciwgYXMgdGhlIGhvbGRlciBtYXkgY2hhbmdlIGJldHdlZW4gdGhlIA0KKwkJZm9sbG93aW5nIGNyaXRpY2FsIHNlY3Rpb24gZXhpdGluZyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybmluZy4gKi8NCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCWlmKCB4U2VtYXBob3JlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCisJCQl7DQorCQkJCXB4UmV0dXJuID0gKCB2b2lkICogKSB4U2VtYXBob3JlLT5weE11dGV4SG9sZGVyOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlweFJldHVybiA9IE5VTEw7DQorCQkJfQ0KKwkJfQ0KKwkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisJCQ0KKwkJcmV0dXJuIHB4UmV0dXJuOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTID09IDEgKQ0KKw0KKwlwb3J0QkFTRV9UWVBFIHhRdWV1ZUdpdmVNdXRleFJlY3Vyc2l2ZSggeFF1ZXVlSGFuZGxlIHB4TXV0ZXggKQ0KKwl7DQorCXBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJCWNvbmZpZ0FTU0VSVCggcHhNdXRleCApOw0KKw0KKwkJLyogSWYgdGhpcyBpcyB0aGUgdGFzayB0aGF0IGhvbGRzIHRoZSBtdXRleCB0aGVuIHB4TXV0ZXhIb2xkZXIgd2lsbCBub3QNCisJCWNoYW5nZSBvdXRzaWRlIG9mIHRoaXMgdGFzay4gIElmIHRoaXMgdGFzayBkb2VzIG5vdCBob2xkIHRoZSBtdXRleCB0aGVuDQorCQlweE11dGV4SG9sZGVyIGNhbiBuZXZlciBjb2luY2lkZW50YWxseSBlcXVhbCB0aGUgdGFza3MgaGFuZGxlLCBhbmQgYXMNCisJCXRoaXMgaXMgdGhlIG9ubHkgY29uZGl0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluIGl0IGRvZXMgbm90IG1hdHRlciBpZg0KKwkJcHhNdXRleEhvbGRlciBpcyBhY2Nlc3NlZCBzaW11bHRhbmVvdXNseSBieSBhbm90aGVyIHRhc2suICBUaGVyZWZvcmUgbm8NCisJCW11dHVhbCBleGNsdXNpb24gaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgcHhNdXRleEhvbGRlciB2YXJpYWJsZS4gKi8NCisJCWlmKCBweE11dGV4LT5weE11dGV4SG9sZGVyID09IHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApDQorCQl7DQorCQkJdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRSggcHhNdXRleCApOw0KKw0KKwkJCS8qIHV4UmVjdXJzaXZlQ2FsbENvdW50IGNhbm5vdCBiZSB6ZXJvIGlmIHB4TXV0ZXhIb2xkZXIgaXMgZXF1YWwgdG8NCisJCQl0aGUgdGFzayBoYW5kbGUsIHRoZXJlZm9yZSBubyB1bmRlcmZsb3cgY2hlY2sgaXMgcmVxdWlyZWQuICBBbHNvLA0KKwkJCXV4UmVjdXJzaXZlQ2FsbENvdW50IGlzIG9ubHkgbW9kaWZpZWQgYnkgdGhlIG11dGV4IGhvbGRlciwgYW5kIGFzDQorCQkJdGhlcmUgY2FuIG9ubHkgYmUgb25lLCBubyBtdXR1YWwgZXhjbHVzaW9uIGlzIHJlcXVpcmVkIHRvIG1vZGlmeSB0aGUNCisJCQl1eFJlY3Vyc2l2ZUNhbGxDb3VudCBtZW1iZXIuICovDQorDQorICAgICAgICAgICAgLyogDQorICAgICAgICAgICAgKCBweE11dGV4LT51eFJlY3Vyc2l2ZUNhbGxDb3VudCApLS07DQorICAgICAgICAgICAgaWYoIHB4TXV0ZXgtPnV4UmVjdXJzaXZlQ2FsbENvdW50ID09IDAgKQ0KKyAgICAgICAgICAgIEhlcmUgd2UgdXNlIHV4UmVjdXJzaXZlQ2FsbENvdW50KHdoaWNoIGlzIGEgcG9pbnRlcikgYXMgaW50ZWdlciwgdGhlIGNvbXBpbGVyDQorICAgICAgICAgICAgd2lsbCBhc3N1bWUgaXQgd291bGQgbmV2ZXIgYmUgTlVMTCB3aGVuIHdlIGRvICsrLy0tLCBoZW5jZSB0aGUgaWYgc3RhdGVtZW50IHdhcyANCisgICAgICAgICAgICBhbHdheXMgb3B0aW1pemVkIG91dC4gV2UgZm9yY2UgY2FzdCB0byBpbnQgdG8gd29yayBhcm91bmQgdGhpcy4qLw0KKwkJCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdG1wID0gKHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUpIChweE11dGV4LT51eFJlY3Vyc2l2ZUNhbGxDb3VudCk7DQorCQkJdG1wIC09IHNpemVvZigqcHhNdXRleC0+dXhSZWN1cnNpdmVDYWxsQ291bnQpOw0KKyAgICAgICAgICAgIHB4TXV0ZXgtPnV4UmVjdXJzaXZlQ2FsbENvdW50ID0gKHNpZ25lZCBjaGFyKikgdG1wOw0KKwkJCS8qIEhhdmUgd2UgdW53b3VuZCB0aGUgY2FsbCBjb3VudD8gKi8NCisJCQlpZiggdG1wID09IDAgKQ0KKwkJCXsNCisJCQkJLyogUmV0dXJuIHRoZSBtdXRleC4gIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHVuYmxvY2sgYW55IG90aGVyDQorCQkJCXRhc2sgdGhhdCBtaWdodCBiZSB3YWl0aW5nIHRvIGFjY2VzcyB0aGUgbXV0ZXguICovDQorCQkJCXhRdWV1ZUdlbmVyaWNTZW5kKCBweE11dGV4LCBOVUxMLCBxdWV1ZU1VVEVYX0dJVkVfQkxPQ0tfVElNRSwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCisJCQl9DQorICAgICAgICAgICAgDQorDQorCQkJeFJldHVybiA9IHBkUEFTUzsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvKiBXZSBjYW5ub3QgZ2l2ZSB0aGUgbXV0ZXggYmVjYXVzZSB3ZSBhcmUgbm90IHRoZSBob2xkZXIuICovDQorCQkJeFJldHVybiA9IHBkRkFJTDsNCisNCisJCQl0cmFjZUdJVkVfTVVURVhfUkVDVVJTSVZFX0ZBSUxFRCggcHhNdXRleCApOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCisNCisjZW5kaWYgLyogY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9SRUNVUlNJVkVfTVVURVhFUyA9PSAxDQorDQorCXBvcnRCQVNFX1RZUEUgeFF1ZXVlVGFrZU11dGV4UmVjdXJzaXZlKCB4UXVldWVIYW5kbGUgcHhNdXRleCwgcG9ydFRpY2tUeXBlIHhCbG9ja1RpbWUgKQ0KKwl7DQorCXBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJCWNvbmZpZ0FTU0VSVCggcHhNdXRleCApOw0KKw0KKwkJLyogQ29tbWVudHMgcmVnYXJkaW5nIG11dHVhbCBleGNsdXNpb24gYXMgcGVyIHRob3NlIHdpdGhpbg0KKwkJeFF1ZXVlR2l2ZU11dGV4UmVjdXJzaXZlKCkuICovDQorDQorCQl0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFKCBweE11dGV4ICk7DQorDQorCQlpZiggcHhNdXRleC0+cHhNdXRleEhvbGRlciA9PSB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkgKQ0KKwkJew0KKwkJCSggcHhNdXRleC0+dXhSZWN1cnNpdmVDYWxsQ291bnQgKSsrOw0KKwkJCXhSZXR1cm4gPSBwZFBBU1M7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJeFJldHVybiA9IHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCBweE11dGV4LCBOVUxMLCB4QmxvY2tUaW1lLCBwZEZBTFNFICk7DQorDQorCQkJLyogcGRQQVNTIHdpbGwgb25seSBiZSByZXR1cm5lZCBpZiB3ZSBzdWNjZXNzZnVsbHkgb2J0YWluZWQgdGhlIG11dGV4LA0KKwkJCXdlIG1heSBoYXZlIGJsb2NrZWQgdG8gcmVhY2ggaGVyZS4gKi8NCisJCQlpZiggeFJldHVybiA9PSBwZFBBU1MgKQ0KKwkJCXsNCisJCQkJKCBweE11dGV4LT51eFJlY3Vyc2l2ZUNhbGxDb3VudCApKys7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCXRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweE11dGV4ICk7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCisNCisjZW5kaWYgLyogY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTID09IDENCisNCit4UXVldWVIYW5kbGUgeFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhDb3VudFZhbHVlLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SW5pdGlhbENvdW50ICkNCisJew0KKwl4UXVldWVIYW5kbGUgcHhIYW5kbGU7DQorDQorICAgICAgICB2b2lkKiBzZW1hQmFja2luZ1N0b3JlID0gcG9vbEFsbG9jYXRlQnVmZmVyKCZzU2VtYXBob3Jlc1Bvb2wpOw0KKwkJY29uZmlnQVNTRVJUKCBzZW1hQmFja2luZ1N0b3JlICk7DQorDQorICAgICAgICBweEhhbmRsZSA9IHhRdWV1ZUdlbmVyaWNDcmVhdGUoIHNlbWFCYWNraW5nU3RvcmUsICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHV4Q291bnRWYWx1ZSwgcXVldWVTRU1BUEhPUkVfUVVFVUVfSVRFTV9MRU5HVEgsIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkUgKTsNCisNCisJCWlmKCBweEhhbmRsZSAhPSBOVUxMICkNCisJCXsNCisJCQlweEhhbmRsZS0+dXhNZXNzYWdlc1dhaXRpbmcgPSB1eEluaXRpYWxDb3VudDsNCisNCisJCQl0cmFjZUNSRUFURV9DT1VOVElOR19TRU1BUEhPUkUoKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl0cmFjZUNSRUFURV9DT1VOVElOR19TRU1BUEhPUkVfRkFJTEVEKCk7DQorCQl9DQorDQorCQljb25maWdBU1NFUlQoIHB4SGFuZGxlICk7DQorCQlyZXR1cm4gcHhIYW5kbGU7DQorCX0NCisNCisjZW5kaWYgLyogY29uZmlnVVNFX0NPVU5USU5HX1NFTUFQSE9SRVMgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhDb3B5UG9zaXRpb24gKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4RW50cnlUaW1lU2V0ID0gcGRGQUxTRTsNCit4VGltZU91dFR5cGUgeFRpbWVPdXQ7DQorDQorCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KKwljb25maWdBU1NFUlQoICEoICggcHZJdGVtVG9RdWV1ZSA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkgKSApOw0KKw0KKwkvKiBUaGlzIGZ1bmN0aW9uIHJlbGF4ZXMgdGhlIGNvZGluZyBzdGFuZGFyZCBzb21ld2hhdCB0byBhbGxvdyByZXR1cm4NCisJc3RhdGVtZW50cyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgaW50ZXJlc3QNCisJb2YgZXhlY3V0aW9uIHRpbWUgZWZmaWNpZW5jeS4gKi8NCisJZm9yKCA7OyApDQorCXsNCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCS8qIElzIHRoZXJlIHJvb20gb24gdGhlIHF1ZXVlIG5vdz8gIFRvIGJlIHJ1bm5pbmcgd2UgbXVzdCBiZQ0KKwkJCXRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgd2FudGluZyB0byBhY2Nlc3MgdGhlIHF1ZXVlLiAqLw0KKwkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWUtPnV4TGVuZ3RoICkNCisJCQl7DQorCQkJCXRyYWNlUVVFVUVfU0VORCggcHhRdWV1ZSApOw0KKwkJCQlwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHhDb3B5UG9zaXRpb24gKTsNCisNCisJCQkJLyogSWYgdGhlcmUgd2FzIGEgdGFzayB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZSBvbiB0aGUNCisJCQkJcXVldWUgdGhlbiB1bmJsb2NrIGl0IG5vdy4gKi8NCisJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRUUlVFICkNCisJCQkJCXsNCisJCQkJCQkvKiBUaGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4NCisJCQkJCQlvdXIgb3duIHNvIHlpZWxkIGltbWVkaWF0ZWx5LiAgWWVzIGl0IGlzIG9rIHRvIGRvDQorCQkJCQkJdGhpcyBmcm9tIHdpdGhpbiB0aGUgY3JpdGljYWwgc2VjdGlvbiAtIHRoZSBrZXJuZWwNCisJCQkJCQl0YWtlcyBjYXJlIG9mIHRoYXQuICovDQorCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJCQkvKiBSZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHByaXZpbGVnZSBsZXZlbCBiZWZvcmUgZXhpdGluZyB0aGUNCisJCQkJZnVuY3Rpb24uICovDQorCQkJCXJldHVybiBwZFBBU1M7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBwb3J0VGlja1R5cGUgKSAwICkNCisJCQkJew0KKwkJCQkJLyogVGhlIHF1ZXVlIHdhcyBmdWxsIGFuZCBubyBibG9jayB0aW1lIGlzIHNwZWNpZmllZCAob3INCisJCQkJCXRoZSBibG9jayB0aW1lIGhhcyBleHBpcmVkKSBzbyBsZWF2ZSBub3cuICovDQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJCQkJLyogUmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBwcml2aWxlZ2UgbGV2ZWwgYmVmb3JlIGV4aXRpbmcNCisJCQkJCXRoZSBmdW5jdGlvbi4gKi8NCisJCQkJCXRyYWNlUVVFVUVfU0VORF9GQUlMRUQoIHB4UXVldWUgKTsNCisJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYoIHhFbnRyeVRpbWVTZXQgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCS8qIFRoZSBxdWV1ZSB3YXMgZnVsbCBhbmQgYSBibG9jayB0aW1lIHdhcyBzcGVjaWZpZWQgc28NCisJCQkJCWNvbmZpZ3VyZSB0aGUgdGltZW91dCBzdHJ1Y3R1cmUuICovDQorCQkJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggJnhUaW1lT3V0ICk7DQorCQkJCQl4RW50cnlUaW1lU2V0ID0gcGRUUlVFOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisNCisJCS8qIEludGVycnVwdHMgYW5kIG90aGVyIHRhc2tzIGNhbiBzZW5kIHRvIGFuZCByZWNlaXZlIGZyb20gdGhlIHF1ZXVlDQorCQlub3cgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaGFzIGJlZW4gZXhpdGVkLiAqLw0KKw0KKwkJdlRhc2tTdXNwZW5kQWxsKCk7DQorCQlwcnZMb2NrUXVldWUoIHB4UXVldWUgKTsNCisNCisJCS8qIFVwZGF0ZSB0aGUgdGltZW91dCBzdGF0ZSB0byBzZWUgaWYgaXQgaGFzIGV4cGlyZWQgeWV0LiAqLw0KKwkJaWYoIHhUYXNrQ2hlY2tGb3JUaW1lT3V0KCAmeFRpbWVPdXQsICZ4VGlja3NUb1dhaXQgKSA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlpZiggcHJ2SXNRdWV1ZUZ1bGwoIHB4UXVldWUgKSAhPSBwZEZBTFNFICkNCisJCQl7DQorCQkJCXRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfU0VORCggcHhRdWV1ZSApOw0KKwkJCQl2VGFza1BsYWNlT25FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSwgeFRpY2tzVG9XYWl0ICk7DQorDQorCQkJCS8qIFVubG9ja2luZyB0aGUgcXVldWUgbWVhbnMgcXVldWUgZXZlbnRzIGNhbiBlZmZlY3QgdGhlDQorCQkJCWV2ZW50IGxpc3QuICBJdCBpcyBwb3NzaWJsZQl0aGF0IGludGVycnVwdHMgb2NjdXJyaW5nIG5vdw0KKwkJCQlyZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIGV2ZW50CWxpc3QgYWdhaW4gLSBidXQgYXMgdGhlDQorCQkJCXNjaGVkdWxlciBpcyBzdXNwZW5kZWQgdGhlIHRhc2sgd2lsbCBnbyBvbnRvIHRoZSBwZW5kaW5nDQorCQkJCXJlYWR5IGxhc3QgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHJlYWR5IGxpc3QuICovDQorCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQorDQorCQkJCS8qIFJlc3VtaW5nIHRoZSBzY2hlZHVsZXIgd2lsbCBtb3ZlIHRhc2tzIGZyb20gdGhlIHBlbmRpbmcNCisJCQkJcmVhZHkgbGlzdCBpbnRvIHRoZSByZWFkeSBsaXN0IC0gc28gaXQgaXMgZmVhc2libGUgdGhhdCB0aGlzDQorCQkJCXRhc2sgaXMgYWxyZWFkeSBpbiBhIHJlYWR5IGxpc3QgYmVmb3JlIGl0IHlpZWxkcyAtIGluIHdoaWNoDQorCQkJCWNhc2UgdGhlIHlpZWxkIHdpbGwgbm90IGNhdXNlIGEgY29udGV4dCBzd2l0Y2ggdW5sZXNzIHRoZXJlDQorCQkJCWlzIGFsc28gYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBpbiB0aGUgcGVuZGluZyByZWFkeSBsaXN0LiAqLw0KKwkJCQlpZiggeFRhc2tSZXN1bWVBbGwoKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQkvKiBUcnkgYWdhaW4uICovDQorCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQorCQkJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCS8qIFRoZSB0aW1lb3V0IGhhcyBleHBpcmVkLiAqLw0KKwkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQorCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCisNCisJCQkvKiBSZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHByaXZpbGVnZSBsZXZlbCBiZWZvcmUgZXhpdGluZyB0aGUNCisJCQlmdW5jdGlvbi4gKi8NCisJCQl0cmFjZVFVRVVFX1NFTkRfRkFJTEVEKCBweFF1ZXVlICk7DQorCQkJcmV0dXJuIGVyclFVRVVFX0ZVTEw7DQorCQl9DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgPT0gMQ0KKw0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljU2VuZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0LCBwb3J0QkFTRV9UWVBFIHhDb3B5UG9zaXRpb24gKQ0KKwl7DQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFOw0KKwl4VGltZU91dFR5cGUgeFRpbWVPdXQ7DQorDQorCQljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCisJCWNvbmZpZ0FTU0VSVCggISggKCBwdkl0ZW1Ub1F1ZXVlID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFUgKSApICk7DQorDQorCQlmb3IoIDs7ICkNCisJCXsNCisJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCQl7DQorCQkJCS8qIElzIHRoZXJlIHJvb20gb24gdGhlIHF1ZXVlIG5vdz8gIFRvIGJlIHJ1bm5pbmcgd2UgbXVzdCBiZQ0KKwkJCQl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdhbnRpbmcgdG8gYWNjZXNzIHRoZSBxdWV1ZS4gKi8NCisJCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KKwkJCQl7DQorCQkJCQl0cmFjZVFVRVVFX1NFTkQoIHB4UXVldWUgKTsNCisJCQkJCXBydkNvcHlEYXRhVG9RdWV1ZSggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeENvcHlQb3NpdGlvbiApOw0KKw0KKwkJCQkJLyogSWYgdGhlcmUgd2FzIGEgdGFzayB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZSBvbiB0aGUNCisJCQkJCXF1ZXVlIHRoZW4gdW5ibG9jayBpdCBub3cuICovDQorCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkVFJVRSApDQorCQkJCQkJew0KKwkJCQkJCQkvKiBUaGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4NCisJCQkJCQkJb3VyIG93biBzbyB5aWVsZCBpbW1lZGlhdGVseS4gKi8NCisJCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJCQl9DQorCQkJCQl9DQorDQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJcmV0dXJuIHBkUEFTUzsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBwb3J0VGlja1R5cGUgKSAwICkNCisJCQkJCXsNCisJCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KKwkJCQkJfQ0KKwkJCQkJZWxzZSBpZiggeEVudHJ5VGltZVNldCA9PSBwZEZBTFNFICkNCisJCQkJCXsNCisJCQkJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggJnhUaW1lT3V0ICk7DQorCQkJCQkJeEVudHJ5VGltZVNldCA9IHBkVFJVRTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJCXsNCisJCQkJaWYoIHhUYXNrQ2hlY2tGb3JUaW1lT3V0KCAmeFRpbWVPdXQsICZ4VGlja3NUb1dhaXQgKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJaWYoIHBydklzUXVldWVGdWxsKCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQorCQkJCQl7DQorCQkJCQkJdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9TRU5EKCBweFF1ZXVlICk7DQorCQkJCQkJdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICksIHhUaWNrc1RvV2FpdCApOw0KKwkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJdHJhY2VRVUVVRV9TRU5EX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJCQkJcmV0dXJuIGVyclFVRVVFX0ZVTEw7DQorCQkJCX0NCisJCQl9DQorCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisJCX0NCisJfQ0KKw0KKyNlbmRpZiAvKiBjb25maWdVU0VfQUxURVJOQVRJVkVfQVBJICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgPT0gMQ0KKw0KKwlzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVBbHRHZW5lcmljUmVjZWl2ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciwgcG9ydFRpY2tUeXBlIHhUaWNrc1RvV2FpdCwgcG9ydEJBU0VfVFlQRSB4SnVzdFBlZWtpbmcgKQ0KKwl7DQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFOw0KKwl4VGltZU91dFR5cGUgeFRpbWVPdXQ7DQorCXNpZ25lZCBjaGFyICpwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KKw0KKwkJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorCQljb25maWdBU1NFUlQoICEoICggcHZCdWZmZXIgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVSApICkgKTsNCisNCisJCWZvciggOzsgKQ0KKwkJew0KKwkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJCXsNCisJCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorCQkJCXsNCisJCQkJCS8qIFJlbWVtYmVyIG91ciByZWFkIHBvc2l0aW9uIGluIGNhc2Ugd2UgYXJlIGp1c3QgcGVla2luZy4gKi8NCisJCQkJCXBjT3JpZ2luYWxSZWFkUG9zaXRpb24gPSBweFF1ZXVlLT5wY1JlYWRGcm9tOw0KKw0KKwkJCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQorDQorCQkJCQlpZiggeEp1c3RQZWVraW5nID09IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCXRyYWNlUVVFVUVfUkVDRUlWRSggcHhRdWV1ZSApOw0KKw0KKwkJCQkJCS8qIFdlIGFyZSBhY3R1YWxseSByZW1vdmluZyBkYXRhLiAqLw0KKwkJCQkJCS0tKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KKw0KKwkJCQkJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KKwkJCQkJCXsNCisJCQkJCQkJaWYoIHB4UXVldWUtPnV4UXVldWVUeXBlID09IHF1ZXVlUVVFVUVfSVNfTVVURVggKQ0KKwkJCQkJCQl7DQorCQkJCQkJCQkvKiBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGltcGxlbWVudA0KKwkJCQkJCQkJcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc2hvdWxkIGl0IGJlY29tZSBuZWNlc3NhcnkuICovDQorCQkJCQkJCQlweFF1ZXVlLT5weE11dGV4SG9sZGVyID0geFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJCSNlbmRpZg0KKw0KKwkJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRGQUxTRSApDQorCQkJCQkJew0KKwkJCQkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZFRSVUUgKQ0KKwkJCQkJCQl7DQorCQkJCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZWxzZQ0KKwkJCQkJew0KKwkJCQkJCXRyYWNlUVVFVUVfUEVFSyggcHhRdWV1ZSApOw0KKw0KKwkJCQkJCS8qIFdlIGFyZSBub3QgcmVtb3ZpbmcgdGhlIGRhdGEsIHNvIHJlc2V0IG91ciByZWFkDQorCQkJCQkJcG9pbnRlci4gKi8NCisJCQkJCQlweFF1ZXVlLT5wY1JlYWRGcm9tID0gcGNPcmlnaW5hbFJlYWRQb3NpdGlvbjsNCisNCisJCQkJCQkvKiBUaGUgZGF0YSBpcyBiZWluZyBsZWZ0IGluIHRoZSBxdWV1ZSwgc28gc2VlIGlmIHRoZXJlIGFyZQ0KKwkJCQkJCWFueSBvdGhlciB0YXNrcyB3YWl0aW5nIGZvciB0aGUgZGF0YS4gKi8NCisJCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KKwkJCQkJCXsNCisJCQkJCQkJLyogVGFza3MgdGhhdCBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IHdpbGwgZ2V0IGFkZGVkIHRvDQorCQkJCQkJCXRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgYXMgdGhlIHNjaGVkdWxlciBpcyBzdGlsbCBzdXNwZW5kZWQuICovDQorCQkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KKwkJCQkJCQl7DQorCQkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgdGFzay4gKi8NCisJCQkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorDQorCQkJCQl9DQorDQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJcmV0dXJuIHBkUEFTUzsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBwb3J0VGlja1R5cGUgKSAwICkNCisJCQkJCXsNCisJCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GQUlMRUQoIHB4UXVldWUgKTsNCisJCQkJCQlyZXR1cm4gZXJyUVVFVUVfRU1QVFk7DQorCQkJCQl9DQorCQkJCQllbHNlIGlmKCB4RW50cnlUaW1lU2V0ID09IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCXZUYXNrU2V0VGltZU91dFN0YXRlKCAmeFRpbWVPdXQgKTsNCisJCQkJCQl4RW50cnlUaW1lU2V0ID0gcGRUUlVFOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCQkJew0KKwkJCQlpZiggeFRhc2tDaGVja0ZvclRpbWVPdXQoICZ4VGltZU91dCwgJnhUaWNrc1RvV2FpdCApID09IHBkRkFMU0UgKQ0KKwkJCQl7DQorCQkJCQlpZiggcHJ2SXNRdWV1ZUVtcHR5KCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQorCQkJCQl7DQorCQkJCQkJdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQorDQorCQkJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQorCQkJCQkJew0KKwkJCQkJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQorCQkJCQkJCXsNCisJCQkJCQkJCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwkJCQkJCQkJCXZUYXNrUHJpb3JpdHlJbmhlcml0KCAoIHZvaWQgKiApIHB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgKTsNCisJCQkJCQkJCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQkJI2VuZGlmDQorDQorCQkJCQkJdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICksIHhUaWNrc1RvV2FpdCApOw0KKwkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJCQkJcmV0dXJuIGVyclFVRVVFX0VNUFRZOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorCQl9DQorCX0NCisNCisNCisjZW5kaWYgLyogY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSSAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiwgcG9ydEJBU0VfVFlQRSB4Q29weVBvc2l0aW9uICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQorDQorCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KKwljb25maWdBU1NFUlQoICEoICggcHZJdGVtVG9RdWV1ZSA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkgKSApOw0KKw0KKwkvKiBTaW1pbGFyIHRvIHhRdWV1ZUdlbmVyaWNTZW5kLCBleGNlcHQgd2UgZG9uJ3QgYmxvY2sgaWYgdGhlcmUgaXMgbm8gcm9vbQ0KKwlpbiB0aGUgcXVldWUuICBBbHNvIHdlIGRvbid0IGRpcmVjdGx5IHdha2UgYSB0YXNrIHRoYXQgd2FzIGJsb2NrZWQgb24gYQ0KKwlxdWV1ZSByZWFkLCBpbnN0ZWFkIHdlIHJldHVybiBhIGZsYWcgdG8gc2F5IHdoZXRoZXIgYSBjb250ZXh0IHN3aXRjaCBpcw0KKwlyZXF1aXJlZCBvciBub3QgKGkuZS4gaGFzIGEgdGFzayB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdXMgYmVlbiB3b2tlbg0KKwlieSB0aGlzCXBvc3QpLiAqLw0KKwl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPCBweFF1ZXVlLT51eExlbmd0aCApDQorCQl7DQorCQkJdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSKCBweFF1ZXVlICk7DQorDQorCQkJcHJ2Q29weURhdGFUb1F1ZXVlKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4Q29weVBvc2l0aW9uICk7DQorDQorCQkJLyogSWYgdGhlIHF1ZXVlIGlzIGxvY2tlZCB3ZSBkbyBub3QgYWx0ZXIgdGhlIGV2ZW50IGxpc3QuICBUaGlzIHdpbGwNCisJCQliZSBkb25lIHdoZW4gdGhlIHF1ZXVlIGlzIHVubG9ja2VkIGxhdGVyLiAqLw0KKwkJCWlmKCBweFF1ZXVlLT54VHhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQ0KKwkJCXsNCisJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQorCQkJCQl7DQorCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28gcmVjb3JkIHRoYXQgYQ0KKwkJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KKwkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KKwkJCQkJCXsNCisJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCS8qIEluY3JlbWVudCB0aGUgbG9jayBjb3VudCBzbyB0aGUgdGFzayB0aGF0IHVubG9ja3MgdGhlIHF1ZXVlDQorCQkJCWtub3dzIHRoYXQgZGF0YSB3YXMgcG9zdGVkIHdoaWxlIGl0IHdhcyBsb2NrZWQuICovDQorCQkJCSsrKCBweFF1ZXVlLT54VHhMb2NrICk7DQorCQkJfQ0KKw0KKwkJCXhSZXR1cm4gPSBwZFBBU1M7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJCXhSZXR1cm4gPSBlcnJRVUVVRV9GVUxMOw0KKwkJfQ0KKwl9DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlR2VuZXJpY1JlY2VpdmUoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQsIHBvcnRCQVNFX1RZUEUgeEp1c3RQZWVraW5nICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeEVudHJ5VGltZVNldCA9IHBkRkFMU0U7DQoreFRpbWVPdXRUeXBlIHhUaW1lT3V0Ow0KK3NpZ25lZCBjaGFyICpwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KKw0KKwljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCisJY29uZmlnQVNTRVJUKCAhKCAoIHB2QnVmZmVyID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFUgKSApICk7DQorDQorCS8qIFRoaXMgZnVuY3Rpb24gcmVsYXhlcyB0aGUgY29kaW5nIHN0YW5kYXJkIHNvbWV3aGF0IHRvIGFsbG93IHJldHVybg0KKwlzdGF0ZW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiAgVGhpcyBpcyBkb25lIGluIHRoZSBpbnRlcmVzdA0KKwlvZiBleGVjdXRpb24gdGltZSBlZmZpY2llbmN5LiAqLw0KKw0KKwlmb3IoIDs7ICkNCisJew0KKwkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCQl7DQorCQkJLyogSXMgdGhlcmUgZGF0YSBpbiB0aGUgcXVldWUgbm93PyAgVG8gYmUgcnVubmluZyB3ZSBtdXN0IGJlDQorCQkJdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB3YW50aW5nIHRvIGFjY2VzcyB0aGUgcXVldWUuICovDQorCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorCQkJew0KKwkJCQkvKiBSZW1lbWJlciBvdXIgcmVhZCBwb3NpdGlvbiBpbiBjYXNlIHdlIGFyZSBqdXN0IHBlZWtpbmcuICovDQorCQkJCXBjT3JpZ2luYWxSZWFkUG9zaXRpb24gPSBweFF1ZXVlLT5wY1JlYWRGcm9tOw0KKw0KKwkJCQlwcnZDb3B5RGF0YUZyb21RdWV1ZSggcHhRdWV1ZSwgcHZCdWZmZXIgKTsNCisNCisJCQkJaWYoIHhKdXN0UGVla2luZyA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQorDQorCQkJCQkvKiBXZSBhcmUgYWN0dWFsbHkgcmVtb3ZpbmcgZGF0YS4gKi8NCisJCQkJCS0tKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KKw0KKwkJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQorCQkJCQl7DQorCQkJCQkJaWYoIHB4UXVldWUtPnV4UXVldWVUeXBlID09IHF1ZXVlUVVFVUVfSVNfTVVURVggKQ0KKwkJCQkJCXsNCisJCQkJCQkJLyogUmVjb3JkIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbXBsZW1lbnQNCisJCQkJCQkJcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc2hvdWxkIGl0IGJlY29tZSBuZWNlc3NhcnkuICovDQorCQkJCQkJCXB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgPSB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJI2VuZGlmDQorDQorCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkVFJVRSApDQorCQkJCQkJew0KKwkJCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCXRyYWNlUVVFVUVfUEVFSyggcHhRdWV1ZSApOw0KKw0KKwkJCQkJLyogV2UgYXJlIG5vdCByZW1vdmluZyB0aGUgZGF0YSwgc28gcmVzZXQgb3VyIHJlYWQNCisJCQkJCXBvaW50ZXIuICovDQorCQkJCQlweFF1ZXVlLT5wY1JlYWRGcm9tID0gcGNPcmlnaW5hbFJlYWRQb3NpdGlvbjsNCisNCisJCQkJCS8qIFRoZSBkYXRhIGlzIGJlaW5nIGxlZnQgaW4gdGhlIHF1ZXVlLCBzbyBzZWUgaWYgdGhlcmUgYXJlDQorCQkJCQlhbnkgb3RoZXIgdGFza3Mgd2FpdGluZyBmb3IgdGhlIGRhdGEuICovDQorCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCS8qIFRhc2tzIHRoYXQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCB3aWxsIGdldCBhZGRlZCB0bw0KKwkJCQkJCXRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgYXMgdGhlIHNjaGVkdWxlciBpcyBzdGlsbCBzdXNwZW5kZWQuICovDQorCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQorCQkJCQkJew0KKwkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgdGFzay4gKi8NCisJCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisJCQkJcmV0dXJuIHBkUEFTUzsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSAoIHBvcnRUaWNrVHlwZSApIDAgKQ0KKwkJCQl7DQorCQkJCQkvKiBUaGUgcXVldWUgd2FzIGVtcHR5IGFuZCBubyBibG9jayB0aW1lIGlzIHNwZWNpZmllZCAob3INCisJCQkJCXRoZSBibG9jayB0aW1lIGhhcyBleHBpcmVkKSBzbyBsZWF2ZSBub3cuICovDQorCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJCQkJcmV0dXJuIGVyclFVRVVFX0VNUFRZOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYoIHhFbnRyeVRpbWVTZXQgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCS8qIFRoZSBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgYmxvY2sgdGltZSB3YXMgc3BlY2lmaWVkIHNvDQorCQkJCQljb25maWd1cmUgdGhlIHRpbWVvdXQgc3RydWN0dXJlLiAqLw0KKwkJCQkJdlRhc2tTZXRUaW1lT3V0U3RhdGUoICZ4VGltZU91dCApOw0KKwkJCQkJeEVudHJ5VGltZVNldCA9IHBkVFJVRTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCQkvKiBJbnRlcnJ1cHRzIGFuZCBvdGhlciB0YXNrcyBjYW4gc2VuZCB0byBhbmQgcmVjZWl2ZSBmcm9tIHRoZSBxdWV1ZQ0KKwkJbm93IHRoZSBjcml0aWNhbCBzZWN0aW9uIGhhcyBiZWVuIGV4aXRlZC4gKi8NCisNCisJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJcHJ2TG9ja1F1ZXVlKCBweFF1ZXVlICk7DQorDQorCQkvKiBVcGRhdGUgdGhlIHRpbWVvdXQgc3RhdGUgdG8gc2VlIGlmIGl0IGhhcyBleHBpcmVkIHlldC4gKi8NCisJCWlmKCB4VGFza0NoZWNrRm9yVGltZU91dCggJnhUaW1lT3V0LCAmeFRpY2tzVG9XYWl0ICkgPT0gcGRGQUxTRSApDQorCQl7DQorCQkJaWYoIHBydklzUXVldWVFbXB0eSggcHhRdWV1ZSApICE9IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQorDQorCQkJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KKwkJCQl7DQorCQkJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQorCQkJCQl7DQorCQkJCQkJcG9ydEVOVEVSX0NSSVRJQ0FMKCk7DQorCQkJCQkJew0KKwkJCQkJCQl2VGFza1ByaW9yaXR5SW5oZXJpdCggKCB2b2lkICogKSBweFF1ZXVlLT5weE11dGV4SG9sZGVyICk7DQorCQkJCQkJfQ0KKwkJCQkJCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJI2VuZGlmDQorDQorCQkJCXZUYXNrUGxhY2VPbkV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApLCB4VGlja3NUb1dhaXQgKTsNCisJCQkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCisJCQkJaWYoIHhUYXNrUmVzdW1lQWxsKCkgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogVHJ5IGFnYWluLiAqLw0KKwkJCQlwcnZVbmxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KKwkJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlwcnZVbmxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KKwkJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQorCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJCXJldHVybiBlcnJRVUVVRV9FTVBUWTsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVSZWNlaXZlRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciwgc2lnbmVkIHBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhTYXZlZEludGVycnVwdFN0YXR1czsNCisNCisJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorCWNvbmZpZ0FTU0VSVCggISggKCBwdkJ1ZmZlciA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkgKSApOw0KKw0KKwl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl7DQorCQkvKiBXZSBjYW5ub3QgYmxvY2sgZnJvbSBhbiBJU1IsIHNvIGNoZWNrIHRoZXJlIGlzIGRhdGEgYXZhaWxhYmxlLiAqLw0KKwkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorCQl7DQorCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSKCBweFF1ZXVlICk7DQorDQorCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQorCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQorDQorCQkJLyogSWYgdGhlIHF1ZXVlIGlzIGxvY2tlZCB3ZSB3aWxsIG5vdCBtb2RpZnkgdGhlIGV2ZW50IGxpc3QuICBJbnN0ZWFkDQorCQkJd2UgdXBkYXRlIHRoZSBsb2NrIGNvdW50IHNvIHRoZSB0YXNrIHRoYXQgdW5sb2NrcyB0aGUgcXVldWUgd2lsbCBrbm93DQorCQkJdGhhdCBhbiBJU1IgaGFzIHJlbW92ZWQgZGF0YSB3aGlsZSB0aGUgcXVldWUgd2FzIGxvY2tlZC4gKi8NCisJCQlpZiggcHhRdWV1ZS0+eFJ4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkNCisJCQl7DQorCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApICE9IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdXMgc28NCisJCQkJCQlmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KKwkJCQkJCXsNCisJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCS8qIEluY3JlbWVudCB0aGUgbG9jayBjb3VudCBzbyB0aGUgdGFzayB0aGF0IHVubG9ja3MgdGhlIHF1ZXVlDQorCQkJCWtub3dzIHRoYXQgZGF0YSB3YXMgcmVtb3ZlZCB3aGlsZSBpdCB3YXMgbG9ja2VkLiAqLw0KKwkJCQkrKyggcHhRdWV1ZS0+eFJ4TG9jayApOw0KKwkJCX0NCisNCisJCQl4UmV0dXJuID0gcGRQQVNTOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhSZXR1cm4gPSBwZEZBSUw7DQorCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KKwkJfQ0KKwl9DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nKCBjb25zdCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApDQorew0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhSZXR1cm47DQorDQorCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KKw0KKwl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCXV4UmV0dXJuID0gcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmc7DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCXJldHVybiB1eFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nRnJvbUlTUiggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UmV0dXJuOw0KKw0KKwljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCisNCisJdXhSZXR1cm4gPSBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZzsNCisNCisJcmV0dXJuIHV4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZRdWV1ZURlbGV0ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCisJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorDQorCXRyYWNlUVVFVUVfREVMRVRFKCBweFF1ZXVlICk7DQorCXZRdWV1ZVVucmVnaXN0ZXJRdWV1ZSggcHhRdWV1ZSApOw0KKyAgICBpZigocHhRdWV1ZS0+dWNRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkUpDQorICAgICAgIHx8IChweFF1ZXVlLT51Y1F1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFKSkNCisgICAgew0KKyAgICAgICAgcG9vbEZyZWVCdWZmZXIoICZzU2VtYXBob3Jlc1Bvb2wsIHB4UXVldWUtPnBjSGVhZCk7DQorICAgIH0NCisJcG9vbEZyZWVCdWZmZXIoICZzUXVldWVzUG9vbCwgcHhRdWV1ZSApOw0KK30NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQorDQorCXVuc2lnbmVkIGNoYXIgdWNRdWV1ZUdldFF1ZXVlTnVtYmVyKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSApDQorCXsNCisJCXJldHVybiBweFF1ZXVlLT51Y1F1ZXVlTnVtYmVyOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KKw0KKwl2b2lkIHZRdWV1ZVNldFF1ZXVlTnVtYmVyKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdW5zaWduZWQgY2hhciB1Y1F1ZXVlTnVtYmVyICkNCisJew0KKwkJcHhRdWV1ZS0+dWNRdWV1ZU51bWJlciA9IHVjUXVldWVOdW1iZXI7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQorDQorCXVuc2lnbmVkIGNoYXIgdWNRdWV1ZUdldFF1ZXVlVHlwZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KKwl7DQorCQlyZXR1cm4gcHhRdWV1ZS0+dWNRdWV1ZVR5cGU7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZDb3B5RGF0YVRvUXVldWUoIHhRVUVVRSAqcHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwgcG9ydEJBU0VfVFlQRSB4UG9zaXRpb24gKQ0KK3sNCisJaWYoIHB4UXVldWUtPnV4SXRlbVNpemUgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorCXsNCisJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KKwkJew0KKwkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCisJCQl7DQorCQkJCS8qIFRoZSBtdXRleCBpcyBubyBsb25nZXIgYmVpbmcgaGVsZC4gKi8NCisJCQkJdlRhc2tQcmlvcml0eURpc2luaGVyaXQoICggdm9pZCAqICkgcHhRdWV1ZS0+cHhNdXRleEhvbGRlciApOw0KKwkJCQlweFF1ZXVlLT5weE11dGV4SG9sZGVyID0gTlVMTDsNCisJCQl9DQorCQl9DQorCQkjZW5kaWYNCisJfQ0KKwllbHNlIGlmKCB4UG9zaXRpb24gPT0gcXVldWVTRU5EX1RPX0JBQ0sgKQ0KKwl7DQorCQltZW1jcHkoICggdm9pZCAqICkgcHhRdWV1ZS0+cGNXcml0ZVRvLCBwdkl0ZW1Ub1F1ZXVlLCAoIHVuc2lnbmVkICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KKwkJcHhRdWV1ZS0+cGNXcml0ZVRvICs9IHB4UXVldWUtPnV4SXRlbVNpemU7DQorCQlpZiggcHhRdWV1ZS0+cGNXcml0ZVRvID49IHB4UXVldWUtPnBjVGFpbCApDQorCQl7DQorCQkJcHhRdWV1ZS0+cGNXcml0ZVRvID0gcHhRdWV1ZS0+cGNIZWFkOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJbWVtY3B5KCAoIHZvaWQgKiApIHB4UXVldWUtPnBjUmVhZEZyb20sIHB2SXRlbVRvUXVldWUsICggdW5zaWduZWQgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQorCQlweFF1ZXVlLT5wY1JlYWRGcm9tIC09IHB4UXVldWUtPnV4SXRlbVNpemU7DQorCQlpZiggcHhRdWV1ZS0+cGNSZWFkRnJvbSA8IHB4UXVldWUtPnBjSGVhZCApDQorCQl7DQorCQkJcHhRdWV1ZS0+cGNSZWFkRnJvbSA9ICggcHhRdWV1ZS0+cGNUYWlsIC0gcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KKwkJfQ0KKwl9DQorDQorCSsrKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZDb3B5RGF0YUZyb21RdWV1ZSggeFFVRVVFICogY29uc3QgcHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZCdWZmZXIgKQ0KK3sNCisJaWYoIHB4UXVldWUtPnV4UXVldWVUeXBlICE9IHF1ZXVlUVVFVUVfSVNfTVVURVggKQ0KKwl7DQorCQlweFF1ZXVlLT5wY1JlYWRGcm9tICs9IHB4UXVldWUtPnV4SXRlbVNpemU7DQorCQlpZiggcHhRdWV1ZS0+cGNSZWFkRnJvbSA+PSBweFF1ZXVlLT5wY1RhaWwgKQ0KKwkJew0KKwkJCXB4UXVldWUtPnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQ7DQorCQl9DQorCQltZW1jcHkoICggdm9pZCAqICkgcHZCdWZmZXIsICggdm9pZCAqICkgcHhRdWV1ZS0+cGNSZWFkRnJvbSwgKCB1bnNpZ25lZCApIHB4UXVldWUtPnV4SXRlbVNpemUgKTsNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZVbmxvY2tRdWV1ZSggeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCisJLyogVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAqLw0KKw0KKwkvKiBUaGUgbG9jayBjb3VudHMgY29udGFpbnMgdGhlIG51bWJlciBvZiBleHRyYSBkYXRhIGl0ZW1zIHBsYWNlZCBvcg0KKwlyZW1vdmVkIGZyb20gdGhlIHF1ZXVlIHdoaWxlIHRoZSBxdWV1ZSB3YXMgbG9ja2VkLiAgV2hlbiBhIHF1ZXVlIGlzDQorCWxvY2tlZCBpdGVtcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZSBldmVudCBsaXN0cyBjYW5ub3QgYmUNCisJdXBkYXRlZC4gKi8NCisJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCXsNCisJCS8qIFNlZSBpZiBkYXRhIHdhcyBhZGRlZCB0byB0aGUgcXVldWUgd2hpbGUgaXQgd2FzIGxvY2tlZC4gKi8NCisJCXdoaWxlKCBweFF1ZXVlLT54VHhMb2NrID4gcXVldWVMT0NLRURfVU5NT0RJRklFRCApDQorCQl7DQorCQkJLyogRGF0YSB3YXMgcG9zdGVkIHdoaWxlIHRoZSBxdWV1ZSB3YXMgbG9ja2VkLiAgQXJlIGFueSB0YXNrcw0KKwkJCWJsb2NrZWQgd2FpdGluZyBmb3IgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlPyAqLw0KKwkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQkvKiBUYXNrcyB0aGF0IGFyZSByZW1vdmVkIGZyb20gdGhlIGV2ZW50IGxpc3Qgd2lsbCBnZXQgYWRkZWQgdG8NCisJCQkJdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBhcyB0aGUgc2NoZWR1bGVyIGlzIHN0aWxsIHN1c3BlbmRlZC4gKi8NCisJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZCB0aGF0IGENCisJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KKwkJCQkJdlRhc2tNaXNzZWRZaWVsZCgpOw0KKwkJCQl9DQorDQorCQkJCS0tKCBweFF1ZXVlLT54VHhMb2NrICk7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisNCisJCXB4UXVldWUtPnhUeExvY2sgPSBxdWV1ZVVOTE9DS0VEOw0KKwl9DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCS8qIERvIHRoZSBzYW1lIGZvciB0aGUgUnggbG9jay4gKi8NCisJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCXsNCisJCXdoaWxlKCBweFF1ZXVlLT54UnhMb2NrID4gcXVldWVMT0NLRURfVU5NT0RJRklFRCApDQorCQl7DQorCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApICE9IHBkRkFMU0UgKQ0KKwkJCQl7DQorCQkJCQl2VGFza01pc3NlZFlpZWxkKCk7DQorCQkJCX0NCisNCisJCQkJLS0oIHB4UXVldWUtPnhSeExvY2sgKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcHhRdWV1ZS0+eFJ4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQorCX0NCisJdGFza0VYSVRfQ1JJVElDQUwoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHNpZ25lZCBwb3J0QkFTRV9UWVBFIHBydklzUXVldWVFbXB0eSggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCXhSZXR1cm4gPSAoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDAgKTsNCisJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUlzUXVldWVFbXB0eUZyb21JU1IoIGNvbnN0IHhRdWV1ZUhhbmRsZSBweFF1ZXVlICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorCXhSZXR1cm4gPSAoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDAgKTsNCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBzaWduZWQgcG9ydEJBU0VfVFlQRSBwcnZJc1F1ZXVlRnVsbCggY29uc3QgeFF1ZXVlSGFuZGxlIHB4UXVldWUgKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCXhSZXR1cm4gPSAoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09IHB4UXVldWUtPnV4TGVuZ3RoICk7DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCXJldHVybiB4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVJc1F1ZXVlRnVsbEZyb21JU1IoIGNvbnN0IHhRdWV1ZUhhbmRsZSBweFF1ZXVlICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQorCXhSZXR1cm4gPSAoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09IHB4UXVldWUtPnV4TGVuZ3RoICk7DQorDQorCXJldHVybiB4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnVVNFX0NPX1JPVVRJTkVTID09IDENCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UXVldWVDUlNlbmQoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBwb3J0VGlja1R5cGUgeFRpY2tzVG9XYWl0ICkNCit7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFJldHVybjsNCisNCisJLyogSWYgdGhlIHF1ZXVlIGlzIGFscmVhZHkgZnVsbCB3ZSBtYXkgaGF2ZSB0byBibG9jay4gIEEgY3JpdGljYWwgc2VjdGlvbg0KKwlpcyByZXF1aXJlZCB0byBwcmV2ZW50IGFuIGludGVycnVwdCByZW1vdmluZyBzb21ldGhpbmcgZnJvbSB0aGUgcXVldWUNCisJYmV0d2VlbiB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoZSBxdWV1ZSBpcyBmdWxsIGFuZCBibG9ja2luZyBvbiB0aGUgcXVldWUuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJew0KKwkJaWYoIHBydklzUXVldWVGdWxsKCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogVGhlIHF1ZXVlIGlzIGZ1bGwgLSBkbyB3ZSB3YW50IHRvIGJsb2NrIG9yIGp1c3QgbGVhdmUgd2l0aG91dA0KKwkJCXBvc3Rpbmc/ICovDQorCQkJaWYoIHhUaWNrc1RvV2FpdCA+ICggcG9ydFRpY2tUeXBlICkgMCApDQorCQkJew0KKwkJCQkvKiBBcyB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgY29yb3V0aW5lIHdlIGNhbm5vdCBibG9jayBkaXJlY3RseSwgYnV0DQorCQkJCXJldHVybiBpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byBibG9jay4gKi8NCisJCQkJdkNvUm91dGluZUFkZFRvRGVsYXllZExpc3QoIHhUaWNrc1RvV2FpdCwgJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICk7DQorCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwkJCQlyZXR1cm4gZXJyUVVFVUVfQkxPQ0tFRDsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KKwkJCX0NCisJCX0NCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJcG9ydE5PUCgpOw0KKw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXsNCisJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWUtPnV4TGVuZ3RoICkNCisJCXsNCisJCQkvKiBUaGVyZSBpcyByb29tIGluIHRoZSBxdWV1ZSwgY29weSB0aGUgZGF0YSBpbnRvIHRoZSBxdWV1ZS4gKi8NCisJCQlwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQorCQkJeFJldHVybiA9IHBkUEFTUzsNCisNCisJCQkvKiBXZXJlIGFueSBjby1yb3V0aW5lcyB3YWl0aW5nIGZvciBkYXRhIHRvIGJlY29tZSBhdmFpbGFibGU/ICovDQorCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCS8qIEluIHRoaXMgaW5zdGFuY2UgdGhlIGNvLXJvdXRpbmUgY291bGQgYmUgcGxhY2VkIGRpcmVjdGx5DQorCQkJCWludG8gdGhlIHJlYWR5IGxpc3QgYXMgd2UgYXJlIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uDQorCQkJCUluc3RlYWQgdGhlIHNhbWUgcGVuZGluZyByZWFkeSBsaXN0IG1lY2hhbmlzbSBpcyB1c2VkIGFzIGlmDQorCQkJCXRoZSBldmVudCB3ZXJlIGNhdXNlZCBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQuICovDQorCQkJCWlmKCB4Q29Sb3V0aW5lUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCS8qIFRoZSBjby1yb3V0aW5lIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZA0KKwkJCQkJdGhhdCBhIHlpZWxkIG1pZ2h0IGJlIGFwcHJvcHJpYXRlLiAqLw0KKwkJCQkJeFJldHVybiA9IGVyclFVRVVFX1lJRUxEOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhSZXR1cm4gPSBlcnJRVUVVRV9GVUxMOw0KKwkJfQ0KKwl9DQorCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlQ1JSZWNlaXZlKCB4UXVldWVIYW5kbGUgcHhRdWV1ZSwgdm9pZCAqcHZCdWZmZXIsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwkvKiBJZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSB3ZSBtYXkgaGF2ZSB0byBibG9jay4gIEEgY3JpdGljYWwgc2VjdGlvbg0KKwlpcyByZXF1aXJlZCB0byBwcmV2ZW50IGFuIGludGVycnVwdCBhZGRpbmcgc29tZXRoaW5nIHRvIHRoZSBxdWV1ZQ0KKwliZXR3ZWVuIHRoZSBjaGVjayB0byBzZWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZCBibG9ja2luZyBvbiB0aGUgcXVldWUuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJew0KKwkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDAgKQ0KKwkJew0KKwkJCS8qIFRoZXJlIGFyZSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIGRvIHdlIHdhbnQgdG8gYmxvY2sgb3IganVzdA0KKwkJCWxlYXZlIHdpdGggbm90aGluZz8gKi8NCisJCQlpZiggeFRpY2tzVG9XYWl0ID4gKCBwb3J0VGlja1R5cGUgKSAwICkNCisJCQl7DQorCQkJCS8qIEFzIHRoaXMgaXMgYSBjby1yb3V0aW5lIHdlIGNhbm5vdCBibG9jayBkaXJlY3RseSwgYnV0IHJldHVybg0KKwkJCQlpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byBibG9jay4gKi8NCisJCQkJdkNvUm91dGluZUFkZFRvRGVsYXllZExpc3QoIHhUaWNrc1RvV2FpdCwgJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICk7DQorCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwkJCQlyZXR1cm4gZXJyUVVFVUVfQkxPQ0tFRDsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KKwkJCX0NCisJCX0NCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJcG9ydE5PUCgpOw0KKw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXsNCisJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDAgKQ0KKwkJew0KKwkJCS8qIERhdGEgaXMgYXZhaWxhYmxlIGZyb20gdGhlIHF1ZXVlLiAqLw0KKwkJCXB4UXVldWUtPnBjUmVhZEZyb20gKz0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCisJCQlpZiggcHhRdWV1ZS0+cGNSZWFkRnJvbSA+PSBweFF1ZXVlLT5wY1RhaWwgKQ0KKwkJCXsNCisJCQkJcHhRdWV1ZS0+cGNSZWFkRnJvbSA9IHB4UXVldWUtPnBjSGVhZDsNCisJCQl9DQorCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQorCQkJbWVtY3B5KCAoIHZvaWQgKiApIHB2QnVmZmVyLCAoIHZvaWQgKiApIHB4UXVldWUtPnBjUmVhZEZyb20sICggdW5zaWduZWQgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQorDQorCQkJeFJldHVybiA9IHBkUEFTUzsNCisNCisJCQkvKiBXZXJlIGFueSBjby1yb3V0aW5lcyB3YWl0aW5nIGZvciBzcGFjZSB0byBiZWNvbWUgYXZhaWxhYmxlPyAqLw0KKwkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQkvKiBJbiB0aGlzIGluc3RhbmNlIHRoZSBjby1yb3V0aW5lIGNvdWxkIGJlIHBsYWNlZCBkaXJlY3RseQ0KKwkJCQlpbnRvIHRoZSByZWFkeSBsaXN0IGFzIHdlIGFyZSB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLg0KKwkJCQlJbnN0ZWFkIHRoZSBzYW1lIHBlbmRpbmcgcmVhZHkgbGlzdCBtZWNoYW5pc20gaXMgdXNlZCBhcyBpZg0KKwkJCQl0aGUgZXZlbnQgd2VyZSBjYXVzZWQgZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0LiAqLw0KKwkJCQlpZiggeENvUm91dGluZVJlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApICE9IHBkRkFMU0UgKQ0KKwkJCQl7DQorCQkJCQl4UmV0dXJuID0gZXJyUVVFVUVfWUlFTEQ7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJeFJldHVybiA9IHBkRkFJTDsNCisJCX0NCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKyNpZiBjb25maWdVU0VfQ09fUk9VVElORVMgPT0gMQ0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhRdWV1ZUNSU2VuZEZyb21JU1IoIHhRdWV1ZUhhbmRsZSBweFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBzaWduZWQgcG9ydEJBU0VfVFlQRSB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuICkNCit7DQorCS8qIENhbm5vdCBibG9jayB3aXRoaW4gYW4gSVNSIHNvIGlmIHRoZXJlIGlzIG5vIHNwYWNlIG9uIHRoZSBxdWV1ZSB0aGVuDQorCWV4aXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gKi8NCisJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KKwl7DQorCQlwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQorDQorCQkvKiBXZSBvbmx5IHdhbnQgdG8gd2FrZSBvbmUgY28tcm91dGluZSBwZXIgSVNSLCBzbyBjaGVjayB0aGF0IGENCisJCWNvLXJvdXRpbmUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gd29rZW4uICovDQorCQlpZiggeENvUm91dGluZVByZXZpb3VzbHlXb2tlbiA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJaWYoIHhDb1JvdXRpbmVSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSAhPSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJcmV0dXJuIHBkVFJVRTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4geENvUm91dGluZVByZXZpb3VzbHlXb2tlbjsNCit9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxDQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFF1ZXVlQ1JSZWNlaXZlRnJvbUlTUiggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHZvaWQgKnB2QnVmZmVyLCBzaWduZWQgcG9ydEJBU0VfVFlQRSAqcHhDb1JvdXRpbmVXb2tlbiApDQorew0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhSZXR1cm47DQorDQorCS8qIFdlIGNhbm5vdCBibG9jayBmcm9tIGFuIElTUiwgc28gY2hlY2sgdGhlcmUgaXMgZGF0YSBhdmFpbGFibGUuIElmDQorCW5vdCB0aGVuIGp1c3QgbGVhdmUgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gKi8NCisJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMCApDQorCXsNCisJCS8qIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgcXVldWUuICovDQorCQlweFF1ZXVlLT5wY1JlYWRGcm9tICs9IHB4UXVldWUtPnV4SXRlbVNpemU7DQorCQlpZiggcHhRdWV1ZS0+cGNSZWFkRnJvbSA+PSBweFF1ZXVlLT5wY1RhaWwgKQ0KKwkJew0KKwkJCXB4UXVldWUtPnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQ7DQorCQl9DQorCQktLSggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCisJCW1lbWNweSggKCB2b2lkICogKSBwdkJ1ZmZlciwgKCB2b2lkICogKSBweFF1ZXVlLT5wY1JlYWRGcm9tLCAoIHVuc2lnbmVkICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KKw0KKwkJaWYoICggKnB4Q29Sb3V0aW5lV29rZW4gKSA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJaWYoIHhDb1JvdXRpbmVSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSAhPSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJKnB4Q29Sb3V0aW5lV29rZW4gPSBwZFRSVUU7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQl4UmV0dXJuID0gcGRQQVNTOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgPiAwDQorDQorCXZvaWQgdlF1ZXVlQWRkVG9SZWdpc3RyeSggeFF1ZXVlSGFuZGxlIHhRdWV1ZSwgc2lnbmVkIGNoYXIgKnBjUXVldWVOYW1lICkNCisJew0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Ow0KKw0KKwkJLyogU2VlIGlmIHRoZXJlIGlzIGFuIGVtcHR5IHNwYWNlIGluIHRoZSByZWdpc3RyeS4gIEEgTlVMTCBuYW1lIGRlbm90ZXMNCisJCWEgZnJlZSBzbG90LiAqLw0KKwkJZm9yKCB1eCA9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVOyB1eCA8ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkU7IHV4KysgKQ0KKwkJew0KKwkJCWlmKCB4UXVldWVSZWdpc3RyeVsgdXggXS5wY1F1ZXVlTmFtZSA9PSBOVUxMICkNCisJCQl7DQorCQkJCS8qIFN0b3JlIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHF1ZXVlLiAqLw0KKwkJCQl4UXVldWVSZWdpc3RyeVsgdXggXS5wY1F1ZXVlTmFtZSA9IHBjUXVldWVOYW1lOw0KKwkJCQl4UXVldWVSZWdpc3RyeVsgdXggXS54SGFuZGxlID0geFF1ZXVlOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDANCisNCisJc3RhdGljIHZvaWQgdlF1ZXVlVW5yZWdpc3RlclF1ZXVlKCB4UXVldWVIYW5kbGUgeFF1ZXVlICkNCisJew0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Ow0KKw0KKwkJLyogU2VlIGlmIHRoZSBoYW5kbGUgb2YgdGhlIHF1ZXVlIGJlaW5nIHVucmVnaXN0ZXJlZCBpbiBhY3R1YWxseSBpbiB0aGUNCisJCXJlZ2lzdHJ5LiAqLw0KKwkJZm9yKCB1eCA9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVOyB1eCA8ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkU7IHV4KysgKQ0KKwkJew0KKwkJCWlmKCB4UXVldWVSZWdpc3RyeVsgdXggXS54SGFuZGxlID09IHhRdWV1ZSApDQorCQkJew0KKwkJCQkvKiBTZXQgdGhlIG5hbWUgdG8gTlVMTCB0byBzaG93IHRoYXQgdGhpcyBzbG90IGlmIGZyZWUgYWdhaW4uICovDQorCQkJCXhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnBjUXVldWVOYW1lID0gTlVMTDsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9USU1FUlMgPT0gMQ0KKw0KKwl2b2lkIHZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZCggeFF1ZXVlSGFuZGxlIHB4UXVldWUsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKQ0KKwl7DQorCQkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uIGNvZGUgaGVuY2UgdGhlDQorCQknUmVzdHJpY3RlZCcgaW4gaXRzIG5hbWUuICBJdCBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS4gIEl0IGlzDQorCQlkZXNpZ25lZCBmb3IgdXNlIGJ5IGtlcm5lbCBjb2RlLCBhbmQgaGFzIHNwZWNpYWwgY2FsbGluZyByZXF1aXJlbWVudHMuDQorCQlJdCBjYW4gcmVzdWx0IGluIHZMaXN0SW5zZXJ0KCkgYmVpbmcgY2FsbGVkIG9uIGEgbGlzdCB0aGF0IGNhbiBvbmx5DQorCQlwb3NzaWJseSBldmVyIGhhdmUgb25lIGl0ZW0gaW4gaXQsIHNvIHRoZSBsaXN0IHdpbGwgYmUgZmFzdCwgYnV0IGV2ZW4NCisJCXNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIGxvY2tlZCBhbmQgbm90IGZyb20gYSBjcml0aWNhbA0KKwkJc2VjdGlvbi4gKi8NCisNCisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZS4gIFRoaXMgZnVuY3Rpb24NCisJCXdpbGwgbm90IGFjdHVhbGx5IGNhdXNlIHRoZSB0YXNrIHRvIGJsb2NrLCBqdXN0IHBsYWNlIGl0IG9uIGEgYmxvY2tlZA0KKwkJbGlzdC4gIEl0IHdpbGwgbm90IGJsb2NrIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgdW5sb2NrZWQgLSBhdCB3aGljaA0KKwkJdGltZSBhIHlpZWxkIHdpbGwgYmUgcGVyZm9ybWVkLiAgSWYgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUgcXVldWUgd2hpbGUNCisJCXRoZSBxdWV1ZSBpcyBsb2NrZWQsIGFuZCB0aGUgY2FsbGluZyB0YXNrIGJsb2NrcyBvbiB0aGUgcXVldWUsIHRoZW4gdGhlDQorCQljYWxsaW5nIHRhc2sgd2lsbCBiZSBpbW1lZGlhdGVseSB1bmJsb2NrZWQgd2hlbiB0aGUgcXVldWUgaXMgdW5sb2NrZWQuICovDQorCQlwcnZMb2NrUXVldWUoIHB4UXVldWUgKTsNCisJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVSApDQorCQl7DQorCQkJLyogVGhlcmUgaXMgbm90aGluZyBpbiB0aGUgcXVldWUsIGJsb2NrIGZvciB0aGUgc3BlY2lmaWVkIHBlcmlvZC4gKi8NCisJCQl2VGFza1BsYWNlT25FdmVudExpc3RSZXN0cmljdGVkKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICksIHhUaWNrc1RvV2FpdCApOw0KKwkJfQ0KKwkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCisJfQ0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS9yZWFkbWUudHh0IGIvRnJlZVJUT1MvU291cmNlL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1MThlYwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0VhY2ggcmVhbCB0aW1lIGtlcm5lbCBwb3J0IGNvbnNpc3RzIG9mIHRocmVlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgY29yZSBrZXJuZWwNCitjb21wb25lbnRzIGFuZCBhcmUgY29tbW9uIHRvIGV2ZXJ5IHBvcnQsIGFuZCBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0IGFyZSANCitzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbWljcm9jb250cm9sbGVyIGFuZCBvciBjb21waWxlci4NCisNCisrIFRoZSBGcmVlUlRPUy9Tb3VyY2UgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSB0aHJlZSBmaWxlcyB0aGF0IGFyZSBjb21tb24gdG8gDQorZXZlcnkgcG9ydCAtIGxpc3QuYywgcXVldWUuYyBhbmQgdGFza3MuYy4gIFRoZSBrZXJuZWwgaXMgY29udGFpbmVkIHdpdGhpbiB0aGVzZSANCit0aHJlZSBmaWxlcy4gIGNyb3V0aW5lLmMgaW1wbGVtZW50cyB0aGUgb3B0aW9uYWwgY28tcm91dGluZSBmdW5jdGlvbmFsaXR5IC0gd2hpY2gNCitpcyBub3JtYWxseSBvbmx5IHVzZWQgb24gdmVyeSBtZW1vcnkgbGltaXRlZCBzeXN0ZW1zLg0KKw0KKysgVGhlIEZyZWVSVE9TL1NvdXJjZS9Qb3J0YWJsZSBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIA0KK2EgcGFydGljdWxhciBtaWNyb2NvbnRyb2xsZXIgYW5kIG9yIGNvbXBpbGVyLg0KKw0KKysgVGhlIEZyZWVSVE9TL1NvdXJjZS9pbmNsdWRlIGRpcmVjdG9yeSBjb250YWlucyB0aGUgcmVhbCB0aW1lIGtlcm5lbCBoZWFkZXIgDQorZmlsZXMuDQorDQorU2VlIHRoZSByZWFkbWUgZmlsZSBpbiB0aGUgRnJlZVJUT1MvU291cmNlL1BvcnRhYmxlIGRpcmVjdG9yeSBmb3IgbW9yZSANCitpbmZvcm1hdGlvbi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2Uvc2VtcGhyLmMgYi9GcmVlUlRPUy9Tb3VyY2Uvc2VtcGhyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwNDk0NwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS9zZW1waHIuYwpAQCAtMCwwICsxLDMgQEAKKworI2luY2x1ZGUgIkZyZWVSVE9TLmgiCisKZGlmZiAtLWdpdCBhL0ZyZWVSVE9TL1NvdXJjZS90YXNrcy5jIGIvRnJlZVJUT1MvU291cmNlL3Rhc2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlMGI2MwotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS90YXNrcy5jCkBAIC0wLDAgKzEsMjU3NiBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKwkNCisNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEZyZWVSVE9TIHR1dG9yaWFsIGJvb2tzIGFyZSBhdmFpbGFibGUgaW4gcGRmIGFuZCBwYXBlcmJhY2suICAgICAgICAqDQorICAgICAqICAgIENvbXBsZXRlLCByZXZpc2VkLCBhbmQgZWRpdGVkIHBkZiByZWZlcmVuY2UgbWFudWFscyBhcmUgYWxzbyAgICAgICAqDQorICAgICAqICAgIGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFB1cmNoYXNpbmcgRnJlZVJUT1MgZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBvbmx5IGhlbHAgeW91LCBieSAgICAgICAqDQorICAgICAqICAgIGVuc3VyaW5nIHlvdSBnZXQgcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGFuZCB3aXRoIGFuICAgICAgICAqDQorICAgICAqICAgIGluLWRlcHRoIGtub3dsZWRnZSBvZiBob3cgdG8gdXNlIEZyZWVSVE9TLCBpdCB3aWxsIGFsc28gaGVscCAgICAgICAqDQorICAgICAqICAgIHRoZSBGcmVlUlRPUyBwcm9qZWN0IHRvIGNvbnRpbnVlIHdpdGggaXRzIG1pc3Npb24gb2YgcHJvdmlkaW5nICAgICAqDQorICAgICAqICAgIHByb2Zlc3Npb25hbCBncmFkZSwgY3Jvc3MgcGxhdGZvcm0sIGRlIGZhY3RvIHN0YW5kYXJkIHNvbHV0aW9ucyAgICAqDQorICAgICAqICAgIGZvciBtaWNyb2NvbnRyb2xsZXJzIC0gY29tcGxldGVseSBmcmVlIG9mIGNoYXJnZSEgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgID4+PiBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gPDw8ICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIFRoYW5rIHlvdSBmb3IgdXNpbmcgRnJlZVJUT1MsIGFuZCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQorICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQU5EIE1PRElGSUVEIEJZIHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQorICAgID4+Pk5PVEU8PDwgVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0bw0KKyAgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgb2JsaWdlZCB0bw0KKyAgICBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUw0KKyAgICBrZXJuZWwuICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCisgICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkNCisgICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcg0KKyAgICBtb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAgICBMaWNlbnNlIGFuZCB0aGUgRnJlZVJUT1MgbGljZW5zZSBleGNlcHRpb24gYWxvbmcgd2l0aCBGcmVlUlRPUzsgaWYgbm90IGl0DQorICAgIGNhbiBiZSB2aWV3ZWQgaGVyZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwgYW5kIGFsc28gb2J0YWluZWQNCisgICAgYnkgd3JpdGluZyB0byBSaWNoYXJkIEJhcnJ5LCBjb250YWN0IGRldGFpbHMgZm9yIHdob20gYXJlIGF2YWlsYWJsZSBvbiB0aGUNCisgICAgRnJlZVJUT1MgV0VCIHNpdGUuDQorDQorICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KKyAgICANCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nIHRoZSBGQVEgIk15IGFwcGxpY2F0aW9uIGRvZXMgICAqDQorICAgICAqICAgIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCB0cmFpbmluZywgbGF0ZXN0IGluZm9ybWF0aW9uLCANCisgICAgbGljZW5zZSBhbmQgY29udGFjdCBkZXRhaWxzLg0KKyAgICANCisgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCisgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbC4NCisNCisgICAgUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQgbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoIEludGVncml0eSBTeXN0ZW1zLCB3aG8gc2VsbCANCisgICAgdGhlIGNvZGUgd2l0aCBjb21tZXJjaWFsIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiwgYW5kIG1pZGRsZXdhcmUsIHVuZGVyIA0KKyAgICB0aGUgT3BlblJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuT3BlblJUT1MuY29tLiAgSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvDQorICAgIHByb3ZpZGUgYSBzYWZldHkgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIHVuZGVyIA0KKyAgICB0aGUgU2FmZVJUT1MgYnJhbmQ6IGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tLg0KKyovDQorDQorDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisNCisvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQorYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCit0YXNrLmggaXMgaW5jbHVkZWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBmaWxlLiAqLw0KKyNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJ0aW1lcnMuaCINCisjaW5jbHVkZSAiU3RhY2tNYWNyb3MuaCINCisjaW5jbHVkZSAic3RhdGljLWFsbG9jYXRvci5oIg0KKw0KKyN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKy8qDQorICogTWFjcm8gdG8gZGVmaW5lIHRoZSBhbW91bnQgb2Ygc3RhY2sgYXZhaWxhYmxlIHRvIHRoZSBpZGxlIHRhc2suDQorICovDQorI2RlZmluZSB0c2tJRExFX1NUQUNLX1NJWkUJKGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRSkNCitwb3J0U1RBQ0tfVFlQRSBzSWRsZVN0YWNrW3Rza0lETEVfU1RBQ0tfU0laRV07DQorDQorLyoNCisgKiBUYXNrIGNvbnRyb2wgYmxvY2suICBBIHRhc2sgY29udHJvbCBibG9jayAoVENCKSBpcyBhbGxvY2F0ZWQgdG8gZWFjaCB0YXNrLA0KKyAqIGFuZCBzdG9yZXMgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2suDQorICovDQordHlwZWRlZiBzdHJ1Y3QgdHNrVGFza0NvbnRyb2xCbG9jaw0KK3sNCisJdm9sYXRpbGUgcG9ydFNUQUNLX1RZUEUJKnB4VG9wT2ZTdGFjazsJCS8qPCBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IGl0ZW0gcGxhY2VkIG9uIHRoZSB0YXNrcyBzdGFjay4gIFRISVMgTVVTVCBCRSBUSEUgRklSU1QgTUVNQkVSIE9GIFRIRSBTVFJVQ1QuICovDQorDQorCSNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQorCQl4TVBVX1NFVFRJTkdTIHhNUFVTZXR0aW5nczsJCQkJLyo8IFRoZSBNUFUgc2V0dGluZ3MgYXJlIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgcG9ydCBsYXllci4gIFRISVMgTVVTVCBCRSBUSEUgU0VDT05EIE1FTUJFUiBPRiBUSEUgU1RSVUNULiAqLw0KKwkjZW5kaWYJDQorCQ0KKwl4TGlzdEl0ZW0JCQkJeEdlbmVyaWNMaXN0SXRlbTsJLyo8IExpc3QgaXRlbSB1c2VkIHRvIHBsYWNlIHRoZSBUQ0IgaW4gcmVhZHkgYW5kIGJsb2NrZWQgcXVldWVzLiAqLw0KKwl4TGlzdEl0ZW0JCQkJeEV2ZW50TGlzdEl0ZW07CQkvKjwgTGlzdCBpdGVtIHVzZWQgdG8gcGxhY2UgdGhlIFRDQiBpbiBldmVudCBsaXN0cy4gKi8NCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRQl1eFByaW9yaXR5OwkJCS8qPCBUaGUgcHJpb3JpdHkgb2YgdGhlIHRhc2sgd2hlcmUgMCBpcyB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KKwlwb3J0U1RBQ0tfVFlQRQkJCSpweFN0YWNrOwkJCS8qPCBQb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCisJc2lnbmVkIGNoYXIJCQkJcGNUYXNrTmFtZVsgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gXTsvKjwgRGVzY3JpcHRpdmUgbmFtZSBnaXZlbiB0byB0aGUgdGFzayB3aGVuIGNyZWF0ZWQuICBGYWNpbGl0YXRlcyBkZWJ1Z2dpbmcgb25seS4gKi8NCisNCisJI2lmICggcG9ydFNUQUNLX0dST1dUSCA+IDAgKQ0KKwkJcG9ydFNUQUNLX1RZUEUgKnB4RW5kT2ZTdGFjazsJCQkvKjwgVXNlZCBmb3Igc3RhY2sgb3ZlcmZsb3cgY2hlY2tpbmcgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSB0aGUgc3RhY2sgZ3Jvd3MgdXAgZnJvbSBsb3cgbWVtb3J5LiAqLw0KKwkjZW5kaWYNCisNCisJI2lmICggcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCID09IDEgKQ0KKwkJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eENyaXRpY2FsTmVzdGluZzsNCisJI2VuZGlmDQorDQorCSNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCisJCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUJdXhUQ0JOdW1iZXI7CS8qPCBUaGlzIHN0b3JlcyBhIG51bWJlciB0aGF0IGluY3JlbWVudHMgZWFjaCB0aW1lIGEgVENCIGlzIGNyZWF0ZWQuICBJdCBhbGxvd3MgZGVidWdnZXJzIHRvIGRldGVybWluZSB3aGVuIGEgdGFzayBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGVuIHJlY3JlYXRlZC4gKi8NCisJCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgIHV4VGFza051bWJlcjsJLyo8IFRoaXMgc3RvcmVzIGEgbnVtYmVyIHNwZWNpZmljYWxseSBmb3IgdXNlIGJ5IHRoaXJkIHBhcnR5IHRyYWNlIGNvZGUuICovDQorCSNlbmRpZg0KKw0KKwkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhCYXNlUHJpb3JpdHk7CS8qPCBUaGUgcHJpb3JpdHkgbGFzdCBhc3NpZ25lZCB0byB0aGUgdGFzayAtIHVzZWQgYnkgdGhlIHByaW9yaXR5IGluaGVyaXRhbmNlIG1lY2hhbmlzbS4gKi8NCisJI2VuZGlmDQorDQorCSNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCisJCXBkVEFTS19IT09LX0NPREUgcHhUYXNrVGFnOw0KKwkjZW5kaWYNCisNCisJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQorCQl1bnNpZ25lZCBsb25nIHVsUnVuVGltZUNvdW50ZXI7CQkvKjwgVXNlZCBmb3IgY2FsY3VsYXRpbmcgaG93IG11Y2ggQ1BVIHRpbWUgZWFjaCB0YXNrIGlzIHV0aWxpc2luZy4gKi8NCisJI2VuZGlmDQorICAgIHNpZ25lZCBjaGFyICAgICAgICAgICAgIHN0YWNrSXNTdGF0aWM7DQorDQorfSB0c2tUQ0I7DQorDQorI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkvc2l6ZW9mKGFbMF0pKQ0KKyNpZm5kZWYgY29uZmlnTUFYX05VTV9PRl9UQVNLUw0KKyNkZWZpbmUgY29uZmlnTUFYX05VTV9PRl9UQVNLUyAoMzIpDQorI2VuZGlmDQorI2RlZmluZSBOVU1fT0ZfVEFTS1NfRkxBR1MgKChjb25maWdNQVhfTlVNX09GX1RBU0tTKzMxKS8zMikNCitzdGF0aWMgdHNrVENCIHNObFRDQnNbY29uZmlnTUFYX05VTV9PRl9UQVNLU107DQorc3RhdGljIHVpbnQzMl90IHNObFRDQnNGbGFnc1tOVU1fT0ZfVEFTS1NfRkxBR1NdOw0KK3N0YXRpYyBzdGF0aWNfcG9vbF90IHNUQ0JzUG9vbDsNCisNCit2b2lkIHhJbml0VENCcyh2b2lkKTsNCisNCit2b2lkIHhJbml0VENCcyh2b2lkKQ0KK3sNCisgICAgcG9vbEluaXQoICZzVENCc1Bvb2wsDQorICAgICAgICAgICAgICBzaXplb2Yoc05sVENCc1swXSksDQorICAgICAgICAgICAgICBBUlJBWV9TSVpFKHNObFRDQnMpLA0KKyAgICAgICAgICAgICAgJnNObFRDQnMsDQorICAgICAgICAgICAgICAmc05sVENCc0ZsYWdzKTsNCit9DQorDQorLyoNCisgKiBTb21lIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMgcmVxdWlyZSBkYXRhIHRvIGJlIHZpZXdlZCB0byBiZSBnbG9iYWwsIHJhdGhlcg0KKyAqIHRoYW4gZmlsZSBzY29wZS4NCisgKi8NCisjaWZkZWYgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorCSNkZWZpbmUgc3RhdGljDQorI2VuZGlmDQorDQorLypsaW50IC1lOTU2ICovDQorUFJJVklMRUdFRF9EQVRBIHRza1RDQiAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQiA9IE5VTEw7DQorDQorLyogTGlzdHMgZm9yIHJlYWR5IGFuZCBibG9ja2VkIHRhc2tzLiAtLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorUFJJVklMRUdFRF9EQVRBIHhMaXN0IHB4UmVhZHlUYXNrc0xpc3RzWyBjb25maWdNQVhfUFJJT1JJVElFUyBdOwkvKjwgUHJpb3JpdGlzZWQgcmVhZHkgdGFza3MuICovDQorUFJJVklMRUdFRF9EQVRBIHhMaXN0IHhEZWxheWVkVGFza0xpc3QxOwkJCQkJCQkvKjwgRGVsYXllZCB0YXNrcy4gKi8NCitQUklWSUxFR0VEX0RBVEEgeExpc3QgeERlbGF5ZWRUYXNrTGlzdDI7CQkJCQkJCS8qPCBEZWxheWVkIHRhc2tzICh0d28gbGlzdHMgYXJlIHVzZWQgLSBvbmUgZm9yIGRlbGF5cyB0aGF0IGhhdmUgb3ZlcmZsb3dlZCB0aGUgY3VycmVudCB0aWNrIGNvdW50LiAqLw0KK1BSSVZJTEVHRURfREFUQSB4TGlzdCAqIHZvbGF0aWxlIHB4RGVsYXllZFRhc2tMaXN0IDsJCQkJLyo8IFBvaW50cyB0byB0aGUgZGVsYXllZCB0YXNrIGxpc3QgY3VycmVudGx5IGJlaW5nIHVzZWQuICovDQorUFJJVklMRUdFRF9EQVRBIHhMaXN0ICogdm9sYXRpbGUgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdDsJCS8qPCBQb2ludHMgdG8gdGhlIGRlbGF5ZWQgdGFzayBsaXN0IGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIGhvbGQgdGFza3MgdGhhdCBoYXZlIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgdGljayBjb3VudC4gKi8NCitQUklWSUxFR0VEX0RBVEEgeExpc3QgeFBlbmRpbmdSZWFkeUxpc3Q7CQkJCQkJCS8qPCBUYXNrcyB0aGF0IGhhdmUgYmVlbiByZWFkaWVkIHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZC4gIFRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgcmVhZHkgcXVldWUgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIHJlc3VtZWQuICovDQorDQorI2lmICggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCisNCisJUFJJVklMRUdFRF9EQVRBIHhMaXN0IHhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbjsJCQkJLyo8IFRhc2tzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgLSBidXQgdGhlIHRoZWlyIG1lbW9yeSBub3QgeWV0IGZyZWVkLiAqLw0KKwlQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhUYXNrc0RlbGV0ZWQgPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsNCisNCisjZW5kaWYNCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCisNCisJUFJJVklMRUdFRF9EQVRBIHhMaXN0IHhTdXNwZW5kZWRUYXNrTGlzdDsJCQkJCS8qPCBUYXNrcyB0aGF0IGFyZSBjdXJyZW50bHkgc3VzcGVuZGVkLiAqLw0KKw0KKyNlbmRpZg0KKw0KKyNpZiAoIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSA9PSAxICkNCisJDQorCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgeFRhc2tIYW5kbGUgeElkbGVUYXNrSGFuZGxlID0gTlVMTDsNCisJDQorI2VuZGlmDQorDQorLyogRmlsZSBwcml2YXRlIHZhcmlhYmxlcy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KK1BSSVZJTEVHRURfREFUQSB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3VycmVudE51bWJlck9mVGFza3MgCT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFU7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBwb3J0VGlja1R5cGUgeFRpY2tDb3VudCAJCQkJCQk9ICggcG9ydFRpY2tUeXBlICkgMFU7DQorUFJJVklMRUdFRF9EQVRBIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhUb3BVc2VkUHJpb3JpdHkJIAkJCQk9IHRza0lETEVfUFJJT1JJVFk7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4VG9wUmVhZHlQcmlvcml0eSAJCT0gdHNrSURMRV9QUklPUklUWTsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIHNpZ25lZCBwb3J0QkFTRV9UWVBFIHhTY2hlZHVsZXJSdW5uaW5nIAkJCT0gcGRGQUxTRTsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhTY2hlZHVsZXJTdXNwZW5kZWQJIAk9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkRkFMU0U7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4TWlzc2VkVGlja3MgCQkJPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIHBvcnRCQVNFX1RZUEUgeE1pc3NlZFlpZWxkIAkJCQkJCT0gKCBwb3J0QkFTRV9UWVBFICkgcGRGQUxTRTsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIHBvcnRCQVNFX1RZUEUgeE51bU9mT3ZlcmZsb3dzIAkJCQkJPSAoIHBvcnRCQVNFX1RZUEUgKSAwOw0KK1BSSVZJTEVHRURfREFUQSBzdGF0aWMgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFRhc2tOdW1iZXIgCQkJCQkJPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHBvcnRUaWNrVHlwZSB4TmV4dFRhc2tVbmJsb2NrVGltZQkJCQkJCT0gKCBwb3J0VGlja1R5cGUgKSBwb3J0TUFYX0RFTEFZOw0KKw0KKyNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KKw0KKwlQUklWSUxFR0VEX0RBVEEgc3RhdGljIGNoYXIgcGNTdGF0c1N0cmluZ1sgNTAgXSA7DQorCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgdW5zaWduZWQgbG9uZyB1bFRhc2tTd2l0Y2hlZEluVGltZSA9IDBVTDsJLyo8IEhvbGRzIHRoZSB2YWx1ZSBvZiBhIHRpbWVyL2NvdW50ZXIgdGhlIGxhc3QgdGltZSBhIHRhc2sgd2FzIHN3aXRjaGVkIGluLiAqLw0KKwlzdGF0aWMgdm9pZCBwcnZHZW5lcmF0ZVJ1blRpbWVTdGF0c0ZvclRhc2tzSW5MaXN0KCBjb25zdCBzaWduZWQgY2hhciAqcGNXcml0ZUJ1ZmZlciwgeExpc3QgKnB4TGlzdCwgdW5zaWduZWQgbG9uZyB1bFRvdGFsUnVuVGltZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorI2VuZGlmDQorDQorLyogRGVidWdnaW5nIGFuZCB0cmFjZSBmYWNpbGl0aWVzIHByaXZhdGUgdmFyaWFibGVzIGFuZCBtYWNyb3MuIC0tLS0tLS0tLS0tLSovDQorDQorLyoNCisgKiBUaGUgdmFsdWUgdXNlZCB0byBmaWxsIHRoZSBzdGFjayBvZiBhIHRhc2sgd2hlbiB0aGUgdGFzayBpcyBjcmVhdGVkLiAgVGhpcw0KKyAqIGlzIHVzZWQgcHVyZWx5IGZvciBjaGVja2luZyB0aGUgaGlnaCB3YXRlciBtYXJrIGZvciB0YXNrcy4NCisgKi8NCisjZGVmaW5lIHRza1NUQUNLX0ZJTExfQllURQkoIDB4YTVVICkNCisNCisvKg0KKyAqIE1hY3JvcyB1c2VkIGJ5IHZMaXN0VGFzayB0byBpbmRpY2F0ZSB3aGljaCBzdGF0ZSBhIHRhc2sgaXMgaW4uDQorICovDQorI2RlZmluZSB0c2tCTE9DS0VEX0NIQVIJCSggKCBzaWduZWQgY2hhciApICdCJyApDQorI2RlZmluZSB0c2tSRUFEWV9DSEFSCQkoICggc2lnbmVkIGNoYXIgKSAnUicgKQ0KKyNkZWZpbmUgdHNrREVMRVRFRF9DSEFSCQkoICggc2lnbmVkIGNoYXIgKSAnRCcgKQ0KKyNkZWZpbmUgdHNrU1VTUEVOREVEX0NIQVIJKCAoIHNpZ25lZCBjaGFyICkgJ1MnICkNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFBsYWNlIHRoZSB0YXNrIHJlcHJlc2VudGVkIGJ5IHB4VENCIGludG8gdGhlIGFwcHJvcHJpYXRlIHJlYWR5IHF1ZXVlIGZvcg0KKyAqIHRoZSB0YXNrLiAgSXQgaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gIE9uZSBxdWlyayBvZiB0aGlzIGlzDQorICogdGhhdCBpZiB0aGUgdGFzayBiZWluZyBpbnNlcnRlZCBpcyBhdCB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY3VycmVudGx5DQorICogZXhlY3V0aW5nIHRhc2ssIHRoZW4gaXQgd2lsbCBvbmx5IGJlIHJlc2NoZWR1bGVkIGFmdGVyIHRoZSBjdXJyZW50bHkNCisgKiBleGVjdXRpbmcgdGFzayBoYXMgYmVlbiByZXNjaGVkdWxlZC4NCisgKi8NCisjZGVmaW5lIHBydkFkZFRhc2tUb1JlYWR5UXVldWUoIHB4VENCICkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXRyYWNlTU9WRURfVEFTS19UT19SRUFEWV9TVEFURSggcHhUQ0IgKQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggKCBweFRDQiApLT51eFByaW9yaXR5ID4gdXhUb3BSZWFkeVByaW9yaXR5ICkJCQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJdXhUb3BSZWFkeVByaW9yaXR5ID0gKCBweFRDQiApLT51eFByaW9yaXR5OwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl2TGlzdEluc2VydEVuZCggKCB4TGlzdCAqICkgJiggcHhSZWFkeVRhc2tzTGlzdHNbICggcHhUQ0IgKS0+dXhQcmlvcml0eSBdICksICYoICggcHhUQ0IgKS0+eEdlbmVyaWNMaXN0SXRlbSApICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hY3JvIHRoYXQgbG9va3MgYXQgdGhlIGxpc3Qgb2YgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGRlbGF5ZWQgdG8gc2VlIGlmDQorICogYW55IHJlcXVpcmUgd2FraW5nLg0KKyAqDQorICogVGFza3MgYXJlIHN0b3JlZCBpbiB0aGUgcXVldWUgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIHdha2UgdGltZSAtIG1lYW5pbmcNCisgKiBvbmNlIG9uZSB0YXNrcyBoYXMgYmVlbiBmb3VuZCB3aG9zZSB0aW1lciBoYXMgbm90IGV4cGlyZWQgd2UgbmVlZCBub3QgbG9vaw0KKyAqIGFueSBmdXJ0aGVyIGRvd24gdGhlIGxpc3QuDQorICovDQorI2RlZmluZSBwcnZDaGVja0RlbGF5ZWRUYXNrcygpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK3BvcnRUaWNrVHlwZSB4SXRlbVZhbHVlOwkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogSXMgdGhlIHRpY2sgY291bnQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3YWtlIHRpbWUgb2YgdGhlIGZpcnN0CQkJXA0KKwl0YXNrIHJlZmVyZW5jZWQgZnJvbSB0aGUgZGVsYXllZCB0YXNrcyBsaXN0PyAqLwkJCQkJCQkJCQlcDQorCWlmKCB4VGlja0NvdW50ID49IHhOZXh0VGFza1VuYmxvY2tUaW1lICkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCWZvciggOzsgKQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoIHB4RGVsYXllZFRhc2tMaXN0ICkgIT0gcGRGQUxTRSApCQkJCQkJXA0KKwkJCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkvKiBUaGUgZGVsYXllZCBsaXN0IGlzIGVtcHR5LiAgU2V0IHhOZXh0VGFza1VuYmxvY2tUaW1lIHRvIHRoZQkJCVwNCisJCQkJbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBzbyBpdCBpcyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCB0aGUJCQkJXA0KKwkJCQlpZiggeFRpY2tDb3VudCA+PSB4TmV4dFRhc2tVbmJsb2NrVGltZSApIHRlc3Qgd2lsbCBwYXNzIG5leHQJCQlcDQorCQkJCXRpbWUgdGhyb3VnaC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBwb3J0TUFYX0RFTEFZOwkJCQkJCQkJCVwNCisJCQkJYnJlYWs7CQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJLyogVGhlIGRlbGF5ZWQgbGlzdCBpcyBub3QgZW1wdHksIGdldCB0aGUgdmFsdWUgb2YgdGhlIGl0ZW0gYXQJCQlcDQorCQkJCXRoZSBoZWFkIG9mIHRoZSBkZWxheWVkIGxpc3QuICBUaGlzIGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZQkJCVwNCisJCQkJdGFzayBhdCB0aGUgaGVhZCBvZiB0aGUgZGVsYXllZCBsaXN0IHNob3VsZCBiZSByZW1vdmVkIGZyb20JCQkJXA0KKwkJCQl0aGUgQmxvY2tlZCBzdGF0ZS4gKi8JCQkJCQkJCQkJCQkJXA0KKwkJCQlweFRDQiA9ICggdHNrVENCICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4RGVsYXllZFRhc2tMaXN0ICk7CVwNCisJCQkJeEl0ZW1WYWx1ZSA9IGxpc3RHRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7CVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQlpZiggeFRpY2tDb3VudCA8IHhJdGVtVmFsdWUgKQkJCQkJCQkJCQkJXA0KKwkJCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJLyogSXQgaXMgbm90IHRpbWUgdG8gdW5ibG9jayB0aGlzIGl0ZW0geWV0LCBidXQgdGhlIGl0ZW0JCQlcDQorCQkJCQl2YWx1ZSBpcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBhdCB0aGUgaGVhZCBvZiB0aGUJCQkJXA0KKwkJCQkJYmxvY2tlZCBsaXN0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIEJsb2NrZWQgc3RhdGUgLQkJCQlcDQorCQkJCQlzbyByZWNvcmQgdGhlIGl0ZW0gdmFsdWUgaW4geE5leHRUYXNrVW5ibG9ja1RpbWUuICovCQkJCVwNCisJCQkJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0geEl0ZW1WYWx1ZTsJCQkJCQkJCQlcDQorCQkJCQlicmVhazsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCS8qIEl0IGlzIHRpbWUgdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIEJsb2NrZWQgc3RhdGUuICovCQkJCVwNCisJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8JCQkJCQkJCVwNCisJCQkJaWYoIHB4VENCLT54RXZlbnRMaXN0SXRlbS5wdkNvbnRhaW5lciAhPSBOVUxMICkJCQkJCQkJXA0KKwkJCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7CQkJCQkJCVwNCisJCQkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJcHJ2QWRkVGFza1RvUmVhZHlRdWV1ZSggcHhUQ0IgKTsJCQkJCQkJCQkJXA0KKwkJCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFNldmVyYWwgZnVuY3Rpb25zIHRha2UgYW4geFRhc2tIYW5kbGUgcGFyYW1ldGVyIHRoYXQgY2FuIG9wdGlvbmFsbHkgYmUgTlVMTCwNCisgKiB3aGVyZSBOVUxMIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaGFuZGxlIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nDQorICogdGFzayBzaG91bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgcGFyYW1ldGVyLiAgVGhpcyBtYWNybyBzaW1wbHkgY2hlY2tzIHRvDQorICogc2VlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgTlVMTCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIFRDQi4NCisgKi8NCisjZGVmaW5lIHBydkdldFRDQkZyb21IYW5kbGUoIHB4SGFuZGxlICkgKCAoICggcHhIYW5kbGUgKSA9PSBOVUxMICkgPyAoIHRza1RDQiAqICkgcHhDdXJyZW50VENCIDogKCB0c2tUQ0IgKiApICggcHhIYW5kbGUgKSApDQorDQorLyogQ2FsbGJhY2sgZnVuY3Rpb24gcHJvdG90eXBlcy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rKCB4VGFza0hhbmRsZSBweFRhc2ssIHNpZ25lZCBjaGFyICpwY1Rhc2tOYW1lICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uVGlja0hvb2soIHZvaWQgKTsNCisJCQ0KKy8qIEZpbGUgcHJpdmF0ZSBmdW5jdGlvbnMuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIFV0aWxpdHkgdG8gcmVhZHkgYSBUQ0IgZm9yIGEgZ2l2ZW4gdGFzay4gIE1haW5seSBqdXN0IGNvcGllcyB0aGUgcGFyYW1ldGVycw0KKyAqIGludG8gdGhlIFRDQiBzdHJ1Y3R1cmUuDQorICovDQorc3RhdGljIHZvaWQgcHJ2SW5pdGlhbGlzZVRDQlZhcmlhYmxlcyggdHNrVENCICpweFRDQiwgY29uc3Qgc2lnbmVkIGNoYXIgKiBjb25zdCBwY05hbWUsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhQcmlvcml0eSwgY29uc3QgeE1lbW9yeVJlZ2lvbiAqIGNvbnN0IHhSZWdpb25zLCB1bnNpZ25lZCBzaG9ydCB1c1N0YWNrRGVwdGggKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVXRpbGl0eSB0byByZWFkeSBhbGwgdGhlIGxpc3RzIHVzZWQgYnkgdGhlIHNjaGVkdWxlci4gIFRoaXMgaXMgY2FsbGVkDQorICogYXV0b21hdGljYWxseSB1cG9uIHRoZSBjcmVhdGlvbiBvZiB0aGUgZmlyc3QgdGFzay4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVGFza0xpc3RzKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIFRoZSBpZGxlIHRhc2ssIHdoaWNoIGFzIGFsbCB0YXNrcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG5ldmVyIGVuZGluZyBsb29wLg0KKyAqIFRoZSBpZGxlIHRhc2sgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgcmVhZHkgbGlzdHMgdXBvbg0KKyAqIGNyZWF0aW9uIG9mIHRoZSBmaXJzdCB1c2VyIHRhc2suDQorICoNCisgKiBUaGUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oKSBtYWNybyBpcyB1c2VkIHRvIGFsbG93IHBvcnQvY29tcGlsZXIgc3BlY2lmaWMNCisgKiBsYW5ndWFnZSBleHRlbnNpb25zLiAgVGhlIGVxdWl2YWxlbnQgcHJvdG90eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzOg0KKyAqDQorICogdm9pZCBwcnZJZGxlVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICk7DQorICoNCisgKi8NCitzdGF0aWMgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHBydklkbGVUYXNrLCBwdlBhcmFtZXRlcnMgKTsNCisNCisvKg0KKyAqIFV0aWxpdHkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGhvbGQgYSBUQ0IsDQorICogaW5jbHVkaW5nIHRoZSBzdGFjayBwb2ludGVkIHRvIGJ5IHRoZSBUQ0IuDQorICoNCisgKiBUaGlzIGRvZXMgbm90IGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgdGFzayBpdHNlbGYgKGkuZS4gbWVtb3J5DQorICogYWxsb2NhdGVkIGJ5IGNhbGxzIHRvIHB2UG9ydE1hbGxvYyBmcm9tIHdpdGhpbiB0aGUgdGFza3MgYXBwbGljYXRpb24gY29kZSkuDQorICovDQorI2lmICggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCisNCisJc3RhdGljIHZvaWQgcHJ2RGVsZXRlVENCKCB0c2tUQ0IgKnB4VENCICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisjZW5kaWYNCisNCisvKg0KKyAqIFVzZWQgb25seSBieSB0aGUgaWRsZSB0YXNrLiAgVGhpcyBjaGVja3MgdG8gc2VlIGlmIGFueXRoaW5nIGhhcyBiZWVuIHBsYWNlZA0KKyAqIGluIHRoZSBsaXN0IG9mIHRhc2tzIHdhaXRpbmcgdG8gYmUgZGVsZXRlZC4gIElmIHNvIHRoZSB0YXNrIGlzIGNsZWFuZWQgdXANCisgKiBhbmQgaXRzIFRDQiBkZWxldGVkLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydkNoZWNrVGFza3NXYWl0aW5nVGVybWluYXRpb24oIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBpcyBlbnRlcmluZyB0aGUgQmxvY2tlZCBzdGF0ZS4gIEFkZCB0aGUgdGFzayB0bw0KKyAqIGVpdGhlciB0aGUgY3VycmVudCBvciB0aGUgb3ZlcmZsb3cgZGVsYXllZCB0YXNrIGxpc3QuDQorICovDQorc3RhdGljIHZvaWQgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCBwb3J0VGlja1R5cGUgeFRpbWVUb1dha2UgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogQWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBoZWFwIGZvciBhIFRDQiBhbmQgYXNzb2NpYXRlZCBzdGFjay4gIENoZWNrcyB0aGUNCisgKiBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLg0KKyAqLw0KK3N0YXRpYyB0c2tUQ0IgKnBydkFsbG9jYXRlVENCQW5kU3RhY2soIHVuc2lnbmVkIHNob3J0IHVzU3RhY2tEZXB0aCwgcG9ydFNUQUNLX1RZUEUgKnB1eFN0YWNrQnVmZmVyICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIENhbGxlZCBmcm9tIHZUYXNrTGlzdC4gIHZMaXN0VGFza3MgZGV0YWlscyBhbGwgdGhlIHRhc2tzIGN1cnJlbnRseSB1bmRlcg0KKyAqIGNvbnRyb2wgb2YgdGhlIHNjaGVkdWxlci4gIFRoZSB0YXNrcyBtYXkgYmUgaW4gb25lIG9mIGEgbnVtYmVyIG9mIGxpc3RzLg0KKyAqIHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCBhY2NlcHRzIGEgbGlzdCBhbmQgZGV0YWlscyB0aGUgdGFza3MgZnJvbQ0KKyAqIHdpdGhpbiBqdXN0IHRoYXQgbGlzdC4NCisgKg0KKyAqIFRISVMgRlVOQ1RJT04gSVMgSU5URU5ERUQgRk9SIERFQlVHR0lORyBPTkxZLCBBTkQgU0hPVUxEIE5PVCBCRSBDQUxMRUQgRlJPTQ0KKyAqIE5PUk1BTCBBUFBMSUNBVElPTiBDT0RFLg0KKyAqLw0KKyNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCisNCitzdGF0aWMgdm9pZCBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoIHZvaWQgKCpwbUNhbGxiYWNrKSAodm9sYXRpbGUgdm9pZCAqIHB4TmV4dFRDQiwgc2lnbmVkIGNoYXIgc3RhdHVzKSwgeExpc3QgKnB4TGlzdCwgc2lnbmVkIGNoYXIgY1N0YXR1cyApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorI2VuZGlmDQorDQorLyoNCisgKiBXaGVuIGEgdGFzayBpcyBjcmVhdGVkLCB0aGUgc3RhY2sgb2YgdGhlIHRhc2sgaXMgZmlsbGVkIHdpdGggYSBrbm93biB2YWx1ZS4NCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlICdoaWdoIHdhdGVyIG1hcmsnIG9mIHRoZSB0YXNrIHN0YWNrIGJ5DQorICogZGV0ZXJtaW5pbmcgaG93IG11Y2ggb2YgdGhlIHN0YWNrIHJlbWFpbnMgYXQgdGhlIG9yaWdpbmFsIHByZXNldCB2YWx1ZS4NCisgKi8NCisjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgfHwgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkgKQ0KKw0KKwlzdGF0aWMgdW5zaWduZWQgc2hvcnQgdXNUYXNrQ2hlY2tGcmVlU3RhY2tTcGFjZSggY29uc3QgdW5zaWduZWQgY2hhciAqIHB1Y1N0YWNrQnl0ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorI2VuZGlmDQorDQorDQorLypsaW50ICtlOTU2ICovDQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFRBU0sgQ1JFQVRJT04gQVBJIGRvY3VtZW50ZWQgaW4gdGFzay5oDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4VGFza0dlbmVyaWNDcmVhdGUoIHBkVEFTS19DT0RFIHB4VGFza0NvZGUsIGNvbnN0IHNpZ25lZCBjaGFyICogY29uc3QgcGNOYW1lLCB1bnNpZ25lZCBzaG9ydCB1c1N0YWNrRGVwdGgsIHZvaWQgKnB2UGFyYW1ldGVycywgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFByaW9yaXR5LCB4VGFza0hhbmRsZSAqcHhDcmVhdGVkVGFzaywgcG9ydFNUQUNLX1RZUEUgKnB1eFN0YWNrQnVmZmVyLCBjb25zdCB4TWVtb3J5UmVnaW9uICogY29uc3QgeFJlZ2lvbnMgKQ0KK3sNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KK3Rza1RDQiAqIHB4TmV3VENCOw0KKw0KKwljb25maWdBU1NFUlQoIHB4VGFza0NvZGUgKTsNCisJY29uZmlnQVNTRVJUKCAoICggdXhQcmlvcml0eSAmICggfnBvcnRQUklWSUxFR0VfQklUICkgKSA8IGNvbmZpZ01BWF9QUklPUklUSUVTICkgKTsNCisNCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgVENCIGFuZCBzdGFjayBmb3IgdGhlIG5ldyB0YXNrLA0KKwljaGVja2luZyB0aGF0IHRoZSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLiAqLw0KKwlweE5ld1RDQiA9IHBydkFsbG9jYXRlVENCQW5kU3RhY2soIHVzU3RhY2tEZXB0aCwgcHV4U3RhY2tCdWZmZXIgKTsNCisNCisJaWYoIHB4TmV3VENCICE9IE5VTEwgKQ0KKwl7DQorCQlwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrOw0KKw0KKwkJI2lmKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KKwkJCS8qIFNob3VsZCB0aGUgdGFzayBiZSBjcmVhdGVkIGluIHByaXZpbGVnZWQgbW9kZT8gKi8NCisJCQlwb3J0QkFTRV9UWVBFIHhSdW5Qcml2aWxlZ2VkOw0KKwkJCWlmKCAoIHV4UHJpb3JpdHkgJiBwb3J0UFJJVklMRUdFX0JJVCApICE9IDBVICkNCisJCQl7DQorCQkJCXhSdW5Qcml2aWxlZ2VkID0gcGRUUlVFOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQl4UnVuUHJpdmlsZWdlZCA9IHBkRkFMU0U7DQorCQkJfQ0KKwkJCXV4UHJpb3JpdHkgJj0gfnBvcnRQUklWSUxFR0VfQklUOw0KKwkJI2VuZGlmIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSAqLw0KKw0KKwkJLyogQ2FsY3VsYXRlIHRoZSB0b3Agb2Ygc3RhY2sgYWRkcmVzcy4gIFRoaXMgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZQ0KKwkJc3RhY2sgZ3Jvd3MgZnJvbSBoaWdoIG1lbW9yeSB0byBsb3cgKGFzIHBlciB0aGUgODB4ODYpIG9yIHZpc2EgdmVyc2EuDQorCQlwb3J0U1RBQ0tfR1JPV1RIIGlzIHVzZWQgdG8gbWFrZSB0aGUgcmVzdWx0IHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFzDQorCQlyZXF1aXJlZCBieSB0aGUgcG9ydC4gKi8NCisJCSNpZiggcG9ydFNUQUNLX0dST1dUSCA8IDAgKQ0KKwkJew0KKwkJCXB4VG9wT2ZTdGFjayA9IHB4TmV3VENCLT5weFN0YWNrICsgKCB1c1N0YWNrRGVwdGggLSAoIHVuc2lnbmVkIHNob3J0ICkgMSApOw0KKwkJCXB4VG9wT2ZTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKiApICggKCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHB4VG9wT2ZTdGFjayApICYgKCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIH5wb3J0QllURV9BTElHTk1FTlRfTUFTSyAgKSApOw0KKw0KKwkJCS8qIENoZWNrIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGNhbGN1bGF0ZWQgdG9wIG9mIHN0YWNrIGlzIGNvcnJlY3QuICovDQorCQkJY29uZmlnQVNTRVJUKCAoICggKCB1bnNpZ25lZCBsb25nICkgcHhUb3BPZlN0YWNrICYgKCB1bnNpZ25lZCBsb25nICkgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSA9PSAwVUwgKSApOw0KKwkJfQ0KKwkJI2Vsc2UNCisJCXsNCisJCQlweFRvcE9mU3RhY2sgPSBweE5ld1RDQi0+cHhTdGFjazsNCisJCQkNCisJCQkvKiBDaGVjayB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdGFjayBidWZmZXIgaXMgY29ycmVjdC4gKi8NCisJCQljb25maWdBU1NFUlQoICggKCAoIHVuc2lnbmVkIGxvbmcgKSBweE5ld1RDQi0+cHhTdGFjayAmICggdW5zaWduZWQgbG9uZyApIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgPT0gMFVMICkgKTsNCisNCisJCQkvKiBJZiB3ZSB3YW50IHRvIHVzZSBzdGFjayBjaGVja2luZyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlDQorCQkJYSBwb3NpdGl2ZSBzdGFjayBncm93dGggZGlyZWN0aW9uIHRoZW4gd2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZQ0KKwkJCW90aGVyIGV4dHJlbWUgb2YgdGhlIHN0YWNrIHNwYWNlLiAqLw0KKwkJCXB4TmV3VENCLT5weEVuZE9mU3RhY2sgPSBweE5ld1RDQi0+cHhTdGFjayArICggdXNTdGFja0RlcHRoIC0gMSApOw0KKwkJfQ0KKwkJI2VuZGlmDQorDQorCQkvKiBTZXR1cCB0aGUgbmV3bHkgYWxsb2NhdGVkIFRDQiB3aXRoIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0YXNrLiAqLw0KKwkJcHJ2SW5pdGlhbGlzZVRDQlZhcmlhYmxlcyggcHhOZXdUQ0IsIHBjTmFtZSwgdXhQcmlvcml0eSwgeFJlZ2lvbnMsIHVzU3RhY2tEZXB0aCApOw0KKw0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgVENCIHN0YWNrIHRvIGxvb2sgYXMgaWYgdGhlIHRhc2sgd2FzIGFscmVhZHkgcnVubmluZywNCisJCWJ1dCBoYWQgYmVlbiBpbnRlcnJ1cHRlZCBieSB0aGUgc2NoZWR1bGVyLiAgVGhlIHJldHVybiBhZGRyZXNzIGlzIHNldA0KKwkJdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIGZ1bmN0aW9uLiBPbmNlIHRoZSBzdGFjayBoYXMgYmVlbiBpbml0aWFsaXNlZA0KKwkJdGhlCXRvcCBvZiBzdGFjayB2YXJpYWJsZSBpcyB1cGRhdGVkLiAqLw0KKwkJI2lmKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KKwkJew0KKwkJCXB4TmV3VENCLT5weFRvcE9mU3RhY2sgPSBweFBvcnRJbml0aWFsaXNlU3RhY2soIHB4VG9wT2ZTdGFjaywgcHhUYXNrQ29kZSwgcHZQYXJhbWV0ZXJzLCB4UnVuUHJpdmlsZWdlZCApOw0KKwkJfQ0KKwkJI2Vsc2UNCisJCXsNCisJCQlweE5ld1RDQi0+cHhUb3BPZlN0YWNrID0gcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBweFRvcE9mU3RhY2ssIHB4VGFza0NvZGUsIHB2UGFyYW1ldGVycyApOw0KKwkJfQ0KKwkJI2VuZGlmDQorDQorCQkvKiBDaGVjayB0aGUgYWxpZ25tZW50IG9mIHRoZSBpbml0aWFsaXNlZCBzdGFjay4gKi8NCisJCXBvcnRBTElHTk1FTlRfQVNTRVJUX3B4Q3VycmVudFRDQiggKCAoICggdW5zaWduZWQgbG9uZyApIHB4TmV3VENCLT5weFRvcE9mU3RhY2sgJiAoIHVuc2lnbmVkIGxvbmcgKSBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApID09IDBVTCApICk7DQorDQorCQlpZiggKCB2b2lkICogKSBweENyZWF0ZWRUYXNrICE9IE5VTEwgKQ0KKwkJew0KKwkJCS8qIFBhc3MgdGhlIFRDQiBvdXQgLSBpbiBhbiBhbm9ueW1vdXMgd2F5LiAgVGhlIGNhbGxpbmcgZnVuY3Rpb24vDQorCQkJdGFzayBjYW4gdXNlIHRoaXMgYXMgYSBoYW5kbGUgdG8gZGVsZXRlIHRoZSB0YXNrIGxhdGVyIGlmDQorCQkJcmVxdWlyZWQuKi8NCisJCQkqcHhDcmVhdGVkVGFzayA9ICggeFRhc2tIYW5kbGUgKSBweE5ld1RDQjsNCisJCX0NCisJCQ0KKwkJLyogV2UgYXJlIGdvaW5nIHRvIG1hbmlwdWxhdGUgdGhlIHRhc2sgcXVldWVzIHRvIGFkZCB0aGlzIHRhc2sgdG8gYQ0KKwkJcmVhZHkgbGlzdCwgc28gbXVzdCBtYWtlIHN1cmUgbm8gaW50ZXJydXB0cyBvY2N1ci4gKi8NCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCXV4Q3VycmVudE51bWJlck9mVGFza3MrKzsNCisJCQlpZiggcHhDdXJyZW50VENCID09IE5VTEwgKQ0KKwkJCXsNCisJCQkJLyogVGhlcmUgYXJlIG5vIG90aGVyIHRhc2tzLCBvciBhbGwgdGhlIG90aGVyIHRhc2tzIGFyZSBpbg0KKwkJCQl0aGUgc3VzcGVuZGVkIHN0YXRlIC0gbWFrZSB0aGlzIHRoZSBjdXJyZW50IHRhc2suICovDQorCQkJCXB4Q3VycmVudFRDQiA9ICBweE5ld1RDQjsNCisNCisJCQkJaWYoIHV4Q3VycmVudE51bWJlck9mVGFza3MgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMSApDQorCQkJCXsNCisJCQkJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IHRhc2sgdG8gYmUgY3JlYXRlZCBzbyBkbyB0aGUgcHJlbGltaW5hcnkNCisJCQkJCWluaXRpYWxpc2F0aW9uIHJlcXVpcmVkLiAgV2Ugd2lsbCBub3QgcmVjb3ZlciBpZiB0aGlzIGNhbGwNCisJCQkJCWZhaWxzLCBidXQgd2Ugd2lsbCByZXBvcnQgdGhlIGZhaWx1cmUuICovDQorCQkJCQlwcnZJbml0aWFsaXNlVGFza0xpc3RzKCk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogSWYgdGhlIHNjaGVkdWxlciBpcyBub3QgYWxyZWFkeSBydW5uaW5nLCBtYWtlIHRoaXMgdGFzayB0aGUNCisJCQkJY3VycmVudCB0YXNrIGlmIGl0IGlzIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdG8gYmUgY3JlYXRlZA0KKwkJCQlzbyBmYXIuICovDQorCQkJCWlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA8PSB1eFByaW9yaXR5ICkNCisJCQkJCXsNCisJCQkJCQlweEN1cnJlbnRUQ0IgPSBweE5ld1RDQjsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQkvKiBSZW1lbWJlciB0aGUgdG9wIHByaW9yaXR5IHRvIG1ha2UgY29udGV4dCBzd2l0Y2hpbmcgZmFzdGVyLiAgVXNlDQorCQkJdGhlIHByaW9yaXR5IGluIHB4TmV3VENCIGFzIHRoaXMgaGFzIGJlZW4gY2FwcGVkIHRvIGEgdmFsaWQgdmFsdWUuICovDQorCQkJaWYoIHB4TmV3VENCLT51eFByaW9yaXR5ID4gdXhUb3BVc2VkUHJpb3JpdHkgKQ0KKwkJCXsNCisJCQkJdXhUb3BVc2VkUHJpb3JpdHkgPSBweE5ld1RDQi0+dXhQcmlvcml0eTsNCisJCQl9DQorDQorCQkJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KKwkJCXsNCisJCQkJLyogQWRkIGEgY291bnRlciBpbnRvIHRoZSBUQ0IgZm9yIHRyYWNpbmcgb25seS4gKi8NCisJCQkJcHhOZXdUQ0ItPnV4VENCTnVtYmVyID0gdXhUYXNrTnVtYmVyOw0KKwkJCX0NCisJCQkjZW5kaWYNCisJCQl1eFRhc2tOdW1iZXIrKzsNCisNCisJCQlwcnZBZGRUYXNrVG9SZWFkeVF1ZXVlKCBweE5ld1RDQiApOw0KKw0KKwkJCXhSZXR1cm4gPSBwZFBBU1M7DQorCQkJcG9ydFNFVFVQX1RDQiggcHhOZXdUQ0IgKTsNCisJCQl0cmFjZVRBU0tfQ1JFQVRFKCBweE5ld1RDQiApOw0KKwkJfQ0KKwkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXhSZXR1cm4gPSBlcnJDT1VMRF9OT1RfQUxMT0NBVEVfUkVRVUlSRURfTUVNT1JZOw0KKwkJdHJhY2VUQVNLX0NSRUFURV9GQUlMRUQoKTsNCisJfQ0KKw0KKwlpZiggeFJldHVybiA9PSBwZFBBU1MgKQ0KKwl7DQorCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogSWYgdGhlIGNyZWF0ZWQgdGFzayBpcyBvZiBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBjdXJyZW50IHRhc2sNCisJCQl0aGVuIGl0IHNob3VsZCBydW4gbm93LiAqLw0KKwkJCWlmKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgPCB1eFByaW9yaXR5ICkNCisJCQl7DQorCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCXJldHVybiB4UmV0dXJuOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrRGVsZXRlKCB4VGFza0hhbmRsZSBweFRhc2tUb0RlbGV0ZSApDQorCXsNCisJdHNrVENCICpweFRDQjsNCisNCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCS8qIEVuc3VyZSBhIHlpZWxkIGlzIHBlcmZvcm1lZCBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGJlaW5nDQorCQkJZGVsZXRlZC4gKi8NCisJCQlpZiggcHhUYXNrVG9EZWxldGUgPT0gcHhDdXJyZW50VENCICkNCisJCQl7DQorCQkJCXB4VGFza1RvRGVsZXRlID0gTlVMTDsNCisJCQl9DQorDQorCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHdlIGFyZSBkZWxldGluZyBvdXJzZWx2ZXMuICovDQorCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCBweFRhc2tUb0RlbGV0ZSApOw0KKw0KKwkJCS8qIFJlbW92ZSB0YXNrIGZyb20gdGhlIHJlYWR5IGxpc3QgYW5kIHBsYWNlIGluIHRoZQl0ZXJtaW5hdGlvbiBsaXN0Lg0KKwkJCVRoaXMgd2lsbCBzdG9wIHRoZSB0YXNrIGZyb20gYmUgc2NoZWR1bGVkLiAgVGhlIGlkbGUgdGFzayB3aWxsIGNoZWNrDQorCQkJdGhlIHRlcm1pbmF0aW9uIGxpc3QgYW5kIGZyZWUgdXAgYW55IG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlDQorCQkJc2NoZWR1bGVyIGZvciB0aGUgVENCIGFuZCBzdGFjay4gKi8NCisJCQl2TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKw0KKwkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8NCisJCQlpZiggcHhUQ0ItPnhFdmVudExpc3RJdGVtLnB2Q29udGFpbmVyICE9IE5VTEwgKQ0KKwkJCXsNCisJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQorCQkJfQ0KKw0KKwkJCXZMaXN0SW5zZXJ0RW5kKCAoIHhMaXN0ICogKSAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorDQorCQkJLyogSW5jcmVtZW50IHRoZSB1Y1Rhc2tzRGVsZXRlZCB2YXJpYWJsZSBzbyB0aGUgaWRsZSB0YXNrIGtub3dzDQorCQkJdGhlcmUgaXMgYSB0YXNrIHRoYXQgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhhdCBpdCBzaG91bGQgdGhlcmVmb3JlDQorCQkJY2hlY2sgdGhlIHhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiBsaXN0LiAqLw0KKwkJCSsrdXhUYXNrc0RlbGV0ZWQ7DQorDQorCQkJLyogSW5jcmVtZW50IHRoZSB1eFRhc2tOdW1iZXJWYXJpYWJsZSBhbHNvIHNvIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMNCisJCQljYW4gZGV0ZWN0IHRoYXQgdGhlIHRhc2sgbGlzdHMgbmVlZCByZS1nZW5lcmF0aW5nLiAqLw0KKwkJCXV4VGFza051bWJlcisrOw0KKw0KKwkJCXRyYWNlVEFTS19ERUxFVEUoIHB4VENCICk7DQorCQl9DQorCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJLyogRm9yY2UgYSByZXNjaGVkdWxlIGlmIHdlIGhhdmUganVzdCBkZWxldGVkIHRoZSBjdXJyZW50IHRhc2suICovDQorCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJaWYoICggdm9pZCAqICkgcHhUYXNrVG9EZWxldGUgPT0gTlVMTCApDQorCQkJew0KKwkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKyNlbmRpZg0KKw0KKw0KKw0KKw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBUQVNLIENPTlRST0wgQVBJIGRvY3VtZW50ZWQgaW4gdGFzay5oDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrRGVsYXlVbnRpbCA9PSAxICkNCisNCisJdm9pZCB2VGFza0RlbGF5VW50aWwoIHBvcnRUaWNrVHlwZSAqIGNvbnN0IHB4UHJldmlvdXNXYWtlVGltZSwgcG9ydFRpY2tUeXBlIHhUaW1lSW5jcmVtZW50ICkNCisJew0KKwlwb3J0VGlja1R5cGUgeFRpbWVUb1dha2U7DQorCXBvcnRCQVNFX1RZUEUgeEFscmVhZHlZaWVsZGVkLCB4U2hvdWxkRGVsYXkgPSBwZEZBTFNFOw0KKw0KKwkJY29uZmlnQVNTRVJUKCBweFByZXZpb3VzV2FrZVRpbWUgKTsNCisJCWNvbmZpZ0FTU0VSVCggKCB4VGltZUluY3JlbWVudCA+IDBVICkgKTsNCisNCisJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJew0KKwkJCS8qIEdlbmVyYXRlIHRoZSB0aWNrIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgd2FudHMgdG8gd2FrZS4gKi8NCisJCQl4VGltZVRvV2FrZSA9ICpweFByZXZpb3VzV2FrZVRpbWUgKyB4VGltZUluY3JlbWVudDsNCisNCisJCQlpZiggeFRpY2tDb3VudCA8ICpweFByZXZpb3VzV2FrZVRpbWUgKQ0KKwkJCXsNCisJCQkJLyogVGhlIHRpY2sgY291bnQgaGFzIG92ZXJmbG93ZWQgc2luY2UgdGhpcyBmdW5jdGlvbiB3YXMNCisJCQkJbGFzdGVkIGNhbGxlZC4gIEluIHRoaXMgY2FzZSB0aGUgb25seSB0aW1lIHdlIHNob3VsZCBldmVyDQorCQkJCWFjdHVhbGx5IGRlbGF5IGlzIGlmIHRoZSB3YWtlIHRpbWUgaGFzIGFsc28Jb3ZlcmZsb3dlZCwNCisJCQkJYW5kIHRoZSB3YWtlIHRpbWUgaXMgZ3JlYXRlciB0aGFuIHRoZSB0aWNrIHRpbWUuICBXaGVuIHRoaXMNCisJCQkJaXMgdGhlIGNhc2UgaXQgaXMgYXMgaWYgbmVpdGhlciB0aW1lIGhhZCBvdmVyZmxvd2VkLiAqLw0KKwkJCQlpZiggKCB4VGltZVRvV2FrZSA8ICpweFByZXZpb3VzV2FrZVRpbWUgKSAmJiAoIHhUaW1lVG9XYWtlID4geFRpY2tDb3VudCApICkNCisJCQkJew0KKwkJCQkJeFNob3VsZERlbGF5ID0gcGRUUlVFOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCS8qIFRoZSB0aWNrIHRpbWUgaGFzIG5vdCBvdmVyZmxvd2VkLiAgSW4gdGhpcyBjYXNlIHdlIHdpbGwNCisJCQkJZGVsYXkgaWYgZWl0aGVyIHRoZSB3YWtlIHRpbWUgaGFzIG92ZXJmbG93ZWQsIGFuZC9vciB0aGUNCisJCQkJdGljayB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgd2FrZSB0aW1lLiAqLw0KKwkJCQlpZiggKCB4VGltZVRvV2FrZSA8ICpweFByZXZpb3VzV2FrZVRpbWUgKSB8fCAoIHhUaW1lVG9XYWtlID4geFRpY2tDb3VudCApICkNCisJCQkJew0KKwkJCQkJeFNob3VsZERlbGF5ID0gcGRUUlVFOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCS8qIFVwZGF0ZSB0aGUgd2FrZSB0aW1lIHJlYWR5IGZvciB0aGUgbmV4dCBjYWxsLiAqLw0KKwkJCSpweFByZXZpb3VzV2FrZVRpbWUgPSB4VGltZVRvV2FrZTsNCisNCisJCQlpZiggeFNob3VsZERlbGF5ICE9IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJdHJhY2VUQVNLX0RFTEFZX1VOVElMKCk7DQorDQorCQkJCS8qIFdlIG11c3QgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBhZGRpbmcNCisJCQkJb3Vyc2VsdmVzIHRvIHRoZSBibG9ja2VkIGxpc3QgYXMgdGhlIHNhbWUgbGlzdCBpdGVtIGlzIHVzZWQgZm9yDQorCQkJCWJvdGggbGlzdHMuICovDQorCQkJCXZMaXN0UmVtb3ZlKCAoIHhMaXN0SXRlbSAqICkgJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisJCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KKwkJCX0NCisJCX0NCisJCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQorDQorCQkvKiBGb3JjZSBhIHJlc2NoZWR1bGUgaWYgeFRhc2tSZXN1bWVBbGwgaGFzIG5vdCBhbHJlYWR5IGRvbmUgc28sIHdlIG1heQ0KKwkJaGF2ZSBwdXQgb3Vyc2VsdmVzIHRvIHNsZWVwLiAqLw0KKwkJaWYoIHhBbHJlYWR5WWllbGRlZCA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV92VGFza0RlbGF5ID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrRGVsYXkoIHBvcnRUaWNrVHlwZSB4VGlja3NUb0RlbGF5ICkNCisJew0KKwlwb3J0VGlja1R5cGUgeFRpbWVUb1dha2U7DQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhBbHJlYWR5WWllbGRlZCA9IHBkRkFMU0U7DQorDQorCQkvKiBBIGRlbGF5IHRpbWUgb2YgemVybyBqdXN0IGZvcmNlcyBhIHJlc2NoZWR1bGUuICovDQorCQlpZiggeFRpY2tzVG9EZWxheSA+ICggcG9ydFRpY2tUeXBlICkgMFUgKQ0KKwkJew0KKwkJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJCXsNCisJCQkJdHJhY2VUQVNLX0RFTEFZKCk7DQorDQorCQkJCS8qIEEgdGFzayB0aGF0IGlzIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCB3aGlsZSB0aGUNCisJCQkJc2NoZWR1bGVyIGlzIHN1c3BlbmRlZCB3aWxsIG5vdCBnZXQgcGxhY2VkIGluIHRoZSByZWFkeQ0KKwkJCQlsaXN0IG9yIHJlbW92ZWQgZnJvbSB0aGUgYmxvY2tlZCBsaXN0IHVudGlsIHRoZSBzY2hlZHVsZXINCisJCQkJaXMgcmVzdW1lZC4NCisNCisJCQkJVGhpcyB0YXNrIGNhbm5vdCBiZSBpbiBhbiBldmVudCBsaXN0IGFzIGl0IGlzIHRoZSBjdXJyZW50bHkNCisJCQkJZXhlY3V0aW5nIHRhc2suICovDQorDQorCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSB0byB3YWtlIC0gdGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgaXMNCisJCQkJbm90IGEgcHJvYmxlbS4gKi8NCisJCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9EZWxheTsNCisNCisJCQkJLyogV2UgbXVzdCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHJlYWR5IGxpc3QgYmVmb3JlIGFkZGluZw0KKwkJCQlvdXJzZWx2ZXMgdG8gdGhlIGJsb2NrZWQgbGlzdCBhcyB0aGUgc2FtZSBsaXN0IGl0ZW0gaXMgdXNlZCBmb3INCisJCQkJYm90aCBsaXN0cy4gKi8NCisJCQkJdkxpc3RSZW1vdmUoICggeExpc3RJdGVtICogKSAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQorCQkJfQ0KKwkJCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQorCQl9DQorDQorCQkvKiBGb3JjZSBhIHJlc2NoZWR1bGUgaWYgeFRhc2tSZXN1bWVBbGwgaGFzIG5vdCBhbHJlYWR5IGRvbmUgc28sIHdlIG1heQ0KKwkJaGF2ZSBwdXQgb3Vyc2VsdmVzIHRvIHNsZWVwLiAqLw0KKwkJaWYoIHhBbHJlYWR5WWllbGRlZCA9PSBwZEZBTFNFICkNCisJCXsNCisJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCA9PSAxICkNCisNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFRhc2tQcmlvcml0eUdldCggeFRhc2tIYW5kbGUgcHhUYXNrICkNCisJew0KKwl0c2tUQ0IgKnB4VENCOw0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UmV0dXJuOw0KKw0KKwkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCQl7DQorCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHdlIGFyZSBjaGFuZ2luZyB0aGUNCisJCQlwcmlvcml0eSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4gKi8NCisJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHB4VGFzayApOw0KKwkJCXV4UmV0dXJuID0gcHhUQ0ItPnV4UHJpb3JpdHk7DQorCQl9DQorCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJcmV0dXJuIHV4UmV0dXJuOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV92VGFza1ByaW9yaXR5U2V0ID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrUHJpb3JpdHlTZXQoIHhUYXNrSGFuZGxlIHB4VGFzaywgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eE5ld1ByaW9yaXR5ICkNCisJew0KKwl0c2tUQ0IgKnB4VENCOw0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4Q3VycmVudFByaW9yaXR5Ow0KKwlwb3J0QkFTRV9UWVBFIHhZaWVsZFJlcXVpcmVkID0gcGRGQUxTRTsNCisNCisJCWNvbmZpZ0FTU0VSVCggKCB1eE5ld1ByaW9yaXR5IDwgY29uZmlnTUFYX1BSSU9SSVRJRVMgKSApOw0KKw0KKwkJLyogRW5zdXJlIHRoZSBuZXcgcHJpb3JpdHkgaXMgdmFsaWQuICovDQorCQlpZiggdXhOZXdQcmlvcml0eSA+PSBjb25maWdNQVhfUFJJT1JJVElFUyApDQorCQl7DQorCQkJdXhOZXdQcmlvcml0eSA9IGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMVU7DQorCQl9DQorDQorCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCXsNCisJCQlpZiggcHhUYXNrID09IHB4Q3VycmVudFRDQiApDQorCQkJew0KKwkJCQlweFRhc2sgPSBOVUxMOw0KKwkJCX0NCisNCisJCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gd2UgYXJlIGNoYW5naW5nIHRoZQ0KKwkJCXByaW9yaXR5IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiAqLw0KKwkJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggcHhUYXNrICk7DQorDQorCQkJdHJhY2VUQVNLX1BSSU9SSVRZX1NFVCggcHhUQ0IsIHV4TmV3UHJpb3JpdHkgKTsNCisNCisJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJCQl7DQorCQkJCXV4Q3VycmVudFByaW9yaXR5ID0gcHhUQ0ItPnV4QmFzZVByaW9yaXR5Ow0KKwkJCX0NCisJCQkjZWxzZQ0KKwkJCXsNCisJCQkJdXhDdXJyZW50UHJpb3JpdHkgPSBweFRDQi0+dXhQcmlvcml0eTsNCisJCQl9DQorCQkJI2VuZGlmDQorDQorCQkJaWYoIHV4Q3VycmVudFByaW9yaXR5ICE9IHV4TmV3UHJpb3JpdHkgKQ0KKwkJCXsNCisJCQkJLyogVGhlIHByaW9yaXR5IGNoYW5nZSBtYXkgaGF2ZSByZWFkaWVkIGEgdGFzayBvZiBoaWdoZXINCisJCQkJcHJpb3JpdHkgdGhhbiB0aGUgY2FsbGluZyB0YXNrLiAqLw0KKwkJCQlpZiggdXhOZXdQcmlvcml0eSA+IHV4Q3VycmVudFByaW9yaXR5ICkNCisJCQkJew0KKwkJCQkJaWYoIHB4VGFzayAhPSBOVUxMICkNCisJCQkJCXsNCisJCQkJCQkvKiBUaGUgcHJpb3JpdHkgb2YgYW5vdGhlciB0YXNrIGlzIGJlaW5nIHJhaXNlZC4gIElmIHdlDQorCQkJCQkJd2VyZSByYWlzaW5nIHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzaw0KKwkJCQkJCXRoZXJlIHdvdWxkIGJlIG5vIG5lZWQgdG8gc3dpdGNoIGFzIGl0IG11c3QgaGF2ZSBhbHJlYWR5DQorCQkJCQkJYmVlbiB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrLiAqLw0KKwkJCQkJCXhZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYoIHB4VGFzayA9PSBOVUxMICkNCisJCQkJew0KKwkJCQkJLyogU2V0dGluZyBvdXIgb3duIHByaW9yaXR5IGRvd24gbWVhbnMgdGhlcmUgbWF5IG5vdyBiZSBhbm90aGVyDQorCQkJCQl0YXNrIG9mIGhpZ2hlciBwcmlvcml0eSB0aGF0IGlzIHJlYWR5IHRvIGV4ZWN1dGUuICovDQorCQkJCQl4WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCisJCQkJfQ0KKw0KKw0KKw0KKwkJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisJCQkJew0KKwkJCQkJLyogT25seSBjaGFuZ2UgdGhlIHByaW9yaXR5IGJlaW5nIHVzZWQgaWYgdGhlIHRhc2sgaXMgbm90DQorCQkJCQljdXJyZW50bHkgdXNpbmcgYW4gaW5oZXJpdGVkIHByaW9yaXR5LiAqLw0KKwkJCQkJaWYoIHB4VENCLT51eEJhc2VQcmlvcml0eSA9PSBweFRDQi0+dXhQcmlvcml0eSApDQorCQkJCQl7DQorCQkJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSB1eE5ld1ByaW9yaXR5Ow0KKwkJCQkJfQ0KKw0KKwkJCQkJLyogVGhlIGJhc2UgcHJpb3JpdHkgZ2V0cyBzZXQgd2hhdGV2ZXIuICovDQorCQkJCQlweFRDQi0+dXhCYXNlUHJpb3JpdHkgPSB1eE5ld1ByaW9yaXR5Ow0KKwkJCQl9DQorCQkJCSNlbHNlDQorCQkJCXsNCisJCQkJCXB4VENCLT51eFByaW9yaXR5ID0gdXhOZXdQcmlvcml0eTsNCisJCQkJfQ0KKwkJCQkjZW5kaWYNCisNCisJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCAoIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBwb3J0VGlja1R5cGUgKSB1eE5ld1ByaW9yaXR5ICkgKTsNCisNCisJCQkJLyogSWYgdGhlIHRhc2sgaXMgaW4gdGhlIGJsb2NrZWQgb3Igc3VzcGVuZGVkIGxpc3Qgd2UgbmVlZCBkbw0KKwkJCQlub3RoaW5nIG1vcmUgdGhhbiBjaGFuZ2UgaXQncyBwcmlvcml0eSB2YXJpYWJsZS4gSG93ZXZlciwgaWYNCisJCQkJdGhlIHRhc2sgaXMgaW4gYSByZWFkeSBsaXN0IGl0IG5lZWRzIHRvIGJlIHJlbW92ZWQgYW5kIHBsYWNlZA0KKwkJCQlpbiB0aGUgcXVldWUgYXBwcm9wcmlhdGUgdG8gaXRzIG5ldyBwcmlvcml0eS4gKi8NCisJCQkJaWYoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhDdXJyZW50UHJpb3JpdHkgXSApLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgKQ0KKwkJCQl7DQorCQkJCQkvKiBUaGUgdGFzayBpcyBjdXJyZW50bHkgaW4gaXRzIHJlYWR5IGxpc3QgLSByZW1vdmUgYmVmb3JlIGFkZGluZw0KKwkJCQkJaXQgdG8gaXQncyBuZXcgcmVhZHkgbGlzdC4gIEFzIHdlIGFyZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2UNCisJCQkJCWNhbiBkbyB0aGlzIGV2ZW4gaWYgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQuICovDQorCQkJCQl2TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJCQkJcHJ2QWRkVGFza1RvUmVhZHlRdWV1ZSggcHhUQ0IgKTsNCisJCQkJfQ0KKw0KKwkJCQlpZiggeFlpZWxkUmVxdWlyZWQgPT0gcGRUUlVFICkNCisJCQkJew0KKwkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCisNCisJdm9pZCB2VGFza1N1c3BlbmQoIHhUYXNrSGFuZGxlIHB4VGFza1RvU3VzcGVuZCApDQorCXsNCisJdHNrVENCICpweFRDQjsNCisNCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCS8qIEVuc3VyZSBhIHlpZWxkIGlzIHBlcmZvcm1lZCBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGJlaW5nDQorCQkJc3VzcGVuZGVkLiAqLw0KKwkJCWlmKCBweFRhc2tUb1N1c3BlbmQgPT0gcHhDdXJyZW50VENCICkNCisJCQl7DQorCQkJCXB4VGFza1RvU3VzcGVuZCA9IE5VTEw7DQorCQkJfQ0KKw0KKwkJCS8qIElmIG51bGwgaXMgcGFzc2VkIGluIGhlcmUgdGhlbiB3ZSBhcmUgc3VzcGVuZGluZyBvdXJzZWx2ZXMuICovDQorCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCBweFRhc2tUb1N1c3BlbmQgKTsNCisNCisJCQl0cmFjZVRBU0tfU1VTUEVORCggcHhUQ0IgKTsNCisNCisJCQkvKiBSZW1vdmUgdGFzayBmcm9tIHRoZSByZWFkeS9kZWxheWVkIGxpc3QgYW5kIHBsYWNlIGluIHRoZQlzdXNwZW5kZWQgbGlzdC4gKi8NCisJCQl2TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKw0KKwkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8NCisJCQlpZiggcHhUQ0ItPnhFdmVudExpc3RJdGVtLnB2Q29udGFpbmVyICE9IE5VTEwgKQ0KKwkJCXsNCisJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQorCQkJfQ0KKw0KKwkJCXZMaXN0SW5zZXJ0RW5kKCAoIHhMaXN0ICogKSAmeFN1c3BlbmRlZFRhc2tMaXN0LCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorCQl9DQorCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJaWYoICggdm9pZCAqICkgcHhUYXNrVG9TdXNwZW5kID09IE5VTEwgKQ0KKwkJew0KKwkJCWlmKCB4U2NoZWR1bGVyUnVubmluZyAhPSBwZEZBTFNFICkNCisJCQl7DQorCQkJCS8qIFdlIGhhdmUganVzdCBzdXNwZW5kZWQgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogVGhlIHNjaGVkdWxlciBpcyBub3QgcnVubmluZywgYnV0IHRoZSB0YXNrIHRoYXQgd2FzIHBvaW50ZWQNCisJCQkJdG8gYnkgcHhDdXJyZW50VENCIGhhcyBqdXN0IGJlZW4gc3VzcGVuZGVkIGFuZCBweEN1cnJlbnRUQ0INCisJCQkJbXVzdCBiZSBhZGp1c3RlZCB0byBwb2ludCB0byBhIGRpZmZlcmVudCB0YXNrLiAqLw0KKwkJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICZ4U3VzcGVuZGVkVGFza0xpc3QgKSA9PSB1eEN1cnJlbnROdW1iZXJPZlRhc2tzICkNCisJCQkJew0KKwkJCQkJLyogTm8gb3RoZXIgdGFza3MgYXJlIHJlYWR5LCBzbyBzZXQgcHhDdXJyZW50VENCIGJhY2sgdG8NCisJCQkJCU5VTEwgc28gd2hlbiB0aGUgbmV4dCB0YXNrIGlzIGNyZWF0ZWQgcHhDdXJyZW50VENCIHdpbGwNCisJCQkJCWJlIHNldCB0byBwb2ludCB0byBpdCBubyBtYXR0ZXIgd2hhdCBpdHMgcmVsYXRpdmUgcHJpb3JpdHkNCisJCQkJCWlzLiAqLw0KKwkJCQkJcHhDdXJyZW50VENCID0gTlVMTDsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQorDQorCXNpZ25lZCBwb3J0QkFTRV9UWVBFIHhUYXNrSXNUYXNrU3VzcGVuZGVkKCB4VGFza0hhbmRsZSB4VGFzayApDQorCXsNCisJcG9ydEJBU0VfVFlQRSB4UmV0dXJuID0gcGRGQUxTRTsNCisJY29uc3QgdHNrVENCICogY29uc3QgcHhUQ0IgPSAoIHRza1RDQiAqICkgeFRhc2s7DQorDQorCQkvKiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNoZWNrIGlmIHRoZSBjYWxsaW5nIHRhc2sgaXMgc3VzcGVuZGVkLiAqLw0KKwkJY29uZmlnQVNTRVJUKCB4VGFzayApOw0KKw0KKwkJLyogSXMgdGhlIHRhc2sgd2UgYXJlIGF0dGVtcHRpbmcgdG8gcmVzdW1lIGFjdHVhbGx5IGluIHRoZQ0KKwkJc3VzcGVuZGVkIGxpc3Q/ICovDQorCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBIYXMgdGhlIHRhc2sgYWxyZWFkeSBiZWVuIHJlc3VtZWQgZnJvbSB3aXRoaW4gYW4gSVNSPyAqLw0KKwkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggJnhQZW5kaW5nUmVhZHlMaXN0LCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApICE9IHBkVFJVRSApDQorCQkJew0KKwkJCQkvKiBJcyBpdCBpbiB0aGUgc3VzcGVuZGVkIGxpc3QgYmVjYXVzZSBpdCBpcyBpbiB0aGUNCisJCQkJU3VzcGVuZGVkIHN0YXRlPyAgSXQgaXMgcG9zc2libGUgdG8gYmUgaW4gdGhlIHN1c3BlbmRlZA0KKwkJCQlsaXN0IGJlY2F1c2UgaXQgaXMgYmxvY2tlZCBvbiBhIHRhc2sgd2l0aCBubyB0aW1lb3V0DQorCQkJCXNwZWNpZmllZC4gKi8NCisJCQkJaWYoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCBOVUxMLCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IHBkVFJVRSApDQorCQkJCXsNCisJCQkJCXhSZXR1cm4gPSBwZFRSVUU7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrUmVzdW1lKCB4VGFza0hhbmRsZSBweFRhc2tUb1Jlc3VtZSApDQorCXsNCisJdHNrVENCICpweFRDQjsNCisNCisJCS8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gcmVzdW1lIHRoZSBjYWxsaW5nIHRhc2suICovDQorCQljb25maWdBU1NFUlQoIHB4VGFza1RvUmVzdW1lICk7DQorDQorCQkvKiBSZW1vdmUgdGhlIHRhc2sgZnJvbSB3aGljaGV2ZXIgbGlzdCBpdCBpcyBjdXJyZW50bHkgaW4sIGFuZCBwbGFjZQ0KKwkJaXQgaW4gdGhlIHJlYWR5IGxpc3QuICovDQorCQlweFRDQiA9ICggdHNrVENCICogKSBweFRhc2tUb1Jlc3VtZTsNCisNCisJCS8qIFRoZSBwYXJhbWV0ZXIgY2Fubm90IGJlIE5VTEwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZXN1bWUgdGhlDQorCQljdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suICovDQorCQlpZiggKCBweFRDQiAhPSBOVUxMICkgJiYgKCBweFRDQiAhPSBweEN1cnJlbnRUQ0IgKSApDQorCQl7DQorCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCQkJew0KKwkJCQlpZiggeFRhc2tJc1Rhc2tTdXNwZW5kZWQoIHB4VENCICkgPT0gcGRUUlVFICkNCisJCQkJew0KKwkJCQkJdHJhY2VUQVNLX1JFU1VNRSggcHhUQ0IgKTsNCisNCisJCQkJCS8qIEFzIHdlIGFyZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2UgY2FuIGFjY2VzcyB0aGUgcmVhZHkNCisJCQkJCWxpc3RzIGV2ZW4gaWYgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQuICovDQorCQkJCQl2TGlzdFJlbW92ZSggICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisJCQkJCXBydkFkZFRhc2tUb1JlYWR5UXVldWUoIHB4VENCICk7DQorDQorCQkJCQkvKiBXZSBtYXkgaGF2ZSBqdXN0IHJlc3VtZWQgYSBoaWdoZXIgcHJpb3JpdHkgdGFzay4gKi8NCisJCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KKwkJCQkJew0KKwkJCQkJCS8qIFRoaXMgeWllbGQgbWF5IG5vdCBjYXVzZSB0aGUgdGFzayBqdXN0IHJlc3VtZWQgdG8gcnVuLCBidXQNCisJCQkJCQl3aWxsIGxlYXZlIHRoZSBsaXN0cyBpbiB0aGUgY29ycmVjdCBzdGF0ZSBmb3IgdGhlIG5leHQgeWllbGQuICovDQorCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggKCBJTkNMVURFX3hUYXNrUmVzdW1lRnJvbUlTUiA9PSAxICkgJiYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkgKQ0KKw0KKwlwb3J0QkFTRV9UWVBFIHhUYXNrUmVzdW1lRnJvbUlTUiggeFRhc2tIYW5kbGUgcHhUYXNrVG9SZXN1bWUgKQ0KKwl7DQorCXBvcnRCQVNFX1RZUEUgeFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KKwl0c2tUQ0IgKnB4VENCOw0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQorDQorCQljb25maWdBU1NFUlQoIHB4VGFza1RvUmVzdW1lICk7DQorDQorCQlweFRDQiA9ICggdHNrVENCICogKSBweFRhc2tUb1Jlc3VtZTsNCisNCisJCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCQl7DQorCQkJaWYoIHhUYXNrSXNUYXNrU3VzcGVuZGVkKCBweFRDQiApID09IHBkVFJVRSApDQorCQkJew0KKwkJCQl0cmFjZVRBU0tfUkVTVU1FX0ZST01fSVNSKCBweFRDQiApOw0KKw0KKwkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCXhZaWVsZFJlcXVpcmVkID0gKCBweFRDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKTsNCisJCQkJCXZMaXN0UmVtb3ZlKCAgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJCQkJcHJ2QWRkVGFza1RvUmVhZHlRdWV1ZSggcHhUQ0IgKTsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCS8qIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRlbGF5ZWQgb3IgcmVhZHkgbGlzdHMsIHNvIHdpbGwgaG9sZCB0aGlzDQorCQkJCQl0YXNrIHBlbmRpbmcgdW50aWwgdGhlIHNjaGVkdWxlciBpcyByZXN1bWVkLCBhdCB3aGljaCBwb2ludCBhDQorCQkJCQl5aWVsZCB3aWxsIGJlIHBlcmZvcm1lZCBpZiBuZWNlc3NhcnkuICovDQorCQkJCQl2TGlzdEluc2VydEVuZCggKCB4TGlzdCAqICkgJiggeFBlbmRpbmdSZWFkeUxpc3QgKSwgJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KKw0KKwkJcmV0dXJuIHhZaWVsZFJlcXVpcmVkOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV92VGFza0ZpbmlzaCA9PSAxICkNCisNCisJc2lnbmVkIHBvcnRCQVNFX1RZUEUgeFRhc2tJc1Rhc2tGaW5pc2hlZCggeFRhc2tIYW5kbGUgeFRhc2sgKQ0KKwl7DQorCQlpbnQgaTsNCisJCWNvbnN0IHRza1RDQiAqIGNvbnN0IHB4VENCID0gKCB0c2tUQ0IgKiApIHhUYXNrOw0KKw0KKwkJLyogSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjaGVjayBpZiB0aGUgY2FsbGluZyB0YXNrIGlzIHN1c3BlbmRlZC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggeFRhc2sgKTsNCisNCisJCS8qIElzIHRoZSB0YXNrIHdlIGFyZSBhdHRlbXB0aW5nIHRvIHJlc3VtZSBhY3R1YWxseSBpbiB0aGUNCisJCXN1c3BlbmRlZCBsaXN0PyAqLw0KKwkJaWYgKCBweEN1cnJlbnRUQ0IgPT0gcHhUQ0IgKQ0KKwkJew0KKwkJCXJldHVybiBwZEZBTFNFOw0KKwkJfQ0KKwkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorDQorCQlpZiAoICggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkgfHwNCisJCQkgKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggJnhEZWxheWVkVGFza0xpc3QxLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApIHx8DQorCQkJICggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4RGVsYXllZFRhc2tMaXN0MiwgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApICE9IHBkRkFMU0UgKSB8fA0KKwkJCSAoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCAmeFBlbmRpbmdSZWFkeUxpc3QsICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkgKQ0KKwkJew0KKwkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorCQkJcmV0dXJuIHBkRkFMU0U7DQorCQl9DQorCQlmb3IgKCBpID0gMDsgaSA8IGNvbmZpZ01BWF9QUklPUklUSUVTOyBpKysgKQ0KKwkJew0KKwkJCWlmICggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZweFJlYWR5VGFza3NMaXN0c1sgaSBdLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJCQlyZXR1cm4gcGRGQUxTRTsNCisJCQl9DQorCQl9DQorCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwkJcmV0dXJuIHBkVFJVRTsNCisJfQ0KKw0KKyNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrRmluaXNoICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIFBVQkxJQyBTQ0hFRFVMRVIgQ09OVFJPTCBkb2N1bWVudGVkIGluIHRhc2suaA0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQordm9pZCB2VGFza1N0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwkvKiBBZGQgdGhlIGlkbGUgdGFzayBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KKwkjaWYgKCBJTkNMVURFX3hUYXNrR2V0SWRsZVRhc2tIYW5kbGUgPT0gMSApDQorCXsNCisJCS8qIENyZWF0ZSB0aGUgaWRsZSB0YXNrLCBzdG9yaW5nIGl0cyBoYW5kbGUgaW4geElkbGVUYXNrSGFuZGxlIHNvIGl0IGNhbg0KKwkJYmUgcmV0dXJuZWQgYnkgdGhlIHhUYXNrR2V0SWRsZVRhc2tIYW5kbGUoKSBmdW5jdGlvbi4gKi8NCisJCXhSZXR1cm4gPSB4VGFza0dlbmVyaWNDcmVhdGUoIHBydklkbGVUYXNrLCAoIHNpZ25lZCBjaGFyICogKSAiSURMRSIsIHRza0lETEVfU1RBQ0tfU0laRSwgKCB2b2lkICogKSBOVUxMLCAoIHRza0lETEVfUFJJT1JJVFkgfCBwb3J0UFJJVklMRUdFX0JJVCApLCAmeElkbGVUYXNrSGFuZGxlLCAodm9pZCopJnNJZGxlU3RhY2ssIE5VTEwgKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkvKiBDcmVhdGUgdGhlIGlkbGUgdGFzayB3aXRob3V0IHN0b3JpbmcgaXRzIGhhbmRsZS4gKi8NCisJCXhSZXR1cm4gPSB4VGFza0dlbmVyaWNDcmVhdGUoIHBydklkbGVUYXNrLCAoIHNpZ25lZCBjaGFyICogKSAiSURMRSIsIHRza0lETEVfU1RBQ0tfU0laRSwgKCB2b2lkICogKSBOVUxMLCAoIHRza0lETEVfUFJJT1JJVFkgfCBwb3J0UFJJVklMRUdFX0JJVCApLCBOVUxMLCAodm9pZCopJnNJZGxlU3RhY2ssIE5VTEwgKTsNCisJfQ0KKwkjZW5kaWYNCisNCisJI2lmICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkNCisJew0KKwkJaWYoIHhSZXR1cm4gPT0gcGRQQVNTICkNCisJCXsNCisJCQl4UmV0dXJuID0geFRpbWVyQ3JlYXRlVGltZXJUYXNrKCk7DQorCQl9DQorCX0NCisJI2VuZGlmDQorDQorCWlmKCB4UmV0dXJuID09IHBkUEFTUyApDQorCXsNCisJCS8qIEludGVycnVwdHMgYXJlIHR1cm5lZCBvZmYgaGVyZSwgdG8gZW5zdXJlIGEgdGljayBkb2VzIG5vdCBvY2N1cg0KKwkJYmVmb3JlIG9yIGR1cmluZyB0aGUgY2FsbCB0byB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkuICBUaGUgc3RhY2tzIG9mDQorCQl0aGUgY3JlYXRlZCB0YXNrcyBjb250YWluIGEgc3RhdHVzIHdvcmQgd2l0aCBpbnRlcnJ1cHRzIHN3aXRjaGVkIG9uDQorCQlzbyBpbnRlcnJ1cHRzIHdpbGwgYXV0b21hdGljYWxseSBnZXQgcmUtZW5hYmxlZCB3aGVuIHRoZSBmaXJzdCB0YXNrDQorCQlzdGFydHMgdG8gcnVuLg0KKw0KKwkJU1RFUFBJTkcgVEhST1VHSCBIRVJFIFVTSU5HIEEgREVCVUdHRVIgQ0FOIENBVVNFIEJJRyBQUk9CTEVNUyBJRiBUSEUNCisJCURFQlVHR0VSIEFMTE9XUyBJTlRFUlJVUFRTIFRPIEJFIFBST0NFU1NFRC4gKi8NCisJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJCXhTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKwkJeFRpY2tDb3VudCA9ICggcG9ydFRpY2tUeXBlICkgMFU7DQorDQorCQkvKiBJZiBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyBpcyBkZWZpbmVkIHRoZW4gdGhlIGZvbGxvd2luZw0KKwkJbWFjcm8gbXVzdCBiZSBkZWZpbmVkIHRvIGNvbmZpZ3VyZSB0aGUgdGltZXIvY291bnRlciB1c2VkIHRvIGdlbmVyYXRlDQorCQl0aGUgcnVuIHRpbWUgY291bnRlciB0aW1lIGJhc2UuICovDQorCQlwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUygpOw0KKwkJDQorCQkvKiBTZXR0aW5nIHVwIHRoZSB0aW1lciB0aWNrIGlzIGhhcmR3YXJlIHNwZWNpZmljIGFuZCB0aHVzIGluIHRoZQ0KKwkJcG9ydGFibGUgaW50ZXJmYWNlLiAqLw0KKwkJaWYoIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBTaG91bGQgbm90IHJlYWNoIGhlcmUgYXMgaWYgdGhlIHNjaGVkdWxlciBpcyBydW5uaW5nIHRoZQ0KKwkJCWZ1bmN0aW9uIHdpbGwgbm90IHJldHVybi4gKi8NCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvKiBTaG91bGQgb25seSByZWFjaCBoZXJlIGlmIGEgdGFzayBjYWxscyB4VGFza0VuZFNjaGVkdWxlcigpLiAqLw0KKwkJfQ0KKwl9DQorDQorCS8qIFRoaXMgbGluZSB3aWxsIG9ubHkgYmUgcmVhY2hlZCBpZiB0aGUga2VybmVsIGNvdWxkIG5vdCBiZSBzdGFydGVkLiAqLw0KKwljb25maWdBU1NFUlQoIHhSZXR1cm4gKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza0VuZFNjaGVkdWxlciggdm9pZCApDQorew0KKwkvKiBTdG9wIHRoZSBzY2hlZHVsZXIgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgcG9ydGFibGUgc2NoZWR1bGVyIGVuZA0KKwlyb3V0aW5lIHNvIHRoZSBvcmlnaW5hbCBJU1JzIGNhbiBiZSByZXN0b3JlZCBpZiBuZWNlc3NhcnkuICBUaGUgcG9ydA0KKwlsYXllciBtdXN0IGVuc3VyZSBpbnRlcnJ1cHRzIGVuYWJsZQliaXQgaXMgbGVmdCBpbiB0aGUgY29ycmVjdCBzdGF0ZS4gKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl4U2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7DQorCXZQb3J0RW5kU2NoZWR1bGVyKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza1N1c3BlbmRBbGwoIHZvaWQgKQ0KK3sNCisJLyogQSBjcml0aWNhbCBzZWN0aW9uIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgdmFyaWFibGUgaXMgb2YgdHlwZQ0KKwlwb3J0QkFTRV9UWVBFLiAqLw0KKyAgICB0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJKyt1eFNjaGVkdWxlclN1c3BlbmRlZDsNCisgICAgdGFza0VYSVRfQ1JJVElDQUwoKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzaWduZWQgcG9ydEJBU0VfVFlQRSB4VGFza1Jlc3VtZUFsbCggdm9pZCApDQorew0KK3JlZ2lzdGVyIHRza1RDQiAqcHhUQ0I7DQorc2lnbmVkIHBvcnRCQVNFX1RZUEUgeEFscmVhZHlZaWVsZGVkID0gcGRGQUxTRTsNCisNCisJLyogSWYgdXhTY2hlZHVsZXJTdXNwZW5kZWQgaXMgemVybyB0aGVuIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbWF0Y2ggYQ0KKwlwcmV2aW91cyBjYWxsIHRvIHZUYXNrU3VzcGVuZEFsbCgpLiAqLw0KKwljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICk7DQorDQorCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gSVNSIGNhdXNlZCBhIHRhc2sgdG8gYmUgcmVtb3ZlZCBmcm9tIGFuIGV2ZW50DQorCWxpc3Qgd2hpbGUgdGhlIHNjaGVkdWxlciB3YXMgc3VzcGVuZGVkLiAgSWYgdGhpcyB3YXMgdGhlIGNhc2UgdGhlbiB0aGUNCisJcmVtb3ZlZCB0YXNrIHdpbGwgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSB4UGVuZGluZ1JlYWR5TGlzdC4gIE9uY2UgdGhlDQorCXNjaGVkdWxlciBoYXMgYmVlbiByZXN1bWVkIGl0IGlzIHNhZmUgdG8gbW92ZSBhbGwgdGhlIHBlbmRpbmcgcmVhZHkNCisJdGFza3MgZnJvbSB0aGlzIGxpc3QgaW50byB0aGVpciBhcHByb3ByaWF0ZSByZWFkeSBsaXN0LiAqLw0KKwl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJew0KKwkJLS11eFNjaGVkdWxlclN1c3BlbmRlZDsNCisNCisJCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBwZEZBTFNFICkNCisJCXsNCisJCQlpZiggdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyA+ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkNCisJCQl7DQorCQkJCXBvcnRCQVNFX1RZUEUgeFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KKw0KKwkJCQkvKiBNb3ZlIGFueSByZWFkaWVkIHRhc2tzIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBpbnRvIHRoZQ0KKwkJCQlhcHByb3ByaWF0ZSByZWFkeSBsaXN0LiAqLw0KKwkJCQl3aGlsZSggbGlzdExJU1RfSVNfRU1QVFkoICggeExpc3QgKiApICZ4UGVuZGluZ1JlYWR5TGlzdCApID09IHBkRkFMU0UgKQ0KKwkJCQl7DQorCQkJCQlweFRDQiA9ICggdHNrVENCICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoICAoICggeExpc3QgKiApICZ4UGVuZGluZ1JlYWR5TGlzdCApICk7DQorCQkJCQl2TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisJCQkJCXZMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorCQkJCQlwcnZBZGRUYXNrVG9SZWFkeVF1ZXVlKCBweFRDQiApOw0KKw0KKwkJCQkJLyogSWYgd2UgaGF2ZSBtb3ZlZCBhIHRhc2sgdGhhdCBoYXMgYSBwcmlvcml0eSBoaWdoZXIgdGhhbg0KKwkJCQkJdGhlIGN1cnJlbnQgdGFzayB0aGVuIHdlIHNob3VsZCB5aWVsZC4gKi8NCisJCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KKwkJCQkJew0KKwkJCQkJCXhZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCS8qIElmIGFueSB0aWNrcyBvY2N1cnJlZCB3aGlsZSB0aGUgc2NoZWR1bGVyIHdhcyBzdXNwZW5kZWQgdGhlbg0KKwkJCQl0aGV5IHNob3VsZCBiZSBwcm9jZXNzZWQgbm93LiAgVGhpcyBlbnN1cmVzIHRoZSB0aWNrIGNvdW50IGRvZXMgbm90DQorCQkJCXNsaXAsIGFuZCB0aGF0IGFueSBkZWxheWVkIHRhc2tzIGFyZSByZXN1bWVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuICovDQorCQkJCWlmKCB1eE1pc3NlZFRpY2tzID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFUgKQ0KKwkJCQl7DQorCQkJCQl3aGlsZSggdXhNaXNzZWRUaWNrcyA+ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkNCisJCQkJCXsNCisJCQkJCQl2VGFza0luY3JlbWVudFRpY2soKTsNCisJCQkJCQktLXV4TWlzc2VkVGlja3M7DQorCQkJCQl9DQorDQorCQkJCQkvKiBBcyB3ZSBoYXZlIHByb2Nlc3NlZCBzb21lIHRpY2tzIGl0IGlzIGFwcHJvcHJpYXRlIHRvIHlpZWxkDQorCQkJCQl0byBlbnN1cmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1biBpcw0KKwkJCQkJdGhlIHRhc2sgYWN0dWFsbHkgcnVubmluZy4gKi8NCisJCQkJCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCQkJCQl7DQorCQkJCQkJeFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQorCQkJCQl9DQorCQkJCQkjZW5kaWYNCisJCQkJfQ0KKw0KKwkJCQlpZiggKCB4WWllbGRSZXF1aXJlZCA9PSBwZFRSVUUgKSB8fCAoIHhNaXNzZWRZaWVsZCA9PSBwZFRSVUUgKSApDQorCQkJCXsNCisJCQkJCXhBbHJlYWR5WWllbGRlZCA9IHBkVFJVRTsNCisJCQkJCXhNaXNzZWRZaWVsZCA9IHBkRkFMU0U7DQorCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCXJldHVybiB4QWxyZWFkeVlpZWxkZWQ7DQorfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBQVUJMSUMgVEFTSyBVVElMSVRJRVMgZG9jdW1lbnRlZCBpbiB0YXNrLmgNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KK3BvcnRUaWNrVHlwZSB4VGFza0dldFRpY2tDb3VudCggdm9pZCApDQorew0KK3BvcnRUaWNrVHlwZSB4VGlja3M7DQorDQorCS8qIENyaXRpY2FsIHNlY3Rpb24gcmVxdWlyZWQgaWYgcnVubmluZyBvbiBhIDE2IGJpdCBwcm9jZXNzb3IuICovDQorCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwl7DQorCQl4VGlja3MgPSB4VGlja0NvdW50Ow0KKwl9DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCXJldHVybiB4VGlja3M7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRUaWNrVHlwZSB4VGFza0dldFRpY2tDb3VudEZyb21JU1IoIHZvaWQgKQ0KK3sNCitwb3J0VGlja1R5cGUgeFJldHVybjsNCit1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQorDQorCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXhSZXR1cm4gPSB4VGlja0NvdW50Ow0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3Vuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcyggdm9pZCApDQorew0KKwkvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHZhcmlhYmxlcyBhcmUgb2YgdHlwZQ0KKwlwb3J0QkFTRV9UWVBFLiAqLw0KKwlyZXR1cm4gdXhDdXJyZW50TnVtYmVyT2ZUYXNrczsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV9wY1Rhc2tHZXRUYXNrTmFtZSA9PSAxICkNCisNCisJc2lnbmVkIGNoYXIgKnBjVGFza0dldFRhc2tOYW1lKCB4VGFza0hhbmRsZSB4VGFza1RvUXVlcnkgKQ0KKwl7DQorCXRza1RDQiAqcHhUQ0I7DQorDQorCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gdGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgdGFzayBpcyBiZWluZyBxdWVyaWVkLiAqLw0KKwkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvUXVlcnkgKTsNCisJCWNvbmZpZ0FTU0VSVCggcHhUQ0IgKTsNCisJCXJldHVybiAmKCBweFRDQi0+cGNUYXNrTmFtZVsgMCBdICk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQorDQorc3RhdGljIHNpZ25lZCBjaGFyICpwcnZUYXNrV3JpdGVCdWZmZXI7DQorDQorc3RhdGljIHZvaWQgcHJ2RGVmYXVsdFRhc2tMaXN0Q2FsbGJhY2sodm9sYXRpbGUgdm9pZCAqcHhQQ0IsICBzaWduZWQgY2hhciBjU3RhdHVzKTsNCisNCit2b2lkIHZUYXNrTGlzdCggc2lnbmVkIGNoYXIgKnBjV3JpdGVCdWZmZXIgKSB7DQorICAgICAgICBwcnZUYXNrV3JpdGVCdWZmZXIgPSBwY1dyaXRlQnVmZmVyOw0KKyAgICAgICAgKnBjV3JpdGVCdWZmZXIgPSAoIHNpZ25lZCBjaGFyICkgMHgwMDsNCisgICAgICAgIHN0cmNhdCggKCBjaGFyICogKSBwY1dyaXRlQnVmZmVyLCAoIGNvbnN0IGNoYXIgKiApICJcclxuIiApOw0KKyAgICAgICAgdlRhc2tMaXN0MShwcnZEZWZhdWx0VGFza0xpc3RDYWxsYmFjayk7DQorfQ0KKw0KK3ZvaWQgdlRhc2tMaXN0MSh2b2lkICgqcG1DYWxsYmFjaykodm9sYXRpbGUgdm9pZCAqcHhQQ0IsIHNpZ25lZCBjaGFyIGNTdGF0dXMpICkNCisJew0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UXVldWU7DQorDQorCQkvKiBUaGlzIGlzIGEgVkVSWSBjb3N0bHkgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWcgb25seS4NCisJCUl0IGxlYXZlcyBpbnRlcnJ1cHRzIGRpc2FibGVkIGZvciBhIExPTkcgdGltZS4gKi8NCisNCisJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJew0KKwkJCS8qIFJ1biB0aHJvdWdoIGFsbCB0aGUgbGlzdHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIGEgVENCIGFuZA0KKwkJCXJlcG9ydCB0aGUgdGFzayBuYW1lLCBzdGF0ZSBhbmQgc3RhY2sgaGlnaCB3YXRlciBtYXJrLiAqLw0KKw0KKwkJCXV4UXVldWUgPSB1eFRvcFVzZWRQcmlvcml0eSArICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDFVOw0KKw0KKwkJCWRvDQorCQkJew0KKwkJCQl1eFF1ZXVlLS07DQorDQorCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4UXVldWUgXSApICkgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCXBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggcG1DYWxsYmFjaywgKCB4TGlzdCAqICkgJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4UXVldWUgXSApLCB0c2tSRUFEWV9DSEFSICk7DQorCQkJCX0NCisJCQl9d2hpbGUoIHV4UXVldWUgPiAoIHVuc2lnbmVkIHNob3J0ICkgdHNrSURMRV9QUklPUklUWSApOw0KKw0KKwkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCXBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggcG1DYWxsYmFjaywgKCB4TGlzdCAqICkgcHhEZWxheWVkVGFza0xpc3QsIHRza0JMT0NLRURfQ0hBUiApOw0KKwkJCX0NCisNCisJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoIHB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgKSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCXBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggcG1DYWxsYmFjaywgKCB4TGlzdCAqICkgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdCwgdHNrQkxPQ0tFRF9DSEFSICk7DQorCQkJfQ0KKw0KKwkJCSNpZiggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCisJCQl7DQorCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApID09IHBkRkFMU0UgKQ0KKwkJCQl7DQorCQkJCQlwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoIHBtQ2FsbGJhY2ssICZ4VGFza3NXYWl0aW5nVGVybWluYXRpb24sIHRza0RFTEVURURfQ0hBUiApOw0KKwkJCQl9DQorCQkJfQ0KKwkJCSNlbmRpZg0KKw0KKwkJCSNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KKwkJCXsNCisJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmeFN1c3BlbmRlZFRhc2tMaXN0ICkgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCXBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggcG1DYWxsYmFjaywgJnhTdXNwZW5kZWRUYXNrTGlzdCwgdHNrU1VTUEVOREVEX0NIQVIgKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkjZW5kaWYNCisJCX0NCisJCXhUYXNrUmVzdW1lQWxsKCk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrR2V0UnVuVGltZVN0YXRzKCBzaWduZWQgY2hhciAqcGNXcml0ZUJ1ZmZlciApDQorCXsNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFF1ZXVlOw0KKwl1bnNpZ25lZCBsb25nIHVsVG90YWxSdW5UaW1lOw0KKyAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRUaW1lOw0KKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzTGFzdFRpbWUgPSAwOw0KKw0KKwkJLyogVGhpcyBpcyBhIFZFUlkgY29zdGx5IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnIG9ubHkuDQorCQlJdCBsZWF2ZXMgaW50ZXJydXB0cyBkaXNhYmxlZCBmb3IgYSBMT05HIHRpbWUuICovDQorDQorCQl2VGFza1N1c3BlbmRBbGwoKTsNCisJCXsNCisjaWZkZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KKyAgICAgICAgICAgIHBvcnRBTFRfR0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoIGN1cnJlbnRUaW1lICk7DQorI2Vsc2UNCisgICAgICAgICAgICBjdXJyZW50VGltZSA9IHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSgpOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgICAgIHVsVG90YWxSdW5UaW1lID0gKGN1cnJlbnRUaW1lIC0gc0xhc3RUaW1lKTsNCisNCisJCQkvKiBEaXZpZGUgdWxUb3RhbFJ1blRpbWUgYnkgMTAwIHRvIG1ha2UgdGhlIHBlcmNlbnRhZ2UgY2FsdWNsYXRpb25zDQorCQkJc2ltcGxlciBpbiB0aGUgcHJ2R2VuZXJhdGVSdW5UaW1lU3RhdHNGb3JUYXNrc0luTGlzdCgpIGZ1bmN0aW9uLiAqLyAgICAgICAgICAgIA0KKwkJCXVsVG90YWxSdW5UaW1lIC89IDEwMFVMOw0KKw0KKyAgICAgICAgICAgIHNMYXN0VGltZSA9IGN1cnJlbnRUaW1lOw0KKwkJCQ0KKwkJCS8qIFJ1biB0aHJvdWdoIGFsbCB0aGUgbGlzdHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIGEgVENCLA0KKwkJCWdlbmVyYXRpbmcgYSB0YWJsZSBvZiBydW4gdGltZXIgcGVyY2VudGFnZXMgaW4gdGhlIHByb3ZpZGVkDQorCQkJYnVmZmVyLiAqLw0KKw0KKwkJCSpwY1dyaXRlQnVmZmVyID0gKCBzaWduZWQgY2hhciApIDB4MDA7DQorCQkJc3RyY2F0KCAoIGNoYXIgKiApIHBjV3JpdGVCdWZmZXIsICggY29uc3QgY2hhciAqICkgIlxyXG4iICk7DQorDQorCQkJdXhRdWV1ZSA9IHV4VG9wVXNlZFByaW9yaXR5ICsgKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMVU7DQorDQorCQkJZG8NCisJCQl7DQorCQkJCXV4UXVldWUtLTsNCisNCisJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhRdWV1ZSBdICkgKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJcHJ2R2VuZXJhdGVSdW5UaW1lU3RhdHNGb3JUYXNrc0luTGlzdCggcGNXcml0ZUJ1ZmZlciwgKCB4TGlzdCAqICkgJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4UXVldWUgXSApLCB1bFRvdGFsUnVuVGltZSApOw0KKwkJCQl9DQorCQkJfXdoaWxlKCB1eFF1ZXVlID4gKCB1bnNpZ25lZCBzaG9ydCApIHRza0lETEVfUFJJT1JJVFkgKTsNCisNCisJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoIHB4RGVsYXllZFRhc2tMaXN0ICkgPT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQlwcnZHZW5lcmF0ZVJ1blRpbWVTdGF0c0ZvclRhc2tzSW5MaXN0KCBwY1dyaXRlQnVmZmVyLCAoIHhMaXN0ICogKSBweERlbGF5ZWRUYXNrTGlzdCwgdWxUb3RhbFJ1blRpbWUgKTsNCisJCQl9DQorDQorCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0ICkgPT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQlwcnZHZW5lcmF0ZVJ1blRpbWVTdGF0c0ZvclRhc2tzSW5MaXN0KCBwY1dyaXRlQnVmZmVyLCAoIHhMaXN0ICogKSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0LCB1bFRvdGFsUnVuVGltZSApOw0KKwkJCX0NCisNCisJCQkjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KKwkJCXsNCisJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uICkgPT0gcGRGQUxTRSApDQorCQkJCXsNCisJCQkJCXBydkdlbmVyYXRlUnVuVGltZVN0YXRzRm9yVGFza3NJbkxpc3QoIHBjV3JpdGVCdWZmZXIsICZ4VGFza3NXYWl0aW5nVGVybWluYXRpb24sIHVsVG90YWxSdW5UaW1lICk7DQorCQkJCX0NCisJCQl9DQorCQkJI2VuZGlmDQorDQorCQkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQorCQkJew0KKwkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICZ4U3VzcGVuZGVkVGFza0xpc3QgKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJcHJ2R2VuZXJhdGVSdW5UaW1lU3RhdHNGb3JUYXNrc0luTGlzdCggcGNXcml0ZUJ1ZmZlciwgJnhTdXNwZW5kZWRUYXNrTGlzdCwgdWxUb3RhbFJ1blRpbWUgKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkjZW5kaWYNCisJCX0NCisJCXhUYXNrUmVzdW1lQWxsKCk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSA9PSAxICkNCisNCisJeFRhc2tIYW5kbGUgeFRhc2tHZXRJZGxlVGFza0hhbmRsZSggdm9pZCApDQorCXsNCisJCS8qIElmIHhUYXNrR2V0SWRsZVRhc2tIYW5kbGUoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4NCisJCXN0YXJ0ZWQsIHRoZW4geElkbGVUYXNrSGFuZGxlIHdpbGwgYmUgTlVMTC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCB4SWRsZVRhc2tIYW5kbGUgIT0gTlVMTCApICk7DQorCQlyZXR1cm4geElkbGVUYXNrSGFuZGxlOw0KKwl9DQorCQ0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBTQ0hFRFVMRVIgSU5URVJOQUxTIEFWQUlMQUJMRSBGT1IgUE9SVElORyBQVVJQT1NFUw0KKyAqIGRvY3VtZW50ZWQgaW4gdGFzay5oDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHZUYXNrSW5jcmVtZW50VGljayggdm9pZCApDQorew0KK3Rza1RDQiAqIHB4VENCOw0KKw0KKwkvKiBDYWxsZWQgYnkgdGhlIHBvcnRhYmxlIGxheWVyIGVhY2ggdGltZSBhIHRpY2sgaW50ZXJydXB0IG9jY3Vycy4NCisJSW5jcmVtZW50cyB0aGUgdGljayB0aGVuIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5ldyB0aWNrIHZhbHVlIHdpbGwgY2F1c2UgYW55DQorCXRhc2tzIHRvIGJlIHVuYmxvY2tlZC4gKi8NCisJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkRkFMU0UgKQ0KKwl7DQorCQkrK3hUaWNrQ291bnQ7DQorCQlpZiggeFRpY2tDb3VudCA9PSAoIHBvcnRUaWNrVHlwZSApIDBVICkNCisJCXsNCisJCQl4TGlzdCAqcHhUZW1wOw0KKw0KKwkJCS8qIFRpY2sgY291bnQgaGFzIG92ZXJmbG93ZWQgc28gd2UgbmVlZCB0byBzd2FwIHRoZSBkZWxheSBsaXN0cy4NCisJCQlJZiB0aGVyZSBhcmUgYW55IGl0ZW1zIGluIHB4RGVsYXllZFRhc2tMaXN0IGhlcmUgdGhlbiB0aGVyZSBpcw0KKwkJCWFuIGVycm9yISAqLw0KKwkJCWNvbmZpZ0FTU0VSVCggKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSApICk7DQorCQkJDQorCQkJcHhUZW1wID0gcHhEZWxheWVkVGFza0xpc3Q7DQorCQkJcHhEZWxheWVkVGFza0xpc3QgPSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0Ow0KKwkJCXB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgPSBweFRlbXA7DQorCQkJeE51bU9mT3ZlcmZsb3dzKys7DQorCQ0KKwkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSAhPSBwZEZBTFNFICkNCisJCQl7DQorCQkJCS8qIFRoZSBuZXcgY3VycmVudCBkZWxheWVkIGxpc3QgaXMgZW1wdHkuICBTZXQNCisJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgdG8gdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgc28gaXQgaXMNCisJCQkJZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQgdGhlCQ0KKwkJCQlpZiggeFRpY2tDb3VudCA+PSB4TmV4dFRhc2tVbmJsb2NrVGltZSApIHRlc3Qgd2lsbCBwYXNzIHVudGlsDQorCQkJCXRoZXJlIGlzIGFuIGl0ZW0gaW4gdGhlIGRlbGF5ZWQgbGlzdC4gKi8NCisJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBwb3J0TUFYX0RFTEFZOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQkvKiBUaGUgbmV3IGN1cnJlbnQgZGVsYXllZCBsaXN0IGlzIG5vdCBlbXB0eSwgZ2V0IHRoZSB2YWx1ZSBvZg0KKwkJCQl0aGUgaXRlbSBhdCB0aGUgaGVhZCBvZiB0aGUgZGVsYXllZCBsaXN0LiAgVGhpcyBpcyB0aGUgdGltZSBhdA0KKwkJCQl3aGljaCB0aGUgdGFzayBhdCB0aGUgaGVhZCBvZiB0aGUgZGVsYXllZCBsaXN0IHNob3VsZCBiZSByZW1vdmVkDQorCQkJCWZyb20gdGhlIEJsb2NrZWQgc3RhdGUuICovDQorCQkJCXB4VENCID0gKCB0c2tUQ0IgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhEZWxheWVkVGFza0xpc3QgKTsNCisJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJCX0NCisJCX0NCisNCisJCS8qIFNlZSBpZiB0aGlzIHRpY2sgaGFzIG1hZGUgYSB0aW1lb3V0IGV4cGlyZS4gKi8NCisJCXBydkNoZWNrRGVsYXllZFRhc2tzKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkrK3V4TWlzc2VkVGlja3M7DQorDQorCQkvKiBUaGUgdGljayBob29rIGdldHMgY2FsbGVkIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLCBldmVuIGlmIHRoZQ0KKwkJc2NoZWR1bGVyIGlzIGxvY2tlZC4gKi8NCisJCSNpZiAoIGNvbmZpZ1VTRV9USUNLX0hPT0sgPT0gMSApDQorCQl7DQorCQkJdkFwcGxpY2F0aW9uVGlja0hvb2soKTsNCisJCX0NCisJCSNlbmRpZg0KKwl9DQorDQorCSNpZiAoIGNvbmZpZ1VTRV9USUNLX0hPT0sgPT0gMSApDQorCXsNCisJCS8qIEd1YXJkIGFnYWluc3QgdGhlIHRpY2sgaG9vayBiZWluZyBjYWxsZWQgd2hlbiB0aGUgbWlzc2VkIHRpY2sNCisJCWNvdW50IGlzIGJlaW5nIHVud291bmQgKHdoZW4gdGhlIHNjaGVkdWxlciBpcyBiZWluZyB1bmxvY2tlZC4gKi8NCisJCWlmKCB1eE1pc3NlZFRpY2tzID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDBVICkNCisJCXsNCisJCQl2QXBwbGljYXRpb25UaWNrSG9vaygpOw0KKwkJfQ0KKwl9DQorCSNlbmRpZg0KKw0KKwl0cmFjZVRBU0tfSU5DUkVNRU5UX1RJQ0soIHhUaWNrQ291bnQgKTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza1N0ZXBUaWNrKCBjb25zdCBwb3J0VGlja1R5cGUgeFRpY2tzVG9KdW1wICkNCit7DQorICAgIC8qIENvcnJlY3QgdGhlIHRpY2sgY291bnQgdmFsdWUgYWZ0ZXIgYSBwZXJpb2QgZHVyaW5nIHdoaWNoIHRoZSB0aWNrDQorICAgIHdhcyBzdXBwcmVzc2VkLiAgTm90ZSB0aGlzIGRvZXMgKm5vdCogY2FsbCB0aGUgdGljayBob29rIGZ1bmN0aW9uIGZvcg0KKyAgICBlYWNoIHN0ZXBwZWQgdGljay4gKi8NCisgICAgY29uZmlnQVNTRVJUKCAoIHhUaWNrQ291bnQgKyB4VGlja3NUb0p1bXAgKSA8PSB4TmV4dFRhc2tVbmJsb2NrVGltZSApOw0KKyAgICB4VGlja0NvdW50ICs9IHhUaWNrc1RvSnVtcDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrU2V0QXBwbGljYXRpb25UYXNrVGFnKCB4VGFza0hhbmRsZSB4VGFzaywgcGRUQVNLX0hPT0tfQ09ERSBweEhvb2tGdW5jdGlvbiApDQorCXsNCisJdHNrVENCICp4VENCOw0KKw0KKwkJLyogSWYgeFRhc2sgaXMgTlVMTCB0aGVuIHdlIGFyZSBzZXR0aW5nIG91ciBvd24gdGFzayBob29rLiAqLw0KKwkJaWYoIHhUYXNrID09IE5VTEwgKQ0KKwkJew0KKwkJCXhUQ0IgPSAoIHRza1RDQiAqICkgcHhDdXJyZW50VENCOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhUQ0IgPSAoIHRza1RDQiAqICkgeFRhc2s7DQorCQl9DQorDQorCQkvKiBTYXZlIHRoZSBob29rIGZ1bmN0aW9uIGluIHRoZSBUQ0IuICBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgcmVxdWlyZWQgYXMNCisJCXRoZSB2YWx1ZSBjYW4gYmUgYWNjZXNzZWQgZnJvbSBhbiBpbnRlcnJ1cHQuICovDQorCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCisJCQl4VENCLT5weFRhc2tUYWcgPSBweEhvb2tGdW5jdGlvbjsNCisJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQorDQorCXBkVEFTS19IT09LX0NPREUgeFRhc2tHZXRBcHBsaWNhdGlvblRhc2tUYWcoIHhUYXNrSGFuZGxlIHhUYXNrICkNCisJew0KKwl0c2tUQ0IgKnhUQ0I7DQorCXBkVEFTS19IT09LX0NPREUgeFJldHVybjsNCisNCisJCS8qIElmIHhUYXNrIGlzIE5VTEwgdGhlbiB3ZSBhcmUgc2V0dGluZyBvdXIgb3duIHRhc2sgaG9vay4gKi8NCisJCWlmKCB4VGFzayA9PSBOVUxMICkNCisJCXsNCisJCQl4VENCID0gKCB0c2tUQ0IgKiApIHB4Q3VycmVudFRDQjsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl4VENCID0gKCB0c2tUQ0IgKiApIHhUYXNrOw0KKwkJfQ0KKw0KKwkJLyogU2F2ZSB0aGUgaG9vayBmdW5jdGlvbiBpbiB0aGUgVENCLiAgQSBjcml0aWNhbCBzZWN0aW9uIGlzIHJlcXVpcmVkIGFzDQorCQl0aGUgdmFsdWUgY2FuIGJlIGFjY2Vzc2VkIGZyb20gYW4gaW50ZXJydXB0LiAqLw0KKwkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCQkJeFJldHVybiA9IHhUQ0ItPnB4VGFza1RhZzsNCisJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorDQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCisNCisJcG9ydEJBU0VfVFlQRSB4VGFza0NhbGxBcHBsaWNhdGlvblRhc2tIb29rKCB4VGFza0hhbmRsZSB4VGFzaywgdm9pZCAqcHZQYXJhbWV0ZXIgKQ0KKwl7DQorCXRza1RDQiAqeFRDQjsNCisJcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwkJLyogSWYgeFRhc2sgaXMgTlVMTCB0aGVuIHdlIGFyZSBjYWxsaW5nIG91ciBvd24gdGFzayBob29rLiAqLw0KKwkJaWYoIHhUYXNrID09IE5VTEwgKQ0KKwkJew0KKwkJCXhUQ0IgPSAoIHRza1RDQiAqICkgcHhDdXJyZW50VENCOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhUQ0IgPSAoIHRza1RDQiAqICkgeFRhc2s7DQorCQl9DQorDQorCQlpZiggeFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKQ0KKwkJew0KKwkJCXhSZXR1cm4gPSB4VENCLT5weFRhc2tUYWcoIHB2UGFyYW1ldGVyICk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJeFJldHVybiA9IHBkRkFJTDsNCisJCX0NCisNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKQ0KK3sNCisJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICE9ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkRkFMU0UgKQ0KKwl7DQorCQkvKiBUaGUgc2NoZWR1bGVyIGlzIGN1cnJlbnRseSBzdXNwZW5kZWQgLSBkbyBub3QgYWxsb3cgYSBjb250ZXh0DQorCQlzd2l0Y2guICovDQorCQl4TWlzc2VkWWllbGQgPSBwZFRSVUU7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl0cmFjZVRBU0tfU1dJVENIRURfT1VUKCk7DQorCQ0KKwkJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQorCQl7DQorCQkJdW5zaWduZWQgbG9uZyB1bFRlbXBDb3VudGVyOw0KKwkJCQ0KKwkJCQkjaWZkZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KKwkJCQkJcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSggdWxUZW1wQ291bnRlciApOw0KKwkJCQkjZWxzZQ0KKwkJCQkJdWxUZW1wQ291bnRlciA9IHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSgpOw0KKwkJCQkjZW5kaWYNCisJDQorCQkJCS8qIEFkZCB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIHRhc2sgaGFzIGJlZW4gcnVubmluZyB0byB0aGUgYWNjdW11bGF0ZWQNCisJCQkJdGltZSBzbyBmYXIuICBUaGUgdGltZSB0aGUgdGFzayBzdGFydGVkIHJ1bm5pbmcgd2FzIHN0b3JlZCBpbg0KKwkJCQl1bFRhc2tTd2l0Y2hlZEluVGltZS4gIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBvdmVyZmxvdyBwcm90ZWN0aW9uIGhlcmUNCisJCQkJc28gY291bnQgdmFsdWVzIGFyZSBvbmx5IHZhbGlkIHVudGlsIHRoZSB0aW1lciBvdmVyZmxvd3MuICBHZW5lcmFsbHkNCisJCQkJdGhpcyB3aWxsIGJlIGFib3V0IDEgaG91ciBhc3N1bWluZyBhIDF1UyB0aW1lciBpbmNyZW1lbnQuICovDQorCQkJCXB4Q3VycmVudFRDQi0+dWxSdW5UaW1lQ291bnRlciArPSAoIHVsVGVtcENvdW50ZXIgLSB1bFRhc2tTd2l0Y2hlZEluVGltZSApOw0KKwkJCQl1bFRhc2tTd2l0Y2hlZEluVGltZSA9IHVsVGVtcENvdW50ZXI7DQorCQl9DQorCQkjZW5kaWYNCisJDQorCQl0YXNrRklSU1RfQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XKCk7DQorCQl0YXNrU0VDT05EX0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVygpOw0KKwkNCisJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgdGhhdCBjb250YWlucyByZWFkeSB0YXNrcy4gKi8NCisJCXdoaWxlKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4VG9wUmVhZHlQcmlvcml0eSBdICkgKSApDQorCQl7DQorCQkJY29uZmlnQVNTRVJUKCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCisJCQktLXV4VG9wUmVhZHlQcmlvcml0eTsNCisJCX0NCisJDQorCQkvKiBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkgd2Fsa3MgdGhyb3VnaCB0aGUgbGlzdCwgc28gdGhlIHRhc2tzIG9mIHRoZQ0KKwkJc2FtZSBwcmlvcml0eSBnZXQgYW4gZXF1YWwgc2hhcmUgb2YgdGhlIHByb2Nlc3NvciB0aW1lLiAqLw0KKwkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweEN1cnJlbnRUQ0IsICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFRvcFJlYWR5UHJpb3JpdHkgXSApICk7DQorCQ0KKwkJdHJhY2VUQVNLX1NXSVRDSEVEX0lOKCk7DQorCX0NCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza1BsYWNlT25FdmVudExpc3QoIGNvbnN0IHhMaXN0ICogY29uc3QgcHhFdmVudExpc3QsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKQ0KK3sNCitwb3J0VGlja1R5cGUgeFRpbWVUb1dha2U7DQorDQorCWNvbmZpZ0FTU0VSVCggcHhFdmVudExpc3QgKTsNCisNCisJLyogVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIElOVEVSUlVQVFMgRElTQUJMRUQgT1IgVEhFDQorCVNDSEVEVUxFUiBTVVNQRU5ERUQuICovDQorDQorCS8qIFBsYWNlIHRoZSBldmVudCBsaXN0IGl0ZW0gb2YgdGhlIFRDQiBpbiB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgbGlzdC4NCisJVGhpcyBpcyBwbGFjZWQgaW4gdGhlIGxpc3QgaW4gcHJpb3JpdHkgb3JkZXIgc28gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KKwlpcyB0aGUgZmlyc3QgdG8gYmUgd29rZW4gYnkgdGhlIGV2ZW50LiAqLw0KKwl2TGlzdEluc2VydCggKCB4TGlzdCAqICkgcHhFdmVudExpc3QsICggeExpc3RJdGVtICogKSAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisNCisJLyogV2UgbXVzdCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHJlYWR5IGxpc3QgYmVmb3JlIGFkZGluZyBvdXJzZWx2ZXMNCisJdG8gdGhlIGJsb2NrZWQgbGlzdCBhcyB0aGUgc2FtZSBsaXN0IGl0ZW0gaXMgdXNlZCBmb3IgYm90aCBsaXN0cy4gIFdlIGhhdmUNCisJZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcmVhZHkgbGlzdHMgYXMgdGhlIHNjaGVkdWxlciBpcyBsb2NrZWQuICovDQorCXZMaXN0UmVtb3ZlKCAoIHhMaXN0SXRlbSAqICkgJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisNCisNCisJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQorCXsNCisJCWlmKCB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQorCQl7DQorCQkJLyogQWRkIG91cnNlbHZlcyB0byB0aGUgc3VzcGVuZGVkIHRhc2sgbGlzdCBpbnN0ZWFkIG9mIGEgZGVsYXllZCB0YXNrDQorCQkJbGlzdCB0byBlbnN1cmUgd2UgYXJlIG5vdCB3b2tlbiBieSBhIHRpbWluZyBldmVudC4gIFdlIHdpbGwgYmxvY2sNCisJCQlpbmRlZmluaXRlbHkuICovDQorCQkJdkxpc3RJbnNlcnRFbmQoICggeExpc3QgKiApICZ4U3VzcGVuZGVkVGFza0xpc3QsICggeExpc3RJdGVtICogKSAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50IGRvZXMNCisJCQlub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlci4gKi8NCisJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQorCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KKwkJfQ0KKwl9DQorCSNlbHNlDQorCXsNCisJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZSBldmVudCBkb2VzDQorCQkJbm90IG9jY3VyLiAgVGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgZG9lc24ndCBtYXR0ZXIuICovDQorCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KKwkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCisJfQ0KKwkjZW5kaWYNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGNvbmZpZ1VTRV9USU1FUlMgPT0gMQ0KKw0KKwl2b2lkIHZUYXNrUGxhY2VPbkV2ZW50TGlzdFJlc3RyaWN0ZWQoIGNvbnN0IHhMaXN0ICogY29uc3QgcHhFdmVudExpc3QsIHBvcnRUaWNrVHlwZSB4VGlja3NUb1dhaXQgKQ0KKwl7DQorCXBvcnRUaWNrVHlwZSB4VGltZVRvV2FrZTsNCisNCisJCWNvbmZpZ0FTU0VSVCggcHhFdmVudExpc3QgKTsNCisNCisJCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgYXBwbGljYXRpb24gY29kZSBoZW5jZSB0aGUNCisJCSdSZXN0cmljdGVkJyBpbiBpdHMgbmFtZS4gIEl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiAgSXQgaXMNCisJCWRlc2lnbmVkIGZvciB1c2UgYnkga2VybmVsIGNvZGUsIGFuZCBoYXMgc3BlY2lhbCBjYWxsaW5nIHJlcXVpcmVtZW50cyAtDQorCQlpdCBzaG91bGQgYmUgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKw0KKwkNCisJCS8qIFBsYWNlIHRoZSBldmVudCBsaXN0IGl0ZW0gb2YgdGhlIFRDQiBpbiB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgbGlzdC4NCisJCUluIHRoaXMgY2FzZSBpdCBpcyBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHRhc2sgdGhhdCBpcyBnb2luZyB0bw0KKwkJYmUgd2FpdGluZyBvbiB0aGlzIGV2ZW50IGxpc3QsIHNvIHRoZSBmYXN0ZXIgdkxpc3RJbnNlcnRFbmQoKSBmdW5jdGlvbg0KKwkJY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2Ygdkxpc3RJbnNlcnQuICovDQorCQl2TGlzdEluc2VydEVuZCggKCB4TGlzdCAqICkgcHhFdmVudExpc3QsICggeExpc3RJdGVtICogKSAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisNCisJCS8qIFdlIG11c3QgcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlDQorCQlibG9ja2VkIGxpc3QgYXMgdGhlIHNhbWUgbGlzdCBpdGVtIGlzIHVzZWQgZm9yIGJvdGggbGlzdHMuICBUaGlzDQorCQlmdW5jdGlvbiBpcyBjYWxsZWQgZm9ybSBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl2TGlzdFJlbW92ZSggKCB4TGlzdEl0ZW0gKiApICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorDQorCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZSBldmVudCBkb2VzDQorCQlub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlci4gKi8NCisJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCisJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCisJfQ0KKwkNCisjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3NpZ25lZCBwb3J0QkFTRV9UWVBFIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggY29uc3QgeExpc3QgKiBjb25zdCBweEV2ZW50TGlzdCApDQorew0KK3Rza1RDQiAqcHhVbmJsb2NrZWRUQ0I7DQorcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwkvKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRCBPUiBUSEUNCisJU0NIRURVTEVSIFNVU1BFTkRFRC4gIEl0IGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBJU1IuICovDQorDQorCS8qIFRoZSBldmVudCBsaXN0IGlzIHNvcnRlZCBpbiBwcmlvcml0eSBvcmRlciwgc28gd2UgY2FuIHJlbW92ZSB0aGUNCisJZmlyc3QgaW4gdGhlIGxpc3QsIHJlbW92ZSB0aGUgVENCIGZyb20gdGhlIGRlbGF5ZWQgbGlzdCwgYW5kIGFkZA0KKwlpdCB0byB0aGUgcmVhZHkgbGlzdC4NCisNCisJSWYgYW4gZXZlbnQgaXMgZm9yIGEgcXVldWUgdGhhdCBpcyBsb2NrZWQgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXINCisJZ2V0IGNhbGxlZCAtIHRoZSBsb2NrIGNvdW50IG9uIHRoZSBxdWV1ZSB3aWxsIGdldCBtb2RpZmllZCBpbnN0ZWFkLiAgVGhpcw0KKwltZWFucyB3ZSBjYW4gYWx3YXlzIGV4cGVjdCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBldmVudCBsaXN0IGhlcmUuDQorCQ0KKwlUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gbWFkZSB0byBlbnN1cmUgdGhhdA0KKwlweEV2ZW50TGlzdCBpcyBub3QgZW1wdHkuICovDQorCXB4VW5ibG9ja2VkVENCID0gKCB0c2tUQ0IgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhFdmVudExpc3QgKTsNCisJY29uZmlnQVNTRVJUKCBweFVuYmxvY2tlZFRDQiApOw0KKwl2TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisNCisJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkRkFMU0UgKQ0KKwl7DQorCQl2TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJcHJ2QWRkVGFza1RvUmVhZHlRdWV1ZSggcHhVbmJsb2NrZWRUQ0IgKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCS8qIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRlbGF5ZWQgb3IgcmVhZHkgbGlzdHMsIHNvIHdpbGwgaG9sZCB0aGlzDQorCQl0YXNrIHBlbmRpbmcgdW50aWwgdGhlIHNjaGVkdWxlciBpcyByZXN1bWVkLiAqLw0KKwkJdkxpc3RJbnNlcnRFbmQoICggeExpc3QgKiApICYoIHhQZW5kaW5nUmVhZHlMaXN0ICksICYoIHB4VW5ibG9ja2VkVENCLT54RXZlbnRMaXN0SXRlbSApICk7DQorCX0NCisNCisJaWYoIHB4VW5ibG9ja2VkVENCLT51eFByaW9yaXR5ID49IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQorCXsNCisJCS8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXNrIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCBoYXMNCisJCWEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGNhbGxpbmcgdGFzay4gIFRoaXMgYWxsb3dzDQorCQl0aGUgY2FsbGluZyB0YXNrIHRvIGtub3cgaWYgaXQgc2hvdWxkIGZvcmNlIGEgY29udGV4dA0KKwkJc3dpdGNoIG5vdy4gKi8NCisJCXhSZXR1cm4gPSBwZFRSVUU7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl4UmV0dXJuID0gcGRGQUxTRTsNCisJfQ0KKw0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB2VGFza1NldFRpbWVPdXRTdGF0ZSggeFRpbWVPdXRUeXBlICogY29uc3QgcHhUaW1lT3V0ICkNCit7DQorCWNvbmZpZ0FTU0VSVCggcHhUaW1lT3V0ICk7DQorCXB4VGltZU91dC0+eE92ZXJmbG93Q291bnQgPSB4TnVtT2ZPdmVyZmxvd3M7DQorCXB4VGltZU91dC0+eFRpbWVPbkVudGVyaW5nID0geFRpY2tDb3VudDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorcG9ydEJBU0VfVFlQRSB4VGFza0NoZWNrRm9yVGltZU91dCggeFRpbWVPdXRUeXBlICogY29uc3QgcHhUaW1lT3V0LCBwb3J0VGlja1R5cGUgKiBjb25zdCBweFRpY2tzVG9XYWl0ICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UmV0dXJuOw0KKw0KKwljb25maWdBU1NFUlQoIHB4VGltZU91dCApOw0KKwljb25maWdBU1NFUlQoIHB4VGlja3NUb1dhaXQgKTsNCisNCisJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCXsNCisJCSNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KKwkJCS8qIElmIElOQ0xVREVfdlRhc2tTdXNwZW5kIGlzIHNldCB0byAxIGFuZCB0aGUgYmxvY2sgdGltZSBzcGVjaWZpZWQgaXMNCisJCQl0aGUgbWF4aW11bSBibG9jayB0aW1lIHRoZW4gdGhlIHRhc2sgc2hvdWxkIGJsb2NrIGluZGVmaW5pdGVseSwgYW5kDQorCQkJdGhlcmVmb3JlIG5ldmVyIHRpbWUgb3V0LiAqLw0KKwkJCWlmKCAqcHhUaWNrc1RvV2FpdCA9PSBwb3J0TUFYX0RFTEFZICkNCisJCQl7DQorCQkJCXhSZXR1cm4gPSBwZEZBTFNFOw0KKwkJCX0NCisJCQllbHNlIC8qIFdlIGFyZSBub3QgYmxvY2tpbmcgaW5kZWZpbml0ZWx5LCBwZXJmb3JtIHRoZSBjaGVja3MgYmVsb3cuICovDQorCQkjZW5kaWYNCisNCisJCWlmKCAoIHhOdW1PZk92ZXJmbG93cyAhPSBweFRpbWVPdXQtPnhPdmVyZmxvd0NvdW50ICkgJiYgKCAoIHBvcnRUaWNrVHlwZSApIHhUaWNrQ291bnQgPj0gKCBwb3J0VGlja1R5cGUgKSBweFRpbWVPdXQtPnhUaW1lT25FbnRlcmluZyApICkNCisJCXsNCisJCQkvKiBUaGUgdGljayBjb3VudCBpcyBncmVhdGVyIHRoYW4gdGhlIHRpbWUgYXQgd2hpY2ggdlRhc2tTZXRUaW1lb3V0KCkNCisJCQl3YXMgY2FsbGVkLCBidXQgaGFzIGFsc28gb3ZlcmZsb3dlZCBzaW5jZSB2VGFza1NldFRpbWVPdXQoKSB3YXMgY2FsbGVkLg0KKwkJCUl0IG11c3QgaGF2ZSB3cmFwcGVkIGFsbCB0aGUgd2F5IGFyb3VuZCBhbmQgZ29uZSBwYXN0IHVzIGFnYWluLiBUaGlzDQorCQkJcGFzc2VkIHNpbmNlIHZUYXNrU2V0VGltZW91dCgpIHdhcyBjYWxsZWQuICovDQorCQkJeFJldHVybiA9IHBkVFJVRTsNCisJCX0NCisJCWVsc2UgaWYoICggKCBwb3J0VGlja1R5cGUgKSAoICggcG9ydFRpY2tUeXBlICkgeFRpY2tDb3VudCAtICggcG9ydFRpY2tUeXBlICkgcHhUaW1lT3V0LT54VGltZU9uRW50ZXJpbmcgKSApIDwgKCBwb3J0VGlja1R5cGUgKSAqcHhUaWNrc1RvV2FpdCApDQorCQl7DQorCQkJLyogTm90IGEgZ2VudWluZSB0aW1lb3V0LiBBZGp1c3QgcGFyYW1ldGVycyBmb3IgdGltZSByZW1haW5pbmcuICovDQorCQkJKnB4VGlja3NUb1dhaXQgLT0gKCAoIHBvcnRUaWNrVHlwZSApIHhUaWNrQ291bnQgLSAoIHBvcnRUaWNrVHlwZSApIHB4VGltZU91dC0+eFRpbWVPbkVudGVyaW5nICk7DQorCQkJdlRhc2tTZXRUaW1lT3V0U3RhdGUoIHB4VGltZU91dCApOw0KKwkJCXhSZXR1cm4gPSBwZEZBTFNFOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhSZXR1cm4gPSBwZFRSVUU7DQorCQl9DQorCX0NCisJdGFza0VYSVRfQ1JJVElDQUwoKTsNCisNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgdlRhc2tNaXNzZWRZaWVsZCggdm9pZCApDQorew0KKwl4TWlzc2VkWWllbGQgPSBwZFRSVUU7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFRhc2tHZXRUYXNrTnVtYmVyKCB4VGFza0hhbmRsZSB4VGFzayApDQorCXsNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFJldHVybjsNCisJdHNrVENCICpweFRDQjsNCisJDQorCQlpZiggeFRhc2sgIT0gTlVMTCApDQorCQl7DQorCQkJcHhUQ0IgPSAoIHRza1RDQiAqICkgeFRhc2s7DQorCQkJdXhSZXR1cm4gPSBweFRDQi0+dXhUYXNrTnVtYmVyOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXV4UmV0dXJuID0gMFU7DQorCQl9DQorCQkNCisJCXJldHVybiB1eFJldHVybjsNCisJfQ0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCisJdm9pZCB2VGFza1NldFRhc2tOdW1iZXIoIHhUYXNrSGFuZGxlIHhUYXNrLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4SGFuZGxlICkNCisJew0KKwl0c2tUQ0IgKnB4VENCOw0KKwkNCisJCWlmKCB4VGFzayAhPSBOVUxMICkNCisJCXsNCisJCQlweFRDQiA9ICggdHNrVENCICogKSB4VGFzazsNCisJCQlweFRDQi0+dXhUYXNrTnVtYmVyID0gdXhIYW5kbGU7DQorCQl9DQorCX0NCisjZW5kaWYNCisNCisNCisvKg0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogVGhlIElkbGUgdGFzay4NCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICoNCisgKiBUaGUgcG9ydFRBU0tfRlVOQ1RJT04oKSBtYWNybyBpcyB1c2VkIHRvIGFsbG93IHBvcnQvY29tcGlsZXIgc3BlY2lmaWMNCisgKiBsYW5ndWFnZSBleHRlbnNpb25zLiAgVGhlIGVxdWl2YWxlbnQgcHJvdG90eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzOg0KKyAqDQorICogdm9pZCBwcnZJZGxlVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICk7DQorICoNCisgKi8NCitzdGF0aWMgcG9ydFRBU0tfRlVOQ1RJT04oIHBydklkbGVUYXNrLCBwdlBhcmFtZXRlcnMgKQ0KK3sNCisJLyogU3RvcCB3YXJuaW5ncy4gKi8NCisJKCB2b2lkICkgcHZQYXJhbWV0ZXJzOw0KKw0KKwlmb3IoIDs7ICkNCisJew0KKwkJLyogU2VlIGlmIGFueSB0YXNrcyBoYXZlIGJlZW4gZGVsZXRlZC4gKi8NCisJCXBydkNoZWNrVGFza3NXYWl0aW5nVGVybWluYXRpb24oKTsNCisNCisJCSNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKQ0KKwkJew0KKwkJCS8qIElmIHdlIGFyZSBub3QgdXNpbmcgcHJlZW1wdGlvbiB3ZSBrZWVwIGZvcmNpbmcgYSB0YXNrIHN3aXRjaCB0bw0KKwkJCXNlZSBpZiBhbnkgb3RoZXIgdGFzayBoYXMgYmVjb21lIGF2YWlsYWJsZS4gIElmIHdlIGFyZSB1c2luZw0KKwkJCXByZWVtcHRpb24gd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzIGFzIGFueSB0YXNrIGJlY29taW5nIGF2YWlsYWJsZQ0KKwkJCXdpbGwgYXV0b21hdGljYWxseSBnZXQgdGhlIHByb2Nlc3NvciBhbnl3YXkuICovDQorCQkJdGFza1lJRUxEKCk7DQorCQl9DQorCQkjZW5kaWYNCisNCisJCSNpZiAoICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICYmICggY29uZmlnSURMRV9TSE9VTERfWUlFTEQgPT0gMSApICkNCisJCXsNCisJCQkvKiBXaGVuIHVzaW5nIHByZWVtcHRpb24gdGFza3Mgb2YgZXF1YWwgcHJpb3JpdHkgd2lsbCBiZQ0KKwkJCXRpbWVzbGljZWQuICBJZiBhIHRhc2sgdGhhdCBpcyBzaGFyaW5nIHRoZSBpZGxlIHByaW9yaXR5IGlzIHJlYWR5DQorCQkJdG8gcnVuIHRoZW4gdGhlIGlkbGUgdGFzayBzaG91bGQgeWllbGQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlDQorCQkJdGltZXNsaWNlLg0KKw0KKwkJCUEgY3JpdGljYWwgcmVnaW9uIGlzIG5vdCByZXF1aXJlZCBoZXJlIGFzIHdlIGFyZSBqdXN0IHJlYWRpbmcgZnJvbQ0KKwkJCXRoZSBsaXN0LCBhbmQgYW4gb2NjYXNpb25hbCBpbmNvcnJlY3QgdmFsdWUgd2lsbCBub3QgbWF0dGVyLiAgSWYNCisJCQl0aGUgcmVhZHkgbGlzdCBhdCB0aGUgaWRsZSBwcmlvcml0eSBjb250YWlucyBtb3JlIHRoYW4gb25lIHRhc2sNCisJCQl0aGVuIGEgdGFzayBvdGhlciB0aGFuIHRoZSBpZGxlIHRhc2sgaXMgcmVhZHkgdG8gZXhlY3V0ZS4gKi8NCisJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB0c2tJRExFX1BSSU9SSVRZIF0gKSApID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMSApDQorCQkJew0KKwkJCQl0YXNrWUlFTEQoKTsNCisJCQl9DQorCQl9DQorCQkjZW5kaWYNCisNCisJCSNpZiAoIGNvbmZpZ1VTRV9JRExFX0hPT0sgPT0gMSApDQorCQl7DQorCQkJZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uSWRsZUhvb2soIHZvaWQgKTsNCisNCisJCQkvKiBDYWxsIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gZnJvbSB3aXRoaW4gdGhlIGlkbGUgdGFzay4gIFRoaXMNCisJCQlhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIGRlc2lnbmVyIHRvIGFkZCBiYWNrZ3JvdW5kIGZ1bmN0aW9uYWxpdHkNCisJCQl3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBhIHNlcGFyYXRlIHRhc2suDQorCQkJTk9URTogdkFwcGxpY2F0aW9uSWRsZUhvb2soKSBNVVNUIE5PVCwgVU5ERVIgQU5ZIENJUkNVTVNUQU5DRVMsDQorCQkJQ0FMTCBBIEZVTkNUSU9OIFRIQVQgTUlHSFQgQkxPQ0suICovDQorCQkJdkFwcGxpY2F0aW9uSWRsZUhvb2soKTsNCisJCX0NCisJCSNlbmRpZg0KKwl9DQorfSAvKmxpbnQgIWU3MTUgcHZQYXJhbWV0ZXJzIGlzIG5vdCBhY2Nlc3NlZCBidXQgYWxsIHRhc2sgZnVuY3Rpb25zIHJlcXVpcmUgdGhlIHNhbWUgcHJvdG90eXBlLiAqLw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBGaWxlIHByaXZhdGUgZnVuY3Rpb25zIGRvY3VtZW50ZWQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KK3N0YXRpYyB2b2lkIHBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMoIHRza1RDQiAqcHhUQ0IsIGNvbnN0IHNpZ25lZCBjaGFyICogY29uc3QgcGNOYW1lLCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFIHV4UHJpb3JpdHksIGNvbnN0IHhNZW1vcnlSZWdpb24gKiBjb25zdCB4UmVnaW9ucywgdW5zaWduZWQgc2hvcnQgdXNTdGFja0RlcHRoICkNCit7DQorCS8qIFN0b3JlIHRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBUQ0IuICovDQorCSNpZiBjb25maWdNQVhfVEFTS19OQU1FX0xFTiA+IDENCisJew0KKwkJLyogRG9uJ3QgYnJpbmcgc3RybmNweSBpbnRvIHRoZSBidWlsZCB1bm5lY2Vzc2FyaWx5LiAqLw0KKwkJc3RybmNweSggKCBjaGFyICogKSBweFRDQi0+cGNUYXNrTmFtZSwgKCBjb25zdCBjaGFyICogKSBwY05hbWUsICggdW5zaWduZWQgc2hvcnQgKSBjb25maWdNQVhfVEFTS19OQU1FX0xFTiApOw0KKwl9DQorCSNlbmRpZg0KKwlweFRDQi0+cGNUYXNrTmFtZVsgKCB1bnNpZ25lZCBzaG9ydCApIGNvbmZpZ01BWF9UQVNLX05BTUVfTEVOIC0gKCB1bnNpZ25lZCBzaG9ydCApIDEgXSA9ICggc2lnbmVkIGNoYXIgKSAnXDAnOw0KKw0KKwkvKiBUaGlzIGlzIHVzZWQgYXMgYW4gYXJyYXkgaW5kZXggc28gbXVzdCBlbnN1cmUgaXQncyBub3QgdG9vIGxhcmdlLiAgRmlyc3QNCisJcmVtb3ZlIHRoZSBwcml2aWxlZ2UgYml0IGlmIG9uZSBpcyBwcmVzZW50LiAqLw0KKwlpZiggdXhQcmlvcml0eSA+PSBjb25maWdNQVhfUFJJT1JJVElFUyApDQorCXsNCisJCXV4UHJpb3JpdHkgPSBjb25maWdNQVhfUFJJT1JJVElFUyAtICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIDFVOw0KKwl9DQorDQorCXB4VENCLT51eFByaW9yaXR5ID0gdXhQcmlvcml0eTsNCisJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQorCXsNCisJCXB4VENCLT51eEJhc2VQcmlvcml0eSA9IHV4UHJpb3JpdHk7DQorCX0NCisJI2VuZGlmDQorDQorCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisJdkxpc3RJbml0aWFsaXNlSXRlbSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCisNCisJLyogU2V0IHRoZSBweFRDQiBhcyBhIGxpbmsgYmFjayBmcm9tIHRoZSB4TGlzdEl0ZW0uICBUaGlzIGlzIHNvIHdlIGNhbiBnZXQNCisJYmFjayB0bwl0aGUgY29udGFpbmluZyBUQ0IgZnJvbSBhIGdlbmVyaWMgaXRlbSBpbiBhIGxpc3QuICovDQorCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApLCBweFRDQiApOw0KKw0KKwkvKiBFdmVudCBsaXN0cyBhcmUgYWx3YXlzIGluIHByaW9yaXR5IG9yZGVyLiAqLw0KKwlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICksIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBwb3J0VGlja1R5cGUgKSB1eFByaW9yaXR5ICk7DQorCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgcHhUQ0IgKTsNCisNCisJI2lmICggcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCID09IDEgKQ0KKwl7DQorCQlweFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsNCisJfQ0KKwkjZW5kaWYNCisNCisJI2lmICggY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHID09IDEgKQ0KKwl7DQorCQlweFRDQi0+cHhUYXNrVGFnID0gTlVMTDsNCisJfQ0KKwkjZW5kaWYNCisNCisJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQorCXsNCisJCXB4VENCLT51bFJ1blRpbWVDb3VudGVyID0gMFVMOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkjaWYgKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KKwl7DQorCQl2UG9ydFN0b3JlVGFza01QVVNldHRpbmdzKCAmKCBweFRDQi0+eE1QVVNldHRpbmdzICksIHhSZWdpb25zLCBweFRDQi0+cHhTdGFjaywgdXNTdGFja0RlcHRoICk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJKCB2b2lkICkgeFJlZ2lvbnM7DQorCQkoIHZvaWQgKSB1c1N0YWNrRGVwdGg7DQorCX0NCisJI2VuZGlmDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQorDQorCXZvaWQgdlRhc2tBbGxvY2F0ZU1QVVJlZ2lvbnMoIHhUYXNrSGFuZGxlIHhUYXNrVG9Nb2RpZnksIGNvbnN0IHhNZW1vcnlSZWdpb24gKiBjb25zdCB4UmVnaW9ucyApDQorCXsNCisJdHNrVENCICpweFRDQjsNCisJDQorCQlpZiggeFRhc2tUb01vZGlmeSA9PSBweEN1cnJlbnRUQ0IgKQ0KKwkJew0KKwkJCXhUYXNrVG9Nb2RpZnkgPSBOVUxMOw0KKwkJfQ0KKw0KKwkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHdlIGFyZSBkZWxldGluZyBvdXJzZWx2ZXMuICovDQorCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrVG9Nb2RpZnkgKTsNCisNCisgICAgICAgIHZQb3J0U3RvcmVUYXNrTVBVU2V0dGluZ3MoICYoIHB4VENCLT54TVBVU2V0dGluZ3MgKSwgeFJlZ2lvbnMsIE5VTEwsIDAgKTsNCisJfQ0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZW5kaWYNCisNCitzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVGFza0xpc3RzKCB2b2lkICkNCit7DQordW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFByaW9yaXR5Ow0KKw0KKwlmb3IoIHV4UHJpb3JpdHkgPSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSAwVTsgdXhQcmlvcml0eSA8IGNvbmZpZ01BWF9QUklPUklUSUVTOyB1eFByaW9yaXR5KysgKQ0KKwl7DQorCQl2TGlzdEluaXRpYWxpc2UoICggeExpc3QgKiApICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFByaW9yaXR5IF0gKSApOw0KKwl9DQorDQorCXZMaXN0SW5pdGlhbGlzZSggKCB4TGlzdCAqICkgJnhEZWxheWVkVGFza0xpc3QxICk7DQorCXZMaXN0SW5pdGlhbGlzZSggKCB4TGlzdCAqICkgJnhEZWxheWVkVGFza0xpc3QyICk7DQorCXZMaXN0SW5pdGlhbGlzZSggKCB4TGlzdCAqICkgJnhQZW5kaW5nUmVhZHlMaXN0ICk7DQorDQorCSNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQorCXsNCisJCXZMaXN0SW5pdGlhbGlzZSggKCB4TGlzdCAqICkgJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApOw0KKwl9DQorCSNlbmRpZg0KKw0KKwkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCisJew0KKwkJdkxpc3RJbml0aWFsaXNlKCAoIHhMaXN0ICogKSAmeFN1c3BlbmRlZFRhc2tMaXN0ICk7DQorCX0NCisJI2VuZGlmDQorDQorCS8qIFN0YXJ0IHdpdGggcHhEZWxheWVkVGFza0xpc3QgdXNpbmcgbGlzdDEgYW5kIHRoZSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0DQorCXVzaW5nIGxpc3QyLiAqLw0KKwlweERlbGF5ZWRUYXNrTGlzdCA9ICZ4RGVsYXllZFRhc2tMaXN0MTsNCisJcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdCA9ICZ4RGVsYXllZFRhc2tMaXN0MjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2Q2hlY2tUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiggdm9pZCApDQorew0KKwkjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KKwl7DQorCQlwb3J0QkFTRV9UWVBFIHhMaXN0SXNFbXB0eTsNCisNCisJCS8qIHVjVGFza3NEZWxldGVkIGlzIHVzZWQgdG8gcHJldmVudCB2VGFza1N1c3BlbmRBbGwoKSBiZWluZyBjYWxsZWQNCisJCXRvbyBvZnRlbiBpbiB0aGUgaWRsZSB0YXNrLiAqLw0KKwkJaWYoIHV4VGFza3NEZWxldGVkID4gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgMFUgKQ0KKwkJew0KKwkJCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwkJCQl4TGlzdElzRW1wdHkgPSBsaXN0TElTVF9JU19FTVBUWSggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApOw0KKwkJCXhUYXNrUmVzdW1lQWxsKCk7DQorDQorCQkJaWYoIHhMaXN0SXNFbXB0eSA9PSBwZEZBTFNFICkNCisJCQl7DQorCQkJCXRza1RDQiAqcHhUQ0I7DQorDQorCQkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJCQl7DQorCQkJCQlweFRDQiA9ICggdHNrVENCICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoICggKCB4TGlzdCAqICkgJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApICk7DQorCQkJCQl2TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KKwkJCQkJLS11eEN1cnJlbnROdW1iZXJPZlRhc2tzOw0KKwkJCQkJLS11eFRhc2tzRGVsZXRlZDsNCisJCQkJfQ0KKwkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwkJCQlwcnZEZWxldGVUQ0IoIHB4VENCICk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCSNlbmRpZg0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHBvcnRUaWNrVHlwZSB4VGltZVRvV2FrZSApDQorew0KKwkvKiBUaGUgbGlzdCBpdGVtIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gd2FrZSB0aW1lIG9yZGVyLiAqLw0KKwlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICksIHhUaW1lVG9XYWtlICk7DQorDQorCWlmKCB4VGltZVRvV2FrZSA8IHhUaWNrQ291bnQgKQ0KKwl7DQorCQkvKiBXYWtlIHRpbWUgaGFzIG92ZXJmbG93ZWQuICBQbGFjZSB0aGlzIGl0ZW0gaW4gdGhlIG92ZXJmbG93IGxpc3QuICovDQorCQl2TGlzdEluc2VydCggKCB4TGlzdCAqICkgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdCwgKCB4TGlzdEl0ZW0gKiApICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBUaGUgd2FrZSB0aW1lIGhhcyBub3Qgb3ZlcmZsb3dlZCwgc28gd2UgY2FuIHVzZSB0aGUgY3VycmVudCBibG9jayBsaXN0LiAqLw0KKwkJdkxpc3RJbnNlcnQoICggeExpc3QgKiApIHB4RGVsYXllZFRhc2tMaXN0LCAoIHhMaXN0SXRlbSAqICkgJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisNCisJCS8qIElmIHRoZSB0YXNrIGVudGVyaW5nIHRoZSBibG9ja2VkIHN0YXRlIHdhcyBwbGFjZWQgYXQgdGhlIGhlYWQgb2YgdGhlDQorCQlsaXN0IG9mIGJsb2NrZWQgdGFza3MgdGhlbiB4TmV4dFRhc2tVbmJsb2NrVGltZSBuZWVkcyB0byBiZSB1cGRhdGVkDQorCQl0b28uICovDQorCQlpZiggeFRpbWVUb1dha2UgPCB4TmV4dFRhc2tVbmJsb2NrVGltZSApDQorCQl7DQorCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSB4VGltZVRvV2FrZTsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdHNrVENCICpwcnZBbGxvY2F0ZVRDQkFuZFN0YWNrKCB1bnNpZ25lZCBzaG9ydCB1c1N0YWNrRGVwdGgsIHBvcnRTVEFDS19UWVBFICpwdXhTdGFja0J1ZmZlciApDQorew0KK3Rza1RDQiAqcHhOZXdUQ0I7DQorDQorICAgIHB4TmV3VENCID0gKCB0c2tUQ0IgKiApIHBvb2xBbGxvY2F0ZUJ1ZmZlciggJnNUQ0JzUG9vbCApOw0KKwlpZiggcHhOZXdUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3RhY2sgdXNlZCBieSB0aGUgdGFzayBiZWluZyBjcmVhdGVkLg0KKwkJVGhlIGJhc2Ugb2YgdGhlIHN0YWNrIG1lbW9yeSBzdG9yZWQgaW4gdGhlIFRDQiBzbyB0aGUgdGFzayBjYW4NCisJCWJlIGRlbGV0ZWQgbGF0ZXIgaWYgcmVxdWlyZWQuICovDQorCQlweE5ld1RDQi0+cHhTdGFjayA9ICggcG9ydFNUQUNLX1RZUEUgKiApIHB2UG9ydE1hbGxvY0FsaWduZWQoICggKCAoIHNpemVfdCApdXNTdGFja0RlcHRoICkgKiBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKSwgcHV4U3RhY2tCdWZmZXIgKTsNCisgICAgICAgIHB4TmV3VENCLT5zdGFja0lzU3RhdGljID0gKHB1eFN0YWNrQnVmZmVyICE9IE5VTEwpID8gMSA6IDA7DQorCQlpZiggcHhOZXdUQ0ItPnB4U3RhY2sgPT0gTlVMTCApDQorCQl7DQorCQkJLyogQ291bGQgbm90IGFsbG9jYXRlIHRoZSBzdGFjay4gIERlbGV0ZSB0aGUgYWxsb2NhdGVkIFRDQi4gKi8NCisJCQlwb29sRnJlZUJ1ZmZlciggJnNUQ0JzUG9vbCwgcHhOZXdUQ0IgKTsNCisJCQlweE5ld1RDQiA9IE5VTEw7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJLyogSnVzdCB0byBoZWxwIGRlYnVnZ2luZy4gKi8NCisJCQltZW1zZXQoIHB4TmV3VENCLT5weFN0YWNrLCAoIGludCApIHRza1NUQUNLX0ZJTExfQllURSwgKCBzaXplX3QgKSB1c1N0YWNrRGVwdGggKiBzaXplb2YoIHBvcnRTVEFDS19UWVBFICkgKTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gcHhOZXdUQ0I7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCisNCitzdGF0aWMgdm9pZCBwcnZEZWZhdWx0VGFza0xpc3RDYWxsYmFjayh2b2xhdGlsZSB2b2lkICpweFRDQiwgc2lnbmVkIGNoYXIgY1N0YXR1cykgew0KKyAgICAgICAgdm9sYXRpbGUgdHNrVENCICogcHhOZXh0VENCID0gKHZvbGF0aWxlIHRza1RDQiopIHB4VENCOw0KKwl1bnNpZ25lZCBzaG9ydCB1c1N0YWNrUmVtYWluaW5nOw0KKwlQUklWSUxFR0VEX0RBVEEgc3RhdGljIGNoYXIgcGNTdGF0dXNTdHJpbmdbIGNvbmZpZ01BWF9UQVNLX05BTUVfTEVOICsgMzAgXTsNCisJCQkjaWYgKCBwb3J0U1RBQ0tfR1JPV1RIID4gMCApDQorCQkJew0KKwkJCQl1c1N0YWNrUmVtYWluaW5nID0gdXNUYXNrQ2hlY2tGcmVlU3RhY2tTcGFjZSggKCB1bnNpZ25lZCBjaGFyICogKSBweE5leHRUQ0ItPnB4RW5kT2ZTdGFjayApOw0KKwkJCX0NCisJCQkjZWxzZQ0KKwkJCXsNCisJCQkJdXNTdGFja1JlbWFpbmluZyA9IHVzVGFza0NoZWNrRnJlZVN0YWNrU3BhY2UoICggdW5zaWduZWQgY2hhciAqICkgcHhOZXh0VENCLT5weFN0YWNrICk7DQorCQkJfQ0KKwkJCSNlbmRpZg0KKyAgICAgICAgICAgICAgICAgICAgICAgIA0KKwkJCQ0KKwkJCXNwcmludGYoIHBjU3RhdHVzU3RyaW5nLCAoIGNoYXIgKiApICIlLSpzXHQlY1x0JXVcdCV1XHQldVxyXG4iLCBjb25maWdNQVhfVEFTS19OQU1FX0xFTiwgcHhOZXh0VENCLT5wY1Rhc2tOYW1lLCBjU3RhdHVzLCAoIHVuc2lnbmVkIGludCApIHB4TmV4dFRDQi0+dXhQcmlvcml0eSwgdXNTdGFja1JlbWFpbmluZywgKCB1bnNpZ25lZCBpbnQgKSBweE5leHRUQ0ItPnV4VENCTnVtYmVyICk7DQorCQkJc3RyY2F0KCAoIGNoYXIgKiApIHBydlRhc2tXcml0ZUJ1ZmZlciwgKCBjaGFyICogKSBwY1N0YXR1c1N0cmluZyApOw0KKw0KK30NCisNCitzdGF0aWMgdm9pZCBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoIHZvaWQgKCpwbUNhbGxiYWNrKSh2b2xhdGlsZSB2b2lkKnB4VENCLCBzaWduZWQgY2hhciBjU3RhdHVzKSwgeExpc3QgKnB4TGlzdCwgc2lnbmVkIGNoYXIgY1N0YXR1cyApDQorCXsNCisJdm9sYXRpbGUgdHNrVENCICpweE5leHRUQ0IsICpweEZpcnN0VENCOw0KKw0KKwkJLyogV3JpdGUgdGhlIGRldGFpbHMgb2YgYWxsIHRoZSBUQ0IncyBpbiBweExpc3QgaW50byB0aGUgYnVmZmVyLiAqLw0KKwkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweEZpcnN0VENCLCBweExpc3QgKTsNCisJCWRvDQorCQl7DQorCQkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweE5leHRUQ0IsIHB4TGlzdCApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBtQ2FsbGJhY2socHhOZXh0VENCLCBjU3RhdHVzKTsNCisJCX0gd2hpbGUoIHB4TmV4dFRDQiAhPSBweEZpcnN0VENCICk7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyA9PSAxICkNCisNCisJc3RhdGljIHZvaWQgcHJ2R2VuZXJhdGVSdW5UaW1lU3RhdHNGb3JUYXNrc0luTGlzdCggY29uc3Qgc2lnbmVkIGNoYXIgKnBjV3JpdGVCdWZmZXIsIHhMaXN0ICpweExpc3QsIHVuc2lnbmVkIGxvbmcgdWxUb3RhbFJ1blRpbWUgKQ0KKwl7DQorCXZvbGF0aWxlIHRza1RDQiAqcHhOZXh0VENCLCAqcHhGaXJzdFRDQjsNCisJdW5zaWduZWQgbG9uZyB1bFN0YXRzQXNQZXJjZW50YWdlOw0KKw0KKwkJLyogV3JpdGUgdGhlIHJ1biB0aW1lIHN0YXRzIG9mIGFsbCB0aGUgVENCJ3MgaW4gcHhMaXN0IGludG8gdGhlIGJ1ZmZlci4gKi8NCisJCWxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSggcHhGaXJzdFRDQiwgcHhMaXN0ICk7DQorCQlkbw0KKwkJew0KKwkJCS8qIEdldCBuZXh0IFRDQiBpbiBmcm9tIHRoZSBsaXN0LiAqLw0KKwkJCWxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSggcHhOZXh0VENCLCBweExpc3QgKTsNCisNCisJCQkvKiBEaXZpZGUgYnkgemVybyBjaGVjay4gKi8NCisJCQlpZiggdWxUb3RhbFJ1blRpbWUgPiAwVUwgKQ0KKwkJCXsNCisJCQkJLyogSGFzIHRoZSB0YXNrIHJ1biBhdCBhbGw/ICovDQorCQkJCWlmKCBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgPT0gMFVMICkNCisJCQkJew0KKwkJCQkJLyogVGhlIHRhc2sgaGFzIHVzZWQgbm8gQ1BVIHRpbWUgYXQgYWxsLiAqLw0KKwkJCQkJc3ByaW50ZiggcGNTdGF0c1N0cmluZywgKCBjaGFyICogKSAiJXNcdFx0MFx0XHQwJSVcclxuIiwgcHhOZXh0VENCLT5wY1Rhc2tOYW1lICk7DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQkvKiBXaGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIHJ1biB0aW1lIGhhcyB0aGUgdGFzayB1c2VkPw0KKwkJCQkJVGhpcyB3aWxsIGFsd2F5cyBiZSByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4NCisJCQkJCXVsVG90YWxSdW5UaW1lIGhhcyBhbHJlYWR5IGJlZW4gZGl2aWRlZCBieSAxMDAuICovDQorCQkJCQl1bFN0YXRzQXNQZXJjZW50YWdlID0gcHhOZXh0VENCLT51bFJ1blRpbWVDb3VudGVyIC8gdWxUb3RhbFJ1blRpbWU7DQorDQorCQkJCQlpZiggdWxTdGF0c0FzUGVyY2VudGFnZSA+IDBVTCApDQorCQkJCQl7DQorCQkJCQkJI2lmZGVmIHBvcnRMVV9QUklOVEZfU1BFQ0lGSUVSX1JFUVVJUkVEDQorCQkJCQkJew0KKwkJCQkJCQlzcHJpbnRmKCBwY1N0YXRzU3RyaW5nLCAoIGNoYXIgKiApICIlc1x0XHQlbHVcdFx0JWx1JSVcclxuIiwgcHhOZXh0VENCLT5wY1Rhc2tOYW1lLCBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIsIHVsU3RhdHNBc1BlcmNlbnRhZ2UgKTsJCQkJCQkJDQorCQkJCQkJfQ0KKwkJCQkJCSNlbHNlDQorCQkJCQkJew0KKwkJCQkJCQkvKiBzaXplb2YoIGludCApID09IHNpemVvZiggbG9uZyApIHNvIGEgc21hbGxlcg0KKwkJCQkJCQlwcmludGYoKSBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLw0KKwkJCQkJCQlzcHJpbnRmKCBwY1N0YXRzU3RyaW5nLCAoIGNoYXIgKiApICIlc1x0XHQldVx0XHQldSUlXHJcbiIsIHB4TmV4dFRDQi0+cGNUYXNrTmFtZSwgKCB1bnNpZ25lZCBpbnQgKSBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIsICggdW5zaWduZWQgaW50ICkgdWxTdGF0c0FzUGVyY2VudGFnZSApOw0KKwkJCQkJCX0NCisJCQkJCQkjZW5kaWYNCisJCQkJCX0NCisJCQkJCWVsc2UNCisJCQkJCXsNCisJCQkJCQkvKiBJZiB0aGUgcGVyY2VudGFnZSBpcyB6ZXJvIGhlcmUgdGhlbiB0aGUgdGFzayBoYXMNCisJCQkJCQljb25zdW1lZCBsZXNzIHRoYW4gMSUgb2YgdGhlIHRvdGFsIHJ1biB0aW1lLiAqLw0KKwkJCQkJCSNpZmRlZiBwb3J0TFVfUFJJTlRGX1NQRUNJRklFUl9SRVFVSVJFRA0KKwkJCQkJCXsNCisJCQkJCQkJc3ByaW50ZiggcGNTdGF0c1N0cmluZywgKCBjaGFyICogKSAiJXNcdFx0JWx1XHRcdDwxJSVcclxuIiwgcHhOZXh0VENCLT5wY1Rhc2tOYW1lLCBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgKTsJCQkJCQkJDQorCQkJCQkJfQ0KKwkJCQkJCSNlbHNlDQorCQkJCQkJew0KKwkJCQkJCQkvKiBzaXplb2YoIGludCApID09IHNpemVvZiggbG9uZyApIHNvIGEgc21hbGxlcg0KKwkJCQkJCQlwcmludGYoKSBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLw0KKwkJCQkJCQlzcHJpbnRmKCBwY1N0YXRzU3RyaW5nLCAoIGNoYXIgKiApICIlc1x0XHQldVx0XHQ8MSUlXHJcbiIsIHB4TmV4dFRDQi0+cGNUYXNrTmFtZSwgKCB1bnNpZ25lZCBpbnQgKSBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgKTsNCisJCQkJCQl9DQorCQkJCQkJI2VuZGlmDQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJc3RyY2F0KCAoIGNoYXIgKiApIHBjV3JpdGVCdWZmZXIsICggY2hhciAqICkgcGNTdGF0c1N0cmluZyApOw0KKwkJCX0NCisgICAgICAgICAgICANCisgICAgICAgICAgICAvLyBJIHdhbnQgdG8gY2xlYXIgdGhlIHN0YXRzIGV2ZXJ5IHRpbWUgaSBjYWxsIHRoaXMgZnVuY3Rpb24NCisgICAgICAgICAgICBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgPSAwOw0KKw0KKwkJfSB3aGlsZSggcHhOZXh0VENCICE9IHB4Rmlyc3RUQ0IgKTsNCisJfQ0KKw0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSB8fCAoIElOQ0xVREVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrID09IDEgKSApDQorDQorCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCB1c1Rhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCBjb25zdCB1bnNpZ25lZCBjaGFyICogcHVjU3RhY2tCeXRlICkNCisJew0KKwlyZWdpc3RlciB1bnNpZ25lZCBzaG9ydCB1c0NvdW50ID0gMFU7DQorDQorCQl3aGlsZSggKnB1Y1N0YWNrQnl0ZSA9PSB0c2tTVEFDS19GSUxMX0JZVEUgKQ0KKwkJew0KKwkJCXB1Y1N0YWNrQnl0ZSAtPSBwb3J0U1RBQ0tfR1JPV1RIOw0KKwkJCXVzQ291bnQrKzsNCisJCX0NCisNCisJCXVzQ291bnQgLz0gc2l6ZW9mKCBwb3J0U1RBQ0tfVFlQRSApOw0KKw0KKwkJcmV0dXJuIHVzQ291bnQ7DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkNCisNCisJdW5zaWduZWQgcG9ydEJBU0VfVFlQRSB1eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsoIHhUYXNrSGFuZGxlIHhUYXNrICkNCisJew0KKwl0c2tUQ0IgKnB4VENCOw0KKwl1bnNpZ25lZCBjaGFyICpwY0VuZE9mU3RhY2s7DQorCXVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhSZXR1cm47DQorDQorCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrICk7DQorDQorCQkjaWYgcG9ydFNUQUNLX0dST1dUSCA8IDANCisJCXsNCisJCQlwY0VuZE9mU3RhY2sgPSAoIHVuc2lnbmVkIGNoYXIgKiApIHB4VENCLT5weFN0YWNrOw0KKwkJfQ0KKwkJI2Vsc2UNCisJCXsNCisJCQlwY0VuZE9mU3RhY2sgPSAoIHVuc2lnbmVkIGNoYXIgKiApIHB4VENCLT5weEVuZE9mU3RhY2s7DQorCQl9DQorCQkjZW5kaWYNCisNCisJCXV4UmV0dXJuID0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgdXNUYXNrQ2hlY2tGcmVlU3RhY2tTcGFjZSggcGNFbmRPZlN0YWNrICk7DQorDQorCQlyZXR1cm4gdXhSZXR1cm47DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KKw0KKwlzdGF0aWMgdm9pZCBwcnZEZWxldGVUQ0IoIHRza1RDQiAqcHhUQ0IgKQ0KKwl7DQorCQkvKiBUaGlzIGNhbGwgaXMgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgVHJpQ29yZSBwb3J0LiAgSXQgbXVzdCBiZQ0KKwkJYWJvdmUgdGhlIHZQb3J0RnJlZSgpIGNhbGxzLiAgVGhlIGNhbGwgaXMgYWxzbyB1c2VkIGJ5IHBvcnRzL2RlbW9zIHRoYXQNCisJCXdhbnQgdG8gYWxsb2NhdGUgYW5kIGNsZWFuIFJBTSBzdGF0aWNhbGx5LiAqLw0KKwkJcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKTsNCisNCisJCS8qIEZyZWUgdXAgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIHNjaGVkdWxlciBmb3IgdGhlIHRhc2suICBJdCBpcyB1cCB0bw0KKwkJdGhlIHRhc2sgdG8gZnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZCBhdCB0aGUgYXBwbGljYXRpb24gbGV2ZWwuICovDQorICAgICAgICBpZighcHhUQ0ItPnN0YWNrSXNTdGF0aWMpDQorICAgICAgICAgICAgdlBvcnRGcmVlQWxpZ25lZCggcHhUQ0ItPnB4U3RhY2sgKTsNCisJCXBvb2xGcmVlQnVmZmVyKCAmc1RDQnNQb29sLCBweFRDQiApOw0KKwl9DQorDQorI2VuZGlmDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggKCBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgPT0gMSApIHx8ICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApICkNCisNCisJeFRhc2tIYW5kbGUgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSggdm9pZCApDQorCXsNCisJeFRhc2tIYW5kbGUgeFJldHVybjsNCisNCisJCS8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgcmVxdWlyZWQgYXMgdGhpcyBpcyBub3QgY2FsbGVkIGZyb20NCisJCWFuIGludGVycnVwdCBhbmQgdGhlIGN1cnJlbnQgVENCIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGZvciBhbnkNCisJCWluZGl2aWR1YWwgZXhlY3V0aW9uIHRocmVhZC4gKi8NCisJCXhSZXR1cm4gPSBweEN1cnJlbnRUQ0I7DQorDQorCQlyZXR1cm4geFJldHVybjsNCisJfQ0KKw0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZiAoICggSU5DTFVERV94VGFza0dldFNjaGVkdWxlclN0YXRlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkNCisNCisJcG9ydEJBU0VfVFlQRSB4VGFza0dldFNjaGVkdWxlclN0YXRlKCB2b2lkICkNCisJew0KKwlwb3J0QkFTRV9UWVBFIHhSZXR1cm47DQorDQorCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgPT0gcGRGQUxTRSApDQorCQl7DQorCQkJeFJldHVybiA9IHRhc2tTQ0hFRFVMRVJfTk9UX1NUQVJURUQ7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJeFJldHVybiA9IHRhc2tTQ0hFRFVMRVJfUlVOTklORzsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJeFJldHVybiA9IHRhc2tTQ0hFRFVMRVJfU1VTUEVOREVEOw0KKwkJCX0NCisJCX0NCisNCisJCXJldHVybiB4UmV0dXJuOw0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQorDQorCXZvaWQgdlRhc2tQcmlvcml0eUluaGVyaXQoIHhUYXNrSGFuZGxlICogY29uc3QgcHhNdXRleEhvbGRlciApDQorCXsNCisJdHNrVENCICogY29uc3QgcHhUQ0IgPSAoIHRza1RDQiAqICkgcHhNdXRleEhvbGRlcjsNCisNCisJCWNvbmZpZ0FTU0VSVCggcHhNdXRleEhvbGRlciApOw0KKw0KKwkJaWYoIHB4VENCLT51eFByaW9yaXR5IDwgcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCisJCXsNCisJCQkvKiBBZGp1c3QgdGhlIG11dGV4IGhvbGRlciBzdGF0ZSB0byBhY2NvdW50IGZvciBpdHMgbmV3IHByaW9yaXR5LiAqLw0KKwkJCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIHBvcnRUaWNrVHlwZSApIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApOw0KKw0KKwkJCS8qIElmIHRoZSB0YXNrIGJlaW5nIG1vZGlmaWVkIGlzIGluIHRoZSByZWFkeSBzdGF0ZSBpdCB3aWxsIG5lZWQgdG8NCisJCQliZSBtb3ZlZCBpbiB0byBhIG5ldyBsaXN0LiAqLw0KKwkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHB4VENCLT51eFByaW9yaXR5IF0gKSwgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApICE9IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisNCisJCQkJLyogSW5oZXJpdCB0aGUgcHJpb3JpdHkgYmVmb3JlIGJlaW5nIG1vdmVkIGludG8gdGhlIG5ldyBsaXN0LiAqLw0KKwkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eTsNCisJCQkJcHJ2QWRkVGFza1RvUmVhZHlRdWV1ZSggcHhUQ0IgKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogSnVzdCBpbmhlcml0IHRoZSBwcmlvcml0eS4gKi8NCisJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHk7DQorCQkJfQ0KKw0KKwkJCXRyYWNlVEFTS19QUklPUklUWV9JTkhFUklUKCBweFRDQiwgcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICk7DQorCQl9DQorCX0NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCisNCisJdm9pZCB2VGFza1ByaW9yaXR5RGlzaW5oZXJpdCggeFRhc2tIYW5kbGUgKiBjb25zdCBweE11dGV4SG9sZGVyICkNCisJew0KKwl0c2tUQ0IgKiBjb25zdCBweFRDQiA9ICggdHNrVENCICogKSBweE11dGV4SG9sZGVyOw0KKw0KKwkJaWYoIHB4TXV0ZXhIb2xkZXIgIT0gTlVMTCApDQorCQl7DQorCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ICE9IHB4VENCLT51eEJhc2VQcmlvcml0eSApDQorCQkJew0KKwkJCQkvKiBXZSBtdXN0IGJlIHRoZSBydW5uaW5nIHRhc2sgdG8gYmUgYWJsZSB0byBnaXZlIHRoZSBtdXRleCBiYWNrLg0KKwkJCQlSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHJlYWR5IGxpc3Qgd2UgY3VycmVudGx5IGFwcGVhciBpbi4gKi8NCisJCQkJdkxpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCisNCisJCQkJLyogRGlzaW5oZXJpdCB0aGUgcHJpb3JpdHkgYmVmb3JlIGFkZGluZyB0aGUgdGFzayBpbnRvIHRoZSBuZXcNCisJCQkJcmVhZHkgbGlzdC4gKi8NCisJCQkJdHJhY2VUQVNLX1BSSU9SSVRZX0RJU0lOSEVSSVQoIHB4VENCLCBweFRDQi0+dXhCYXNlUHJpb3JpdHkgKTsNCisJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSBweFRDQi0+dXhCYXNlUHJpb3JpdHk7DQorCQkJCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIHBvcnRUaWNrVHlwZSApIHB4VENCLT51eFByaW9yaXR5ICk7DQorCQkJCXBydkFkZFRhc2tUb1JlYWR5UXVldWUoIHB4VENCICk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCID09IDEgKQ0KKw0KKwl2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApDQorCXsNCisJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisNCisJCWlmKCB4U2NoZWR1bGVyUnVubmluZyAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgKSsrOw0KKwkJfQ0KKwl9DQorDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCID09IDEgKQ0KKw0KK3ZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KK3sNCisJaWYoIHhTY2hlZHVsZXJSdW5uaW5nICE9IHBkRkFMU0UgKQ0KKwl7DQorCQlpZiggcHhDdXJyZW50VENCLT51eENyaXRpY2FsTmVzdGluZyA+IDBVICkNCisJCXsNCisJCQkoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgKS0tOw0KKw0KKwkJCWlmKCBweEN1cnJlbnRUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nID09IDBVICkNCisJCQl7DQorCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwkJCX0NCisJCX0NCisJfQ0KK30NCisNCisjZW5kaWYNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9GcmVlUlRPUy9Tb3VyY2UvdGltZXJzLmMgYi9GcmVlUlRPUy9Tb3VyY2UvdGltZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhZDZjYgotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL1NvdXJjZS90aW1lcnMuYwpAQCAtMCwwICsxLDcyMSBAQAorLyoNCisgICAgRnJlZVJUT1MgVjcuMi4wIC0gQ29weXJpZ2h0IChDKSAyMDEyIFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KKw0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgRnJlZVJUT1MgdHV0b3JpYWwgYm9va3MgYXJlIGF2YWlsYWJsZSBpbiBwZGYgYW5kIHBhcGVyYmFjay4gICAgICAgICoNCisgICAgICogICAgQ29tcGxldGUsIHJldmlzZWQsIGFuZCBlZGl0ZWQgcGRmIHJlZmVyZW5jZSBtYW51YWxzIGFyZSBhbHNvICAgICAgICoNCisgICAgICogICAgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgUHVyY2hhc2luZyBGcmVlUlRPUyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IG9ubHkgaGVscCB5b3UsIGJ5ICAgICAgICoNCisgICAgICogICAgZW5zdXJpbmcgeW91IGdldCBydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYW5kIHdpdGggYW4gICAgICAgICoNCisgICAgICogICAgaW4tZGVwdGgga25vd2xlZGdlIG9mIGhvdyB0byB1c2UgRnJlZVJUT1MsIGl0IHdpbGwgYWxzbyBoZWxwICAgICAgICoNCisgICAgICogICAgdGhlIEZyZWVSVE9TIHByb2plY3QgdG8gY29udGludWUgd2l0aCBpdHMgbWlzc2lvbiBvZiBwcm92aWRpbmcgICAgICoNCisgICAgICogICAgcHJvZmVzc2lvbmFsIGdyYWRlLCBjcm9zcyBwbGF0Zm9ybSwgZGUgZmFjdG8gc3RhbmRhcmQgc29sdXRpb25zICAgICoNCisgICAgICogICAgZm9yIG1pY3JvY29udHJvbGxlcnMgLSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlISAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgPj4+IFNlZSBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiA8PDwgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgVGhhbmsgeW91IGZvciB1c2luZyBGcmVlUlRPUywgYW5kIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQorDQorICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCisgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBBTkQgTU9ESUZJRUQgQlkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCisgICAgPj4+Tk9URTw8PCBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvDQorICAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvDQorICAgIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TDQorICAgIGtlcm5lbC4gIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KKyAgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQ0KKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICAgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgIExpY2Vuc2UgYW5kIHRoZSBGcmVlUlRPUyBsaWNlbnNlIGV4Y2VwdGlvbiBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QgaXQNCisgICAgY2FuIGJlIHZpZXdlZCBoZXJlOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbCBhbmQgYWxzbyBvYnRhaW5lZA0KKyAgICBieSB3cml0aW5nIHRvIFJpY2hhcmQgQmFycnksIGNvbnRhY3QgZGV0YWlscyBmb3Igd2hvbSBhcmUgYXZhaWxhYmxlIG9uIHRoZQ0KKyAgICBGcmVlUlRPUyBXRUIgc2l0ZS4NCisNCisgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQorICAgIA0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcgdGhlIEZBUSAiTXkgYXBwbGljYXRpb24gZG9lcyAgICoNCisgICAgICogICAgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyAtIERvY3VtZW50YXRpb24sIHRyYWluaW5nLCBsYXRlc3QgaW5mb3JtYXRpb24sIA0KKyAgICBsaWNlbnNlIGFuZCBjb250YWN0IGRldGFpbHMuDQorICAgIA0KKyAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KKyAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLg0KKw0KKyAgICBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZCBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMsIHdobyBzZWxsIA0KKyAgICB0aGUgY29kZSB3aXRoIGNvbW1lcmNpYWwgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uLCBhbmQgbWlkZGxld2FyZSwgdW5kZXIgDQorICAgIHRoZSBPcGVuUlRPUyBicmFuZDogaHR0cDovL3d3dy5PcGVuUlRPUy5jb20uICBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28NCisgICAgcHJvdmlkZSBhIHNhZmV0eSBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gdW5kZXIgDQorICAgIHRoZSBTYWZlUlRPUyBicmFuZDogaHR0cDovL3d3dy5TYWZlUlRPUy5jb20uDQorKi8NCisNCisvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQorYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCit0YXNrLmggaXMgaW5jbHVkZWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBmaWxlLiAqLw0KKyNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCisNCisjaW5jbHVkZSAiRnJlZVJUT1MuaCINCisjaW5jbHVkZSAidGFzay5oIg0KKyNpbmNsdWRlICJxdWV1ZS5oIg0KKyNpbmNsdWRlICJ0aW1lcnMuaCINCisjaW5jbHVkZSAic3RhdGljLWFsbG9jYXRvci5oIg0KKw0KKyN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KKw0KKy8qIFRoaXMgZW50aXJlIHNvdXJjZSBmaWxlIHdpbGwgYmUgc2tpcHBlZCBpZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGNvbmZpZ3VyZWQNCit0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyIGZ1bmN0aW9uYWxpdHkuICBUaGlzICNpZiBpcyBjbG9zZWQgYXQgdGhlIHZlcnkgYm90dG9tDQorb2YgdGhpcyBmaWxlLiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzb2Z0d2FyZSB0aW1lciBmdW5jdGlvbmFsaXR5IHRoZW4gZW5zdXJlDQorY29uZmlnVVNFX1RJTUVSUyBpcyBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLiAqLw0KKyNpZiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApDQorDQorLyogTWlzYyBkZWZpbml0aW9ucy4gKi8NCisjZGVmaW5lIHRtck5PX0RFTEFZCQkoIHBvcnRUaWNrVHlwZSApIDBVDQorDQorLyogVGhlIGRlZmluaXRpb24gb2YgdGhlIHRpbWVycyB0aGVtc2VsdmVzLiAqLw0KK3R5cGVkZWYgc3RydWN0IHRtclRpbWVyQ29udHJvbA0KK3sNCisJY29uc3Qgc2lnbmVkIGNoYXIJCSpwY1RpbWVyTmFtZTsJCS8qPDwgVGV4dCBuYW1lLiAgVGhpcyBpcyBub3QgdXNlZCBieSB0aGUga2VybmVsLCBpdCBpcyBpbmNsdWRlZCBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLiAqLw0KKwl4TGlzdEl0ZW0JCQkJeFRpbWVyTGlzdEl0ZW07CQkvKjw8IFN0YW5kYXJkIGxpbmtlZCBsaXN0IGl0ZW0gYXMgdXNlZCBieSBhbGwga2VybmVsIGZlYXR1cmVzIGZvciBldmVudCBtYW5hZ2VtZW50LiAqLw0KKwlwb3J0VGlja1R5cGUJCQl4VGltZXJQZXJpb2RJblRpY2tzOy8qPDwgSG93IHF1aWNrbHkgYW5kIG9mdGVuIHRoZSB0aW1lciBleHBpcmVzLiAqLw0KKwl1bnNpZ25lZCBwb3J0QkFTRV9UWVBFCXV4QXV0b1JlbG9hZDsJCS8qPDwgU2V0IHRvIHBkVFJVRSBpZiB0aGUgdGltZXIgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIG9uY2UgZXhwaXJlZC4gIFNldCB0byBwZEZBTFNFIGlmIHRoZSB0aW1lciBpcywgaW4gZWZmZWN0LCBhIG9uZSBzaG90IHRpbWVyLiAqLw0KKwl2b2lkIAkJCQkJKnB2VGltZXJJRDsJCQkvKjw8IEFuIElEIHRvIGlkZW50aWZ5IHRoZSB0aW1lci4gIFRoaXMgYWxsb3dzIHRoZSB0aW1lciB0byBiZSBpZGVudGlmaWVkIHdoZW4gdGhlIHNhbWUgY2FsbGJhY2sgaXMgdXNlZCBmb3IgbXVsdGlwbGUgdGltZXJzLiAqLw0KKwl0bXJUSU1FUl9DQUxMQkFDSwkJcHhDYWxsYmFja0Z1bmN0aW9uOwkvKjw8IFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuICovDQorfSB4VElNRVI7DQorDQorI2lmbmRlZiBjb25maWdNQVhfTlVNX09GX1RJTUVSUw0KKyNkZWZpbmUgY29uZmlnTUFYX05VTV9PRl9USU1FUlMgKDMyKQ0KKyNlbmRpZg0KKyNkZWZpbmUgTlVNX09GX1RJTUVSX0ZMQUdTICgoY29uZmlnTUFYX05VTV9PRl9USU1FUlMrMzEpLzMyKQ0KK3N0YXRpYyB4VElNRVIgc05sVGltZXJzW2NvbmZpZ01BWF9OVU1fT0ZfVElNRVJTXTsNCitzdGF0aWMgdWludDMyX3Qgc05sVGltZXJzRmxhZ3NbTlVNX09GX1RJTUVSX0ZMQUdTXTsNCitzdGF0aWMgc3RhdGljX3Bvb2xfdCBzVGltZXJzUG9vbDsNCisNCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzZW50IGFuZCByZWNlaXZlZCBvbiB0aGUgdGltZXINCitxdWV1ZS4gKi8NCit0eXBlZGVmIHN0cnVjdCB0bXJUaW1lclF1ZXVlTWVzc2FnZQ0KK3sNCisJcG9ydEJBU0VfVFlQRQkJCXhNZXNzYWdlSUQ7CQkJLyo8PCBUaGUgY29tbWFuZCBiZWluZyBzZW50IHRvIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2suICovDQorCXBvcnRUaWNrVHlwZQkJCXhNZXNzYWdlVmFsdWU7CQkvKjw8IEFuIG9wdGlvbmFsIHZhbHVlIHVzZWQgYnkgYSBzdWJzZXQgb2YgY29tbWFuZHMsIGZvciBleGFtcGxlLCB3aGVuIGNoYW5naW5nIHRoZSBwZXJpb2Qgb2YgYSB0aW1lci4gKi8NCisJeFRJTUVSICoJCQkJcHhUaW1lcjsJCQkvKjw8IFRoZSB0aW1lciB0byB3aGljaCB0aGUgY29tbWFuZCB3aWxsIGJlIGFwcGxpZWQuICovDQorfSB4VElNRVJfTUVTU0FHRTsNCisNCisNCisvKiBUaGUgbGlzdCBpbiB3aGljaCBhY3RpdmUgdGltZXJzIGFyZSBzdG9yZWQuICBUaW1lcnMgYXJlIHJlZmVyZW5jZWQgaW4gZXhwaXJlDQordGltZSBvcmRlciwgd2l0aCB0aGUgbmVhcmVzdCBleHBpcnkgdGltZSBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuICBPbmx5IHRoZQ0KK3RpbWVyIHNlcnZpY2UgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyB4QWN0aXZlVGltZXJMaXN0LiAqLw0KK1BSSVZJTEVHRURfREFUQSBzdGF0aWMgeExpc3QgeEFjdGl2ZVRpbWVyTGlzdDE7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB4TGlzdCB4QWN0aXZlVGltZXJMaXN0MjsNCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHhMaXN0ICpweEN1cnJlbnRUaW1lckxpc3Q7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB4TGlzdCAqcHhPdmVyZmxvd1RpbWVyTGlzdDsNCisNCisvKiBBIHF1ZXVlIHRoYXQgaXMgdXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2suICovDQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB4UXVldWVIYW5kbGUgeFRpbWVyUXVldWUgPSBOVUxMOw0KKw0KKyNpZiAoIElOQ0xVREVfeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlID09IDEgKQ0KKwkNCisJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB4VGFza0hhbmRsZSB4VGltZXJUYXNrSGFuZGxlID0gTlVMTDsNCisJDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4SW5pdFRpbWVycyh2b2lkKTsNCisNCisNCisvKg0KKyAqIEluaXRpYWxpc2UgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIHRpbWVyIHNlcnZpY2UgdGFzayBpZiBpdCBoYXMgbm90DQorICogYmVlbiBpbml0aWFsaXNlZCBhbHJlYWR5Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVGhlIHRpbWVyIHNlcnZpY2UgdGFzayAoZGFlbW9uKS4gIFRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGlzDQorICogdGFzay4gIE90aGVyIHRhc2tzIGNvbW11bmljYXRlIHdpdGggdGhlIHRpbWVyIHNlcnZpY2UgdGFzayB1c2luZyB0aGUNCisgKiB4VGltZXJRdWV1ZSBxdWV1ZS4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZUaW1lclRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBDYWxsZWQgYnkgdGhlIHRpbWVyIHNlcnZpY2UgdGFzayB0byBpbnRlcnByZXQgYW5kIHByb2Nlc3MgYSBjb21tYW5kIGl0DQorICogcmVjZWl2ZWQgb24gdGhlIHRpbWVyIHF1ZXVlLg0KKyAqLw0KK3N0YXRpYyB2b2lkCXBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIEluc2VydCB0aGUgdGltZXIgaW50byBlaXRoZXIgeEFjdGl2ZVRpbWVyTGlzdDEsIG9yIHhBY3RpdmVUaW1lckxpc3QyLA0KKyAqIGRlcGVuZGluZyBvbiBpZiB0aGUgZXhwaXJlIHRpbWUgY2F1c2VzIGEgdGltZXIgY291bnRlciBvdmVyZmxvdy4NCisgKi8NCitzdGF0aWMgcG9ydEJBU0VfVFlQRSBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdCggeFRJTUVSICpweFRpbWVyLCBwb3J0VGlja1R5cGUgeE5leHRFeHBpcnlUaW1lLCBwb3J0VGlja1R5cGUgeFRpbWVOb3csIHBvcnRUaWNrVHlwZSB4Q29tbWFuZFRpbWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogQW4gYWN0aXZlIHRpbWVyIGhhcyByZWFjaGVkIGl0cyBleHBpcmUgdGltZS4gIFJlbG9hZCB0aGUgdGltZXIgaWYgaXQgaXMgYW4NCisgKiBhdXRvIHJlbG9hZCB0aW1lciwgdGhlbiBjYWxsIGl0cyBjYWxsYmFjay4NCisgKi8NCitzdGF0aWMgdm9pZCBwcnZQcm9jZXNzRXhwaXJlZFRpbWVyKCBwb3J0VGlja1R5cGUgeE5leHRFeHBpcmVUaW1lLCBwb3J0VGlja1R5cGUgeFRpbWVOb3cgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qDQorICogVGhlIHRpY2sgY291bnQgaGFzIG92ZXJmbG93ZWQuICBTd2l0Y2ggdGhlIHRpbWVyIGxpc3RzIGFmdGVyIGVuc3VyaW5nIHRoZQ0KKyAqIGN1cnJlbnQgdGltZXIgbGlzdCBkb2VzIG5vdCBzdGlsbCByZWZlcmVuY2Ugc29tZSB0aW1lcnMuDQorICovDQorc3RhdGljIHZvaWQgcHJ2U3dpdGNoVGltZXJMaXN0cyggcG9ydFRpY2tUeXBlIHhMYXN0VGltZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdGljayBjb3VudCwgc2V0dGluZyAqcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkIHRvIHBkVFJVRQ0KKyAqIGlmIGEgdGljayBjb3VudCBvdmVyZmxvdyBvY2N1cnJlZCBzaW5jZSBwcnZTYW1wbGVUaW1lTm93KCkgd2FzIGxhc3QgY2FsbGVkLg0KKyAqLw0KK3N0YXRpYyBwb3J0VGlja1R5cGUgcHJ2U2FtcGxlVGltZU5vdyggcG9ydEJBU0VfVFlQRSAqcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisNCisvKg0KKyAqIElmIHRoZSB0aW1lciBsaXN0IGNvbnRhaW5zIGFueSBhY3RpdmUgdGltZXJzIHRoZW4gcmV0dXJuIHRoZSBleHBpcmUgdGltZSBvZg0KKyAqIHRoZSB0aW1lciB0aGF0IHdpbGwgZXhwaXJlIGZpcnN0IGFuZCBzZXQgKnB4TGlzdFdhc0VtcHR5IHRvIGZhbHNlLiAgSWYgdGhlDQorICogdGltZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGFueSB0aW1lcnMgdGhlbiByZXR1cm4gMCBhbmQgc2V0ICpweExpc3RXYXNFbXB0eQ0KKyAqIHRvIHBkVFJVRS4NCisgKi8NCitzdGF0aWMgcG9ydFRpY2tUeXBlIHBydkdldE5leHRFeHBpcmVUaW1lKCBwb3J0QkFTRV9UWVBFICpweExpc3RXYXNFbXB0eSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQorDQorLyoNCisgKiBJZiBhIHRpbWVyIGhhcyBleHBpcmVkLCBwcm9jZXNzIGl0LiAgT3RoZXJ3aXNlLCBibG9jayB0aGUgdGltZXIgc2VydmljZSB0YXNrDQorICogdW50aWwgZWl0aGVyIGEgdGltZXIgZG9lcyBleHBpcmUgb3IgYSBjb21tYW5kIGlzIHJlY2VpdmVkLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHBydlByb2Nlc3NUaW1lck9yQmxvY2tUYXNrKCBwb3J0VGlja1R5cGUgeE5leHRFeHBpcmVUaW1lLCBwb3J0QkFTRV9UWVBFIHhMaXN0V2FzRW1wdHkgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpL3NpemVvZihhWzBdKSkNCisNCit2b2lkIHhJbml0VGltZXJzKHZvaWQpDQorew0KKyAgICBwb29sSW5pdCggJnNUaW1lcnNQb29sLA0KKyAgICAgICAgICAgICAgc2l6ZW9mKHNObFRpbWVyc1swXSksDQorICAgICAgICAgICAgICBBUlJBWV9TSVpFKHNObFRpbWVycyksDQorICAgICAgICAgICAgICAmc05sVGltZXJzLA0KKyAgICAgICAgICAgICAgJnNObFRpbWVyc0ZsYWdzKTsNCit9DQorDQorc3RhdGljIHBvcnRTVEFDS19UWVBFIHNUaW1lclN0YWNrW2NvbmZpZ1RJTUVSX1RBU0tfU1RBQ0tfREVQVEhdOw0KKw0KK3BvcnRCQVNFX1RZUEUgeFRpbWVyQ3JlYXRlVGltZXJUYXNrKCB2b2lkICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UmV0dXJuID0gcGRGQUlMOw0KKw0KKwkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZCBpZg0KKwljb25maWdVU0VfVElNRVJTIGlzIHNldCB0byAxLiAgQ2hlY2sgdGhhdCB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUNCisJdGltZXIgc2VydmljZSB0YXNrIGhhcyBiZWVuIGNyZWF0ZWQvaW5pdGlhbGlzZWQuICBJZiB0aW1lcnMgaGF2ZSBhbHJlYWR5DQorCWJlZW4gY3JlYXRlZCB0aGVuIHRoZSBpbml0aWFsaXNhdGlvbiB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHBlcmZvcm1lZC4gKi8NCisJcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZSgpOw0KKw0KKwlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQorCXsNCisJCSNpZiAoIElOQ0xVREVfeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlID09IDEgKQ0KKwkJew0KKwkJCS8qIENyZWF0ZSB0aGUgdGltZXIgdGFzaywgc3RvcmluZyBpdHMgaGFuZGxlIGluIHhUaW1lclRhc2tIYW5kbGUgc28NCisJCQlpdCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSgpIGZ1bmN0aW9uLiAqLw0KKwkJCXhSZXR1cm4gPSB4VGFza0dlbmVyaWNDcmVhdGUoIHBydlRpbWVyVGFzaywgKCBjb25zdCBzaWduZWQgY2hhciAqICkgIlRtciBTdmMiLCAoIHVuc2lnbmVkIHNob3J0ICkgY29uZmlnVElNRVJfVEFTS19TVEFDS19ERVBUSCwgTlVMTCwgKCAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBjb25maWdUSU1FUl9UQVNLX1BSSU9SSVRZICkgfCBwb3J0UFJJVklMRUdFX0JJVCwgJnhUaW1lclRhc2tIYW5kbGUsIChwb3J0U1RBQ0tfVFlQRSopJnNUaW1lclN0YWNrLCBOVUxMICk7CQ0KKwkJfQ0KKwkJI2Vsc2UNCisJCXsNCisJCQkvKiBDcmVhdGUgdGhlIHRpbWVyIHRhc2sgd2l0aG91dCBzdG9yaW5nIGl0cyBoYW5kbGUuICovDQorCQkJeFJldHVybiA9IHhUYXNrR2VuZXJpY0NyZWF0ZSggcHJ2VGltZXJUYXNrLCAoIGNvbnN0IHNpZ25lZCBjaGFyICogKSAiVG1yIFN2YyIsICggdW5zaWduZWQgc2hvcnQgKSBjb25maWdUSU1FUl9UQVNLX1NUQUNLX0RFUFRILCBOVUxMLCAoICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkgKSB8IHBvcnRQUklWSUxFR0VfQklULCBOVUxMLCAocG9ydFNUQUNLX1RZUEUqKSZzVGltZXJTdGFjaywgTlVMTCk7DQorCQl9DQorCQkjZW5kaWYNCisJfQ0KKw0KKwljb25maWdBU1NFUlQoIHhSZXR1cm4gKTsNCisJcmV0dXJuIHhSZXR1cm47DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3hUaW1lckhhbmRsZSB4VGltZXJDcmVhdGUoIGNvbnN0IHNpZ25lZCBjaGFyICpwY1RpbWVyTmFtZSwgcG9ydFRpY2tUeXBlIHhUaW1lclBlcmlvZEluVGlja3MsIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgdXhBdXRvUmVsb2FkLCB2b2lkICpwdlRpbWVySUQsIHRtclRJTUVSX0NBTExCQUNLIHB4Q2FsbGJhY2tGdW5jdGlvbiApDQorew0KK3hUSU1FUiAqcHhOZXdUaW1lcjsNCisNCisJLyogQWxsb2NhdGUgdGhlIHRpbWVyIHN0cnVjdHVyZS4gKi8NCisJaWYoIHhUaW1lclBlcmlvZEluVGlja3MgPT0gKCBwb3J0VGlja1R5cGUgKSAwVSApDQorCXsNCisJCXB4TmV3VGltZXIgPSBOVUxMOw0KKwkJY29uZmlnQVNTRVJUKCAoIHhUaW1lclBlcmlvZEluVGlja3MgPiAwICkgKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXB4TmV3VGltZXIgPSAoIHhUSU1FUiAqICkgcG9vbEFsbG9jYXRlQnVmZmVyKCZzVGltZXJzUG9vbCk7DQorCQlpZiggcHhOZXdUaW1lciAhPSBOVUxMICkNCisJCXsNCisJCQkvKiBFbnN1cmUgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIHRpbWVyIHNlcnZpY2UgdGFzayBoYXMgYmVlbg0KKwkJCWNyZWF0ZWQvaW5pdGlhbGlzZWQuICovDQorCQkJcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZSgpOw0KKwkNCisJCQkvKiBJbml0aWFsaXNlIHRoZSB0aW1lciBzdHJ1Y3R1cmUgbWVtYmVycyB1c2luZyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi8NCisJCQlweE5ld1RpbWVyLT5wY1RpbWVyTmFtZSA9IHBjVGltZXJOYW1lOw0KKwkJCXB4TmV3VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MgPSB4VGltZXJQZXJpb2RJblRpY2tzOw0KKwkJCXB4TmV3VGltZXItPnV4QXV0b1JlbG9hZCA9IHV4QXV0b1JlbG9hZDsNCisJCQlweE5ld1RpbWVyLT5wdlRpbWVySUQgPSBwdlRpbWVySUQ7DQorCQkJcHhOZXdUaW1lci0+cHhDYWxsYmFja0Z1bmN0aW9uID0gcHhDYWxsYmFja0Z1bmN0aW9uOw0KKwkJCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4TmV3VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCisJCQkNCisJCQl0cmFjZVRJTUVSX0NSRUFURSggcHhOZXdUaW1lciApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXRyYWNlVElNRVJfQ1JFQVRFX0ZBSUxFRCgpOw0KKwkJfQ0KKwl9DQorCQ0KKwlyZXR1cm4gKCB4VGltZXJIYW5kbGUgKSBweE5ld1RpbWVyOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitwb3J0QkFTRV9UWVBFIHhUaW1lckdlbmVyaWNDb21tYW5kKCB4VGltZXJIYW5kbGUgeFRpbWVyLCBwb3J0QkFTRV9UWVBFIHhDb21tYW5kSUQsIHBvcnRUaWNrVHlwZSB4T3B0aW9uYWxWYWx1ZSwgc2lnbmVkIHBvcnRCQVNFX1RZUEUgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sIHBvcnRUaWNrVHlwZSB4QmxvY2tUaW1lICkNCit7DQorcG9ydEJBU0VfVFlQRSB4UmV0dXJuID0gcGRGQUlMOw0KK3hUSU1FUl9NRVNTQUdFIHhNZXNzYWdlOw0KKw0KKwkvKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrIHRvIHBlcmZvcm0gYSBwYXJ0aWN1bGFyIGFjdGlvbg0KKwlvbiBhIHBhcnRpY3VsYXIgdGltZXIgZGVmaW5pdGlvbi4gKi8NCisJaWYoIHhUaW1lclF1ZXVlICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrIHRvIHN0YXJ0IHRoZSB4VGltZXIgdGltZXIuICovDQorCQl4TWVzc2FnZS54TWVzc2FnZUlEID0geENvbW1hbmRJRDsNCisJCXhNZXNzYWdlLnhNZXNzYWdlVmFsdWUgPSB4T3B0aW9uYWxWYWx1ZTsNCisJCXhNZXNzYWdlLnB4VGltZXIgPSAoIHhUSU1FUiAqICkgeFRpbWVyOw0KKw0KKwkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPT0gTlVMTCApDQorCQl7DQorCQkJaWYoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1JVTk5JTkcgKQ0KKwkJCXsNCisJCQkJeFJldHVybiA9IHhRdWV1ZVNlbmRUb0JhY2soIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHhCbG9ja1RpbWUgKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJeFJldHVybiA9IHhRdWV1ZVNlbmRUb0JhY2soIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHRtck5PX0RFTEFZICk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXhSZXR1cm4gPSB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUiggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KKwkJfQ0KKwkJDQorCQl0cmFjZVRJTUVSX0NPTU1BTkRfU0VORCggeFRpbWVyLCB4Q29tbWFuZElELCB4T3B0aW9uYWxWYWx1ZSwgeFJldHVybiApOw0KKwl9DQorCQ0KKwlyZXR1cm4geFJldHVybjsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmICggSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUgPT0gMSApDQorDQorCXhUYXNrSGFuZGxlIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSggdm9pZCApDQorCXsNCisJCS8qIElmIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSgpIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBoYXMgYmVlbg0KKwkJc3RhcnRlZCwgdGhlbiB4VGltZXJUYXNrSGFuZGxlIHdpbGwgYmUgTlVMTC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCB4VGltZXJUYXNrSGFuZGxlICE9IE5VTEwgKSApOw0KKwkJcmV0dXJuIHhUaW1lclRhc2tIYW5kbGU7DQorCX0NCisJDQorI2VuZGlmDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc0V4cGlyZWRUaW1lciggcG9ydFRpY2tUeXBlIHhOZXh0RXhwaXJlVGltZSwgcG9ydFRpY2tUeXBlIHhUaW1lTm93ICkNCit7DQoreFRJTUVSICpweFRpbWVyOw0KK3BvcnRCQVNFX1RZUEUgeFJlc3VsdDsNCisNCisJLyogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSB0aW1lcnMuICBBIGNoZWNrIGhhcyBhbHJlYWR5DQorCWJlZW4gcGVyZm9ybWVkIHRvIGVuc3VyZSB0aGUgbGlzdCBpcyBub3QgZW1wdHkuICovDQorCXB4VGltZXIgPSAoIHhUSU1FUiAqICkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCisJdkxpc3RSZW1vdmUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCisJdHJhY2VUSU1FUl9FWFBJUkVEKCBweFRpbWVyICk7DQorDQorCS8qIElmIHRoZSB0aW1lciBpcyBhbiBhdXRvIHJlbG9hZCB0aW1lciB0aGVuIGNhbGN1bGF0ZSB0aGUgbmV4dA0KKwlleHBpcnkgdGltZSBhbmQgcmUtaW5zZXJ0IHRoZSB0aW1lciBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLiAqLw0KKwlpZiggcHhUaW1lci0+dXhBdXRvUmVsb2FkID09ICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApIHBkVFJVRSApDQorCXsNCisJCS8qIFRoaXMgaXMgdGhlIG9ubHkgdGltZSBhIHRpbWVyIGlzIGluc2VydGVkIGludG8gYSBsaXN0IHVzaW5nDQorCQlhIHRpbWUgcmVsYXRpdmUgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB0aW1lLiAgSXQNCisJCXdpbGwgdGhlcmVmb3JlIGJlIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgbGlzdCByZWxhdGl2ZSB0bw0KKwkJdGhlIHRpbWUgdGhpcyB0YXNrIHRoaW5rcyBpdCBpcyBub3csIGV2ZW4gaWYgYSBjb21tYW5kIHRvDQorCQlzd2l0Y2ggbGlzdHMgZHVlIHRvIGEgdGljayBjb3VudCBvdmVyZmxvdyBpcyBhbHJlYWR5IHdhaXRpbmcgaW4NCisJCXRoZSB0aW1lciBxdWV1ZS4gKi8NCisJCWlmKCBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdCggcHhUaW1lciwgKCB4TmV4dEV4cGlyZVRpbWUgKyBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzICksIHhUaW1lTm93LCB4TmV4dEV4cGlyZVRpbWUgKSA9PSBwZFRSVUUgKQ0KKwkJew0KKwkJCS8qIFRoZSB0aW1lciBleHBpcmVkIGJlZm9yZSBpdCB3YXMgYWRkZWQgdG8gdGhlIGFjdGl2ZSB0aW1lcg0KKwkJCWxpc3QuICBSZWxvYWQgaXQgbm93LiAgKi8NCisJCQl4UmVzdWx0ID0geFRpbWVyR2VuZXJpY0NvbW1hbmQoIHB4VGltZXIsIHRtckNPTU1BTkRfU1RBUlQsIHhOZXh0RXhwaXJlVGltZSwgTlVMTCwgdG1yTk9fREVMQVkgKTsNCisJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCisJCQkoIHZvaWQgKSB4UmVzdWx0Ow0KKwkJfQ0KKwl9DQorDQorCS8qIENhbGwgdGhlIHRpbWVyIGNhbGxiYWNrLiAqLw0KKwlweFRpbWVyLT5weENhbGxiYWNrRnVuY3Rpb24oICggeFRpbWVySGFuZGxlICkgcHhUaW1lciApOw0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZUaW1lclRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3BvcnRUaWNrVHlwZSB4TmV4dEV4cGlyZVRpbWU7DQorcG9ydEJBU0VfVFlQRSB4TGlzdFdhc0VtcHR5Ow0KKw0KKwkvKiBKdXN0IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KKwkoIHZvaWQgKSBwdlBhcmFtZXRlcnM7DQorDQorCWZvciggOzsgKQ0KKwl7DQorCQkvKiBRdWVyeSB0aGUgdGltZXJzIGxpc3QgdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGFueSB0aW1lcnMsIGFuZCBpZiBzbywNCisJCW9idGFpbiB0aGUgdGltZSBhdCB3aGljaCB0aGUgbmV4dCB0aW1lciB3aWxsIGV4cGlyZS4gKi8NCisJCXhOZXh0RXhwaXJlVGltZSA9IHBydkdldE5leHRFeHBpcmVUaW1lKCAmeExpc3RXYXNFbXB0eSApOw0KKw0KKwkJLyogSWYgYSB0aW1lciBoYXMgZXhwaXJlZCwgcHJvY2VzcyBpdC4gIE90aGVyd2lzZSwgYmxvY2sgdGhpcyB0YXNrDQorCQl1bnRpbCBlaXRoZXIgYSB0aW1lciBkb2VzIGV4cGlyZSwgb3IgYSBjb21tYW5kIGlzIHJlY2VpdmVkLiAqLw0KKwkJcHJ2UHJvY2Vzc1RpbWVyT3JCbG9ja1Rhc2soIHhOZXh0RXhwaXJlVGltZSwgeExpc3RXYXNFbXB0eSApOw0KKwkJDQorCQkvKiBFbXB0eSB0aGUgY29tbWFuZCBxdWV1ZS4gKi8NCisJCXBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzKCk7CQkNCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZQcm9jZXNzVGltZXJPckJsb2NrVGFzayggcG9ydFRpY2tUeXBlIHhOZXh0RXhwaXJlVGltZSwgcG9ydEJBU0VfVFlQRSB4TGlzdFdhc0VtcHR5ICkNCit7DQorcG9ydFRpY2tUeXBlIHhUaW1lTm93Ow0KK3BvcnRCQVNFX1RZUEUgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQ7DQorDQorCXZUYXNrU3VzcGVuZEFsbCgpOw0KKwl7DQorCQkvKiBPYnRhaW4gdGhlIHRpbWUgbm93IHRvIG1ha2UgYW4gYXNzZXNzbWVudCBhcyB0byB3aGV0aGVyIHRoZSB0aW1lcg0KKwkJaGFzIGV4cGlyZWQgb3Igbm90LiAgSWYgb2J0YWluaW5nIHRoZSB0aW1lIGNhdXNlcyB0aGUgbGlzdHMgdG8gc3dpdGNoDQorCQl0aGVuIGRvbid0IHByb2Nlc3MgdGhpcyB0aW1lciBhcyBhbnkgdGltZXJzIHRoYXQgcmVtYWluZWQgaW4gdGhlIGxpc3QNCisJCXdoZW4gdGhlIGxpc3RzIHdlcmUgc3dpdGNoZWQgd2lsbCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHdpdGhpbiB0aGUNCisJCXBydlNhbXBlbFRpbWVOb3coKSBmdW5jdGlvbi4gKi8NCisJCXhUaW1lTm93ID0gcHJ2U2FtcGxlVGltZU5vdyggJnhUaW1lckxpc3RzV2VyZVN3aXRjaGVkICk7DQorCQlpZiggeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgPT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogVGhlIHRpY2sgY291bnQgaGFzIG5vdCBvdmVyZmxvd2VkLCBoYXMgdGhlIHRpbWVyIGV4cGlyZWQ/ICovDQorCQkJaWYoICggeExpc3RXYXNFbXB0eSA9PSBwZEZBTFNFICkgJiYgKCB4TmV4dEV4cGlyZVRpbWUgPD0geFRpbWVOb3cgKSApDQorCQkJew0KKwkJCQl4VGFza1Jlc3VtZUFsbCgpOw0KKwkJCQlwcnZQcm9jZXNzRXhwaXJlZFRpbWVyKCB4TmV4dEV4cGlyZVRpbWUsIHhUaW1lTm93ICk7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCS8qIFRoZSB0aWNrIGNvdW50IGhhcyBub3Qgb3ZlcmZsb3dlZCwgYW5kIHRoZSBuZXh0IGV4cGlyZQ0KKwkJCQl0aW1lIGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gIFRoaXMgdGFzayBzaG91bGQgdGhlcmVmb3JlDQorCQkJCWJsb2NrIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGV4cGlyZSB0aW1lIG9yIGEgY29tbWFuZCB0byBiZQ0KKwkJCQlyZWNlaXZlZCAtIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFRoZSBmb2xsb3dpbmcgbGluZSBjYW5ub3QNCisJCQkJYmUgcmVhY2hlZCB1bmxlc3MgeE5leHRFeHBpcmVUaW1lID4geFRpbWVOb3csIGV4Y2VwdCBpbiB0aGUNCisJCQkJY2FzZSB3aGVuIHRoZSBjdXJyZW50IHRpbWVyIGxpc3QgaXMgZW1wdHkuICovDQorCQkJCXZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZCggeFRpbWVyUXVldWUsICggeE5leHRFeHBpcmVUaW1lIC0geFRpbWVOb3cgKSApOw0KKw0KKwkJCQlpZiggeFRhc2tSZXN1bWVBbGwoKSA9PSBwZEZBTFNFICkNCisJCQkJew0KKwkJCQkJLyogWWllbGQgdG8gd2FpdCBmb3IgZWl0aGVyIGEgY29tbWFuZCB0byBhcnJpdmUsIG9yIHRoZSBibG9jayB0aW1lDQorCQkJCQl0byBleHBpcmUuICBJZiBhIGNvbW1hbmQgYXJyaXZlZCBiZXR3ZWVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIGJlaW5nDQorCQkJCQlleGl0ZWQgYW5kIHRoaXMgeWllbGQgdGhlbiB0aGUgeWllbGQgd2lsbCBub3QgY2F1c2UgdGhlIHRhc2sNCisJCQkJCXRvIGJsb2NrLiAqLw0KKwkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl4VGFza1Jlc3VtZUFsbCgpOw0KKwkJfQ0KKwl9DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBwb3J0VGlja1R5cGUgcHJ2R2V0TmV4dEV4cGlyZVRpbWUoIHBvcnRCQVNFX1RZUEUgKnB4TGlzdFdhc0VtcHR5ICkNCit7DQorcG9ydFRpY2tUeXBlIHhOZXh0RXhwaXJlVGltZTsNCisNCisJLyogVGltZXJzIGFyZSBsaXN0ZWQgaW4gZXhwaXJ5IHRpbWUgb3JkZXIsIHdpdGggdGhlIGhlYWQgb2YgdGhlIGxpc3QNCisJcmVmZXJlbmNpbmcgdGhlIHRhc2sgdGhhdCB3aWxsIGV4cGlyZSBmaXJzdC4gIE9idGFpbiB0aGUgdGltZSBhdCB3aGljaA0KKwl0aGUgdGltZXIgd2l0aCB0aGUgbmVhcmVzdCBleHBpcnkgdGltZSB3aWxsIGV4cGlyZS4gIElmIHRoZXJlIGFyZSBubw0KKwlhY3RpdmUgdGltZXJzIHRoZW4ganVzdCBzZXQgdGhlIG5leHQgZXhwaXJlIHRpbWUgdG8gMC4gIFRoYXQgd2lsbCBjYXVzZQ0KKwl0aGlzIHRhc2sgdG8gdW5ibG9jayB3aGVuIHRoZSB0aWNrIGNvdW50IG92ZXJmbG93cywgYXQgd2hpY2ggcG9pbnQgdGhlDQorCXRpbWVyIGxpc3RzIHdpbGwgYmUgc3dpdGNoZWQgYW5kIHRoZSBuZXh0IGV4cGlyeSB0aW1lIGNhbiBiZQ0KKwlyZS1hc3Nlc3NlZC4gICovDQorCSpweExpc3RXYXNFbXB0eSA9IGxpc3RMSVNUX0lTX0VNUFRZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCisJaWYoICpweExpc3RXYXNFbXB0eSA9PSBwZEZBTFNFICkNCisJew0KKwkJeE5leHRFeHBpcmVUaW1lID0gbGlzdEdFVF9JVEVNX1ZBTFVFX09GX0hFQURfRU5UUlkoIHB4Q3VycmVudFRpbWVyTGlzdCApOw0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogRW5zdXJlIHRoZSB0YXNrIHVuYmxvY2tzIHdoZW4gdGhlIHRpY2sgY291bnQgcm9sbHMgb3Zlci4gKi8NCisJCXhOZXh0RXhwaXJlVGltZSA9ICggcG9ydFRpY2tUeXBlICkgMFU7DQorCX0NCisNCisJcmV0dXJuIHhOZXh0RXhwaXJlVGltZTsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorc3RhdGljIHBvcnRUaWNrVHlwZSBwcnZTYW1wbGVUaW1lTm93KCBwb3J0QkFTRV9UWVBFICpweFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKQ0KK3sNCitwb3J0VGlja1R5cGUgeFRpbWVOb3c7DQorUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBwb3J0VGlja1R5cGUgeExhc3RUaW1lID0gKCBwb3J0VGlja1R5cGUgKSAwVTsNCisNCisJeFRpbWVOb3cgPSB4VGFza0dldFRpY2tDb3VudCgpOw0KKwkNCisJaWYoIHhUaW1lTm93IDwgeExhc3RUaW1lICkNCisJew0KKwkJcHJ2U3dpdGNoVGltZXJMaXN0cyggeExhc3RUaW1lICk7DQorCQkqcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkID0gcGRUUlVFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJKnB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCA9IHBkRkFMU0U7DQorCX0NCisJDQorCXhMYXN0VGltZSA9IHhUaW1lTm93Ow0KKwkNCisJcmV0dXJuIHhUaW1lTm93Ow0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgcG9ydEJBU0VfVFlQRSBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdCggeFRJTUVSICpweFRpbWVyLCBwb3J0VGlja1R5cGUgeE5leHRFeHBpcnlUaW1lLCBwb3J0VGlja1R5cGUgeFRpbWVOb3csIHBvcnRUaWNrVHlwZSB4Q29tbWFuZFRpbWUgKQ0KK3sNCitwb3J0QkFTRV9UWVBFIHhQcm9jZXNzVGltZXJOb3cgPSBwZEZBTFNFOw0KKw0KKwlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSwgeE5leHRFeHBpcnlUaW1lICk7DQorCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApLCBweFRpbWVyICk7DQorCQ0KKwlpZiggeE5leHRFeHBpcnlUaW1lIDw9IHhUaW1lTm93ICkNCisJew0KKwkJLyogSGFzIHRoZSBleHBpcnkgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlIGNvbW1hbmQgdG8gc3RhcnQvcmVzZXQgYQ0KKwkJdGltZXIgd2FzIGlzc3VlZCwgYW5kIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBwcm9jZXNzZWQ/ICovDQorCQlpZiggKCAoIHBvcnRUaWNrVHlwZSApICggeFRpbWVOb3cgLSB4Q29tbWFuZFRpbWUgKSApID49IHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MgKQ0KKwkJew0KKwkJCS8qIFRoZSB0aW1lIGJldHdlZW4gYSBjb21tYW5kIGJlaW5nIGlzc3VlZCBhbmQgdGhlIGNvbW1hbmQgYmVpbmcNCisJCQlwcm9jZXNzZWQgYWN0dWFsbHkgZXhjZWVkcyB0aGUgdGltZXJzIHBlcmlvZC4gICovDQorCQkJeFByb2Nlc3NUaW1lck5vdyA9IHBkVFJVRTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl2TGlzdEluc2VydCggcHhPdmVyZmxvd1RpbWVyTGlzdCwgJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJaWYoICggeFRpbWVOb3cgPCB4Q29tbWFuZFRpbWUgKSAmJiAoIHhOZXh0RXhwaXJ5VGltZSA+PSB4Q29tbWFuZFRpbWUgKSApDQorCQl7DQorCQkJLyogSWYsIHNpbmNlIHRoZSBjb21tYW5kIHdhcyBpc3N1ZWQsIHRoZSB0aWNrIGNvdW50IGhhcyBvdmVyZmxvd2VkDQorCQkJYnV0IHRoZSBleHBpcnkgdGltZSBoYXMgbm90LCB0aGVuIHRoZSB0aW1lciBtdXN0IGhhdmUgYWxyZWFkeSBwYXNzZWQNCisJCQlpdHMgZXhwaXJ5IHRpbWUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgaW1tZWRpYXRlbHkuICovDQorCQkJeFByb2Nlc3NUaW1lck5vdyA9IHBkVFJVRTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl2TGlzdEluc2VydCggcHhDdXJyZW50VGltZXJMaXN0LCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIHhQcm9jZXNzVGltZXJOb3c7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyB2b2lkCXBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzKCB2b2lkICkNCit7DQoreFRJTUVSX01FU1NBR0UgeE1lc3NhZ2U7DQoreFRJTUVSICpweFRpbWVyOw0KK3BvcnRCQVNFX1RZUEUgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQsIHhSZXN1bHQ7DQorcG9ydFRpY2tUeXBlIHhUaW1lTm93Ow0KKw0KKwl3aGlsZSggeFF1ZXVlUmVjZWl2ZSggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgdG1yTk9fREVMQVkgKSAhPSBwZEZBSUwgKQ0KKwl7DQorCQlweFRpbWVyID0geE1lc3NhZ2UucHhUaW1lcjsNCisNCisJCS8qIElzIHRoZSB0aW1lciBhbHJlYWR5IGluIGEgbGlzdCBvZiBhY3RpdmUgdGltZXJzPyAgV2hlbiB0aGUgY29tbWFuZA0KKwkJaXMgdHJtQ09NTUFORF9QUk9DRVNTX1RJTUVSX09WRVJGTE9XLCB0aGUgdGltZXIgd2lsbCBiZSBOVUxMIGFzIHRoZQ0KKwkJY29tbWFuZCBpcyB0byB0aGUgdGFzayByYXRoZXIgdGhhbiB0byBhbiBpbmRpdmlkdWFsIHRpbWVyLiAqLw0KKwkJaWYoIHB4VGltZXIgIT0gTlVMTCApDQorCQl7DQorCQkJaWYoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCBOVUxMLCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICkgPT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQkvKiBUaGUgdGltZXIgaXMgaW4gYSBsaXN0LCByZW1vdmUgaXQuICovDQorCQkJCXZMaXN0UmVtb3ZlKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJdHJhY2VUSU1FUl9DT01NQU5EX1JFQ0VJVkVEKCBweFRpbWVyLCB4TWVzc2FnZS54TWVzc2FnZUlELCB4TWVzc2FnZS54TWVzc2FnZVZhbHVlICk7DQorCQkNCisgICAgICAgLyogSW4gdGhpcyBjYXNlIHRoZSB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIGJ1dA0KKwkJICBpdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGZ1bmN0aW9uIGNhbGwuICBwcnZTYW1wbGVUaW1lTm93KCkgbXVzdCBiZQ0KKyAgICAgICAgICBjYWxsZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSB4VGltZXJRdWV1ZSBzbyB0aGVyZSBpcyBubw0KKyAgICAgICAgICBwb3NzaWJpbGl0eSBvZiBhIGhpZ2hlciBwcmlvcml0eSB0YXNrIGFkZGluZyBhIG1lc3NhZ2UgdG8gdGhlIG1lc3NhZ2UNCisgICAgICAgICAgcXVldWUgd2l0aCBhIHRpbWUgdGhhdCBpcyBhaGVhZCBvZiB0aGUgdGltZXIgZGFlbW9uIHRhc2sgKGJlY2F1c2UgaXQNCisgICAgICAgICAgcHJlLWVtcHRlZCB0aGUgdGltZXIgZGFlbW9uIHRhc2sgYWZ0ZXIgdGhlIHhUaW1lTm93IHZhbHVlIHdhcyBzZXQpLiAqLw0KKw0KKyAgICAgICAgeFRpbWVOb3cgPSBwcnZTYW1wbGVUaW1lTm93KCAmeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKTsNCisNCisJCXN3aXRjaCggeE1lc3NhZ2UueE1lc3NhZ2VJRCApDQorCQl7DQorCQkJY2FzZSB0bXJDT01NQU5EX1NUQVJUIDoJDQorCQkJCS8qIFN0YXJ0IG9yIHJlc3RhcnQgYSB0aW1lci4gKi8NCisJCQkJaWYoIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBweFRpbWVyLCAgeE1lc3NhZ2UueE1lc3NhZ2VWYWx1ZSArIHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MsIHhUaW1lTm93LCB4TWVzc2FnZS54TWVzc2FnZVZhbHVlICkgPT0gcGRUUlVFICkNCisJCQkJew0KKwkJCQkJLyogVGhlIHRpbWVyIGV4cGlyZWQgYmVmb3JlIGl0IHdhcyBhZGRlZCB0byB0aGUgYWN0aXZlIHRpbWVyDQorCQkJCQlsaXN0LiAgUHJvY2VzcyBpdCBub3cuICovDQorCQkJCQlweFRpbWVyLT5weENhbGxiYWNrRnVuY3Rpb24oICggeFRpbWVySGFuZGxlICkgcHhUaW1lciApOw0KKw0KKwkJCQkJaWYoIHB4VGltZXItPnV4QXV0b1JlbG9hZCA9PSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBwZFRSVUUgKQ0KKwkJCQkJew0KKwkJCQkJCXhSZXN1bHQgPSB4VGltZXJHZW5lcmljQ29tbWFuZCggcHhUaW1lciwgdG1yQ09NTUFORF9TVEFSVCwgeE1lc3NhZ2UueE1lc3NhZ2VWYWx1ZSArIHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MsIE5VTEwsIHRtck5PX0RFTEFZICk7DQorCQkJCQkJY29uZmlnQVNTRVJUKCB4UmVzdWx0ICk7DQorCQkJCQkJKCB2b2lkICkgeFJlc3VsdDsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlicmVhazsNCisNCisJCQljYXNlIHRtckNPTU1BTkRfU1RPUCA6CQ0KKwkJCQkvKiBUaGUgdGltZXIgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBsaXN0Lg0KKwkJCQlUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuICovDQorCQkJCWJyZWFrOw0KKw0KKwkJCWNhc2UgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9EIDoNCisJCQkJcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyA9IHhNZXNzYWdlLnhNZXNzYWdlVmFsdWU7DQorCQkJCWNvbmZpZ0FTU0VSVCggKCBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzID4gMCApICk7DQorCQkJCXBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBweFRpbWVyLCAoIHhUaW1lTm93ICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyApLCB4VGltZU5vdywgeFRpbWVOb3cgKTsNCisJCQkJYnJlYWs7DQorDQorCQkJY2FzZSB0bXJDT01NQU5EX0RFTEVURSA6DQorCQkJCS8qIFRoZSB0aW1lciBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgYWN0aXZlIGxpc3QsDQorCQkJCWp1c3QgZnJlZSB1cCB0aGUgbWVtb3J5LiAqLw0KKyAgICAgICAgICAgICAgICBwb29sRnJlZUJ1ZmZlcigmc1RpbWVyc1Bvb2wsIHB4VGltZXIpOw0KKwkJCQlicmVhazsNCisNCisJCQlkZWZhdWx0CToJCQkNCisJCQkJLyogRG9uJ3QgZXhwZWN0IHRvIGdldCBoZXJlLiAqLw0KKwkJCQlicmVhazsNCisJCX0NCisJfQ0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitzdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaW1lckxpc3RzKCBwb3J0VGlja1R5cGUgeExhc3RUaW1lICkNCit7DQorcG9ydFRpY2tUeXBlIHhOZXh0RXhwaXJlVGltZSwgeFJlbG9hZFRpbWU7DQoreExpc3QgKnB4VGVtcDsNCit4VElNRVIgKnB4VGltZXI7DQorcG9ydEJBU0VfVFlQRSB4UmVzdWx0Ow0KKw0KKwkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgaWYgY29uZmlnQVNTRVJUKCkgaXMgbm90IGRlZmluZWQuICovDQorCSggdm9pZCApIHhMYXN0VGltZTsNCisJDQorCS8qIFRoZSB0aWNrIGNvdW50IGhhcyBvdmVyZmxvd2VkLiAgVGhlIHRpbWVyIGxpc3RzIG11c3QgYmUgc3dpdGNoZWQuDQorCUlmIHRoZXJlIGFyZSBhbnkgdGltZXJzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0aGUgY3VycmVudCB0aW1lciBsaXN0DQorCXRoZW4gdGhleSBtdXN0IGhhdmUgZXhwaXJlZCBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGxpc3RzDQorCWFyZSBzd2l0Y2hlZC4gKi8NCisJd2hpbGUoIGxpc3RMSVNUX0lTX0VNUFRZKCBweEN1cnJlbnRUaW1lckxpc3QgKSA9PSBwZEZBTFNFICkNCisJew0KKwkJeE5leHRFeHBpcmVUaW1lID0gbGlzdEdFVF9JVEVNX1ZBTFVFX09GX0hFQURfRU5UUlkoIHB4Q3VycmVudFRpbWVyTGlzdCApOw0KKw0KKwkJLyogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSBsaXN0LiAqLw0KKwkJcHhUaW1lciA9ICggeFRJTUVSICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4Q3VycmVudFRpbWVyTGlzdCApOw0KKwkJdkxpc3RSZW1vdmUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCisNCisJCS8qIEV4ZWN1dGUgaXRzIGNhbGxiYWNrLCB0aGVuIHNlbmQgYSBjb21tYW5kIHRvIHJlc3RhcnQgdGhlIHRpbWVyIGlmDQorCQlpdCBpcyBhbiBhdXRvLXJlbG9hZCB0aW1lci4gIEl0IGNhbm5vdCBiZSByZXN0YXJ0ZWQgaGVyZSBhcyB0aGUgbGlzdHMNCisJCWhhdmUgbm90IHlldCBiZWVuIHN3aXRjaGVkLiAqLw0KKwkJcHhUaW1lci0+cHhDYWxsYmFja0Z1bmN0aW9uKCAoIHhUaW1lckhhbmRsZSApIHB4VGltZXIgKTsNCisNCisJCWlmKCBweFRpbWVyLT51eEF1dG9SZWxvYWQgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgcGRUUlVFICkNCisJCXsNCisJCQkvKiBDYWxjdWxhdGUgdGhlIHJlbG9hZCB2YWx1ZSwgYW5kIGlmIHRoZSByZWxvYWQgdmFsdWUgcmVzdWx0cyBpbg0KKwkJCXRoZSB0aW1lciBnb2luZyBpbnRvIHRoZSBzYW1lIHRpbWVyIGxpc3QgdGhlbiBpdCBoYXMgYWxyZWFkeSBleHBpcmVkDQorCQkJYW5kIHRoZSB0aW1lciBzaG91bGQgYmUgcmUtaW5zZXJ0ZWQgaW50byB0aGUgY3VycmVudCBsaXN0IHNvIGl0IGlzDQorCQkJcHJvY2Vzc2VkIGFnYWluIHdpdGhpbiB0aGlzIGxvb3AuICBPdGhlcndpc2UgYSBjb21tYW5kIHNob3VsZCBiZSBzZW50DQorCQkJdG8gcmVzdGFydCB0aGUgdGltZXIgdG8gZW5zdXJlIGl0IGlzIG9ubHkgaW5zZXJ0ZWQgaW50byBhIGxpc3QgYWZ0ZXINCisJCQl0aGUgbGlzdHMgaGF2ZSBiZWVuIHN3YXBwZWQuICovDQorCQkJeFJlbG9hZFRpbWUgPSAoIHhOZXh0RXhwaXJlVGltZSArIHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MgKTsNCisJCQlpZiggeFJlbG9hZFRpbWUgPiB4TmV4dEV4cGlyZVRpbWUgKQ0KKwkJCXsNCisJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICksIHhSZWxvYWRUaW1lICk7DQorCQkJCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApLCBweFRpbWVyICk7DQorCQkJCXZMaXN0SW5zZXJ0KCBweEN1cnJlbnRUaW1lckxpc3QsICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJeFJlc3VsdCA9IHhUaW1lckdlbmVyaWNDb21tYW5kKCBweFRpbWVyLCB0bXJDT01NQU5EX1NUQVJULCB4TmV4dEV4cGlyZVRpbWUsIE5VTEwsIHRtck5PX0RFTEFZICk7DQorCQkJCWNvbmZpZ0FTU0VSVCggeFJlc3VsdCApOw0KKwkJCQkoIHZvaWQgKSB4UmVzdWx0Ow0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlweFRlbXAgPSBweEN1cnJlbnRUaW1lckxpc3Q7DQorCXB4Q3VycmVudFRpbWVyTGlzdCA9IHB4T3ZlcmZsb3dUaW1lckxpc3Q7DQorCXB4T3ZlcmZsb3dUaW1lckxpc3QgPSBweFRlbXA7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3N0YXRpYyBzdHJ1Y3Qgew0KKyAgICB4VElNRVJfTUVTU0FHRSBtZXNzYWdlc1tjb25maWdUSU1FUl9RVUVVRV9MRU5HVEhdOw0KKyAgICB1aW50OF90IGV4dHJhOw0KK30gdGltZXJzUXVldWU7DQorDQorc3RhdGljIHZvaWQgcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZSggdm9pZCApDQorew0KKwkvKiBDaGVjayB0aGF0IHRoZSBsaXN0IGZyb20gd2hpY2ggYWN0aXZlIHRpbWVycyBhcmUgcmVmZXJlbmNlZCwgYW5kIHRoZQ0KKwlxdWV1ZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHRpbWVyIHNlcnZpY2UsIGhhdmUgYmVlbg0KKwlpbml0aWFsaXNlZC4gKi8NCisJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQorCXsNCisJCWlmKCB4VGltZXJRdWV1ZSA9PSBOVUxMICkNCisJCXsNCisJCQl2TGlzdEluaXRpYWxpc2UoICZ4QWN0aXZlVGltZXJMaXN0MSApOw0KKwkJCXZMaXN0SW5pdGlhbGlzZSggJnhBY3RpdmVUaW1lckxpc3QyICk7DQorCQkJcHhDdXJyZW50VGltZXJMaXN0ID0gJnhBY3RpdmVUaW1lckxpc3QxOw0KKwkJCXB4T3ZlcmZsb3dUaW1lckxpc3QgPSAmeEFjdGl2ZVRpbWVyTGlzdDI7DQorCQkJeFRpbWVyUXVldWUgPSB4UXVldWVDcmVhdGUoICh2b2lkKikgJnRpbWVyc1F1ZXVlLCAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBjb25maWdUSU1FUl9RVUVVRV9MRU5HVEgsIHNpemVvZiggeFRJTUVSX01FU1NBR0UgKSApOw0KKwkJfQ0KKwl9DQorCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3BvcnRCQVNFX1RZUEUgeFRpbWVySXNUaW1lckFjdGl2ZSggeFRpbWVySGFuZGxlIHhUaW1lciApDQorew0KK3BvcnRCQVNFX1RZUEUgeFRpbWVySXNJbkFjdGl2ZUxpc3Q7DQoreFRJTUVSICpweFRpbWVyID0gKCB4VElNRVIgKiApIHhUaW1lcjsNCisNCisJLyogSXMgdGhlIHRpbWVyIGluIHRoZSBsaXN0IG9mIGFjdGl2ZSB0aW1lcnM/ICovDQorCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwl7DQorCQkvKiBDaGVja2luZyB0byBzZWUgaWYgaXQgaXMgaW4gdGhlIE5VTEwgbGlzdCBpbiBlZmZlY3QgY2hlY2tzIHRvIHNlZSBpZg0KKwkJaXQgaXMgcmVmZXJlbmNlZCBmcm9tIGVpdGhlciB0aGUgY3VycmVudCBvciB0aGUgb3ZlcmZsb3cgdGltZXIgbGlzdHMgaW4NCisJCW9uZSBnbywgYnV0IHRoZSBsb2dpYyBoYXMgdG8gYmUgcmV2ZXJzZWQsIGhlbmNlIHRoZSAnIScuICovDQorCQl4VGltZXJJc0luQWN0aXZlTGlzdCA9ICEoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCBOVUxMLCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICkgKTsNCisJfQ0KKwl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKw0KKwlyZXR1cm4geFRpbWVySXNJbkFjdGl2ZUxpc3Q7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgKnB2VGltZXJHZXRUaW1lcklEKCB4VGltZXJIYW5kbGUgeFRpbWVyICkNCit7DQoreFRJTUVSICpweFRpbWVyID0gKCB4VElNRVIgKiApIHhUaW1lcjsNCisNCisJcmV0dXJuIHB4VGltZXItPnB2VGltZXJJRDsNCit9DQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogVGhpcyBlbnRpcmUgc291cmNlIGZpbGUgd2lsbCBiZSBza2lwcGVkIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgY29uZmlndXJlZA0KK3RvIGluY2x1ZGUgc29mdHdhcmUgdGltZXIgZnVuY3Rpb25hbGl0eS4gIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgc29mdHdhcmUgdGltZXINCitmdW5jdGlvbmFsaXR5IHRoZW4gZW5zdXJlIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyA9PSAxICovDQpkaWZmIC0tZ2l0IGEvRnJlZVJUT1MvcmVhZG1lLnR4dCBiL0ZyZWVSVE9TL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkZGM1MQotLS0gL2Rldi9udWxsCisrKyBiL0ZyZWVSVE9TL3JlYWRtZS50eHQKQEAgLTAsMCArMSwyMSBAQAorRGlyZWN0b3JpZXM6DQorDQorKyBUaGUgRnJlZVJUT1MvU291cmNlIGRpcmVjdG9yeSBjb250YWlucyB0aGUgRnJlZVJUT1Mgc291cmNlIGNvZGUsIGFuZCBjb250YWlucw0KKyAgaXRzIG93biByZWFkbWUgZmlsZS4NCisNCisrIFRoZSBGcmVlUlRPUy9EZW1vIGRpcmVjdG9yeSBjb250YWlucyBhIGRlbW8gYXBwbGljYXRpb24gZm9yIGV2ZXJ5IG9mZmljaWFsDQorRnJlZVJUT1MgcG9ydCwgYW5kIGNvbnRhaW5zIGl0cyBvd24gcmVhZG1lIGZpbGUuDQorDQorKyBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMDE3Lmh0bWwgZm9yIGZ1bGwgZGV0YWlscyBvZiB0aGUgZGlyZWN0b3J5IA0KKyAgc3RydWN0dXJlIGFuZCBpbmZvcm1hdGlvbiBvbiBsb2NhdGluZyB0aGUgZmlsZXMgeW91IHJlcXVpcmUuDQorDQorVGhlIGVhc2llc3Qgd2F5IHRvIHVzZSBGcmVlUlRPUyBpcyB0byBzdGFydCB3aXRoIG9uZSBvZiB0aGUgcHJlLWNvbmZpZ3VyZWQgZGVtbyANCithcHBsaWNhdGlvbiBwcm9qZWN0cyAoZm91bmQgaW4gdGhlIEZyZWVSVE9TL0RlbW8gZGlyZWN0b3J5KS4gIFRoYXQgd2F5IHlvdSB3aWxsDQoraGF2ZSB0aGUgY29ycmVjdCBGcmVlUlRPUyBzb3VyY2UgZmlsZXMgaW5jbHVkZWQsIGFuZCB0aGUgY29ycmVjdCBpbmNsdWRlIHBhdGhzDQorY29uZmlndXJlZC4gIE9uY2UgYSBkZW1vIGFwcGxpY2F0aW9uIGlzIGJ1aWxkaW5nIGFuZCBleGVjdXRpbmcgeW91IGNhbiByZW1vdmUNCit0aGUgZGVtbyBhcHBsaWNhdGlvbiBmaWxlLCBhbmQgc3RhcnQgdG8gYWRkIGluIHlvdXIgb3duIGFwcGxpY2F0aW9uIHNvdXJjZQ0KK2ZpbGVzLg0KKw0KK1NlZSBhbHNvIC0NCitodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9GcmVlUlRPUy1xdWljay1zdGFydC1ndWlkZS5odG1sDQoraHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sDQpkaWZmIC0tZ2l0IGEvcmVhZG1lLnR4dCBiL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwMzMyZAotLS0gL2Rldi9udWxsCisrKyBiL3JlYWRtZS50eHQKQEAgLTAsMCArMSwzMiBAQAorRGlyZWN0b3JpZXM6DQorDQorKyBGcmVlUlRPUy9zb3VyY2UgY29udGFpbnMgdGhlIEZyZWVSVE9TIHJlYWwgdGltZSBrZXJuZWwgc291cmNlIGNvZGUuDQorDQorKyBGcmVlUlRPUy9kZW1vIGNvbnRhaW5zIGEgcHJlLWNvbmZpZ3VyZWQgZGVtbyBwcm9qZWN0IGZvciBldmVyeSBvZmZpY2lhbCANCisgIEZyZWVSVE9TIHBvcnQuDQorICANCisrIEZyZWVSVE9TLVBsdXMgY29udGFpbnMgYWRkaXRpb25hbCBGcmVlUlRPUyBjb21wb25lbnRzIGFuZCB0aGlyZCBwYXJ0eSANCisgIGNvbXBsZW1lbnRhcnkgcHJvZHVjdHMuICBUSEVTRSBBUkUgTElDRU5TRUQgU0VQQVJBVEVMWSBGUk9NIEZyZWVSVE9TIGFsdGhvdWdoDQorICBhbGwgY29udGFpbiBvcGVuIHNvdXJjZSBvcHRpb25zLiAgU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGluIGVhY2ggcmVzcGVjdGl2ZQ0KKyAgZGlyZWN0b3J5IGZvciBpbmZvcm1hdGlvbi4NCisgIA0KKysgRnJlZVJUT1MtUGx1cy9EZW1vX1Byb2plY3RzX1VzaW5nX0ZyZWVSVE9TX1NpbXVsYXRvciBjb250YWlucyBwcmUtY29uZmlndXJlZA0KKyAgZGVtbyBwcm9qZWN0cyBmb3IgdGhlIEZyZWVSVE9TLVBsdXMgY29tcG9uZW50cy4gIFRoZSBkZW1vIHByb2plY3RzIHJ1biBpbg0KKyAgYSBXaW5kb3dzIGVudmlyb25tZW50IHVzaW5nIHRoZSBGcmVlUlRPUyB3aW5kb3dzIHNpbXVsYXRvci4gIFRoZXNlIGFyZSANCisgIGRvY3VtZW50ZWQgb24gdGhlIEZyZWVSVE9TIHdlYiBzaXRlIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMNCisNCisrIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAwMTcuaHRtbCBmb3IgZnVsbCBkZXRhaWxzIG9mIHRoZSBkaXJlY3RvcnkgDQorICBzdHJ1Y3R1cmUgYW5kIGluZm9ybWF0aW9uIG9uIGxvY2F0aW5nIHRoZSBmaWxlcyB5b3UgcmVxdWlyZS4NCisNCitGdXJ0aGVyIHJlYWRtZSBmaWxlcyBhcmUgY29udGFpbnMgaW4gc3ViLWRpcmVjdG9yaWVzIGFzIGFwcHJvcHJpYXRlLg0KKyAgDQorVGhlIGVhc2llc3Qgd2F5IHRvIHVzZSBGcmVlUlRPUyBpcyB0byBzdGFydCB3aXRoIG9uZSBvZiB0aGUgcHJlLWNvbmZpZ3VyZWQgZGVtbyANCithcHBsaWNhdGlvbiBwcm9qZWN0cyAoZm91bmQgaW4gdGhlIEZyZWVSVE9TL0RlbW8gZGlyZWN0b3J5KS4gIFRoYXQgd2F5IHlvdSB3aWxsDQoraGF2ZSB0aGUgY29ycmVjdCBGcmVlUlRPUyBzb3VyY2UgZmlsZXMgaW5jbHVkZWQsIGFuZCB0aGUgY29ycmVjdCBpbmNsdWRlIHBhdGhzDQorY29uZmlndXJlZC4gIE9uY2UgYSBkZW1vIGFwcGxpY2F0aW9uIGlzIGJ1aWxkaW5nIGFuZCBleGVjdXRpbmcgeW91IGNhbiByZW1vdmUNCit0aGUgZGVtbyBhcHBsaWNhdGlvbiBmaWxlLCBhbmQgc3RhcnQgdG8gYWRkIGluIHlvdXIgb3duIGFwcGxpY2F0aW9uIHNvdXJjZQ0KK2ZpbGVzLg0KKw0KK1NlZSBhbHNvIC0NCitodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9GcmVlUlRPUy1xdWljay1zdGFydC1ndWlkZS5odG1sDQoraHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sDQo=