From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 13/15] drm/i915/tv: Generate better pipe timings for TV encoder Date: Tue, 22 Jan 2019 19:22:24 +0200 Message-ID: <20190122172224.GP5527@ideak-desk.fi.intel.com> References: <20181112170000.27531-1-ville.syrjala@linux.intel.com> <20181112170000.27531-15-ville.syrjala@linux.intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181112170000.27531-15-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville Syrjala Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBOb3YgMTIsIDIwMTggYXQgMDY6NTk6NThQTSArMDIwMCwgVmlsbGUgU3lyamFsYSB3 cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IAo+IFRvIG1ha2UgdmJsYW5rIHRpbWVzdGFtcHMgd29yayBiZXR0ZXIgd2l0aCB0aGUg VFYgZW5jb2RlciBsZXQncwo+IHNjYWxlIHRoZSBwaXBlIHRpbWluZ3Mgc3VjaCB0aGF0IHRoZSBy ZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUKPiBUViBhY3RpdmUgYW5kIFRWIGJsYW5raW5nIHBlcmlv ZHMgaXMgbWlycm9yZWQgaW4gdGhlCj4gY29ycmVzcG9uZGluZyBwaXBlIHRpbWluZ3MuCj4gCj4g Tm90ZSB0aGF0IGluIHJlYWxpdHkgdGhlIHBpcGUgcnVucyBhdCBhIGZhc3RlciBzcGVlZCBkdXJp bmcgdGhlCj4gVFYgdmJsYW5rLCBhbmQgY29ycmVzcG9uZGlnbHkgdGhlcmUgYXJlIHBlcmlvZHMg d2hlbiB0aGUgcGlwZQo+IGlzIGVuaXRyZWx5IHN0b3BwZWQuIFdlIHByZXRlbmQgdGhhdCB0aGlz IGlzbid0IHRoZSBjYXNlIGFuZAo+IGFzIHN1Y2ggd2UgaW5jdXIgc29tZSBlcnJvciBpbiB0aGUg dmJsYW5rIHRpbWVzdGFtcHMgZHVyaW5nCj4gdGhlIFRWIHZibGFuay4gRnVydGhlciBleHBsYW5h dGlvbiBvZiB0aGUgaXNzdWVzIGluIGEgYmlnCj4gY29tbWVudCBpbiB0aGUgY29kZS4KPiAKPiBU aGlzIG1ha2VzIHRoZSB2YmxhbmsgdGltZXN0YW1wcyBnb29kIGVub3VnaCB0byBtYWtlCj4gaTk2 NWdtICh3aGljaCBkb2Vzbid0IGhhdmUgYSB3b3JraW5nIGZyYW1lIGNvdW50ZXIgd2l0aAo+IHRo ZSBUViBlbmNvZGVyKSByZXBvcnQgY29ycmVjdCBmcmFtZSBudW1iZXJzLiBQcmV2aW91c2x5Cj4g eW91IGNvdWxkIGdldCBhbGwga2luZHMgb2Ygbm9uc2Vuc2Ugd2hpY2ggcmVzdWx0ZWQgaW4KPiBl Zy4gZ2x4Z2VhcnMgcmVwb3J0aW5nIHRoYXQgaXQncyBydW5uaW5nIGF0IHR3aWNlIHRoZQo+IGFj dHVhbCBmcmFtZXJhdGUgaW4gbW9zdCBjYXNlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdHYuYyB8IDMyMiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ICAyIGZp bGVzIGNoYW5nZWQsIDI3OCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCBmZTRiOTEzZTQ2YWMuLjEwODEzYWU3YmVlNyAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC00ODQ4LDYgKzQ4NDgsNyBAQCBlbnVtIHsK PiAgIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV9OT05FCQkoMiA8PCAxOCkKPiAgLyogU2VsZWN0cyA4 eCBvdmVyc2FtcGxpbmcgKi8KPiAgIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV84WAkJKDMgPDwgMTgp Cj4gKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfTUFTSwkJKDMgPDwgMTgpCj4gIC8qIFNlbGVjdHMg cHJvZ3Jlc3NpdmUgbW9kZSByYXRoZXIgdGhhbiBpbnRlcmxhY2VkICovCj4gICMgZGVmaW5lIFRW X1BST0dSRVNTSVZFCQkJKDEgPDwgMTcpCj4gIC8qIFNldHMgdGhlIGNvbG9yYnVyc3QgdG8gUEFM IG1vZGUuICBSZXF1aXJlZCBmb3Igbm9uLU0gUEFMIG1vZGVzLiAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdHYuYwo+IGluZGV4IDIxNjUyNWRkMTQ0YS4uNzUxMjZmY2U2NTVkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF90di5jCj4gQEAgLTM0MCw3ICszNDAsNiBAQCBzdHJ1Y3QgdHZfbW9kZSB7Cj4g IAljb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzICpjb21wb3NpdGVfbGV2ZWxzLCAqc3ZpZGVvX2xl dmVsczsKPiAgCWNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uICpjb21wb3NpdGVfY29sb3Is ICpzdmlkZW9fY29sb3I7Cj4gIAljb25zdCB1MzIgKmZpbHRlcl90YWJsZTsKPiAtCXUxNiBtYXhf c3JjdzsKPiAgfTsKPiAgCj4gIAo+IEBAIC03MjksNyArNzI4LDYgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCB0dl9tb2RlIHR2X21vZGVzW10gPSB7Cj4gIAkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2Us Cj4gIAo+ICAJCS5maWx0ZXJfdGFibGUgPSBmaWx0ZXJfdGFibGUsCj4gLQkJLm1heF9zcmN3ID0g ODAwCj4gIAl9LAo+ICAJewo+ICAJCS5uYW1lICAgICAgID0gIjEwODBpQDUwSHoiLAo+IEBAIC05 NDcsMTMgKzk0NSwxODMgQEAgaW50ZWxfdHZfbW9kZV92ZGlzcGxheShjb25zdCBzdHJ1Y3QgdHZf bW9kZSAqdHZfbW9kZSkKPiAgCQlyZXR1cm4gMiAqICh0dl9tb2RlLT5uYnJfZW5kICsgMSk7Cj4g IH0KPiAgCj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX3R2X21vZGVfdG9fbW9kZShzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZf bW9kZSkKPiArewo+ICsJbW9kZS0+Y2xvY2sgPSB0dl9tb2RlLT5jbG9jayAvCj4gKwkJKHR2X21v ZGUtPm92ZXJzYW1wbGUgPj4gIXR2X21vZGUtPnByb2dyZXNzaXZlKTsKPiArCj4gKwkvKgo+ICsJ ICogdHZfbW9kZSBob3Jpem9udGFsIHRpbWluZ3M6Cj4gKwkgKgo+ICsJICogaHN5bmNfZW5kCj4g KwkgKiAgICB8IGhibGFua19lbmQKPiArCSAqICAgIHwgICAgfCBoYmxhbmtfc3RhcnQKPiArCSAq ICAgIHwgICAgfCAgICAgICB8IGh0b3RhbAo+ICsJICogICAgfCAgICAgX19fX19fXyAgICB8Cj4g KwkgKiAgICAgX19fXy8gICAgICAgXF9fXwo+ICsJICogXF9fLyAgICAgICAgICAgICAgICBcCj4g KwkgKi8KPiArCW1vZGUtPmhkaXNwbGF5ID0KPiArCQl0dl9tb2RlLT5oYmxhbmtfc3RhcnQgLSB0 dl9tb2RlLT5oYmxhbmtfZW5kOwo+ICsJbW9kZS0+aHN5bmNfc3RhcnQgPSBtb2RlLT5oZGlzcGxh eSArCj4gKwkJdHZfbW9kZS0+aHRvdGFsIC0gdHZfbW9kZS0+aGJsYW5rX3N0YXJ0Owo+ICsJbW9k ZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKwo+ICsJCXR2X21vZGUtPmhzeW5jX2Vu ZDsKPiArCW1vZGUtPmh0b3RhbCA9IHR2X21vZGUtPmh0b3RhbCArIDE7Cj4gKwo+ICsJLyoKPiAr CSAqIHR2X21vZGUgdmVydGljYWwgdGltaW5nczoKPiArCSAqCj4gKwkgKiB2c3luY19zdGFydAo+ ICsJICogICAgfCB2c3luY19lbmQKPiArCSAqICAgIHwgIHwgdmlfZW5kIG5icl9lbmQKPiArCSAq ICAgIHwgIHwgICAgfCAgICAgICB8Cj4gKwkgKiAgICB8ICB8ICAgICBfX19fX19fCj4gKwkgKiBc X18gICAgX19fXy8gICAgICAgXAo+ICsJICogICAgXF9fLwo+ICsJICovCj4gKwltb2RlLT52ZGlz cGxheSA9IGludGVsX3R2X21vZGVfdmRpc3BsYXkodHZfbW9kZSk7Cj4gKwlpZiAodHZfbW9kZS0+ cHJvZ3Jlc3NpdmUpIHsKPiArCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsK PiArCQkJdHZfbW9kZS0+dnN5bmNfc3RhcnRfZjEgKyAxOwo+ICsJCW1vZGUtPnZzeW5jX2VuZCA9 IG1vZGUtPnZzeW5jX3N0YXJ0ICsKPiArCQkJdHZfbW9kZS0+dnN5bmNfbGVuOwo+ICsJCW1vZGUt PnZ0b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsKPiArCQkJdHZfbW9kZS0+dmlfZW5kX2YxICsgMTsK PiArCX0gZWxzZSB7Cj4gKwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArCj4g KwkJCXR2X21vZGUtPnZzeW5jX3N0YXJ0X2YxICsgMSArCj4gKwkJCXR2X21vZGUtPnZzeW5jX3N0 YXJ0X2YyICsgMTsKPiArCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArCj4g KwkJCTIgKiB0dl9tb2RlLT52c3luY19sZW47Cj4gKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRp c3BsYXkgKwo+ICsJCQl0dl9tb2RlLT52aV9lbmRfZjEgKyAxICsKPiArCQkJdHZfbW9kZS0+dmlf ZW5kX2YyICsgMTsKPiArCX0KPiArCj4gKwkvKiBUViBoYXMgaXQncyBvd24gbm90aW9uIG9mIHN5 bmMgYW5kIG90aGVyIG1vZGUgZmxhZ3MsIHNvIGNsZWFyIHRoZW0uICovCj4gKwltb2RlLT5mbGFn cyA9IDA7Cj4gKwo+ICsJbW9kZS0+dnJlZnJlc2ggPSAwOwoKUmVkdW5kYW50IGxpbmUuCgo+ICsJ bW9kZS0+dnJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsKPiArCj4gKwlzbnByaW50 Zihtb2RlLT5uYW1lLCBzaXplb2YobW9kZS0+bmFtZSksCj4gKwkJICIlZHglZCVjICglcykiLAo+ ICsJCSBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJIHR2X21vZGUtPnByb2dy ZXNzaXZlID8gJ3AnIDogJ2knLAo+ICsJCSB0dl9tb2RlLT5uYW1lKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaW50ZWxfdHZfc2NhbGVfbW9kZV9ob3JpeihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKPiArCQkJCSAgICAgIGludCBoZGlzcGxheSwgaW50IGxlZnRfbWFyZ2luLAo+ICsJ CQkJICAgICAgaW50IHJpZ2h0X21hcmdpbikKPiArewo+ICsJaW50IGhzeW5jX3N0YXJ0ID0gbW9k ZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSArIHJpZ2h0X21hcmdpbjsKPiArCWludCBo c3luY19lbmQgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oZGlzcGxheSArIHJpZ2h0X21hcmdp bjsKPiArCWludCBuZXdfaHRvdGFsID0gbW9kZS0+aHRvdGFsICogaGRpc3BsYXkgLwo+ICsJCSht b2RlLT5oZGlzcGxheSAtIGxlZnRfbWFyZ2luIC0gcmlnaHRfbWFyZ2luKTsKPiArCj4gKwltb2Rl LT5jbG9jayA9IG1vZGUtPmNsb2NrICogbmV3X2h0b3RhbCAvIG1vZGUtPmh0b3RhbDsKPiArCj4g Kwltb2RlLT5oZGlzcGxheSA9IGhkaXNwbGF5Owo+ICsJbW9kZS0+aHN5bmNfc3RhcnQgPSBoZGlz cGxheSArIGhzeW5jX3N0YXJ0ICogbmV3X2h0b3RhbCAvIG1vZGUtPmh0b3RhbDsKPiArCW1vZGUt PmhzeW5jX2VuZCA9IGhkaXNwbGF5ICsgaHN5bmNfZW5kICogbmV3X2h0b3RhbCAvIG1vZGUtPmh0 b3RhbDsKPiArCW1vZGUtPmh0b3RhbCA9IG5ld19odG90YWw7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGludGVsX3R2X3NjYWxlX21vZGVfdmVydChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKPiArCQkJCSAgICAgaW50IHZkaXNwbGF5LCBpbnQgdG9wX21hcmdpbiwKPiArCQkJCSAgICAg aW50IGJvdHRvbV9tYXJnaW4pCj4gK3sKPiArCWludCB2c3luY19zdGFydCA9IG1vZGUtPnZzeW5j X3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXkgKyBib3R0b21fbWFyZ2luOwo+ICsJaW50IHZzeW5jX2Vu ZCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZkaXNwbGF5ICsgYm90dG9tX21hcmdpbjsKPiAr CWludCBuZXdfdnRvdGFsID0gbW9kZS0+dnRvdGFsICogdmRpc3BsYXkgLwo+ICsJCShtb2RlLT52 ZGlzcGxheSAtIHRvcF9tYXJnaW4gLSBib3R0b21fbWFyZ2luKTsKPiArCj4gKwltb2RlLT5jbG9j ayA9IG1vZGUtPmNsb2NrICogbmV3X3Z0b3RhbCAvIG1vZGUtPnZ0b3RhbDsKPiArCj4gKwltb2Rl LT52ZGlzcGxheSA9IHZkaXNwbGF5Owo+ICsJbW9kZS0+dnN5bmNfc3RhcnQgPSB2ZGlzcGxheSAr IHZzeW5jX3N0YXJ0ICogbmV3X3Z0b3RhbCAvIG1vZGUtPnZ0b3RhbDsKPiArCW1vZGUtPnZzeW5j X2VuZCA9IHZkaXNwbGF5ICsgdnN5bmNfZW5kICogbmV3X3Z0b3RhbCAvIG1vZGUtPnZ0b3RhbDsK PiArCW1vZGUtPnZ0b3RhbCA9IG5ld192dG90YWw7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4g IGludGVsX3R2X2dldF9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkJ ICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAgewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7 Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9Cj4gKwkJJnBpcGVf Y29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBt b2RlID0ge307Cj4gKwl1MzIgdHZfY3RsLCBoY3RsMSwgaGN0bDMsIHZjdGwxLCB2Y3RsMiwgdG1w Owo+ICsJc3RydWN0IHR2X21vZGUgdHZfbW9kZSA9IHt9Owo+ICsJaW50IGhkaXNwbGF5ID0gYWRq dXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKPiArCWludCB2ZGlzcGxheSA9IGFkanVzdGVkX21v ZGUtPmNydGNfdmRpc3BsYXk7Cj4gKwlpbnQgeHNpemUsIHlzaXplLCB4cG9zLCB5cG9zOwo+ICsK PiAgCXBpcGVfY29uZmlnLT5vdXRwdXRfdHlwZXMgfD0gQklUKElOVEVMX09VVFBVVF9UVk9VVCk7 Cj4gIAo+IC0JcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrID0gcGlw ZV9jb25maWctPnBvcnRfY2xvY2s7Cj4gKwl0dl9jdGwgPSBJOTE1X1JFQUQoVFZfQ1RMKTsKPiAr CWhjdGwxID0gSTkxNV9SRUFEKFRWX0hfQ1RMXzEpOwo+ICsJaGN0bDMgPSBJOTE1X1JFQUQoVFZf SF9DVExfMyk7Cj4gKwl2Y3RsMSA9IEk5MTVfUkVBRChUVl9WX0NUTF8xKTsKPiArCXZjdGwyID0g STkxNV9SRUFEKFRWX1ZfQ1RMXzIpOwo+ICsKPiArCXR2X21vZGUuaHRvdGFsID0gKGhjdGwxICYg VFZfSFRPVEFMX01BU0spID4+IFRWX0hUT1RBTF9TSElGVDsKPiArCXR2X21vZGUuaHN5bmNfZW5k ID0gKGhjdGwxICYgVFZfSFNZTkNfRU5EX01BU0spID4+IFRWX0hTWU5DX0VORF9TSElGVDsKPiAr Cj4gKwl0dl9tb2RlLmhibGFua19zdGFydCA9IChoY3RsMyAmIFRWX0hCTEFOS19TVEFSVF9NQVNL KSA+PiBUVl9IQkxBTktfU1RBUlRfU0hJRlQ7Cj4gKwl0dl9tb2RlLmhibGFua19lbmQgPSAoaGN0 bDMgJiBUVl9IU1lOQ19FTkRfTUFTSykgPj4gVFZfSEJMQU5LX0VORF9TSElGVDsKPiArCj4gKwl0 dl9tb2RlLm5icl9lbmQgPSAodmN0bDEgJiBUVl9OQlJfRU5EX01BU0spID4+IFRWX05CUl9FTkRf U0hJRlQ7Cj4gKwl0dl9tb2RlLnZpX2VuZF9mMSA9ICh2Y3RsMSAmIFRWX1ZJX0VORF9GMV9NQVNL KSA+PiBUVl9WSV9FTkRfRjFfU0hJRlQ7Cj4gKwl0dl9tb2RlLnZpX2VuZF9mMiA9ICh2Y3RsMSAm IFRWX1ZJX0VORF9GMl9NQVNLKSA+PiBUVl9WSV9FTkRfRjJfU0hJRlQ7Cj4gKwo+ICsJdHZfbW9k ZS52c3luY19sZW4gPSAodmN0bDIgJiBUVl9WU1lOQ19MRU5fTUFTSykgPj4gVFZfVlNZTkNfTEVO X1NISUZUOwo+ICsJdHZfbW9kZS52c3luY19zdGFydF9mMSA9ICh2Y3RsMiAmIFRWX1ZTWU5DX1NU QVJUX0YxX01BU0spID4+IFRWX1ZTWU5DX1NUQVJUX0YxX1NISUZUOwo+ICsJdHZfbW9kZS52c3lu Y19zdGFydF9mMiA9ICh2Y3RsMiAmIFRWX1ZTWU5DX1NUQVJUX0YyX01BU0spID4+IFRWX1ZTWU5D X1NUQVJUX0YyX1NISUZUOwo+ICsKPiArCXR2X21vZGUuY2xvY2sgPSBwaXBlX2NvbmZpZy0+cG9y dF9jbG9jazsKPiArCj4gKwl0dl9tb2RlLnByb2dyZXNzaXZlID0gdHZfY3RsICYgVFZfUFJPR1JF U1NJVkU7Cj4gKwo+ICsJc3dpdGNoICh0dl9jdGwgJiBUVl9PVkVSU0FNUExFX01BU0spIHsKPiAr CWNhc2UgVFZfT1ZFUlNBTVBMRV84WDoKPiArCQl0dl9tb2RlLm92ZXJzYW1wbGUgPSA4Owo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBUVl9PVkVSU0FNUExFXzRYOgo+ICsJCXR2X21vZGUub3ZlcnNhbXBs ZSA9IDQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFRWX09WRVJTQU1QTEVfMlg6Cj4gKwkJdHZfbW9k ZS5vdmVyc2FtcGxlID0gMjsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJdHZfbW9kZS5v dmVyc2FtcGxlID0gMTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwl0bXAgPSBJOTE1X1JFQUQo VFZfV0lOX1BPUyk7Cj4gKwl4cG9zID0gdG1wID4+IDE2Owo+ICsJeXBvcyA9IHRtcCAmIDB4ZmZm ZjsKPiArCj4gKwl0bXAgPSBJOTE1X1JFQUQoVFZfV0lOX1NJWkUpOwo+ICsJeHNpemUgPSB0bXAg Pj4gMTY7Cj4gKwl5c2l6ZSA9IHRtcCAmIDB4ZmZmZjsKPiArCj4gKwlpbnRlbF90dl9tb2RlX3Rv X21vZGUoJm1vZGUsICZ0dl9tb2RlKTsKPiArCj4gKwlEUk1fREVCVUdfS01TKCJUViBtb2RlOlxu Iik7Cj4gKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKCZtb2RlKTsKPiArCj4gKwlpbnRl bF90dl9zY2FsZV9tb2RlX2hvcml6KCZtb2RlLCBoZGlzcGxheSwKPiArCQkJCSAgeHBvcywgbW9k ZS5oZGlzcGxheSAtIHhzaXplIC0geHBvcyk7Cj4gKwlpbnRlbF90dl9zY2FsZV9tb2RlX3ZlcnQo Jm1vZGUsIHZkaXNwbGF5LAo+ICsJCQkJIHlwb3MsIG1vZGUudmRpc3BsYXkgLSB5c2l6ZSAtIHlw b3MpOwo+ICsKPiArCWFkanVzdGVkX21vZGUtPmNydGNfY2xvY2sgPSBtb2RlLmNsb2NrOwo+ICB9 Cj4gIAo+ICBzdGF0aWMgYm9vbAo+IEBAIC05NjQsNiArMTEzMiw4IEBAIGludGVsX3R2X2NvbXB1 dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJY29uc3Qgc3RydWN0 IHR2X21vZGUgKnR2X21vZGUgPSBpbnRlbF90dl9tb2RlX2ZpbmQoY29ubl9zdGF0ZSk7Cj4gIAlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9Cj4gIAkJJnBpcGVfY29uZmln LT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gKwlpbnQgaGRpc3BsYXkgPSBhZGp1c3RlZF9tb2RlLT5j cnRjX2hkaXNwbGF5Owo+ICsJaW50IHZkaXNwbGF5ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlz cGxheTsKPiAgCj4gIAlpZiAoIXR2X21vZGUpCj4gIAkJcmV0dXJuIGZhbHNlOwo+IEBAIC05NzIs MTcgKzExNDIsOTAgQEAgaW50ZWxfdHZfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAKPiAgCXBpcGVfY29uZmlnLT5vdXRw dXRfZm9ybWF0ID0gSU5URUxfT1VUUFVUX0ZPUk1BVF9SR0I7Cj4gLQlhZGp1c3RlZF9tb2RlLT5j cnRjX2Nsb2NrID0gdHZfbW9kZS0+Y2xvY2s7Cj4gKwo+ICAJRFJNX0RFQlVHX0tNUygiZm9yY2lu ZyBicGMgdG8gOCBmb3IgVFZcbiIpOwo+ICAJcGlwZV9jb25maWctPnBpcGVfYnBwID0gOCozOwo+ ICAKPiAtCS8qIFRWIGhhcyBpdCdzIG93biBub3Rpb24gb2Ygc3luYyBhbmQgb3RoZXIgbW9kZSBm bGFncywgc28gY2xlYXIgdGhlbS4gKi8KPiAtCWFkanVzdGVkX21vZGUtPmZsYWdzID0gMDsKPiAr CXBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gdHZfbW9kZS0+Y2xvY2s7Cj4gKwo+ICsJaW50ZWxf dHZfbW9kZV90b19tb2RlKGFkanVzdGVkX21vZGUsIHR2X21vZGUpOwo+ICsKPiArCURSTV9ERUJV R19LTVMoIlRWIG1vZGU6XG4iKTsKPiArCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRq dXN0ZWRfbW9kZSk7Cj4gIAo+ICAJLyoKPiAtCSAqIEZJWE1FOiBXZSBkb24ndCBjaGVjayB3aGV0 aGVyIHRoZSBpbnB1dCBtb2RlIGlzIGFjdHVhbGx5IHdoYXQgd2Ugd2FudAo+IC0JICogb3Igd2hl dGhlciB1c2Vyc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIHN0dXBpZC4KPiArCSAqIFRoZSBwaXBl IHNjYW5saW5lIGNvdW50ZXIgYmVoYXZpb3VyIGxvb2tzIGFzIGZvbGxvd3Mgd2hlbgo+ICsJICog dXNpbmcgdGhlIFRWIGVuY29kZXI6Cj4gKwkgKgo+ICsJICogdGltZSAtPgo+ICsJICoKPiArCSAq IGRzbD12dG90YWwtMSAgICAgICB8ICAgICAgICAgICAgIHwKPiArCSAqICAgICAgICAgICAgICAg ICAgIHx8ICAgICAgICAgICAgfHwKPiArCSAqICAgICAgICAgICAgICAgX19ffCB8ICAgICAgICBf X198IHwKPiArCSAqICAgICAgICAgICAgICAvICAgICB8ICAgICAgIC8gICAgIHwKPiArCSAqICAg ICAgICAgICAgIC8gICAgICB8ICAgICAgLyAgICAgIHwKPiArCSAqIGRzbD0wICAgX19fLyAgICAg ICB8X19fX18vICAgICAgIHwKPiArCSAqICAgICAgICB8IHwgfCAgfCAgfCB8Cj4gKwkgKiAgICAg ICAgIF4gXiBeICAgXiBeCj4gKwkgKiAgICAgICAgIHwgfCB8ICAgfCBwaXBlIHZibGFuay9maXJz dCBwYXJ0IG9mIHR2IHZibGFuawo+ICsJICogICAgICAgICB8IHwgfCAgIGJvdHRvbSBtYXJnaW4K PiArCSAqICAgICAgICAgfCB8IGFjdGl2ZQo+ICsJICogICAgICAgICB8IHRvcCBtYXJnaW4KPiAr CSAqICAgICAgICAgcmVtYWluZGVyIG9mIHR2IHZibGFuawo+ICsJICoKPiArCSAqIFdoZW4gdGhl IFRWIGVuY29kZXIgaXMgdXNlZCB0aGUgcGlwZSB3YW50cyB0byBydW4gZmFzdGVyCj4gKwkgKiB0 aGFuIGV4cGVjdGVkIHJhdGUuIER1cmluZyB0aGUgYWN0aXZlIHBvcnRpb24gdGhlIFRWCj4gKwkg KiBlbmNvZGVyIHN0YWxscyB0aGUgcGlwZSBldmVyeSBmZXcgbGluZXMgdG8ga2VlcCBpdCBpbgo+ ICsJICogY2hlY2suIFdoZW4gdGhlIFRWIGVuY29kZXIgcmVhY2hlcyB0aGUgYm90dG9tIG1hcmdp biB0aGUKPiArCSAqIHBpcGUgc2ltcGx5IHN0b3BzLiBPbmNlIHdlIHJlYWNoIHRoZSBUViB2Ymxh bmsgdGhlIHBpcGUgaXMKPiArCSAqIG5vIGxvbmdlciBzdGFsbGVkIGFuZCBpdCBydW5zIGF0IHRo ZSBtYXggcmF0ZSAoYXBwYXJlbnRseQo+ICsJICogb3ZlcnNhbXBsZSBjbG9jayBvbiBnZW4zLCBj ZGNsayBvbiBnZW40KS4gT25jZSB0aGUgcGlwZQo+ICsJICogcmVhY2hlcyB0aGUgcGlwZSB2dG90 YWwgdGhlIHBpcGUgc3RvcHMgZm9yIHRoZSByZW1haW5kZXIKPiArCSAqIG9mIHRoZSBUViB2Ymxh bmsvdG9wIG1hcmdpbi4gVGhlIHBpcGUgc3RhcnRzIHVwIGFnYWluIHdoZW4KPiArCSAqIHRoZSBU ViBlbmNvZGVyIGV4aXRzIHRoZSB0b3AgbWFyZ2luLgo+ICsJICoKPiArCSAqIFRvIGF2b2lkIGh1 Z2UgaGFzc2xlcyBmb3IgdmJsYW5rIHRpbWVzdGFtcGluZyB3ZSBzY2FsZQo+ICsJICogdGhlIHBp cGUgdGltaW5ncyBhcyBpZiB0aGUgcGlwZSBhbHdheXMgcnVucyBhdCB0aGUgYXZlcmFnZQo+ICsJ ICogcmF0ZSBpdCBtYWludGFpbnMgZHVyaW5nIHRoZSBhY3RpdmUgcGVyaW9kLiBUaGlzIGFsc28K PiArCSAqIGdpdmVzIHVzIGEgcmVhc29uYWJsZSBndWVzc3RpbWF0ZSBhcyB0byB0aGUgcGl4ZWwg cmF0ZS4KPiArCSAqIER1ZSB0byB0aGUgdmFyaWF0aW9uIGluIHRoZSBhY3R1YWwgcGlwZSBzcGVl ZCB0aGUgc2NhbmxpbmUKPiArCSAqIGNvdW50ZXIgd2lsbCBnaXZlIHVzIHNsaWdodGx5IGVycm9u ZW91cyByZXN1bHRzIGR1cmluZyB0aGUKPiArCSAqIFRWIHZibGFuay9tYXJnaW5zLiBCdXQgc2lu Y2UgdnRvdGFsIHdhcyBzZWxlY3RlZCBzdWNoIHRoYXQKPiArCSAqIGl0IG1hdGNoZXMgdGhlIGF2 ZXJhZ2UgcmF0ZSBvZiB0aGUgcGlwZSBkdXJpbmcgdGhlIGFjdGl2ZQo+ICsJICogcG9ydGlvbiB0 aGUgZXJyb3Igc2hvdWxkbid0IGNhdXNlIGFueSBzZXJpb3VzIGdyaWVmIHRvCj4gKwkgKiB2Ymxh bmsgdGltZXN0YW1wcy4KCk5pY2UgcmV2LiBlbmdpbmcgYW5kIGRlc2NyaXB0aW9uLiBXYXMgdGhp bmtpbmcgZm9yIGEgd2hpbGUgd2hhdCBpcyB0aGUKbWF4IGVycm9yIHRoZSBpc3NzdWUgeW91IGZv dW5kIGFkZHMgd3J0LiB0aGUgYWN0dWFsIHZibGFuayB0aW1lc3RhbXAsCmFmdGVyIHlvdXIgY2hh bmdlLiBBRkFJVSBpdCdzIHRoZSBkdXJhdGlvbiBvZiB0aGUgZmxhdHMgaW4gdGhlIGN1cnZlLAp0 aGF0IGlzCm1heF9lcnI9Kyhib3R0b20gbWFyZ2luK3JlbWFpbmRlciBvZiB0diB2YmxhbmsrdG9w IG1hcmdpbikuCgpSZXZpZXdlZC1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoK PiArCSAqCj4gKwkgKiBGb3IgcG9zdGVyaXR5IGhlcmUgaXMgdGhlIGVtcGlyaWNhbGx5IGRlcml2 ZWQgZm9ybXVsYQo+ICsJICogdGhhdCBnaXZlcyB1cyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhl IHBpcGUgdmJsYW5rCj4gKwkgKiB3ZSBjYW4gdXNlIHdpdGhvdXQgY2F1c2luZyBkaXNwbGF5IGNv cnJ1cHRpb24uIEZvbGxvd2luZwo+ICsJICogdGhpcyB3b3VsZCBhbGxvdyB1cyB0byBoYXZlIGEg dGlja2luZyBzY2FubGluZSBjb3VudGVyCj4gKwkgKiBldmVyeXdoZXJlIGV4Y2VwdCBkdXJpbmcg dGhlIGJvdHRvbSBtYXJnaW4gKHRoZXJlIHRoZQo+ICsJICogcGlwZSBhbHdheXMgc3RvcHMpLiBJ ZS4gdGhpcyB3b3VsZCBlbGltaW5hdGUgdGhlIHNlY29uZAo+ICsJICogZmxhdCBwb3J0aW9uIG9m IHRoZSBhYm92ZSBncmFwaC4gSG93ZXZlciB0aGlzIHdvdWxkIGFsc28KPiArCSAqIGNvbXBsaWNh dGUgdmJsYW5rIHRpbWVzdGFtcGluZyBhcyB0aGUgcGlwZSB2dG90YWwgd291bGQKPiArCSAqIG5v IGxvbmdlciBtYXRjaCB0aGUgYXZlcmFnZSByYXRlIHRoZSBwaXBlIHJ1bnMgYXQgZHVyaW5nCj4g KwkgKiB0aGUgYWN0aXZlIHBvcnRpb24uIEhlbmNlIGZvbGxvd2luZyB0aGlzIGZvcm11bGEgc2Vl bXMKPiArCSAqIG1vcmUgdHJvdWJsZSB0aGF0IGl0J3Mgd29ydGguCj4gKwkgKgo+ICsJICogaWYg KElTX0dFTjQoZGV2X3ByaXYpKSB7Cj4gKwkgKgludW0gPSBjZGNsayAqICh0dl9tb2RlLT5vdmVy c2FtcGxlID4+ICF0dl9tb2RlLT5wcm9ncmVzc2l2ZSk7Cj4gKwkgKglkZW4gPSB0dl9tb2RlLT5j bG9jazsKPiArCSAqIH0gZWxzZSB7Cj4gKwkgKgludW0gPSB0dl9tb2RlLT5vdmVyc2FtcGxlID4+ ICF0dl9tb2RlLT5wcm9ncmVzc2l2ZTsKPiArCSAqCWRlbiA9IDE7Cj4gKwkgKiB9Cj4gKwkgKiBt YXhfcGlwZV92YmxhbmtfbGVuIH49Cj4gKwkgKgkobnVtICogdHZfaHRvdGFsICogKHR2X3ZibGFu a19sZW4gKyB0b3BfbWFyZ2luKSkgLwo+ICsJICoJKGRlbiAqIHBpcGVfaHRvdGFsKTsKPiAgCSAq Lwo+ICsJaW50ZWxfdHZfc2NhbGVfbW9kZV9ob3JpeihhZGp1c3RlZF9tb2RlLCBoZGlzcGxheSwK PiArCQkJCSAgY29ubl9zdGF0ZS0+dHYubWFyZ2lucy5sZWZ0LAo+ICsJCQkJICBjb25uX3N0YXRl LT50di5tYXJnaW5zLnJpZ2h0KTsKPiArCWludGVsX3R2X3NjYWxlX21vZGVfdmVydChhZGp1c3Rl ZF9tb2RlLCB2ZGlzcGxheSwKPiArCQkJCSBjb25uX3N0YXRlLT50di5tYXJnaW5zLnRvcCwKPiAr CQkJCSBjb25uX3N0YXRlLT50di5tYXJnaW5zLmJvdHRvbSk7Cj4gKwlkcm1fbW9kZV9zZXRfY3J0 Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7Cj4gKwlhZGp1c3RlZF9tb2RlLT5uYW1lWzBdID0gJ1ww JzsKPiAgCj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+IEBAIC0xNDExLDUyICsxNjU0LDQxIEBAIGlu dGVsX3R2X3NldF9tb2RlX3R5cGUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gIHN0 YXRpYyBpbnQKPiAgaW50ZWxfdHZfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCj4gIHsKPiAtCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlX3B0cjsKPiAgCWNv bnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGNvbm5lY3Rv ci0+c3RhdGUpOwo+IC0JaW50IGosIGNvdW50ID0gMDsKPiAtCXU2NCB0bXA7Cj4gKwlpbnQgaSwg Y291bnQgPSAwOwo+ICAKPiAtCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGlucHV0X3Jlc190 YWJsZSk7Cj4gLQkgICAgIGorKykgewo+IC0JCWNvbnN0IHN0cnVjdCBpbnB1dF9yZXMgKmlucHV0 ID0gJmlucHV0X3Jlc190YWJsZVtqXTsKPiAtCQl1bnNpZ25lZCBpbnQgaGFjdGl2ZV9zID0gaW5w dXQtPnc7Cj4gLQkJdW5zaWduZWQgaW50IHZhY3RpdmVfcyA9IGlucHV0LT5oOwo+IC0KPiAtCQlp ZiAodHZfbW9kZS0+bWF4X3NyY3cgJiYgaW5wdXQtPncgPiB0dl9tb2RlLT5tYXhfc3JjdykKPiAt CQkJY29udGludWU7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnB1dF9yZXNfdGFi bGUpOyBpKyspIHsKPiArCQljb25zdCBzdHJ1Y3QgaW5wdXRfcmVzICppbnB1dCA9ICZpbnB1dF9y ZXNfdGFibGVbaV07Cj4gKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gIAo+IC0J CWlmIChpbnB1dC0+dyA+IDEwMjQgJiYgKCF0dl9tb2RlLT5wcm9ncmVzc2l2ZQo+IC0JCQkJCSYm ICF0dl9tb2RlLT5jb21wb25lbnRfb25seSkpCj4gKwkJaWYgKGlucHV0LT53ID4gMTAyNCAmJgo+ ICsJCSAgICAhdHZfbW9kZS0+cHJvZ3Jlc3NpdmUgJiYKPiArCQkgICAgIXR2X21vZGUtPmNvbXBv bmVudF9vbmx5KQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJbW9kZV9wdHIgPSBkcm1fbW9kZV9j cmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+IC0JCWlmICghbW9kZV9wdHIpCj4gKwkJbW9kZSA9IGRy bV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7Cj4gKwkJaWYgKCFtb2RlKQo+ICAJCQljb250 aW51ZTsKPiAgCj4gLQkJbW9kZV9wdHItPmhkaXNwbGF5ID0gaGFjdGl2ZV9zOwo+IC0JCW1vZGVf cHRyLT5oc3luY19zdGFydCA9IGhhY3RpdmVfcyArIDE7Cj4gLQkJbW9kZV9wdHItPmhzeW5jX2Vu ZCA9IGhhY3RpdmVfcyArIDY0Owo+IC0JCWlmIChtb2RlX3B0ci0+aHN5bmNfZW5kIDw9IG1vZGVf cHRyLT5oc3luY19zdGFydCkKPiAtCQkJbW9kZV9wdHItPmhzeW5jX2VuZCA9IG1vZGVfcHRyLT5o c3luY19zdGFydCArIDE7Cj4gLQkJbW9kZV9wdHItPmh0b3RhbCA9IGhhY3RpdmVfcyArIDk2Owo+ IC0KPiAtCQltb2RlX3B0ci0+dmRpc3BsYXkgPSB2YWN0aXZlX3M7Cj4gLQkJbW9kZV9wdHItPnZz eW5jX3N0YXJ0ID0gdmFjdGl2ZV9zICsgMTsKPiAtCQltb2RlX3B0ci0+dnN5bmNfZW5kID0gdmFj dGl2ZV9zICsgMzI7Cj4gLQkJaWYgKG1vZGVfcHRyLT52c3luY19lbmQgPD0gbW9kZV9wdHItPnZz eW5jX3N0YXJ0KQo+IC0JCQltb2RlX3B0ci0+dnN5bmNfZW5kID0gbW9kZV9wdHItPnZzeW5jX3N0 YXJ0ICArIDE7Cj4gLQkJbW9kZV9wdHItPnZ0b3RhbCA9IHZhY3RpdmVfcyArIDMzOwo+IC0KPiAt CQl0bXAgPSBtdWxfdTMyX3UzMih0dl9tb2RlLT5yZWZyZXNoLCBtb2RlX3B0ci0+dnRvdGFsKTsK PiAtCQl0bXAgKj0gbW9kZV9wdHItPmh0b3RhbDsKPiAtCQl0bXAgPSBkaXZfdTY0KHRtcCwgMTAw MDAwMCk7Cj4gLQkJbW9kZV9wdHItPmNsb2NrID0gKGludCkgdG1wOwo+IC0KPiAtCQlpbnRlbF90 dl9zZXRfbW9kZV90eXBlKG1vZGVfcHRyLCB0dl9tb2RlKTsKPiArCQkvKgo+ICsJCSAqIFdlIHRh a2UgdGhlIFRWIG1vZGUgYW5kIHNjYWxlIGl0IHRvIGxvb2sKPiArCQkgKiBsaWtlIGl0IGhhZCB0 aGUgZXhwZWN0ZWQgaC92ZGlzcGxheS4gVGhpcwo+ICsJCSAqIHByb3ZpZGVzIHRoZSBtb3N0IGlu Zm9ybWF0aW9uIHRvIHVzZXJzcGFjZQo+ICsJCSAqIGFib3V0IHRoZSBhY3R1YWwgdGltaW5ncyBv ZiB0aGUgbW9kZS4gV2UKPiArCQkgKiBkbyBpZ25vcmUgdGhlIG1hcmdpbnMgdGhvdWdoLgo+ICsJ CSAqLwo+ICsJCWludGVsX3R2X21vZGVfdG9fbW9kZShtb2RlLCB0dl9tb2RlKTsKPiArCQlpZiAo Y291bnQgPT0gMCkgewo+ICsJCQlEUk1fREVCVUdfS01TKCJUViBtb2RlOlxuIik7Cj4gKwkJCWRy bV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUobW9kZSk7Cj4gKwkJfQo+ICsJCWludGVsX3R2X3Nj YWxlX21vZGVfaG9yaXoobW9kZSwgaW5wdXQtPncsIDAsIDApOwo+ICsJCWludGVsX3R2X3NjYWxl X21vZGVfdmVydChtb2RlLCBpbnB1dC0+aCwgMCwgMCk7Cj4gKwkJaW50ZWxfdHZfc2V0X21vZGVf dHlwZShtb2RlLCB0dl9tb2RlKTsKPiAgCj4gLQkJZHJtX21vZGVfc2V0X25hbWUobW9kZV9wdHIp Owo+ICsJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwo+ICAKPiAtCQlkcm1fbW9kZV9wcm9iZWRf YWRkKGNvbm5lY3RvciwgbW9kZV9wdHIpOwo+ICsJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVj dG9yLCBtb2RlKTsKPiAgCQljb3VudCsrOwo+ICAJfQo+ICAKPiAtLSAKPiAyLjE4LjEKPiAKPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==