From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 2/8] v4l: vsp1: Share the CLU, LIF and LUT set_fmt pad operation code Date: Sat, 28 Apr 2018 20:25:44 +0300 Message-ID: <13638427.AR7oG9JFQr@avalon> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <20180422223430.16407-3-laurent.pinchart+renesas@ideasonboard.com> <9839f231-f91c-ab54-fdba-f100a98a558d@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id A23466E254 for ; Sat, 28 Apr 2018 17:25:29 +0000 (UTC) In-Reply-To: <9839f231-f91c-ab54-fdba-f100a98a558d@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Kieran Bingham Cc: linux-renesas-soc@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org SGkgS2llcmFuLAoKT24gU2F0dXJkYXksIDI4IEFwcmlsIDIwMTggMjA6MTY6MTEgRUVTVCBLaWVy YW4gQmluZ2hhbSB3cm90ZToKPiBPbiAyMi8wNC8xOCAyMzozNCwgTGF1cmVudCBQaW5jaGFydCB3 cm90ZToKPiA+IFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0X2ZtdCBwYWQgb3BlcmF0aW9u IGlzIGlkZW50aWNhbCBpbiB0aGUKPiA+IHRocmVlIG1vZHVsZXMuIE1vdmUgaXQgdG8gYSBnZW5l cmljIGhlbHBlciBmdW5jdGlvbi4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5j aGFydAo+ID4gPGxhdXJlbnQucGluY2hhcnQrcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+IAo+ IE9ubHkgYSBtaW5vciBwYWlyIG9mIGNvbW1lbnRzIGJlbG93IHJlZ2FyZGluZyBzb3VyY2Uvc2lu ayBwYWQgZGVzY3JpcHRpb25zLgo+IAo+IElmIGl0J3Mgbm90IGNvbnZlbmllbnQvYWNjdXJhdGUg dG8gZGVmaW5lIHRoZXNlIHdpdGggYW4gZW51bSB0aGVuIGRvbid0Cj4gd29ycnkgYWJvdXQgaXQu CgpJdCdzIGEgZ29vZCBwb2ludC4gVGhlcmUgYXJlIGhvd2V2ZXIgb3RoZXIgbG9jYXRpb25zIGlu IHZzcDFfZW50aXR5LmMgdGhhdCAKaGFyZGNvZGUgcGFkIG51bWJlcnMsIHNvIEknbGwgc3VibWl0 IGEgcGF0Y2ggb24gdG9wIG9mIHRoaXMgc2VyaWVzIHRvIGZpeCB0aGVtIAphbGwgaW4gb25lIGdv LgoKPiBPdGhlcndpc2UsCj4gCj4gUmV2aWV3ZWQtYnk6IEtpZXJhbiBCaW5naGFtIDxraWVyYW4u YmluZ2hhbStyZW5lc2FzQGlkZWFzb25ib2FyZC5jb20+Cj4gCj4gPiAtLS0KPiA+IAo+ID4gIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2NsdS5jICAgIHwgNjUgKysrKystLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZW50aXR5 LmMgfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vdnNwMS92c3AxX2VudGl0eS5oIHwgIDYgKysrCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfbGlmLmMgICAgfCA2NSArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfbHV0LmMgICAgfCA2NSArKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygr KSwgMTYwIGRlbGV0aW9ucygtKQo+IAo+IFRoYXQncyBhIG5pY2UgZGlmZnN0YXQgOi0pCj4gCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfY2x1LmMKPiA+ IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfY2x1LmMgaW5kZXggOTYyNmI2MzA4 NTg1Li45NmE0NDhlMTUwNGMKPiA+IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfY2x1LmMKPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX2NsdS5jCj4gPiBAQCAtMTE0LDE4ICsxMTQsMTggQEAgc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfY29uZmlnCj4gPiBjbHVfbW9kZV9jb250cm9sID0gez4gCj4gPiAgICogVjRM MiBTdWJkZXZpY2UgUGFkIE9wZXJhdGlvbnMKPiA+ICAgKi8KPiA+IAo+ID4gK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgY2x1X2NvZGVzW10gPSB7Cj4gPiArCU1FRElBX0JVU19GTVRfQVJHQjg4 ODhfMVgzMiwKPiA+ICsJTUVESUFfQlVTX0ZNVF9BSFNWODg4OF8xWDMyLAo+ID4gKwlNRURJQV9C VVNfRk1UX0FZVVY4XzFYMzIsCj4gPiArfTsKPiA+ICsKPiA+IAo+ID4gIHN0YXRpYyBpbnQgY2x1 X2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gIAo+ID4gIAkJ CSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsCj4gPiAgCQkJICAgICAg c3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQo+ID4gIAo+ID4gIHsKPiA+ IAo+ID4gLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNvZGVzW10gPSB7Cj4gPiAtCQlNRURJ QV9CVVNfRk1UX0FSR0I4ODg4XzFYMzIsCj4gPiAtCQlNRURJQV9CVVNfRk1UX0FIU1Y4ODg4XzFY MzIsCj4gPiAtCQlNRURJQV9CVVNfRk1UX0FZVVY4XzFYMzIsCj4gPiAtCX07Cj4gPiAtCj4gPiAt CXJldHVybiB2c3AxX3N1YmRldl9lbnVtX21idXNfY29kZShzdWJkZXYsIGNmZywgY29kZSwgY29k ZXMsCj4gPiAtCQkJCQkgIEFSUkFZX1NJWkUoY29kZXMpKTsKPiA+ICsJcmV0dXJuIHZzcDFfc3Vi ZGV2X2VudW1fbWJ1c19jb2RlKHN1YmRldiwgY2ZnLCBjb2RlLCBjbHVfY29kZXMsCj4gPiArCQkJ CQkgIEFSUkFZX1NJWkUoY2x1X2NvZGVzKSk7Cj4gPiAKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGlj IGludCBjbHVfZW51bV9mcmFtZV9zaXplKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4g Cj4gPiBAQCAtMTQxLDUxICsxNDEsMTAgQEAgc3RhdGljIGludCBjbHVfc2V0X2Zvcm1hdChzdHJ1 Y3QgdjRsMl9zdWJkZXYKPiA+ICpzdWJkZXYsCj4gPiAKPiA+ICAJCQkgIHN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfY29uZmlnICpjZmcsCj4gPiAgCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0 ICpmbXQpCj4gPiAgCj4gPiAgewo+ID4gCj4gPiAtCXN0cnVjdCB2c3AxX2NsdSAqY2x1ID0gdG9f Y2x1KHN1YmRldik7Cj4gPiAtCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWc7 Cj4gPiAtCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKPiA+IC0JaW50IHJldCA9 IDA7Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJmNsdS0+ZW50aXR5LmxvY2spOwo+ID4gLQo+ID4g LQljb25maWcgPSB2c3AxX2VudGl0eV9nZXRfcGFkX2NvbmZpZygmY2x1LT5lbnRpdHksIGNmZywg Zm10LT53aGljaCk7Cj4gPiAtCWlmICghY29uZmlnKSB7Cj4gPiAtCQlyZXQgPSAtRUlOVkFMOwo+ ID4gLQkJZ290byBkb25lOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qIERlZmF1bHQgdG8gWVVWIGlm IHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuICovCj4gPiAtCWlmIChmbXQt PmZvcm1hdC5jb2RlICE9IE1FRElBX0JVU19GTVRfQVJHQjg4ODhfMVgzMiAmJgo+ID4gLQkgICAg Zm10LT5mb3JtYXQuY29kZSAhPSBNRURJQV9CVVNfRk1UX0FIU1Y4ODg4XzFYMzIgJiYKPiA+IC0J ICAgIGZtdC0+Zm9ybWF0LmNvZGUgIT0gTUVESUFfQlVTX0ZNVF9BWVVWOF8xWDMyKQo+ID4gLQkJ Zm10LT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfQVlVVjhfMVgzMjsKPiA+IC0KPiA+IC0J Zm9ybWF0ID0gdnNwMV9lbnRpdHlfZ2V0X3BhZF9mb3JtYXQoJmNsdS0+ZW50aXR5LCBjb25maWcs IGZtdC0+cGFkKTsKPiA+IC0KPiA+IC0JaWYgKGZtdC0+cGFkID09IENMVV9QQURfU09VUkNFKSB7 Cj4gPiAtCQkvKiBUaGUgQ0xVIG91dHB1dCBmb3JtYXQgY2FuJ3QgYmUgbW9kaWZpZWQuICovCj4g PiAtCQlmbXQtPmZvcm1hdCA9ICpmb3JtYXQ7Cj4gPiAtCQlnb3RvIGRvbmU7Cj4gPiAtCX0KPiA+ IC0KPiA+IC0JZm9ybWF0LT5jb2RlID0gZm10LT5mb3JtYXQuY29kZTsKPiA+IC0JZm9ybWF0LT53 aWR0aCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBmbXQtPmZvcm1hdC53aWR0aCwKPiA+IC0JCQkJ Q0xVX01JTl9TSVpFLCBDTFVfTUFYX1NJWkUpOwo+ID4gLQlmb3JtYXQtPmhlaWdodCA9IGNsYW1w X3QodW5zaWduZWQgaW50LCBmbXQtPmZvcm1hdC5oZWlnaHQsCj4gPiAtCQkJCSBDTFVfTUlOX1NJ WkUsIENMVV9NQVhfU0laRSk7Cj4gPiAtCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7 Cj4gPiAtCWZvcm1hdC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwo+ID4gLQo+ ID4gLQlmbXQtPmZvcm1hdCA9ICpmb3JtYXQ7Cj4gPiAtCj4gPiAtCS8qIFByb3BhZ2F0ZSB0aGUg Zm9ybWF0IHRvIHRoZSBzb3VyY2UgcGFkLiAqLwo+ID4gLQlmb3JtYXQgPSB2c3AxX2VudGl0eV9n ZXRfcGFkX2Zvcm1hdCgmY2x1LT5lbnRpdHksIGNvbmZpZywKPiA+IC0JCQkJCSAgICBDTFVfUEFE X1NPVVJDRSk7Cj4gPiAtCSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKPiA+IC0KPiA+IC1kb25lOgo+ ID4gLQltdXRleF91bmxvY2soJmNsdS0+ZW50aXR5LmxvY2spOwo+ID4gLQlyZXR1cm4gcmV0Owo+ ID4gKwlyZXR1cm4gdnNwMV9zdWJkZXZfc2V0X3BhZF9mb3JtYXQoc3ViZGV2LCBjZmcsIGZtdCwg Y2x1X2NvZGVzLAo+ID4gKwkJCQkJICBBUlJBWV9TSVpFKGNsdV9jb2RlcyksCj4gPiArCQkJCQkg IENMVV9NSU5fU0laRSwgQ0xVX01JTl9TSVpFLAo+ID4gKwkJCQkJICBDTFVfTUFYX1NJWkUsIENM VV9NQVhfU0laRSk7Cj4gPiAKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiA+ICAtLS0tLT4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 c3AxL3ZzcDFfZW50aXR5LmMKPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFf ZW50aXR5LmMgaW5kZXgKPiA+IDcyMzU0Y2FmNTc0Ni4uMjM5ZGYwNDdlZmQwIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZW50aXR5LmMKPiA+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2VudGl0eS5jCj4gPiBAQCAtMzA3LDYg KzMwNyw4MSBAQCBpbnQgdnNwMV9zdWJkZXZfZW51bV9mcmFtZV9zaXplKHN0cnVjdCB2NGwyX3N1 YmRldgo+ID4gKnN1YmRldiw+IAo+ID4gIAlyZXR1cm4gcmV0Owo+ID4gIAo+ID4gIH0KPiA+IAo+ ID4gKy8qCj4gPiArICogdnNwMV9zdWJkZXZfc2V0X3BhZF9mb3JtYXQgLSBTdWJkZXYgcGFkIHNl dF9mbXQgaGFuZGxlcgo+ID4gKyAqIEBzdWJkZXY6IFY0TDIgc3ViZGV2aWNlCj4gPiArICogQGNm ZzogVjRMMiBzdWJkZXYgcGFkIGNvbmZpZ3VyYXRpb24KPiA+ICsgKiBAZm10OiBWNEwyIHN1YmRl diBmb3JtYXQKPiA+ICsgKiBAY29kZXM6IEFycmF5IG9mIHN1cHBvcnRlZCBtZWRpYSBidXMgY29k ZXMKPiA+ICsgKiBAbmNvZGVzOiBOdW1iZXIgb2Ygc3VwcG9ydGVkIG1lZGlhIGJ1cyBjb2Rlcwo+ ID4gKyAqIEBtaW5fd2lkdGg6IE1pbmltdW0gaW1hZ2Ugd2lkdGgKPiA+ICsgKiBAbWluX2hlaWdo dDogTWluaW11bSBpbWFnZSBoZWlnaHQKPiA+ICsgKiBAbWF4X3dpZHRoOiBNYXhpbXVtIGltYWdl IHdpZHRoCj4gPiArICogQG1heF9oZWlnaHQ6IE1heGltdW0gaW1hZ2UgaGVpZ2h0Cj4gPiArICoK PiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHN1YmRldiBzZXRfZm10IHBhZCBv cGVyYXRpb24gZm9yIGVudGl0aWVzCj4gPiB0aGF0Cj4gPiArICogZG8gbm90IHN1cHBvcnQgc2Nh bGluZyBvciBjcm9wcGluZy4gSXQgZGVmYXVsdHMgdG8gdGhlIGZpcnN0IHN1cHBsaWVkCj4gPiBt ZWRpYQo+ID4gKyAqIGJ1cyBjb2RlIGlmIHRoZSByZXF1ZXN0ZWQgY29kZSBpc24ndCBzdXBwb3J0 ZWQsIGNsYW1wcyB0aGUgc2l6ZSB0byB0aGUKPiA+ICsgKiBzdXBwbGllZCBtaW5pbXVtIGFuZCBt YXhpbXVtLCBhbmQgcHJvcGFnYXRlcyB0aGUgc2luayBwYWQgZm9ybWF0IHRvCj4gPiB0aGUKPiA+ ICsgKiBzb3VyY2UgcGFkLgo+ID4gKyAqLwo+ID4gK2ludCB2c3AxX3N1YmRldl9zZXRfcGFkX2Zv cm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKPiA+ICsJCQkgICAgICAgc3RydWN0IHY0 bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywKPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJfc3Vi ZGV2X2Zvcm1hdCAqZm10LAo+ID4gKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmNvZGVz LCB1bnNpZ25lZCBpbnQgbmNvZGVzLAo+ID4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluX3dp ZHRoLCB1bnNpZ25lZCBpbnQgbWluX2hlaWdodCwKPiA+ICsJCQkgICAgICAgdW5zaWduZWQgaW50 IG1heF93aWR0aCwgdW5zaWduZWQgaW50IG1heF9oZWlnaHQpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg dnNwMV9lbnRpdHkgKmVudGl0eSA9IHRvX3ZzcDFfZW50aXR5KHN1YmRldik7Cj4gPiArCXN0cnVj dCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWc7Cj4gPiArCXN0cnVjdCB2NGwyX21idXNf ZnJhbWVmbXQgKmZvcm1hdDsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCWludCByZXQgPSAw Owo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZlbnRpdHktPmxvY2spOwo+ID4gKwo+ID4gKwljb25m aWcgPSB2c3AxX2VudGl0eV9nZXRfcGFkX2NvbmZpZyhlbnRpdHksIGNmZywgZm10LT53aGljaCk7 Cj4gPiArCWlmICghY29uZmlnKSB7Cj4gPiArCQlyZXQgPSAtRUlOVkFMOwo+ID4gKwkJZ290byBk b25lOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvcm1hdCA9IHZzcDFfZW50aXR5X2dldF9wYWRfZm9y bWF0KGVudGl0eSwgY29uZmlnLCBmbXQtPnBhZCk7Cj4gPiArCj4gPiArCWlmIChmbXQtPnBhZCAh PSAwKSB7Cj4gCj4gSSBndWVzcyB3ZSBkb24ndCBoYXZlIGFueSBjbGVhciB3YXkgdG8gc2F5ICE9 ICpfUEFEX1NJTksgaGVyZSBkbyB3ZSAuLgo+IAo+ID4gKwkJLyogVGhlIG91dHB1dCBmb3JtYXQg Y2FuJ3QgYmUgbW9kaWZpZWQuICovCj4gPiArCQlmbXQtPmZvcm1hdCA9ICpmb3JtYXQ7Cj4gPiAr CQlnb3RvIGRvbmU7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogRGVmYXVsdCB0byB0 aGUgZmlyc3QgbWVkaWEgYnVzIGNvZGUgaWYgdGhlIHJlcXVlc3RlZCBmb3JtYXQgaXMgbm90Cj4g PiArCSAqIHN1cHBvcnRlZC4KPiA+ICsJICovCj4gPiArCWZvciAoaSA9IDA7IGkgPCBuY29kZXM7 ICsraSkgewo+ID4gKwkJaWYgKGZtdC0+Zm9ybWF0LmNvZGUgPT0gY29kZXNbaV0pCj4gPiArCQkJ YnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9ybWF0LT5jb2RlID0gaSA8IG5jb2RlcyA/IGNv ZGVzW2ldIDogY29kZXNbMF07Cj4gPiArCWZvcm1hdC0+d2lkdGggPSBjbGFtcF90KHVuc2lnbmVk IGludCwgZm10LT5mb3JtYXQud2lkdGgsCj4gPiArCQkJCW1pbl93aWR0aCwgbWF4X3dpZHRoKTsK PiA+ICsJZm9ybWF0LT5oZWlnaHQgPSBjbGFtcF90KHVuc2lnbmVkIGludCwgZm10LT5mb3JtYXQu aGVpZ2h0LAo+ID4gKwkJCQkgbWluX2hlaWdodCwgbWF4X2hlaWdodCk7Cj4gPiArCWZvcm1hdC0+ ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gPiArCWZvcm1hdC0+Y29sb3JzcGFjZSA9IFY0TDJf Q09MT1JTUEFDRV9TUkdCOwo+ID4gKwo+ID4gKwlmbXQtPmZvcm1hdCA9ICpmb3JtYXQ7Cj4gPiAr Cj4gPiArCS8qIFByb3BhZ2F0ZSB0aGUgZm9ybWF0IHRvIHRoZSBzb3VyY2UgcGFkLiAqLwo+ID4g Kwlmb3JtYXQgPSB2c3AxX2VudGl0eV9nZXRfcGFkX2Zvcm1hdChlbnRpdHksIGNvbmZpZywgMSk7 Cj4gCj4gSWYgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IEVOVElUWV9QQURfU0lOSyA9PSAwIGFuZCBF TlRJVFlfUEFEX1NPVVJDRSA9PSAxLAo+IGNhbiB3ZSBwdXQgdGhvc2UgaW50byBhbiBlbnVtID8K PiAKPiA+ICsJKmZvcm1hdCA9IGZtdC0+Zm9ybWF0Owo+ID4gKwo+ID4gK2RvbmU6Cj4gPiArCW11 dGV4X3VubG9jaygmZW50aXR5LT5sb2NrKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiAr Cj4gPiAKPiA+ICAvKgo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gIC0tLS0tPiAgCj4gPiAgICog TWVkaWEgT3BlcmF0aW9ucwo+ID4gICAqLwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZW50aXR5LmgKPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfZW50aXR5LmggaW5kZXgKPiA+IGZiMjBhMTU3OGYzYi4uMDgzOWE2MmNm YTcxIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZW50 aXR5LmgKPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2VudGl0eS5o Cj4gPiBAQCAtMTYwLDYgKzE2MCwxMiBAQCBzdHJ1Y3QgbWVkaWFfcGFkICp2c3AxX2VudGl0eV9y ZW1vdGVfcGFkKHN0cnVjdAo+ID4gbWVkaWFfcGFkICpwYWQpOz4gCj4gPiAgaW50IHZzcDFfc3Vi ZGV2X2dldF9wYWRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gIAo+ID4g IAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+ID4gIAkJCSAg ICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpOwo+ID4gCj4gPiAraW50IHZzcDFf c3ViZGV2X3NldF9wYWRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gKwkJ CSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+ID4gKwkJCSAgICAg ICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQsCj4gPiArCQkJICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCAqY29kZXMsIHVuc2lnbmVkIGludCBuY29kZXMsCj4gPiArCQkJICAgICAgIHVu c2lnbmVkIGludCBtaW5fd2lkdGgsIHVuc2lnbmVkIGludCBtaW5faGVpZ2h0LAo+ID4gKwkJCSAg ICAgICB1bnNpZ25lZCBpbnQgbWF4X3dpZHRoLCB1bnNpZ25lZCBpbnQgbWF4X2hlaWdodCk7Cj4g PiAKPiA+ICBpbnQgdnNwMV9zdWJkZXZfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2 ICpzdWJkZXYsCj4gPiAgCj4gPiAgCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29u ZmlnICpjZmcsCj4gPiAgCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51 bSAqY29kZSwKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX2xpZi5jCj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2xpZi5j IGluZGV4IGIyMGI4NDJmMDZiYS4uZmJkZDU3MTVmODI5Cj4gPiAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2xpZi5jCj4gPiArKysgYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9saWYuYwo+ID4gQEAgLTMzLDE3ICszMywxNyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgdnNwMV9saWZfd3JpdGUoc3RydWN0IHZzcDFfbGlmCj4gPiAqbGlmLCBz dHJ1Y3QgdnNwMV9kbF9saXN0ICpkbCw+IAo+ID4gICAqIFY0TDIgU3ViZGV2aWNlIE9wZXJhdGlv bnMKPiA+ICAgKi8KPiA+IAo+ID4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGlmX2NvZGVz W10gPSB7Cj4gPiArCU1FRElBX0JVU19GTVRfQVJHQjg4ODhfMVgzMiwKPiA+ICsJTUVESUFfQlVT X0ZNVF9BWVVWOF8xWDMyLAo+ID4gK307Cj4gPiArCj4gPiAKPiA+ICBzdGF0aWMgaW50IGxpZl9l bnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKPiA+ICAKPiA+ICAJCQkg ICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+ID4gIAkJCSAgICAgIHN0 cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29kZSkKPiA+ICAKPiA+ICB7Cj4gPiAK PiA+IC0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb2Rlc1tdID0gewo+ID4gLQkJTUVESUFf QlVTX0ZNVF9BUkdCODg4OF8xWDMyLAo+ID4gLQkJTUVESUFfQlVTX0ZNVF9BWVVWOF8xWDMyLAo+ ID4gLQl9Owo+ID4gLQo+ID4gLQlyZXR1cm4gdnNwMV9zdWJkZXZfZW51bV9tYnVzX2NvZGUoc3Vi ZGV2LCBjZmcsIGNvZGUsIGNvZGVzLAo+ID4gLQkJCQkJICBBUlJBWV9TSVpFKGNvZGVzKSk7Cj4g PiArCXJldHVybiB2c3AxX3N1YmRldl9lbnVtX21idXNfY29kZShzdWJkZXYsIGNmZywgY29kZSwg bGlmX2NvZGVzLAo+ID4gKwkJCQkJICBBUlJBWV9TSVpFKGxpZl9jb2RlcykpOwo+ID4gCj4gPiAg fQo+ID4gIAo+ID4gIHN0YXRpYyBpbnQgbGlmX2VudW1fZnJhbWVfc2l6ZShzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwKPiA+IAo+ID4gQEAgLTU5LDUzICs1OSwxMCBAQCBzdGF0aWMgaW50IGxp Zl9zZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gCj4gPiAgCQkJICBz dHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLAo+ID4gIAkJCSAgc3RydWN0IHY0bDJf c3ViZGV2X2Zvcm1hdCAqZm10KQo+ID4gIAo+ID4gIHsKPiA+IAo+ID4gLQlzdHJ1Y3QgdnNwMV9s aWYgKmxpZiA9IHRvX2xpZihzdWJkZXYpOwo+ID4gLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2Nv bmZpZyAqY29uZmlnOwo+ID4gLQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7Cj4g PiAtCWludCByZXQgPSAwOwo+ID4gLQo+ID4gLQltdXRleF9sb2NrKCZsaWYtPmVudGl0eS5sb2Nr KTsKPiA+IC0KPiA+IC0JY29uZmlnID0gdnNwMV9lbnRpdHlfZ2V0X3BhZF9jb25maWcoJmxpZi0+ ZW50aXR5LCBjZmcsIGZtdC0+d2hpY2gpOwo+ID4gLQlpZiAoIWNvbmZpZykgewo+ID4gLQkJcmV0 ID0gLUVJTlZBTDsKPiA+IC0JCWdvdG8gZG9uZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQkvKiBEZWZh dWx0IHRvIFlVViBpZiB0aGUgcmVxdWVzdGVkIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiAqLwo+ ID4gLQlpZiAoZm10LT5mb3JtYXQuY29kZSAhPSBNRURJQV9CVVNfRk1UX0FSR0I4ODg4XzFYMzIg JiYKPiA+IC0JICAgIGZtdC0+Zm9ybWF0LmNvZGUgIT0gTUVESUFfQlVTX0ZNVF9BWVVWOF8xWDMy KQo+ID4gLQkJZm10LT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfQVlVVjhfMVgzMjsKPiA+ IC0KPiA+IC0JZm9ybWF0ID0gdnNwMV9lbnRpdHlfZ2V0X3BhZF9mb3JtYXQoJmxpZi0+ZW50aXR5 LCBjb25maWcsIGZtdC0+cGFkKTsKPiA+IC0KPiA+IC0JaWYgKGZtdC0+cGFkID09IExJRl9QQURf U09VUkNFKSB7Cj4gPiAtCQkvKgo+ID4gLQkJICogVGhlIExJRiBzb3VyY2UgZm9ybWF0IGlzIGFs d2F5cyBpZGVudGljYWwgdG8gaXRzIHNpbmsKPiA+IC0JCSAqIGZvcm1hdC4KPiA+IC0JCSAqLwo+ ID4gLQkJZm10LT5mb3JtYXQgPSAqZm9ybWF0Owo+ID4gLQkJZ290byBkb25lOwo+ID4gLQl9Cj4g PiAtCj4gPiAtCWZvcm1hdC0+Y29kZSA9IGZtdC0+Zm9ybWF0LmNvZGU7Cj4gPiAtCWZvcm1hdC0+ d2lkdGggPSBjbGFtcF90KHVuc2lnbmVkIGludCwgZm10LT5mb3JtYXQud2lkdGgsCj4gPiAtCQkJ CUxJRl9NSU5fU0laRSwgTElGX01BWF9TSVpFKTsKPiA+IC0JZm9ybWF0LT5oZWlnaHQgPSBjbGFt cF90KHVuc2lnbmVkIGludCwgZm10LT5mb3JtYXQuaGVpZ2h0LAo+ID4gLQkJCQkgTElGX01JTl9T SVpFLCBMSUZfTUFYX1NJWkUpOwo+ID4gLQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Owo+ID4gLQlmb3JtYXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKPiA+IC0K PiA+IC0JZm10LT5mb3JtYXQgPSAqZm9ybWF0Owo+ID4gLQo+ID4gLQkvKiBQcm9wYWdhdGUgdGhl IGZvcm1hdCB0byB0aGUgc291cmNlIHBhZC4gKi8KPiA+IC0JZm9ybWF0ID0gdnNwMV9lbnRpdHlf Z2V0X3BhZF9mb3JtYXQoJmxpZi0+ZW50aXR5LCBjb25maWcsCj4gPiAtCQkJCQkgICAgTElGX1BB RF9TT1VSQ0UpOwo+ID4gLQkqZm9ybWF0ID0gZm10LT5mb3JtYXQ7Cj4gPiAtCj4gPiAtZG9uZToK PiA+IC0JbXV0ZXhfdW5sb2NrKCZsaWYtPmVudGl0eS5sb2NrKTsKPiA+IC0JcmV0dXJuIHJldDsK PiA+ICsJcmV0dXJuIHZzcDFfc3ViZGV2X3NldF9wYWRfZm9ybWF0KHN1YmRldiwgY2ZnLCBmbXQs IGxpZl9jb2RlcywKPiA+ICsJCQkJCSAgQVJSQVlfU0laRShsaWZfY29kZXMpLAo+ID4gKwkJCQkJ ICBMSUZfTUlOX1NJWkUsIExJRl9NSU5fU0laRSwKPiA+ICsJCQkJCSAgTElGX01BWF9TSVpFLCBM SUZfTUFYX1NJWkUpOwo+ID4gCj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9zdWJkZXZfcGFkX29wcyBsaWZfcGFkX29wcyA9IHsKPiA+IAo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2x1dC5jCj4gPiBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdnNwMS92c3AxX2x1dC5jIGluZGV4IDdiZGFiYjMxMWM2Yy4uZjJlNDhhMDJj YTdkCj4gPiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X2x1dC5jCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9sdXQuYwo+ ID4gQEAgLTkwLDE4ICs5MCwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25m aWcgbHV0X3RhYmxlX2NvbnRyb2wKPiA+ID0gez4gCj4gPiAgICogVjRMMiBTdWJkZXZpY2UgUGFk IE9wZXJhdGlvbnMKPiA+ICAgKi8KPiA+IAo+ID4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg bHV0X2NvZGVzW10gPSB7Cj4gPiArCU1FRElBX0JVU19GTVRfQVJHQjg4ODhfMVgzMiwKPiA+ICsJ TUVESUFfQlVTX0ZNVF9BSFNWODg4OF8xWDMyLAo+ID4gKwlNRURJQV9CVVNfRk1UX0FZVVY4XzFY MzIsCj4gPiArfTsKPiA+ICsKPiA+IAo+ID4gIHN0YXRpYyBpbnQgbHV0X2VudW1fbWJ1c19jb2Rl KHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gIAo+ID4gIAkJCSAgICAgIHN0cnVjdCB2 NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsCj4gPiAgCQkJICAgICAgc3RydWN0IHY0bDJfc3Vi ZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQo+ID4gIAo+ID4gIHsKPiA+IAo+ID4gLQlzdGF0aWMg Y29uc3QgdW5zaWduZWQgaW50IGNvZGVzW10gPSB7Cj4gPiAtCQlNRURJQV9CVVNfRk1UX0FSR0I4 ODg4XzFYMzIsCj4gPiAtCQlNRURJQV9CVVNfRk1UX0FIU1Y4ODg4XzFYMzIsCj4gPiAtCQlNRURJ QV9CVVNfRk1UX0FZVVY4XzFYMzIsCj4gPiAtCX07Cj4gPiAtCj4gPiAtCXJldHVybiB2c3AxX3N1 YmRldl9lbnVtX21idXNfY29kZShzdWJkZXYsIGNmZywgY29kZSwgY29kZXMsCj4gPiAtCQkJCQkg IEFSUkFZX1NJWkUoY29kZXMpKTsKPiA+ICsJcmV0dXJuIHZzcDFfc3ViZGV2X2VudW1fbWJ1c19j b2RlKHN1YmRldiwgY2ZnLCBjb2RlLCBsdXRfY29kZXMsCj4gPiArCQkJCQkgIEFSUkFZX1NJWkUo bHV0X2NvZGVzKSk7Cj4gPiAKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIGludCBsdXRfZW51bV9m cmFtZV9zaXplKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAo+ID4gCj4gPiBAQCAtMTE3LDUx ICsxMTcsMTAgQEAgc3RhdGljIGludCBsdXRfc2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYK PiA+ICpzdWJkZXYsCj4gPiAKPiA+ICAJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmln ICpjZmcsCj4gPiAgCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCj4gPiAgCj4g PiAgewo+ID4gCj4gPiAtCXN0cnVjdCB2c3AxX2x1dCAqbHV0ID0gdG9fbHV0KHN1YmRldik7Cj4g PiAtCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWc7Cj4gPiAtCXN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKPiA+IC0JaW50IHJldCA9IDA7Cj4gPiAtCj4gPiAt CW11dGV4X2xvY2soJmx1dC0+ZW50aXR5LmxvY2spOwo+ID4gLQo+ID4gLQljb25maWcgPSB2c3Ax X2VudGl0eV9nZXRfcGFkX2NvbmZpZygmbHV0LT5lbnRpdHksIGNmZywgZm10LT53aGljaCk7Cj4g PiAtCWlmICghY29uZmlnKSB7Cj4gPiAtCQlyZXQgPSAtRUlOVkFMOwo+ID4gLQkJZ290byBkb25l Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qIERlZmF1bHQgdG8gWVVWIGlmIHRoZSByZXF1ZXN0ZWQg Zm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuICovCj4gPiAtCWlmIChmbXQtPmZvcm1hdC5jb2RlICE9 IE1FRElBX0JVU19GTVRfQVJHQjg4ODhfMVgzMiAmJgo+ID4gLQkgICAgZm10LT5mb3JtYXQuY29k ZSAhPSBNRURJQV9CVVNfRk1UX0FIU1Y4ODg4XzFYMzIgJiYKPiA+IC0JICAgIGZtdC0+Zm9ybWF0 LmNvZGUgIT0gTUVESUFfQlVTX0ZNVF9BWVVWOF8xWDMyKQo+ID4gLQkJZm10LT5mb3JtYXQuY29k ZSA9IE1FRElBX0JVU19GTVRfQVlVVjhfMVgzMjsKPiA+IC0KPiA+IC0JZm9ybWF0ID0gdnNwMV9l bnRpdHlfZ2V0X3BhZF9mb3JtYXQoJmx1dC0+ZW50aXR5LCBjb25maWcsIGZtdC0+cGFkKTsKPiA+ IC0KPiA+IC0JaWYgKGZtdC0+cGFkID09IExVVF9QQURfU09VUkNFKSB7Cj4gPiAtCQkvKiBUaGUg TFVUIG91dHB1dCBmb3JtYXQgY2FuJ3QgYmUgbW9kaWZpZWQuICovCj4gPiAtCQlmbXQtPmZvcm1h dCA9ICpmb3JtYXQ7Cj4gPiAtCQlnb3RvIGRvbmU7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JZm9ybWF0 LT5jb2RlID0gZm10LT5mb3JtYXQuY29kZTsKPiA+IC0JZm9ybWF0LT53aWR0aCA9IGNsYW1wX3Qo dW5zaWduZWQgaW50LCBmbXQtPmZvcm1hdC53aWR0aCwKPiA+IC0JCQkJTFVUX01JTl9TSVpFLCBM VVRfTUFYX1NJWkUpOwo+ID4gLQlmb3JtYXQtPmhlaWdodCA9IGNsYW1wX3QodW5zaWduZWQgaW50 LCBmbXQtPmZvcm1hdC5oZWlnaHQsCj4gPiAtCQkJCSBMVVRfTUlOX1NJWkUsIExVVF9NQVhfU0la RSk7Cj4gPiAtCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gPiAtCWZvcm1hdC0+ Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwo+ID4gLQo+ID4gLQlmbXQtPmZvcm1h dCA9ICpmb3JtYXQ7Cj4gPiAtCj4gPiAtCS8qIFByb3BhZ2F0ZSB0aGUgZm9ybWF0IHRvIHRoZSBz b3VyY2UgcGFkLiAqLwo+ID4gLQlmb3JtYXQgPSB2c3AxX2VudGl0eV9nZXRfcGFkX2Zvcm1hdCgm bHV0LT5lbnRpdHksIGNvbmZpZywKPiA+IC0JCQkJCSAgICBMVVRfUEFEX1NPVVJDRSk7Cj4gPiAt CSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKPiA+IC0KPiA+IC1kb25lOgo+ID4gLQltdXRleF91bmxv Y2soJmx1dC0+ZW50aXR5LmxvY2spOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gKwlyZXR1cm4gdnNw MV9zdWJkZXZfc2V0X3BhZF9mb3JtYXQoc3ViZGV2LCBjZmcsIGZtdCwgbHV0X2NvZGVzLAo+ID4g KwkJCQkJICBBUlJBWV9TSVpFKGx1dF9jb2RlcyksCj4gPiArCQkJCQkgIExVVF9NSU5fU0laRSwg TFVUX01JTl9TSVpFLAo+ID4gKwkJCQkJICBMVVRfTUFYX1NJWkUsIExVVF9NQVhfU0laRSk7Cj4g PiAKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICAtLS0tLQoK Ci0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK