From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:48999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UK6iW-0001lh-9C for qemu-devel@nongnu.org; Mon, 25 Mar 2013 08:41:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UK6iS-0001KO-A6 for qemu-devel@nongnu.org; Mon, 25 Mar 2013 08:41:36 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:14168) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UK6iR-0001JO-4c for qemu-devel@nongnu.org; Mon, 25 Mar 2013 08:41:32 -0400 From: Hanweidong Date: Mon, 25 Mar 2013 12:40:55 +0000 Message-ID: References: <5141A8B0.4050305@citrix.com> <20130314143403.GB5174@ocelot.phlegethon.org> <20130321121547.GB12338@ocelot.phlegethon.org> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Qemu-devel] [Xen-devel] frequently ballooning results in qemu exit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Tim Deegan Cc: George Dunlap , Andrew Cooper , Yanqiangjun , "qemu-devel@nongnu.org" , "xen-devel@lists.xen.org" , "Gonglei (Arei)" , Anthony PERARD , Wangzhenguo V2UgZml4ZWQgdGhpcyBpc3N1ZSBieSBiZWxvdyBwYXRjaCB3aGljaCBjb21wdXRlZCB0aGUgY29y cmVjdCBzaXplIGZvciB0ZXN0X2JpdHMoKS4gcWVtdV9nZXRfcmFtX3B0cigpIGFuZCBxZW11X3Nh ZmVfcmFtX3B0cigpIHdpbGwgY2FsbCB4ZW5fbWFwX2NhY2hlKCkgd2l0aCBzaXplIGlzIDAgaWYg dGhlIHJlcXVlc3RlZCBhZGRyZXNzIGlzIGluIHRoZSBSQU0uIFRoZW4geGVuX21hcF9jYWNoZSgp IHdpbGwgcGFzcyB0aGUgc2l6ZSAwIHRvIHRlc3RfYml0cygpIGZvciBjaGVja2luZyBpZiB0aGUg Y29ycmVzcG9uZGluZyBwZm4gd2FzIG1hcHBlZCBpbiBjYWNoZS4gQnV0IHRlc3RfYml0cygpIHdp bGwgYWx3YXlzIHJldHVybiAxIHdoZW4gc2l6ZSBpcyAwIHdpdGhvdXQgYW55IGJpdCB0ZXN0aW5n LiBBY3R1YWxseSwgZm9yIHRoaXMgY2FzZSwgdGVzdF9iaXRzIHNob3VsZCBjaGVjayBvbmUgYml0 LiBTbyB0aGlzIHBhdGNoIGludHJvZHVjZWQgYSBfX3Rlc3RfYml0X3NpemUgd2hpY2ggaXMgZ3Jl YXRlciB0aGFuIDAgYW5kIGEgbXVsdGlwbGUgb2YgWENfUEFHRV9TSVpFLCB0aGVuIHRlc3RfYml0 cyBjYW4gd29yayBjb3JyZWN0bHkgd2l0aCBfX3Rlc3RfYml0X3NpemUgPj4gWENfUEFHRV9TSElG VCBhcyBpdHMgc2l6ZS4NCg0KU2lnbmVkLW9mZi1ieTogWmhlbmd1byBXYW5nIDx3YW5nemhlbmd1 b0BodWF3ZWkuY29tPg0KU2lnbmVkLW9mZi1ieTogV2VpZG9uZyBIYW4gPGhhbndlaWRvbmdAaHVh d2VpLmNvbT4NCg0KZGlmZiAtLWdpdCBhL3hlbi1tYXBjYWNoZS5jIGIveGVuLW1hcGNhY2hlLmMN CmluZGV4IDMxYzA2ZGMuLmJkNGE5N2YgMTAwNjQ0DQotLS0gYS94ZW4tbWFwY2FjaGUuYw0KKysr IGIveGVuLW1hcGNhY2hlLmMNCkBAIC0yMDIsNiArMjAyLDcgQEAgdWludDhfdCAqeGVuX21hcF9j YWNoZShod2FkZHIgcGh5c19hZGRyLCBod2FkZHIgc2l6ZSwNCiAgICAgaHdhZGRyIGFkZHJlc3Nf aW5kZXg7DQogICAgIGh3YWRkciBhZGRyZXNzX29mZnNldDsNCiAgICAgaHdhZGRyIF9fc2l6ZSA9 IHNpemU7DQorICAgIGh3YWRkciBfX3Rlc3RfYml0X3NpemUgPSBzaXplOw0KICAgICBib29sIHRy YW5zbGF0ZWQgPSBmYWxzZTsNCg0KIHRyeWFnYWluOg0KQEAgLTIxMCw3ICsyMTEsMjMgQEAgdHJ5 YWdhaW46DQoNCiAgICAgdHJhY2VfeGVuX21hcF9jYWNoZShwaHlzX2FkZHIpOw0KDQotICAgIGlm IChhZGRyZXNzX2luZGV4ID09IG1hcGNhY2hlLT5sYXN0X2FkZHJlc3NfaW5kZXggJiYgIWxvY2sg JiYgIV9fc2l6ZSkgew0KKyAgICBlbnRyeSA9ICZtYXBjYWNoZS0+ZW50cnlbYWRkcmVzc19pbmRl eCAlIG1hcGNhY2hlLT5ucl9idWNrZXRzXTsNCisNCisgICAgLyogX190ZXN0X2JpdF9zaXplIGlz IGFsd2F5cyBhIG11bHRpcGxlIG9mIFhDX1BBR0VfU0laRSAqLw0KKyAgICBpZiAoc2l6ZSkgew0K KyAgICAgICAgX190ZXN0X2JpdF9zaXplID0gc2l6ZSArIChwaHlzX2FkZHIgJiAoWENfUEFHRV9T SVpFIC0gMSkpOw0KKw0KKyAgICAgICAgaWYgKF9fdGVzdF9iaXRfc2l6ZSAlIFhDX1BBR0VfU0la RSkgew0KKyAgICAgICAgICAgIF9fdGVzdF9iaXRfc2l6ZSArPSBYQ19QQUdFX1NJWkUgLSAoX190 ZXN0X2JpdF9zaXplICUgWENfUEFHRV9TSVpFKTsNCisgICAgICAgIH0NCisgICAgfSBlbHNlIHsN CisgICAgICAgIF9fdGVzdF9iaXRfc2l6ZSA9IFhDX1BBR0VfU0laRTsNCisgICAgfQ0KKw0KKyAg ICBpZiAoYWRkcmVzc19pbmRleCA9PSBtYXBjYWNoZS0+bGFzdF9hZGRyZXNzX2luZGV4ICYmICFs b2NrICYmICFfX3NpemUgJiYNCisgICAgICAgIHRlc3RfYml0cyhhZGRyZXNzX29mZnNldCA+PiBY Q19QQUdFX1NISUZULA0KKyAgICAgICAgICAgICAgICAgIF9fdGVzdF9iaXRfc2l6ZSA+PiBYQ19Q QUdFX1NISUZULA0KKyAgICAgICAgICAgICAgICAgIGVudHJ5LT52YWxpZF9tYXBwaW5nKSkgew0K ICAgICAgICAgdHJhY2VfeGVuX21hcF9jYWNoZV9yZXR1cm4obWFwY2FjaGUtPmxhc3RfYWRkcmVz c192YWRkciArIGFkZHJlc3Nfb2Zmc2V0KTsNCiAgICAgICAgIHJldHVybiBtYXBjYWNoZS0+bGFz dF9hZGRyZXNzX3ZhZGRyICsgYWRkcmVzc19vZmZzZXQ7DQogICAgIH0NCkBAIC0yMjUsMTEgKzI0 MiwxMCBAQCB0cnlhZ2FpbjoNCiAgICAgICAgIF9fc2l6ZSA9IE1DQUNIRV9CVUNLRVRfU0laRTsN CiAgICAgfQ0KDQotICAgIGVudHJ5ID0gJm1hcGNhY2hlLT5lbnRyeVthZGRyZXNzX2luZGV4ICUg bWFwY2FjaGUtPm5yX2J1Y2tldHNdOw0KLQ0KICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnktPmxv Y2sgJiYgZW50cnktPnZhZGRyX2Jhc2UgJiYNCiAgICAgICAgICAgICAoZW50cnktPnBhZGRyX2lu ZGV4ICE9IGFkZHJlc3NfaW5kZXggfHwgZW50cnktPnNpemUgIT0gX19zaXplIHx8DQotICAgICAg ICAgICAgICF0ZXN0X2JpdHMoYWRkcmVzc19vZmZzZXQgPj4gWENfUEFHRV9TSElGVCwgc2l6ZSA+ PiBYQ19QQUdFX1NISUZULA0KKyAgICAgICAgICAgICAhdGVzdF9iaXRzKGFkZHJlc3Nfb2Zmc2V0 ID4+IFhDX1BBR0VfU0hJRlQsDQorICAgICAgICAgICAgICAgICBfX3Rlc3RfYml0X3NpemUgPj4g WENfUEFHRV9TSElGVCwNCiAgICAgICAgICAgICAgICAgIGVudHJ5LT52YWxpZF9tYXBwaW5nKSkp IHsNCiAgICAgICAgIHBlbnRyeSA9IGVudHJ5Ow0KICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4 dDsNCkBAIC0yNDEsMTMgKzI1NywxNSBAQCB0cnlhZ2FpbjoNCiAgICAgfSBlbHNlIGlmICghZW50 cnktPmxvY2spIHsNCiAgICAgICAgIGlmICghZW50cnktPnZhZGRyX2Jhc2UgfHwgZW50cnktPnBh ZGRyX2luZGV4ICE9IGFkZHJlc3NfaW5kZXggfHwNCiAgICAgICAgICAgICAgICAgZW50cnktPnNp emUgIT0gX19zaXplIHx8DQotICAgICAgICAgICAgICAgICF0ZXN0X2JpdHMoYWRkcmVzc19vZmZz ZXQgPj4gWENfUEFHRV9TSElGVCwgc2l6ZSA+PiBYQ19QQUdFX1NISUZULA0KKyAgICAgICAgICAg ICAgICAhdGVzdF9iaXRzKGFkZHJlc3Nfb2Zmc2V0ID4+IFhDX1BBR0VfU0hJRlQsDQorICAgICAg ICAgICAgICAgICAgICBfX3Rlc3RfYml0X3NpemUgPj4gWENfUEFHRV9TSElGVCwNCiAgICAgICAg ICAgICAgICAgICAgIGVudHJ5LT52YWxpZF9tYXBwaW5nKSkgew0KICAgICAgICAgICAgIHhlbl9y ZW1hcF9idWNrZXQoZW50cnksIF9fc2l6ZSwgYWRkcmVzc19pbmRleCk7DQogICAgICAgICB9DQog ICAgIH0NCg0KLSAgICBpZighdGVzdF9iaXRzKGFkZHJlc3Nfb2Zmc2V0ID4+IFhDX1BBR0VfU0hJ RlQsIHNpemUgPj4gWENfUEFHRV9TSElGVCwNCisgICAgaWYoIXRlc3RfYml0cyhhZGRyZXNzX29m ZnNldCA+PiBYQ19QQUdFX1NISUZULA0KKyAgICAgICAgICAgICAgICBfX3Rlc3RfYml0X3NpemUg Pj4gWENfUEFHRV9TSElGVCwNCiAgICAgICAgICAgICAgICAgZW50cnktPnZhbGlkX21hcHBpbmcp KSB7DQogICAgICAgICBtYXBjYWNoZS0+bGFzdF9hZGRyZXNzX2luZGV4ID0gLTE7DQogICAgICAg ICBpZiAoIXRyYW5zbGF0ZWQgJiYgbWFwY2FjaGUtPnBoeXNfb2Zmc2V0X3RvX2dhZGRyKSB7DQoN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB4ZW4tZGV2ZWwtYm91bmNl c0BsaXN0cy54ZW4ub3JnIFttYWlsdG86eGVuLWRldmVsLQ0KPiBib3VuY2VzQGxpc3RzLnhlbi5v cmddIE9uIEJlaGFsZiBPZiBIYW53ZWlkb25nDQo+IFNlbnQ6IDIwMTPE6jPUwjIxyNUgMjE6MzMN Cj4gVG86IFRpbSBEZWVnYW4NCj4gQ2M6IEdlb3JnZSBEdW5sYXA7IEFuZHJldyBDb29wZXI7IFlh bnFpYW5nanVuOyB4ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZzsNCj4gR29uZ2xlaSAoQXJlaSk7IEFu dGhvbnkgUEVSQVJEDQo+IFN1YmplY3Q6IFJlOiBbWGVuLWRldmVsXSBmcmVxdWVudGx5IGJhbGxv b25pbmcgcmVzdWx0cyBpbiBxZW11IGV4aXQNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gPiBGcm9tOiB4ZW4tZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW4ub3JnIFttYWlsdG86 eGVuLWRldmVsLQ0KPiA+IGJvdW5jZXNAbGlzdHMueGVuLm9yZ10gT24gQmVoYWxmIE9mIFRpbSBE ZWVnYW4NCj4gPiBTZW50OiAyMDEzxOoz1MIyMcjVIDIwOjE2DQo+ID4gVG86IEhhbndlaWRvbmcN Cj4gPiBDYzogR2VvcmdlIER1bmxhcDsgQW5kcmV3IENvb3BlcjsgWWFucWlhbmdqdW47IHhlbi0N Cj4gZGV2ZWxAbGlzdHMueGVuLm9yZzsNCj4gPiBHb25nbGVpIChBcmVpKTsgQW50aG9ueSBQRVJB UkQNCj4gPiBTdWJqZWN0OiBSZTogW1hlbi1kZXZlbF0gZnJlcXVlbnRseSBiYWxsb29uaW5nIHJl c3VsdHMgaW4gcWVtdSBleGl0DQo+ID4NCj4gPiBBdCAwNTo1NCArMDAwMCBvbiAxNSBNYXIgKDEz NjMzMjY4NTQpLCBIYW53ZWlkb25nIHdyb3RlOg0KPiA+ID4gPiA+IEknbSBhbHNvIGN1cmlvdXMg YWJvdXQgdGhpcy4gVGhlcmUgaXMgYSB3aW5kb3cgYmV0d2VlbiBtZW1vcnkNCj4gPiBiYWxsb29u DQo+ID4gPiA+IG91dA0KPiA+ID4gPiA+IGFuZCBRRU1VIGludmFsaWRhdGUgbWFwY2FjaGUuDQo+ ID4gPiA+DQo+ID4gPiA+IFRoYXQgYnkgaXRzZWxmIGlzIE9LOyBJIGRvbid0IHRoaW5rIHdlIG5l ZWQgdG8gcHJvdmlkZSBhbnkNCj4gPiBtZWFuaW5nZnVsDQo+ID4gPiA+IHNlbWFudGljcyBpZiB0 aGUgZ3Vlc3QgaXMgYWNjZXNzaW5nIG1lbW9yeSB0aGF0IGl0J3MgYmFsbG9vbmVkDQo+IG91dC4N Cj4gPiA+ID4NCj4gPiA+ID4gVGhlIHF1ZXN0aW9uIGlzIHdoZXJlIHRoZSBTSUdCVVMgY29tZXMg ZnJvbTogZWl0aGVyIHFlbXUgaGFzIGENCj4gPiBtYXBwaW5nDQo+ID4gPiA+IG9mIHRoZSBvbGQg bWVtb3J5LCBpbiB3aGljaCBjYXNlIGl0IGNhbiB3cml0ZSB0byBpdCBzYWZlbHksIG9yIGl0DQo+ ID4gPiA+IGRvZXNuJ3QsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkbid0IHRyeS4NCj4gPiA+DQo+ ID4gPiBUaGUgZXJyb3IgYWx3YXlzIGhhcHBlbmVkIGF0IG1lbWNweSBpbiBpZiAoaXNfd3JpdGUp IGJyYW5jaCBpbg0KPiA+ID4gYWRkcmVzc19zcGFjZV9ydy4NCj4gPg0KPiA+IFN1cmUsIGJ1dCBf d2h5Xz8gIFdoeSBkb2VzIHRoaXMgYWNjZXNzIGNhdXNlIFNJR0JVUz8gIFByZXN1bWFibHkNCj4g PiB0aGVyZSdzDQo+ID4gc29tZSBwYXJ0IG9mIHRoZSBtYXBjYWNoZSBjb2RlIHRoYXQgdGhpbmtz IGl0IGhhcyBhIG1hcHBpbmcgdGhlcmUNCj4gd2hlbg0KPiA+IGl0IGRvZXNuJ3QuDQo+ID4NCj4g PiA+IFdlIGZvdW5kIHRoYXQsIGFmdGVyIHRoZSBsYXN0IHhlbl9pbnZhbGlkYXRlX21hcF9jYWNo ZSwgdGhlDQo+IG1hcGNhY2hlDQo+ID4gZW50cnkgcmVsYXRlZCB0byB0aGUgZmFpbGVkIGFkZHJl c3Mgd2FzIG1hcHBlZDoNCj4gPiA+IAk9PXhlbl9tYXBfY2FjaGU9PSBwaHlzX2FkZHI9N2EzYzFl YzAgc2l6ZT0wIGxvY2s9MA0KPiA+ID4gCT09eGVuX3JlbWFwX2J1Y2tldD09IGJlZ2luIHNpemU9 MTA0ODU3NiAsYWRkcmVzc19pbmRleD03YTMNCj4gPiA+IAk9PXhlbl9yZW1hcF9idWNrZXQ9PSBl bmQgZW50cnktPnBhZGRyX2luZGV4PTdhMyxlbnRyeS0NCj4gPiA+dmFkZHJfYmFzZT0yYTJkOTAw MCxzaXplPTEwNDg1NzYsYWRkcmVzc19pbmRleD03YTMNCj4gPg0KPiA+IE9LLCBzbyB0aGF0J3Mg MHgyYTJkOTAwMCAtLSAweDJhM2Q4ZmZmLg0KPiA+DQo+ID4gPiAJPT1hZGRyZXNzX3NwYWNlX3J3 PT0gcHRyPTJhMzlhZWMwDQo+ID4gPiAJPT14ZW5fbWFwX2NhY2hlPT0gcGh5c19hZGRyPTdhM2Mx ZWM0IHNpemU9MCBsb2NrPTANCj4gPiA+IAk9PXhlbl9tYXBfY2FjaGU9PWZpcnN0IHJldHVybiAy YTJkOTAwMCtjMWVjND0yYTM5YWVjNA0KPiA+ID4gCT09YWRkcmVzc19zcGFjZV9ydz09IHB0cj0y YTM5YWVjNA0KPiA+ID4gCT09eGVuX21hcF9jYWNoZT09IHBoeXNfYWRkcj03YTNjMWVjOCBzaXpl PTAgbG9jaz0wDQo+ID4gPiAJPT14ZW5fbWFwX2NhY2hlPT1maXJzdCByZXR1cm4gMmEyZDkwMDAr YzFlYzg9MmEzOWFlYzgNCj4gPiA+IAk9PWFkZHJlc3Nfc3BhY2Vfcnc9PSBwdHI9MmEzOWFlYzgN Cj4gPiA+IAk9PXhlbl9tYXBfY2FjaGU9PSBwaHlzX2FkZHI9N2EzYzFlY2Mgc2l6ZT0wIGxvY2s9 MA0KPiA+ID4gCT09eGVuX21hcF9jYWNoZT09Zmlyc3QgcmV0dXJuIDJhMmQ5MDAwK2MxZWNjPTJh MzlhZWNjDQo+ID4gPiAJPT1hZGRyZXNzX3NwYWNlX3J3PT0gcHRyPTJhMzlhZWNjDQo+ID4NCj4g PiBUaGVzZSBhcmUgYWxsIHRvIHBhZ2UgMHgyYTNlOWFfX18uDQo+ID4NCj4gPiA+IAk9PXhlbl9t YXBfY2FjaGU9PSBwaHlzX2FkZHI9N2ExNmMxMDggc2l6ZT0wIGxvY2s9MA0KPiA+ID4gCT09eGVu X21hcF9jYWNoZT09IHJldHVybiA5MmE0MDcwMDArNmMxMDg9MmE0NzMxMDgNCj4gPiA+IAk9PXhl bl9tYXBfY2FjaGU9PSBwaHlzX2FkZHI9N2ExNmMxMGMgc2l6ZT0wIGxvY2s9MA0KPiA+ID4gCT09 eGVuX21hcF9jYWNoZT09Zmlyc3QgcmV0dXJuIDJhNDA3MDAwKzZjMTBjPTJhNDczMTBjDQo+ID4g PiAJPT14ZW5fbWFwX2NhY2hlPT0gcGh5c19hZGRyPTdhMTZjMTEwIHNpemU9MCBsb2NrPTANCj4g PiA+IAk9PXhlbl9tYXBfY2FjaGU9PWZpcnN0IHJldHVybiAyYTQwNzAwMCs2YzExMD0yYTQ3MzEx MA0KPiA+ID4gCT09eGVuX21hcF9jYWNoZT09IHBoeXNfYWRkcj03YTM5NTAwMCBzaXplPTAgbG9j az0wDQo+ID4gPiAJPT14ZW5fbWFwX2NhY2hlPT0gcmV0dXJuIDJhMmQ5MDAwKzk1MDAwPTJhMzZl MDAwDQo+ID4gPiAJPT1hZGRyZXNzX3NwYWNlX3J3PT0gcHRyPTJhMzZlMDAwDQo+ID4NCj4gPiBB bmQgdGhpcyBpcyB0byBwYWdlIDB4MmEzNmVfX18sIGEgZGlmZmVyZW50IHBhZ2UgaW4gdGhlIHNh bWUgYnVja2V0Lg0KPiA+DQo+ID4gPiAgICAgICBoZXJlLCB0aGUgU0lHQlVTIGVycm9yIG9jY3Vy cmVkLg0KPiA+DQo+ID4gU28gdGhhdCBwYWdlIGlzbid0IG1hcHBlZC4gIFdoaWNoIG1lYW5zOg0K PiA+IC0gaXQgd2FzIG5ldmVyIG1hcHBlZCAoYW5kIHRoZSBtYXBjYWNoZSBjb2RlIGRpZG4ndCBo YW5kbGUgdGhlIGVycm9yDQo+ID4gICBjb3JyZWN0bHkgYXQgbWFwIHRpbWUpOyBvcg0KPiA+IC0g aXQgd2FzIG5ldmVyIG1hcHBlZCAoYW5kIHRoZSBtYXBjYWNoZSBoYXNuJ3QgY2hlY2tlZCBpdHMg b3duDQo+IHJlY29yZHMNCj4gPiAgIGJlZm9yZSB1c2luZyB0aGUgbWFwKTsgb3INCj4gPiAtIGl0 IHdhcyBtYXBwZWQgKGFuZCBzb21ldGhpbmcgdW5tYXBwZWQgaXQgaW4gdGhlIG1lYW50aW1lKS4N Cj4gPg0KPiA+IFdoeSBub3QgYWRkIHNvbWUgdGVzdHMgaW4geGVuX3JlbWFwX2J1Y2tldCB0byBj aGVjayB0aGF0IGFsbCB0aGUNCj4gcGFnZXMNCj4gPiB0aGF0IHFlbXUgcmVjb3JkcyBhcyBtYXBw ZWQgYXJlIGFjdHVhbGx5IHRoZXJlPw0KPiA+DQo+IA0KPiBIaSBUaW0sDQo+IA0KPiBXZSBkaWQg bW9yZSBkZWJ1Z2dpbmcgdGhlc2UgZGF5cywgYW5kIHJvb3QgY2F1c2VkIGl0IGp1c3Qgbm93LiBX ZSBmb3VuZA0KPiB0aGUgcGZuIHdoaWNoIGNhdXNlZCB0aGUgU0lHQlVTIHdhcyBuZXZlciBtYXBw ZWQuIFdlIHZlcmlmaWVkIGl0IGJ5DQo+IHByaW50aW5nICplcnIqIHZhcmlhYmxlIHJldHVybiBm cm9tIHhjX21hcF9mb3JlaWduX2J1bGsoKSwgYW5kIGl0cyBiaXQNCj4gd2FzIGFsc28gbm90IHNl dCBpbiBlbnRyeS0+dmFsaWRfbWFwcGluZy4gQnV0IHRlc3RfYml0cyBkaWRuJ3QgcmV0dXJuDQo+ IHJpZ2h0IHZhbHVlIGZvciB0aGlzIHNpdHVhdGlvbi4gcWVtdV9nZXRfcmFtX3B0cigpIGFsbW9z dCBwYXNzZWQgc2l6ZSAwDQo+IHRvIHhlbl9tYXBfY2FjaGUoKSwgYW5kIHRoZW4geGVuX21hcF9j YWNoZSgpIGNhbGxzIHRlc3RfYml0cygpIHRvIHRlc3QNCj4gdmFsaWRfbWFwcGluZywgYW5kIHRl c3RfYml0cyBhbHdheXMgcmV0dXJuIDEgd2hlbiBzaXplIGlzIDAgYmVjYXVzZQ0KPiBxZW11J3Mg ZmluZF9uZXh0X3plcm9fYml0KCkgaGFzIGZvbGxvd2luZyBjb2RlOg0KPiAJaWYgKG9mZnNldCA+ PSBzaXplKSB7DQo+ICAgICAgICAgcmV0dXJuIHNpemU7DQo+ICAgICAJfQ0KPiANCj4gT25lIHdh eSB0byBmaXggdGVzdF9iaXRzKCkgaXNzdWUgaXMgdG8gY2hhbmdlIHNpemUgPj4gWENfUEFHRV9T SElGVCB0bw0KPiAoc2l6ZSArIDEgPDwgWENfUEFHRV9TSElGVCkgPj4gWENfUEFHRV9TSElGVCBp biB4ZW5fbWFwX2NhY2hlKCkuIEJ1dCB3ZQ0KPiB0aGluayBpdCBzdGlsbCBjYW5ub3Qgc29sdmUg dGhlIHByb2JsZW0gcGVyZmVjdGx5LCBiZWNhdXNlIHRlc3RfYml0cw0KPiB3aWxsIG9ubHkgdGVz dCBvbmUgYml0IHdoZW4gc2l6ZSBpcyAwLiBXaHkgZG9lcyBxZW11X2dldF9yYW1fcHRyKCkNCj4g YWx3YXlzIGNhbGwgeGVuX21hcF9jYWNoZSgpIHdpdGggc2l6ZSBpcyAwIHdoZW4gYmxvY2stPm9m ZnNldCA9PSAwPyBJZg0KPiBzb21lIG9wZXJhdGlvbnMgbmVlZCB0byBhY2Nlc3MgYmlnIHJhbmdl IGFkZHJlc3MgKG1vcmUgdGhhbiAxIHBhZ2UpLA0KPiB0aGlzIHdheSBzdGlsbCBoYXMgcHJvYmxl bS4gU28gSSB0aGluayBpdCBzaG91bGQgcGFzcyBhY3R1YWwgc2l6ZSB0bw0KPiB4ZW5fbWFwX2Nh Y2hlKCkuDQo+IA0KPiAtLXdlaWRvbmcNCj4gDQo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsDQo=