From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [DOC v3] Xen transport for 9pfs Date: Wed, 25 Jan 2017 12:07:22 -0500 Message-ID: <20170125170722.GA27705@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 1cWR2i-0004eW-WE for xen-devel@lists.xenproject.org; Wed, 25 Jan 2017 17:07:33 +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: andr2000@gmail.com, xen-devel@lists.xenproject.org, wei.liu2@citrix.com, andrew.cooper3@citrix.com List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKYW4gMDUsIDIwMTcgYXQgMDQ6NTQ6MzdQTSAtMDgwMCwgU3RlZmFubyBTdGFiZWxs aW5pIHdyb3RlOgo+IENoYW5nZXMgaW4gdjM6Cj4gLSBjbGFyaWZ5IGEgZmV3IHN0YXRlbWVudHMK PiAtIHJlbmFtZSBwb3J0LTxudW0+IHRvIGV2ZW50LWNoYW5uZWwtPG51bT4KPiAtIHVzZSBncmFu dF9yZWZfdCByZWZbMV0gaW5zdGVhZCBvZiByZWZbXQo+IAo+IENoYW5nZXMgaW4gdjI6Cj4gLSBm aXggY29weS9wYXN0ZSBlcnJvcgo+IC0gcmVuYW1lIHJpbmctcmVmLTxudW0+IHRvIHJpbmctcmVm PG51bT4KPiAtIGZpeCBtZW1vcnkgYmFycmllcnMKPiAtIGFkZCAidmVyaWZ5IHByb2QvY29ucyBh Z2FpbnN0IGxvY2FsIGNvcHkiCj4gLSBhZGQgYSBwYXJhZ3JhcGggb24gaGlnaCBsZXZlbCBkZXNp Z24KPiAtIGFkZCBhIG5vdGUgb24gdGhlIG1heGltdW0gcG9zc2libGUgbWF4LXJpbmctcGFnZS1v cmRlciB2YWx1ZQo+IC0gYWRkIG1lY2hhbmlzbXMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXZ0Y2hu IG5vdGlmaWNhdGlvbnMKPiAKPiAtLS0KPiAKPiAjIFhlbiB0cmFuc3BvcnQgZm9yIDlwZnMgdmVy c2lvbiAxIAo+IAo+ICMjIEJhY2tncm91bmQKPiAKPiA5cGZzIGlzIGEgbmV0d29yayBmaWxlc3lz dGVtIHByb3RvY29sIGRldmVsb3BlZCBmb3IgUGxhbiA5LiA5cGZzIGlzIHZlcnkKPiBzaW1wbGUg YW5kIGRlc2NyaWJlcyBhIHNlcmllcyBvZiBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLiBJdCBpcwo+ IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscywg aW4gZmFjdCBtYW55Cj4gY2xpZW50cyBhbmQgc2VydmVycyBzdXBwb3J0IG11bHRpcGxlIGNoYW5u ZWxzLCB1c3VhbGx5IGNhbGxlZAo+ICJ0cmFuc3BvcnRzIi4gRm9yIGV4YW1wbGUgdGhlIExpbnV4 IGNsaWVudCBzdXBwb3J0cyB0Y3AgYW5kIHVuaXgKPiBzb2NrZXRzLCBmZHMsIHZpcnRpbyBhbmQg cmRtYS4KPiAKPiAKPiAjIyMgOXBmcyBwcm90b2NvbAo+IAo+IFRoaXMgZG9jdW1lbnQgd29uJ3Qg Y292ZXIgdGhlIGZ1bGwgOXBmcyBzcGVjaWZpY2F0aW9uLiBQbGVhc2UgcmVmZXIgdG8KPiB0aGlz IFtwYXBlcl0gYW5kIHRoaXMgW3dlYnNpdGVdIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9m IGl0Lgo+IEhvd2V2ZXIgaXQgaXMgdXNlZnVsIHRvIGtub3cgdGhhdCBlYWNoIDlwZnMgcmVxdWVz dCBhbmQgcmVzcG9uc2UgaGFzIHRoZQo+IGZvbGxvd2luZyBoZWFkZXI6Cj4gCj4gICAgIHN0cnVj dCBoZWFkZXIgewo+ICAgICAJdWludDMyX3Qgc2l6ZTsKPiAgICAgCXVpbnQ4X3QgaWQ7Cj4gICAg IAl1aW50MTZfdCB0YWc7Cj4gICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cj4gCj4gICAg IDAgICAgICAgICA0ICA1ICAgIDcKPiAgICAgKy0tLS0tLS0tLSstLSstLS0tKwo+ICAgICB8ICBz aXplICAgfGlkfHRhZyB8Cj4gICAgICstLS0tLS0tLS0rLS0rLS0tLSsKPiAKPiAtICpzaXplKgo+ IFRoZSBzaXplIG9mIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlLgo+IAo+IC0gKmlkKgo+IFRoZSA5 cGZzIHJlcXVlc3Qgb3IgcmVzcG9uc2Ugb3BlcmF0aW9uLgo+IAo+IC0gKnRhZyoKPiBVbmlxdWUg aWQgdGhhdCBpZGVudGlmaWVzIGEgc3BlY2lmaWMgcmVxdWVzdC9yZXNwb25zZSBwYWlyLiBJdCBp cyB1c2VkCj4gdG8gbXVsdGlwbGV4IG9wZXJhdGlvbnMgb24gYSBzaW5nbGUgY2hhbm5lbC4KPiAK PiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIHJlcXVlc3RzIGluLWZsaWdodCBhdCBh bnkgZ2l2ZW4gdGltZS4KPiAKPiAKPiAjIyBSYXRpb25hbGUKPiAKPiBUaGlzIGRvY3VtZW50IGRl c2NyaWJlcyBhIFhlbiBiYXNlZCB0cmFuc3BvcnQgZm9yIDlwZnMsIGluIHRoZQo+IHRyYWRpdGlv bmFsIFBWIGZyb250ZW5kIGFuZCBiYWNrZW5kIGZvcm1hdC4gVGhlIFBWIGZyb250ZW5kIGlzIHVz ZWQgYnkKPiB0aGUgY2xpZW50IHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlIHNlcnZlci4gVGhlIFBW IGJhY2tlbmQgaXMgdXNlZCBieSB0aGUKPiA5cGZzIHNlcnZlciB0byByZWNlaXZlIGNvbW1hbmRz IGZyb20gY2xpZW50cyBhbmQgc2VuZCBiYWNrIHJlc3BvbnNlcy4KPiAKPiBUaGUgdHJhbnNwb3J0 IHByb3RvY29sIHN1cHBvcnRzIG11bHRpcGxlIHJpbmdzIHVwIHRvIHRoZSBtYXhpbXVtCj4gc3Vw cG9ydGVkIGJ5IHRoZSBiYWNrZW5kLiBUaGUgc2l6ZSBvZiBldmVyeSByaW5nIGlzIGFsc28gY29u ZmlndXJhYmxlCj4gYW5kIGNhbiBzcGFuIG11bHRpcGxlIHBhZ2VzLCB1cCB0byB0aGUgbWF4aW11 bSBzdXBwb3J0ZWQgYnkgdGhlIGJhY2tlbmQKPiAoYWx0aG91Z2ggaXQgY2Fubm90IGJlIG1vcmUg dGhhbiAyTUIpLiBUaGUgZGVzaWduIGlzIHRvIGV4cGxvaXQKPiBwYXJhbGxlbGlzbSBhdCB0aGUg dkNQVSBsZXZlbCBhbmQgc3VwcG9ydCBtdWx0aXBsZSBvdXRzdGFuZGluZyByZXF1ZXN0cwo+IHNp bXVsdGFuZW91c2x5Lgo+IAo+IFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgY292ZXIgdGhlIDlwZnMg Y2xpZW50L3NlcnZlciBkZXNpZ24gb3IKPiBpbXBsZW1lbnRhdGlvbiwgb25seSB0aGUgdHJhbnNw b3J0IGZvciBpdC4KCldoYXQgYWJvdXQgdGhlIFBhdWwncyBiaW5hcnkgcHJvdG9jb2wuLgoKaHR0 cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRjaC83OTY4MjAxLyA/CgpIZSB3YXMgdXNpbmcg aXQgYXMgYSBzaWRlLWNoYW5uZWwgZm9yIGhhc2ggZnVuY3Rpb25zIGZvciB0aGUgbmV0d29yawpz dGFjayAoV2luZG93cyAtPiBMaW51eCk/IENvdWxkIHRoYXQgYmUgdXNlZD8KCk9yIEkgc3VwcG9z ZSB2aWNlLXZlcnNhIC0gY291bGQgUGF1bCB1c2UgeW91ciB3b3JrIGhlcmUKaW5zdGVhZCBvZiB0 aGlzIG5ldHdvcmsgc3BlY2lmaWMgbmV0aWZfY3RybD8KCj4gCj4gCj4gIyMgWGVuc3RvcmUKPiAK PiBUaGUgZnJvbnRlbmQgYW5kIHRoZSBiYWNrZW5kIGNvbm5lY3QgdmlhIHhlbnN0b3JlIHRvIGV4 Y2hhbmdlCj4gaW5mb3JtYXRpb24uIFRoZSB0b29sc3RhY2sgY3JlYXRlcyBmcm9udCBhbmQgYmFj ayBub2RlcyB3aXRoIHN0YXRlCj4gW1hlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nXS4gVGhlIHByb3Rv Y29sIG5vZGUgbmFtZSBpcyAqKjlwZnMqKi4KClNpbmNlIHRoaXMgYW4gb3BhcXVlIHByb3RvY29s IHRvIGp1c3QgcHVzaCBkYXRhIGJhY2sgYW5kIGZvcnRoCmNvdWxkIGl0IGJlIG1vcmUgZ2VuZXJp Yz8KCltlZGl0OiBJIHNlZSBub3cgdGhlIDlwZnMgc3BlY2lmaWMgZW50cmllcyBzbyBuZXZlcm1p bmRdCj4gCj4gTXVsdGlwbGUgcmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgZWFjaCBmcm9udGVuZCBh bmQgYmFja2VuZCBjb25uZWN0aW9uLgo+IAo+IFRoZSBmb2xsb3dpbmcgYXJlIG1hbmRhdG9yeSB4 ZW5zdG9yZSBub2RlcyBmb3IgdGhpcyBwcm90b2NvbC4KPiAKPiAKPiAjIyMgRnJvbnRlbmQgWGVu QnVzIE5vZGVzCgpDb3VsZCBJIGNvbnZpZW5jZSB5b3UgdG8gaGF2ZSBCYWNrZW5kIFhlbkJ1cyBO b2RlcyBmaXJzdD8KCj4gCj4gICAgIG51bS1yaW5ncwo+ICAgICAgICAgIFZhbHVlczogICAgICAg ICA8dWludDMyX3Q+Cj4gICAgIAo+ICAgICAgICAgIE51bWJlciBvZiByaW5ncy4gSXQgbmVlZHMg dG8gYmUgbG93ZXIgb3IgZXF1YWwgdG8gbWF4LXJpbmdzLgo+ICAgICAKPiAgICAgZXZlbnQtY2hh bm5lbC08bnVtPiAoZXZlbnQtY2hhbm5lbC0wLCBldmVudC1jaGFubmVsLTEsIGV0YykKPiAgICAg ICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgo+ICAgICAKPiAgICAgICAgICBUaGUgaWRl bnRpZmllciBvZiB0aGUgWGVuIGV2ZW50IGNoYW5uZWwgdXNlZCB0byBzaWduYWwgYWN0aXZpdHkK PiAgICAgICAgICBpbiB0aGUgcmluZyBidWZmZXIuIE9uZSBmb3IgZWFjaCByaW5nLgo+ICAgICAK PiAgICAgcmluZy1yZWY8bnVtPiAocmluZy1yZWYwLCByaW5nLXJlZjEsIGV0YykKPiAgICAgICAg ICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgo+ICAgICAKPiAgICAgICAgICBUaGUgWGVuIGdy YW50IHJlZmVyZW5jZSBncmFudGluZyBwZXJtaXNzaW9uIGZvciB0aGUgYmFja2VuZCB0bwo+ICAg ICAgICAgIG1hcCBhIHBhZ2Ugd2l0aCBpbmZvcm1hdGlvbiB0byBzZXR1cCBhIHNoYXJlIHJpbmcu IE9uZSBmb3IgZWFjaAo+ICAgICAgICAgIHJpbmcuCj4gCj4gIyMjIEJhY2tlbmQgWGVuQnVzIE5v ZGVzCj4gCj4gQmFja2VuZCBzcGVjaWZpYyBwcm9wZXJ0aWVzLCB3cml0dGVuIGJ5IHRoZSBiYWNr ZW5kLCByZWFkIGJ5IHRoZQo+IGZyb250ZW5kOgo+IAo+ICAgICB2ZXJzaW9uCj4gICAgICAgICAg VmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KPiAgICAgCj4gICAgICAgICAgUHJvdG9jb2wgdmVy c2lvbiBzdXBwb3J0ZWQgYnkgdGhlIGJhY2tlbmQuIEN1cnJlbnRseSB0aGUgdmFsdWUgaXMKPiAg ICAgICAgICAxLgoKVGhhdCBpcyBnb29kLiBCdXQgdGhlcmUgbmVlZHMgdG8gYmUgYW4gbmVnb3Rp YXRpb24gd2l0aCBmcm9udGVuZCB3aGVyZQp0aGUgZnJvbnRlbmQgc2F5cyAid2VsbCwgSSB3YW50 IHZlcnNpb24gMiIgYW5kIHdlIGV4Y2hhbmdlIGJhY2sgYW5kIGZvcnRoCm9uIHRoaXMuCgo+ICAg ICAKPiAgICAgbWF4LXJpbmdzCj4gICAgICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4K PiAgICAgCj4gICAgICAgICAgVGhlIG1heGltdW0gc3VwcG9ydGVkIG51bWJlciBvZiByaW5ncyBw ZXIgZnJvbnRlbmQuCj4gICAgIAo+ICAgICBtYXgtcmluZy1wYWdlLW9yZGVyCj4gICAgICAgICAg VmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KPiAgICAgCj4gICAgICAgICAgVGhlIG1heGltdW0g c3VwcG9ydGVkIHNpemUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbiBpbiB1bml0cyBvZgo+ICAgICAg ICAgIGxiKG1hY2hpbmUgcGFnZXMpLCBlLmcuIDAgPT0gMSBwYWdlLCAgMSA9IDIgcGFnZXMsIDIg PT0gNCBwYWdlcywKCnMvbGIvbG9nLyA/Cgo+ICAgICAgICAgIGV0Yy4KPiAKPiBCYWNrZW5kIGNv bmZpZ3VyYXRpb24gbm9kZXMsIHdyaXR0ZW4gYnkgdGhlIHRvb2xzdGFjaywgcmVhZCBieSB0aGUK PiBiYWNrZW5kOgo+IAo+ICAgICBwYXRoCj4gICAgICAgICAgVmFsdWVzOiAgICAgICAgIDxzdHJp bmc+Cj4gICAgIAo+ICAgICAgICAgIEhvc3QgZmlsZXN5c3RlbSBwYXRoIHRvIHNoYXJlLgo+ICAg ICAKPiAgICAgdGFnCj4gICAgICAgICAgVmFsdWVzOiAgICAgICAgIDxzdHJpbmc+Cj4gICAgIAo+ ICAgICAgICAgIEFscGhhbnVtZXJpYyB0YWcgdGhhdCBpZGVudGlmaWVzIHRoZSA5cGZzIHNoYXJl LiBUaGUgY2xpZW50IG5lZWRzCj4gICAgICAgICAgdG8ga25vdyB0aGUgdGFnIHRvIGJlIGFibGUg dG8gbW91bnQgaXQuCj4gICAgIAo+ICAgICBzZWN1cml0eV9tb2RlbAoKcy9fLy0vCgo+ICAgICAg ICAgIFZhbHVlczogICAgICAgICAibm9uZSIKPiAgICAgCj4gICAgICAgICAgKm5vbmUqOiBmaWxl cyBhcmUgc3RvcmVkIHVzaW5nIHRoZSBzYW1lIGNyZWRlbnRpYWxzIGFzIHRoZXkgYXJlCj4gICAg ICAgICAgICAgICAgICBjcmVhdGVkIG9uIHRoZSBndWVzdAo+ICAgICAgICAgIE9ubHkgIm5vbmUi IGlzIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLgoKSXMgdGhpcyB0 aGUgJ2F1dGgnIHBhcnQgb2YgdGhlIDlwZnM/IEkgc29tZWhvdyB0aG91Z2h0IHRoYXQgd291bGQg YmUgcGFydApvZiB0aGUgOXBmcyB0cmFuc3BvcnQuIE9yIGlzIHRoaXMgc29tZXRoaW5nIGRpZmZl cmVudD8KCj4gCj4gCj4gIyMjIFN0YXRlIE1hY2hpbmUKPiAKPiBJbml0aWFsaXphdGlvbjoKPiAK PiAgICAgKkZyb250KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQmFjayoKPiAgICAg WGVuYnVzU3RhdGVJbml0aWFsaXNpbmcgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxp c2luZwo+ICAgICAtIFF1ZXJ5IHZpcnR1YWwgZGV2aWNlICAgICAgICAgICAgICAgIC0gUXVlcnkg YmFja2VuZCBkZXZpY2UKPiAgICAgICBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlkZW50aWZpY2F0aW9uIGRhdGEuCj4gICAgIC0gU2V0dXAgT1MgZGV2aWNlIGluc3RhbmNl LiAgICAgICAgICAgLSBQdWJsaXNoIGJhY2tlbmQgZmVhdHVyZXMKPiAgICAgLSBBbGxvY2F0ZSBh bmQgaW5pdGlhbGl6ZSB0aGUgICAgICAgICAgIGFuZCB0cmFuc3BvcnQgcGFyYW1ldGVycwo+ICAg ICAgIHJlcXVlc3QgcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK PiAgICAgLSBQdWJsaXNoIHRyYW5zcG9ydCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAg ICB8Cj4gICAgICAgdGhhdCB3aWxsIGJlIGluIGVmZmVjdCBkdXJpbmcgICAgICAgICAgICAgICAg ICAgICAgVgo+ICAgICAgIHRoaXMgY29ubmVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgWGVuYnVzU3RhdGVJbml0V2FpdAo+ICAgICAgICAgICAgICAgICAgfAo+ICAgICAgICAgICAg ICAgICAgfAo+ICAgICAgICAgICAgICAgICAgVgo+ICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxp c2VkCj4gCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBRdWVy eSBmcm9udGVuZCB0cmFuc3BvcnQgcGFyYW1ldGVycy4KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtIENvbm5lY3QgdG8gdGhlIHJlcXVlc3QgcmluZyBhbmQKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGNoYW5uZWwu Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFhlbmJ1c1N0YXRlQ29ubmVjdGVkCj4gCj4gICAgICAtIFF1ZXJ5IGJhY2tlbmQgZGV2 aWNlIHByb3BlcnRpZXMuCj4gICAgICAtIEZpbmFsaXplIE9TIHZpcnR1YWwgZGV2aWNlCj4gICAg ICAgIGluc3RhbmNlLgo+ICAgICAgICAgICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICAgfAo+ ICAgICAgICAgICAgICAgICAgVgo+ICAgICAgICAgWGVuYnVzU3RhdGVDb25uZWN0ZWQKPiAKPiBP bmNlIGZyb250ZW5kIGFuZCBiYWNrZW5kIGFyZSBjb25uZWN0ZWQsIHRoZXkgaGF2ZSBhIHNoYXJl ZCBwYWdlIHBlcgo+IHJpbmcsIHdoaWNoIGFyZSB1c2VkIHRvIHNldHVwIHRoZSByaW5ncywgYW5k IGFuIGV2ZW50IGNoYW5uZWwgcGVyIHJpbmcsCj4gd2hpY2ggYXJlIHVzZWQgdG8gc2VuZCBub3Rp ZmljYXRpb25zLgo+IAo+IFNodXRkb3duOgo+IAo+ICAgICAqRnJvbnQqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpCYWNrKgo+ICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZCAgICAgICAgICAg ICAgIFhlbmJ1c1N0YXRlQ29ubmVjdGVkCj4gICAgICAgICAgICAgICAgIHwKPiAgICAgICAgICAg ICAgICAgfAo+ICAgICAgICAgICAgICAgICBWCj4gICAgICAgIFhlbmJ1c1N0YXRlQ2xvc2luZwo+ IAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVW5tYXAgZ3JhbnRz Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBVbmJpbmQgZXZ0Y2hu cwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDbG9zaW5nCj4gCj4g ICAgIC0gVW5iaW5kIGV2dGNobnMKPiAgICAgLSBGcmVlIHJpbmdzCj4gICAgIC0gRnJlZSBkYXRh IHN0cnVjdHVyZXMKPiAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgfAo+ICAgICAg ICAgICAgICAgIFYKPiAgICAgICAgWGVuYnVzU3RhdGVDbG9zZWQKPiAKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtIEZyZWUgcmVtYWluaW5nIGRhdGEgc3RydWN0dXJl cwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDbG9zZWQKPiAKPiAK PiAjIyBSaW5nIFNldHVwCj4gCj4gVGhlIHNoYXJlZCBwYWdlIGhhcyB0aGUgZm9sbG93aW5nIGxh eW91dDoKPiAKPiAgICAgdHlwZWRlZiB1aW50MzJfdCBYRU5fOVBGU19SSU5HX0lEWDsKPiAKPiAg ICAgc3RydWN0IHhlbl85cGZzX2ludGYgewo+ICAgICAJWEVOXzlQRlNfUklOR19JRFggaW5fY29u cywgaW5fcHJvZCwgaW5fZXZlbnQ7Cj4gICAgIAlYRU5fOVBGU19SSU5HX0lEWCBvdXRfY29ucywg b3V0X3Byb2QsIG91dF9ldmVudDsKPiAgICAgCj4gICAgIAl1aW50MzJfdCByaW5nX29yZGVyOwo+ ICAgICAgICAgLyogdGhpcyBpcyBhbiBhcnJheSBvZiAoMSA8PCByaW5nX29yZGVyKSBlbGVtZW50 cyAqLwo+ICAgICAJZ3JhbnRfcmVmX3QgcmVmWzFdOwo+ICAgICB9OwoKQ291bGQgeW91IGV4cGxh aW4gd2h5IERFRklORV9SSU5HX1RZUEVTIHdvdWxkIG5vdCB3b3JrPwoKQ291bGQgeW91IGV4cGxh aW4gbW9yZSB3aGF0ICdbaW58b3V0XV9ldmVudCcgPwoKQWxzbyB3b3VsZCBpdCBiZSBwb3NzaWJs ZSB0byByZS1vcmdhbml6ZSB0aGlzIHN0cnVjdHVyZQpzbyB0aGVyZSBhcmUgbm8gY2FjaGUgYm91 bmNlcz8KCgo+IAo+ICAgICAvKiBub3QgYWN0dWFsbHkgQyBjb21wbGlhbnQgKHJpbmdfb3JkZXIg Y2hhbmdlcyBmcm9tIHJpbmcgdG8gcmluZykgKi8KPiAgICAgc3RydWN0IHJpbmdfZGF0YSB7Cj4g ICAgICAgICBjaGFyIGluWygoMSA8PCByaW5nX29yZGVyKSA8PCBQQUdFX1NISUZUKSAvIDJdOwo+ ICAgICAgICAgY2hhciBvdXRbKCgxIDw8IHJpbmdfb3JkZXIpIDw8IFBBR0VfU0hJRlQpIC8gMl07 Cj4gICAgIH07Cj4gCj4gLSAqKnJpbmdfb3JkZXIqKgo+ICAgSXQgcmVwcmVzZW50cyB0aGUgb3Jk ZXIgb2YgdGhlIGRhdGEgcmluZy4gVGhlIGZvbGxvd2luZyBsaXN0IG9mIGdyYW50Cj4gICByZWZl cmVuY2VzIGlzIG9mIGAoMSA8PCByaW5nX29yZGVyKWAgZWxlbWVudHMuIEl0IGNhbm5vdCBiZSBn cmVhdGVyIHRoYW4KPiAgICoqbWF4LXJpbmctcGFnZS1vcmRlcioqLCBhcyBzcGVjaWZpZWQgYnkg dGhlIGJhY2tlbmQgb24gWGVuQnVzLgo+IC0gKipyZWZbXSoqCj4gICBUaGUgbGlzdCBvZiBncmFu dCByZWZlcmVuY2VzIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGRhdGEuIFRoZXkgYXJl Cj4gICBtYXBwZWQgY29udGlndW9zbHkgaW4gdmlydHVhbCBtZW1vcnkuIFRoZSBmaXJzdCBoYWxm IG9mIHRoZSBwYWdlcyBpcyB0aGUKPiAgICoqaW4qKiBhcnJheSwgdGhlIHNlY29uZCBoYWxmIGlz IHRoZSAqKm91dCoqIGFycmF5LiBUaGUgYXJyYXkgbXVzdAo+ICAgaGF2ZSBhIHBvd2VyIG9mIHR3 byBudW1iZXIgb2YgZWxlbWVudHMuCj4gLSAqKm91dCoqIGlzIGFuIGFycmF5IHVzZWQgYXMgY2ly Y3VsYXIgYnVmZmVyCj4gICBJdCBjb250YWlucyBjbGllbnQgcmVxdWVzdHMuIFRoZSBwcm9kdWNl ciBpcyB0aGUgZnJvbnRlbmQsIHRoZQo+ICAgY29uc3VtZXIgaXMgdGhlIGJhY2tlbmQuCj4gLSAq KmluKiogaXMgYW4gYXJyYXkgdXNlZCBhcyBjaXJjdWxhciBidWZmZXIKPiAgIEl0IGNvbnRhaW5z IHNlcnZlciByZXNwb25zZXMuIFRoZSBwcm9kdWNlciBpcyB0aGUgYmFja2VuZCwgdGhlCj4gICBj b25zdW1lciBpcyB0aGUgZnJvbnRlbmQuCj4gLSAqKm91dF9jb25zKiosICoqb3V0X3Byb2QqKgo+ ICAgQ29uc3VtZXIgYW5kIHByb2R1Y2VyIGluZGljZXMgZm9yIGNsaWVudCByZXF1ZXN0cy4gVGhl eSBrZWVwIHRyYWNrIG9mCj4gICBob3cgbXVjaCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gYnkgdGhl IGZyb250ZW5kIHRvICoqb3V0KiogYW5kIGhvdyBtdWNoCj4gICBkYXRhIGhhcyBhbHJlYWR5IGJl ZW4gY29uc3VtZWQgYnkgdGhlIGJhY2tlbmQuICoqb3V0X3Byb2QqKiBpcwo+ICAgaW5jcmVhc2Vk IGJ5IHRoZSBmcm9udGVuZCwgYWZ0ZXIgd3JpdGluZyBkYXRhIHRvICoqb3V0KiouICoqb3V0X2Nv bnMqKgo+ICAgaXMgaW5jcmVhc2VkIGJ5IHRoZSBiYWNrZW5kLCBhZnRlciByZWFkaW5nIGRhdGEg ZnJvbSAqKm91dCoqLgo+IC0gKippbl9jb25zKiogYW5kICoqaW5fcHJvZCoqCj4gICBDb25zdW1l ciBhbmQgcHJvZHVjZXIgaW5kaWNlcyBmb3IgcmVzcG9uc2VzLiBUaGV5IGtlZXAgdHJhY2sgb2Yg aG93Cj4gICBtdWNoIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZCBieSB0aGUgZnJvbnRl bmQgZnJvbSB0aGUgKippbioqCj4gICBhcnJheS4gKippbl9wcm9kKiogaXMgaW5jcmVhc2VkIGJ5 IHRoZSBiYWNrZW5kLCBhZnRlciB3cml0aW5nIGRhdGEgdG8KPiAgICoqaW4qKi4gICoqaW5fY29u cyoqIGlzIGluY3JlYXNlZCBieSB0aGUgZnJvbnRlbmQsIGFmdGVyIHJlYWRpbmcgZGF0YQo+ICAg ZnJvbSAqKmluKiouCj4gCj4gVGhlIGJpbmFyeSBsYXlvdXQgb2YgYHN0cnVjdCB4ZW5fOXBmc19p bnRmYCBmb2xsb3dzOgo+IAo+ICAgICAwICAgICAgICAgNCAgICAgICAgIDggICAgICAgICAxMiAg ICAgICAgMTYgICAgICAgIDIwICAgICAgICAgMjQgICAgICAgMjgKPiAgICAgKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0rCj4gICAgIHwgaW5fY29ucyB8IGluX3Byb2QgfGluX2V2ZW50IHxvdXRfY29ucyB8b3V0X3By b2QgfG91dF9ldmVudCB8cmluZ19vcmRlfAo+ICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSsKPiAKPiAgICAg MjggICAgICAgIDMyICAgICAgICAzNiAgICAgIDQwOTIgICAgICA0MDk2Cj4gICAgICstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0vLy0tLSstLS0tLS0tLS0rCj4gICAgIHwgIHJlZlswXSB8ICByZWZb MV0gfCAgICAgICAgIHwgIHJlZltOXSB8Cj4gICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0v Ly0tLSstLS0tLS0tLS0rCj4gCj4gKipOLkIqKiBGb3Igb25lIHBhZ2UsIE4gaXMgbWF4aW11bSAx MDE3ICgoNDA5Ni0yOCkvNCksIGJ1dCBnaXZlbiB0aGF0IE4KPiBuZWVkcyB0byBiZSBhIHBvd2Vy IG9mIHR3bywgYWN0dWFsbHkgbWF4IE4gaXMgNTEyLiBBcyA1MTIgPT0gKDEgPDwgOSksCj4gdGhl IG1heGltdW0gcG9zc2libGUgbWF4LXJpbmctcGFnZS1vcmRlciB2YWx1ZSBpcyA5Lgo+IAo+IFRo ZSBiaW5hcnkgbGF5b3V0IG9mIHRoZSByaW5nIGJ1ZmZlcnMgZm9sbG93Ogo+IAo+ICAgICAwICAg ICAgICAgKCgxPDxyaW5nX29yZGVyKTw8UEFHRV9TSElGVCkvMiAgICAgICAoKDE8PHJpbmdfb3Jk ZXIpPDxQQUdFX1NISUZUKQo+ICAgICArLS0tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS8vLS0tLS0tLS0tLS0tLSsKPiAgICAgfCAgICAgICAgICAgIGluICAgICAgICAgICAg IHwgICAgICAgICAgIG91dCAgICAgICAgICAgICB8Cj4gICAgICstLS0tLS0tLS0tLS0vLy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLS0tKwo+IAo+IAo+ICMjIFJpbmcgVXNh Z2UKPiAKPiBUaGUgKippbioqIGFuZCAqKm91dCoqIGFycmF5cyBhcmUgdXNlZCBhcyBjaXJjdWxh ciBidWZmZXJzOgo+ICAgICAKPiAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YoYXJyYXkpID09ICgoMTw8cmluZ19vcmRlcik8PFBBR0VfU0hJRlQpLzIKPiAgICAgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICB8dG8gY29uc3VtZXwgICAg ZnJlZSAgICB8dG8gY29uc3VtZSB8Cj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKPiAgICAgICAgICAgICAgICBeICAgICAgICAgICAgXgo+ICAgICAgICAgICAgICAg IHByb2QgICAgICAgICBjb25zCj4gCj4gICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKGFycmF5KQo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rCj4gICAgIHwgIGZyZWUgICAgfCB0byBjb25zdW1lIHwgICBmcmVlICAgIHwKPiAgICAgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICAgICAgICAgICAgIF4gICAg ICAgICAgICBeCj4gICAgICAgICAgICAgICAgY29ucyAgICAgICAgIHByb2QKPiAKPiBUaGUgZm9s bG93aW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gcmVhZCBhbmQgd3JpdGUgdG8gYW4gYXJy YXk6Cj4gCj4gICAgICNkZWZpbmUgTUFTS19YRU5fOVBGU19JRFgoaWR4KSAoKGlkeCkgJiAoWEVO XzlQRlNfUklOR19TSVpFIC0gMSkpCj4gCj4gICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fOXBm c19yZWFkKGNoYXIgKmJ1ZiwKPiAgICAgCQlYRU5fOVBGU19SSU5HX0lEWCAqbWFza2VkX3Byb2Qs IFhFTl85UEZTX1JJTkdfSURYICptYXNrZWRfY29ucywKPiAgICAgCQl1aW50OF90ICpoLCBzaXpl X3QgbGVuKSB7Cj4gICAgIAlpZiAoKm1hc2tlZF9jb25zIDwgKm1hc2tlZF9wcm9kKSB7Cj4gICAg IAkJbWVtY3B5KGgsIGJ1ZiArICptYXNrZWRfY29ucywgbGVuKTsKPiAgICAgCX0gZWxzZSB7Cj4g ICAgIAkJaWYgKGxlbiA+IFhFTl85UEZTX1JJTkdfU0laRSAtICptYXNrZWRfY29ucykgewo+ICAg ICAJCQltZW1jcHkoaCwgYnVmICsgKm1hc2tlZF9jb25zLCBYRU5fOVBGU19SSU5HX1NJWkUgLSAq bWFza2VkX2NvbnMpOwo+ICAgICAJCQltZW1jcHkoKGNoYXIgKiloICsgWEVOXzlQRlNfUklOR19T SVpFIC0gKm1hc2tlZF9jb25zLCBidWYsIGxlbiAtIChYRU5fOVBGU19SSU5HX1NJWkUgLSAqbWFz a2VkX2NvbnMpKTsKPiAgICAgCQl9IGVsc2Ugewo+ICAgICAJCQltZW1jcHkoaCwgYnVmICsgKm1h c2tlZF9jb25zLCBsZW4pOwo+ICAgICAJCX0KPiAgICAgCX0KPiAgICAgCSptYXNrZWRfY29ucyA9 IF9NQVNLX1hFTl85UEZTX0lEWCgqbWFza2VkX2NvbnMgKyBsZW4pOwo+ICAgICB9Cj4gICAgIAo+ ICAgICBzdGF0aWMgaW5saW5lIHZvaWQgeGVuXzlwZnNfd3JpdGUoY2hhciAqYnVmLAo+ICAgICAJ CVhFTl85UEZTX1JJTkdfSURYICptYXNrZWRfcHJvZCwgWEVOXzlQRlNfUklOR19JRFggKm1hc2tl ZF9jb25zLAo+ICAgICAJCXVpbnQ4X3QgKm9wYXF1ZSwgc2l6ZV90IGxlbikgewo+ICAgICAJaWYg KCptYXNrZWRfcHJvZCA8ICptYXNrZWRfY29ucykgewo+ICAgICAJCW1lbWNweShidWYgKyAqbWFz a2VkX3Byb2QsIG9wYXF1ZSwgbGVuKTsKPiAgICAgCX0gZWxzZSB7Cj4gICAgIAkJaWYgKGxlbiA+ IFhFTl85UEZTX1JJTkdfU0laRSAtICptYXNrZWRfcHJvZCkgewo+ICAgICAJCQltZW1jcHkoYnVm ICsgKm1hc2tlZF9wcm9kLCBvcGFxdWUsIFhFTl85UEZTX1JJTkdfU0laRSAtICptYXNrZWRfcHJv ZCk7Cj4gICAgIAkJCW1lbWNweShidWYsIG9wYXF1ZSArIChYRU5fOVBGU19SSU5HX1NJWkUgLSAq bWFza2VkX3Byb2QpLCBsZW4gLSAoWEVOXzlQRlNfUklOR19TSVpFIC0gKm1hc2tlZF9wcm9kKSk7 IAo+ICAgICAJCX0gZWxzZSB7Cj4gICAgIAkJCW1lbWNweShidWYgKyAqbWFza2VkX3Byb2QsIG9w YXF1ZSwgbGVuKTsgCj4gICAgIAkJfQo+ICAgICAJfQo+ICAgICAJKm1hc2tlZF9wcm9kID0gX01B U0tfWEVOXzlQRlNfSURYKCptYXNrZWRfcHJvZCArIGxlbik7Cj4gICAgIH0KPiAKPiBUaGUgcHJv ZHVjZXIgKHRoZSBiYWNrZW5kIGZvciAqKmluKiosIHRoZSBmcm9udGVuZCBmb3IgKipvdXQqKikg d3JpdGVzIHRvIHRoZQo+IGFycmF5IGluIHRoZSBmb2xsb3dpbmcgd2F5Ogo+IAo+IC0gcmVhZCAq Y29ucyosICpwcm9kKiBmcm9tIHNoYXJlZCBtZW1vcnkKPiAtIGdlbmVyYWwgbWVtb3J5IGJhcnJp ZXIKPiAtIHZlcmlmeSAqcHJvZCogYWdhaW5zdCBsb2NhbCBjb3B5IChjb25zdW1lciBzaG91bGRu J3QgY2hhbmdlIGl0KQo+IC0gd3JpdGUgdG8gYXJyYXkgYXQgcG9zaXRpb24gKnByb2QqIHVwIHRv ICpjb25zKiwgd3JhcHBpbmcgYXJvdW5kIHRoZSBjaXJjdWxhcgo+ICAgYnVmZmVyIHdoZW4gbmVj ZXNzYXJ5Cj4gLSB3cml0ZSBtZW1vcnkgYmFycmllcgo+IC0gaW5jcmVhc2UgKnByb2QqCgpXaGlj aCBjYW4gY2F1c2UgdGhlIGNhY2hlbGluZSB0byBiZSBtYXJrZWQgZGlydHkgLSBhbmQgaWYgdGhl ICcqY29ucycqCmlzIG9uIHRoZSBzYW1lIGNhY2hlIGxpbmUgdGhhdCBtZWFucyBpdCBpcyBNVVNU IGJlIGV2aWN0ZWQgZnJvbSBvdGhlcgpDUFVzIGFuZCBjYXVzZSBhbiBzdGFsbCAod2hlbiByZWFk aW5nIGZyb20gKmNvbnMqKS4KCkkgd29uZGVyIGlmIHlvdSBjYW4gbW92ZSAqY29ucyogYW5kICpw cm9kKiBhcm91bmQgc28gdGhhdCB0aGV5CmFyZSBvbiBzZXBlcmF0ZSBjYWNoZS1saW5lcz8KCj4g LSBub3RpZnkgdGhlIG90aGVyIGVuZCB2aWEgZXZ0Y2huCgpldmVudCBjaGFubmVsLgo+IAo+IFRo ZSBjb25zdW1lciAodGhlIGJhY2tlbmQgZm9yICoqb3V0KiosIHRoZSBmcm9udGVuZCBmb3IgKipp bioqKSByZWFkcyBmcm9tIHRoZQo+IGFycmF5IGluIHRoZSBmb2xsb3dpbmcgd2F5Ogo+IAo+IC0g cmVhZCAqcHJvZCosICpjb25zKiBmcm9tIHNoYXJlZCBtZW1vcnkKPiAtIHJlYWQgbWVtb3J5IGJh cnJpZXIKPiAtIHZlcmlmeSAqY29ucyogYWdhaW5zdCBsb2NhbCBjb3B5IChwcm9kdWNlciBzaG91 bGRuJ3QgY2hhbmdlIGl0KQo+IC0gcmVhZCBmcm9tIGFycmF5IGF0IHBvc2l0aW9uICpjb25zKiB1 cCB0byAqcHJvZCosIHdyYXBwaW5nIGFyb3VuZCB0aGUgY2lyY3VsYXIKPiAgIGJ1ZmZlciB3aGVu IG5lY2Vzc2FyeQo+IC0gZ2VuZXJhbCBtZW1vcnkgYmFycmllcgo+IC0gaW5jcmVhc2UgKmNvbnMq Cj4gLSBub3RpZnkgdGhlIG90aGVyIGVuZCB2aWEgZXZ0Y2huLCBpZiAqZXZlbnQqID09IDEKCi9t ZSBzY3JhdGNoZXMgaGlzIGhlYWQuIFRoaXMgbG9va3MgbGlrZSBzb21ldGhpbmcgdGhhdCBjb3Vs ZCBiZSBvbgp0aGUgWGVuQnVzPyBDb3VsZCB5b3UgZXhwbGFpbiBhIGJpdCBtb3JlIG9mIHdoeSB5 b3Ugd2FudAp0aGlzIG9uIHRoZSByaW5nIGluc3RlYWQgb2Ygc29tZSBvdGhlciB3YXk/Cgo+IC0g Z2VuZXJhbCBtZW1vcnkgYmFycmllciAKPiAtIHJlYWQgKnByb2QqIGFnYWluIGZyb20gc2hhcmVk IG1lbW9yeSB0byBjaGVjayBmb3IgbmV3IHJlcXVlc3RzCj4gCj4gVGhlIHByb2R1Y2VyIHRha2Vz IGNhcmUgb2Ygd3JpdGluZyBvbmx5IGFzIG1hbnkgYnl0ZXMgYXMgYXZhaWxhYmxlIGluIHRoZSBi dWZmZXIKPiB1cCB0byAqY29ucyouIFRoZSBjb25zdW1lciB0YWtlcyBjYXJlIG9mIHJlYWRpbmcg b25seSBhcyBtYW55IGJ5dGVzIGFzIGF2YWlsYWJsZQo+IGluIHRoZSBidWZmZXIgdXAgdG8gKnBy b2QqLgo+IAo+IFRvIGF2b2lkIHVubmVjZXNzYXJ5IG5vdGlmaWNhdGlvbnMsIHRoZSBjb25zdW1l ciBvbmx5IGlzc3VlcyBhbiBldnRjaG4KPiBub3RpZmljYXRpb24gaWYgdGhlICoqZXZlbnQqKiBm aWVsZCAoKippbl9ldmVudCoqIG9yICoqb3V0X2V2ZW50KiopLCBoYXMKPiBiZWVuIHNldCB0byAq KjEqKi4gSW4gZmFjdCB0aGUgcHJvZHVjZXIgZG9lc24ndCB1c3VhbGx5IHJlcXVpcmUgYW55Cj4g bm90aWZpY2F0aW9ucywgYnV0IGlmIGl0IGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUgYmVjYXVz ZSB0aGUgcHJvZHVjZXIKPiBpcyBmb3JjZWQgdG8gd2FpdCBiZWNhdXNlIHRoZSByaW5nIGlzIGZ1 bGwsIHRoZW4gaXQgY2FuIHJlcXVlc3QgdG8gYmUKPiBub3RpZmllZCBieSB0aGUgY29uc3VtZXIg Ynkgc2V0dGluZyAqKmluX2V2ZW50Kiogb3IgKipvdXRfZXZlbnQqKiwKPiBkZXBlbmRpbmcgb24g dGhlIHJpbmcuIEFmdGVyIHJlY2VpdmluZyB0aGUgbm90aWZpY2F0aW9uLCB0aGUgcHJvZHVjZXIK PiBjYW4gcmVzZXQgKmV2ZW50Ki4KCk9rLCBidXQgd2h5PyBXaHkgbm90IG1ha2UgaXQgcGFydCBv ZiBYZW5CdXM/Cj4gCj4gVGhlIHByb2R1Y2VyIGFsd2F5cyBub3RpZmllcyB0aGUgY29uc3VtZXIg YWZ0ZXIgaW5jcmVtZW50aW5nICoqcHJvZCoqLgo+IEhvd2V2ZXIgaW4gc29tZSBjaXJjdW1zdGFu Y2VzIHRoZSBwcm9kdWNlciBpcyBhbGxvd2VkIG5vdCB0byBub3RpZnkgdGhlCj4gY29uc3VtZXIs IGp1c3QgYXMgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgYW5kIHN0aWxsIG1haW50YWluCj4g Y29ycmVjdG5lc3MuIFRoZXNlIGFyZSB0aGUgc3RlcHMgdG8gZG8gaXQ6IGFmdGVyIGluY3JlbWVu dGluZyAqcHJvZCosCgpUaGlzIHNlZW1zIGEgYml0IHN0cmFuZ2UuIFlvdSBhcmUgc2F5aW5nICdz dG9wIGRvaW5nIGludGVycnVwdHMnCmF0IHRoaXMgcG9pbnQgKHJlZ2FyZGxlc3Mgb2Ygd2hhdCBp cyBvdXRzdGFubmRpbmcgaW4gdGhlIHF1ZXVlKS4KClBlcmhhcHMgYSBiZXR0ZXIgYXBwcm9hY2gg aXMgdG8gaGF2ZSBhbiBDT05GSUcgY29tbWFuZCBvbiB0aGUKcmluZyB0byBjaGFuZ2UgdGhpcz8g SXQga2luZCBvZiBmZWVscyB3ZWlyZCB0byBoYXZlIGFuCmNvbmZpZ3VyYXRpb24ga25vYiBpbiB0 aGUgY2FjaGUgaW50ZW5zaXZlIGFyZWEuCgpPciB5b3UgY291bGQgdXNlIFhlbkJ1c1JlY29uZmln dXJlIHN0YXRlIHdoaWNoIGRvZXMgbm90IG1lYW4KeW91IG5lZWQgYSBmdWxsIGRpc2Nvbm5lY3Qv Y29ubmVjdD8KCgo+IHRoZSBwcm9kdWNlciByZWFkcyAqY29ucyogYSBzZWNvbmQgdGltZTsgaWYg dGhlIHZhbHVlIGlzIGNoYW5nZWQgZnJvbQo+IHRoZSBwcmV2aW91cyByZWFkIGFuZCBpdCBpcyBk aWZmZXJlbnQgZnJvbSAqcHJvZCogYmVmb3JlIHRoZSB1cGRhdGUsCj4gdGhlbiB0aGUgbm90aWZp Y2F0aW9uIGNhbiBiZSBhdm9pZGVkLiBUaGVzZSBhcmUgdGhlIHByb2R1Y2VyIHN0ZXBzLCB3aXRo Cj4gdGhlIG9wdGltaXphdGlvbjoKPiAKPiAtIHJlYWQgKnByb2QqIChvbGRfcHJvZCksICpjb25z KiAob2xkX2NvbnMpIGZyb20gc2hhcmVkIG1lbW9yeQo+IC0gZ2VuZXJhbCBtZW1vcnkgYmFycmll cgo+IC0gdmVyaWZ5ICpwcm9kKiBhZ2FpbnN0IGxvY2FsIGNvcHkgKGNvbnN1bWVyIHNob3VsZG4n dCBjaGFuZ2UgaXQpCj4gLSB3cml0ZSB0byBhcnJheSBhdCBwb3NpdGlvbiAqcHJvZCogdXAgdG8g KmNvbnMqLCB3cmFwcGluZyBhcm91bmQgdGhlIGNpcmN1bGFyCj4gICBidWZmZXIgd2hlbiBuZWNl c3NhcnkKPiAtIHdyaXRlIG1lbW9yeSBiYXJyaWVyCj4gLSBpbmNyZWFzZSAqcHJvZCogKG5ld19w cm9kKQo+IC0gZ2VuZXJhbCBtZW1vcnkgYmFycmllcgo+IC0gcmVhZCAqY29ucyogKG5ld19jb25z KQo+IC0gaWYgbmV3X2NvbnMgPT0gb2xkX2NvbnMgb3IgbmV3X2NvbnMgPT0gb2xkX3Byb2QsIHRo ZW4gbm90aWZ5IHRoZQo+ICAgY29uc3VtZXIKPiAKPiAKPiAjIyBSZXF1ZXN0L1Jlc3BvbnNlIFdv cmtmbG93Cj4gCj4gVGhlIGNsaWVudCBjaG9vc2VzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIHJpbmdz LCB0aGVuIGl0IHNlbmRzIGEgcmVxdWVzdAo+IHRvIHRoZSBvdGhlciBlbmQgb24gdGhlICpvdXQq IGFycmF5LCBmb2xsb3dpbmcgdGhlIHByb2R1Y2VyIHdvcmtmbG93Cj4gZGVzY3JpYmVkIGluIFtS aW5nIFVzYWdlXS4KPiAKPiBUaGUgc2VydmVyIHJlY2VpdmVzIHRoZSBub3RpZmljYXRpb24gYW5k IHJlYWRzIHRoZSByZXF1ZXN0LCBmb2xsb3dpbmcKPiB0aGUgY29uc3VtZXIgd29ya2Zsb3cgZGVz Y3JpYmVkIGluIFtSaW5nIFVzYWdlXS4gVGhlIHNlcnZlciBrbm93cyBob3cKPiBtdWNoIHRvIHJl YWQgYmVjYXVzZSBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlICpzaXplKiBmaWVsZCBvZiB0aGUgOXBm cwo+IGhlYWRlci4gVGhlIHNlcnZlciBwcm9jZXNzZXMgdGhlIHJlcXVlc3QgYW5kIHNlbmRzIGJh Y2sgYSByZXNwb25zZSBvbgo+IHRoZSAqaW4qIGFycmF5IG9mIHRoZSBzYW1lIHJpbmcsIGZvbGxv d2luZyB0aGUgcHJvZHVjZXIgd29ya2Zsb3cgYXMKPiB1c3VhbC4gVGh1cywgZXZlcnkgcmVxdWVz dC9yZXNwb25zZSBwYWlyIGlzIG9uIG9uZSByaW5nLgo+IAo+IFRoZSBjbGllbnQgcmVjZWl2ZXMg YSBub3RpZmljYXRpb24gYW5kIHJlYWRzIHRoZSByZXNwb25zZSBmcm9tIHRoZSAqaW4qCj4gYXJy YXkuIFRoZSBjbGllbnQga25vd3MgaG93IG11Y2ggZGF0YSB0byByZWFkIGJlY2F1c2UgaXQgaXMg c3BlY2lmaWVkIGluCj4gdGhlICpzaXplKiBmaWVsZCBvZiB0aGUgOXBmcyBoZWFkZXIuCgovbWUg bm9kcy4KPiAKPiAKPiBbcGFwZXJdOiBodHRwczovL3d3dy51c2VuaXgub3JnL2xlZ2FjeS9ldmVu dC91c2VuaXgwNS90ZWNoL2ZyZWVuaXgvZnVsbF9wYXBlcnMvaGVuc2Jlcmdlbi9oZW5zYmVyZ2Vu LnBkZgoKVGhhdCB3YXMgZWR1Y2F0aW9uYWwhIEkgaGF2ZSB0byBsb3ZlIHRoZWlyIHBlcmZvcm1h bmNlCnRlc3RzOgoiT3VyIHRlc3QgZW52aXJvbm1lbnQgaXMgYSBjbHVzdGVyIG9mIGlkZW50aWNh bGx5CmNvbmZpZ3VyZWQgZHVhbC1wcm9jZXNzb3IgODY2IE1IeiBQZW50aXVtIElJSQpzZXJ2ZXJz LCBlYWNoIGNvbmZpZ3VyZWQgd2l0aCAyNTYgTUIgb2YgbSIKCjg2Nk1IWiEgV29vaG9vIQoKPiBb d2Vic2l0ZV06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFvcy9kaW9kL2Jsb2IvbWFzdGVyL3Byb3Rv Y29sLm1kCgpodHRwczovLzlwLmlvL21hZ2ljL21hbjJodG1sLzIvZmNhbGwKPiBbWGVuYnVzU3Rh dGVJbml0aWFsaXNpbmddOiBodHRwOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvaHlw ZXJjYWxsL3g4Nl82NC9pbmNsdWRlLHB1YmxpYyxpbyx4ZW5idXMuaC5odG1sCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK