From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH v2 1/2] drm: Add generic colorkey properties Date: Tue, 29 May 2018 10:11:03 +0300 Message-ID: <20180529071103.GL23723@intel.com> References: <20180526155623.12610-1-digetx@gmail.com> <20180526155623.12610-2-digetx@gmail.com> <20180528131501.GK23723@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 53D5E6E326 for ; Tue, 29 May 2018 07:11:10 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dmitry Osipenko Cc: Thomas Hellstrom , Laurent Pinchart , Neil Armstrong , Russell King , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-tegra@vger.kernel.org, Thierry Reding , Ben Skeggs , Rodrigo Vivi , Maxime Ripard , Alexandru Gheorghe , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMjksIDIwMTggYXQgMDI6NDg6MjJBTSArMDMwMCwgRG1pdHJ5IE9zaXBlbmtv IHdyb3RlOgo+IE9uIDI4LjA1LjIwMTggMTY6MTUsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+ IE9uIFNhdCwgTWF5IDI2LCAyMDE4IGF0IDA2OjU2OjIyUE0gKzAzMDAsIERtaXRyeSBPc2lwZW5r byB3cm90ZToKPiA+PiBDb2xvciBrZXlpbmcgaXMgdGhlIGFjdGlvbiBvZiByZXBsYWNpbmcgcGl4 ZWxzIG1hdGNoaW5nIGEgZ2l2ZW4gY29sb3IKPiA+PiAob3IgcmFuZ2Ugb2YgY29sb3JzKSB3aXRo IHRyYW5zcGFyZW50IHBpeGVscyBpbiBhbiBvdmVybGF5IHdoZW4KPiA+PiBwZXJmb3JtaW5nIGJs aXR0aW5nLiBEZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgdGhlCj4gPj4g bWF0Y2hpbmcgcGl4ZWwgY2FuIGVpdGhlciBiZWNvbWUgZnVsbHkgdHJhbnNwYXJlbnQgb3IgZ2Fp biBhZGp1c3RtZW50Cj4gPj4gb2YgdGhlIHBpeGVscyBjb21wb25lbnQgdmFsdWVzLgo+ID4+Cj4g Pj4gQ29sb3Iga2V5aW5nIGlzIGZvdW5kIGluIGEgbGFyZ2UgbnVtYmVyIG9mIGRldmljZXMgd2hv c2UgY2FwYWJpbGl0aWVzCj4gPj4gb2Z0ZW4gZGlmZmVyLCBidXQgdGhleSBzdGlsbCBoYXZlIGVu b3VnaCBjb21tb24gZmVhdHVyZXMgaW4gcmFuZ2UgdG8KPiA+PiBzdGFuZGFyZGl6ZSBjb2xvciBr ZXkgcHJvcGVydGllcy4gVGhpcyBjb21taXQgYWRkcyBuaW5lIGdlbmVyaWMgRFJNIHBsYW5lCj4g Pj4gcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBjb2xvciBrZXlpbmcgdG8gY292ZXIgdmFyaW91 cyBIVyBjYXBhYmlsaXRpZXMuCj4gPj4KPiA+PiBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIHRoZSBp bml0aWFsIHdvcmsgZG9uZSBieSBMYXVyZW50IFBpbmNoYXJ0LCBtb3N0IG9mCj4gPj4gY3JlZGl0 cyBmb3IgdGhpcyBwYXRjaCBnb2VzIHRvIGhpbS4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IERt aXRyeSBPc2lwZW5rbyA8ZGlnZXR4QGdtYWlsLmNvbT4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWMuYyB8ICAzNiArKysrKysKPiA+PiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9ibGVuZC5jICB8IDIyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4+ ICBpbmNsdWRlL2RybS9kcm1fYmxlbmQuaCAgICAgIHwgICAzICsKPiA+PiAgaW5jbHVkZS9kcm0v ZHJtX3BsYW5lLmggICAgICB8ICA3NyArKysrKysrKysrKysKPiA+PiAgNCBmaWxlcyBjaGFuZ2Vk LCAzNDUgaW5zZXJ0aW9ucygrKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gPj4gaW5kZXgg ODk1NzQxZTljZDdkLi41YjgwOGNiNjg2NTQgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWMuYwo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMK PiA+PiBAQCAtNzk5LDYgKzc5OSwyNCBAQCBzdGF0aWMgaW50IGRybV9hdG9taWNfcGxhbmVfc2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ICAJCXN0YXRlLT5yb3RhdGlv biA9IHZhbDsKPiA+PiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVy dHkpIHsKPiA+PiAgCQlzdGF0ZS0+enBvcyA9IHZhbDsKPiA+PiArCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gcGxhbmUtPmNvbG9ya2V5Lm1vZGVfcHJvcGVydHkpIHsKPiA+PiArCQlzdGF0ZS0+Y29s b3JrZXkubW9kZSA9IHZhbDsKPiA+PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNv bG9ya2V5Lm1pbl9wcm9wZXJ0eSkgewo+ID4+ICsJCXN0YXRlLT5jb2xvcmtleS5taW4gPSB2YWw7 Cj4gPj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcmtleS5tYXhfcHJvcGVy dHkpIHsKPiA+PiArCQlzdGF0ZS0+Y29sb3JrZXkubWF4ID0gdmFsOwo+ID4+ICsJfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JrZXkuZm9ybWF0X3Byb3BlcnR5KSB7Cj4gPj4gKwkJ c3RhdGUtPmNvbG9ya2V5LmZvcm1hdCA9IHZhbDsKPiA+PiArCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gcGxhbmUtPmNvbG9ya2V5Lm1hc2tfcHJvcGVydHkpIHsKPiA+PiArCQlzdGF0ZS0+Y29sb3Jr ZXkubWFzayA9IHZhbDsKPiA+PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9y a2V5LmludmVydGVkX21hdGNoX3Byb3BlcnR5KSB7Cj4gPj4gKwkJc3RhdGUtPmNvbG9ya2V5Lmlu dmVydGVkX21hdGNoID0gdmFsOwo+ID4+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+ Y29sb3JrZXkucmVwbGFjZW1lbnRfbWFza19wcm9wZXJ0eSkgewo+ID4+ICsJCXN0YXRlLT5jb2xv cmtleS5yZXBsYWNlbWVudF9tYXNrID0gdmFsOwo+ID4+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBwbGFuZS0+Y29sb3JrZXkucmVwbGFjZW1lbnRfdmFsdWVfcHJvcGVydHkpIHsKPiA+PiArCQlz dGF0ZS0+Y29sb3JrZXkucmVwbGFjZW1lbnRfdmFsdWUgPSB2YWw7Cj4gPj4gKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcmtleS5yZXBsYWNlbWVudF9mb3JtYXRfcHJvcGVydHkp IHsKPiA+PiArCQlzdGF0ZS0+Y29sb3JrZXkucmVwbGFjZW1lbnRfZm9ybWF0ID0gdmFsOwo+ID4+ ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfZW5jb2RpbmdfcHJvcGVydHkp IHsKPiA+PiAgCQlzdGF0ZS0+Y29sb3JfZW5jb2RpbmcgPSB2YWw7Cj4gPj4gIAl9IGVsc2UgaWYg KHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9yYW5nZV9wcm9wZXJ0eSkgewo+ID4+IEBAIC04NjQs NiArODgyLDI0IEBAIGRybV9hdG9taWNfcGxhbmVfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ID4+ICAJCSp2YWwgPSBzdGF0ZS0+cm90YXRpb247Cj4gPj4gIAl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IHBsYW5lLT56cG9zX3Byb3BlcnR5KSB7Cj4gPj4gIAkJKnZhbCA9IHN0 YXRlLT56cG9zOwo+ID4+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JrZXku bW9kZV9wcm9wZXJ0eSkgewo+ID4+ICsJCSp2YWwgPSBzdGF0ZS0+Y29sb3JrZXkubW9kZTsKPiA+ PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9ya2V5Lm1pbl9wcm9wZXJ0eSkg ewo+ID4+ICsJCSp2YWwgPSBzdGF0ZS0+Y29sb3JrZXkubWluOwo+ID4+ICsJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JrZXkubWF4X3Byb3BlcnR5KSB7Cj4gPj4gKwkJKnZhbCA9 IHN0YXRlLT5jb2xvcmtleS5tYXg7Cj4gPj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5l LT5jb2xvcmtleS5mb3JtYXRfcHJvcGVydHkpIHsKPiA+PiArCQkqdmFsID0gc3RhdGUtPmNvbG9y a2V5LmZvcm1hdDsKPiA+PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9ya2V5 Lm1hc2tfcHJvcGVydHkpIHsKPiA+PiArCQkqdmFsID0gc3RhdGUtPmNvbG9ya2V5Lm1hc2s7Cj4g Pj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcmtleS5pbnZlcnRlZF9tYXRj aF9wcm9wZXJ0eSkgewo+ID4+ICsJCSp2YWwgPSBzdGF0ZS0+Y29sb3JrZXkuaW52ZXJ0ZWRfbWF0 Y2g7Cj4gPj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcmtleS5yZXBsYWNl bWVudF9tYXNrX3Byb3BlcnR5KSB7Cj4gPj4gKwkJKnZhbCA9IHN0YXRlLT5jb2xvcmtleS5yZXBs YWNlbWVudF9tYXNrOwo+ID4+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3Jr ZXkucmVwbGFjZW1lbnRfdmFsdWVfcHJvcGVydHkpIHsKPiA+PiArCQkqdmFsID0gc3RhdGUtPmNv bG9ya2V5LnJlcGxhY2VtZW50X3ZhbHVlOwo+ID4+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBw bGFuZS0+Y29sb3JrZXkucmVwbGFjZW1lbnRfZm9ybWF0X3Byb3BlcnR5KSB7Cj4gPj4gKwkJKnZh bCA9IHN0YXRlLT5jb2xvcmtleS5yZXBsYWNlbWVudF9mb3JtYXQ7Cj4gPj4gIAl9IGVsc2UgaWYg KHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgewo+ID4+ICAJCSp2 YWwgPSBzdGF0ZS0+Y29sb3JfZW5jb2Rpbmc7Cj4gPj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IHBsYW5lLT5jb2xvcl9yYW5nZV9wcm9wZXJ0eSkgewo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2JsZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JsZW5kLmMKPiA+PiBp bmRleCBhMTZhNzRkN2UxNWUuLjA1ZTU2MzJjZTM3NSAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2JsZW5kLmMKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JsZW5k LmMKPiA+PiBAQCAtMTA3LDYgKzEwNywxMSBAQAo+ID4+ICAgKglwbGFuZXMuIFdpdGhvdXQgdGhp cyBwcm9wZXJ0eSB0aGUgcHJpbWFyeSBwbGFuZSBpcyBhbHdheXMgYmVsb3cgdGhlIGN1cnNvcgo+ ID4+ICAgKglwbGFuZSwgYW5kIG9yZGVyaW5nIGJldHdlZW4gYWxsIG90aGVyIHBsYW5lcyBpcyB1 bmRlZmluZWQuCj4gPj4gICAqCj4gPj4gKyAqIGNvbG9ya2V5Ogo+ID4+ICsgKglDb2xvciBrZXlp bmcgaXMgc2V0IHVwIHdpdGggZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcmtleV9wcm9wZXJ0aWVzKCku Cj4gPj4gKyAqCUl0IGFkZHMgc3VwcG9ydCBmb3IgcmVwbGFjaW5nIGEgcmFuZ2Ugb2YgY29sb3Jz IHdpdGggYSB0cmFuc3BhcmVudAo+ID4+ICsgKgljb2xvciBpbiB0aGUgcGxhbmUuCj4gPj4gKyAq Cj4gPj4gICAqIE5vdGUgdGhhdCBhbGwgdGhlIHByb3BlcnR5IGV4dGVuc2lvbnMgZGVzY3JpYmVk IGhlcmUgYXBwbHkgZWl0aGVyIHRvIHRoZQo+ID4+ICAgKiBwbGFuZSBvciB0aGUgQ1JUQyAoZS5n LiBmb3IgdGhlIGJhY2tncm91bmQgY29sb3IsIHdoaWNoIGN1cnJlbnRseSBpcyBub3QKPiA+PiAg ICogZXhwb3NlZCBhbmQgYXNzdW1lZCB0byBiZSBibGFjaykuCj4gPj4gQEAgLTQ0OCwzICs0NTMs MjI3IEBAIGludCBkcm1fYXRvbWljX25vcm1hbGl6ZV96cG9zKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gPj4gIAlyZXR1cm4gMDsKPiA+PiAgfQo+ID4+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfbm9ybWFsaXplX3pwb3MpOwo+ID4+ICsKPiA+PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBwbGFuZV9jb2xvcmtleV9tb2RlX25hbWVbXSA9IHsKPiA+PiArCVtEUk1fUExBTkVfQ09MT1JL RVlfTU9ERV9ESVNBQkxFRF0gPSAiZGlzYWJsZWQiLAo+ID4+ICsJW0RSTV9QTEFORV9DT0xPUktF WV9NT0RFX1NSQ10gPSAic3JjLW1hdGNoLXNyYy1yZXBsYWNlIiwKPiA+PiArCVtEUk1fUExBTkVf Q09MT1JLRVlfTU9ERV9EU1RdID0gImRzdC1tYXRjaC1zcmMtcmVwbGFjZSIsCj4gPiAKPiA+IFRo aXMgbGlzdCBzZWVtcyB3YXkgbW9yZSBsaW1pdGVkIHRoYW4gSSB3YXMgZXhwZWN0aW5nLCBhdCBs ZWFzdCB3aGVuCj4gPiBjb21wYXJlZCB0byBhbGwgdGhlIGRpZmZlcmVudCBwcm9wcyB5b3UncmUg cHJvcG9zaW5nIHRvIGFkZC4KPiA+IAo+IAo+IFdoYXQgZWxzZSBhcmUgeW91IGV4cGVjdGluZyB0 byBzZWUgaW4gdGhlIGxpc3Q/CgpQcmVycnkgbXVjaCBhbGwga2luZHMgb2YgbW9kZXMgZm9yIHRo ZSBmdW5reSByZXBsYWNlbWVudCB2YWx1ZXMKYW5kIHdoYW5vdC4KCj4gCj4gPj4gK307Cj4gPj4g Kwo+ID4+ICsvKioKPiA+PiArICogZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcmtleV9wcm9wZXJ0aWVz IC0gY3JlYXRlIGNvbG9ya2V5IHByb3BlcnRpZXMKPiA+PiArICogQHBsYW5lOiBkcm0gcGxhbmUK PiA+PiArICogQHN1cHBvcnRlZF9tb2RlczogYml0bWFzayBvZiBzdXBwb3J0ZWQgY29sb3Iga2V5 aW5nIG1vZGVzCj4gPj4gKyAqCj4gPj4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZ2Vu ZXJpYyBjb2xvciBrZXlpbmcgcHJvcGVydGllcyBhbmQgYXR0YWNoIHRoZW0gdG8KPiA+PiArICog dGhlIHBsYW5lIHRvIGVuYWJsZSBjb2xvciBrZXlpbmcgY29udHJvbCBmb3IgYmxlbmRpbmcgb3Bl cmF0aW9ucy4KPiA+PiArICoKPiA+PiArICogQ29sb3Iga2V5aW5nIGlzIGNvbnRyb2xsZWQgdGhy b3VnaCBuaW5lIHByb3BlcnRpZXM6Cj4gPj4gKyAqCj4gPj4gKyAqIGNvbG9ya2V5Lm1vZGU6Cj4g Pj4gKyAqCVRoZSBtb2RlIGlzIGFuIGVudW1lcmF0ZWQgcHJvcGVydHkgdGhhdCBjb250cm9scyBo b3cgY29sb3Iga2V5aW5nCj4gPj4gKyAqCW9wZXJhdGVzLiBUaGUgImRpc2FibGVkIiBtb2RlIHRo YXQgZGlzYWJsZXMgY29sb3Iga2V5aW5nIGFuZCBpcwo+ID4+ICsgKgl2ZXJ5IGxpa2VseSB0byBl eGlzdCBpZiBjb2xvciBrZXlpbmcgaXMgc3VwcG9ydGVkLCBpdCBzaG91bGQgYmUgdGhlCj4gPj4g KyAqCWRlZmF1bHQgbW9kZS4KPiA+PiArICoKPiA+PiArICogY29sb3JrZXkubWluLCBjb2xvcmtl eS5tYXg6Cj4gPj4gKyAqCVRoZXNlIHR3byBwcm9wZXJ0aWVzIHNwZWNpZnkgdGhlIGNvbG9ycyB0 aGF0IGFyZSB0cmVhdGVkIGFzIHRoZSBjb2xvcgo+ID4+ICsgKglrZXkuIFBpeGVsIHdob3NlIHZh bHVlIGlzIGluIHRoZSBbbWluLCBtYXhdIHJhbmdlIGlzIHRoZSBjb2xvciBrZXkKPiA+PiArICoJ bWF0Y2hpbmcgcGl4ZWwuIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhcmUgZXhwcmVz c2VkIGFzIGEKPiA+PiArICoJNjQtYml0IGludGVnZXIgaW4gQVhZWjE2MTYxNjE2IGZvcm1hdCwg d2hlcmUgQSBpcyB0aGUgYWxwaGEgdmFsdWUgYW5kCj4gPj4gKyAqCVgsIFkgYW5kIFogY29ycmVz cG9uZCB0byB0aGUgY29sb3IgY29tcG9uZW50cyBvZiB0aGUgY29sb3JrZXkuZm9ybWF0Lgo+ID4+ ICsgKglJbiBtb3N0IGNhc2VzIFhZWiB3aWxsIGJlIGVpdGhlciBSR0Igb3IgWVVWLgo+ID4+ICsg Kgo+ID4+ICsgKglXaGVuIGEgc2luZ2xlIGNvbG9yIGtleSBpcyBkZXNpcmVkIGluc3RlYWQgb2Yg YSByYW5nZSwgdXNlcnNwYWNlIHNoYWxsCj4gPj4gKyAqCXNldCB0aGUgbWluIGFuZCBtYXggcHJv cGVydGllcyB0byB0aGUgc2FtZSB2YWx1ZS4KPiA+PiArICoKPiA+PiArICoJRHJpdmVycyByZXR1 cm4gYW4gZXJyb3IgZnJvbSB0aGVpciBwbGFuZSBhdG9taWMgY2hlY2sgaWYgcmFuZ2UgY2FuJ3Qg YmUKPiA+PiArICoJaGFuZGxlZC4KPiA+PiArICoKPiA+PiArICogY29sb3JrZXkuZm9ybWF0Ogo+ ID4+ICsgKglUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgcGl4ZWwgZm9ybWF0IGZvciB0aGUg Y29sb3JrZXkubWluIC8gbWF4Cj4gPj4gKyAqCXByb3BlcnRpZXMuIFRoZSBmb3JtYXQgaXMgZ2l2 ZW4gaW4gYSBmb3JtIG9mIERSTSBmb3VyY2MgY29kZS4KPiA+IAo+ID4gVW1tLiBXaHkgd2UgZG8g ZXZlbiBuZWVkIHRoaXM/IFRoaXMgc2VlbXMgaW5jb21wYXRpYmxlIHdpdGggeW91ciBlYXJsaWVy Cj4gPiAibWluL21heCBhcmUgc3BlY2lmaWVkIGluIDE2YnBjIGZvcm1hdCIgc3RhdGVtZW50Lgo+ ID4gCj4gCj4gQVhZWjE2MTYxNjE2IGlzIGp1c3QgYW4gYWJzdHJhY3Rpb24gb2YgYSBwaXhlbCBm b3JtYXQsIGF0IGxlYXN0IHRoYXQncyBob3cgSSdtCj4gaW50ZXJwcmV0aW5nIHRoZSBBWFlaMTYx NjE2MTYuCj4gCj4gUHJldmlvdXNseSBMYXVyZW50IHNwZWNpZmllZCB0aGF0IG1pbi9tYXggdmFs dWVzIHNob3VsZCBiZSBnaXZlbiBpbiB0aGUgZm9ybWF0Cj4gb2YgdGhlIHBsYW5lcyBmcmFtZWJ1 ZmZlci4gVGhpcyBkb2Vzbid0IHdvcmsgZm9yIGEgY2FzZSBvZiBzZXR0aW5nIHByb3BlcnR5IGZv cgo+IGEgZGlzYWJsZWQgcGxhbmUgYmVjYXVzZSBkaXNhYmxlZCBwbGFuZSBkb2Vzbid0IGhhdmUg YSBmcmFtZWJ1ZmZlci4gVGhpcyBhbHNvCj4gZG9lc24ndCB3b3JrIGZvciBUZWdyYSB0aGF0IGNh biB0YWtlIG9ubHkgWFJHQjg4ODggZm9ybWF0IGZvciBhIGNvbG9yIGtleSwgQUZBSUsKPiBIVyBp bnRlcm5hbGx5IGNvbnZlcnRzIGFsbCBwaXhlbCBmb3JtYXRzIHRvIEFSR0I4ODg4IGFuZCBSR0Ig cGFydCBwYXJ0aWNpcGF0ZXMKPiBpbiB0aGUgY29sb3IgbWF0Y2hpbmcgKGxhdGVyIFRlZ3JhJ3Mg c3VwcG9ydCBhbHBoYSBjaGFubmVsIG1hdGNoaW5nIGFzIHdlbGwpLgo+IEhlbmNlIEkgYWRkZWQg dGhlIGZvcm1hdCBwcm9wZXJ0eSB0aGF0IGV4cGxpY2l0bHkgdGVsbHMgaW4gd2hhdCBmb3JtYXQg dGhlIGNvbG9yCj4ga2V5IGludGVnZXIgdmFsdWUgaXMgZ2l2ZW4uCj4gCj4gSSdtIG5vdyB0aGlu a2luZyB0aGF0IGZvcm1hdCBwcm9wZXJ0eSBzaG91bGQgYmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug aW4gYSBmb3JtCj4gb2YgYSBFTlVNLWxpc3QsIGJlY2F1c2Ugb3RoZXJ3aXNlIHVzZXJzcGFjZSBk b2Vzbid0IGtub3cgd2hhdCBjb2xvciBrZXkgZm9ybWF0cwo+IGFyZSBzdXBwb3J0ZWQgYnkgdGhl IERSTSBkcml2ZXIuCgpJJ20gbm90IHN1cmUgdGhhdCdsbCBoZWxwIHBhcnRpY3VsYXJseSBtdWNo LiBHZW5lcmFsbHkgeW91IGNhbid0IApjaG9vc2UgdGhlIGZvcm1hdCBhbnl3YXksIGFuZCBpdCBt YXkganVzdCBkZXBlbmRzIG9uIHRoZSBmYiBmb3JtYXQKb3Igc29tZSBvdGhlciByZWxhdGVkIGZh Y3RvcnMuIFNvIG5vdCByZWFsbHkgc3VyZSBob3cgbXVjaCBiZW5lZml0CnN1Y2ggYW4gZW51bSB3 b3VsZCBoYXZlLgoKQW5kIGZvciBodyB3aGVyZSBlZy4gdGhlIGNvbG9ya2V5IGlzIGFsd2F5cyBS R0IgZXZlbiBmb3IgWVVWIGRhdGEKKG9yIHZpY2UgdmVyc2EpIHdlIGNvdWxkIGp1c3QgZG8gdGhl IFlVVjwtPlJHQiBjb252ZXJzaW9uIGluIHRoZQpkcml2ZXIgZm9yIHRoZSBjb2xvcmtleSB2YWx1 ZSBwcm92aWRlZCBieSB0aGUgdXNlci4gVGhlIGRyaXZlciBpcwppbiB0aGUgYmVzdCBwb3NpdGlv biB0byBrbm93IHRoZSBleGFjdCBZVVY8LT5SR0IgY29udmVyc2lvbiBmb3JtdWxhCnVzZWQgYnkg dGhlIGhhcmR3YXJlIGFueXdheS4KCj4gCj4gQW5kIHByb2JhYmx5IHNvbWVob3cgdXNlcnNwYWNl IHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGF0IGNvbG9ya2V5IGZvcm1hdAo+IHNob3VsZCBt YXRjaCB0aGUgZnJhbWVidWZmZXJzIGZvcm1hdCBpZiB0aGF0J3Mgd2hhdCBkcml2ZXIgZXhwZWN0 cy4gTWF5YmUgYQo+IHJlYWQtb25seSBwcm9wZXJ0eT8KPiAKPiA+PiArICoKPiA+PiArICoJRHJp dmVycyByZXR1cm4gYW4gZXJyb3IgZnJvbSB0aGVpciBwbGFuZSBhdG9taWMgY2hlY2sgaWYgcGl4 ZWwgZm9ybWF0Cj4gPj4gKyAqCWlzIHVuc3VwcG9ydGVkLgo+ID4+ICsgKgo+ID4+ICsgKiBjb2xv cmtleS5tYXNrOgo+ID4+ICsgKglUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgcGl4ZWwgY29t cG9uZW50cyBtYXNrLiBVbm1hc2tlZCBwaXhlbAo+ID4+ICsgKgljb21wb25lbnRzIGFyZSBub3Qg cGFydGljaXBhdGluZyBpbiB0aGUgbWF0Y2hpbmcuIFRoaXMgbWFzayB2YWx1ZSBpcwo+ID4+ICsg KglhcHBsaWVkIHRvIGNvbG9ya2V5Lm1pbiAvIG1heCB2YWx1ZXMuIFRoZSBtYXNrIHZhbHVlIGlz IGdpdmVuIGluIGEKPiA+PiArICoJZm9ybSBvZiBEUk0gZm91cmNjIGNvZGUgY29ycmVzcG9uZGlu ZyB0byB0aGUgY29sb3JrZXkuZm9ybWF0IHByb3BlcnR5Lgo+ID4+ICsgKgo+ID4+ICsgKglGb3Ig ZXhhbXBsZTogdXNlcnNwYWNlIHNoYWxsIHNldCB0aGUgY29sb3JrZXkubWFzayB0byAweDAwMDBm ZjAwCj4gPj4gKyAqCXRvIG1hdGNoIG9ubHkgdGhlIGdyZWVuIGNvbXBvbmVudCBpZiBjb2xvcmtl eS5mb3JtYXQgaXMgc2V0IHRvCj4gPj4gKyAqCURSTV9GT1JNQVRfWFJHQjg4ODguCj4gPj4gKyAq Cj4gPj4gKyAqCURyaXZlcnMgcmV0dXJuIGFuIGVycm9yIGZyb20gdGhlaXIgcGxhbmUgYXRvbWlj IGNoZWNrIGlmIG1hc2sgdmFsdWUKPiA+PiArICoJY2FuJ3QgYmUgaGFuZGxlZC4KPiA+PiArICoK PiA+PiArICogY29sb3JrZXkuaW52ZXJ0ZWQtbWF0Y2g6Cj4gPj4gKyAqCVRoaXMgcHJvcGVydHkg c3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1hdGNoaW5nIG1pbi1tYXggcmFuZ2Ugc2hvdWxkCj4gPj4g KyAqCWJlIGludmVydGVkLCBpLmUuIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBnaXZlbiBjb2xvciBy YW5nZSBiZWNvbWUKPiA+PiArICoJdGhlIGNvbG9yIGtleSBtYXRjaC4KPiA+PiArICoKPiA+PiAr ICoJRHJpdmVycyByZXR1cm4gYW4gZXJyb3IgZnJvbSB0aGVpciBwbGFuZSBhdG9taWMgY2hlY2sg aWYgaW52ZXJzaW9uCj4gPj4gKyAqCW1vZGUgY2FuJ3QgYmUgaGFuZGxlZC4KPiA+IAo+ID4gSG1t LiBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIG1lYW5zIGZvciB0aGUgc3JjIHZz LiBkc3QKPiA+IGNvbG9ya2V5IG1vZGVzLiBUaG9zZSBwcmV0dHkgbXVjaCBhbHJlYWR5IGhhdmUg YW4gaW52ZXJ0ZWQgbWVhbmluZyB3aGVuCj4gPiBjb21wYXJlZCB0byBlYWNoIG90aGVyLiBTbyBJ IGNhbid0IGZpZ3VyZSBvdXQgZnJvbSB0aGVzZSBkb2NzIHdoZXRoZXIgCj4gPiB5b3UncmUgc3Vw cG9zZWQgdG8gdXNlIHRoaXMgd2hlbiB5b3Ugd2FudCBhIG5vcm1hbCBkc3QgY2tleSBvciBub3Jt YWwKPiA+IHNyYyBrZXkgc2VtYW50aWNzLgo+ID4gCj4gCj4gSSBhbHNvIGNvdWxkbid0IHVuZGVy c3RhbmQgd2hhdCBpbml0aWFsIHNlbWFudGljIHRvIHNyYy9kc3Qgd2FzIGdpdmVuIGJ5IExhdXJl bnQuCj4gCj4gSW4gYSBjYXNlIG9mIHRoaXMgcGF0Y2g6Cj4gCj4gVGhlIHNyYy9kc3QtbWF0Y2gg c3BlY2lmaWVzIHRoZSAic291cmNlIiBwbGFuZSBmb3Igd2hpY2ggdGhlIGNvbG9yIG1hdGNoaW5n IGlzCj4gcGVyZm9ybWVkLiBTcmMgbWVhbnMgdGhlIHBsYW5lIHRvIHdoaWNoIHRoZSBjb2xvcmtl eSBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkLiBEc3QKPiBtZWFucyBwbGFuZXMgb3RoZXIgdGhhbiBw bGFuZSBYIHRvIHdoaWNoIHRoZSBjb2xvcmtleSBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkLCBpbgo+ IHBhcnRpY3VsYXIgdGhlIHBsYW5lcyB0aGF0IGFyZSBaLXBvc2l0aW9uZWQgdW5kZXIgdGhlIHBs YW5lIFguIEhvcGUgdGhhdCdzIG1vcmUKPiBjbGVhciBub3cuCj4gCj4gVGhlIHNyYy1yZXBsYWNl IHBhcnQgc3BlY2lmaWVzIHRoYXQgcGl4ZWxzIG9mIHRoZSBwbGFuZSB0byB3aGljaCB0aGUgY29s b3JrZXkKPiBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIHdpbGwgYmUgcmVwbGFjZWQuCj4gCj4gSSds bCB0cnkgdG8gcmUtd29yayB0aGUgZG9jIGlmIHRoZSBhYm92ZSBzb3VuZHMgZ29vZC4KPiAKPiBU aGUgaW52ZXJ0ZWQtbWF0Y2ggcHJvcGVydHkgY29udHJvbHMgd2hldGhlciBnaXZlbiBjb2xvci1t YXRjaCByYW5nZSBzaGFsbCBiZQo+IGludmVydGVkLCBsaWtlIGZvciBleGFtcGxlOiBpZiBnaXZl biBjb2xvciBrZXkgaXMgYSByZWQgY29sb3IsIHRoZW4gYWxsIGNvbG9ycwo+IGV4cGVjdCB0aGUg cmVkIHdpbGwgYmUgbWF0Y2hlZCBhcyBhIGNvbG9yIGtleS4KPiAKPiBBY3R1YWxseSBtYXliZSBp bnZlcnNpb24gY291bGQgYmUgZXhwcmVzc2VkIHVzaW5nIHRoZSBtYXNrIHNvbGVseS4gTGlrZSB3 ZSBjb3VsZAo+IGFkZCBhIGhlbHBlciB0aGF0IGNvbnZlcnRzICJ2YWx1ZSttYXNrIiBpbnRvICJ2 YWx1ZT0odmFsdWUgJiB+bWFzayksCj4gaW52ZXJzaW9uPXRydWUiIGlmIG1hc2sgaGFzIGZvcm0g b2YgMHgxMTAwMDExMSwgdGhvdWdoIHRoaXMgY291bGQgYmUgbm90Cj4gYXBwbGljYWJsZSB0byBh bGwgcG9zc2libGUgcGl4ZWwgZm9ybWF0cy4uIG5vdCBzdXJlLgo+IAo+ID4+ICsgKgo+ID4+ICsg KiBjb2xvcmtleS5yZXBsYWNlbWVudC12YWx1ZToKPiA+PiArICoJVGhpcyBwcm9wZXJ0eSBzcGVj aWZpZXMgdGhlIGNvbG9yIHZhbHVlIHRoYXQgcmVwbGFjZXMgcGl4ZWxzIG1hdGNoaW5nCj4gPj4g KyAqCXRoZSBjb2xvciBrZXkuIFRoZSB2YWx1ZSBpcyBleHByZXNzZWQgaW4gQVhZWjE2MTYxNjE2 IGZvcm1hdCwgd2hlcmUgQQo+ID4+ICsgKglpcyB0aGUgYWxwaGEgdmFsdWUgYW5kIFgsIFkgYW5k IFogY29ycmVzcG9uZCB0byB0aGUgY29sb3IgY29tcG9uZW50cwo+ID4+ICsgKglvZiB0aGUgY29s b3JrZXkucmVwbGFjZW1lbnQtZm9ybWF0Lgo+ID4+ICsgKgo+ID4+ICsgKglEcml2ZXJzIHJldHVy biBhbiBlcnJvciBmcm9tIHRoZWlyIHBsYW5lIGF0b21pYyBjaGVjayBpZiByZXBsYWNlbWVudAo+ ID4+ICsgKgl2YWx1ZSBjYW4ndCBiZSBoYW5kbGVkLgo+ID4+ICsgKgo+ID4+ICsgKiBjb2xvcmtl eS5yZXBsYWNlbWVudC1mb3JtYXQ6Cj4gPj4gKyAqCVRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRo ZSBwaXhlbCBmb3JtYXQgZm9yIHRoZQo+ID4+ICsgKgljb2xvcmtleS5yZXBsYWNlbWVudC12YWx1 ZSBwcm9wZXJ0eS4gVGhlIGZvcm1hdCBpcyBnaXZlbiBpbiBhIGZvcm0gb2YKPiA+PiArICoJRFJN IGZvdXJjYyBjb2RlLgo+ID4gCj4gPiBBZ2FpbiB0aGlzIHNlZW1zIGF0IG9kZHMgd2l0aCB0aGUg MTZicGMgcmVwbGFjZW1lbnQtdmFsdWUuCj4gPiAKPiA+PiArICoKPiA+PiArICoJRHJpdmVycyBy ZXR1cm4gYW4gZXJyb3IgZnJvbSB0aGVpciBwbGFuZSBhdG9taWMgY2hlY2sgaWYgcmVwbGFjZW1l bnQKPiA+PiArICoJcGl4ZWwgZm9ybWF0IGlzIHVuc3VwcG9ydGVkLgo+ID4+ICsgKgo+ID4+ICsg KiBjb2xvcmtleS5yZXBsYWNlbWVudC1tYXNrOgo+ID4+ICsgKglUaGlzIHByb3BlcnR5IHNwZWNp ZmllcyB0aGUgcGl4ZWwgY29tcG9uZW50cyBtYXNrIHRoYXQgZGVmaW5lcwo+ID4+ICsgKgl3aGF0 IGNvbXBvbmVudHMgb2YgdGhlIGNvbG9ya2V5LnJlcGxhY2VtZW50LXZhbHVlIHdpbGwgcGFydGlj aXBhdGUgaW4KPiA+PiArICoJcmVwbGFjZW1lbnQgb2YgdGhlIHBpeGVscyBjb2xvci4gVW5tYXNr ZWQgcGl4ZWwgY29tcG9uZW50cyBhcmUgbm90Cj4gPj4gKyAqCXBhcnRpY2lwYXRpbmcgaW4gdGhl IHJlcGxhY2VtZW50Lgo+ID4gCj4gPiBEb2VzIHRoYXQgbWVhbiB0aGF0IHRoZSBkYXRhIGZvciB0 aGUgdW5tYXNrZWQgYml0cyB3aWxsIGJlIGNvbWluZwo+ID4gZnJvbSB0aGUgc291cmNlPwo+ID4g Cj4gCj4gWWVhaCwgSSBzZWUgdGhhdCAic291cmNlIiBpcyB2YWd1ZWx5IGRlZmluZWQuCj4gCj4g WWVzLCB0aGUgdW5tYXNrZWQgYml0cyBhcmUgY29taW5nIGZyb20gdGhlIHNvdXJjZS4gVGhlICJz b3VyY2UiIGlzIGRlZmluZWQgYnkKPiB0aGUgbW9kZS4KPiAKPiBzcmMtbWF0Y2gtIC0tPlNSQzwt LSAtcmVwbGFjZQo+IGRzdC1tYXRjaC0gLS0+U1JDPC0tIC1yZXBsYWNlCj4gCj4gU3JjIG1lYW5z IHRoZSBwbGFuZSB0byB3aGljaCB0aGUgY29sb3JrZXkgcHJvcGVydGllcyBhcmUgYXBwbGllZCwg YXMgSSBzdGF0ZWQgYWJvdmUuCj4gCj4gPj4gVGhlIG1hc2sgdmFsdWUgaXMgZ2l2ZW4gaW4gYSBm b3JtIG9mCj4gPj4gKyAqCURSTSBmb3VyY2MgY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2xv cmtleS5yZXBsYWNlbWVudC1mb3JtYXQKPiA+PiArICoJcHJvcGVydHkuCj4gPj4gKyAqCj4gPj4g KyAqCUZvciBleGFtcGxlOiB1c2Vyc3BhY2Ugc2hhbGwgc2V0IHRoZSBjb2xvcmtleS5yZXBsYWNl bWVudC1tYXNrIHRvCj4gPj4gKyAqCTB4MDAwMGZmMDAgdG8gcmVwbGFjZSBvbmx5IHRoZSBncmVl biBjb21wb25lbnQgaWYKPiA+PiArICoJY29sb3JrZXkucmVwbGFjZW1lbnQtZm9ybWF0IGlzIHNl dCB0byBEUk1fRk9STUFUX1hSR0I4ODg4Lgo+ID4+ICsgKgo+ID4+ICsgKglVc2Vyc3BhY2Ugc2hh bGwgc2V0IGNvbG9ya2V5LnJlcGxhY2VtZW50LW1hc2sgdG8gMCB0byBkaXNhYmxlIHRoZSBjb2xv cgo+ID4+ICsgKglyZXBsYWNlbWVudC4gSW4gdGhpcyBjYXNlIG1hdGNoaW5nIHBpeGVscyBiZWNv bWUgdHJhbnNwYXJlbnQuCj4gPj4gKyAqCj4gPj4gKyAqCURyaXZlcnMgcmV0dXJuIGFuIGVycm9y IGZyb20gdGhlaXIgcGxhbmUgYXRvbWljIGNoZWNrIGlmIHJlcGxhY2VtZW50Cj4gPj4gKyAqCW1h c2sgdmFsdWUgY2FuJ3QgYmUgaGFuZGxlZC4KPiA+PiArICoKPiA+PiArICogUmV0dXJuczoKPiA+ PiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ID4+ICsg Ki8KPiA+PiAraW50IGRybV9wbGFuZV9jcmVhdGVfY29sb3JrZXlfcHJvcGVydGllcyhzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKPiA+PiArCQkJCQkgdTMyIHN1cHBvcnRlZF9tb2RlcykKPiA+PiAr ewo+ID4+ICsJc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBtb2Rlc19saXN0W0RSTV9QTEFORV9D T0xPUktFWV9NT0RFU19OVU1dOwo+ID4+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqcmVwbGFjZW1l bnRfZm9ybWF0X3Byb3A7Cj4gPj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpyZXBsYWNlbWVudF92 YWx1ZV9wcm9wOwo+ID4+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqcmVwbGFjZW1lbnRfbWFza19w cm9wOwo+ID4+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqaW52ZXJ0ZWRfbWF0Y2hfcHJvcDsKPiA+ PiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcm1hdF9wcm9wOwo+ID4+ICsJc3RydWN0IGRybV9w cm9wZXJ0eSAqbWFza19wcm9wOwo+ID4+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqbW9kZV9wcm9w Owo+ID4+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqbWluX3Byb3A7Cj4gPj4gKwlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICptYXhfcHJvcDsKPiA+PiArCXVuc2lnbmVkIGludCBtb2Rlc19udW0gPSAwOwo+ ID4+ICsJdW5zaWduZWQgaW50IGk7Cj4gPj4gKwo+ID4+ICsJLyogYXQgbGVhc3QgdHdvIG1vZGVz IHNob3VsZCBiZSBzdXBwb3J0ZWQgKi8KPiA+PiArCWlmICghc3VwcG9ydGVkX21vZGVzKQo+ID4+ ICsJCXJldHVybiAtRUlOVkFMOwo+ID4+ICsKPiA+PiArCS8qIG1vZGVzIGFyZSBkcml2ZXItc3Bl Y2lmaWMsIGJ1aWxkIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtb2RlcyAqLwo+ID4+ICsJZm9yIChp ID0gMDsgaSA8IERSTV9QTEFORV9DT0xPUktFWV9NT0RFU19OVU07IGkrKykgewo+ID4+ICsJCWlm ICghKHN1cHBvcnRlZF9tb2RlcyAmIEJJVChpKSkpCj4gPj4gKwkJCWNvbnRpbnVlOwo+ID4+ICsK PiA+PiArCQltb2Rlc19saXN0W21vZGVzX251bV0ubmFtZSA9IHBsYW5lX2NvbG9ya2V5X21vZGVf bmFtZVtpXTsKPiA+PiArCQltb2Rlc19saXN0W21vZGVzX251bV0udHlwZSA9IGk7Cj4gPj4gKwkJ bW9kZXNfbnVtKys7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJbW9kZV9wcm9wID0gZHJtX3Byb3Bl cnR5X2NyZWF0ZV9lbnVtKHBsYW5lLT5kZXYsIDAsICJjb2xvcmtleS5tb2RlIiwKPiA+PiArCQkJ CQkgICAgIG1vZGVzX2xpc3QsIG1vZGVzX251bSk7Cj4gPj4gKwlpZiAoIW1vZGVfcHJvcCkKPiA+ PiArCQlyZXR1cm4gLUVOT01FTTsKPiA+PiArCj4gPj4gKwltYXNrX3Byb3AgPSBkcm1fcHJvcGVy dHlfY3JlYXRlX3JhbmdlKHBsYW5lLT5kZXYsIDAsICJjb2xvcmtleS5tYXNrIiwKPiA+PiArCQkJ CQkgICAgICAwLCBVNjRfTUFYKTsKPiA+PiArCWlmICghbWFza19wcm9wKQo+ID4+ICsJCWdvdG8g ZXJyX2Rlc3Ryb3lfbW9kZV9wcm9wOwo+ID4+ICsKPiA+PiArCW1pbl9wcm9wID0gZHJtX3Byb3Bl cnR5X2NyZWF0ZV9yYW5nZShwbGFuZS0+ZGV2LCAwLCAiY29sb3JrZXkubWluIiwKPiA+PiArCQkJ CQkgICAgIDAsIFU2NF9NQVgpOwo+ID4+ICsJaWYgKCFtaW5fcHJvcCkKPiA+PiArCQlnb3RvIGVy cl9kZXN0cm95X21hc2tfcHJvcDsKPiA+PiArCj4gPj4gKwltYXhfcHJvcCA9IGRybV9wcm9wZXJ0 eV9jcmVhdGVfcmFuZ2UocGxhbmUtPmRldiwgMCwgImNvbG9ya2V5Lm1heCIsCj4gPj4gKwkJCQkJ ICAgICAwLCBVNjRfTUFYKTsKPiA+PiArCWlmICghbWF4X3Byb3ApCj4gPj4gKwkJZ290byBlcnJf ZGVzdHJveV9taW5fcHJvcDsKPiA+PiArCj4gPj4gKwlmb3JtYXRfcHJvcCA9IGRybV9wcm9wZXJ0 eV9jcmVhdGVfcmFuZ2UocGxhbmUtPmRldiwgMCwKPiA+PiArCQkJCQkiY29sb3JrZXkuZm9ybWF0 IiwKPiA+PiArCQkJCQkwLCBVMzJfTUFYKTsKPiA+PiArCWlmICghZm9ybWF0X3Byb3ApCj4gPj4g KwkJZ290byBlcnJfZGVzdHJveV9tYXhfcHJvcDsKPiA+PiArCj4gPj4gKwlpbnZlcnRlZF9tYXRj aF9wcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ib29sKHBsYW5lLT5kZXYsIDAsCj4gPj4gKwkJ CQkJImNvbG9ya2V5LmludmVydGVkLW1hdGNoIik7Cj4gPj4gKwlpZiAoIWludmVydGVkX21hdGNo X3Byb3ApCj4gPj4gKwkJZ290byBlcnJfZGVzdHJveV9mb3JtYXRfcHJvcDsKPiA+PiArCj4gPj4g KwlyZXBsYWNlbWVudF9tYXNrX3Byb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX3JhbmdlKHBsYW5l LT5kZXYsIDAsCj4gPj4gKwkJCQkJImNvbG9ya2V5LnJlcGxhY2VtZW50LW1hc2siLAo+ID4+ICsJ CQkJCTAsIFU2NF9NQVgpOwo+ID4+ICsJaWYgKCFyZXBsYWNlbWVudF9tYXNrX3Byb3ApCj4gPj4g KwkJZ290byBlcnJfZGVzdHJveV9pbnZlcnRlZF9tYXRjaF9wcm9wOwo+ID4+ICsKPiA+PiArCXJl cGxhY2VtZW50X3ZhbHVlX3Byb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX3JhbmdlKHBsYW5lLT5k ZXYsIDAsCj4gPj4gKwkJCQkJImNvbG9ya2V5LnJlcGxhY2VtZW50LXZhbHVlIiwKPiA+PiArCQkJ CQkwLCBVNjRfTUFYKTsKPiA+PiArCWlmICghcmVwbGFjZW1lbnRfdmFsdWVfcHJvcCkKPiA+PiAr CQlnb3RvIGVycl9kZXN0cm95X3JlcGxhY2VtZW50X21hc2tfcHJvcDsKPiA+PiArCj4gPj4gKwly ZXBsYWNlbWVudF9mb3JtYXRfcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UocGxhbmUt PmRldiwgMCwKPiA+PiArCQkJCQkiY29sb3JrZXkucmVwbGFjZW1lbnQtZm9ybWF0IiwKPiA+PiAr CQkJCQkwLCBVNjRfTUFYKTsKPiA+PiArCWlmICghcmVwbGFjZW1lbnRfZm9ybWF0X3Byb3ApCj4g Pj4gKwkJZ290byBlcnJfZGVzdHJveV9yZXBsYWNlbWVudF92YWx1ZV9wcm9wOwo+ID4gCj4gPiBJ IGRvbid0IHRoaW5rIHdlIHdhbnQgdG8gYWRkIGFsbCB0aGVzZSBwcm9wcyBmb3IgZXZlcnkgZHJp dmVyL2hhcmR3YXJlLgo+ID4gSU1PIHRoZSBzZXQgb2YgcHJvcHMgd2UgZXhwb3NlIHNob3VsZCBk ZXBlbmQgb24gdGhlIHN1cHBvcnRlZCBzZXQgb2YKPiA+IGNvbG9ya2V5aW5nIG1vZGVzLgo+ID4g Cj4gCj4gUHJvYmFibHksIEkgZG9uJ3QgbWluZC4gVGhpcyBzaG91bGQgYmUgZG9jdW1lbnRlZCB0 aGVuLCBJIGNhbiBhZGRyZXNzIHRoYXQgaW4KPiB0aGUgbmV4dCBpdGVyYXRpb24uCj4gCj4gL0kg dGhpbmsvIGFsbCBvZiB0aGUgY3VycmVudGx5LWRlZmluZWQgcHJvcGVydGllcyBhcmUgcmVsZXZh bnQgdG8gdGhlIGRlZmluZWQKPiBjb2xvciBrZXlpbmcgbW9kZXMuCgppOTE1IHdpbGwgd2FudCBq dXN0IHZhbHVlL21hc2sgb3IgbWluL21heCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUKZGVh bGluZyB3aXRoIHJnYiBvciB5dXYuIEFuZCBJJ3ZlIHNlZW4gYSBsb3Qgb2YgaGFyZHdhcmUgd2l0 aCBqdXN0IHRoZQp2YWx1ZS9tYXNrIGFwcHJvYWNoIG92ZXIgdGhlIHllYXJzLgoKPiBMYXRlciwg aWYgdGhlIGxpc3Qgb2YgbW9kZXMgd2lsbCBiZSBleHRlbmRlZCB3aXRoIG5ldyBtb2RlcywKPiB0 aGUgY3JlYXRpb24gb2YgcHJvcGVydGllcyBjb3VsZCBiZSBjb25kaXRpb25hbGl6ZWQuCj4gCj4g VGhvdWdoIG1heWJlICJjb2xvciBjb21wb25lbnRzIHJlcGxhY2VtZW50IiBhbmQgInJlcGxhY2Vt ZW50IHdpdGggYSBjb21wbGV0ZQo+IHRyYW5zcGFyZW5jeSIgY291bGQgYmUgZmFjdG9yZWQgb3V0 IGludG8gYSBzcGVjaWZpYyBjb2xvciBrZXlpbmcgbW9kZXMuCgpZZXMuIEkndmUgbmV2ZXIgc2Vl biB0aG9zZSBpbiBhbnkgaGFyZHdhcmUuIEluIGZhY3QgSSdtIHdvbmRlcmluZyB3aGVyZQppcyB0 aGUgdXNlcnNwYWNlIGZvciBhbGwgdGhlc2UgY29tcGxleCBtb2Rlcz8gSWUuIHNob3VsZCB3ZSBl dmVuIGJvdGhlcgp3aXRoIHRoZW0gYXQgdGhpcyB0aW1lPwoKLS0gClZpbGxlIFN5cmrDpGzDpApJ bnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK