From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [DOC v6] PV Calls protocol design Date: Wed, 28 Sep 2016 21:10:07 -0400 Message-ID: <20160929011007.GA22665@char.us.oracle.com> References: 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 1bpPro-0000z6-N7 for xen-devel@lists.xenproject.org; Thu, 29 Sep 2016 01:10:28 +0000 Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: jgross@suse.com, lars.kurth@citrix.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, Paul.Durrant@citrix.com, xen-devel@lists.xenproject.org, joao.m.martins@oracle.com, boris.ostrovsky@oracle.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBTZXAgMTQsIDIwMTYgYXQgMDQ6NDU6MDFQTSAtMDcwMCwgU3RlZmFubyBTdGFiZWxs aW5pIHdyb3RlOgo+IEhpIGFsbCwKCkhleSEKCkkgdG9vayBhIGxvb2sgYXQgdGhlIHNwZWMuIEl0 IG92ZXJhbGwgbG9va3MgZ29vZCB3aXRoIGEgZGV0YWlsCm9mIGhvdyBlYWNoIG9mIHRoZSBzdWIt Y29tbWFuZHMgd29ya3MgaW4gZXhoYXVzdGl2ZSBkZXRhaWwgKHdoaWNoCmlzIGF3ZXNvbWUhKS4K ClBsZWFzZSBzZWUgYmVsb3cgZm9yIHNvbWUgcXVlc3Rpb25zLCBjb21tZW50cy4KPiAKPiBUaGlz IGlzIHRoZSBkZXNpZ24gZG9jdW1lbnQgb2YgdGhlIFBWIENhbGxzIHByb3RvY29sLiBZb3UgY2Fu IGZpbmQKPiBwcm90b3R5cGVzIG9mIHRoZSBMaW51eCBmcm9udGVuZCBhbmQgYmFja2VuZCBkcml2 ZXJzIGhlcmU6Cj4gCj4gZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwv Z2l0L3NzdGFiZWxsaW5pL3hlbi5naXQgcHZjYWxscy02Cj4gCj4gVG8gdXNlIHRoZW0sIG1ha2Ug c3VyZSB0byBlbmFibGUgQ09ORklHX1hFTl9QVkNBTExTIGluIHlvdXIga2VybmVsCj4gY29uZmln IGFuZCBhZGQgInB2Y2FsbHM9MSIgdG8gdGhlIGNvbW1hbmQgbGluZSBvZiB5b3VyIERvbVUgTGlu dXgKPiBrZXJuZWwuIFlvdSBhbHNvIG5lZWQgdGhlIHRvb2xzdGFjayB0byBjcmVhdGUgdGhlIGlu aXRpYWwgeGVuc3RvcmUgbm9kZXMKPiBmb3IgdGhlIHByb3RvY29sLiBUbyBkbyB0aGF0LCBwbGVh c2UgYXBwbHkgdGhlIGF0dGFjaGVkIHBhdGNoIHRvIGxpYnhsCj4gKHRoZSBwYXRjaCBpcyBiYXNl ZCBvbiBYZW4gNC43LjAtcmMzKSBhbmQgYWRkICJwdmNhbGxzPTEiIHRvIHlvdXIgRG9tVQo+IGNv bmZpZyBmaWxlLgo+IAo+IAo+IEluIHRoaXMgdmVyc2lvbiBJIGFkZGVkIGEgInJldXNlIiBmaWVs ZCB0byB0aGUgcmVsZWFzZSBjb21tYW5kLCB0byBnaXZlCj4gYW4gaGludCB0byB0aGUgYmFja2Vu ZCB0aGF0IGRhdGEgcmluZyBwYWdlcyBhbmQgZXZ0Y2huIHdpbGwgYmUgcmV1c2VkLgo+IFRoZSBi YWNrZW5kIGlzIGZyZWUgdG8gdW5tYXAgdGhlbSBpbW1lZGlhdGVseSBhcyB1c3VhbCBvciBrZWVw IHRoZW0KPiBtYXBwZWQgdW50aWwgdGhleSBnZXQgcmV1c2VkIChvciB1bnRpbCBpdCBkZWNpZGVz IGl0IGlzIHRpbWUgdG8gZnJlZQo+IHRoZW0pLiBUaGFua3MgdG8gdGhpcyBvcHRpbWl6YXRpb24g cHYgY2FsbHMgY2FuIGhhbmRsZSBtb3JlIHJlcXVlc3RzIHBlcgo+IHNlY29uZCB0aGFuIERvY2tl ciB3aXRoIGFwYWNoZWJlbmNoIGluIG15IHRlc3QgZW52aXJvbm1lbnQuCj4gCj4gSSBhbHNvIGFk ZGVkIGEgIm5ldHdvcmtpbmctY2FsbHMiIGJhY2tlbmQgbm9kZSBvbiB4ZW5zdG9yZSB0byBhbGxv dyB0aGUKPiBiYWNrZW5kIHRvIHNwZWNpZnkgdGhhdCBpcyBzdXBwb3J0aW5nIG5ldHdvcmtpbmcg Y2FsbHMuIEluIGEgZnV0dXJlIHdoZW4KPiBvdGhlciBQT1NJWCBzeXNjYWxsIHNldHMgYXJlIHN1 cHBvcnRlZCwgYSBiYWNrZW5kIGNvdWxkIGRlY2lkZSB0bwo+IGltcGxlbWVudCBvbmx5IG9uZSBz ZXQuCj4gCj4gCj4gUGxlYXNlIHJldmlldyEKPiAKPiBDaGVlcnMsCj4gCj4gU3RlZmFubwo+IAo+ IAo+IENoYW5nZXMgaW4gdjY6Cj4gLSBhZGQgcmV1c2UgZmllbGQgaW4gcmVsZWFzZSBjb21tYW5k Cj4gLSBhZGQgIm5ldHdvcmtpbmctY2FsbHMiIGJhY2tlbmQgbm9kZSBvbiB4ZW5zdG9yZQo+IC0g Zml4ZWQgdGFiL3doaXRlc3BhY2UgaW5kZW50YXRpb24KPiAKPiBDaGFuZ2VzIGluIHY1Ogo+IC0g Y2xhcmlmeSB0ZXh0Cj4gLSByZW5hbWUgaWQgdG8gcmVxX2lkCj4gLSByZW5hbWUgc29ja2lkIHRv IGlkCj4gLSBtb3ZlIGlkIHRvIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHNwZWNpZmljIGZpZWxkcwo+ IC0gYWRkIHZlcnNpb24gbm9kZSB0byB4ZW5zdG9yZQo+IAo+IENoYW5nZXMgaW4gdjQ6Cj4gLSBy ZW5hbWUgeGVuc29jayB0byBwdmNhbGxzCj4gCj4gQ2hhbmdlcyBpbiB2MzoKPiAtIGFkZCBhIGR1 bW15IGVsZW1lbnQgdG8gc3RydWN0IHhlbl94ZW5zb2NrX3JlcXVlc3QgdG8gbWFrZSBzdXJlIHRo ZQo+ICAgc2l6ZSBvZiB0aGUgc3RydWN0IGlzIHRoZSBzYW1lIG9uIGJvdGggeDg2XzMyIGFuZCB4 ODZfNjQKPiAKPiBDaGFuZ2VzIGluIHYyOgo+IC0gYWRkIG1heC1kYXRhcmluZy1wYWdlLW9yZGVy Cj4gLSBhZGQgIlB1Ymxpc2ggYmFja2VuZCBmZWF0dXJlcyBhbmQgdHJhbnNwb3J0IHBhcmFtZXRl cnMiIHRvIGJhY2tlbmQKPiAgIHhlbmJ1cyB3b3JrZmxvdwo+IC0gdXBkYXRlIG5ldyBjbWQgdmFs dWVzCj4gLSB1cGRhdGUgeGVuX3hlbnNvY2tfcmVxdWVzdAo+IC0gYWRkIGJhY2tsb2cgcGFyYW1l dGVyIHRvIGxpc3RlbiBhbmQgYmluYXJ5IGxheW91dAo+IC0gYWRkIGRlc2NyaXB0aW9uIG9mIG5l dyBkYXRhIHJpbmcgZm9ybWF0IChpbnRlcmZhY2UrZGF0YSkKPiAtIG1vZGlmeSBjb25uZWN0IGFu ZCBhY2NlcHQgdG8gcmVmbGVjdCBuZXcgZGF0YSByaW5nIGZvcm1hdAo+IC0gYWRkIGxpbmsgdG8g UE9TSVggZG9jcwo+IC0gYWRkIGVycm9yIG51bWJlcnMKPiAtIGFkZCBhZGRyZXNzIGZvcm1hdCBz ZWN0aW9uIGFuZCByZWxldmFudCBudW1lcmljIGRlZmluaXRpb25zCj4gLSBhZGQgZXhwbGljaXQg bWVudGlvbiBvZiB1bmltcGxlbWVudGVkIGNvbW1hbmRzCj4gLSBhZGQgcHJvdG9jb2wgbm9kZSBu YW1lCj4gLSBhZGQgeGVuYnVzIHNodXRkb3duIGRpYWdyYW0KPiAtIGFkZCBzb2NrZXQgb3BlcmF0 aW9uCj4gCj4gLS0tCj4gCj4gIyBQViBDYWxscyBQcm90b2NvbCB2ZXJzaW9uIDEKPiAKPiAjIyBS YXRpb25hbGUKPiAKPiBQViBDYWxscyBpcyBhIHBhcmF2aXJ0dWFsaXplZCBwcm90b2NvbCB0aGF0 IGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24gb2YKPiBhIHNldCBvZiBQT1NJWCBmdW5jdGlvbnMg aW4gYSBkaWZmZXJlbnQgZG9tYWluLiBUaGUgUFYgQ2FsbHMgZnJvbnRlbmQKCkZvciBmb2xrcyBu b3QgdXNlZCB0byBYZW4sIHRoZSB3b3JkICdkb21haW4nIG1heSBiZSBjb25mdXNpbmcuIFRoZXkK bWF5IHRoaW5rIFBDSSBkb21haW4gKHNlZ21lbnRzKSBvciBzdWNoLgoKUGVyaGFwcyBpdCBtYXkg YmUgZ29vZCB0byByZXBsYWNlIHRoZSB3b3JkIGRvbWFpbiB3aXRoIGNvbnRhaW5lcj8KT3IgZ3Vl c3Q/CgpPciBoYXZlIGFuIHNlY3Rpb24gZXhwbGFpbmluZyB3aGF0IHNvbWUgb2YgdGhlc2Ugd29y ZHMgbWVhbi4KPiBzZW5kcyBQT1NJWCBmdW5jdGlvbiBjYWxscyB0byB0aGUgYmFja2VuZCwgd2hp Y2ggaW1wbGVtZW50cyB0aGVtIGFuZAoKTGlrZSBiYWNrZW5kIGZvciBleGFtcGxlLiBJdCBpcyBj cnlzdGFsIGNsZWFyIHRvIG1lIHdoYXQgdGhpcyBpcywgYnV0CmZvciBzb21lYm9keSB3aG8gaGFz IGJlZW4gYnJld2luZyBpbiBuZXR3b3JraW5nIHRoZSB3b3JkICdiYWNrZW5kJwptYXkgaW1wbHkg YSB3ZWItc2VydmVyIHRvIHRoZW0uCgo+IHJldHVybnMgYSB2YWx1ZSB0byB0aGUgZnJvbnRlbmQu CgpBbmQgdGhpcyB0aGV5IG1heSBhc3NvY2lhdGUgd2l0aCBhIGNsaWVudC4gT3IgYSBjbGllbnQg YXBwbGljYXRpb24gKGUuZyBjdXJsKS4KCj4gCj4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVu dCBjb3ZlcnMgbmV0d29ya2luZyBmdW5jdGlvbiBjYWxscywgc3VjaCBhcwo+IGNvbm5lY3QsIGFj Y2VwdCwgYmluZCwgcmVsZWFzZSwgbGlzdGVuLCBwb2xsLCByZWN2bXNnIGFuZCBzZW5kbXNnOyBi dXQKCk5JVDogU29ydCB0aGVzZSBhbHBoYWJldGljYWxseS4gSXQgd2lsbCBiZSBlYXNpZXIgdG8g ZXhwYW5kIHRoaXMgaW4gdGhlCmZ1dHVyZSBpZiB5b3UgaGF2ZSBpdCBpbiB0aGF0IG9yZGVyLgoK PiB0aGUgcHJvdG9jb2wgaXMgbWVhbnQgdG8gYmUgZWFzaWx5IGV4dGVuZGVkIHRvIGNvdmVyIGRp ZmZlcmVudCBzZXRzIG9mCj4gY2FsbHMuIFVuaW1wbGVtZW50ZWQgY29tbWFuZHMgcmV0dXJuIEVO T1RTVVBQLgoKU3VyZWx5IEVPUE5PVFNVUFAgPwo+IAo+IFBWIENhbGxzIHByb3ZpZGUgdGhlIGZv bGxvd2luZyBiZW5lZml0czoKPiAqIGZ1bGwgdmlzaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgYmVoYXZp b3Igb24gdGhlIGJhY2tlbmQgZG9tYWluLCBhbGxvd2luZwo+ICAgZm9yIGluZXhwZW5zaXZlIGZp bHRlcmluZyBhbmQgbWFuaXB1bGF0aW9uIG9mIGFueSBndWVzdCBjYWxscwo+ICogZXhjZWxsZW50 IHBlcmZvcm1hbmNlCgpOSVQ6IChmZWVsIGZyZWUgdG8gaWdub3JlIGl0KSBNaXNzaW5nIHBlcmlv ZHMgb3IgY29tbWFucyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lcy4KPiAKPiBTcGVjaWZpY2FsbHks IFBWIENhbGxzIGZvciBuZXR3b3JraW5nIG9mZmVyIHRoZXNlIGFkdmFudGFnZXM6Cj4gKiBndWVz dCBuZXR3b3JraW5nIHdvcmtzIG91dCBvZiB0aGUgYm94IHdpdGggVlBOcywgd2lyZWxlc3MgbmV0 d29ya3MgYW5kCj4gICBhbnkgb3RoZXIgY29tcGxleCBjb25maWd1cmF0aW9ucyBvbiB0aGUgaG9z dAo+ICogZ3Vlc3Qgc2VydmljZXMgbGlzdGVuIG9uIHBvcnRzIGJvdW5kIGRpcmVjdGx5IHRvIHRo ZSBiYWNrZW5kIGRvbWFpbiBJUAo+ICAgYWRkcmVzc2VzCj4gKiBsb2NhbGhvc3QgYmVjb21lcyBh IHNlY3VyZSBuYW1lc3BhY2UgZm9yIGludGVyLVZNcyBjb21tdW5pY2F0aW9ucwo+IAo+IAo+ICMj IERlc2lnbgo+CgpXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIG1lbnRpb24gdGhlIHByZS1yZXF1aXNp dGUgb2Ygd2h5IFhlbiBpcyB1c2VkPwpZb3VyIHNsaWRlcyBhdCB0aGUgWFBEUyB3aGVyZSBxdWl0 ZSBnb29kIGFuZCBwZXJoYXBzIHNvbWUgb2YgdGhlIGNvbnRlbnQKaGVyZSAoVk1DUywgUFYgZ3Vl c3RzLCBldGMpIGNvdWxkIGJlIHB1dCBoZXJlLgoKTmF0dXJhbGx5IHRoaXMgaXMgbW9yZSBmb2xr cyB3aG8gaGF2ZW4ndCBiZWVuIG1hcmluYXRpbmcgaW4gWGVuIGZvciB5ZWFycwp0byBnZXQgYW4g aWRlYSB3aHkgaXQgd2FzIGNob29zZW4uCgo+ICMjIyBYZW5zdG9yZQo+IAo+IFRoZSBmcm9udGVu ZCBhbmQgdGhlIGJhY2tlbmQgY29ubmVjdCB0byBlYWNoIG90aGVyIGV4Y2hhbmdpbmcgaW5mb3Jt YXRpb24gdmlhCgpOSVQ6IHMvJ3RvIGVhY2ggb3RoZXIgZXhjaGFuZ2luZyBpbmZvcm1hdGlvbicv J3ZpYSB4ZW5zdG9yZSB0byBleGNoYW5nZSBpbmZvcm1hdGlvbicuCgpCZWNhdXNlIHRoZXkgcmVh bGx5IGRvbid0IGNvbm5lY3QgdG8gZWFjaCBvdGhlciAtIHJhdGhlciBYZW5TdG9yZSBpcyB0aGUK bWVkaXVtIHRocm91Z2ggd2hpY2ggdGhleSAndGFsaycuCgo+IHhlbnN0b3JlLiBUaGUgdG9vbHN0 YWNrIGNyZWF0ZXMgZnJvbnQgYW5kIGJhY2sgbm9kZXMgd2l0aCBzdGF0ZQo+IFhlbmJ1c1N0YXRl SW5pdGlhbGlzaW5nLiBUaGUgcHJvdG9jb2wgbm9kZSBuYW1lIGlzICoqcHZjYWxscyoqLiBUaGVy ZSBjYW4gb25seQoKUGVyaGFwcyBhbHNvIG1lbnRpb24gdGhlIGZpbGUgb3IgVVJMIHdoZXJlIHRo ZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyBzdGF0ZXMKYXJlIGRlZmluZWQ/IE9yIGV2ZW4gaG93 IHRvIHVzZSBYZW5zdG9yZT8KCk9oLCBsaWtlIGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91 bnN0YWJsZS9taXNjL3hlbnN0b3JlLnR4dApBbmQgaHR0cDovL3hlbmJpdHMueGVuLm9yZy9kb2Nz L3Vuc3RhYmxlL2h5cGVyY2FsbC94ODZfNjQvaW5jbHVkZSxwdWJsaWMsaW8seHNfd2lyZS5oLmh0 bWwKYW5kIGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9oeXBlcmNhbGwveDg2 XzY0L2luY2x1ZGUscHVibGljLGlvLHhlbmJ1cy5oLmh0bWwgPwoKCj4gYmUgb25lIFBWIENhbGxz IGZyb250ZW5kIHBlciBkb21haW4uCj4gCj4gIyMjIyBGcm9udGVuZCBYZW5CdXMgTm9kZXMKPiAK PiBwb3J0CgpOb3QgZXZlbnQtY2hhbm5lbCA/Cj4gICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQz Ml90Pgo+IAo+ICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIFhlbiBldmVudCBjaGFubmVsIHVz ZWQgdG8gc2lnbmFsIGFjdGl2aXR5Cj4gICAgICBpbiB0aGUgcmluZyBidWZmZXIuCj4gCj4gcmlu Zy1yZWYKPiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Cj4gCj4gICAgICBUaGUgWGVu IGdyYW50IHJlZmVyZW5jZSBncmFudGluZyBwZXJtaXNzaW9uIGZvciB0aGUgYmFja2VuZCB0byBt YXAKPiAgICAgIHRoZSBzb2xlIHBhZ2UgaW4gYSBzaW5nbGUgcGFnZSBzaXplZCByaW5nIGJ1ZmZl ci4KCltlZGl0OiBJcyB0aGlzIHRoZSBjb21tYW5kIHJpbmcgb3IgZGF0YSByaW5nP10KPiAKPiAj IyMjIEJhY2tlbmQgWGVuQnVzIE5vZGVzCj4gCj4gdmVyc2lvbgo+ICAgICAgVmFsdWVzOiAgICAg ICAgIDx1aW50MzJfdD4KPiAKPiAgICAgIFByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRo ZSBiYWNrZW5kLgoKWW91IG1heSB3YW50IHRvIGV4cGFuZCBvbiB0aGF0LiBMaWtlOgoKQ3VycmVu dGx5IHRoZSB2YWx1ZSBpcyAxLiBPciAxMDEuCgo+IAo+IG1heC1kYXRhcmluZy1wYWdlLW9yZGVy CgpkYXRhcmluZyBvciBkYXRhLXJpbmcKCkJ1dCB3aHkgdGhlICdkYXRhcmluZycgaW4gZmlyc3Qg cGxhY2U/IFdoeSBub3QgJ21heC1wYWdlLW9yZGVyJyA/Cgo+ICAgICAgVmFsdWVzOiAgICAgICAg IDx1aW50MzJfdD4KPiAKPiAgICAgIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIG9mIHRoZSBk YXRhIHJpbmcgaW4gdW5pdHMgb2YgbGIobWFjaGluZQo+ICAgICAgcGFnZXMpLiAoZS5nLiAwID09 IDEgcGFnZSwgIDEgPSAyIHBhZ2VzLCAyID09IDQgcGFnZXMsIGV0Yy4pLgo+IAo+IG5ldHdvcmtp bmctY2FsbHMKPiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Cj4gCj4gICAgICBWYWx1 ZSAiMSIgbWVhbnMgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0IG5ldHdvcmtpbmcgY2FsbHMuCgpz L3N1cHBvcnQvc3VwcG9ydHMvCgpXaGF0IGRvZXMgJ25ldHdvcmtpbmcgY2FsbHMnIG1lYW4/IElz IHRoYXQgdGhlICduZXR3b3JraW5nIGZ1bmN0aW9uIGNhbGxzJwp5b3UgbWVudGlvbmVkPyBQZXJo YXBzIGl0IG1heSBiZSBiZXR0ZXIgdG8gc2F5IHRoYXQKCjE6IHN1cHBvcnRzIHRoZSBhY2NlcHQs IGJpbmQsIGxpc3RlbiwgYW5kIHNvIG9uLgoKQW5kIHRoZW4gd2hlbiB5b3UgZXhwYW5kIG9uIHRo YXQgYW5kIGhhdmUgbW9yZSwgeW91IGNhbiB1c2UKdGhlIHZhbHVlIDIgd2hpY2ggd2lsbCBpbmNs dWRlIHRoZSBvbmVzIGluIDEgYW5kIGV4dHJhLgoKQnV0IG5vdyB3aGF0IGlmIHlvdSB3YW50IHRv IHN0dWZmIG90aGVyIHRoaW5ncyBiZXNpZGVzIG5ldHdvcmtpbmcKZnVuY3Rpb24gY2FsbHM/IFdo YXQgaWYgeW91IHdhbnQgdG8gc2F5IHN0dWZmICdmb3JrJyBvciBzb21ldGhpbmcKZWxzZS4KCldv dWxkIHRoaXMgYmUgYmV0dGVyIGJlIGNhbGxlZCAnZnVuY3Rpb24tY2FsbHMnID8KCj4gICAgICBW YWx1ZSAiMCIgbWVhbnMgdGhhdCBpdCBkb2VzIG5vdC4KCgpJIHByZXN1bWUgdGhhdCB0aGUgdmFs dWUgb2YgMCBtZWFucyB5b3UgY2FuJ3QgcmVhbGx5IGRvIG11Y2gKd2l0aCB0aGlzIHJpbmc/IAo+ IAo+ICMjIyMgU3RhdGUgTWFjaGluZQo+IAo+IEluaXRpYWxpemF0aW9uOgo+IAo+ICAgICAqRnJv bnQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCYWNrKgo+ICAgICBYZW5idXNTdGF0 ZUluaXRpYWxpc2luZyAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nCj4gICAg IC0gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAgICAgLSBRdWVyeSBiYWNrZW5kIGRl dmljZQo+ICAgICAgIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRp ZmljYXRpb24gZGF0YS4KPiAgICAgLSBTZXR1cCBPUyBkZXZpY2UgaW5zdGFuY2UuICAgICAgICAg ICAtIFB1Ymxpc2ggYmFja2VuZCBmZWF0dXJlcwo+ICAgICAtIEFsbG9jYXRlIGFuZCBpbml0aWFs aXplIHRoZSAgICAgICAgICAgYW5kIHRyYW5zcG9ydCBwYXJhbWV0ZXJzCj4gICAgICAgcmVxdWVz dCByaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICAgICAtIFB1 Ymxpc2ggdHJhbnNwb3J0IHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgICAg ICB0aGF0IHdpbGwgYmUgaW4gZWZmZWN0IGR1cmluZyAgICAgICAgICAgICAgICAgICAgICBWCj4g ICAgICAgdGhpcyBjb25uZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNT dGF0ZUluaXRXYWl0Cj4gICAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICB8Cj4g ICAgICAgICAgICAgICAgICBWCj4gICAgICAgIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQKPiAKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFF1ZXJ5IGZyb250ZW5k IHRyYW5zcG9ydCBwYXJhbWV0ZXJzLgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0gQ29ubmVjdCB0byB0aGUgcmVxdWVzdCByaW5nIGFuZAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgY2hhbm5lbC4KPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVu YnVzU3RhdGVDb25uZWN0ZWQKPiAKPiAgICAgIC0gUXVlcnkgYmFja2VuZCBkZXZpY2UgcHJvcGVy dGllcy4KPiAgICAgIC0gRmluYWxpemUgT1MgdmlydHVhbCBkZXZpY2UKPiAgICAgICAgaW5zdGFu Y2UuCj4gICAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAg ICAgICAgICBWCj4gICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZAo+IAo+IE9uY2UgZnJvbnRl bmQgYW5kIGJhY2tlbmQgYXJlIGNvbm5lY3RlZCwgdGhleSBoYXZlIGEgc2hhcmVkIHBhZ2UsIHdo aWNoCj4gd2lsbCBpcyB1c2VkIHRvIGV4Y2hhbmdlIG1lc3NhZ2VzIG92ZXIgYSByaW5nLCBhbmQg YW4gZXZlbnQgY2hhbm5lbCwKPiB3aGljaCBpcyB1c2VkIHRvIHNlbmQgbm90aWZpY2F0aW9ucy4K CllvdSBwcm9iYWJseSB3YW50IHRoZSBDbG9zZWQvQ2xvc2luZyB3aGVuIGEgZ3Vlc3QgaXMgbWln cmF0ZWQ/CgpPciB3aGF0IGlmIHRoZSB1c2VyIC8gY29udGFpbmVyIGRvZXM6CgppZmRvd24gZXRo MDsgaWZ1cCBldGgwPwoKT3IgaWZjb25maWcgZXRoMCA8bmV3IGlwPgoKU2hvdWxkIHRoYXQgdHJp Z2dlciB0aGVuIFhlbkJ1c1JlY29uZmlndXJpbmcgPwoKPiAKPiBTaHV0ZG93bjoKPiAKPiAgICAg KkZyb250KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQmFjayoKPiAgICAgWGVuYnVzU3Rh dGVDb25uZWN0ZWQgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZAo+ICAgICAgICAg ICAgICAgICB8Cj4gICAgICAgICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICAgVgo+ICAgICAg ICBYZW5idXNTdGF0ZUNsb3NpbmcKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtIFVubWFwIGdyYW50cwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0gVW5iaW5kIGV2dGNobnMKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhl bmJ1c1N0YXRlQ2xvc2luZwo+IAo+ICAgICAtIFVuYmluZCBldnRjaG5zCj4gICAgIC0gRnJlZSBy aW5ncwo+ICAgICAtIEZyZWUgZGF0YSBzdHJ1Y3R1cmVzCj4gICAgICAgICAgICAgICAgfAo+ICAg ICAgICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICBWCj4gICAgICAgIFhlbmJ1c1N0YXRlQ2xv c2VkCj4gCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBGcmVlIHJl bWFpbmluZyBkYXRhIHN0cnVjdHVyZXMKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFYKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhl bmJ1c1N0YXRlQ2xvc2VkCj4gCj4gCj4gIyMjIENvbW1hbmRzIFJpbmcKPiAKPiBUaGUgc2hhcmVk IHJpbmcgaXMgdXNlZCBieSB0aGUgZnJvbnRlbmQgdG8gZm9yd2FyZCBQT1NJWCBmdW5jdGlvbiBj YWxscyB0byB0aGUKPiBiYWNrZW5kLiBJJ2xsIHJlZmVyIHRvIHRoaXMgcmluZyBhcyAqKmNvbW1h bmRzIHJpbmcqKiB0byBkaXN0aW5ndWlzaCBpdCBmcm9tCgpzL0knbGwvV2Ugc2hhbGwvCj4gb3Ro ZXIgcmluZ3Mgd2hpY2ggY2FuIGJlIGNyZWF0ZWQgbGF0ZXIgaW4gdGhlIGxpZmVjeWNsZSBvZiB0 aGUgcHJvdG9jb2wgKGRhdGEKPiByaW5ncykuIFRoZSByaW5nIGZvcm1hdCBpcyBkZWZpbmVkIHVz aW5nIHRoZSBmYW1pbGlhciBgREVGSU5FX1JJTkdfVFlQRVNgIG1hY3JvCgpEYXRhIHJpbmdzPyBX aGF0IGFyZSB0aG9zZT8gSWYgdGhpcyBpcyB0aGUgY29tbWFuZCByaW5nIGFuZCB0aGVyZSBpcwph IGRhdGEgcmluZyAtIHNob3VsZG4ndCB5b3UgYWxzbyBoYXZlIGEgWGVuQnVzIGVudHJ5IGZvciB0 aGUgJ25vcm1hbCcgcmluZz8KClNob3VsZG4ndCB5b3UgaGF2ZSB0aGVuIGEgY29tbWFuZC1yaW5n IGluIHRoZSBYZW5CdXMgc3RvcmU/CgpJIGFtIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSAncmlu Zy1yZWYnIGlzIGZvciB0aGUgbm9ybWFsIChjb21tYW5kKSByaW5nLgoKPiAoYHhlbi9pbmNsdWRl L3B1YmxpYy9pby9yaW5nLmhgKS4gRnJvbnRlbmQgcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBvbiB0 aGUgcmluZwo+IHVzaW5nIHRoZSBgUklOR19HRVRfUkVRVUVTVGAgbWFjcm8uCj4gCj4gVGhlIGZv cm1hdCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Cj4gICAgIAo+ICAgICAjZGVmaW5lIFBWQ0FMTFNf U09DS0VUICAgICAgICAgMAo+ICAgICAjZGVmaW5lIFBWQ0FMTFNfQ09OTkVDVCAgICAgICAgMQo+ ICAgICAjZGVmaW5lIFBWQ0FMTFNfUkVMRUFTRSAgICAgICAgMgo+ICAgICAjZGVmaW5lIFBWQ0FM TFNfQklORCAgICAgICAgICAgMwo+ICAgICAjZGVmaW5lIFBWQ0FMTFNfTElTVEVOICAgICAgICAg NAo+ICAgICAjZGVmaW5lIFBWQ0FMTFNfQUNDRVBUICAgICAgICAgNQo+ICAgICAjZGVmaW5lIFBW Q0FMTFNfUE9MTCAgICAgICAgICAgNgoKSSB3b3VsZCByZWNvbW1lbmQgc29ydGluZyB0aGVtIGJ5 IG5hbWUsIGJ1dCBwZXJoYXBzIGl0IG1ha2VzIG1vcmUgc2Vuc2UKdG8gc29ydCB0aGVtIGluIHRo aXMgb3JkZXI/CgpBdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50IHlvdSBhbHNvIG1lbnRpb25l ZCByY3Ztc2cgYW5kIHNlbmRtc2cgYnV0CnRoZXkgYXJlIG5vdCBoZXJlLiBTaG91bGQgdGhleSBi ZSByZW1vdmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZGVzaWduIGRvYz8KCgpBbHNvLCB5b3UgbWF5 IHdhbnQgdG8gbWVudGlvbjoKCiIqKk5PVEUqKjogVGhlIGBpZGAgaXMgYSB1bmlxdWUgdmFsdWUs IHNpbWlsYXIgdG8gYSAnY29va2llJy4gU2VlIHNlY3Rpb24gPGI+YmxhaDwvYj4KZm9yIGRldGFp bHMuIgoKQXMgaXQgd2FzIG5vdCBjbGVhciB3aGF0IHRoZSAncmVxX2lkJyB2cyAnaWQnIGlzLgoK PiAKPiAgICAgc3RydWN0IHhlbl9wdmNhbGxzX3JlcXVlc3Qgewo+ICAgICAJdWludDMyX3QgcmVx X2lkOyAvKiBwcml2YXRlIHRvIGd1ZXN0LCBlY2hvZWQgaW4gcmVzcG9uc2UgKi8KPiAgICAgCXVp bnQzMl90IGNtZDsgICAgLyogY29tbWFuZCB0byBleGVjdXRlICovCj4gICAgIAl1bmlvbiB7Cj4g ICAgIAkJc3RydWN0IHhlbl9wdmNhbGxzX3NvY2tldCB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ ICAgICAJCQl1aW50MzJfdCBkb21haW47Cj4gICAgIAkJCXVpbnQzMl90IHR5cGU7Cj4gICAgIAkJ CXVpbnQzMl90IHByb3RvY29sOwo+ICAgICAJCX0gc29ja2V0OwoKRm9yIHRob3NlIHRoYXQgYXJl IG5vdCBmYW1pbGlhciB3aXRoIGNvbm5lY3Qgb3Igc3VjaCAtIHdvdWxkIGl0Cm1ha2Ugc2Vuc2Ug dG8gcG9pbnQgd2hlcmUgeW91IGdvdCBzYXkgJzI4JyBmcm9tPwoKPiAgICAgCQlzdHJ1Y3QgeGVu X3B2Y2FsbHNfY29ubmVjdCB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCQl1aW50OF90 IGFkZHJbMjhdOwo+ICAgICAJCQl1aW50MzJfdCBsZW47Cj4gICAgIAkJCXVpbnQzMl90IGZsYWdz Owo+ICAgICAJCQlncmFudF9yZWZfdCByZWY7CgpIbSwgd2hhdCBpcyB0aGlzIGZvcj8gT29vaCwg X1RISVNfIGlzIHdoYXQgdGhlIGRhdGFyaW5nIHlvdSBzcG9rZQphYm91dCBpcyBmb3IhIFBlcmhh cHM/IAoKPiAgICAgCQkJdWludDMyX3QgZXZ0Y2huOwo+ICAgICAJCX0gY29ubmVjdDsKPiAgICAg CQlzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVsZWFzZSB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAg ICAJCQl1aW50OF90IHJldXNlOwo+ICAgICAJCX0gcmVsZWFzZTsKPiAgICAgCQlzdHJ1Y3QgeGVu X3B2Y2FsbHNfYmluZCB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCQl1aW50OF90IGFk ZHJbMjhdOwo+ICAgICAJCQl1aW50MzJfdCBsZW47Cj4gICAgIAkJfSBiaW5kOwo+ICAgICAJCXN0 cnVjdCB4ZW5fcHZjYWxsc19saXN0ZW4gewo+ICAgICAJCQl1aW50NjRfdCBpZDsKPiAgICAgCQkJ dWludDMyX3QgYmFja2xvZzsKPiAgICAgCQl9IGxpc3RlbjsKPiAgICAgCQlzdHJ1Y3QgeGVuX3B2 Y2FsbHNfYWNjZXB0IHsKPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gICAgIAkJCXVpbnQ2NF90IGlk X25ldzsKPiAgICAgCQkJZ3JhbnRfcmVmX3QgcmVmOwo+ICAgICAJCQl1aW50MzJfdCBldnRjaG47 Cj4gICAgIAkJfSBhY2NlcHQ7Cj4gICAgIAkJc3RydWN0IHhlbl9wdmNhbGxzX3BvbGwgewo+ICAg ICAJCQl1aW50NjRfdCBpZDsKPiAgICAgCQl9IHBvbGw7Cj4gICAgIAkJLyogZHVtbXkgbWVtYmVy IHRvIGZvcmNlIHNpemVvZihzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCkgdG8gbWF0Y2ggYWNy b3NzIGFyY2hzICovCj4gICAgIAkJc3RydWN0IHhlbl9wdmNhbGxzX2R1bW15IHsKPiAgICAgCQkJ dWludDhfdCBkdW1teVs1Nl07CgpXaGF0IGlmIHNvbWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzIHlv dSB3YW50IHRvIHN0dWZmIGluIGhlcmUgYXJlIGJpZ2dlciB0aGFuCjU2PwoKU2F5IDEyOD8gV291 bGQgdGhpcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmU/IEFuZCBpZiBzbywgd291bGQgIGBuZXR3b3Jr aW5nLWNhbGxzYAppbiB0aGUgWGVuQnVzIGJlIHNheSAyPwoKPiAgICAgCQl9IGR1bW15Owo+ICAg ICAJfSB1Owo+ICAgICB9Owo+IAo+IFRoZSBmaXJzdCB0d28gZmllbGRzIGFyZSBjb21tb24gZm9y IGV2ZXJ5IGNvbW1hbmQuIFRoZWlyIGJpbmFyeSBsYXlvdXQKPiBpczoKPiAKPiAgICAgMCAgICAg ICA0ICAgICAgIDgKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAgICAgfHJlcV9pZCB8ICBjbWQg IHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAKPiAtICoqcmVxX2lkKiogaXMgZ2VuZXJhdGVk IGJ5IHRoZSBmcm9udGVuZCBhbmQgaWRlbnRpZmllcyBvbmUgc3BlY2lmaWMgcmVxdWVzdAo+IC0g KipjbWQqKiBpcyB0aGUgY29tbWFuZCByZXF1ZXN0ZWQgYnkgdGhlIGZyb250ZW5kOgo+IAo+ICAg ICAtIGBQVkNBTExTX1NPQ0tFVGA6ICAwCj4gICAgIC0gYFBWQ0FMTFNfQ09OTkVDVGA6IDEKPiAg ICAgLSBgUFZDQUxMU19SRUxFQVNFYDogMgo+ICAgICAtIGBQVkNBTExTX0JJTkRgOiAgICAzCj4g ICAgIC0gYFBWQ0FMTFNfTElTVEVOYDogIDQKPiAgICAgLSBgUFZDQUxMU19BQ0NFUFRgOiAgNQo+ ICAgICAtIGBQVkNBTExTX1BPTExgOiAgICA2Cj4gCj4gQm90aCBmaWVsZHMgYXJlIGVjaG9lZCBi YWNrIGJ5IHRoZSBiYWNrZW5kLgo+IAo+IEFzIGZvciB0aGUgb3RoZXIgWGVuIHJpbmcgYmFzZWQg cHJvdG9jb2xzLCBhZnRlciB3cml0aW5nIGEgcmVxdWVzdCB0byB0aGUgcmluZywKCnMvQXMgZm9y IHRoZSBvdGhlci9BcyB0aGUgb3RoZXIvCnMvcHJvdGNvbHMvcHJvdG9jb2xzIGJlaGF2ZS8KCj4g dGhlIGZyb250ZW5kIGNhbGxzIGBSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElGWWAg YW5kIGlzc3VlcyBhbiBldmVudAo+IGNoYW5uZWwgbm90aWZpY2F0aW9uIHdoZW4gYSBub3RpZmlj YXRpb24gaXMgcmVxdWlyZWQuCj4gCj4gQmFja2VuZCByZXNwb25zZXMgYXJlIGFsbG9jYXRlZCBv biB0aGUgcmluZyB1c2luZyB0aGUgYFJJTkdfR0VUX1JFU1BPTlNFYCBtYWNyby4KPiBUaGUgZm9y bWF0IGlzIHRoZSBmb2xsb3dpbmc6Cj4gCj4gICAgIHN0cnVjdCB4ZW5fcHZjYWxsc19yZXNwb25z ZSB7Cj4gICAgICAgICB1aW50MzJfdCByZXFfaWQ7Cj4gICAgICAgICB1aW50MzJfdCBjbWQ7Cj4g ICAgICAgICBpbnQzMl90IHJldDsKPiAgICAgICAgIHVpbnQzMl90IHBhZDsKPiAgICAgICAgIHVu aW9uIHsKPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNhbGxzX3NvY2tldCB7Cj4gICAgIAkJCXVpbnQ2 NF90IGlkOwo+ICAgICAJCX0gc29ja2V0Owo+ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNfY29u bmVjdCB7Cj4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ICAgICAJCX0gY29ubmVjdDsKPiAgICAgCQlz dHJ1Y3QgX3hlbl9wdmNhbGxzX3JlbGVhc2Ugewo+ICAgICAJCQl1aW50NjRfdCBpZDsKPiAgICAg CQl9IHJlbGVhc2U7Cj4gICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19iaW5kIHsKPiAgICAgCQkJ dWludDY0X3QgaWQ7Cj4gICAgIAkJfSBiaW5kOwo+ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNf bGlzdGVuIHsKPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gICAgIAkJfSBsaXN0ZW47Cj4gICAgIAkJ c3RydWN0IF94ZW5fcHZjYWxsc19hY2NlcHQgewo+ICAgICAJCQl1aW50NjRfdCBpZDsKPiAgICAg CQl9IGFjY2VwdDsKPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNhbGxzX3BvbGwgewo+ICAgICAJCQl1 aW50NjRfdCBpZDsKPiAgICAgCQl9IHBvbGw7Cj4gICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19k dW1teSB7Cj4gICAgIAkJCXVpbnQ4X3QgZHVtbXlbOF07Cj4gICAgIAkJfSBkdW1teTsKPiAgICAg CX0gdTsKPiAgICAgfTsKPiAKPiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgYXJlIGNvbW1vbiBmb3Ig ZXZlcnkgcmVzcG9uc2UuIFRoZWlyIGJpbmFyeSBsYXlvdXQKPiBpczoKPiAKPiAgICAgMCAgICAg ICA0ICAgICAgIDggICAgICAgMTIgICAgICAxNgo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0rLS0tLS0tLSsKPiAgICAgfHJlcV9pZCB8ICBjbWQgIHwgIHJldCAgfCAgcGFkICB8Cj4gICAg ICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+IAo+IC0gKipyZXFfaWQqKjogZWNo b2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gLSAqKmNtZCoqOiBlY2hvZWQgYmFjayBmcm9tIHJlcXVl c3QKPiAtICoqcmV0Kio6IHJldHVybiB2YWx1ZSwgaWRlbnRpZmllcyBzdWNjZXNzICgwKSBvciBm YWlsdXJlIChzZWUgZXJyb3IgbnVtYmVycwo+ICAgYmVsb3cpLiBJZiB0aGUgKipjbWQqKiBpcyBu b3Qgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLCByZXQgaXMgRU5PVFNVUFAuCgpTdXJlbHkgRU9Q Tk9UU1VQUCA/Cgo+IC0gKipwYWQqKjogcGFkZGluZwo+IAo+IEFmdGVyIGNhbGxpbmcgYFJJTkdf UFVTSF9SRVNQT05TRVNfQU5EX0NIRUNLX05PVElGWWAsIHRoZSBiYWNrZW5kIGNoZWNrcyB3aGV0 aGVyCj4gaXQgbmVlZHMgdG8gbm90aWZ5IHRoZSBmcm9udGVuZCBhbmQgZG9lcyBzbyB2aWEgZXZl bnQgY2hhbm5lbC4KPiAKPiBBIGRlc2NyaXB0aW9uIG9mIGVhY2ggY29tbWFuZCwgdGhlaXIgYWRk aXRpb25hbCByZXF1ZXN0IGFuZCByZXNwb25zZQo+IGZpZWxkcyBmb2xsb3cuCj4gCj4gCj4gIyMj IyBTb2NrZXQKPiAKPiBUaGUgKipzb2NrZXQqKiBvcGVyYXRpb24gY29ycmVzcG9uZHMgdG8gdGhl IFBPU0lYIFtzb2NrZXRdW3NvY2tldF0KPiBmdW5jdGlvbi4gSXQgY3JlYXRlcyBhIG5ldyBzb2Nr ZXQgb2YgdGhlIHNwZWNpZmllZCBmYW1pbHksIHR5cGUgYW5kCj4gcHJvdG9jb2wuICoqaWQqKiBp cyBmcmVlbHkgY2hvc2VuIGJ5IHRoZSBmcm9udGVuZCBhbmQgcmVmZXJlbmNlcyB0aGlzCj4gc3Bl Y2lmaWMgc29ja2V0IGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiBTZWUgIlNvY2tldCBmYW1pbGll cyBhbmQKPiBhZGRyZXNzIGZvcm1hdCIgYmVsb3cuCj4gCj4gUmVxdWVzdCBmaWVsZHM6Cj4gCj4g LSAqKmNtZCoqIHZhbHVlOiAwCj4gLSBhZGRpdGlvbmFsIGZpZWxkczoKPiAgIC0gKippZCoqOiBn ZW5lcmF0ZWQgYnkgdGhlIGZyb250ZW5kLCBpdCBpZGVudGlmaWVzIHRoZSBuZXcgc29ja2V0Cj4g ICAtICoqZG9tYWluKio6IHRoZSBjb21tdW5pY2F0aW9uIGRvbWFpbgo+ICAgLSAqKnR5cGUqKjog dGhlIHNvY2tldCB0eXBlCj4gICAtICoqcHJvdG9jb2wqKjogdGhlIHBhcnRpY3VsYXIgcHJvdG9j b2wgdG8gYmUgdXNlZCB3aXRoIHRoZSBzb2NrZXQsIHVzdWFsbHkgMAo+IAo+IFJlcXVlc3QgYmlu YXJ5IGxheW91dDoKPiAKPiAgICAgOCAgICAgICAxMiAgICAgIDE2ICAgICAgMjAgICAgIDI0ICAg ICAgIDI4Cj4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4g ICAgIHwgICAgICAgaWQgICAgICB8ZG9tYWluIHwgdHlwZSAgfHByb3RvY298Cj4gICAgICstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gCj4gUmVzcG9uc2UgYWRkaXRp b25hbCBmaWVsZHM6Cj4gCj4gLSAqKmlkKio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IAo+ IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6Cj4gCj4gICAgIDE2ICAgICAgIDIwICAgICAgIDI0Cj4g ICAgICstLS0tLS0tKy0tLS0tLS0tKwo+ICAgICB8ICAgICAgIGlkICAgICAgIHwKPiAgICAgKy0t LS0tLS0rLS0tLS0tLS0rCj4gCj4gUmV0dXJuIHZhbHVlOgo+IAo+ICAgLSAwIG9uIHN1Y2Nlc3MK PiAgIC0gU2VlIHRoZSBbUE9TSVggc29ja2V0IGZ1bmN0aW9uXVtjb25uZWN0XSBmb3IgZXJyb3Ig bmFtZXM7IHRoZSBjb3JyZXNwb25kaW5nCj4gICAgIGVycm9yIG51bWJlcnMgYXJlIHNwZWNpZmll ZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50Lgo+IAo+ICMjIyMgQ29ubmVjdAo+IAo+IFRoZSAqKmNv bm5lY3QqKiBvcGVyYXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIFtjb25uZWN0XVtjb25u ZWN0XQo+IGZ1bmN0aW9uLiBJdCBjb25uZWN0cyBhIHByZXZpb3VzbHkgY3JlYXRlZCBzb2NrZXQg KGlkZW50aWZpZWQgYnkgKippZCoqKQo+IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KPiAKPiBU aGUgY29ubmVjdCBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBzaGFyZWQgcmluZywgd2hpY2ggd2Un bGwgY2FsbCAqKmRhdGEKPiByaW5nKiouIFRoZSBkYXRhIHJpbmcgaXMgdXNlZCB0byBzZW5kIGFu ZCByZWNlaXZlIGRhdGEgZnJvbSB0aGUgc29ja2V0Lgo+IFRoZSBjb25uZWN0IG9wZXJhdGlvbiBw YXNzZXMgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCBhcmUKPiB1dGlsaXplZCB0byBz ZXR1cCB0aGUgbmV3IHJpbmc6ICoqZXZ0Y2huKiogYW5kICoqcmVmKiouICoqZXZ0Y2huKiogaXMg dGhlCj4gcG9ydCBudW1iZXIgb2YgYSBuZXcgZXZlbnQgY2hhbm5lbCB3aGljaCB3aWxsIGJlIHVz ZWQgZm9yIG5vdGlmaWNhdGlvbnMKPiBvZiBhY3Rpdml0eSBvbiB0aGUgZGF0YSByaW5nLiAqKnJl ZioqIGlzIHRoZSBncmFudCByZWZlcmVuY2Ugb2YgYSBwYWdlCj4gd2hpY2ggY29udGFpbnMgc2hh cmVkIHBvaW50ZXJzIHRvIHdyaXRlIGFuZCByZWFkIGRhdGEgZnJvbSB0aGUgZGF0YSByaW5nCgpU aGUgJ3RvIHdyaXRlIGFuZCByZWFkIGRhdGEgZnJvbSB0aGUgZGF0YSByaW5nJyBzb3VuZHMgd3Jv bmcuCgo+IGFuZCB0aGUgZnVsbCBhcnJheSBvZiBncmFudCByZWZlcmVuY2VzIGZvciB0aGUgcmlu ZyBidWZmZXJzLiBJdCB3aWxsIGJlCgpJIGFtIGFjdHVhbGx5IG5vdCBzdXJlIHdoYXQgeW91IGFy ZSBzYXlpbmcuIElzIHRoaXMgJ2RhdGEgcmluZycgd2hpY2gKaGFzICdzaGFyZWQgcG9pbnRlcnMn IHBvaW50aW5nIHRvIGFuICdmdWxsIGFycmF5IG9mIGdyYW50IHJlZmVyZW5jZXMnPwoKSW4gb3Ro ZXIgd29yZHMgLSBhbiB0d28gbGV2ZWwgdHJlZT8gVGhlICdkYXRhIHJpbmcnIGlzIGZpbGxlZCB3 aXRoCjUxMiBwZXIgcGFnZSBvZiBncmFudCByZWZlcmVuY2VzPyBBbmQgZWFjaCBvZiB0aG9zZSBn cmFudCByZWZlcmVuY2VzIGlzCnVzZWQgPwoKSSB3aWxsIHJlYWQgb24sIGl0IHByb2JhYmx5IHNh eXMgaXQgYmVsb3cuLi4KCj4gZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsZWQgbGF0ZXIuIFRoZSBk YXRhIHJpbmcgaXMgdW5tYXBwZWQgYW5kIGZyZWVkIHVwb24KCnMvZGV0YWlsZWQvZGV0YWlsLwoK PiBpc3N1aW5nIGEgKipyZWxlYXNlKiogY29tbWFuZCBvbiB0aGUgYWN0aXZlIHNvY2tldCBpZGVu dGlmaWVkIGJ5ICoqaWQqKi4KPiAKPiBXaGVuIHRoZSBmcm9udGVuZCBpc3N1ZXMgYSAqKmNvbm5l Y3QqKiBjb21tYW5kLCB0aGUgYmFja2VuZDoKPiAtIGZpbmRzIGl0cyBvd24gaW50ZXJuYWwgc29j a2V0IGNvcnJlc3BvbmRpbmcgdG8gKippZCoqCj4gLSBjb25uZWN0cyB0aGUgc29ja2V0IHRvICoq YWRkcioqCj4gLSBtYXBzIHRoZSBncmFudCByZWZlcmVuY2UgKipyZWYqKiwgdGhlIHNoYXJlZCBw YWdlIGNvbnRhaW5zIHRoZSBkYXRhCj4gICByaW5nIGludGVyZmFjZSAoYHN0cnVjdCBwdmNhbGxz X2RhdGFfaW50ZmApCj4gLSBtYXBzIGFsbCB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBsaXN0ZWQgaW4g YHN0cnVjdCBwdmNhbGxzX2RhdGFfaW50ZmAgYW5kCj4gICB1c2VzIHRoZW0gYXMgc2hhcmVkIG1l bW9yeSBmb3IgdGhlIHJpbmcgYnVmZmVycwo+IC0gYmluZCB0aGUgKipldnRjaG4qKgoKCmJpbmQg dGhlICoqZXZ0Y2gqKiB0byB0aGUgaW50ZXJuYWwgc29ja2V0PwoKPiAtIHJlcGxpZXMgdG8gdGhl IGZyb250ZW5kCj4gCj4gVGhlIGRhdGEgcmluZyBmb3JtYXQgd2lsbCBiZSBkZXNjcmliZWQgaW4g dGhlIGZvbGxvd2luZyBzZWN0aW9uLgo+IAo+IFJlcXVlc3QgZmllbGRzOgo+IAo+IC0gKipjbWQq KiB2YWx1ZTogMAo+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAtICoqaWQqKjogaWRlbnRpZmll cyB0aGUgc29ja2V0Cj4gICAtICoqYWRkcioqOiBhZGRyZXNzIHRvIGNvbm5lY3QgdG8sIHNlZSB0 aGUgYWRkcmVzcyBmb3JtYXQgc2VjdGlvbiBmb3IgbW9yZQo+ICAgICBpbmZvcm1hdGlvbgo+ICAg LSAqKmxlbioqOiBhZGRyZXNzIGxlbmd0aAo+ICAgLSAqKmZsYWdzKio6IGZsYWdzIGZvciB0aGUg Y29ubmVjdGlvbiwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZQo+ICAgLSAqKnJlZioqOiBncmFu dCByZWZlcmVuY2Ugb2YgdGhlIHBhZ2UgY29udGFpbmluZyBgc3RydWN0Cj4gICAgIHB2Y2FsbHNf ZGF0YV9pbnRmYAo+ICAgLSAqKmV2dGNobioqOiBwb3J0IG51bWJlciBvZiB0aGUgZXZ0Y2huIHRv IHNpZ25hbCBhY3Rpdml0eSBvbiB0aGUgZGF0YSByaW5nCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5 b3V0Ogo+IAo+ICAgICA4ICAgICAgIDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjgg ICAgICAzMiAgICAgIDM2ICAgICAgNDAgICAgICA0NAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4g ICAgIHwgICAgICAgaWQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAg ICAgICAgICAgICAgICAgICAgIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8IGxlbiAg IHwgZmxhZ3MgfCAgcmVmICB8ZXZ0Y2huIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rCj4gCj4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gCj4gLSAqKmlkKio6 IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IAo+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6Cj4g Cj4gICAgIDE2ICAgICAgMjAgICAgICAyNAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8 ICAgICAgIGlkICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJldHVybiB2YWx1 ZToKPiAKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIGNvbm5lY3QgZnVu Y3Rpb25dW2Nvbm5lY3RdIGZvciBlcnJvciBuYW1lczsgdGhlIGNvcnJlc3BvbmRpbmcKPiAgICAg ZXJyb3IgbnVtYmVycyBhcmUgc3BlY2lmaWVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCj4gCj4g IyMjIyBSZWxlYXNlCj4gCj4gVGhlICoqcmVsZWFzZSoqIG9wZXJhdGlvbiBjbG9zZXMgYW4gZXhp c3RpbmcgYWN0aXZlIG9yIGEgcGFzc2l2ZSBzb2NrZXQuCj4gCj4gV2hlbiBhIHJlbGVhc2UgY29t bWFuZCBpcyBpc3N1ZWQgb24gYSBwYXNzaXZlIHNvY2tldCwgdGhlIGJhY2tlbmQKPiByZWxlYXNl cyBpdCBhbmQgZnJlZXMgaXRzIGludGVybmFsIG1hcHBpbmdzLiBXaGVuIGEgcmVsZWFzZSBjb21t YW5kIGlzCj4gaXNzdWVkIGZvciBhbiBhY3RpdmUgc29ja2V0LCB0aGUgZGF0YSByaW5nIGlzIGFs c28gdW5tYXBwZWQgYW5kIGZyZWVkOgo+IAo+IC0gZnJvbnRlbmQgc2VuZHMgcmVsZWFzZSBjb21t YW5kIGZvciBhbiBhY3RpdmUgc29ja2V0Cj4gLSBiYWNrZW5kIHJlbGVhc2VzIHRoZSBzb2NrZXQK PiAtIGJhY2tlbmQgdW5tYXBzIHRoZSBkYXRhIHJpbmcgYnVmZmVycwo+IC0gYmFja2VuZCB1bm1h cHMgdGhlIGRhdGEgcmluZyBpbnRlcmZhY2UKPiAtIGJhY2tlbmQgdW5iaW5kcyB0aGUgZXZ0Y2hu Cj4gLSBiYWNrZW5kIHJlcGxpZXMgdG8gZnJvbnRlbmQKPiAtIGZyb250ZW5kIGZyZWVzIHJpbmcg YW5kIHVuYmluZHMgZXZ0Y2huCj4gCj4gUmVxdWVzdCBmaWVsZHM6Cj4gCj4gLSAqKmNtZCoqIHZh bHVlOiAxCj4gLSBhZGRpdGlvbmFsIGZpZWxkczoKPiAgIC0gKippZCoqOiBpZGVudGlmaWVzIHRo ZSBzb2NrZXQKPiAgIC0gKipyZXVzZSoqOiBhbiBvcHRpbWl6YXRpb24gaGludCBmb3IgdGhlIGJh Y2tlbmQuIFRoZSBmaWVsZCBpcwo+ICAgICBpZ25vcmVkIGZvciBwYXNzaXZlIHNvY2tldHMuIFdo ZW4gc2V0IHRvIDEsIHRoZSBmcm9udGVuZCBsZXQgdGhlCgpzL2xldC9sZXRzLwo+ICAgICBiYWNr ZW5kIGtub3cgdGhhdCBpdCB3aWxsIHJldXNlIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIGdyYW50 IHBhZ2VzCj4gICAgIChpbnRlcmZhY2UgYW5kIGRhdGEgcmluZykgYW5kIGV2dGNobiB3aGVuIGNy ZWF0aW5nIG9uZSBvZiB0aGUgbmV4dAo+ICAgICBhY3RpdmUgc29ja2V0cy4gVGhlIGJhY2tlbmQg Y2FuIHRha2UgYWR2YW50YWdlIG9mIGl0IGJ5IGRlbGF5aW5nCj4gICAgIHVubWFwcGluZyBncmFu dHMgYW5kIHVuYmluZGluZyB0aGUgZXZ0Y2huLiBUaGUgYmFja2VuZCBpcyBmcmVlIHRvCj4gICAg IGlnbm9yZSB0aGUgaGludC4KCkFuZCBob3cgd2lsbCB0aGUgYmFja2VuZCBrbm93IHRoaXM/IEJh c2VkIG9uIHRoZSAqKmlkKiogb3Igb24gcmluZy1yZWY/Cgo+IAo+IFJlcXVlc3QgYmluYXJ5IGxh eW91dDoKPiAKPiAgICAgOCAgICAgICAxMiAgICAgIDE2ICAgIDE3Cj4gICAgICstLS0tLS0tKy0t LS0tLS0rLS0tLS0rCj4gICAgIHwgICAgICAgaWQgICAgICB8cmV1c2V8Cj4gICAgICstLS0tLS0t Ky0tLS0tLS0rLS0tLS0rCj4gCj4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gCj4gLSAq KmlkKio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IAo+IFJlc3BvbnNlIGJpbmFyeSBsYXlv dXQ6Cj4gCj4gICAgIDE2ICAgICAgMjAgICAgICAyNAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ ICAgICB8ICAgICAgIGlkICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJldHVy biB2YWx1ZToKPiAKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIHNodXRk b3duIGZ1bmN0aW9uXVtzaHV0ZG93bl0gZm9yIGVycm9yIG5hbWVzOyB0aGUKPiAgICAgY29ycmVz cG9uZGluZyBlcnJvciBudW1iZXJzIGFyZSBzcGVjaWZpZWQgbGF0ZXIgaW4gdGhpcyBkb2N1bWVu dC4KPiAKPiAjIyMjIEJpbmQKPiAKPiBUaGUgKipiaW5kKiogb3BlcmF0aW9uIGNvcnJlc3BvbmRz IHRvIHRoZSBQT1NJWCBbYmluZF1bYmluZF0gZnVuY3Rpb24uCj4gSXQgYXNzaWducyB0aGUgYWRk cmVzcyBwYXNzZWQgYXMgcGFyYW1ldGVyIHRvIGEgcHJldmlvdXNseSBjcmVhdGVkCj4gc29ja2V0 LCBpZGVudGlmaWVkIGJ5ICoqaWQqKi4gKipCaW5kKiosICoqbGlzdGVuKiogYW5kICoqYWNjZXB0 KiogYXJlCj4gdGhlIHRocmVlIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gaGF2ZSBmdWxseSB3b3Jr aW5nIHBhc3NpdmUgc29ja2V0cyBhbmQKPiBzaG91bGQgYmUgaXNzdWVkIGluIHRoaXMgb3JkZXIu CgpBSEFIISBXaGljaCBleHBsYWlucyB3aHkgeW91ciBQVl9DQUxMUyBhcmUgaW4gdGhhdCBvcmRl ci4gUGVyaGFwcyBtZW50aW9uCnRoYXQgaW4gdGhlIHNlY3Rpb24gdGhhdCBpbnRyb2R1Y2VzIHRo ZSBQViBjYWxscz8KCj4gCj4gUmVxdWVzdCBmaWVsZHM6Cj4gCj4gLSAqKmNtZCoqIHZhbHVlOiAy Cj4gLSBhZGRpdGlvbmFsIGZpZWxkczoKPiAgIC0gKippZCoqOiBpZGVudGlmaWVzIHRoZSBzb2Nr ZXQKPiAgIC0gKiphZGRyKio6IGFkZHJlc3MgdG8gY29ubmVjdCB0bywgc2VlIHRoZSBhZGRyZXNz IGZvcm1hdCBzZWN0aW9uIGZvciBtb3JlCj4gICAgIGluZm9ybWF0aW9uCj4gICAtICoqbGVuKio6 IGFkZHJlc3MgbGVuZ3RoCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICA4ICAg ICAgIDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAgICAzMiAgICAgIDM2ICAg ICAgNDAgICAgICA0NAo+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgIHwgICAgICAgaWQgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAgICAgICAgICAgICAgICAgICAg IHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8ICBsZW4gIHwKPiAgICAgKy0tLS0tLS0r Cj4gCj4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gCj4gLSAqKmlkKio6IGVjaG9lZCBi YWNrIGZyb20gcmVxdWVzdAo+IAo+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6Cj4gCj4gICAgIDE2 ICAgICAgMjAgICAgICAyNAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8ICAgICAgIGlk ICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJldHVybiB2YWx1ZToKPiAKPiAg IC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIGJpbmQgZnVuY3Rpb25dW2JpbmRd IGZvciBlcnJvciBuYW1lczsgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IKPiAgICAgbnVtYmVycyBh cmUgc3BlY2lmaWVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCj4gCj4gCj4gIyMjIyBMaXN0ZW4K PiAKPiBUaGUgKipsaXN0ZW4qKiBvcGVyYXRpb24gbWFya3MgdGhlIHNvY2tldCBhcyBhIHBhc3Np dmUgc29ja2V0LiBJdCBjb3JyZXNwb25kcyB0bwo+IHRoZSBbUE9TSVggbGlzdGVuIGZ1bmN0aW9u XVtsaXN0ZW5dLgo+IAo+IFJldXFlc3QgZmllbGRzOgo+IAo+IC0gKipjbWQqKiB2YWx1ZTogMwo+ IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAtICoqaWQqKjogaWRlbnRpZmllcyB0aGUgc29ja2V0 Cj4gICAtICoqYmFja2xvZyoqOiB0aGUgbWF4aW11bSBsZW5ndGggdG8gd2hpY2ggdGhlIHF1ZXVl IG9mIHBlbmRpbmcKPiAgICAgY29ubmVjdGlvbnMgbWF5IGdyb3cKPiAKPiBSZXF1ZXN0IGJpbmFy eSBsYXlvdXQ6Cj4gCj4gICAgIDggICAgICAgMTIgICAgICAxNiAgICAgIDIwCj4gICAgICstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSsKPiAgICAgfCAgICAgICBpZCAgICAgIHxiYWNrbG9nfAo+ICAg ICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gCj4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVs ZHM6Cj4gCj4gLSAqKmlkKio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+IAo+IFJlc3BvbnNl IGJpbmFyeSBsYXlvdXQ6Cj4gCj4gICAgIDE2ICAgICAgMjAgICAgICAyNAo+ICAgICArLS0tLS0t LSstLS0tLS0tKwo+ICAgICB8ICAgICAgIGlkICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0t Kwo+IAo+IFJldHVybiB2YWx1ZToKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BP U0lYIGxpc3RlbiBmdW5jdGlvbl1bbGlzdGVuXSBmb3IgZXJyb3IgbmFtZXM7IHRoZSBjb3JyZXNw b25kaW5nCj4gICAgIGVycm9yIG51bWJlcnMgYXJlIHNwZWNpZmllZCBsYXRlciBpbiB0aGlzIGRv Y3VtZW50Lgo+IAo+IAo+ICMjIyMgQWNjZXB0Cj4gCj4gVGhlICoqYWNjZXB0Kiogb3BlcmF0aW9u IGV4dHJhY3RzIHRoZSBmaXJzdCBjb25uZWN0aW9uIHJlcXVlc3Qgb24gdGhlCj4gcXVldWUgb2Yg cGVuZGluZyBjb25uZWN0aW9ucyBmb3IgdGhlIGxpc3RlbmluZyBzb2NrZXQgaWRlbnRpZmllZCBi eQo+ICoqaWQqKiBhbmQgY3JlYXRlcyBhIG5ldyBjb25uZWN0ZWQgc29ja2V0LiBUaGUgaWQgb2Yg dGhlIG5ldyBzb2NrZXQgaXMKPiBhbHNvIGNob3NlbiBieSB0aGUgZnJvbnRlbmQgYW5kIHBhc3Nl ZCBhcyBhbiBhZGRpdGlvbmFsIGZpZWxkIG9mIHRoZQo+IGFjY2VwdCByZXF1ZXN0IHN0cnVjdCAo KippZF9uZXcqKikuIFNlZSB0aGUgW1BPU0lYIGFjY2VwdCBmdW5jdGlvbl1bYWNjZXB0XQo+IGFz IHJlZmVyZW5jZS4KPiAKPiBTaW1pbGFybHkgdG8gdGhlICoqY29ubmVjdCoqIG9wZXJhdGlvbiwg KiphY2NlcHQqKiBjcmVhdGVzIGEgbmV3IGRhdGEgcmluZy4KPiBJbmZvcm1hdGlvbiBuZWNlc3Nh cnkgdG8gc2V0dXAgdGhlIG5ldyByaW5nLCBzdWNoIHRoZSBncmFudCB0YWJsZSByZWZlcmVuY2Ug b2YKPiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBkYXRhIHJpbmcgaW50ZXJmYWNlIChgc3RydWN0 IHB2Y2FsbHNfZGF0YV9pbnRmYCkgYW5kCj4gZXZlbnQgY2hhbm5lbCBwb3J0LCBhcmUgcGFzc2Vk IGZyb20gdGhlIGZyb250ZW5kIHRvIHRoZSBiYWNrZW5kIGFzIHBhcnQgb2YgdGhlCj4gcmVxdWVz dC4KPiAKPiBUaGUgYmFja2VuZCB3aWxsIHJlcGx5IHRvIHRoZSByZXF1ZXN0IG9ubHkgd2hlbiBh IG5ldyBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxseQo+IGFjY2VwdGVkLCBpLmUuIHRoZSBiYWNr ZW5kIGRvZXMgbm90IHJldHVybiBFQUdBSU4gb3IgRVdPVUxEQkxPQ0suCj4gCj4gRXhhbXBsZSB3 b3JrZmxvdzoKPiAKPiAtIGZyb250ZW5kIGlzc3VlcyBhbiAqKmFjY2VwdCoqIHJlcXVlc3QKPiAt IGJhY2tlbmQgd2FpdHMgZm9yIGEgY29ubmVjdGlvbiB0byBiZSBhdmFpbGFibGUgb24gdGhlIHNv Y2tldAo+IC0gYSBuZXcgY29ubmVjdGlvbiBiZWNvbWVzIGF2YWlsYWJsZQo+IC0gYmFja2VuZCBh Y2NlcHRzIHRoZSBuZXcgY29ubmVjdGlvbgo+IC0gYmFja2VuZCBjcmVhdGVzIGFuIGludGVybmFs IG1hcHBpbmcgZnJvbSAqKmlkX25ldyoqIHRvIHRoZSBuZXcgc29ja2V0Cj4gLSBiYWNrZW5kIG1h cHMgdGhlIGdyYW50IHJlZmVyZW5jZSAqKnJlZioqLCB0aGUgc2hhcmVkIHBhZ2UgY29udGFpbnMg dGhlCj4gICBkYXRhIHJpbmcgaW50ZXJmYWNlIChgc3RydWN0IHB2Y2FsbHNfZGF0YV9pbnRmYCkK PiAtIGJhY2tlbmQgbWFwcyBhbGwgdGhlIGdyYW50IHJlZmVyZW5jZXMgbGlzdGVkIGluIGBzdHJ1 Y3QKPiAgIHB2Y2FsbHNfZGF0YV9pbnRmYCBhbmQgdXNlcyB0aGVtIGFzIHNoYXJlZCBtZW1vcnkg Zm9yIHRoZSBuZXcgZGF0YQo+ICAgcmluZwo+IC0gYmFja2VuZCBiaW5kcyB0aGUgKipldnRjaG4q Kgo+IC0gYmFja2VuZCByZXBsaWVzIHRvIHRoZSBmcm9udGVuZAo+IAo+IFJlcXVlc3QgZmllbGRz Ogo+IAo+IC0gKipjbWQqKiB2YWx1ZTogNAo+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAtICoq aWQqKjogaWQgb2YgbGlzdGVuaW5nIHNvY2tldAo+ICAgLSAqKmlkX25ldyoqOiBpZCBvZiB0aGUg bmV3IHNvY2tldAo+ICAgLSAqKnJlZioqOiBncmFudCByZWZlcmVuY2Ugb2YgdGhlIGRhdGEgcmlu ZyBpbnRlcmZhY2UgKGBzdHJ1Y3QKPiAgICAgcHZjYWxsc19kYXRhX2ludGZgKQo+ICAgLSAqKmV2 dGNobioqOiBwb3J0IG51bWJlciBvZiB0aGUgZXZ0Y2huIHRvIHNpZ25hbCBhY3Rpdml0eSBvbiB0 aGUgZGF0YSByaW5nCj4gCj4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICA4ICAgICAg IDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAgICAzMgo+ICAgICArLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgIHwgICAgICAg aWQgICAgICB8ICAgIGlkX25ldyAgICAgfCAgcmVmICB8ZXZ0Y2huIHwKPiAgICAgKy0tLS0tLS0r LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+IAo+IFJlc3BvbnNlIGFk ZGl0aW9uYWwgZmllbGRzOgo+IAo+IC0gKippZCoqOiBpZCBvZiB0aGUgbGlzdGVuaW5nIHNvY2tl dCwgZWNob2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gCj4gUmVzcG9uc2UgYmluYXJ5IGxheW91dDoK PiAKPiAgICAgMTYgICAgICAyMCAgICAgIDI0Cj4gICAgICstLS0tLS0tKy0tLS0tLS0rCj4gICAg IHwgICAgICAgaWQgICAgICB8Cj4gICAgICstLS0tLS0tKy0tLS0tLS0rCj4gCj4gUmV0dXJuIHZh bHVlOgo+IAo+ICAgLSAwIG9uIHN1Y2Nlc3MKPiAgIC0gU2VlIHRoZSBbUE9TSVggYWNjZXB0IGZ1 bmN0aW9uXVthY2NlcHRdIGZvciBlcnJvciBuYW1lczsgdGhlIGNvcnJlc3BvbmRpbmcKPiAgICAg ZXJyb3IgbnVtYmVycyBhcmUgc3BlY2lmaWVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCj4gCj4g Cj4gIyMjIyBQb2xsCj4gCj4gSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCwgdGhlICoq cG9sbCoqIG9wZXJhdGlvbiBpcyBvbmx5IHZhbGlkCj4gZm9yIHBhc3NpdmUgc29ja2V0cy4gRm9y IGFjdGl2ZSBzb2NrZXRzLCB0aGUgZnJvbnRlbmQgc2hvdWxkIGxvb2sgYXQgdGhlCj4gc3RhdGUg b2YgdGhlIGRhdGEgcmluZy4gV2hlbiBhIG5ldyBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSBpbiB0 aGUgcXVldWUKPiBvZiB0aGUgcGFzc2l2ZSBzb2NrZXQsIHRoZSBiYWNrZW5kIGdlbmVyYXRlcyBh IHJlc3BvbnNlIGFuZCBub3RpZmllcyB0aGUKPiBmcm9udGVuZC4KPiAKPiBSZXF1ZXN0IGZpZWxk czoKPiAKPiAtICoqY21kKiogdmFsdWU6IDUKPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ICAgLSAq KmlkKio6IGlkZW50aWZpZXMgdGhlIGxpc3RlbmluZyBzb2NrZXQKPiAKPiBSZXF1ZXN0IGJpbmFy eSBsYXlvdXQ6Cj4gCj4gICAgIDggICAgICAgMTIgICAgICAxNgo+ICAgICArLS0tLS0tLSstLS0t LS0tKwo+ICAgICB8ICAgICAgIGlkICAgICAgfAo+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+IAo+ IAo+IFJlc3BvbnNlIGFkZGl0aW9uYWwgZmllbGRzOgo+IAo+IC0gKippZCoqOiBlY2hvZWQgYmFj ayBmcm9tIHJlcXVlc3QKPiAKPiBSZXNwb25zZSBiaW5hcnkgbGF5b3V0Ogo+IAo+ICAgICAxNiAg ICAgICAyMCAgICAgICAyNAo+ICAgICArLS0tLS0tLS0rLS0tLS0tLS0rCj4gICAgIHwgICAgICAg IGlkICAgICAgIHwKPiAgICAgKy0tLS0tLS0tKy0tLS0tLS0tKwo+IAo+IFJldHVybiB2YWx1ZToK PiAKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIFNlZSB0aGUgW1BPU0lYIHBvbGwgZnVuY3Rpb25d W3BvbGxdIGZvciBlcnJvciBuYW1lczsgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IKPiAgICAgbnVt YmVycyBhcmUgc3BlY2lmaWVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCj4gCj4gIyMjIyBFcnJv ciBudW1iZXJzCj4gCj4gVGhlIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgZXJyb3IgbmFt ZXMgc3BlY2lmaWVkIGJ5IFBPU0lYIGFyZToKPiAKPiAgICAgW0VQRVJNXSAgICAgICAgIC0xCj4g ICAgIFtFTk9FTlRdICAgICAgICAtMgo+ICAgICBbRVNSQ0hdICAgICAgICAgLTMKPiAgICAgW0VJ TlRSXSAgICAgICAgIC00Cj4gICAgIFtFSU9dICAgICAgICAgICAtNQo+ICAgICBbRU5YSU9dICAg ICAgICAgLTYKPiAgICAgW0UyQklHXSAgICAgICAgIC03Cj4gICAgIFtFTk9FWEVDXSAgICAgICAt OAo+ICAgICBbRUJBREZdICAgICAgICAgLTkKPiAgICAgW0VDSElMRF0gICAgICAgIC0xMAo+ICAg ICBbRUFHQUlOXSAgICAgICAgLTExCj4gICAgIFtFV09VTERCTE9DS10gICAtMTEKPiAgICAgW0VO T01FTV0gICAgICAgIC0xMgo+ICAgICBbRUFDQ0VTXSAgICAgICAgLTEzCj4gICAgIFtFRkFVTFRd ICAgICAgICAtMTQKPiAgICAgW0VCVVNZXSAgICAgICAgIC0xNgo+ICAgICBbRUVYSVNUXSAgICAg ICAgLTE3Cj4gICAgIFtFWERFVl0gICAgICAgICAtMTgKPiAgICAgW0VOT0RFVl0gICAgICAgIC0x OQo+ICAgICBbRUlTRElSXSAgICAgICAgLTIxCj4gICAgIFtFSU5WQUxdICAgICAgICAtMjIKPiAg ICAgW0VORklMRV0gICAgICAgIC0yMwo+ICAgICBbRU1GSUxFXSAgICAgICAgLTI0Cj4gICAgIFtF Tk9TUENdICAgICAgICAtMjgKPiAgICAgW0VST0ZTXSAgICAgICAgIC0zMAo+ICAgICBbRU1MSU5L XSAgICAgICAgLTMxCj4gICAgIFtFRE9NXSAgICAgICAgICAtMzMKPiAgICAgW0VSQU5HRV0gICAg ICAgIC0zNAo+ICAgICBbRURFQURMS10gICAgICAgLTM1Cj4gICAgIFtFREVBRExPQ0tdICAgICAt MzUKPiAgICAgW0VOQU1FVE9PTE9OR10gIC0zNgo+ICAgICBbRU5PTENLXSAgICAgICAgLTM3Cj4g ICAgIFtFTk9URU1QVFldICAgICAtMzkKPiAgICAgW0VOT1NZU10gICAgICAgIC0zOAo+ICAgICBb RU5PREFUQV0gICAgICAgLTYxCj4gICAgIFtFVElNRV0gICAgICAgICAtNjIKPiAgICAgW0VCQURN U0ddICAgICAgIC03NAo+ICAgICBbRU9WRVJGTE9XXSAgICAgLTc1Cj4gICAgIFtFSUxTRVFdICAg ICAgICAtODQKPiAgICAgW0VSRVNUQVJUXSAgICAgIC04NQo+ICAgICBbRU5PVFNPQ0tdICAgICAg LTg4Cj4gICAgIFtFT1BOT1RTVVBQXSAgICAtOTUKPiAgICAgW0VBRk5PU1VQUE9SVF0gIC05Nwo+ ICAgICBbRUFERFJJTlVTRV0gICAgLTk4Cj4gICAgIFtFQUREUk5PVEFWQUlMXSAtOTkKPiAgICAg W0VOT0JVRlNdICAgICAgIC0xMDUKPiAgICAgW0VJU0NPTk5dICAgICAgIC0xMDYKPiAgICAgW0VO T1RDT05OXSAgICAgIC0xMDcKPiAgICAgW0VUSU1FRE9VVF0gICAgIC0xMTAKPiAgICAgW0VOT1RT VVBQXSAgICAgIC01MjQKCk9oLCBFTk9UU1VQUCwgRU9QTk9UU1VQUCwgYW5kIG90aGVyLiBHb3No IHRoYXQgaXMgcXVpdGUgdGhlCm1lc3MuCgo+IAo+ICMjIyMgU29ja2V0IGZhbWlsaWVzIGFuZCBh ZGRyZXNzIGZvcm1hdAo+IAo+IFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYW5kIGV4cGxpY2l0 IHNpemVzLCB0b2dldGhlciB3aXRoIFBPU0lYCj4gW3N5cy9zb2NrZXQuaF1bYWRkcmVzc10gYW5k IFtuZXRpbmV0L2luLmhdW2luXSBkZWZpbmUgc29ja2V0IGZhbWlsaWVzIGFuZAo+IGFkZHJlc3Mg Zm9ybWF0LiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBvbmx5IHRoZSAqKmRvbWFpbioqIGBBRl9JTkVU YCwgKip0eXBlKioKPiBgU09DS19TVFJFQU1gIGFuZCAqKnByb3RvY29sKiogYDBgIGFyZSBzdXBw b3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZQo+IHNwZWMsIG90aGVycyByZXR1cm4gRU5PVFNV UFAuCj4gCj4gICAgICNkZWZpbmUgQUZfVU5TUEVDICAgMAo+ICAgICAjZGVmaW5lIEFGX1VOSVgg ICAgIDEgICAvKiBVbml4IGRvbWFpbiBzb2NrZXRzICAgICAgKi8KPiAgICAgI2RlZmluZSBBRl9M T0NBTCAgICAxICAgLyogUE9TSVggbmFtZSBmb3IgQUZfVU5JWCAgICovCj4gICAgICNkZWZpbmUg QUZfSU5FVCAgICAgMiAgIC8qIEludGVybmV0IElQIFByb3RvY29sICAgICAqLwo+ICAgICAjZGVm aW5lIEFGX0lORVQ2ICAgIDEwICAvKiBJUCB2ZXJzaW9uIDYgICAgICAgICAqLwo+IAo+ICAgICAj ZGVmaW5lIFNPQ0tfU1RSRUFNIDEKPiAgICAgI2RlZmluZSBTT0NLX0RHUkFNICAyCj4gICAgICNk ZWZpbmUgU09DS19SQVcgICAgMwo+IAo+ICAgICAvKiBnZW5lcmljIGFkZHJlc3MgZm9ybWF0ICov Cj4gICAgIHN0cnVjdCBzb2NrYWRkciB7Cj4gICAgICAgICB1aW50MTZfdCBzYV9mYW1pbHlfdDsK PiAgICAgICAgIGNoYXIgc2FfZGF0YVsyNl07Cj4gICAgIH07Cj4gCj4gICAgIHN0cnVjdCBpbl9h ZGRyIHsKPiAgICAgICAgIHVpbnQzMl90IHNfYWRkcjsKPiAgICAgfTsKPiAKPiAgICAgLyogQUZf SU5FVCBhZGRyZXNzIGZvcm1hdCAqLwo+ICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gewo+ICAgICAg ICAgdWludDE2X3QgICAgICAgICBzYV9mYW1pbHlfdDsKPiAgICAgICAgIHVpbnQxNl90ICAgICAg ICAgc2luX3BvcnQ7Cj4gICAgICAgICBzdHJ1Y3QgaW5fYWRkciAgIHNpbl9hZGRyOwo+ICAgICAg ICAgY2hhciAgICAgICAgICAgICBzaW5femVyb1syMF07Cj4gICAgIH07Cj4gCj4gCj4gIyMjIERh dGEgcmluZwo+IAo+IERhdGEgcmluZ3MgYXJlIHVzZWQgZm9yIHNlbmRpbmcgYW5kIHJlY2Vpdmlu ZyBkYXRhIG92ZXIgYSBjb25uZWN0ZWQgc29ja2V0LiBUaGV5Cj4gYXJlIGNyZWF0ZWQgdXBvbiBh IHN1Y2Nlc3NmdWwgKiphY2NlcHQqKiBvciAqKmNvbm5lY3QqKiBjb21tYW5kLgo+IAo+IEEgZGF0 YSByaW5nIGlzIGNvbXBvc2VkIG9mIHR3byBwaWVjZXM6IHRoZSBpbnRlcmZhY2UgYW5kIHRoZSAq KmluKiogYW5kICoqb3V0KioKPiBidWZmZXJzLiBUaGUgaW50ZXJmYWNlLCByZXByZXNlbnRlZCBi eSBgc3RydWN0IHB2Y2FsbHNfcmluZ19pbnRmYCBpcyBzaGFyZWQKPiBmaXJzdCBhbmQgcmVzaWRl cyBvbiB0aGUgcGFnZSB3aG9zZSBncmFudCByZWZlcmVuY2UgaXMgcGFzc2VkIGJ5ICoqYWNjZXB0 KiogYW5kCj4gKipjb25uZWN0KiogYXMgcGFyYW1ldGVyLiBgc3RydWN0IHB2Y2FsbHNfcmluZ19p bnRmYCBjb250YWlucyB0aGUgbGlzdCBvZiBncmFudAo+IHJlZmVyZW5jZXMgd2hpY2ggY29uc3Rp dHV0ZSB0aGUgKippbioqIGFuZCAqKm91dCoqIGRhdGEgYnVmZmVycy4KPiAKPiAjIyMjIERhdGEg cmluZyBpbnRlcmZhY2UKPiAKPiAgICAgc3RydWN0IHB2Y2FsbHNfZGF0YV9pbnRmIHsKPiAgICAg CVBWQ0FMTFNfUklOR19JRFggaW5fY29ucywgaW5fcHJvZDsKCkRvIHlvdSB3YW50IHRvIGFkZCBz b21lIHNwYWNpbmcgYmV0d2VlbiB0aGVtIHNvIHRoYXQgeW91IGRvbid0CnVzZSB0aGUgc2FtZSBj YWNoZWxpbmU/Cgo+ICAgICAJUFZDQUxMU19SSU5HX0lEWCBvdXRfY29ucywgb3V0X3Byb2Q7Cj4g ICAgIAlpbnQzMl90IGluX2Vycm9yLCBvdXRfZXJyb3I7Cj4gICAgIAo+ICAgICAJdWludDMyX3Qg cmluZ19vcmRlcjsKPiAgICAgCWdyYW50X3JlZl90IHJlZltdOwo+ICAgICB9OwoKVGhhdCBkb2Vz IG5vdCBsb29rIGxpa2UgaXQgd291bGQgYmUgdG8gdGhlIHBvd2VyIG9mIHR3bz8gUGVyaGFwcwpz b21lIHBhZGRpbmc/Cj4gCj4gICAgIC8qIG5vdCBhY3R1YWxseSBDIGNvbXBsaWFudCAocmluZ19v cmRlciBjaGFuZ2VzIGZyb20gc29ja2V0IHRvIHNvY2tldCkgKi8KPiAgICAgc3RydWN0IHB2Y2Fs bHNfZGF0YSB7Cj4gICAgICAgICBjaGFyIGluWygoMTw8cmluZ19vcmRlcik8PFBBR0VfU0hJRlQp LzJdOwo+ICAgICAgICAgY2hhciBvdXRbKCgxPDxyaW5nX29yZGVyKTw8UEFHRV9TSElGVCkvMl07 Cj4gICAgIH07Cj4gCj4gLSAqKnJpbmdfb3JkZXIqKgo+ICAgSXQgcmVwcmVzZW50cyB0aGUgb3Jk ZXIgb2YgdGhlIGRhdGEgcmluZy4gVGhlIGZvbGxvd2luZyBsaXN0IG9mIGdyYW50Cj4gICByZWZl cmVuY2VzIGlzIG9mIGAoMSA8PCByaW5nX29yZGVyKWAgZWxlbWVudHMuIEl0IGNhbm5vdCBiZSBn cmVhdGVyIHRoYW4KPiAgICoqbWF4LWRhdGFyaW5nLXBhZ2Utb3JkZXIqKiwgYXMgc3BlY2lmaWVk IGJ5IHRoZSBiYWNrZW5kIG9uIFhlbkJ1cy4KPiAtICoqcmVmW10qKgo+ICAgVGhlIGxpc3Qgb2Yg Z3JhbnQgcmVmZXJlbmNlcyB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBkYXRhLiBUaGV5 IGFyZQo+ICAgbWFwcGVkIGNvbnRpZ3Vvc2x5IGluIHZpcnR1YWwgbWVtb3J5LiBUaGUgZmlyc3Qg aGFsZiBvZiB0aGUgcGFnZXMgaXMgdGhlCj4gICAqKmluKiogYXJyYXksIHRoZSBzZWNvbmQgaGFs ZiBpcyB0aGUgKipvdXQqKiBhcnJheS4KPiAtICoqaW4qKiBpcyBhbiBhcnJheSB1c2VkIGFzIGNp cmN1bGFyIGJ1ZmZlcgo+ICAgSXQgY29udGFpbnMgZGF0YSByZWFkIGZyb20gdGhlIHNvY2tldC4g VGhlIHByb2R1Y2VyIGlzIHRoZSBiYWNrZW5kLCB0aGUKPiAgIGNvbnN1bWVyIGlzIHRoZSBmcm9u dGVuZC4KPiAtICoqb3V0KiogaXMgYW4gYXJyYXkgdXNlZCBhcyBjaXJjdWxhciBidWZmZXIKPiAg IEl0IGNvbnRhaW5zIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0LiBUaGUgcHJvZHVj ZXIgaXMgdGhlIGZyb250ZW5kLAo+ICAgdGhlIGNvbnN1bWVyIGlzIHRoZSBiYWNrZW5kLgo+IC0g Kippbl9jb25zKiogYW5kICoqaW5fcHJvZCoqCj4gICBDb25zdW1lciBhbmQgcHJvZHVjZXIgcG9p bnRlcnMgZm9yIGRhdGEgcmVhZCBmcm9tIHRoZSBzb2NrZXQuIFRoZXkga2VlcCB0cmFjawoKcy9w b2ludGVycy9pbmRpY2llcy8gPwoKPiAgIG9mIGhvdyBtdWNoIGRhdGEgaGFzIGFscmVhZHkgYmVl biBjb25zdW1lZCBieSB0aGUgZnJvbnRlbmQgZnJvbSB0aGUgKippbioqCj4gICBhcnJheS4gKipp bl9wcm9kKiogaXMgaW5jcmVhc2VkIGJ5IHRoZSBiYWNrZW5kLCBhZnRlciB3cml0aW5nIGRhdGEg dG8gKippbioqLgo+ICAgKippbl9jb25zKiogaXMgaW5jcmVhc2VkIGJ5IHRoZSBmcm9udGVuZCwg YWZ0ZXIgcmVhZGluZyBkYXRhIGZyb20gKippbioqLgo+IC0gKipvdXRfY29ucyoqLCAqKm91dF9w cm9kKioKPiAgIENvbnN1bWVyIGFuZCBwcm9kdWNlciBwb2ludGVycyBmb3IgdGhlIGRhdGEgdG8g YmUgd3JpdHRlbiB0byB0aGUgc29ja2V0LiBUaGV5Cj4gICBrZWVwIHRyYWNrIG9mIGhvdyBtdWNo IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiBieSB0aGUgZnJvbnRlbmQgdG8gKipvdXQqKiBhbmQKPiAg IGhvdyBtdWNoIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZCBieSB0aGUgYmFja2VuZC4g KipvdXRfcHJvZCoqIGlzCj4gICBpbmNyZWFzZWQgYnkgdGhlIGZyb250ZW5kLCBhZnRlciB3cml0 aW5nIGRhdGEgdG8gKipvdXQqKi4gKipvdXRfY29ucyoqIGlzCj4gICBpbmNyZWFzZWQgYnkgdGhl IGJhY2tlbmQsIGFmdGVyIHJlYWRpbmcgZGF0YSBmcm9tICoqb3V0KiouCj4gLSAqKmluX2Vycm9y KiogYW5kICoqb3V0X2Vycm9yKiogVGhleSBzaWduYWwgZXJyb3JzIHdoZW4gcmVhZGluZyBmcm9t IHRoZSBzb2NrZXQKPiAgICgqKmluX2Vycm9yKiopIG9yIHdoZW4gd3JpdGluZyB0byB0aGUgc29j a2V0ICgqKm91dF9lcnJvcioqKS4gMCBtZWFucyBubwo+ICAgZXJyb3JzLiBXaGVuIGFuIGVycm9y IG9jY3Vycywgbm8gZnVydGhlciByZWFkcyBvciB3cml0ZXMgb3BlcmF0aW9ucyBhcmUKPiAgIHBl cmZvcm1lZCBvbiB0aGUgc29ja2V0LiBJbiB0aGUgY2FzZSBvZiBhbiBvcmRlcmx5IHNvY2tldCBz aHV0ZG93biAoaS5lLiByZWFkCj4gICByZXR1cm5zIDApICoqaW5fZXJyb3IqKiBpcyBzZXQgdG8g RU5PVENPTk4uICoqaW5fZXJyb3IqKiBhbmQgKipvdXRfZXJyb3IqKgo+ICAgYXJlIG5ldmVyIHNl dCB0byBFQUdBSU4gb3IgRVdPVUxEQkxPQ0suCj4gCj4gVGhlIGJpbmFyeSBsYXlvdXQgb2YgYHN0 cnVjdCBwdmNhbGxzX2RhdGFfaW50ZmAgZm9sbG93czoKPiAKPiAgICAgMCAgICAgICAgIDQgICAg ICAgICA4ICAgICAgICAgMTIgICAgICAgIDE2ICAgICAgICAyMCAgICAgICAgMjQgICAgICAgIDI4 Cj4gICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tKwo+ICAgICB8IGluX2NvbnMgfCBpbl9wcm9kIHxvdXRfY29u cyB8b3V0X3Byb2QgfGluX2Vycm9yIHxvdXRfZXJyb3J8cmluZ19vcmRlcnwKPiAgICAgKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0rCj4gCj4gICAgIDI4ICAgICAgICAzMiAgICAgICAgMzYgICAgICAgIDQwICAgICAg ICA0MDkyICAgICA0MDk2Cj4gICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t Ly8tLS0rLS0tLS0tLS0tKwo+ICAgICB8ICByZWZbMF0gfCAgcmVmWzFdIHwgIHJlZlsyXSB8ICAg ICAgICAgfCAgcmVmW05dIHwKPiAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0vLy0tLSstLS0tLS0tLS0rCgpQZXJoYXBzIHlvdSBjYW4gc2F5OgoKKipOLkIqKiBGb3Igb25l IHBhZ2UsIHRoZSBOIHdvdWxkIGJlIDIwMzQuCgo+IAo+IFRoZSBiaW5hcnkgbGF5b3V0IG9mIHRo ZSByaW5nIGJ1ZmZlcnMgZm9sbG93Ogo+IAo+ICAgICAwICAgICAgICAgKCgxPDxyaW5nX29yZGVy KTw8UEFHRV9TSElGVCkvMiAgICAgICAoKDE8PHJpbmdfb3JkZXIpPDxQQUdFX1NISUZUKQo+ICAg ICArLS0tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS8vLS0tLS0tLS0tLS0t LSsKPiAgICAgfCAgICAgICAgICAgIGluICAgICAgICAgICAgIHwgICAgICAgICAgIG91dCAgICAg ICAgICAgICB8Cj4gICAgICstLS0tLS0tLS0tLS0vLy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ly8tLS0tLS0tLS0tLS0tKwo+IAo+ICMjIyMgV29ya2Zsb3cKPiAKPiBUaGUgKippbioqIGFuZCAq Km91dCoqIGFycmF5cyBhcmUgdXNlZCBhcyBjaXJjdWxhciBidWZmZXJzOgo+ICAgICAKPiAgICAg MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXJyYXkpID09ICgoMTw8cmlu Z19vcmRlcik8PFBBR0VfU0hJRlQpLzIKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwo+ICAgICB8dG8gY29uc3VtZXwgICAgZnJlZSAgICB8dG8gY29uc3VtZSB8Cj4g ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAgICAgICAgICAgICAg ICBeICAgICAgICAgICAgXgo+ICAgICAgICAgICAgICAgIHByb2QgICAgICAgICBjb25zCj4gCj4g ICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFycmF5KQo+ICAgICAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gICAgIHwgIGZyZWUgICAgfCB0 byBjb25zdW1lIHwgICBmcmVlICAgIHwKPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwo+ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICBeCj4gICAgICAgICAgICAg ICAgY29ucyAgICAgICAgIHByb2QKPiAKPiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIHByb3Zp ZGVkIHRvIGNhbGN1bGF0ZSBob3cgbWFueSBieXRlcyBhcmUgY3VycmVudGx5Cj4gbGVmdCB1bmNv bnN1bWVkIGluIGFuIGFycmF5Ogo+IAo+ICAgICAjZGVmaW5lIF9NQVNLX1BWQ0FMTFNfSURYKGlk eCwgcmluZ19zaXplKSAoKGlkeCkgJiAocmluZ19zaXplLTEpKQo+IAo+ICAgICBzdGF0aWMgaW5s aW5lIFBWQ0FMTFNfUklOR19JRFggcHZjYWxsc19yaW5nX3F1ZXVlZChQVkNBTExTX1JJTkdfSURY IHByb2QsCgpzL3F1ZXVlZC91bmNvbnN1bWVkLz8KCj4gICAgIAkJUFZDQUxMU19SSU5HX0lEWCBj b25zLAo+ICAgICAJCVBWQ0FMTFNfUklOR19JRFggcmluZ19zaXplKQo+ICAgICB7Cj4gICAgIAlQ VkNBTExTX1JJTkdfSURYIHNpemU7Cj4gICAgIAo+ICAgICAJaWYgKHByb2QgPT0gY29ucykKPiAg ICAgCQlyZXR1cm4gMDsKPiAgICAgCj4gICAgIAlwcm9kID0gX01BU0tfUFZDQUxMU19JRFgocHJv ZCwgcmluZ19zaXplKTsKPiAgICAgCWNvbnMgPSBfTUFTS19QVkNBTExTX0lEWChjb25zLCByaW5n X3NpemUpOwo+ICAgICAKPiAgICAgCWlmIChwcm9kID09IGNvbnMpCj4gICAgIAkJcmV0dXJuIHJp bmdfc2l6ZTsKPiAgICAgCj4gICAgIAlpZiAocHJvZCA+IGNvbnMpCj4gICAgIAkJc2l6ZSA9IHBy b2QgLSBjb25zOwo+ICAgICAJZWxzZSB7Cj4gICAgIAkJc2l6ZSA9IHJpbmdfc2l6ZSAtIGNvbnM7 Cj4gICAgIAkJc2l6ZSArPSBwcm9kOwo+ICAgICAJfQo+ICAgICAJcmV0dXJuIHNpemU7Cj4gICAg IH0KPiAKPiBUaGUgcHJvZHVjZXIgKHRoZSBiYWNrZW5kIGZvciAqKmluKiosIHRoZSBmcm9udGVu ZCBmb3IgKipvdXQqKikgd3JpdGVzIHRvIHRoZQo+IGFycmF5IGluIHRoZSBmb2xsb3dpbmcgd2F5 Ogo+IAo+IC0gcmVhZCAqY29ucyosICpwcm9kKiwgKmVycm9yKiBmcm9tIHNoYXJlZCBtZW1vcnkK PiAtIG1lbW9yeSBiYXJyaWVyCj4gLSByZXR1cm4gb24gKmVycm9yKgo+IC0gd3JpdGUgdG8gYXJy YXkgYXQgcG9zaXRpb24gKnByb2QqIHVwIHRvICpjb25zKiwgd3JhcHBpbmcgYXJvdW5kIHRoZSBj aXJjdWxhcgo+ICAgYnVmZmVyIHdoZW4gbmVjZXNzYXJ5Cj4gLSBtZW1vcnkgYmFycmllcgo+IC0g aW5jcmVhc2UgKnByb2QqCj4gLSBub3RpZnkgdGhlIG90aGVyIGVuZCB2aWEgZXZ0Y2huCj4gCj4g VGhlIGNvbnN1bWVyICh0aGUgYmFja2VuZCBmb3IgKipvdXQqKiwgdGhlIGZyb250ZW5kIGZvciAq KmluKiopIHJlYWRzIGZyb20gdGhlCj4gYXJyYXkgaW4gdGhlIGZvbGxvd2luZyB3YXk6Cj4gCj4g LSByZWFkICpwcm9kKiwgKmNvbnMqLCAqZXJyb3IqIGZyb20gc2hhcmVkIG1lbW9yeQo+IC0gbWVt b3J5IGJhcnJpZXIKPiAtIHJldHVybiBvbiAqZXJyb3IqCj4gLSByZWFkIGZyb20gYXJyYXkgYXQg cG9zaXRpb24gKmNvbnMqIHVwIHRvICpwcm9kKiwgd3JhcHBpbmcgYXJvdW5kIHRoZSBjaXJjdWxh cgo+ICAgYnVmZmVyIHdoZW4gbmVjZXNzYXJ5Cj4gLSBtZW1vcnkgYmFycmllcgo+IC0gaW5jcmVh c2UgKmNvbnMqCj4gLSBub3RpZnkgdGhlIG90aGVyIGVuZCB2aWEgZXZ0Y2huCj4gCj4gVGhlIHBy b2R1Y2VyIHRha2VzIGNhcmUgb2Ygd3JpdGluZyBvbmx5IGFzIG1hbnkgYnl0ZXMgYXMgYXZhaWxh YmxlIGluIHRoZSBidWZmZXIKPiB1cCB0byAqY29ucyouIFRoZSBjb25zdW1lciB0YWtlcyBjYXJl IG9mIHJlYWRpbmcgb25seSBhcyBtYW55IGJ5dGVzIGFzIGF2YWlsYWJsZQo+IGluIHRoZSBidWZm ZXIgdXAgdG8gKnByb2QqLiAqZXJyb3IqIGlzIHNldCBieSB0aGUgYmFja2VuZCB3aGVuIGFuIGVy cm9yIG9jY3Vycwo+IHdyaXRpbmcgb3IgcmVhZGluZyBmcm9tIHRoZSBzb2NrZXQuCj4gCj4gCj4g W2FkZHJlc3NdOiBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkwODc5OS94 bnMvc3lzc29ja2V0LmguaHRtbAo+IFtpbl06IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25s aW5lcHVicy8wMDAwOTUzOTkvYmFzZWRlZnMvbmV0aW5ldC9pbi5oLmh0bWwKPiBbc29ja2V0XTog aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMv c29ja2V0Lmh0bWwKPiBbY29ubmVjdF06IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5l cHVicy83OTA4Nzk5L3hucy9jb25uZWN0Lmh0bWwKPiBbc2h1dGRvd25dOiBodHRwOi8vcHVicy5v cGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkwODc5OS94bnMvc2h1dGRvd24uaHRtbAo+IFtiaW5k XTogaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzc5MDg3OTkveG5zL2JpbmQu aHRtbAo+IFtsaXN0ZW5dOiBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkw ODc5OS94bnMvbGlzdGVuLmh0bWwKPiBbYWNjZXB0XTogaHR0cDovL3B1YnMub3Blbmdyb3VwLm9y Zy9vbmxpbmVwdWJzLzc5MDg3OTkveG5zL2FjY2VwdC5odG1sCj4gW3BvbGxdOiBodHRwOi8vcHVi cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkwODc5OS94c2gvcG9sbC5odG1sCgoKSSB0aGlu ayB5b3VyIHBhdGNoIGJlbG93IG5lZWRzIGFsc28gc29tZSBkb2N1bWVudGF0aW9uIChpbiB4bC5j ZmcpIG9yIHN1Y2g/Cgo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5jIGIvdG9vbHMv bGlieGwvbGlieGwuYwo+IGluZGV4IGMzOWQ3NDUuLmQ3ODRhMTAgMTAwNjQ0Cj4gLS0tIGEvdG9v bHMvbGlieGwvbGlieGwuYwo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKPiBAQCAtMjI5OSw2 ICsyMjk5LDcwIEBAIGludCBsaWJ4bF9kZXZpZF90b19kZXZpY2VfdnRwbShsaWJ4bF9jdHggKmN0 eCwKPiAgICAgIHJldHVybiByYzsKPiAgfQo+ICAKPiArLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K PiArCj4gK2ludCBsaWJ4bF9fZGV2aWNlX3B2Y2FsbHNfc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdj LCBsaWJ4bF9kZXZpY2VfcHZjYWxscyAqcHZjYWxscykKPiArewo+ICsgICAgaW50IHJjOwo+ICsK PiArICAgIHJjID0gbGlieGxfX3Jlc29sdmVfZG9taWQoZ2MsIHB2Y2FsbHMtPmJhY2tlbmRfZG9t bmFtZSwgJnB2Y2FsbHMtPmJhY2tlbmRfZG9taWQpOwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZnJvbV9wdmNhbGxzKGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV9wdmNhbGxzICpwdmNhbGxzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZSkKPiArewo+ICsgICBkZXZpY2UtPmJhY2tl bmRfZGV2aWQgICA9IHB2Y2FsbHMtPmRldmlkOwo+ICsgICBkZXZpY2UtPmJhY2tlbmRfZG9taWQg ICA9IHB2Y2FsbHMtPmJhY2tlbmRfZG9taWQ7Cj4gKyAgIGRldmljZS0+YmFja2VuZF9raW5kICAg ID0gTElCWExfX0RFVklDRV9LSU5EX1BWQ0FMTFM7Cj4gKyAgIGRldmljZS0+ZGV2aWQgICAgICAg ICAgID0gcHZjYWxscy0+ZGV2aWQ7Cj4gKyAgIGRldmljZS0+ZG9taWQgICAgICAgICAgID0gZG9t aWQ7Cj4gKyAgIGRldmljZS0+a2luZCAgICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1BW Q0FMTFM7Cj4gKwo+ICsgICByZXR1cm4gMDsKPiArfQo+ICsKPiArCj4gK2ludCBsaWJ4bF9fZGV2 aWNlX3B2Y2FsbHNfYWRkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfcHZjYWxscyAqcHZjYWxscykKPiArewo+ ICsgICAgZmxleGFycmF5X3QgKmZyb250Owo+ICsgICAgZmxleGFycmF5X3QgKmJhY2s7Cj4gKyAg ICBsaWJ4bF9fZGV2aWNlIGRldmljZTsKPiArICAgIGludCByYzsKPiArCj4gKyAgICByYyA9IGxp YnhsX19kZXZpY2VfcHZjYWxsc19zZXRkZWZhdWx0KGdjLCBwdmNhbGxzKTsKPiArICAgIGlmIChy YykgZ290byBvdXQ7Cj4gKwo+ICsgICAgZnJvbnQgPSBmbGV4YXJyYXlfbWFrZShnYywgMTYsIDEp Owo+ICsgICAgYmFjayA9IGZsZXhhcnJheV9tYWtlKGdjLCAxNiwgMSk7Cj4gKwo+ICsgICAgaWYg KHB2Y2FsbHMtPmRldmlkID09IC0xKSB7Cj4gKyAgICAgICAgaWYgKChwdmNhbGxzLT5kZXZpZCA9 IGxpYnhsX19kZXZpY2VfbmV4dGlkKGdjLCBkb21pZCwgInB2Y2FsbHMiKSkgPCAwKSB7Cj4gKyAg ICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX3B2Y2Fs bHMoZ2MsIGRvbWlkLCBwdmNhbGxzLCAmZGV2aWNlKTsKPiArICAgIGlmIChyYyAhPSAwKSBnb3Rv IG91dDsKPiArCj4gKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImZyb250ZW5kLWlk IiwgbGlieGxfX3NwcmludGYoZ2MsICIlZCIsIGRvbWlkKSk7Cj4gKyAgICBmbGV4YXJyYXlfYXBw ZW5kX3BhaXIoYmFjaywgIm9ubGluZSIsICIxIik7Cj4gKyAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywgInN0YXRlIiwgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5n KSk7Cj4gKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQsICJiYWNrZW5kLWlkIiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fc3ByaW50ZihnYywgIiVkIiwgcHZjYWxs cy0+YmFja2VuZF9kb21pZCkpOwo+ICsgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGZyb250LCAi c3RhdGUiLCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKPiArCj4g KyAgICBsaWJ4bF9fZGV2aWNlX2dlbmVyaWNfYWRkKGdjLCBYQlRfTlVMTCwgJmRldmljZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXko Z2MsIGJhY2ssIGJhY2stPmNvdW50KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGZyb250LCBmcm9udC0+Y291bnQpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKPiArICAgIHJjID0gMDsKPiArb3V0 Ogo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gIAo+ICAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+ ICAKPiBAQCAtNDI1MCw2ICs0MzE0LDggQEAgb3V0Ogo+ICAgKiBsaWJ4bF9kZXZpY2VfdmZiX2Rl c3Ryb3kKPiAgICogbGlieGxfZGV2aWNlX3VzYmN0cmxfcmVtb3ZlCj4gICAqIGxpYnhsX2Rldmlj ZV91c2JjdHJsX2Rlc3Ryb3kKPiArICogbGlieGxfZGV2aWNlX3B2Y2FsbHNfcmVtb3ZlCj4gKyAq IGxpYnhsX2RldmljZV9wdmNhbGxzX2Rlc3Ryb3kKPiAgICovCj4gICNkZWZpbmUgREVGSU5FX0RF VklDRV9SRU1PVkVfRVhUKHR5cGUsIHJlbXR5cGUsIHJlbW92ZWRlc3Ryb3ksIGYpICAgICAgICBc Cj4gICAgICBpbnQgbGlieGxfZGV2aWNlXyMjdHlwZSMjXyMjcmVtb3ZlZGVzdHJveShsaWJ4bF9j dHggKmN0eCwgICAgICAgICAgIFwKPiBAQCAtNDMxMSw2ICs0Mzc3LDExIEBAIERFRklORV9ERVZJ Q0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCj4gIERFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RP TSh1c2JjdHJsLCByZW1vdmUsIDApCj4gIERFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RPTSh1c2Jj dHJsLCBkZXN0cm95LCAxKQo+ICAKPiArLyogcHZjYWxscyAqLwo+ICsKPiArREVGSU5FX0RFVklD RV9SRU1PVkUocHZjYWxscywgcmVtb3ZlLCAwKQo+ICtERUZJTkVfREVWSUNFX1JFTU9WRShwdmNh bGxzLCBkZXN0cm95LCAxKQo+ICsKPiAgLyogY2hhbm5lbC9jb25zb2xlIGhvdHVucGx1ZyBpcyBu b3QgaW1wbGVtZW50ZWQuIFRoZXJlIGFyZSAyIHBvc3NpYmlsaXRpZXM6Cj4gICAqIDEuIGFkZCBz dXBwb3J0IGZvciBzZWNvbmRhcnkgY29uc29sZXMgdG8geGVuY29uc29sZWQKPiAgICogMi4gZHlu YW1pY2FsbHkgYWRkL3JlbW92ZSBxZW11IGNoYXJkZXZzIHZpYSBxbXAgbWVzc2FnZXMuICovCj4g ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4bC5oCj4g aW5kZXggMmMwZjg2OC4uOTM1ODA3MSAxMDA2NDQKPiAtLS0gYS90b29scy9saWJ4bC9saWJ4bC5o Cj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGwuaAo+IEBAIC0xNzUzLDYgKzE3NTMsMTYgQEAgaW50 IGxpYnhsX2RldmljZV92ZmJfZGVzdHJveShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cg KmFvX2hvdykKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9D QUxMRVJTX09OTFk7Cj4gIAo+ICsvKiBwdmNhbGxzICovCj4gK2ludCBsaWJ4bF9kZXZpY2VfcHZj YWxsc19yZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3B2Y2FsbHMgKnB2Y2FsbHMsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05M WTsKPiAraW50IGxpYnhsX2RldmljZV9wdmNhbGxzX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVp bnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV9wdmNhbGxzICpwdmNhbGxzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOwo+ICsKPiAgLyogUENJIFBhc3N0aHJvdWdo ICovCj4gIGludCBsaWJ4bF9kZXZpY2VfcGNpX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfcGNpICpwY2lk ZXYsCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGli eGwvbGlieGxfY3JlYXRlLmMKPiBpbmRleCA1MDAwYmQwLi5mMDE5YzM3IDEwMDY0NAo+IC0tLSBh L3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY3Jl YXRlLmMKPiBAQCAtMTM3NCw2ICsxMzc0LDggQEAgc3RhdGljIHZvaWQgZG9tY3JlYXRlX2xhdW5j aF9kbShsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYsCj4gICAgICAg ICAgICAgIGxpYnhsX19kZXZpY2VfdmZiX2FkZChnYywgZG9taWQsICZkX2NvbmZpZy0+dmZic1tp XSk7Cj4gICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfdmtiX2FkZChnYywgZG9taWQsICZkX2Nv bmZpZy0+dmtic1tpXSk7Cj4gICAgICAgICAgfQo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBk X2NvbmZpZy0+bnVtX3B2Y2FsbHNzOyBpKyspCj4gKyAgICAgICAgICAgIGxpYnhsX19kZXZpY2Vf cHZjYWxsc19hZGQoZ2MsIGRvbWlkLCAmZF9jb25maWctPnB2Y2FsbHNzW2ldKTsKPiAgCj4gICAg ICAgICAgaW5pdF9jb25zb2xlX2luZm8oZ2MsICZjb25zb2xlLCAwKTsKPiAgICAgICAgICBjb25z b2xlLmJhY2tlbmRfZG9taWQgPSBzdGF0ZS0+Y29uc29sZV9kb21pZDsKPiBkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFs LmgKPiBpbmRleCBjNzkxNDE4Li4wNjNkOTI2IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnhsL2xp YnhsX2ludGVybmFsLmgKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCj4gQEAg LTEyMjQsNiArMTIyNCw3IEBAIF9oaWRkZW4gaW50IGxpYnhsX19kZXZpY2VfdmtiX3NldGRlZmF1 bHQobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3ZrYiAqdmtiKTsKPiAgX2hpZGRlbiBpbnQg bGlieGxfX2RldmljZV9wY2lfc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2Vf cGNpICpwY2kpOwo+ICBfaGlkZGVuIHZvaWQgbGlieGxfX3JkbV9zZXRkZWZhdWx0KGxpYnhsX19n YyAqZ2MsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWlu X2J1aWxkX2luZm8gKmJfaW5mbyk7Cj4gK19oaWRkZW4gaW50IGxpYnhsX19kZXZpY2VfcHZjYWxs c19zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIGxpYnhsX2RldmljZV9wdmNhbGxzICpwdmNhbGxz KTsKPiAgCj4gIF9oaWRkZW4gY29uc3QgY2hhciAqbGlieGxfX2RldmljZV9uaWNfZGV2bmFtZShs aWJ4bF9fZ2MgKmdjLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZG9taWQsCj4gQEAgLTI2NDcsNiArMjY0OCwxMCBAQCBfaGlkZGVuIGlu dCBsaWJ4bF9fZGV2aWNlX3ZrYl9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4g IF9oaWRkZW4gaW50IGxpYnhsX19kZXZpY2VfdmZiX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJf dCBkb21pZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV92ZmIgKnZmYik7Cj4gIAo+ICsvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjb25uZWN0IGEgcHZj YWxscyBkZXZpY2UgKi8KPiArX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV9wdmNhbGxzX2FkZChs aWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV9wdmNhbGxzICpwdmNhbGxzKTsKPiArCj4gIC8qIFdhaXRz IGZvciB0aGUgcGFzc2VkIGRldmljZSB0byByZWFjaCBzdGF0ZSBYZW5idXNTdGF0ZUluaXRXYWl0 Lgo+ICAgKiBUaGlzIGlzIG5vdCByZWFsbHkgdXNlZnVsIGJ5IGl0c2VsZiwgYnV0IGlzIGltcG9y dGFudCB3aGVuIGV4ZWN1dGluZwo+ICAgKiBob3RwbHVnIHNjcmlwdHMsIHNpbmNlIHdlIG5lZWQg dG8gYmUgc3VyZSB0aGUgZGV2aWNlIGlzIGluIHRoZSBjb3JyZWN0Cj4gZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAo+ IGluZGV4IDk4NDBmM2IuLmE5OWM3YmUgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxf dHlwZXMuaWRsCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCj4gQEAgLTY4NSw2 ICs2ODUsMTIgQEAgbGlieGxfZGV2aWNlX3Z0cG0gPSBTdHJ1Y3QoImRldmljZV92dHBtIiwgWwo+ ICAgICAgKCJ1dWlkIiwgICAgICAgICAgICAgbGlieGxfdXVpZCksCj4gIF0pCj4gIAo+ICtsaWJ4 bF9kZXZpY2VfcHZjYWxscyA9IFN0cnVjdCgiZGV2aWNlX3B2Y2FsbHMiLCBbCj4gKyAgICAoImJh Y2tlbmRfZG9taWQiLCAgICBsaWJ4bF9kb21pZCksCj4gKyAgICAoImJhY2tlbmRfZG9tbmFtZSIs ICBzdHJpbmcpLAo+ICsgICAgKCJkZXZpZCIsICAgICAgICAgICAgbGlieGxfZGV2aWQpLAo+ICtd KQo+ICsKPiAgbGlieGxfZGV2aWNlX2NoYW5uZWwgPSBTdHJ1Y3QoImRldmljZV9jaGFubmVsIiwg Wwo+ICAgICAgKCJiYWNrZW5kX2RvbWlkIiwgbGlieGxfZG9taWQpLAo+ICAgICAgKCJiYWNrZW5k X2RvbW5hbWUiLCBzdHJpbmcpLAo+IEBAIC03MDksNiArNzE1LDcgQEAgbGlieGxfZG9tYWluX2Nv bmZpZyA9IFN0cnVjdCgiZG9tYWluX2NvbmZpZyIsIFsKPiAgICAgICgidmZicyIsIEFycmF5KGxp YnhsX2RldmljZV92ZmIsICJudW1fdmZicyIpKSwKPiAgICAgICgidmticyIsIEFycmF5KGxpYnhs X2RldmljZV92a2IsICJudW1fdmticyIpKSwKPiAgICAgICgidnRwbXMiLCBBcnJheShsaWJ4bF9k ZXZpY2VfdnRwbSwgIm51bV92dHBtcyIpKSwKPiArICAgICgicHZjYWxsc3MiLCBBcnJheShsaWJ4 bF9kZXZpY2VfcHZjYWxscywgIm51bV9wdmNhbGxzcyIpKSwKCgpJIHRob3VnaHQgeW91IHNhaWQg dGhlcmUgY2FuIG9ubHkgYmUgb24gUFYgY2FsbHMgcGVyIGd1ZXN0PwoKPiAgICAgICMgYSBjaGFu bmVsIG1hbmlmZXN0cyBhcyBhIGNvbnNvbGUgd2l0aCBhIG5hbWUsCj4gICAgICAjIHNlZSBkb2Nz L21pc2MvY2hhbm5lbHMudHh0Cj4gICAgICAoImNoYW5uZWxzIiwgQXJyYXkobGlieGxfZGV2aWNl X2NoYW5uZWwsICJudW1fY2hhbm5lbHMiKSksCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xp YnhsX3R5cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFs LmlkbAo+IGluZGV4IDE3N2Y5YjcuLmI0MTEyMmIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwv bGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNf aW50ZXJuYWwuaWRsCj4gQEAgLTI0LDYgKzI0LDcgQEAgbGlieGxfX2RldmljZV9raW5kID0gRW51 bWVyYXRpb24oImRldmljZV9raW5kIiwgWwo+ICAgICAgKDgsICJWVFBNIiksCj4gICAgICAoOSwg IlZVU0IiKSwKPiAgICAgICgxMCwgIlFVU0IiKSwKPiArICAgICgxMSwgIlBWQ0FMTFMiKSwKPiAg ICAgIF0pCj4gIAo+ICBsaWJ4bF9fY29uc29sZV9iYWNrZW5kID0gRW51bWVyYXRpb24oImNvbnNv bGVfYmFja2VuZCIsIFsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jIGIv dG9vbHMvbGlieGwveGxfY21kaW1wbC5jCj4gaW5kZXggMDNhYjY0NC4uMjNmOTc5MyAxMDA2NDQK PiAtLS0gYS90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKPiArKysgYi90b29scy9saWJ4bC94bF9j bWRpbXBsLmMKPiBAQCAtMTg5OCw2ICsxODk4LDE4IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZp Z19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2UsCj4gICAgICAgICAgICAgIGZyZWUoYnVm Mik7Cj4gICAgICAgICAgfQo+ICAgICAgfQo+ICsgICAgCj4gKyAgICBpZiAoIXhsdV9jZmdfZ2V0 X2xvbmcoY29uZmlnLCAicHZjYWxscyIsICZsLCAwKSkgewo+ICsgICAgICAgIGxpYnhsX2Rldmlj ZV9wdmNhbGxzICpwdmNhbGxzOwo+ICsgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcg cHZjYWxscyBsPSVsdVxuIiwgbCk7CgpMaXR0bGUgZGV2YnVnIGNvZGUgOi0pCj4gKyAgICAgICAg ZF9jb25maWctPm51bV9wdmNhbGxzcyA9IDA7Cj4gKyAgICAgICAgZF9jb25maWctPnB2Y2FsbHNz ID0gTlVMTDsKPiArICAgICAgICBwdmNhbGxzID0gQVJSQVlfRVhURU5EX0lOSVQoZF9jb25maWct PnB2Y2FsbHNzLAo+ICsgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV9wdmNhbGxzcywKPiAr ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9wdmNhbGxzX2luaXQpOwo+ICsgICAgICAgIGxp YnhsX2RldmljZV9wdmNhbGxzX2luaXQocHZjYWxscyk7Cj4gKyAgICAgICAgcmVwbGFjZV9zdHJp bmcoJnB2Y2FsbHMtPmJhY2tlbmRfZG9tbmFtZSwgIjAiKTsKPiArICAgIH0KPiAgCj4gICAgICBp ZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImNoYW5uZWwiLCAmY2hhbm5lbHMsIDAsIDAp KSB7Cj4gICAgICAgICAgZF9jb25maWctPm51bV9jaGFubmVscyA9IDA7CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==