From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Koenig, Christian" Subject: Re: [PATCH 02/11] dma-buf: add new dma_fence_chain container v4 Date: Fri, 15 Feb 2019 14:32:25 +0000 Message-ID: References: <20181207095601.2058-1-david1.zhou@amd.com> <20181207095601.2058-2-david1.zhou@amd.com> <6c2adaf5-6871-20be-a26d-182f8ca8ab8a@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <6c2adaf5-6871-20be-a26d-182f8ca8ab8a-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Content-Language: en-US Content-ID: <7469DA4887B1DB4CA7AEA92CF5249B6D-asWib9pRmPqcE4WynfumptQqCkab/8FMAL8bYrjMMd8@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Lionel Landwerlin , "Zhou, David(ChunMing)" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: =?utf-8?B?Q2hyaXN0aWFuIEvDtm5pZw==?= QW0gMTUuMDIuMTkgdW0gMTU6MjMgc2NocmllYiBMaW9uZWwgTGFuZHdlcmxpbjoNCj4gSGkgQ2hy aXN0aWFuLCBEYXZpZCwNCj4NCj4gRm9yIHRpbWVsaW5lIHNlbWFwaG9yZSB3ZSBuZWVkIHBvaW50 cyB0byBzaWduYWxlZCBpbiBvcmRlci4NCj4gSSdtIHN0cnVnZ2xpbmcgdG8gdW5kZXJzdGFuZCBo b3cgdGhpcyBmZW5jZS1jaGFpbiBpbXBsZW1lbnRhdGlvbiANCj4gcHJlc2VydmVzIG9yZGVyaW5n IG9mIHRoZSBzZXFub3MuDQo+DQo+IE9uZSBvZiB0aGUgc2NlbmFyaW8gSSBjYW4gc2VlIGFuIGlz c3VlIGhhcHBlbmluZyBpcyB3aGVuIHlvdSBoYXZlIGEgDQo+IHRpbWVsaW5lIHdpdGggcG9pbnRz IDEgJiAyIGFuZCB1c2Vyc3BhY2Ugc3VibWl0cyBmb3IgMiBkaWZmZXJlbnQgDQo+IGVuZ2luZXMg Og0KPiDCoMKgwqAgLSBmaXJzdCB3aXRoIGxldCdzIHNheSBhIGJsaXR0ZXIgc3R5bGUgZW5naW5l IG9uIHBvaW50IDINCj4gwqDCoMKgIC0gdGhlbiBhIDNkIHN0eWxlIGVuZ2luZSBvbiBwb2ludCAx DQoNClllYWgsIGFuZCB3aGVyZSBleGFjdGx5IGlzIHRoZSBwcm9ibGVtPw0KDQpTZXFubyAxIHdp bGwgc2lnbmFsIHdoZW4gdGhlIDNkIHN0eWxlIGVuZ2luZSBmaW5pc2hlcyB3b3JrLg0KDQpBbmQg c2Vxbm8gMiB3aWxsIHNpZ25hbCB3aGVuIGJvdGggc2Vxbm8gMSBpcyBzaWduYWxlZCBhbmQgdGhl IGJsaXR0ZXIgDQpzdHlsZSBlbmdpbmUgaGFzIGZpbmlzaGVkIGl0cyB3b3JrLg0KDQo+IEFub3Ro ZXIgc2NlbmFyaW8gd291bGQgYmUgc2lnbmFsaW5nIGEgdGltZWxpbmUgd2l0aCBwb2ludHMgMSAm IDIgd2l0aCANCj4gdGhvc2UgcG9pbnRzIGluIHJldmVyc2Ugb3JkZXIgaW4gdGhlIHN1Ym1pc3Np b24gYXJyYXkuDQoNClRoYXQgaXMgYWN0dWFsbHkgaWxsZWdhbCBpbiB0aGUgc3BlYywgYnV0IGFj dHVhbGx5IGhhbmRsZWQgZ3JhY2VmdWxseSBhcyANCndlbGwuDQoNCkUuZy4gd2hlbiB5b3UgYWRk IHNlcW5vIDEgdG8gdGhlIHN5bmNvYmogY29udGFpbmVyIGl0IHdpbGwgb25seSBzaWduYWwgDQp3 aGVuIDIgaXMgc2lnbmFsZWQgYXMgd2VsbC4NCg0KUmVnYXJkcywNCkNocmlzdGlhbi4NCg0KPg0K PiAtTGlvbmVsDQo+DQo+IE9uIDA3LzEyLzIwMTggMDk6NTUsIENodW5taW5nIFpob3Ugd3JvdGU6 DQo+PiBGcm9tOiBDaHJpc3RpYW4gS8O2bmlnIDxja29lbmlnLmxlaWNodHp1bWVya2VuQGdtYWls LmNvbT4NCj4+DQo+PiBMb2NrbGVzcyBjb250YWluZXIgaW1wbGVtZW50YXRpb24gc2ltaWxhciB0 byBhIGRtYV9mZW5jZV9hcnJheSwgYnV0IHdpdGgNCj4+IG9ubHkgdHdvIGVsZW1lbnRzIHBlciBu b2RlIGFuZCBhdXRvbWF0aWMgZ2FyYmFnZSBjb2xsZWN0aW9uLg0KPj4NCj4+IHYyOiBwcm9wZXJs eSBkb2N1bWVudCBkbWFfZmVuY2VfY2hhaW5fZm9yX2VhY2gsIGFkZCANCj4+IGRtYV9mZW5jZV9j aGFpbl9maW5kX3NlcW5vLA0KPj4gwqDCoMKgwqAgZHJvcCBwcmV2IHJlZmVyZW5jZSBkdXJpbmcg Z2FyYmFnZSBjb2xsZWN0aW9uIGlmIGl0J3Mgbm90IGEgDQo+PiBjaGFpbiBmZW5jZS4NCj4+IHYz OiB1c2UgaGVhZCBhbmQgaXRlcmF0b3IgZm9yIGRtYV9mZW5jZV9jaGFpbl9mb3JfZWFjaA0KPj4g djQ6IGZpeCByZWZlcmVuY2UgY291bnQgaW4gZG1hX2ZlbmNlX2NoYWluX2VuYWJsZV9zaWduYWxp bmcNCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29l bmlnQGFtZC5jb20+DQo+PiAtLS0NCj4+IMKgIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZcKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAzICstDQo+PiDCoCBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNl LWNoYWluLmMgfCAyNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+PiDCoCBpbmNs dWRlL2xpbnV4L2RtYS1mZW5jZS1jaGFpbi5owqDCoCB8wqAgODEgKysrKysrKysrKw0KPj4gwqAg MyBmaWxlcyBjaGFuZ2VkLCAzMjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPj4gwqAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYw0KPj4g wqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvZG1hLWZlbmNlLWNoYWluLmgNCj4+ DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlDQo+PiBpbmRleCAwOTEzYTZjY2FiNWEuLjFmMDA2ZTA4M2ViOSAxMDA2NDQN Cj4+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQ0KPj4gKysrIGIvZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlDQo+PiBAQCAtMSw0ICsxLDUgQEANCj4+IC1vYmoteSA6PSBkbWEtYnVmLm8g ZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gcmVzZXJ2YXRpb24ubyANCj4+IHNlcW5vLWZl bmNlLm8NCj4+ICtvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5 Lm8gZG1hLWZlbmNlLWNoYWluLm8gXA0KPj4gK8KgwqDCoMKgIHJlc2VydmF0aW9uLm8gc2Vxbm8t ZmVuY2Uubw0KPj4gwqAgb2JqLSQoQ09ORklHX1NZTkNfRklMRSnCoMKgwqDCoMKgwqDCoCArPSBz eW5jX2ZpbGUubw0KPj4gwqAgb2JqLSQoQ09ORklHX1NXX1NZTkMpwqDCoMKgwqDCoMKgwqAgKz0g c3dfc3luYy5vIHN5bmNfZGVidWcubw0KPj4gwqAgb2JqLSQoQ09ORklHX1VETUFCVUYpwqDCoMKg wqDCoMKgwqAgKz0gdWRtYWJ1Zi5vDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2Rt YS1mZW5jZS1jaGFpbi5jIA0KPj4gYi9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLWNoYWluLmMN Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjBjNWUzYzkw MmZhMA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5j ZS1jaGFpbi5jDQo+PiBAQCAtMCwwICsxLDI0MSBAQA0KPj4gKy8qDQo+PiArICogZmVuY2UtY2hh aW46IGNoYWluIGZlbmNlcyB0b2dldGhlciBpbiBhIHRpbWVsaW5lDQo+PiArICoNCj4+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLg0KPj4gKyAqIEF1 dGhvcnM6DQo+PiArICrCoMKgwqAgQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0Bh bWQuY29tPg0KPj4gKyAqDQo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciANCj4+IG1vZGlmeSBpdA0KPj4gKyAqIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz IA0KPj4gcHVibGlzaGVkIGJ5DQo+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4N Cj4+ICsgKg0KPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCANCj4+IGJ1dCBXSVRIT1VUDQo+PiArICogQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgDQo+PiBNRVJDSEFOVEFC SUxJVFkgb3INCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoCBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyANCj4+IExpY2Vuc2UgZm9yDQo+PiArICogbW9yZSBkZXRh aWxzLg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtY2hhaW4u aD4NCj4+ICsNCj4+ICtzdGF0aWMgYm9vbCBkbWFfZmVuY2VfY2hhaW5fZW5hYmxlX3NpZ25hbGlu ZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7DQo+PiArDQo+PiArLyoqDQo+PiArICogZG1hX2Zl bmNlX2NoYWluX2dldF9wcmV2IC0gdXNlIFJDVSB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIA0K Pj4gcHJldmlvdXMgZmVuY2UNCj4+ICsgKiBAY2hhaW46IGNoYWluIG5vZGUgdG8gZ2V0IHRoZSBw cmV2aW91cyBub2RlIGZyb20NCj4+ICsgKg0KPj4gKyAqIFVzZSBkbWFfZmVuY2VfZ2V0X3JjdV9z YWZlIHRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgDQo+PiBmZW5jZSBvZiB0aGUN Cj4+ICsgKiBjaGFpbiBub2RlLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNl ICpkbWFfZmVuY2VfY2hhaW5fZ2V0X3ByZXYoc3RydWN0IA0KPj4gZG1hX2ZlbmNlX2NoYWluICpj aGFpbikNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKnByZXY7DQo+PiArDQo+ PiArwqDCoMKgIHJjdV9yZWFkX2xvY2soKTsNCj4+ICvCoMKgwqAgcHJldiA9IGRtYV9mZW5jZV9n ZXRfcmN1X3NhZmUoJmNoYWluLT5wcmV2KTsNCj4+ICvCoMKgwqAgcmN1X3JlYWRfdW5sb2NrKCk7 DQo+PiArwqDCoMKgIHJldHVybiBwcmV2Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBk bWFfZmVuY2VfY2hhaW5fd2FsayAtIGNoYWluIHdhbGtpbmcgZnVuY3Rpb24NCj4+ICsgKiBAZmVu Y2U6IGN1cnJlbnQgY2hhaW4gbm9kZQ0KPj4gKyAqDQo+PiArICogV2FsayB0aGUgY2hhaW4gdG8g dGhlIG5leHQgbm9kZS4gUmV0dXJucyB0aGUgbmV4dCBmZW5jZSBvciBOVUxMIA0KPj4gaWYgd2Ug YXJlIGF0DQo+PiArICogdGhlIGVuZCBvZiB0aGUgY2hhaW4uIEdhcmJhZ2UgY29sbGVjdHMgY2hh aW4gbm9kZXMgd2hpY2ggYXJlIGFscmVhZHkNCj4+ICsgKiBzaWduYWxlZC4NCj4+ICsgKi8NCj4+ ICtzdHJ1Y3QgZG1hX2ZlbmNlICpkbWFfZmVuY2VfY2hhaW5fd2FsayhzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSkNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNoYWlu LCAqcHJldl9jaGFpbjsNCj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqcHJldiwgKnJlcGxh Y2VtZW50LCAqdG1wOw0KPj4gKw0KPj4gK8KgwqDCoCBjaGFpbiA9IHRvX2RtYV9mZW5jZV9jaGFp bihmZW5jZSk7DQo+PiArwqDCoMKgIGlmICghY2hhaW4pIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBk bWFfZmVuY2VfcHV0KGZlbmNlKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsNCj4+ ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCB3aGlsZSAoKHByZXYgPSBkbWFfZmVuY2VfY2hh aW5fZ2V0X3ByZXYoY2hhaW4pKSkgew0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHByZXZfY2hh aW4gPSB0b19kbWFfZmVuY2VfY2hhaW4ocHJldik7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHBy ZXZfY2hhaW4pIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghZG1hX2ZlbmNlX2lz X3NpZ25hbGVkKHByZXZfY2hhaW4tPmZlbmNlKSkNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXBsYWNl bWVudCA9IGRtYV9mZW5jZV9jaGFpbl9nZXRfcHJldihwcmV2X2NoYWluKTsNCj4+ICvCoMKgwqDC oMKgwqDCoCB9IGVsc2Ugew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFkbWFfZmVu Y2VfaXNfc2lnbmFsZWQocHJldikpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVwbGFjZW1lbnQgPSBO VUxMOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCB0bXAg PSBjbXB4Y2hnKCZjaGFpbi0+cHJldiwgcHJldiwgcmVwbGFjZW1lbnQpOw0KPj4gK8KgwqDCoMKg wqDCoMKgIGlmICh0bXAgPT0gcHJldikNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9m ZW5jZV9wdXQodG1wKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KHJlcGxhY2VtZW50KTsNCj4+ICvCoMKgwqDCoMKgwqDC oCBkbWFfZmVuY2VfcHV0KHByZXYpOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGRt YV9mZW5jZV9wdXQoZmVuY2UpOw0KPj4gK8KgwqDCoCByZXR1cm4gcHJldjsNCj4+ICt9DQo+PiAr RVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY2hhaW5fd2Fsayk7DQo+PiArDQo+PiArLyoqDQo+PiAr ICogZG1hX2ZlbmNlX2NoYWluX2ZpbmRfc2Vxbm8gLSBmaW5kIGZlbmNlIGNoYWluIG5vZGUgYnkg c2Vxbm8NCj4+ICsgKiBAcGZlbmNlOiBwb2ludGVyIHRvIHRoZSBjaGFpbiBub2RlIHdoZXJlIHRv IHN0YXJ0DQo+PiArICogQHNlcW5vOiB0aGUgc2VxdWVuY2UgbnVtYmVyIHRvIHNlYXJjaCBmb3IN Cj4+ICsgKg0KPj4gKyAqIEFkdmFuY2UgdGhlIGZlbmNlIHBvaW50ZXIgdG8gdGhlIGNoYWluIG5v ZGUgd2hpY2ggd2lsbCBzaWduYWwgDQo+PiB0aGlzIHNlcXVlbmNlDQo+PiArICogbnVtYmVyLiBJ ZiBubyBzZXF1ZW5jZSBudW1iZXIgaXMgcHJvdmlkZWQgdGhlbiB0aGlzIGlzIGEgbm8tb3AuDQo+ PiArICoNCj4+ICsgKiBSZXR1cm5zIEVJTlZBTCBpZiB0aGUgZmVuY2UgaXMgbm90IGEgY2hhaW4g bm9kZSBvciB0aGUgc2VxdWVuY2UgDQo+PiBudW1iZXIgaGFzDQo+PiArICogbm90IHlldCBhZHZh bmNlZCBmYXIgZW5vdWdoLg0KPj4gKyAqLw0KPj4gK2ludCBkbWFfZmVuY2VfY2hhaW5fZmluZF9z ZXFubyhzdHJ1Y3QgZG1hX2ZlbmNlICoqcGZlbmNlLCB1aW50NjRfdCANCj4+IHNlcW5vKQ0KPj4g K3sNCj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqY2hhaW47DQo+PiArDQo+PiAr wqDCoMKgIGlmICghc2Vxbm8pDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+PiArDQo+ PiArwqDCoMKgIGNoYWluID0gdG9fZG1hX2ZlbmNlX2NoYWluKCpwZmVuY2UpOw0KPj4gK8KgwqDC oCBpZiAoIWNoYWluIHx8IGNoYWluLT5iYXNlLnNlcW5vIDwgc2Vxbm8pDQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArwqDCoMKgIGRtYV9mZW5jZV9jaGFpbl9m b3JfZWFjaCgqcGZlbmNlLCAmY2hhaW4tPmJhc2UpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAo KCpwZmVuY2UpLT5jb250ZXh0ICE9IGNoYWluLT5iYXNlLmNvbnRleHQgfHwNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHRvX2RtYV9mZW5jZV9jaGFpbigqcGZlbmNlKS0+cHJldl9zZXFubyA8 IHNlcW5vKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKgIH0N Cj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmY2hhaW4tPmJhc2UpOw0KPj4gKw0KPj4gK8KgwqDC oCByZXR1cm4gMDsNCj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY2hhaW5fZmlu ZF9zZXFubyk7DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmRtYV9mZW5jZV9jaGFpbl9n ZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5jZSANCj4+ICpmZW5jZSkNCj4+ICt7DQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuICJkbWFfZmVuY2VfY2hhaW4iOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgY29uc3QgY2hhciAqZG1hX2ZlbmNlX2NoYWluX2dldF90aW1lbGluZV9uYW1lKHN0 cnVjdCANCj4+IGRtYV9mZW5jZSAqZmVuY2UpDQo+PiArew0KPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAidW5ib3VuZCI7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGRtYV9mZW5jZV9j aGFpbl9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspDQo+PiArew0KPj4gK8KgwqDCoCBz dHJ1Y3QgZG1hX2ZlbmNlX2NoYWluICpjaGFpbjsNCj4+ICsNCj4+ICvCoMKgwqAgY2hhaW4gPSBj b250YWluZXJfb2Yod29yaywgdHlwZW9mKCpjaGFpbiksIHdvcmspOw0KPj4gKw0KPj4gK8KgwqDC oCAvKiBUcnkgdG8gcmVhcm0gdGhlIGNhbGxiYWNrICovDQo+PiArwqDCoMKgIGlmICghZG1hX2Zl bmNlX2NoYWluX2VuYWJsZV9zaWduYWxpbmcoJmNoYWluLT5iYXNlKSkNCj4+ICvCoMKgwqDCoMKg wqDCoCAvKiBPaywgd2UgYXJlIGRvbmUuIE5vIG1vcmUgdW5zaWduYWxlZCBmZW5jZXMgbGVmdCAq Lw0KPj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9zaWduYWwoJmNoYWluLT5iYXNlKTsNCj4+ ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmY2hhaW4tPmJhc2UpOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgdm9pZCBkbWFfZmVuY2VfY2hhaW5fY2Ioc3RydWN0IGRtYV9mZW5jZSAqZiwgc3RydWN0 IA0KPj4gZG1hX2ZlbmNlX2NiICpjYikNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVu Y2VfY2hhaW4gKmNoYWluOw0KPj4gKw0KPj4gK8KgwqDCoCBjaGFpbiA9IGNvbnRhaW5lcl9vZihj YiwgdHlwZW9mKCpjaGFpbiksIGNiKTsNCj4+ICvCoMKgwqAgaXJxX3dvcmtfcXVldWUoJmNoYWlu LT53b3JrKTsNCj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dChmKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGJvb2wgZG1hX2ZlbmNlX2NoYWluX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UpDQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluICpo ZWFkID0gdG9fZG1hX2ZlbmNlX2NoYWluKGZlbmNlKTsNCj4+ICsNCj4+ICvCoMKgwqAgZG1hX2Zl bmNlX2dldCgmaGVhZC0+YmFzZSk7DQo+PiArwqDCoMKgIGRtYV9mZW5jZV9jaGFpbl9mb3JfZWFj aChmZW5jZSwgJmhlYWQtPmJhc2UpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2Zl bmNlX2NoYWluICpjaGFpbiA9IHRvX2RtYV9mZW5jZV9jaGFpbihmZW5jZSk7DQo+PiArwqDCoMKg wqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZiA9IGNoYWluID8gY2hhaW4tPmZlbmNlIDogZmVu Y2U7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX2dldChmKTsNCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoIWRtYV9mZW5jZV9hZGRfY2FsbGJhY2soZiwgJmhlYWQtPmNiLCANCj4+ IGRtYV9mZW5jZV9jaGFpbl9jYikpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9m ZW5jZV9wdXQoZmVuY2UpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7 DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQo Zik7DQo+PiArwqDCoMKgIH0NCj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmaGVhZC0+YmFzZSk7 DQo+PiArwqDCoMKgIHJldHVybiBmYWxzZTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wg ZG1hX2ZlbmNlX2NoYWluX3NpZ25hbGVkKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQ0KPj4gK3sN Cj4+ICvCoMKgwqAgZG1hX2ZlbmNlX2NoYWluX2Zvcl9lYWNoKGZlbmNlLCBmZW5jZSkgew0KPj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNoYWluID0gdG9fZG1hX2Zl bmNlX2NoYWluKGZlbmNlKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpm ID0gY2hhaW4gPyBjaGFpbi0+ZmVuY2UgOiBmZW5jZTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoIWRtYV9mZW5jZV9pc19zaWduYWxlZChmKSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZG1hX2ZlbmNlX3B1dChmZW5jZSk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gZmFsc2U7DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoCB9DQo+PiArDQo+ PiArwqDCoMKgIHJldHVybiB0cnVlOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBkbWFf ZmVuY2VfY2hhaW5fcmVsZWFzZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkNCj4+ICt7DQo+PiAr wqDCoMKgIHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNoYWluID0gdG9fZG1hX2ZlbmNlX2NoYWlu KGZlbmNlKTsNCj4+ICsNCj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dChjaGFpbi0+cHJldik7DQo+ PiArwqDCoMKgIGRtYV9mZW5jZV9wdXQoY2hhaW4tPmZlbmNlKTsNCj4+ICvCoMKgwqAgZG1hX2Zl bmNlX2ZyZWUoZmVuY2UpOw0KPj4gK30NCj4+ICsNCj4+ICtjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNl X29wcyBkbWFfZmVuY2VfY2hhaW5fb3BzID0gew0KPj4gK8KgwqDCoCAuZ2V0X2RyaXZlcl9uYW1l ID0gZG1hX2ZlbmNlX2NoYWluX2dldF9kcml2ZXJfbmFtZSwNCj4+ICvCoMKgwqAgLmdldF90aW1l bGluZV9uYW1lID0gZG1hX2ZlbmNlX2NoYWluX2dldF90aW1lbGluZV9uYW1lLA0KPj4gK8KgwqDC oCAuZW5hYmxlX3NpZ25hbGluZyA9IGRtYV9mZW5jZV9jaGFpbl9lbmFibGVfc2lnbmFsaW5nLA0K Pj4gK8KgwqDCoCAuc2lnbmFsZWQgPSBkbWFfZmVuY2VfY2hhaW5fc2lnbmFsZWQsDQo+PiArwqDC oMKgIC5yZWxlYXNlID0gZG1hX2ZlbmNlX2NoYWluX3JlbGVhc2UsDQo+PiArfTsNCj4+ICtFWFBP UlRfU1lNQk9MKGRtYV9mZW5jZV9jaGFpbl9vcHMpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGRt YV9mZW5jZV9jaGFpbl9pbml0IC0gaW5pdGlhbGl6ZSBhIGZlbmNlIGNoYWluDQo+PiArICogQGNo YWluOiB0aGUgY2hhaW4gbm9kZSB0byBpbml0aWFsaXplDQo+PiArICogQHByZXY6IHRoZSBwcmV2 aW91cyBmZW5jZQ0KPj4gKyAqIEBmZW5jZTogdGhlIGN1cnJlbnQgZmVuY2UNCj4+ICsgKg0KPj4g KyAqIEluaXRpYWxpemUgYSBuZXcgY2hhaW4gbm9kZSBhbmQgZWl0aGVyIHN0YXJ0IGEgbmV3IGNo YWluIG9yIGFkZCANCj4+IHRoZSBub2RlIHRvDQo+PiArICogdGhlIGV4aXN0aW5nIGNoYWluIG9m IHRoZSBwcmV2aW91cyBmZW5jZS4NCj4+ICsgKi8NCj4+ICt2b2lkIGRtYV9mZW5jZV9jaGFpbl9p bml0KHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNoYWluLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKnByZXYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdWludDY0X3Qgc2Vxbm8pDQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgZG1hX2Zl bmNlX2NoYWluICpwcmV2X2NoYWluID0gdG9fZG1hX2ZlbmNlX2NoYWluKHByZXYpOw0KPj4gK8Kg wqDCoCB1aW50NjRfdCBjb250ZXh0Ow0KPj4gKw0KPj4gK8KgwqDCoCBzcGluX2xvY2tfaW5pdCgm Y2hhaW4tPmxvY2spOw0KPj4gK8KgwqDCoCBjaGFpbi0+cHJldiA9IHByZXY7DQo+PiArwqDCoMKg IGNoYWluLT5mZW5jZSA9IGZlbmNlOw0KPj4gK8KgwqDCoCBjaGFpbi0+cHJldl9zZXFubyA9IDA7 DQo+PiArwqDCoMKgIGluaXRfaXJxX3dvcmsoJmNoYWluLT53b3JrLCBkbWFfZmVuY2VfY2hhaW5f aXJxX3dvcmspOw0KPj4gKw0KPj4gK8KgwqDCoCAvKiBUcnkgdG8gcmV1c2UgdGhlIGNvbnRleHQg b2YgdGhlIHByZXZpb3VzIGNoYWluIG5vZGUuICovDQo+PiArwqDCoMKgIGlmIChwcmV2X2NoYWlu ICYmIF9fZG1hX2ZlbmNlX2lzX2xhdGVyKHNlcW5vLCBwcmV2LT5zZXFubykpIHsNCj4+ICvCoMKg wqDCoMKgwqDCoCBjb250ZXh0ID0gcHJldi0+Y29udGV4dDsNCj4+ICvCoMKgwqDCoMKgwqDCoCBj aGFpbi0+cHJldl9zZXFubyA9IHByZXYtPnNlcW5vOw0KPj4gK8KgwqDCoCB9IGVsc2Ugew0KPj4g K8KgwqDCoMKgwqDCoMKgIGNvbnRleHQgPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIHZhbGlk IHNlcXVlbmNlIG51bWJlci4gKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJldl9jaGFpbikN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcW5vID0gbWF4KHByZXYtPnNlcW5vLCBzZXFu byk7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgZG1hX2ZlbmNlX2luaXQoJmNoYWlu LT5iYXNlLCAmZG1hX2ZlbmNlX2NoYWluX29wcywNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICZjaGFpbi0+bG9jaywgY29udGV4dCwgc2Vxbm8pOw0KPj4gK30NCj4+ICtFWFBPUlRf U1lNQk9MKGRtYV9mZW5jZV9jaGFpbl9pbml0KTsNCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L2RtYS1mZW5jZS1jaGFpbi5oIA0KPj4gYi9pbmNsdWRlL2xpbnV4L2RtYS1mZW5jZS1jaGFp bi5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hNWMy ZThjNjkxNWMNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLWZl bmNlLWNoYWluLmgNCj4+IEBAIC0wLDAgKzEsODEgQEANCj4+ICsvKg0KPj4gKyAqIGZlbmNlLWNo YWluOiBjaGFpbiBmZW5jZXMgdG9nZXRoZXIgaW4gYSB0aW1lbGluZQ0KPj4gKyAqDQo+PiArICog Q29weXJpZ2h0IChDKSAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4+ICsgKiBB dXRob3JzOg0KPj4gKyAqwqDCoMKgIENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdA YW1kLmNvbT4NCj4+ICsgKg0KPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgDQo+PiBtb2RpZnkgaXQNCj4+ICsgKiB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cyANCj4+IHB1Ymxpc2hlZCBieQ0KPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u DQo+PiArICoNCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgDQo+PiBidXQgV0lUSE9VVA0KPj4gKyAqIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIA0KPj4gTUVSQ0hBTlRB QklMSVRZIG9yDQo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgDQo+PiBMaWNlbnNlIGZvcg0KPj4gKyAqIG1vcmUgZGV0 YWlscy4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaWZuZGVmIF9fTElOVVhfRE1BX0ZFTkNFX0NIQUlO X0gNCj4+ICsjZGVmaW5lIF9fTElOVVhfRE1BX0ZFTkNFX0NIQUlOX0gNCj4+ICsNCj4+ICsjaW5j bHVkZSA8bGludXgvZG1hLWZlbmNlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2lycV93b3JrLmg+ DQo+PiArDQo+PiArLyoqDQo+PiArICogc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAtIGZlbmNlIHRv IHJlcHJlc2VudCBhbiBub2RlIG9mIGEgZmVuY2UgY2hhaW4NCj4+ICsgKiBAYmFzZTogZmVuY2Ug YmFzZSBjbGFzcw0KPj4gKyAqIEBsb2NrOiBzcGlubG9jayBmb3IgZmVuY2UgaGFuZGxpbmcNCj4+ ICsgKiBAcHJldjogcHJldmlvdXMgZmVuY2Ugb2YgdGhlIGNoYWluDQo+PiArICogQHByZXZfc2Vx bm86IG9yaWdpbmFsIHByZXZpb3VzIHNlcW5vIGJlZm9yZSBnYXJiYWdlIGNvbGxlY3Rpb24NCj4+ ICsgKiBAZmVuY2U6IGVuY2Fwc3VsYXRlZCBmZW5jZQ0KPj4gKyAqIEBjYjogY2FsbGJhY2sgc3Ry dWN0dXJlIGZvciBzaWduYWxpbmcNCj4+ICsgKiBAd29yazogaXJxIHdvcmsgaXRlbSBmb3Igc2ln bmFsaW5nDQo+PiArICovDQo+PiArc3RydWN0IGRtYV9mZW5jZV9jaGFpbiB7DQo+PiArwqDCoMKg IHN0cnVjdCBkbWFfZmVuY2UgYmFzZTsNCj4+ICvCoMKgwqAgc3BpbmxvY2tfdCBsb2NrOw0KPj4g K8KgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpwcmV2Ow0KPj4gK8KgwqDCoCB1NjQgcHJldl9zZXFu bzsNCj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7DQo+PiArwqDCoMKgIHN0cnVj dCBkbWFfZmVuY2VfY2IgY2I7DQo+PiArwqDCoMKgIHN0cnVjdCBpcnFfd29yayB3b3JrOw0KPj4g K307DQo+PiArDQo+PiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9mZW5j ZV9jaGFpbl9vcHM7DQo+PiArDQo+PiArLyoqDQo+PiArICogdG9fZG1hX2ZlbmNlX2NoYWluIC0g Y2FzdCBhIGZlbmNlIHRvIGEgZG1hX2ZlbmNlX2NoYWluDQo+PiArICogQGZlbmNlOiBmZW5jZSB0 byBjYXN0IHRvIGEgZG1hX2ZlbmNlX2FycmF5DQo+PiArICoNCj4+ICsgKiBSZXR1cm5zIE5VTEwg aWYgdGhlIGZlbmNlIGlzIG5vdCBhIGRtYV9mZW5jZV9jaGFpbiwNCj4+ICsgKiBvciB0aGUgZG1h X2ZlbmNlX2NoYWluIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBkbWFfZmVuY2VfY2hhaW4gKg0KPj4gK3RvX2RtYV9mZW5jZV9jaGFpbihzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSkNCj4+ICt7DQo+PiArwqDCoMKgIGlmICghZmVuY2UgfHwgZmVuY2UtPm9wcyAh PSAmZG1hX2ZlbmNlX2NoYWluX29wcykNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsN Cj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGRtYV9m ZW5jZV9jaGFpbiwgYmFzZSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIGRtYV9mZW5j ZV9jaGFpbl9mb3JfZWFjaCAtIGl0ZXJhdGUgb3ZlciBhbGwgZmVuY2VzIGluIGNoYWluDQo+PiAr ICogQGl0ZXI6IGN1cnJlbnQgZmVuY2UNCj4+ICsgKiBAaGVhZDogc3RhcnRpbmcgcG9pbnQNCj4+ ICsgKg0KPj4gKyAqIEl0ZXJhdGUgb3ZlciBhbGwgZmVuY2VzIGluIHRoZSBjaGFpbi4gV2Uga2Vl cCBhIHJlZmVyZW5jZSB0byB0aGUgDQo+PiBjdXJyZW50DQo+PiArICogZmVuY2Ugd2hpbGUgaW5z aWRlIHRoZSBsb29wIHdoaWNoIG11c3QgYmUgZHJvcHBlZCB3aGVuIGJyZWFraW5nIG91dC4NCj4+ ICsgKi8NCj4+ICsjZGVmaW5lIGRtYV9mZW5jZV9jaGFpbl9mb3JfZWFjaChpdGVyLCBoZWFkKcKg wqDCoCBcDQo+PiArwqDCoMKgIGZvciAoaXRlciA9IGRtYV9mZW5jZV9nZXQoaGVhZCk7IGl0ZXI7 IFwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgIGl0ZXIgPSBkbWFfZmVuY2VfY2hhaW5fd2FsayhoZWFk KSkNCj4+ICsNCj4+ICtzdHJ1Y3QgZG1hX2ZlbmNlICpkbWFfZmVuY2VfY2hhaW5fd2FsayhzdHJ1 Y3QgZG1hX2ZlbmNlICpmZW5jZSk7DQo+PiAraW50IGRtYV9mZW5jZV9jaGFpbl9maW5kX3NlcW5v KHN0cnVjdCBkbWFfZmVuY2UgKipwZmVuY2UsIHVpbnQ2NF90IA0KPj4gc2Vxbm8pOw0KPj4gK3Zv aWQgZG1hX2ZlbmNlX2NoYWluX2luaXQoc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqY2hhaW4sDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqcHJldiwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCBzZXFubyk7DQo+PiArDQo+PiAr I2VuZGlmIC8qIF9fTElOVVhfRE1BX0ZFTkNFX0NIQUlOX0ggKi8NCj4NCj4NCg0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxp c3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4