From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 05/15] drm/i915: GuC-specific firmware loader Date: Mon, 6 Jul 2015 20:12:29 +0200 Message-ID: <20150706181229.GF7568@phenom.ffwll.local> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> <1435926637-30892-6-git-send-email-david.s.gordon@intel.com> <20150706142822.GJ2156@phenom.ffwll.local> <559AAEE5.5010101@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f46.google.com (mail-wg0-f46.google.com [74.125.82.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA0FA6E3BA for ; Mon, 6 Jul 2015 11:09:43 -0700 (PDT) Received: by wguu7 with SMTP id u7so147589592wgu.3 for ; Mon, 06 Jul 2015 11:09:41 -0700 (PDT) Content-Disposition: inline In-Reply-To: <559AAEE5.5010101@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdWwgMDYsIDIwMTUgYXQgMDU6Mzc6NTdQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gT24gMDYvMDcvMTUgMTU6MjgsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPk9uIEZyaSwg SnVsIDAzLCAyMDE1IGF0IDAxOjMwOjI3UE0gKzAxMDAsIERhdmUgR29yZG9uIHdyb3RlOgo+ID4+ RnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gPj4KPiA+PlRoaXMgdXNlcyB0aGUg Y29tbW9uIGZpcm13YXJlIGxvYWRlciB0byBmZXRjaCB0aGUgZmlybXdhcmUgaW1hZ2UsCj4gPj50 aGVuIGxvYWRzIGl0IGludG8gdGhlIEd1QydzIG1lbW9yeSB2aWEgYSBkZWRpY2F0ZWQgRE1BIGVu Z2luZS4KPiA+Pgo+ID4+VGhpcyBwYXRjaCBpcyBkZXJpdmVkIGZyb20gR3VDIGxvYWRpbmcgd29y ayBvcmlnaW5hbGx5IGRvbmUgYnkKPiA+PlZpbml0IEF6YWQgYW5kIEJlbiBXaWRhd3NreS4gSXQg aGFzIGJlZW4gcmVjb25zdHJ1Y3RlZCB0byBhY2NvcmQKPiA+PndpdGggdGhlIGNvbW1vbiBmaXJt d2FyZSBsb2FkaW5nIG1lY2hhbmlzbSBieSBEYXZlIEdvcmRvbiBhcyB3ZWxsCj4gPj5hcyBuZXcg ZmlybXdhcmUgbGF5b3V0IGV0Yy4KPiA+Pgo+ID4+djI6Cj4gPj4gICAgIFZhcmlvdXMgaW1wcm92 ZW1lbnRzIHBlciByZXZpZXcgY29tbWVudHMgYnkgQ2hyaXMgV2lsc29uCj4gPj4KPiA+PnYzOgo+ ID4+ICAgICBSZW1vdmVkICd3YWl0JyBwYXJhbWV0ZXIgdG8gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQo KSBhcyBwcmVmZXRjaAo+ID4+ICAgICAgICAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiB0aGUg Y29tbW9uIGZpcm13YXJlIGxvYWRlciwgcGVyCj4gPj4JRGFuaWVsIFZldHRlcidzIHJlcXVlc3Qu Cj4gPj4gICAgIEYvdyBjaGVja2VyIGNhbGxiYWNrIGZuIG5vdyByZXR1cm5zIGVycm5vIHJhdGhl ciB0aGFuIGJvb2wuCj4gPj4KPiA+Pklzc3VlOiBWSVotNDg4NAo+ID4+U2lnbmVkLW9mZi1ieTog QWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gPj5TaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRv biA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+ID4+LS0tCj4gPj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMyArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZG1hLmMgICAgICAgICB8ICAgNCArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICB8ICAxMSArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICB8ICAgOCArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggICAgICAgICB8ICAgNCArLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWMuaCAgICAgICAgfCAgNDkgKysrKwo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWNfbG9hZGVyLmMgfCA0NDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+PiAg NyBmaWxlcyBjaGFuZ2VkLCA1MjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiA+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIu Ywo+ID4+Cj4gPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4+aW5kZXggZjFmODBmYy4uNjJhOGM4MyAx MDA2NDQKPiA+Pi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gPj4rKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4+QEAgLTQyLDYgKzQyLDkgQEAgaTkxNS15 ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiA+PiAgIyBnZW5lcmljIGFuY2lsbGlhcnkgbWljcm9j b250cm9sbGVyIHN1cHBvcnQKPiA+PiAgaTkxNS15ICs9IGludGVsX3VjX2xvYWRlci5vCj4gPj4K PiA+PisjIGdlbmVyYWwtcHVycG9zZSBtaWNyb2NvbnRyb2xsZXIgKEd1Qykgc3VwcG9ydAo+ID4+ K2k5MTUteSArPSBpbnRlbF9ndWNfbG9hZGVyLm8KPiA+PisKPiA+PiAgIyBhdXRvZ2VuZXJhdGVk IG51bGwgcmVuZGVyIHN0YXRlCj4gPj4gIGk5MTUteSArPSBpbnRlbF9yZW5kZXJzdGF0ZV9nZW42 Lm8gXAo+ID4+ICAJICBpbnRlbF9yZW5kZXJzdGF0ZV9nZW43Lm8gXAo+ID4+ZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2RtYS5jCj4gPj5pbmRleCBjNTM0OWZhLi43MzBkOTFiIDEwMDY0NAo+ID4+LS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ID4+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kbWEuYwo+ID4+QEAgLTQ2OSw2ICs0NjksNyBAQCBzdGF0aWMgaW50IGk5MTVfbG9h ZF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+Pgo+ID4+ICBjbGVhbnVw X2dlbToKPiA+PiAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+PisJaW50ZWxf Z3VjX3Vjb2RlX2ZpbmkoZGV2KTsKPiA+PiAgCWk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihk ZXYpOwo+ID4+ICAJaTkxNV9nZW1fY29udGV4dF9maW5pKGRldik7Cj4gPj4gIAltdXRleF91bmxv Y2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+PkBAIC04NjYsNiArODY3LDggQEAgaW50IGk5MTVf ZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykK PiA+Pgo+ID4+ICAJaW50ZWxfdW5jb3JlX2luaXQoZGV2KTsKPiA+Pgo+ID4+KwlpbnRlbF9ndWNf dWNvZGVfaW5pdChkZXYpOwo+ID4+Kwo+ID4+ICAJLyogTG9hZCBDU1IgRmlybXdhcmUgZm9yIFNL TCAqLwo+ID4+ICAJaW50ZWxfY3NyX3Vjb2RlX2luaXQoZGV2KTsKPiA+Pgo+ID4+QEAgLTExMTcs NiArMTEyMCw3IEBAIGludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiA+PiAgCWZsdXNoX3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOwo+ID4+Cj4gPj4gIAltdXRl eF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPj4rCWludGVsX2d1Y191Y29kZV9maW5pKGRl dik7Cj4gPj4gIAlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKPiA+PiAgCWk5MTVf Z2VtX2NvbnRleHRfZmluaShkZXYpOwo+ID4+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Cj4gPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+PmluZGV4IDk2MThmNTcuLmE3Y2Nh YzUgMTAwNjQ0Cj4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPj4r KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPj5AQCAtNTAsNiArNTAsNyBA QAo+ID4+ICAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KPiA+PiAgI2luY2x1ZGUgPGxp bnV4L2tyZWYuaD4KPiA+PiAgI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgo+ID4+KyNpbmNsdWRl ICJpbnRlbF9ndWMuaCIKPiA+Pgo+ID4+ICAvKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246Cj4gPj4g ICAqLwo+ID4+QEAgLTE2ODcsNiArMTY4OCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK PiA+Pgo+ID4+ICAJc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgdmdwdTsKPiA+Pgo+ID4+KwlzdHJ1 Y3QgaW50ZWxfZ3VjIGd1YzsKPiA+PisKPiA+PiAgCXN0cnVjdCBpbnRlbF9jc3IgY3NyOwo+ID4+ Cj4gPj4gIAkvKiBEaXNwbGF5IENTUi1yZWxhdGVkIHByb3RlY3Rpb24gKi8KPiA+PkBAIC0xOTMx LDYgKzE5MzQsMTEgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3RvX2k5MTUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4+ICAJcmV0dXJuIHRvX2k5MTUoZGV2X2dl dF9kcnZkYXRhKGRldikpOwo+ID4+ICB9Cj4gPj4KPiA+PitzdGF0aWMgaW5saW5lIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpndWNfdG9faTkxNShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gPj4r ewo+ID4+KwlyZXR1cm4gY29udGFpbmVyX29mKGd1Yywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUs IGd1Yyk7Cj4gPj4rfQo+ID4+Kwo+ID4+ICAvKiBJdGVyYXRlIG92ZXIgaW5pdGlhbGlzZWQgcmlu Z3MgKi8KPiA+PiAgI2RlZmluZSBmb3JfZWFjaF9yaW5nKHJpbmdfXywgZGV2X3ByaXZfXywgaV9f KSBcCj4gPj4gIAlmb3IgKChpX18pID0gMDsgKGlfXykgPCBJOTE1X05VTV9SSU5HUzsgKGlfXykr KykgXAo+ID4+QEAgLTI1MzksNiArMjU0Nyw5IEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUg ewo+ID4+Cj4gPj4gICNkZWZpbmUgSEFTX0NTUihkZXYpCShJU19TS1lMQUtFKGRldikpCj4gPj4K PiA+PisjZGVmaW5lIEhBU19HVUNfVUNPREUoZGV2KQkoSVNfR0VOOShkZXYpKQo+ID4+KyNkZWZp bmUgSEFTX0dVQ19TQ0hFRChkZXYpCShJU19HRU45KGRldikpCj4gPj4rCj4gPj4gICNkZWZpbmUg SU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKPiA+PiAgI2RlZmluZSBJTlRFTF9QQ0hf SUJYX0RFVklDRV9JRF9UWVBFCQkweDNiMDAKPiA+PiAgI2RlZmluZSBJTlRFTF9QQ0hfQ1BUX0RF VklDRV9JRF9UWVBFCQkweDFjMDAKPiA+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4+aW5kZXgg YWE4ZjRjMy4uODBkNzg5MCAxMDA2NDQKPiA+Pi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiA+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiA+PkBA IC01MDc2LDYgKzUwNzYsMTQgQEAgaTkxNV9nZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ID4+ICAJCQlnb3RvIG91dDsKPiA+PiAgCX0KPiA+Pgo+ID4+KwkvKgo+ID4+KwkgKiBX ZSBjYW4ndCBlbmFibGUgY29udGV4dHMgdW50aWwgYWxsIGZpcm13YXJlIGlzIGxvYWRlZDsgaWYg dGhpcwo+ID4+KwkgKiBmYWlscywgZGlzYWJsZSBHdUMgc3VibWlzc2lvbnMgYW5kIGZhbGwgYmFj ayB0byBleGVjbGlzdCBtb2RlCj4gPj4rCSAqLwo+ID4+KwlyZXQgPSBpbnRlbF9ndWNfdWNvZGVf bG9hZChkZXYpOwo+ID4+KwlpZiAocmV0KQo+ID4+KwkJaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Np b24gPSBmYWxzZTsKPiA+Cj4gPkkgd2FudCBhbiAtRUlPIG9yIHNpbWlsYXIgaGVyZSBzaW5jZSBy dW50aW1lIGZhbGxiYWNrcyB0byBvdGhlciBtb2Rlcwo+ID5yZWFsbHkgYXJlbid0IGdyZWF0IGZy b20gYSBtYWludGFpbmFuY2UgcGVyc3BlY3RpdmUsIHNlZSBteSBjb21tZW50cyBvbgo+ID50aGUg aXJxIHJvdXRpbmcgY29kZS4KPiA+Cj4gPlllcyB3ZSBjYW4gbWFrZSB0aGlzIHdvcmssIGJ1dCBn aXZpbiBvdXIgc3RlbGxhciB0cmFjayByZWNvcmQgd2l0aCBrZWVwaW5nCj4gPmRpc2FibGVkIGZl YXR1cmVzIHdvcmtpbmcgaXQgd29uJ3Qgd29yayBmb3IgbG9uZy4gQW5kIGl0IHdpbGwgaW1wYWN0 IHVzCj4gPndpdGggYWRkaXRpb25hbCBjb25zdHJhaW50cyB1bnRpbCB3ZSBnaXZlIHVwIGFuZCBy aXAgaXQgb3V0IGFnYWluLiBOb3QKPiA+d29ydGggaXQgaW1vIC0gaWYgd2UgZGVjaWRlIHRvIHVz ZSB0aGUgZ3VjIG9uIGEgZ2l2ZW4gcGxhdGZvcm0gd2Ugc2hvdWxkCj4gPmltbyByZXF1aXJlIGl0 IGFuZCBzdGljayB0byB0aGF0IGRlY2lzaW9uIGZvciBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZQo+ ID5kcml2ZXIgaXMgbG9hZGVkLiBEZXZlbG9wZXJzIGNhbiBzdGlsbCBjaGFuZ2UgdGhlIG9wdGlv biB3aGVuIHJlbG9hZGluZyB0aGUKPiA+ZHJpdmVyLCB1c2VycyB3b24ndCBoYXZlIGEgY2hhbmNl IHRvIGNhdXNlIHRyb3VibGUuCj4gPi1EYW5pZWwKPiAKPiBBZ2FpbiwgdGhpcyBpc24ndCByZWFs bHkgInJ1bnRpbWUiIC0tIHdlJ3JlIHN0aWxsIGluIHRoZSBkcml2ZXIgbG9hZGluZwo+IHN0YWdl IGhlcmUuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSB2YXJpb3VzICJzYW5pdGl6ZSIgZnVuY3Rp b25zIHdoZXJlIHdlCj4gY3Jvc3MtY2hlY2sgd2hhdCBvcHRpb25zIGhhdmUgYmVlbiBzZXQgYW5k IGRlY2lkZSB3aGljaCB0byBvdmVycmlkZSwgZXhjZXB0Cj4gdGhhdCBoZXJlIHdlIGNhbid0IGRl dGVybWluZSB3aGV0aGVyIHdlJ3JlIGdvaW5nIHRvIHJlc3BlY3QgdGhlIGRlZmF1bHQgb3IKPiB1 c2VyLXNwZWNpZmllZCByZXF1ZXN0IGZvciBHdUMgc3VibWlzc2lvbiBtb2RlIHVudGlsIHdlIGtu b3cgd2hldGhlciB3ZSBoYXZlCj4gdmFsaWQgZmlybXdhcmUgZm9yIHRoZSBHdUMuCgpUaGUgcHJv YmxlbSBpcyB0aGF0IGEgcGlsZSBvZiBjb2RlIGhhcyBydW4gYWxyZWFkeSAoc3BlY2lmaWNhbGx5 IGlycQpzZXR1cCkuIE5vdCBhIHByb2JsZW0gZnJvbSB0aGUgY29ycmVjdG5lc3MgcG92IGl0IGNh biBhbGwgYmUgbWFkZSB0byB3b3JrLApidXQgZnJvbSBhIGxvbmdlci10ZXJtIG1haW50YWluYW5j ZSBwb3YuIEl0J2xsIGp1c3QgYml0cm90IHVudGlsIGl0J3MKcmlwcGVkIG91dC4gQnV0IHVudGls IHRoYXQgaGFwcGVucyBldmVyeW9uZSBoYXMgdG8ga2VlcCBpdCBpbiBtaW5kIGFuZAp0cnkgbm90 IHRvIGJyZWFrIHRoaXMgZmFsbGJhY2suIFRvbyBtdWNoIHRyb3VibGUgaW1vIGZvciBubyByZWFs IGJlbmVmaXQuCgo+IEF0IHRoaXMgcG9pbnQsIHdlIGhhdmVuJ3Qgc3VibWl0dGVkIGFueSBiYXRj aGVzLCBzbyB0aGUgbWFpbiBwb2ludCBvZiB1c2Ugb2YKPiB0aGlzIGZsYWcgLS0gaW4gdGhlIHN1 Ym1pc3Npb24gcGF0aCwgdG8gc3dpdGNoIGJldHdlZW4gZXhlY2xpc3QgYW5kIEd1Qwo+IG1vZGVz IC0tIGhhcyBuZXZlciB5ZXQgYmVlbiBleGVjdXRlZC4gU28gdGhlcmUgc2hvdWxkIGJlIG5vIHBy b2JsZW0gd2l0aAo+IGNoYW5naW5nIHRoZSB2YWx1ZSBiZWZvcmUgaXQncyBmaXJzdCB1c2VkLgo+ IAo+IEFuZCB0aGlzIGlzIGEgb25lLXdheSBzd2l0Y2g7IHlvdSAob3IgdGhlIGRlZmF1bHQgY29u ZmlnKSBhc2tlZCBmb3IgR3VDCj4gc3VibWlzc2lvbiwgYnV0IHdlIGNhbid0IHN1cHBvcnQgaXQg c28gd2UgZGlzYWJsZSB0aGUgb3B0aW9uLiBUaGVyZSdzIG5vIHdheQo+IHRvIHN3aXRjaCBpdCBi YWNrIG9uIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBkcml2ZXIuIFNvIHRoaXMgL2lzLyB0aGUgcG9p bnQgYXQKPiB3aGljaCB3ZSBkZWNpZGUgdG8gdXNlIHRoZSBHdUMgb24gYSBnaXZlbiBwbGF0Zm9y bSBhbmQgdGhlbiBzdGljayB0byB0aGF0Cj4gZGVjaXNpb24gZm9yIGF0IGxlYXN0IGFzIGxvbmcg YXMgdGhlIGRyaXZlciBpcyBsb2FkZWQuCj4gCj4gV2UgaGF2ZSB0byBzdXBwb3J0IGV4ZWNsaXN0 IG1vZGUgZm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUgYW55d2F5LCBzbyB1c2luZwo+IGl0IG9u IGEgbWFjaGluZSB3aGljaCAod2UgdGhpbmspIG91Z2h0IHRvIGJlIEd1Qy1jYXBhYmxlIGRvZXNu J3QgYWRkIC9hbnkvCj4gZXh0cmEgbWFpbnRlbmFuY2Ugb3ZlcmhlYWQgYXQgYWxsLgo+IAo+IFdo eSBicmVhayB0aGUgdXNlcidzIG1hY2hpbmUgdW5uZWNlc3NhcmlseT8gV2l0aCByZWFsICJlbmQt dXNlcnMiLAo+IGVzcGVjaWFsbHkgdGhvc2Ugd2hvIGhhdmUgbmV2ZXIgdXNlZCBMaW51eCBiZWZv cmUsIHlvdSBvbmx5IGdldCBvbmUgY2hhbmNlLgo+IFNvbWV0aW1lcyBJJ3ZlIGluc3RhbGxlZCBM aW51eCBvbiBhIChXaW5kb3dzLXVzaW5nKSBmcmllbmQncyBtYWNoaW5lLCBhbmQgaXQKPiBoYXNu J3Qgd29ya2VkIGZpcnN0IHRpbWUuIFRoZW4gSSBzd2l0Y2ggdG8gYW5vdGhlciBWVCwgdHlwZSBz b21lIG1hZ2ljCj4gaW5jYW50YXRpb25zLCBhbmQgMTAgbWludXRlcyBsYXRlciB3ZSBoYXZlIGEg dXNhYmxlIGxvZ2luIHNjcmVlbi4gV2lsbCB0aGV5Cj4gYWRvcHQgTGludXg/IFVubGlrZWx5IDoo IE5vIG1hdHRlciBob3cgZ29vZCBpdCBsb29rcyB0aGVyZWFmdGVyLCBpZiB0aGUKPiBtYWNoaW5l J3MgaGFyZHdhcmUgZG9lc24ndCB3b3JrIHdpdGggdGhlIGRpc3RybyBzdHJhaWdodCBvdXQgb2Yg dGhlIGJveCwKPiB0aGV5J3JlIGp1c3Qgbm90IGdvaW5nIHRvIGJlbGlldmUgaXQncyBzb21ldGhp bmcgdGhleSBjYW4gdXNlLiBTbyBpdCdzIHZlcnkKPiBpbXBvcnRhbnQgdGhhdCBldmVyeXRoaW5n IGVzc2VudGlhbCB0byB0aGUgZmlyc3QtdGltZSBleHBlcmllbmNlIHdvcmtzIGV2ZW4KPiB3aGVu IG1pc2NvbmZpZ3VyZWQgLS0gYW5kIG5vdGhpbmcgaXMgbW9yZSBlc3NlbnRpYWwgdGhhbiB0aGUg ZGlzcGxheSBkcml2ZXIKPiAobmV0d29ya2luZyBhbmQgd2ktZmkgYXJlIHRoZSBuZXh0IHRoaW5n cyB0aGF0IHdpbGwgcHV0IHRoZSB1c2VyIG9mZiBpZiB0aGV5Cj4gZG9uJ3Qgd29yayAtLSBhbmQg dGhleSdyZSBhbHNvIGRyaXZlcnMgdGhhdCBjb21tb25seSByZWx5IG9uIGZpcm13YXJlCj4gYmxv YnMpLgoKVGhvc2UgZW5kLXVzZXJzIGluc3RhbGwgZmVkb3JhIG9yIHVidW50dSB3aGljaCBnZXQg dGhlIGZpcm13YXJlIGJsb2IKbG9hZGluZyBqdXN0IHJpZ2h0LiBOb25lIG9mIHRoZSBiaWcgb3Ro ZXIgZHJpdmVycyBib3RoZXIgd2l0aCBmYWxsaW5nIGJhY2sKdG8gc29tZSBvdGhlciBtb2RlIGlm IHRoZSBmaXJtd2FyZSB0aGV5IG5lZWQgaXNuJ3QgdGhlcmU6IHJhZGVvbiBqdXN0Cm91dHJpZ2h0 IGJhaWxzIG91dCwgbm91dmVhdSBqdXN0IGRpc2FibGVzIGFjY2VsIG9yIHJ1bnRpbWUgcG0gaWYg dGhlCmZpcm13YXJlIGJsb2IgaXMgb25seSBuZWVkZWQgZm9yIHRoZXNlIGZlYXR1cmVzLgoKVGhl IG9ubHkgdXNlciBJIGNhbiBzZWUgYXJlIHBlb3BsZSBhbGxlcmdpYyB0byBmaXJtd2FyZSBibG9i cyAodGhleSBjYW4KdXNlIGV4ZWNsaXN0IGFuZCB3ZSBkb24ndCBjYXJlKSBvciBkZXZlbG9wZXJz IChjYW4gY2hhbmdlIG1vZCBvcHRpb25zCnRvbykuIE1pc2NvbmZpZ3VyZWQgc3lzdGVtcyBmcm9t IG5ld2JpZXMgaXMgbm90IGEgdGFyZ2V0IG1hcmtldCwgbmVpdGhlcgpmb3IgaW50ZWwgbm9yIGZv ciB1cHN0cmVhbSAoeWVzIHdlIFdPTlRGSVggYnVncyBvZiBwZW9wbGUgd2l0aCBmdW5reQpjb25m aWdzIGlmIHRoZSBwcm9ibGVtIGRvZXNuJ3QgZXhpc3Qgb24gYSBwcm9wZXJseSBjb25maWd1cmVk IGRpc3RybykuCi1EYW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==