From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Clark Subject: Re: [PATCH v3 15/15] argo: validate hypercall arg structures via compat machinery Date: Sun, 20 Jan 2019 13:18:22 -0800 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-16-git-send-email-christopher.w.clark@gmail.com> <5C3C874D020000780020D3D4@prv1-mh.provo.novell.com> <5C406633020000780020E9BC@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1glKUJ-0002Ig-FZ for xen-devel@lists.xenproject.org; Sun, 20 Jan 2019 21:18:39 +0000 Received: by mail-lj1-x243.google.com with SMTP id g11-v6so15852345ljk.3 for ; Sun, 20 Jan 2019 13:18:36 -0800 (PST) In-Reply-To: <5C406633020000780020E9BC@prv1-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Jan Beulich Cc: Tim Deegan , Stefano Stabellini , Wei Liu , Ross Philipson , Jason Andryuk , Daniel Smith , Andrew Cooper , Konrad Rzeszutek Wilk , Ian Jackson , Rich Persaud , James McKenzie , George Dunlap , Julien Grall , Paul Durrant , xen-devel , eric chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKYW4gMTcsIDIwMTkgYXQgMzoyNSBBTSBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3Vz ZS5jb20+IHdyb3RlOgo+Cj4gPj4+IE9uIDE3LjAxLjE5IGF0IDA4OjIyLCA8Y2hyaXN0b3BoZXIu dy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+ID4gU29tZSBkZXRhaWxzIG9mIHRoZSBwcm9ibGVt Ogo+ID4KPiA+IFdpdGhvdXQgdGhlIG1hY3JvIG92ZXJyaWRlcyBpbiBwbGFjZSAoaWUuIHVzaW5n IHRoZSBleGlzdGluZwo+ID4gZGVmaW5pdGlvbnMpIHRoZSBidWlsZCBmYWlscyBvbiBDSEVDS19h cmdvX3NlbmRfYWRkciAgYmVjYXVzZSB0aGlzCj4gPiBzdHJ1Y3QgaXMgZGVmaW5lZCB3aXRoIHR5 cGVzIHRoYXQgYXJlIHRoZW1zZWx2ZXMgdHJhbnNsYXRlZCBieSB0aGUKPiA+IGNvbXBhdCBwcm9j ZXNzaW5nOgo+Cj4gQnV0IHRoYXQncyBhIG5vcm1hbCBzaXR1YXRpb24uCgpJIHRob3VnaHQgaXQg d291bGQgYmUgdG9vIGJ1dCBJIGhhdmVuJ3QgZm91bmQgYSBkaXJlY3QgZXF1aXZhbGVudCB0bwp3 aGF0IHRoaXMgaGVhZGVyIG5lZWRzLiBJJ2xsIG91dGxpbmUgdGhlIHJlc3VsdHMgb2YgbXkgZXhh bWluYXRpb24KYmVsb3cuCgo+Cj4gPiB0eXBlZGVmIHN0cnVjdCB4ZW5fYXJnb19zZW5kX2FkZHIK PiA+IHsKPiA+ICAgICB4ZW5fYXJnb19hZGRyX3Qgc3JjOwo+ID4gICAgIHhlbl9hcmdvX2FkZHJf dCBkc3Q7Cj4gPiB9IHhlbl9hcmdvX3NlbmRfYWRkcl90Owo+ID4KPiA+IGNvbXBhdC9hcmdvLmM6 IEluIGZ1bmN0aW9uICdfX2NoZWNrRnN0cnVjdF9hcmdvX3NlbmRfYWRkcl9fc3JjJzoKPiA+IHhl bi9pbmNsdWRlL3hlbi9jb21wYXQuaDoxNzA6MTg6IGVycm9yOiBjb21wYXJpc29uIG9mIGRpc3Rp bmN0IHBvaW50ZXIKPiA+IHR5cGVzIGxhY2tzIGEgY2FzdCBbLVdlcnJvcl0KPiA+ICAgICAgcmV0 dXJuICZ4LT5mID09ICZjLT5mOyBcCj4gPiAgICAgICAgICAgICAgICAgICBeCj4gPiB4ZW4vaW5j bHVkZS94ZW4vY29tcGF0Lmg6MTc2OjU6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybwo+ID4g J0NIRUNLX0ZJRUxEX0NPTU1PTl8nCj4gPiAgICAgIENIRUNLX0ZJRUxEX0NPTU1PTl8oaywgQ0hF Q0tfTkFNRV8oaywgbiAjIyBfXyAjIyBmLCBGKSwgbiwgZikKPiA+ICAgICAgXn5+fn5+fn5+fn5+ fn5+fn5+fgo+ID4geGVuL2luY2x1ZGUvY29tcGF0L3hsYXQuaDoxMjM4OjU6IG5vdGU6IGluIGV4 cGFuc2lvbiBvZiBtYWNybyAnQ0hFQ0tfRklFTERfJwo+ID4gICAgICBDSEVDS19GSUVMRF8oc3Ry dWN0LCBhcmdvX3NlbmRfYWRkciwgc3JjKTsgXAo+ID4gICAgICBefn5+fn5+fn5+fn4KPiA+IGNv bXBhdC9hcmdvLmM6NDM6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvICdDSEVDS19hcmdv X3NlbmRfYWRkcicKPiA+ICBDSEVDS19hcmdvX3NlbmRfYWRkcjsKPiA+ICBefn5+fn5+fn5+fn5+ fn5+fn5+fgo+ID4KPiA+IGJlY2F1c2UgeGVuX2FyZ29fYWRkcl90IGlzIGRldGVjdGVkIGFzIGEg ZGlmZmVyZW50IHR5cGUgdGhhbgo+ID4gY29tcGF0X2FyZ29fYWRkcl90IC0tIHdoZW4gaW4gcHJh Y3RpY2UgaXMgdGhlIHNhbWUgc2l6ZSBhbmQgaGFzIHRoZQo+ID4gc2FtZSBmaWVsZHMgYXQgdGhl IHNhbWUgb2Zmc2V0cy4KPgo+IERpZCB5b3UgcGVyaGFwcyBub3QgYWRkIGVudHJpZXMgZm9yIHRo ZSBpbm5lciBzdHJ1Y3R1cmVzIHRvIHhsYXQubHN0PwoKTm8sIHVuZm9ydHVuYXRlbHkgSSBkaWQu CgpIZXJlIGFyZSBteSBmaW5kaW5ncyBhZnRlciBleHBsb3JpbmcgdGhlIGNvbXBhdCBtYWNoaW5l cnksIGluIHJlbGF0aW9uCnRvIHVuZGVyc3RhbmRpbmcgaXRzIHByb2Nlc3Npbmcgb2YgdGhlIHRo ZSBBcmdvIHB1YmxpYyBoZWFkZXIgZmlsZSwgYW5kCml0cyBwcm9kdWN0aW9uIG9mIHRoZSBjb21w YXQgaGVhZGVyIGZpbGUgYW5kIHZhbGlkYXRpb24gbWFjcm9zLgoKMSkgVHdvIGFsdGVybmF0aXZl IHZhbGlkYXRpb24gbWFjcm9zIGFyZSBwb3NzaWJsZSBhcyBvdXRwdXQsIGRlcGVuZGluZwpvbiBo b3cgc3RydWN0IGZpZWxkcyBhcmUgZGVjbGFyZWQgd2l0aGluIHN0cnVjdHMgaW4gdGhlIGlucHV0 IGhlYWRlci4KClN0cnVjdCBmaWVsZHMgdGhhdCBhcmUgdGhlbXNlbHZlcyBzdHJ1Y3RzIGNhbiBi ZSBkZWNsYXJlZCB0d28gZGlmZmVyZW50CndheXM6CgoqIGJ5IHR5cGUgKEknbGwgY2FsbCB0aGlz ICJ0eXBlIGZvcm0iKTogeGVuX215c3RydWN0X3QgZmllbGQ7CgplZy4KICAgIHR5cGVkZWYgc3Ry dWN0IHhlbl9hcmdvX3NlbmRfYWRkcgogICAgewogICAgICAgIHhlbl9hcmdvX2FkZHJfdCBzcmM7 CiAgICAgICAgeGVuX2FyZ29fYWRkcl90IGRzdDsKICAgIH0geGVuX2FyZ29fc2VuZF9hZGRyX3Q7 CgoKKiBieSBzdHJ1Y3QgbmFtZSAoInN0cnVjdCBmb3JtIik6IHN0cnVjdCB4ZW5fbXlzdHJ1Y3Qg ZmllbGQ7CgplZy4KICAgIHR5cGVkZWYgc3RydWN0IHhlbl9hcmdvX3NlbmRfYWRkcgogICAgewog ICAgICAgIHN0cnVjdCB4ZW5fYXJnb19hZGRyIHNyYzsKICAgICAgICBzdHJ1Y3QgeGVuX2FyZ29f YWRkciBkc3Q7CiAgICB9IHhlbl9hcmdvX3NlbmRfYWRkcl90OwoKCkluIHRoZSB2YWxpZGF0aW9u IG1hY3JvcyB0aGF0IGFyZSBwcm9kdWNlZCBmb3IgeGVuX2FyZ29fc2VuZF9hZGRyLCB0aGUKInN0 cnVjdCBmb3JtIiBjb250YWluczoKICAgIENIRUNLX215c3RydWN0OwoKYW5kIHRoZSAidHlwZSBm b3JtIiBjb250YWlucyBpbnN0ZWFkOgogICAgQ0hFQ0tfRklFTERfKHN0cnVjdCwgbXlzdHJ1Y3Qs IGZpZWxkKTsKClRoZXNlIHR3byB2YWxpZGF0aW9uIG1hY3JvcyBkbyBkaWZmZXJlbnQgdGhpbmdz OyB0aGUgQ0hFQ0tfRklFTEQgb25lCmlzIHN0cm9uZ2VyIGJlY2F1c2UgaXQgdGVzdHMgdGhhdCB0 aGUgb2Zmc2V0LCBzaXplIGFuZCB0eXBlIG9mIHRoZQpmaWVsZCBtYXRjaCwgd2hlcmVhcyB0aGUg b3RoZXIgY2hlY2tzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGlubmVyIHN0cnVjdCwKYnV0IG5vdCBp dHMgcGxhY2VtZW50IHdpdGhpbiB0aGUgb3V0ZXIgb3IgbWF0Y2hpbmcgdHlwZSBpbiBjb21wYXQg dnMKbm9uLWNvbXBhdC4KCkFmdGVyIHJldmlld2luZyBvdGhlciBwdWJsaWMgaGVhZGVycyB3aXRo aW4gWGVuIGFuZCB0aGUgc3RydWN0cyBpbiB0aGUKeGxhdC5sc3QgbGlzdCwgaXQgbG9va3MgbGlr ZSBzb21lIGV4aXN0aW5nIHN0cnVjdHMgYXJlIHBhc3NpbmcKQ0hFQ0tzIGJ5IHVzaW5nIHRoZSAi c3RydWN0IiBmb3JtLCBldmVuIHRob3VnaCB0aGUgY2hlY2tzIGFyZSB3ZWFrZXIuCgoKMi4gVGhl ICJ0eXBlIGZvcm0iIGNoZWNrcyBjYW5ub3Qgd29yayBmb3IgZmllbGRzIHRoYXQgYXJlIHRoZW1z ZWx2ZXMKY29tcGF0LXRyYW5zbGF0ZWQuCgpGb3IgZmllbGRzIHRoYXQgYXJlIHN0cnVjdCB0eXBl cyB0aGF0IGFyZSB0aGVtc2VsdmVzIGNvbXBhdC10cmFuc2xhdGVkLAp0aGUgQ0hFQ0tfRklFTEQg ZmFpbHMgYmVjYXVzZSBpdCBkb2VzIGEgdHlwZW9mIGNoZWNrIGluIHRoZSBtYWNybywKd2hpY2gg Y2Fubm90IHBhc3Mgc2luY2UgdGhlIG5vbi1jb21wYXQgdHlwZSB3aWxsIG5ldmVyIGVxdWFsIHRo ZQpjb21wYXQtdHlwZSAtLSB0aGUgZmllbGRzIHJlYWxseSBhcmUgZGlmZmVyZW50IHR5cGVzLgoK U28gd2hlbiBkZWZpbmluZyBhIHN0cnVjdCBmaWVsZCB3aXRoIGEgdHlwZSB0aGF0IHdpbGwgYmUg dHJhbnNsYXRlZCwKeW91IGhhdmUgdG8gZGVjbGFyZSB0aGVtIHVzaW5nIHRoZSAic3RydWN0IiBm b3JtLCBub3QgdGhlICJ0eXBlIiBmb3JtLgoKQSBwcmlvciBleGFtcGxlIG9mIHRoaXMgaXM6IHN0 cnVjdCBtY2luZm9fZXh0ZW5kZWQKd2hpY2ggZGVjbGFyZXMgYW4gYXJyYXkgZmllbGQgdXNpbmcg dGhlIHN0cnVjdCBmb3JtLCBhbmQgbm90IGl0cyB0eXBlLgoKQSBwcm9ibGVtIHdpdGggd2hhdCB0 aGUgInN0cnVjdCIgZm9ybSBnZW5lcmF0ZXMgaXMgdGhhdCB0aGUgdGVzdCB0aGF0IGl0CnByb2R1 Y2VzIGRvZXNuJ3QgY2hlY2sgdGhlIG9mZnNldCBvZiB0aGUgZmllbGQgd2l0aGluIHRoZSBzdHJ1 Y3QgaXQKYmVsb25ncyB0by4gRW5hYmxpbmcgQ0hFQ0tfRklFTEQgdG8gd29yayBsb29rcyBwcmVm ZXJhYmxlIGFzIGl0CnByb3ZpZGVzIGJldHRlciBhc3N1cmFuY2Ugb2YgY29ycmVjdG5lc3MuCgpP bmUgd2F5IHRvIG1ha2UgQ0hFQ0tfRklFTEQgd29yayBpcyB0byBvdmVycmlkZSB0aGUgQ0hFQ0tf Q09NTU9OIG1hY3JvLAphbmQgZGlzYWJsZSB0aGUgdHlwZW9mIGNoZWNrIHdoZW4gbmVjZXNzYXJ5 LCBhcyBoYXMgYmVlbiBwcmVzZW50ZWQgaW4KdGhlIHZlcnNpb25zIG9mIHRoZSBBcmdvIHBhdGNo IHNlcmllcyBzbyBmYXIuCgoKMy4gQSBjaGFsbGVuZ2Ugd2l0aCB1c2luZyB0aGUgInN0cnVjdCIg Zm9ybSwgZm9sbG93aW5nIGZyb20gdGhlIHJlc3VsdApvZiBwb2ludCAyLCBvY2N1cnMgd2hlbiBp dCdzIGEgWEVOX0dVRVNUX0hBTkRMRSBmaWVsZCB3aXRoaW4gdGhlIHN0cnVjdC4KSXQncyBub3Qg b2J2aW91cyBob3cgdG8gZGVjbGFyZSB0aGF0IGZpZWxkIHVzaW5nIHRoZSAic3RydWN0IiBmb3Jt CnJhdGhlciB0aGFuIHRoZSAidHlwZSIgZm9ybS4KVGhpcyBhZmZlY3RzIHRoZSBhcmdvX2lvdiBz dHJ1Y3QuCgo0LiBNYWNyb3MgdG8gcGVyZm9ybSAic3RydWN0IGZvcm0iIGNoZWNrcyBjYW5ub3Qg YmUgcmVwZWF0ZWQuCgpXaGVuIHVzaW5nIHRoZSAic3RydWN0IiBmb3JtLCBpdCdzIHByb2JsZW0g d2hlbiB0aGUgc3RydWN0IGNvbnRhaW5zIHR3bwpmaWVsZHMgb2YgdGhlIHNhbWUgY29tcGF0LXRy YW5zbGF0ZWQgdHlwZS4KCmVnLiBjb25zaWRlciB0aGUgInN0cnVjdCBmb3JtIiB2ZXJzaW9uIG9m IHhlbl9hcmdvX3NlbmRfYWRkciwgd2hpY2ggaGFzCnR3byBmaWVsZHMgb2Ygc3RydWN0IHhlbl9h cmdvX2FkZHI6CgogICAgdHlwZWRlZiBzdHJ1Y3QgeGVuX2FyZ29fc2VuZF9hZGRyCiAgICB7CiAg ICAgICAgc3RydWN0IHhlbl9hcmdvX2FkZHIgc3JjOwogICAgICAgIHN0cnVjdCB4ZW5fYXJnb19h ZGRyIGRzdDsKICAgIH0geGVuX2FyZ29fc2VuZF9hZGRyX3Q7Cgp3aGljaCB0aGVuIGdlbmVyYXRl cyB0aGlzIGluIHRoZSBjb21wYXQgaGVhZGVyOgoKICAgICNkZWZpbmUgQ0hFQ0tfYXJnb19zZW5k X2FkZHIgXAogICAgICAgIENIRUNLX1NJWkVfKHN0cnVjdCwgYXJnb19zZW5kX2FkZHIpOyBcCiAg ICAgICAgQ0hFQ0tfYXJnb19hZGRyOyBcCiAgICAgICAgQ0hFQ0tfYXJnb19hZGRyCgphbmQgdGhl IHNlY29uZCBtYWNybyBpbnZvY2F0aW9uIG9mIENIRUNLX2FyZ29fYWRkciBqdXN0IGJyZWFrcywg d2l0aCB0aGUKYnVpbGQgZmFpbGluZyBkdWUgdG8gcmVkZWZpbml0aW9uIG9mIGEgc3ltYm9sIHRo YXQgaXMgYWxyZWFkeSBkZWZpbmVkLgoKQSAoaG9ycmlibGUsIHVuYWNjZXB0YWJsZSkgd29ya2Fy b3VuZCB0aGF0IHVuYmxvY2tzIGZ1cnRoZXIgZGlzY292ZXJ5CmlzIHRvIHJlZGVmaW5lIHhlbl9h cmdvX3NlbmRfYWRkciB0byB1c2UgYW4gYXJyYXk6Cgp0eXBlZGVmIHN0cnVjdCB4ZW5fYXJnb19z ZW5kX2FkZHIKewogICAgc3RydWN0IHhlbl9hcmdvX2FkZHIgYWRkcnNbMl07Cn0geGVuX2FyZ29f c2VuZF9hZGRyX3Q7Cgp3aGljaCBkb2VzIHBhc3MsIHNpbmNlIGl0IG5vdyBnZW5lcmF0ZXMgdGhp czoKCiNkZWZpbmUgQ0hFQ0tfYXJnb19zZW5kX2FkZHIgXAogICAgQ0hFQ0tfU0laRV8oc3RydWN0 LCBhcmdvX3NlbmRfYWRkcik7IFwKICAgIENIRUNLX2FyZ29fYWRkcgoKYW5kIHRoZW4gQ0hFQ0tf YXJnb19zZW5kX2FkZHIgcGFzc2VzLCAqYnV0KiB0aGUgZmllbGRzIGFyZSBubyBsb25nZXIKbmFt ZWQgYXMgdGhleSBzaG91bGQgYmUsIHdoaWNoIGlzIG5vdCBPSy4KClRoZSAibm8gcmVwZWF0ZWQg Y2hlY2tzIiBwcm9ibGVtIGFsc28gb2NjdXJzIHdoZW4gYW5vdGhlciBzZXBhcmF0ZQpzdHJ1Y3Qg Y29udGFpbnMgYSBmaWVsZCBvZiBhIHR5cGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQ6 CndoaWNoZXZlciBDSEVDSyBpcyBwZXJmb3JtZWQgc2Vjb25kIHdpbGwgYnJlYWsuCgplZy4KdHlw ZWRlZiBzdHJ1Y3QgeGVuX2FyZ29fcmluZ19kYXRhX2VudAp7CiAgICBzdHJ1Y3QgeGVuX2FyZ29f YWRkciByaW5nOwogICAgdWludDE2X3QgZmxhZ3M7CiAgICB1aW50MTZfdCBwYWQ7CiAgICB1aW50 MzJfdCBzcGFjZV9yZXF1aXJlZDsKICAgIHVpbnQzMl90IG1heF9tZXNzYWdlX3NpemU7Cn0geGVu X2FyZ29fcmluZ19kYXRhX2VudF90OwoKYWxzbyBoYXMgYSBmaWVsZCBvZiB0eXBlIHhlbl9hcmdv X2FkZHIsIHdoaWNoIHByb2R1Y2VzIENIRUNLX2FyZ29fYWRkciwKd2hpY2ggdGhlbiBmYWlscyBi ZWNhdXNlIHRoYXQgd2FzIGFscmVhZHkgdGVzdGVkIGluCkNIRUNLX2FyZ29fc2VuZF9hZGRyLgoK QW55d2F5LCBob3BlZnVsbHkgdGhpcyBwcm92aWRlcyBjb250ZXh0IGZvciBldmFsdWF0aW5nIHRo ZSBtZXRob2Qgb2YKcGFzc2luZyB0aGUgY29tcGF0IHRlc3RzIHRoYXQgaGFzIGJlZW4gcHJvcG9z ZWQgaW4gdGhlIEFyZ28gc2VyaWVzOgpzZWxlY3RpdmUgb3ZlcnJpZGUgb2YgdGhlIENIRUNLX0ZJ RUxEX0NPTU1PTiBtYWNybyB0byBkaXNhYmxlIHRoZSB0eXBlb2YKY2hlY2tzIG9ubHkgZm9yIHZh bGlkYXRpbmcgdGhvc2Ugc3RydWN0cyB0aGF0IHJlcXVpcmUgaXQgdG8gYmUgdHVybmVkCm9mZi4K Cgo+ID4+ID4gLS0tIGEveGVuL2NvbW1vbi9NYWtlZmlsZQo+ID4+ID4gKysrIGIveGVuL2NvbW1v bi9NYWtlZmlsZQo+ID4+ID4gQEAgLTcwLDcgKzcwLDcgQEAgb2JqLXkgKz0geG1hbGxvY190bHNm Lm8KPiA+PiA+ICBvYmotYmluLSQoQ09ORklHX1g4NikgKz0gJChmb3JlYWNoIG4sZGVjb21wcmVz cyBidW56aXAyIHVueHogdW5sem1hIHVubHpvIHVubHo0IGVhcmx5Y3BpbywkKG4pLmluaXQubykK PiA+PiA+Cj4gPj4gPgo+ID4+ID4gLW9iai0kKENPTkZJR19DT01QQVQpICs9ICQoYWRkcHJlZml4 IGNvbXBhdC8sZG9tYWluLm8ga2VybmVsLm8gbWVtb3J5Lm8gbXVsdGljYWxsLm8geGxhdC5vKQo+ ID4+ID4gK29iai0kKENPTkZJR19DT01QQVQpICs9ICQoYWRkcHJlZml4IGNvbXBhdC8sYXJnby5v IGRvbWFpbi5vIGtlcm5lbC5vIG1lbW9yeS5vIG11bHRpY2FsbC5vIHhsYXQubykKPiA+Pgo+ID4+ IFdoaWxlIGEgbWF0dGVyIG9mIHRhc3RlIHRvIGEgY2VydGFpbiBkZWdyZWUsIEknbSBub3QgY29u dmluY2VkCj4gPj4gaW50cm9kdWNpbmcgYSBzZXBhcmF0ZSBmaWxlIGZvciB0aGlzIGlzIHJlYWxs eSBuZWNlc3NhcnksIGVzcGVjaWFsbHkKPiA+PiBpZiBzb21lIG9mIHRoZSBvdmVycmlkZXMgdG8g dGhlIENIRUNLXyogbWFjcm9zIHdvdWxkIGdvIGF3YXkuCj4gPgo+ID4gYWNrLiBJIHdvdWxkbid0 IGhhdmUgbW92ZWQgdGhlbSBvdXQgaWYgdGhlIG92ZXJyaWRlcyB3ZXJlbid0IGluIHVzZTsKPiA+ IGJ1dCBJIHdpbGwgbWVyZ2UgaXQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBpZiB0aGF0 IGlzIHByZWZlcnJlZC4KPgo+IFdlbGwgLSBsZXQncyBmaXJzdCBzZWUgd2hldGhlciB0aGUgb3Zl cnJpZGVzIGFyZSByZWFsbHkgbmVlZGVkLiBJZiBzbywKPiBrZWVwaW5nIHRoaXMgaW4gYSBzZXBh cmF0ZSBmaWxlIG1pZ2h0IGluZGVlZCBiZSBiZXR0ZXIuCgphY2suCgpDaHJpc3RvcGhlcgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54 ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==