From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH 05/15] drm/i915: GuC-specific firmware loader Date: Thu, 18 Jun 2015 19:54:42 +0100 Message-ID: <558313F2.50507@intel.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-6-git-send-email-david.s.gordon@intel.com> <20150615203057.GG28462@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 3A72C6E1C1 for ; Thu, 18 Jun 2015 11:54:45 -0700 (PDT) In-Reply-To: <20150615203057.GG28462@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTUvMDYvMTUgMjE6MzAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBNb24sIEp1biAxNSwg MjAxNSBhdCAwNzozNjoyM1BNICswMTAwLCBEYXZlIEdvcmRvbiB3cm90ZToKPj4gKwkvKiBXZSBj YW4ndCBlbmFibGUgY29udGV4dHMgdW50aWwgYWxsIGZpcm13YXJlIGlzIGxvYWRlZCAqLwo+PiAr CXJldCA9IGludGVsX2d1Y191Y29kZV9sb2FkKGRldiwgZmFsc2UpOwo+IAo+IFBhcmRvbi4gSSBr bm93IGNvbnRleHQgaW5pdGlhbGlzYXRpb24gaXMgYnJva2VuLCBidXQgYWRkaW5nIHRvIHRoYXQK PiBicmVha2FnZSBpcyBub3QgcGxlYXNhbnQuCgpTb3JyeSwgYnV0IHRoYXQncyBqdXN0IHRoZSB3 YXkgaXQgd29ya3MuIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgR3VDIGZvcgpiYXRjaCBzdWJtaXNz aW9uLCB0aGVuIHlvdSBjYW5ub3Qgc3VibWl0IGFueSBjb21tYW5kcyB0byBhbnkgZW5naW5lIHZp YQp0aGUgR3VDIGJlZm9yZSBpdHMgZmlybXdhcmUgaXMgbG9hZGVkLCBub3IgY2FuIHlvdSBzdWJt aXQgYW55dGhpbmcgYXQKYWxsIGRpcmVjdGx5IHRvIHRoZSBFTFNQcy4KCkhvd2V2ZXIgaW4gL3Ro aXMvIHBhdGNoIHRoZSAnZmFsc2UnIGFib3ZlIHNob3VsZCBoYXZlIGJlZW4gJ3RydWUnIHRvCmdp dmUgc3luY2hyb25vdXMgbG9hZCBzZW1hbnRpY3M7IGFuZCB0aGVuIGlnbm9yaW5nIHRoZSByZXR1 cm4gaXMKaW50ZW50aW9uYWwsIGJlY2F1c2UgZWl0aGVyIGl0J3Mgd29ya2VkIGFuZCB3ZSdyZSBn b2luZyB0byB1c2UgdGhlIEd1QywKb3IgaXQgaGFzbid0IGFuZCB3ZSdyZSBub3QgKGFuZCBpdCdz IGFscmVhZHkgcHJpbnRlZCBhIG1lc3NhZ2UpLiBUaGVuCnRoZXJlJ3MgYSBsYXRlciBwYXRjaCB0 aGF0IHRyaWVzIHRvIGRlY291cGxlIGVuZ2luZSBNTUlPIHNldHVwIGZyb20KZW5naW5lIHNldHVw IHVzaW5nIGJhdGNoZXMgJiBjb250ZXh0cywgYXQgd2hpY2ggcG9pbnQgd2UgY2FuIG1ha2UgdXNl IG9mCnRoZSByZXR1cm4gY29kZS4KCj4+ICAJcmV0ID0gaTkxNV9nZW1fY29udGV4dF9lbmFibGUo ZGV2X3ByaXYpOwo+PiAgCWlmIChyZXQgJiYgcmV0ICE9IC1FSU8pIHsKPj4gIAkJRFJNX0VSUk9S KCJDb250ZXh0IGVuYWJsZSBmYWlsZWQgJWRcbiIsIHJldCk7Cj4gCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2d1Yy5oCj4+IGluZGV4IDgyMzY3YzkuLjBiNDQyNjUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2d1Yy5oCj4+IEBAIC0xNjYsNCArMTY2LDkgQEAgc3RydWN0IGludGVsX2d1YyB7Cj4+ ICAjZGVmaW5lIEdVQ19XRF9WRUNTX0lFUgkJMHhDNTU4Cj4+ICAjZGVmaW5lIEdVQ19QTV9QMjRD X0lFUgkJMHhDNTVDCj4+ICAKPj4gKy8qIGludGVsX2d1Y19sb2FkZXIuYyAqLwo+PiArZXh0ZXJu IHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4+ICtl eHRlcm4gaW50IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJv b2wgd2FpdCk7Cj4+ICtleHRlcm4gdm9pZCBpbnRlbF9ndWNfdWNvZGVfZmluaShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPj4gKwo+PiAgI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWNfbG9hZGVyLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4u MTZlZWY0Ywo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2d1Y19sb2FkZXIuYwo+PiBAQCAtMCwwICsxLDQxNiBAQAo+PiArLyoKPj4gKyAqIENvcHly aWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK Pj4gKyAqCj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ ICsgKiBTb2Z0d2FyZS4KPj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+PiAr ICogSU4gVEhFIFNPRlRXQVJFLgo+PiArICoKPj4gKyAqIEF1dGhvcnM6Cj4+ICsgKiAgICBWaW5p dCBBemFkIDx2aW5pdC5hemFkQGludGVsLmNvbT4KPj4gKyAqICAgIEJlbiBXaWRhd3NreSA8YmVu QGJ3aWRhd3NrLm5ldD4KPj4gKyAqICAgIERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRl bC5jb20+Cj4+ICsgKiAgICBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KPj4gKyAqLwo+PiAr I2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4g KyNpbmNsdWRlICJpbnRlbF9ndWMuaCIKPj4gKwo+PiArLyoqCj4+ICsgKiBET0M6IEd1Qwo+PiAr ICoKPj4gKyAqIGludGVsX2d1YzoKPj4gKyAqIFRvcCBsZXZlbCBzdHJ1Y3R1cmUgb2YgZ3VjLiBJ dCBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcgYW5kIG1hbmFnZXMgY2xpZW50Cj4+ICsgKiBwb29s IGFuZCBkb29yYmVsbHMuIGludGVsX2d1YyBvd25zIGEgaTkxNV9ndWNfY2xpZW50IHRvIHJlcGxh Y2UgdGhlIGxlZ2FjeQo+PiArICogRXhlY0xpc3Qgc3VibWlzc2lvbi4KPj4gKyAqCj4+ICsgKiBG aXJtd2FyZSB2ZXJzaW9uaW5nOgo+PiArICogVGhlIGZpcm13YXJlIGJ1aWxkIHByb2Nlc3Mgd2ls bCBnZW5lcmF0ZSBhIHZlcnNpb24gaGVhZGVyIGZpbGUgd2l0aCBtYWpvciBhbmQKPj4gKyAqIG1p bm9yIHZlcnNpb24gZGVmaW5lZC4gVGhlIHZlcnNpb25zIGFyZSBidWlsdCBpbnRvIENTUyBoZWFk ZXIgb2YgZmlybXdhcmUuCj4+ICsgKiBpOTE1IGtlcm5lbCBkcml2ZXIgc2V0IHRoZSBtaW5pbWFs IGZpcm13YXJlIHZlcnNpb24gcmVxdWlyZWQgcGVyIHBsYXRmb3JtLgo+PiArICogVGhlIGZpcm13 YXJlIGluc3RhbGxhdGlvbiBwYWNrYWdlIHdpbGwgaW5zdGFsbCAoc3ltYm9saWMgbGluaykgcHJv cGVyIHZlcnNpb24KPj4gKyAqIG9mIGZpcm13YXJlLgo+PiArICoKPj4gKyAqIEd1QyBhZGRyZXNz IHNwYWNlOgo+PiArICogR3VDIGRvZXMgbm90IGFsbG93IGFueSBnZnggR0dUVCBhZGRyZXNzIHRo YXQgZmFsbHMgaW50byByYW5nZSBbMCwgV09QQ01fVE9QKSwKPj4gKyAqIHdoaWNoIGlzIHJlc2Vy dmVkIGZvciBCb290IFJPTSwgU1JBTSBhbmQgV09QQ00uIEN1cnJlbnRseSB0aGlzIHRvcCBhZGRy ZXNzIGlzCj4+ICsgKiA1MTJLLiBJbiBvcmRlciB0byBleGNsdWRlIDAtNTEySyBhZGRyZXNzIHNw YWNlIGZyb20gR0dUVCwgYWxsIGdmeCBvYmplY3RzCj4+ICsgKiB1c2VkIGJ5IEd1QyBpcyBwaW5u ZWQgd2l0aCBQSU5fT0ZGU0VUX0JJQVMgYWxvbmcgd2l0aCBzaXplIG9mIFdPUENNLgo+PiArICoK Pj4gKyAqIEZpcm13YXJlIGxvZzoKPj4gKyAqIEZpcm13YXJlIGxvZyBpcyBlbmFibGVkIGJ5IHNl dHRpbmcgaTkxNS5ndWNfbG9nX2xldmVsIHRvIG5vbi1uZWdhdGl2ZSBsZXZlbC4KPj4gKyAqIExv ZyBkYXRhIGlzIHByaW50ZWQgb3V0IHZpYSByZWFkaW5nIGRlYnVnZnMgaTkxNV9ndWNfbG9nX2R1 bXAuIFJlYWRpbmcgZnJvbQo+PiArICogaTkxNV9ndWNfbG9hZF9zdGF0dXMgd2lsbCBwcmludCBv dXQgZmlybXdhcmUgbG9hZGluZyBzdGF0dXMgYW5kIHNjcmF0Y2gKPj4gKyAqIHJlZ2lzdGVycyB2 YWx1ZS4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBJOTE1X1NLTF9HVUNfVUNPREUg Imk5MTUvc2tsX2d1Y192ZXIzLmJpbiIKPj4gK01PRFVMRV9GSVJNV0FSRShJOTE1X1NLTF9HVUNf VUNPREUpOwo+PiArCj4+ICtzdGF0aWMgdTMyIGdldF9ndHR5cGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPj4gK3sKPj4gKwkvKiBYWFg6IEdUIHR5cGUgYmFzZWQgb24gUENJIGRldmljZSBJRD8g ZmllbGQgc2VlbXMgdW51c2VkIGJ5IGZ3ICovCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB1MzIgZ2V0X2NvcmVfZmFtaWx5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gCj4g Rm9yIG5ldyBjb2RlIHdlIHJlYWxseSBzaG91bGQgYmUgaW4gdGhlIGhhYml0IG9mIHBhc3Npbmcg YXJvdW5kIHRoZQo+IHJpZ2h0IHBvaW50ZXIsIG5vdCBkZXYuCgpHb29kIGlkZWEgOikgRXNwZWNp YWxseSBhcyB0aGUgY2FsbGVyIGFjdHVhbGx5IHBhc3NlcyBkZXZfcHJpdi0+ZGV2ISEKCj4+ICt7 Cj4+ICsJc3dpdGNoIChJTlRFTF9JTkZPKGRldiktPmdlbikgewo+PiArCWNhc2UgODoKPj4gKwkJ cmV0dXJuIEdGWENPUkVfRkFNSUxZX0dFTjg7Cj4+ICsJY2FzZSA5Ogo+PiArCQlyZXR1cm4gR0ZY Q09SRV9GQU1JTFlfR0VOOTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlEUk1fRVJST1IoIkdVQzogdW5r bm93biBnZW4gZm9yIHNjaGVkdWxlciBpbml0XG4iKTsKPj4gKwkJcmV0dXJuIEdGWENPUkVfRkFN SUxZX0ZPUkNFX1VMT05HOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgc2V0X2d1 Y19pbml0X3BhcmFtcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICt7Cj4+ ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4+ICsJdTMyIHBhcmFt c1tHVUNfQ1RMX01BWF9EV09SRFNdOwo+PiArCWludCBpOwo+PiArCj4+ICsJbWVtc2V0KCZwYXJh bXMsIDAsIHNpemVvZihwYXJhbXMpKTsKPj4gKwo+PiArCXBhcmFtc1tHVUNfQ1RMX0RFVklDRV9J TkZPXSB8PQo+PiArCQkoZ2V0X2d0dHlwZShkZXZfcHJpdi0+ZGV2KSA8PCBHVUNfQ1RMX0dUVFlQ RV9TSElGVCkgfAo+PiArCQkoZ2V0X2NvcmVfZmFtaWx5KGRldl9wcml2LT5kZXYpIDw8IEdVQ19D VExfQ09SRUZBTUlMWV9TSElGVCk7Cj4+ICsKPj4gKwkvKiBHdUMgQVJBVCBpbmNyZW1lbnQgaXMg MTAgbnMuIEd1QyBkZWZhdWx0IHNjaGVkdWxlciBxdWFudHVtIGlzIG9uZQo+PiArCSAqIHNlY29u ZC4gVGhpcyBBUkFSIGlzIGNhbGN1bGF0ZWQgYnk6Cj4+ICsJICogU2NoZWR1bGVyLVF1YW50dW0t aW4tbnMgLyBBUkFULWluY3JlbWVudC1pbi1ucyA9IDEwMDAwMDAwMDAgLyAxMAo+PiArCSAqLwo+ PiArCXBhcmFtc1tHVUNfQ1RMX0FSQVRfSElHSF0gPSAwOwo+PiArCXBhcmFtc1tHVUNfQ1RMX0FS QVRfTE9XXSA9IDEwMDAwMDAwMDsKPj4gKwo+PiArCXBhcmFtc1tHVUNfQ1RMX1dBXSB8PSBHVUNf Q1RMX1dBX1VLX0JZX0RSSVZFUjsKPj4gKwo+PiArCXBhcmFtc1tHVUNfQ1RMX0ZFQVRVUkVdIHw9 IEdVQ19DVExfRElTQUJMRV9TQ0hFRFVMRVIgfAo+PiArCQkJR1VDX0NUTF9WQ1MyX0VOQUJMRUQ7 Cj4+ICsKPj4gKwlpZiAoaTkxNS5ndWNfbG9nX2xldmVsID49IDApIHsKPj4gKwkJcGFyYW1zW0dV Q19DVExfTE9HX1BBUkFNU10gPSBndWMtPmxvZ19mbGFnczsKPj4gKwkJcGFyYW1zW0dVQ19DVExf REVCVUddID0KPj4gKwkJCWk5MTUuZ3VjX2xvZ19sZXZlbCA8PCBHVUNfTE9HX1ZFUkJPU0lUWV9T SElGVDsKPj4gKwl9Cj4+ICsKPj4gKwlJOTE1X1dSSVRFKFNPRlRfU0NSQVRDSCgwKSwgMCk7Cj4+ ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgR1VDX0NUTF9NQVhfRFdPUkRTOyBpKyspCj4+ICsJCUk5 MTVfV1JJVEUoU09GVF9TQ1JBVENIKDEgKyBpKSwgcGFyYW1zW2ldKTsKPj4gK30KPj4gKwo+PiAr LyogUmVhZCBHdUMgc3RhdHVzIHJlZ2lzdGVyIChHVUNfU1RBVFVTKQo+PiArICogUmV0dXJuIHRy dWUgaWYgZ2V0IGEgc3VjY2VzcyBjb2RlIGZyb20gbm9ybWFsIGJvb3Qgb3IgUkM2IGJvb3QKPj4g KyAqLwo+PiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ3VjX2dldF9zdGF0dXMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiArCQkJCQl1MzIgKnN0YXR1cykKPj4gK3sKPj4g Kwkqc3RhdHVzID0gSTkxNV9SRUFEKEdVQ19TVEFUVVMpOwo+PiArCXJldHVybiAoKCgqc3RhdHVz KSAmIEdTX1VLRVJORUxfTUFTSykgPT0gR1NfVUtFUk5FTF9SRUFEWSB8fAo+PiArCQkoKCpzdGF0 dXMpICYgR1NfVUtFUk5FTF9NQVNLKSA9PSBHU19VS0VSTkVMX0xBUElDX0RPTkUpOwo+IAo+IFdl aXJkIGZ1bmN0aW9uLiBEb2VzIHR3byB0aGluZ3MsIG9ubHkgb25lIG9mIHRob3NlIGlzIGdldF9z dGF0dXMuIE1heWJlCj4geW91IHdvdWxkIGxpa2UgdG8gc3BsaXQgdGhpcyB1cCBiZXR0ZXIgYW5k IHVzZSBhIHN3aXRjaCB3aGVuIHlvdSBtZWFuIGEKPiBzd2l0Y2guIE9yIHJlbmFtZSBpdCB0byBy ZWZsZWN0IGl0J3MgdXNlIG9ubHkgYXMgYSBjb25kaXRpb24uCgpUaGUgd2VpcmRuZXNzIGlzIGRv d24gdG8gdGhlIGZhY3QgdGhhdCBpdCdzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUKTUFD Uk8gIndhaXRfZm9yX2F0b21pYygpIi4gVGhlICJjYWxsZXIiIG9mIHdhaXRfZm9yX2F0b21pYygp IGFsc28gd2FudHMKdG8gc2VlIHRoZSBzdGF0dXMgdmFsdWUgdGhhdCBjYXVzZWQgdGhlIE1BQ1JP IHRvIGV4aXQgc28gaXQgaGFzIHRvIHNhdmUKdGhhdCBpbmRpcmVjdGx5IHZpYSB0aGUgcG9pbnRl ci4gV2UgY2FuJ3QgYnJlYWsgdGhlICJzdGF0dXMgPSBSRUFEKCkiCmFuZCAiY2xhc3NpZnkgdGhl IHJlc3VsdCIgc3RhZ2VzIGludG8gdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucyBiZWNhdXNlIHdlCmhh dmUgdG8gcGFzcyBhIHNpbmdsZSBleHByZXNzaW9uIHRvIHRoZSBNQUNSTzsgYm90aCBoYXZlIHRv IGJlIGluc2lkZQp0aGUgZ2VuZXJhdGVkIGxvb3AuCgpTbyBpdCBtYXkgYmUgd2VpcmQsIGJ1dCBh dCBsZWFzdCBpdCdzIHNpbXBsZTsgYW5kIHRoZSBjb21tZW50IGFib3ZlIGRvZXMKdGVsbCB5b3Ug dGhhdCBpdCBkb2VzIHR3byB0aGluZ3MuIFdlIGNvdWxkIGNhbGwgaXQKaTkxNV9yZWFkX2d1Y19z dGF0dXNfYW5kX3Rlc3Rfd2hldGhlcl9yZWFkeSgpIGlmIHlvdSBsaWtlLCBidXQgSSB0aGluawp0 aGF0J2xsIG1ha2UgdGhlIGxpbmUgd2hlcmUgaXQncyB1c2VkIG1vcmUgdGhhbiA4MCBjaGFyYWN0 ZXJzIDstKApPdGhlciAoc2hvcnRlcikgc3VnZ2VzdGlvbnMgaGFwcGlseSBhY2NlcHRlZC4KCk1h Y3JvcyB0aGF0IHJlcGVhdGVkbHkgZXZhbHVhdGUgdGhlIHRleHQgb2YgdGhlaXIgYXJndW1lbnRz IGFyZSB1Z2x5IDooCgo+PiArfQo+PiArCj4+ICsvKiBUcmFuc2ZlcnMgdGhlIGZpcm13YXJlIGlt YWdlIHRvIFJBTSBmb3IgZXhlY3V0aW9uIGJ5IHRoZSBtaWNyb2NvbnRyb2xsZXIuCj4+ICsgKgo+ PiArICogR3VDIEZpcm13YXJlIGxheW91dDoKPj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKyAgLS0tLQo+PiArICogfCAgICAgICAgICBDU1MgaGVhZGVyICAgICAgICAgICB8 ICAxMjhCCj4+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KPj4g KyAqIHwgICAgICAgICAgICAgdUNvZGUgICAgICAgICAgICAgfAo+PiArICogKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4+ICsgKiB8ICAgICAgICAgUlNBIHNpZ25hdHVy ZSAgICAgICAgIHwgIDI1NkIKPj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KyAgLS0tLQo+PiArICogfCAgICAgICAgIFJTQSBwdWJsaWMgS2V5ICAgICAgICB8ICAyNTZCCj4+ ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KPj4gKyAqIHwgICAg ICAgUHVibGljIGtleSBtb2R1bHVzICAgICAgfCAgICA0Qgo+PiArICogKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4+ICsgKgo+PiArICogQXJjaGl0ZWN0dXJhbGx5LCB0 aGUgRE1BIGVuZ2luZSBpcyBiaWRpcmVjdGlvbmFsLCBhbmQgaW4gY2FuIHBvdGVudGlhbGx5Cj4+ ICsgKiBldmVuIHRyYW5zZmVyIGJldHdlZW4gR1RUIGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFs aXR5IGlzIGxlZnQgb3V0IG9mIHRoZQo+PiArICogQVBJIGZvciBub3cgYXMgdGhlcmUgaXMgbm8g bmVlZCBmb3IgaXQuCj4+ICsgKgo+PiArICogQmUgbm90ZSB0aGF0IEd1QyBuZWVkIHRoZSBDU1Mg aGVhZGVyIHBsdXMgdUtlcm5lbCBjb2RlIHRvIGJlIGNvcGllZCBhcyBvbmUKPj4gKyAqIGNodW5r IG9mIGRhdGEuIFJTQSBzaWcgZGF0YSBpcyBsb2FkZWQgdmlhIE1NSU8uCj4+ICsgKi8KPj4gK3N0 YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPj4gK3sKPj4gKwlzdHJ1Y3QgaW50ZWxfdWNfZncgKmd1Y19mdyA9ICZkZXZfcHJpdi0+ Z3VjLmd1Y19mdzsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZndfb2JqID0gZ3Vj X2Z3LT51Y19md19vYmo7Cj4+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4+ICsJc3RydWN0IHNn X3RhYmxlICpzZyA9IGZ3X29iai0+cGFnZXM7Cj4+ICsJdTMyIHN0YXR1cywgdWNvZGVfc2l6ZSwg cnNhW1VPU19SU0FfU0lHX1NJWkUgLyBzaXplb2YodTMyKV07Cj4+ICsJaW50IGksIHJldCA9IDA7 Cj4+ICsKPj4gKwkvKiB1Q29kZSBzaXplLCBhbHNvIGlzIHdoZXJlIFJTQSBzaWduYXR1cmUgc3Rh cnRzICovCj4+ICsJb2Zmc2V0ID0gdWNvZGVfc2l6ZSA9IGd1Y19mdy0+dWNfZndfc2l6ZSAtIFVP U19DU1NfU0lHTklOR19TSVpFOwo+PiArCj4+ICsJLyogQ29weSBSU0Egc2lnbmF0dXJlIGZyb20g dGhlIGZ3IGltYWdlIHRvIEhXIGZvciB2ZXJpZmljYXRpb24gKi8KPj4gKwlzZ19wY29weV90b19i dWZmZXIoc2ctPnNnbCwgc2ctPm5lbnRzLCByc2EsIFVPU19SU0FfU0lHX1NJWkUsIG9mZnNldCk7 Cj4+ICsJZm9yIChpID0gMDsgaSA8IFVPU19SU0FfU0lHX1NJWkUgLyBzaXplb2YodTMyKTsgaSsr KQo+PiArCQlJOTE1X1dSSVRFKFVPU19SU0FfU0NSQVRDSF8wICsgaSAqIHNpemVvZih1MzIpLCBy c2FbaV0pOwo+PiArCj4+ICsJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5ldyBi bG9iICovCj4+ICsJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGZ3X29iaik7Cj4g Cj4gV2h5IHdvdWxkIGl0IGV2ZW4gaGF2ZSBhIEdHVFQgdm1hPyBUaGVyZSdzIG5vIHByZWNvbmRp dGlvbiBoZXJlIHRvCj4gYXNzZXJ0IHRoYXQgaXQgc2hvdWxkLgoKVGhlIChvbmx5KSBjYWxsZXIg YWxyZWFkeSBkaWQ6CgogICAgICAgIHJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihndWNfZnct PnVjX2Z3X29iaiwgMCwgMCk7CgphbmQgYWxzbyBkZWFscyB3aXRoIHVucGlubmluZyBpdCBhZnRl ciB1c2UuCgo+PiArCUk5MTVfV1JJVEUoRE1BX0FERFJfMF9MT1csIGxvd2VyXzMyX2JpdHMob2Zm c2V0KSk7Cj4+ICsJSTkxNV9XUklURShETUFfQUREUl8wX0hJR0gsIHVwcGVyXzMyX2JpdHMob2Zm c2V0KSAmIDB4RkZGRik7Cj4+ICsKPj4gKwkvKiBTZXQgdGhlIGRlc3RpbmF0aW9uLiBDdXJyZW50 IHVDb2RlIGV4cGVjdHMgYW4gOGsgc3RhY2sgc3RhcnRpbmcgZnJvbQo+PiArCSAqIG9mZnNldCAw LiAqLwo+PiArCUk5MTVfV1JJVEUoRE1BX0FERFJfMV9MT1csIDB4MjAwMCk7Cj4+ICsKPj4gKwkv KiBYWFg6IFRoZSBpbWFnZSBpcyBhdXRvbWF0aWNhbGx5IHRyYW5zZmVyZWQgdG8gU1JBTSBhZnRl ciB0aGUgUlNBCj4+ICsJICogdmVyaWZpY2F0aW9uLiBUaGlzIGlzIHdoeSB0aGUgYWRkcmVzcyBz cGFjZSBpcyBjaG9zZW4gYXMgc3VjaC4gKi8KPj4gKwlJOTE1X1dSSVRFKERNQV9BRERSXzFfSElH SCwgRE1BX0FERFJFU1NfU1BBQ0VfV09QQ00pOwo+PiArCj4+ICsJSTkxNV9XUklURShETUFfQ09Q WV9TSVpFLCB1Y29kZV9zaXplKTsKPj4gKwo+PiArCS8qIEZpbmFsbHkgc3RhcnQgdGhlIERNQSAq Lwo+PiArCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8 IFNUQVJUX0RNQSkpOwo+PiArCj4gCj4gSnVzdCBhc3N1bWluZyB0aGF0IHRoZSB3cml0ZXMgbGFu ZCBhbmQgaW4gdGhlIG9yZGVyIHlvdSBleHBlY3Q/CgpZZXMuIElmIHRoZXkgZG9uJ3QgdGhlbiB0 aGUgbWFwcGluZyBvZiB0aGUgTU1JTyByZWdpc3RlcnMgaXMgc2V0IHVwCndyb25nLiBObyBvbmUg c2hvdWxkIGV2ZXIgbWFwIGgvdyByZWdpc3RlcnMgYXMgd3JpdGViYWNrIG9yCndyaXRlLWNvbWJp bmluZzsgb3IgaW4gZmFjdCBhbnl0aGluZyBvdGhlciB0aGFuIHVuY2FjaGVkIGFuZCBzdHJvbmds eQpvcmRlcmVkIHcuci50LiBlYWNoIG90aGVyIGZvciBib3RoIHJlYWRzIGFuZCB3cml0ZXMuCgpT b21ldGltZXMgd2UgbmVlZCBhIFBPU1RJTkdfUkVBRCgpIHRvIGVuc3VyZSB0aGF0IGEgV1JJVEUg aGFzIHJlYWNoZWQKdGhlIGgvdyBiZWZvcmUgdG91Y2hpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4g YSBkZXZpY2UgcmVnaXN0ZXIgLS0gcy93CnN0YXRlIG9yIHNoYXJlZCBtZW1vcnkgLS0gYnV0IG5v dCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHdyaXRlcyB0bwpyZWdpc3RlcnMgb2YgdGhlIHNhbWUgZGV2 aWNlLgoKVGhlIG5leHQgb3BlcmF0aW9uIGlzIGdvaW5nIHRvIGJlIGEgUkVBRCAoaW5zaWRlIGk5 MTVfZ3VjX2dldF9zdGF0dXMoKQphYm92ZSwgc28gdGhhdCB3aWxsIGZsdXNoIChpbiBvcmRlcikg YW55IG9mIHRoZSBhYm92ZSB3cml0ZXMgdGhhdApoYXZlbid0IGFjdHVhbGx5IHJlYWNoZWQgdGhl IGgvdyB5ZXQgLi4uCgo+PiArCS8qCj4+ICsJICogU3Bpbi13YWl0IGZvciB0aGUgRE1BIHRvIGNv bXBsZXRlICYgdGhlIEd1QyB0byBzdGFydCB1cC4KPj4gKwkgKiBOQjogRG9jcyByZWNvbW1lbmQg bm90IHVzaW5nIHRoZSBpbnRlcnJ1cHQgZm9yIGNvbXBsZXRpb24uCj4+ICsJICogRklYTUU6IHdo YXQncyBhIHZhbGlkIHRpbWVvdXQ/Cj4+ICsJICovCj4+ICsJcmV0ID0gd2FpdF9mb3JfYXRvbWlj KGk5MTVfZ3VjX2dldF9zdGF0dXMoZGV2X3ByaXYsICZzdGF0dXMpLCAxMCk7Cj4gCj4gRklYTUUs IGVycm9yIGhhbmRsaW5nIGlzIHRvbyBoYXJkLgoKSSBnb3QgYSBuZXcgdGltZW91dCB2YWx1ZSBm cm9tIHRoZSBNaW51dGVJQSB0ZWFtLCBzbyBJJ2xsIHVwZGF0ZSB0aGF0LgpUaGUgZXJyb3IgY29k ZSBpcyBwYXNzZWQgYmFjayBmb3IgdGhlIGNhbGxlciB0byBoYW5kbGUuCgo+PiArCURSTV9ERUJV R19EUklWRVIoIkRNQSBzdGF0dXMgPSAweCV4LCBHdUMgc3RhdHVzIDB4JXhcbiIsCj4+ICsJCQlJ OTE1X1JFQUQoRE1BX0NUUkwpLCBzdGF0dXMpOwo+PiArCj4+ICsJaWYgKChzdGF0dXMgJiBHU19C T09UUk9NX01BU0spID09IEdTX0JPT1RST01fUlNBX0ZBSUxFRCkgewo+PiArCQlEUk1fRVJST1Io IiVzIGZpcm13YXJlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iLAo+PiArCQkJZ3Vj X2Z3LT51Y19uYW1lKTsKPj4gKwkJcmV0ID0gLUVOT0VYRUM7Cj4+ICsJfQo+PiArCj4+ICsJRFJN X0RFQlVHX0RSSVZFUigiR3VDIGZ3IGxvYWQgc3RhdHVzICVzICVkXG4iLAo+PiArCQkJcmV0ID8g IkZBSUwiIDogIlNVQ0NFU1MiLCByZXQpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPiAK PiBJJ20gZ3Vlc3NpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgYmFzaWNhbGx5IG1vcmUgb2Yg dGhlIHNhbWUuLi4KPiAtQ2hyaXMKCj8KLkRhdmUuCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==