From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: Re: [PATCH v2 15/30] xen/x86: populate PVHv2 Dom0 physical memory map Date: Tue, 4 Oct 2016 11:12:48 +0200 Message-ID: <20161004091240.rbroxin3xpxixcge@mac> References: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> <1474991845-27962-16-git-send-email-roger.pau@citrix.com> <57EEA6780200007800114683@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1brLmQ-0004If-Al for xen-devel@lists.xenproject.org; Tue, 04 Oct 2016 09:12:54 +0000 Content-Disposition: inline In-Reply-To: <57EEA6780200007800114683@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Andrew Cooper , boris.ostrovsky@oracle.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBTZXAgMzAsIDIwMTYgYXQgMDk6NTI6NTZBTSAtMDYwMCwgSmFuIEJldWxpY2ggd3Jv dGU6Cj4gPj4+IE9uIDI3LjA5LjE2IGF0IDE3OjU3LCA8cm9nZXIucGF1QGNpdHJpeC5jb20+IHdy b3RlOgo+ID4gQEAgLTQzLDYgKzQ0LDExIEBAIHN0YXRpYyBsb25nIF9faW5pdGRhdGEgZG9tMF9u cnBhZ2VzOwo+ID4gIHN0YXRpYyBsb25nIF9faW5pdGRhdGEgZG9tMF9taW5fbnJwYWdlczsKPiA+ ICBzdGF0aWMgbG9uZyBfX2luaXRkYXRhIGRvbTBfbWF4X25ycGFnZXMgPSBMT05HX01BWDsKPiA+ ICAKPiA+ICsvKiBTaXplIG9mIHRoZSBWTTg2IFRTUyBmb3IgdmlydHVhbCA4MDg2IG1vZGUgdG8g dXNlLiAqLwo+ID4gKyNkZWZpbmUgSFZNX1ZNODZfVFNTX1NJWkUgICAxMjgKPiA+ICsKPiA+ICtz dGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgaHZtX21lbV9zdGF0c1tNQVhfT1JERVIgKyAx XTsKPiAKPiBUaGlzIGlzIGZvciB5b3VyIGRlYnVnZ2luZyBvbmx5IEkgc3VwcG9zZT8KClByb2Jh Ymx5LCBJIHdhc24ndCBzdXJlIGlmIGl0IHdhcyByZWxldmFudCBzbyBJIGxlZnQgaXQgaGVyZS4g V291bGQgaXQgbWFrZSAKc2Vuc2UgdG8gb25seSBwcmludCB0aGlzIGZvciBkZWJ1ZyBidWlsZHMg b2YgdGhlIGh5cGVydmlzb3I/IE9yIGJldHRlciB0byAKanVzdCByZW1vdmUgaXQ/Cgo+ID4gQEAg LTMzNiw3ICszNDMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9kb20w X25yX3BhZ2VzKAo+ID4gICAgICAgICAgYXZhaWwgLT0gZG9tMF9wYWdpbmdfcGFnZXMoZCwgbnJf cGFnZXMpOwo+ID4gICAgICB9Cj4gPiAgCj4gPiAtICAgIGlmICggKHBhcm1zLT5wMm1fYmFzZSA9 PSBVTlNFVF9BRERSKSAmJiAoZG9tMF9ucnBhZ2VzIDw9IDApICYmCj4gPiArICAgIGlmICggaXNf cHZfZG9tYWluKGQpICYmCj4gPiArICAgICAgICAgKHBhcm1zLT5wMm1fYmFzZSA9PSBVTlNFVF9B RERSKSAmJiAoZG9tMF9ucnBhZ2VzIDw9IDApICYmCj4gCj4gUGVyaGFwcyBiZXR0ZXIgdG8gc2lt cGx5IGZvcmNlIHBhcm1zLT5wMm1fYmFzZSB0byBVTlNFVF9BRERSCj4gZWFybGllciBvbj8KCnAy bV9iYXNlIGlzIGFscmVhZHkgdW5jb25kaXRpb25hbGx5IHNldCB0byBVTlNFVF9BRERSIGZvciBQ Vkh2MiBkb21haW5zLCAKaGVuY2UgdGhlIGFkZGVkIGlzX3B2X2RvbWFpbiBjaGVjayBpbiBvcmRl ciB0byBtYWtlIHN1cmUgdGhhdCBQVkh2MiBndWVzdHMgCmRvbid0IGdldCBpbnRvIHRoYXQgYnJh bmNoLCB3aGljaCBBRkFJQ1QgaXMgb25seSByZWxldmFudCB0byBQViBndWVzdHMuCgo+ID4gQEAg LTU3OSw4ICs1ODgsMTkgQEAgc3RhdGljIF9faW5pdCB2b2lkIHB2aF9zZXR1cF9lODIwKHN0cnVj dCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCj4gPiAgICAgICAgICAgICAgY29u dGludWU7Cj4gPiAgICAgICAgICB9Cj4gPiAgCj4gPiAtICAgICAgICAqZW50cnlfZ3Vlc3QgPSAq ZW50cnk7Cj4gPiAtICAgICAgICBwYWdlcyA9IFBGTl9VUChlbnRyeV9ndWVzdC0+c2l6ZSk7Cj4g PiArICAgICAgICAvKgo+ID4gKyAgICAgICAgICogTWFrZSBzdXJlIHRoZSBzdGFydCBhbmQgbGVu Z3RoIGFyZSBhbGlnbmVkIHRvIFBBR0VfU0laRSwgYmVjYXVzZQo+ID4gKyAgICAgICAgICogdGhh dCdzIHRoZSBtaW5pbXVtIGdyYW51bGFyaXR5IG9mIHRoZSAybmQgc3RhZ2UgdHJhbnNsYXRpb24u Cj4gPiArICAgICAgICAgKi8KPiA+ICsgICAgICAgIHN0YXJ0ID0gUk9VTkRVUChlbnRyeS0+YWRk ciwgUEFHRV9TSVpFKTsKPiA+ICsgICAgICAgIGVuZCA9IChlbnRyeS0+YWRkciArIGVudHJ5LT5z aXplKSAmIFBBR0VfTUFTSzsKPiA+ICsgICAgICAgIGlmICggc3RhcnQgPj0gZW5kICkKPiA+ICsg ICAgICAgICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsgICAgICAgIGVudHJ5X2d1ZXN0LT50eXBl ID0gRTgyMF9SQU07Cj4gPiArICAgICAgICBlbnRyeV9ndWVzdC0+YWRkciA9IHN0YXJ0Owo+ID4g KyAgICAgICAgZW50cnlfZ3Vlc3QtPnNpemUgPSBlbmQgLSBzdGFydDsKPiA+ICsgICAgICAgIHBh Z2VzID0gUEZOX0RPV04oZW50cnlfZ3Vlc3QtPnNpemUpOwo+ID4gICAgICAgICAgaWYgKCAoY3Vy X3BhZ2VzICsgcGFnZXMpID4gbnJfcGFnZXMgKQo+ID4gICAgICAgICAgewo+ID4gICAgICAgICAg ICAgIC8qIFRydW5jYXRlIHJlZ2lvbiAqLwo+ID4gQEAgLTU5MSw2ICs2MTEsOCBAQCBzdGF0aWMg X19pbml0IHZvaWQgcHZoX3NldHVwX2U4MjAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9u ZyBucl9wYWdlcykKPiA+ICAgICAgICAgIHsKPiA+ICAgICAgICAgICAgICBjdXJfcGFnZXMgKz0g cGFnZXM7Cj4gPiAgICAgICAgICB9Cj4gPiArICAgICAgICBBU1NFUlQoSVNfQUxJR05FRChlbnRy eV9ndWVzdC0+YWRkciwgUEFHRV9TSVpFKSAmJgo+ID4gKyAgICAgICAgICAgICAgIElTX0FMSUdO RUQoZW50cnlfZ3Vlc3QtPnNpemUsIFBBR0VfU0laRSkpOwo+IAo+IFdoYXQgZG9lcyB0aGlzIGd1 YXJkIGFnYWluc3Q/IFlvdXIgYWRkaXRpb24gYXJyYW5nZXMgZm9yIHRoaW5ncyB0bwo+IGJlIHBh Z2UgYWxpZ25lZCwgYW5kIHRoZSBvbmx5IGFkanVzdG1lbnQgZG9uZSB1bnRpbCB3ZSBnZXQgaGVy ZSBpcwo+IG9uZSB0aGF0IG9idmlvdXNseSBhbHNvIGRvZXNuJ3QgdmlvbGF0ZSB0aGF0IHJlcXVp cmVtZW50LiBJJ20gYWxsIGZvcgo+IGFzc2VydGlvbnMgd2hlbiB0aGV5IGNoZWNrIHN0YXRlIHdo aWNoIGlzIG5vdCBvYnZpb3VzbHkgcmlnaHQsIGJ1dAo+IGhlcmUgSSBkb24ndCBzZWUgdGhlIG5l ZWQuCgpSaWdodCwgSSdtIGdvaW5nIHRvIHJlbW92ZSBpdC4gSSd2ZSBhZGRlZCBtb3JlIHNlYXQg YmVsdHMgdGhhbiBuZWVkZWQgd2hlbiAKdGVzdGluZyB0aGlzIGFuZCBmb3Jnb3QgdG8gcmVtb3Zl IHRoZW0uCgo+ID4gQEAgLTE2NTcsMTUgKzE2NzksMjM4IEBAIG91dDoKPiA+ICAgICAgcmV0dXJu IHJjOwo+ID4gIH0KPiA+ICAKPiA+ICsvKiBQb3B1bGF0ZSBhbiBIVk0gbWVtb3J5IHJhbmdlIHVz aW5nIHRoZSBiaWdnZXN0IHBvc3NpYmxlIG9yZGVyLiAqLwo+ID4gK3N0YXRpYyB2b2lkIF9faW5p dCBodm1fcG9wdWxhdGVfbWVtb3J5X3JhbmdlKHN0cnVjdCBkb21haW4gKmQsIHVpbnQ2NF90IHN0 YXJ0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ2NF90IHNpemUpCj4gPiArewo+ID4gKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRh dGEgbWVtZmxhZ3MgPSBNRU1GX25vX2RtYXxNRU1GX2V4YWN0X25vZGU7Cj4gPiArICAgIHVuc2ln bmVkIGludCBvcmRlcjsKPiA+ICsgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKPiA+ICsgICAg aW50IHJjOwo+ID4gKwo+ID4gKyAgICBBU1NFUlQoSVNfQUxJR05FRChzaXplLCBQQUdFX1NJWkUp ICYmIElTX0FMSUdORUQoc3RhcnQsIFBBR0VfU0laRSkpOwo+ID4gKwo+ID4gKyAgICBvcmRlciA9 IE1BWF9PUkRFUjsKPiA+ICsgICAgd2hpbGUgKCBzaXplICE9IDAgKQo+ID4gKyAgICB7Cj4gPiAr ICAgICAgICBvcmRlciA9IG1pbihnZXRfb3JkZXJfZnJvbV9ieXRlc19mbG9vcihzaXplKSwgb3Jk ZXIpOwo+ID4gKyAgICAgICAgcGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZXMoZCwgb3JkZXIsIG1l bWZsYWdzKTsKPiA+ICsgICAgICAgIGlmICggcGFnZSA9PSBOVUxMICkKPiA+ICsgICAgICAgIHsK PiA+ICsgICAgICAgICAgICBpZiAoIG9yZGVyID09IDAgJiYgbWVtZmxhZ3MgKQo+ID4gKyAgICAg ICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAgLyogVHJ5IGFnYWluIHdpdGhvdXQgYW55IG1l bWZsYWdzLiAqLwo+ID4gKyAgICAgICAgICAgICAgICBtZW1mbGFncyA9IDA7Cj4gPiArICAgICAg ICAgICAgICAgIG9yZGVyID0gTUFYX09SREVSOwo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51 ZTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgaWYgKCBvcmRlciA9PSAwICkK PiA+ICsgICAgICAgICAgICAgICAgcGFuaWMoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgd2l0 aCBvcmRlciAwIVxuIik7Cj4gPiArICAgICAgICAgICAgb3JkZXItLTsKPiA+ICsgICAgICAgICAg ICBjb250aW51ZTsKPiA+ICsgICAgICAgIH0KPiAKPiBJcyBpdCBub3QgcG9zc2libGUgdG8gdXRp bGl6ZSBhbGxvY19jaHVuaygpIGhlcmU/CgpOb3QgcmVhbGx5LCBhbGxvY19jaHVuayB3aWxsIGRv IGEgY2VpbCBjYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG5lZWRlZCAKcGFnZXMsIHdoaWNo IG1lYW5zIHdlIGVuZCB1cCBhbGxvY2F0aW5nIGJpZ2dlciBjaHVua3MgdGhhbiBuZWVkZWQgYW5k IHRoZW4gCmZyZWUgdGhlbS4gSSBwcmVmZXIgdGhpcyBhcHByb2FjaCwgc2luY2Ugd2UgYWx3YXlz IHJlcXVlc3QgdGhlIGV4YWN0IG1lbW9yeSAKdGhhdCdzIHJlcXVpcmVkLCBzbyB0aGVyZSdzIG5v IG5lZWQgdG8gZnJlZSBsZWZ0b3ZlciBwYWdlcy4KCj4gPiArICAgICAgICBodm1fbWVtX3N0YXRz W29yZGVyXSsrOwo+ID4gKyAgICAgICAgcmMgPSBndWVzdF9waHlzbWFwX2FkZF9wYWdlKGQsIF9n Zm4oUEZOX0RPV04oc3RhcnQpKSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSwgb3JkZXIpOwo+ID4gKyAgICAgICAgaWYgKCBy YyAhPSAwICkKPiA+ICsgICAgICAgICAgICBwYW5pYygiRmFpbGVkIHRvIHBvcHVsYXRlIG1lbW9y eTogWyUiIFBSSXg2NCAiIC0gJSIgUFJJeDY0ICJdICVkXG4iLAo+IAo+IFs8c3RhcnQ+LDxlbmQ+ KSBwbGVhc2UuCj4gCj4gPiArICAgICAgICAgICAgICAgICAgc3RhcnQsIHN0YXJ0ICsgKCgodWlu dDY0X3QpMSkgPDwgKG9yZGVyICsgUEFHRV9TSElGVCkpLCByYyk7Cj4gPiArICAgICAgICBzdGFy dCArPSAoKHVpbnQ2NF90KTEpIDw8IChvcmRlciArIFBBR0VfU0hJRlQpOwo+ID4gKyAgICAgICAg c2l6ZSAtPSAoKHVpbnQ2NF90KTEpIDw8IChvcmRlciArIFBBR0VfU0hJRlQpOwo+IAo+IFBsZWFz ZSBwcmVmZXIgMVVMTCBvdmVyICh1aW50NjRfdCkxLgo+IAo+ID4gKyAgICAgICAgaWYgKCAoc2l6 ZSAmIDB4ZmZmZmZmZmYpID09IDAgKQo+ID4gKyAgICAgICAgICAgIHByb2Nlc3NfcGVuZGluZ19z b2Z0aXJxcygpOwo+IAo+IFRoYXQncyA0R2IgYXQgYSB0aW1lIC0gaXNuJ3QgdGhhdCBhIGxpdHRs ZSB0b28gbXVjaD8KCkhtLCBpdCdzIHRoZSBzYW1lIHRoYXQncyB1c2VkIGluIHB2aF9hZGRfbWVt X21hcHBpbmcgQUZBSUNULiBJIGNvdWxkIHJlZHVjZSAKaXQgdG8gMHhmZmZmZmZmLCBidXQgSSdt IGFsc28gd29uZGVyaW5nIGlmIGl0IG1ha2VzIHNlbnNlIHRvIGp1c3QgY2FsbCBpdCBvbiAKZWFj aCBpdGVyYXRpb24sIHNpbmNlIHdlIGFyZSBwb3NzaWJseSBtYXBwaW5nIHJlZ2lvbnMgd2l0aCBi aWcgb3JkZXJzIGhlcmUuCgo+ID4gKyAgICB9Cj4gPiArCj4gPiArfQo+IAo+IFN0cmF5IGJsYW5r IGxpbmUuCj4gCj4gPiArc3RhdGljIGludCBfX2luaXQgaHZtX3NldHVwX3ZteF91bnJlc3RyaWN0 ZWRfZ3Vlc3Qoc3RydWN0IGRvbWFpbiAqZCkKPiA+ICt7Cj4gPiArICAgIHN0cnVjdCBlODIwZW50 cnkgKmVudHJ5Owo+ID4gKyAgICBwMm1fdHlwZV90IHAybXQ7Cj4gPiArICAgIHVpbnQzMl90IHJj LCAqaWRlbnRfcHQ7Cj4gPiArICAgIHVpbnQ4X3QgKnRzczsKPiA+ICsgICAgbWZuX3QgbWZuOwo+ ID4gKyAgICBwYWRkcl90IGdhZGRyID0gMDsKPiA+ICsgICAgaW50IGk7Cj4gCj4gdW5zaWduZWQg aW50Cj4gCj4gPiArICAgIC8qCj4gPiArICAgICAqIFN0b2xlIHNvbWUgc3BhY2UgZnJvbSB0aGUg bGFzdCBmb3VuZCBSQU0gcmVnaW9uLiBPbmUgcGFnZSB3aWxsIGJlCj4gCj4gU3RlYWwKPiAKPiA+ ICsgICAgICogdXNlZCBmb3IgdGhlIGlkZW50aWZ5IHBhZ2UgdGFibGVzLCBhbmQgdGhlIHJlbWFp bmluZyBzcGFjZSBmb3IgdGhlCj4gCj4gaWRlbnRpdHkKPiAKPiA+ICsgICAgICogVk04NiBUU1Mu IE5vdGUgdGhhdCBhZnRlciB0aGlzIG5vdCBhbGwgZTgyMCByZWdpb25zIHdpbGwgYmUgYWxpZ25l ZAo+ID4gKyAgICAgKiB0byBQQUdFX1NJWkUuCj4gPiArICAgICAqLwo+ID4gKyAgICBmb3IgKCBp ID0gMTsgaSA8PSBkLT5hcmNoLm5yX2U4MjA7IGkrKyApCj4gPiArICAgIHsKPiA+ICsgICAgICAg IGVudHJ5ID0gJmQtPmFyY2guZTgyMFtkLT5hcmNoLm5yX2U4MjAgLSBpXTsKPiA+ICsgICAgICAg IGlmICggZW50cnktPnR5cGUgIT0gRTgyMF9SQU0gfHwKPiA+ICsgICAgICAgICAgICAgZW50cnkt PnNpemUgPCBQQUdFX1NJWkUgKyBIVk1fVk04Nl9UU1NfU0laRSApCj4gPiArICAgICAgICAgICAg Y29udGludWU7Cj4gPiArCj4gPiArICAgICAgICBlbnRyeS0+c2l6ZSAtPSBQQUdFX1NJWkUgKyBI Vk1fVk04Nl9UU1NfU0laRTsKPiA+ICsgICAgICAgIGdhZGRyID0gZW50cnktPmFkZHIgKyBlbnRy eS0+c2l6ZTsKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlm ICggZ2FkZHIgPT0gMCB8fCBnYWRkciA8IE1CKDEpICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAg cHJpbnRrKCJVbmFibGUgdG8gZmluZCBtZW1vcnkgdG8gc3Rhc2ggdGhlIGlkZW50aXR5IG1hcCBh bmQgVFNTXG4iKTsKPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+IAo+IE9uZSBmdW5jdGlv biB1cCB5b3UgcGFuaWMoKSBvbiBlcnJvciAtIHBsZWFzZSBiZSBjb25zaXN0ZW50LiBBbHNvIGZv cgo+IG9uZSBvZiB0aGUgb3RoZXIgcGF0Y2hlcyBJIHRoaW5rIHdlIGZpZ3VyZWQgdGhhdCB0aGUg VFNTIGlzbid0IHJlYWxseQo+IHJlcXVpcmVkLCBzbyBwbGVhc2Ugb25seSB3YXJuIGluIHRoYXQg Y2FzZS4KPiAKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBJZGVudGl0 eS1tYXAgcGFnZSB0YWJsZSBpcyByZXF1aXJlZCBmb3IgcnVubmluZyB3aXRoIENSMC5QRz0wCj4g PiArICAgICAqIHdoZW4gdXNpbmcgSW50ZWwgRVBULiBDcmVhdGUgYSAzMi1iaXQgbm9uLVBBRSBw YWdlIGRpcmVjdG9yeSBvZgo+ID4gKyAgICAgKiBzdXBlcnBhZ2VzLgo+ID4gKyAgICAgKi8KPiA+ ICsgICAgdHNzID0gbWFwX2RvbWFpbl9nZm4ocDJtX2dldF9ob3N0cDJtKGQpLCBfZ2ZuKFBGTl9E T1dOKGdhZGRyKSksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICZtZm4sICZwMm10LCAw LCAmcmMpOwo+IAo+IENvbW1lbnQgYW5kIG9wZXJhdGlvbiBkb24ndCByZWFsbHkgZml0IHRvZ2V0 aGVyLgo+IAo+ID4gK3N0YXRpYyBpbnQgX19pbml0IGh2bV9zZXR1cF9wMm0oc3RydWN0IGRvbWFp biAqZCkKPiA+ICt7Cj4gPiArICAgIHN0cnVjdCB2Y3B1ICpzYXZlZF9jdXJyZW50LCAqdiA9IGQt PnZjcHVbMF07Cj4gPiArICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7Cj4gPiArICAgIGludCBp LCByYywgcHJlZW1wdGVkOwo+ID4gKwo+ID4gKyAgICBwcmludGsoIioqIFByZXBhcmluZyBtZW1v cnkgbWFwICoqXG4iKTsKPiAKPiBEZWJ1Z2dpbmcgbGVmdG92ZXIgYWdhaW4/CgpTaG91bGQgdGhp cyBiZSBtZXJnZWQgd2l0aCB0aGUgbmV4dCBsYWJlbCwgc28gdGhhdCBpdCByZWFkcyBhcyAiUHJl cGFyaW5nIAphbmQgcG9wdWxhdGluZyB0aGUgbWVtb3J5IG1hcCI/Cgo+ID4gKyAgICAvKgo+ID4g KyAgICAgKiBTdWJ0cmFjdCBvbmUgcGFnZSBmb3IgdGhlIEVQVCBpZGVudGl0eSBwYWdlIHRhYmxl IGFuZCB0d28gcGFnZXMKPiA+ICsgICAgICogZm9yIHRoZSBNQURUIHJlcGxhY2VtZW50Lgo+ID4g KyAgICAgKi8KPiA+ICsgICAgbnJfcGFnZXMgPSBjb21wdXRlX2RvbTBfbnJfcGFnZXMoZCwgTlVM TCwgMCkgLSAzOwo+IAo+IEhvdyBkbyB5b3Uga25vdyB0aGUgTUFEVCByZXBsYWNlbWVudCByZXF1 aXJlcyB0d28gcGFnZXM/IElzbid0Cj4gdGhhdCBDUFUtY291bnQgZGVwZW5kZW50PyBBbmQgZG9l c24ndCB0aGUgcGFydGlhbCBwYWdlIHVzZWQgZm9yCj4gdGhlIFRTUyBhbHNvIG5lZWQgYWNjb3Vu dGluZyBmb3IgaGVyZT8KClllcywgaXQncyBDUFUtY291bnQgZGVwZW5kZW50LiBUaGlzIGlzIGp1 c3QgYW4gYXBwcm94aW1hdGlvbiwgc2luY2Ugd2Ugb25seSAKc3VwcG9ydCB1cCB0byAyNTYgQ1BV cyBvbiBIVk0gZ3Vlc3RzLCBhbmQgZWFjaCBQcm9jZXNzb3IgTG9jYWwgQVBJQyBlbnRyeSBpcyAK OCBieXRlcywgdGhpcyBtZWFucyB0aGF0IHRoZSBDUFUtcmVsYXRlZCBkYXRhIGlzIGdvaW5nIHRv IHVzZSB1cCB0byAyMDQ4IApieXRlcyBvZiBkYXRhLCB3aGljaCBzdGlsbCBsZWF2ZXMgcGxlbnR5 IG9mIHNwYWNlIGZvciB0aGUgSU8gQVBJQyBhbmQgdGhlIApJbnRlcnJ1cHQgU291cmNlIE92ZXJy aWRlIGVudHJpZXMuIFdlIHJlcXVlc3RzIHR3byBwYWdlcyBpbiBjYXNlIHRoZSAKb3JpZ2luYWwg TUFEVCBjcm9zc2VzIGEgcGFnZSBib3VuZGFyeS4gRldJVywgSSBjb3VsZCBhbHNvIGZldGNoIHRo ZSBvcmlnaW5hbCAKTUFEVCBzaXplIGVhcmxpZXIgYW5kIHVzZSB0aGF0IGFzIHRoZSB1cHBlciBi b3VuZCBoZXJlIGZvciBtZW1vcnkgCnJlc2VydmF0aW9uLgoKSW4gdGhlIFJGQyBzZXJpZXMgd2Ug YWxzbyBzcG9rZSBhYm91dCBwbGFjaW5nIHRoZSBNQURUIGluIGEgZGlmZmVyZW50IApwb3NpdGlv biB0aGF0IHRoZSBuYXRpdmUgb25lLCB3aGljaCB3b3VsZCBtZWFuIHRoYXQgd2Ugd291bGQgZW5k IHVwIHN0ZWFsaW5nIApzb21lIHNwYWNlIGZyb20gYSBSQU0gcmVnaW9uIGluIG9yZGVyIHRvIHBs YWNlIGl0LCBzbyB0aGF0IHdlIHdvdWxkbid0IGhhdmUgCnRvIGRvIHRoaXMgYWNjb3VudGluZy4K CkluIGZhY3QgdGhpcyBpcyBzbGlnaHRseSB3cm9uZywgYW5kIGl0IGRvZXNuJ3QgbmVlZCB0byBh Y2NvdW50IGZvciB0aGUgCmlkZW50aXR5IHBhZ2UgdGFibGUgb3IgdGhlIFZNODYgVFNTLCBzaW5j ZSB3ZSBlbmQgdXAgc3RlYWxpbmcgdGhpcyBzcGFjZSAKZnJvbSBwb3B1bGF0ZWQgUkFNIHJlZ2lv bnMuIEF0IHRoZSBtb21lbnQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSAyIApwYWdl cyB0aGF0IGNvdWxkIGJlIHVzZWQgYnkgdGhlIE1BRFQuCgo+ID4gKyAgICBodm1fc2V0dXBfZTgy MChkLCBucl9wYWdlcyk7Cj4gPiArICAgIGRvIHsKPiA+ICsgICAgICAgIHByZWVtcHRlZCA9IDA7 Cj4gPiArICAgICAgICBwYWdpbmdfc2V0X2FsbG9jYXRpb24oZCwgZG9tMF9wYWdpbmdfcGFnZXMo ZCwgbnJfcGFnZXMpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVlbXB0 ZWQpOwo+ID4gKyAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7Cj4gPiArICAgIH0g d2hpbGUgKCBwcmVlbXB0ZWQgKTsKPiA+ICsKPiA+ICsgICAgLyoKPiA+ICsgICAgICogU3BlY2lh bCB0cmVhdG1lbnQgZm9yIG1lbW9yeSA8IDFNQjoKPiA+ICsgICAgICogIC0gQ29weSB0aGUgZGF0 YSBpbiBlODIwIHJlZ2lvbnMgbWFya2VkIGFzIFJBTSAoQkRBLCBFQkRBLi4uKS4KPiA+ICsgICAg ICogIC0gTWFwIGV2ZXJ5dGhpbmcgZWxzZSBhcyAxOjEuCj4gPiArICAgICAqIE5COiBhbGwgdGhp cyBvbmx5IG1ha2VzIHNlbnNlIGlmIGJvb3RlZCBmcm9tIGxlZ2FjeSBCSU9TZXMuCj4gPiArICAg ICAqLwo+ID4gKyAgICByYyA9IG1vZGlmeV9tbWlvXzExKGQsIDAsIFBGTl9ET1dOKE1CKDEpKSwg dHJ1ZSk7Cj4gPiArICAgIGlmICggcmMgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBwcmludGso IkZhaWxlZCB0byBtYXAgbG93IDFNQiAxOjE6ICVkXG4iLCByYyk7Cj4gPiArICAgICAgICByZXR1 cm4gcmM7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcHJpbnRrKCIqKiBQb3B1bGF0aW5nIG1l bW9yeSBtYXAgKipcbiIpOwo+ID4gKyAgICAvKiBQb3B1bGF0ZSBtZW1vcnkgbWFwLiAqLwo+ID4g KyAgICBmb3IgKCBpID0gMDsgaSA8IGQtPmFyY2gubnJfZTgyMDsgaSsrICkKPiA+ICsgICAgewo+ ID4gKyAgICAgICAgaWYgKCBkLT5hcmNoLmU4MjBbaV0udHlwZSAhPSBFODIwX1JBTSApCj4gPiAr ICAgICAgICAgICAgY29udGludWU7Cj4gPiArCj4gPiArICAgICAgICBodm1fcG9wdWxhdGVfbWVt b3J5X3JhbmdlKGQsIGQtPmFyY2guZTgyMFtpXS5hZGRyLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkLT5hcmNoLmU4MjBbaV0uc2l6ZSk7Cj4gPiArICAgICAgICBpZiAo IGQtPmFyY2guZTgyMFtpXS5hZGRyIDwgTUIoMSkgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kID0gbWluX3QodW5zaWduZWQgbG9uZywKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5lODIwW2ldLmFkZHIgKyBkLT5hcmNoLmU4 MjBbaV0uc2l6ZSwgTUIoMSkpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHNhdmVkX2N1cnJlbnQg PSBjdXJyZW50Owo+ID4gKyAgICAgICAgICAgIHNldF9jdXJyZW50KHYpOwo+ID4gKyAgICAgICAg ICAgIHJjID0gaHZtX2NvcHlfdG9fZ3Vlc3RfcGh5cyhkLT5hcmNoLmU4MjBbaV0uYWRkciwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFkZHJfdG9fdmlydChk LT5hcmNoLmU4MjBbaV0uYWRkciksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuZCAtIGQtPmFyY2guZTgyMFtpXS5hZGRyKTsKPiA+ICsgICAgICAgICAgICBz ZXRfY3VycmVudChzYXZlZF9jdXJyZW50KTsKPiA+ICsgICAgICAgICAgICBpZiAoIHJjICE9IEhW TUNPUFlfb2theSApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICBwcmlu dGsoIlVuYWJsZSB0byBjb3B5IFJBTSByZWdpb24gJSNseCAtICUjbHhcbiIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBkLT5hcmNoLmU4MjBbaV0uYWRkciwgZW5kKTsKPiA+ICsgICAgICAg ICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKyAgICAgICAg fQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHByaW50aygiTWVtb3J5IGFsbG9jYXRpb24gc3Rh dHM6XG4iKTsKPiA+ICsgICAgZm9yICggaSA9IDA7IGkgPD0gTUFYX09SREVSOyBpKysgKQo+ID4g KyAgICB7Cj4gPiArICAgICAgICBpZiAoIGh2bV9tZW1fc3RhdHNbTUFYX09SREVSIC0gaV0gIT0g MCApCj4gPiArICAgICAgICAgICAgcHJpbnRrKCJPcmRlciAlMnU6ICVwWlxuIiwgTUFYX09SREVS IC0gaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgX3AoKCh1aW50NjRfdCkxIDw8IChNQVhfT1JE RVIgLSBpICsgUEFHRV9TSElGVCkpICoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgaHZtX21l bV9zdGF0c1tNQVhfT1JERVIgLSBpXSkpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgg Y3B1X2hhc192bXggJiYgcGFnaW5nX21vZGVfaGFwKGQpICYmICF2bXhfdW5yZXN0cmljdGVkX2d1 ZXN0KHYpICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAqIFNpbmNl IERvbTAgY2Fubm90IGJlIG1pZ3JhdGVkLCB3ZSB3aWxsIG9ubHkgc2V0dXAgdGhlCj4gPiArICAg ICAgICAgKiB1bnJlc3RyaWN0ZWQgZ3Vlc3QgaGVscGVycyBpZiB0aGV5IGFyZSBuZWVkZWQgYnkg dGhlIGN1cnJlbnQKPiA+ICsgICAgICAgICAqIGhhcmR3YXJlIHdlIGFyZSBydW5uaW5nIG9uLgo+ ID4gKyAgICAgICAgICovCj4gPiArICAgICAgICByYyA9IGh2bV9zZXR1cF92bXhfdW5yZXN0cmlj dGVkX2d1ZXN0KGQpOwo+IAo+IENhbGxpbmcgYSBmdW5jdGlvbiBvZiB0aGlzIG5hbWUgaW5zaWRl IGFuIGlmKCkgY2hlY2tpbmcgZm9yCj4gIXZteF91bnJlc3RyaWN0ZWRfZ3Vlc3QoKSBpcywgd2Vs bCwgb2RkLgoKWWVzLCB0aGF0J3MgcmlnaHQuIFdoYXQgYWJvdXQgY2FsbGluZyBpdCBodm1fc2V0 dXBfdm14X3JlYWxtb2RlX2hlbHBlcnM/Cgo+ID4gIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVj dF9kb20wX2h2bShzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBtb2R1bGVfdCAqaW1hZ2UsCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW1hZ2Vf aGVhZHJvb20sCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVs ZV90ICppbml0cmQsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKigqYm9vdHN0cmFwX21hcCkoY29uc3QgbW9kdWxlX3QgKiksCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNtZGxpbmUpCj4gPiAgewo+ID4gKyAgICBp bnQgcmM7Cj4gPiAgCj4gPiAgICAgIHByaW50aygiKiogQnVpbGRpbmcgYSBQVkggRG9tMCAqKlxu Iik7Cj4gPiAgCj4gPiArICAgIC8qIFNhbml0eSEgKi8KPiA+ICsgICAgQlVHX09OKGQtPmRvbWFp bl9pZCAhPSAwKTsKPiA+ICsgICAgQlVHX09OKGQtPnZjcHVbMF0gPT0gTlVMTCk7Cj4gCj4gTWF5 IEkgc3VnZ2VzdAo+IAo+ICAgICBCVUdfT04oZC0+ZG9tYWluX2lkKTsKPiAgICAgQlVHX09OKCFk LT52Y3B1WzBdKTsKPiAKPiBpbiBjYXNlcyBsaWtlIHRoaXM/CgpZZXMsIEkgaGF2ZSB0aGUgdGVu ZGVuY3kgdG8gbm90IHVzZSAnIScgb3IgcGVyZm9ybSBkaXJlY3QgY2hlY2tzIHVubGVzcyBpdCdz IAphIGJvb2xlYW4gdHlwZS4KCj4gPiArICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwo+ IAo+IFdoeSwgb3V0c2lkZSBvZiBhbnkgbG9vcD8KCkl0J3MgdGhlIHNhbWUgdGhhdCdzIGRvbmUg aW4gY29uc3RydWN0X2RvbTBfcHYsIHNvIEkgdGhvdWdoIHRoYXQgaXQgd2FzIGEgCmdvb2QgaWRl YSB0byBkcmFpbiBhbnkgcGVuZGluZyBzb2Z0aXJxcyBiZWZvcmUgc3RhcnRpbmcgZG9tYWluIGJ1 aWxkLgoKUm9nZXIuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK