From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH v2 2/8] drm/i915/uc: Unify uC FW selection Date: Wed, 24 Jul 2019 09:28:06 -0700 Message-ID: References: <20190724022153.8927-1-daniele.ceraolospurio@intel.com> <20190724022153.8927-3-daniele.ceraolospurio@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id C1E926E5F0 for ; Wed, 24 Jul 2019 16:28:07 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michal Wajdeczko , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA3LzI0LzIwMTkgNDozMSBBTSwgTWljaGFsIFdhamRlY3prbyB3cm90ZToKPiBPbiBXZWQs IDI0IEp1bCAyMDE5IDA0OjIxOjQ3ICswMjAwLCBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIAo+IDxk YW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPiB3cm90ZToKPgo+PiBJbnN0ZWFkIG9mIGhh dmluZyAyIGlkZW50aWNhbCBmdW5jdGlvbnMgZm9yIEd1QyBhbmQgSHVDIGZpcm13YXJlCj4+IHNl bGVjdGlvbiwgd2UgY2FuIHVuaWZ5IHRoZSBzZWxlY3Rpb24gbG9naWMgYW5kIGp1c3QgdXNlIGRp ZmZlcmVudCBsaXN0cwo+PiBiYXNlZCBvbiBGVyB0eXBlLgo+Pgo+PiBOb3RlIHRoYXQgdGhlIHJl dmlkIGlzIG5vdCByZWxldmFudCBmb3IgY3VycmVudCBibG9icywgYnV0IHRoZSB1cGNvbWluZwo+ PiBDTUwgd2lsbCBiZSBpZGVudGlmaWVkIGFzIENGTCByZXYgNSwgc28gYnkgY29uc2lkZXJpbmcg dGhlIHJldmlkIHdlJ3JlCj4+IHJlYWR5IGZvciB0aGF0Lgo+Pgo+PiB2MjogcmV3b3JrIGJsb2Ig bGlzdCBkZWZzIChNaWNoYWwpLCBhZGQgb3JkZXIgY2hlY2sgKENocmlzKSwgZnVzZSBHdUMKPj4g wqDCoMKgIGFuZCBIdUMgbGlzdHMgaW50byBvbmUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IERhbmll bGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJpb0BpbnRlbC5jb20+Cj4+IENj OiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KPj4gQ2M6IEFu dXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4KPj4gQ2M6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+PiAtLS0KPj4gwqBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYyB8wqAgODYgKy0tLS0tLS0tLS0tCj4+IMKgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjX2Z3LmMgfMKgIDg4ICstLS0tLS0tLS0t LQo+PiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjX2Z3LmPCoCB8IDE1NiAr KysrKysrKysrKysrKysrKysrKysrCj4+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfdWNfZncuaMKgIHzCoCAyOSArKy0tCj4+IMKgNCBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5zZXJ0 aW9ucygrKSwgMTkyIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Z3LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvdWMvaW50ZWxfZ3VjX2Z3LmMKPj4gaW5kZXggODcxNjllODI2NzQ3Li5hMDI3ZGViODAzMzAg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jCj4+IEBA IC0zMSw4OSArMzEsNiBAQAo+PiDCoCNpbmNsdWRlICJpbnRlbF9ndWNfZncuaCIKPj4gwqAjaW5j bHVkZSAiaTkxNV9kcnYuaCIKPj4gLSNkZWZpbmUgX19NQUtFX0dVQ19GV19QQVRIKEtFWSkgXAo+ PiAtwqDCoMKgICJpOTE1LyIgXAo+PiAtwqDCoMKgIF9fc3RyaW5naWZ5KEtFWSMjX0dVQ19GV19Q UkVGSVgpICJfZ3VjXyIgXAo+PiAtwqDCoMKgIF9fc3RyaW5naWZ5KEtFWSMjX0dVQ19GV19NQUpP UikgIi4iIFwKPj4gLcKgwqDCoCBfX3N0cmluZ2lmeShLRVkjI19HVUNfRldfTUlOT1IpICIuIiBc Cj4+IC3CoMKgwqAgX19zdHJpbmdpZnkoS0VZIyNfR1VDX0ZXX1BBVENIKSAiLmJpbiIKPj4gLQo+ PiAtI2RlZmluZSBTS0xfR1VDX0ZXX1BSRUZJWCBza2wKPj4gLSNkZWZpbmUgU0tMX0dVQ19GV19N QUpPUiAzMwo+PiAtI2RlZmluZSBTS0xfR1VDX0ZXX01JTk9SIDAKPj4gLSNkZWZpbmUgU0tMX0dV Q19GV19QQVRDSCAwCj4+IC0jZGVmaW5lIFNLTF9HVUNfRklSTVdBUkVfUEFUSCBfX01BS0VfR1VD X0ZXX1BBVEgoU0tMKQo+PiAtTU9EVUxFX0ZJUk1XQVJFKFNLTF9HVUNfRklSTVdBUkVfUEFUSCk7 Cj4+IC0KPj4gLSNkZWZpbmUgQlhUX0dVQ19GV19QUkVGSVggYnh0Cj4+IC0jZGVmaW5lIEJYVF9H VUNfRldfTUFKT1IgMzMKPj4gLSNkZWZpbmUgQlhUX0dVQ19GV19NSU5PUiAwCj4+IC0jZGVmaW5l IEJYVF9HVUNfRldfUEFUQ0ggMAo+PiAtI2RlZmluZSBCWFRfR1VDX0ZJUk1XQVJFX1BBVEggX19N QUtFX0dVQ19GV19QQVRIKEJYVCkKPj4gLU1PRFVMRV9GSVJNV0FSRShCWFRfR1VDX0ZJUk1XQVJF X1BBVEgpOwo+PiAtCj4+IC0jZGVmaW5lIEtCTF9HVUNfRldfUFJFRklYIGtibAo+PiAtI2RlZmlu ZSBLQkxfR1VDX0ZXX01BSk9SIDMzCj4+IC0jZGVmaW5lIEtCTF9HVUNfRldfTUlOT1IgMAo+PiAt I2RlZmluZSBLQkxfR1VDX0ZXX1BBVENIIDAKPj4gLSNkZWZpbmUgS0JMX0dVQ19GSVJNV0FSRV9Q QVRIIF9fTUFLRV9HVUNfRldfUEFUSChLQkwpCj4+IC1NT0RVTEVfRklSTVdBUkUoS0JMX0dVQ19G SVJNV0FSRV9QQVRIKTsKPj4gLQo+PiAtI2RlZmluZSBHTEtfR1VDX0ZXX1BSRUZJWCBnbGsKPj4g LSNkZWZpbmUgR0xLX0dVQ19GV19NQUpPUiAzMwo+PiAtI2RlZmluZSBHTEtfR1VDX0ZXX01JTk9S IDAKPj4gLSNkZWZpbmUgR0xLX0dVQ19GV19QQVRDSCAwCj4+IC0jZGVmaW5lIEdMS19HVUNfRklS TVdBUkVfUEFUSCBfX01BS0VfR1VDX0ZXX1BBVEgoR0xLKQo+PiAtTU9EVUxFX0ZJUk1XQVJFKEdM S19HVUNfRklSTVdBUkVfUEFUSCk7Cj4+IC0KPj4gLSNkZWZpbmUgSUNMX0dVQ19GV19QUkVGSVgg aWNsCj4+IC0jZGVmaW5lIElDTF9HVUNfRldfTUFKT1IgMzMKPj4gLSNkZWZpbmUgSUNMX0dVQ19G V19NSU5PUiAwCj4+IC0jZGVmaW5lIElDTF9HVUNfRldfUEFUQ0ggMAo+PiAtI2RlZmluZSBJQ0xf R1VDX0ZJUk1XQVJFX1BBVEggX19NQUtFX0dVQ19GV19QQVRIKElDTCkKPj4gLU1PRFVMRV9GSVJN V0FSRShJQ0xfR1VDX0ZJUk1XQVJFX1BBVEgpOwo+PiAtCj4+IC1zdGF0aWMgdm9pZCBndWNfZndf c2VsZWN0KHN0cnVjdCBpbnRlbF91Y19mdyAqZ3VjX2Z3KQo+PiAtewo+PiAtwqDCoMKgIHN0cnVj dCBpbnRlbF9ndWMgKmd1YyA9IGNvbnRhaW5lcl9vZihndWNfZncsIHN0cnVjdCBpbnRlbF9ndWMs IGZ3KTsKPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd1Y190b19n dChndWMpLT5pOTE1Owo+PiAtCj4+IC3CoMKgwqAgR0VNX0JVR19PTihndWNfZnctPnR5cGUgIT0g SU5URUxfVUNfRldfVFlQRV9HVUMpOwo+PiAtCj4+IC3CoMKgwqAgaWYgKCFIQVNfR1RfVUMoaTkx NSkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNf RklSTVdBUkVfTk9UX1NVUFBPUlRFRDsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gLcKg wqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCBndWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJ Uk1XQVJFX05PVF9TVEFSVEVEOwo+PiAtCj4+IC3CoMKgwqAgaWYgKGk5MTVfbW9kcGFyYW1zLmd1 Y19maXJtd2FyZV9wYXRoKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPnBhdGggPSBpOTE1 X21vZHBhcmFtcy5ndWNfZmlybXdhcmVfcGF0aDsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+ bWFqb3JfdmVyX3dhbnRlZCA9IDA7Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPm1pbm9yX3Zl cl93YW50ZWQgPSAwOwo+PiAtwqDCoMKgIH0gZWxzZSBpZiAoSVNfSUNFTEFLRShpOTE1KSkgewo+ PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5wYXRoID0gSUNMX0dVQ19GSVJNV0FSRV9QQVRIOwo+ PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5tYWpvcl92ZXJfd2FudGVkID0gSUNMX0dVQ19GV19N QUpPUjsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+bWlub3JfdmVyX3dhbnRlZCA9IElDTF9H VUNfRldfTUlOT1I7Cj4+IC3CoMKgwqAgfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKSB7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPnBhdGggPSBHTEtfR1VDX0ZJUk1XQVJFX1BBVEg7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPm1ham9yX3Zlcl93YW50ZWQgPSBHTEtfR1VDX0ZX X01BSk9SOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5taW5vcl92ZXJfd2FudGVkID0gR0xL X0dVQ19GV19NSU5PUjsKPj4gLcKgwqDCoCB9IGVsc2UgaWYgKElTX0tBQllMQUtFKGk5MTUpIHx8 IElTX0NPRkZFRUxBS0UoaTkxNSkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+cGF0aCA9 IEtCTF9HVUNfRklSTVdBUkVfUEFUSDsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+bWFqb3Jf dmVyX3dhbnRlZCA9IEtCTF9HVUNfRldfTUFKT1I7Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnct Pm1pbm9yX3Zlcl93YW50ZWQgPSBLQkxfR1VDX0ZXX01JTk9SOwo+PiAtwqDCoMKgIH0gZWxzZSBp ZiAoSVNfQlJPWFRPTihpOTE1KSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5wYXRoID0g QlhUX0dVQ19GSVJNV0FSRV9QQVRIOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5tYWpvcl92 ZXJfd2FudGVkID0gQlhUX0dVQ19GV19NQUpPUjsKPj4gLcKgwqDCoMKgwqDCoMKgIGd1Y19mdy0+ bWlub3JfdmVyX3dhbnRlZCA9IEJYVF9HVUNfRldfTUlOT1I7Cj4+IC3CoMKgwqAgfSBlbHNlIGlm IChJU19TS1lMQUtFKGk5MTUpKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPnBhdGggPSBT S0xfR1VDX0ZJUk1XQVJFX1BBVEg7Cj4+IC3CoMKgwqDCoMKgwqDCoCBndWNfZnctPm1ham9yX3Zl cl93YW50ZWQgPSBTS0xfR1VDX0ZXX01BSk9SOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ3VjX2Z3LT5t aW5vcl92ZXJfd2FudGVkID0gU0tMX0dVQ19GV19NSU5PUjsKPj4gLcKgwqDCoCB9Cj4+IC19Cj4+ IC0KPj4gwqAvKioKPj4gwqAgKiBpbnRlbF9ndWNfZndfaW5pdF9lYXJseSgpIC0gaW5pdGlhbGl6 ZXMgR3VDIGZpcm13YXJlIHN0cnVjdAo+PiDCoCAqIEBndWM6IGludGVsX2d1YyBzdHJ1Y3QKPj4g QEAgLTEyNCw4ICs0MSw3IEBAIHZvaWQgaW50ZWxfZ3VjX2Z3X2luaXRfZWFybHkoc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQo+PiDCoHsKPj4gwqDCoMKgwqAgc3RydWN0IGludGVsX3VjX2Z3ICpndWNf ZncgPSAmZ3VjLT5mdzsKPj4gLcKgwqDCoCBpbnRlbF91Y19md19pbml0X2Vhcmx5KGd1Y19mdywg SU5URUxfVUNfRldfVFlQRV9HVUMpOwo+PiAtwqDCoMKgIGd1Y19md19zZWxlY3QoZ3VjX2Z3KTsK Pj4gK8KgwqDCoCBpbnRlbF91Y19md19pbml0X2Vhcmx5KGd1Y190b19ndChndWMpLT5pOTE1LCBn dWNfZncsIAo+PiBJTlRFTF9VQ19GV19UWVBFX0dVQyk7Cj4+IMKgfQo+PiBzdGF0aWMgdm9pZCBn dWNfcHJlcGFyZV94ZmVyKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2h1Y19mdy5jIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3VjL2ludGVsX2h1Y19mdy5jCj4+IGluZGV4IGZmNmY3YjE1N2VjYi4uZmEy MTUxZmEzYTEzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9odWNfZncuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWNf ZncuYwo+PiBAQCAtMjMsOTEgKzIzLDYgQEAKPj4gwqAgKiBOb3RlIHRoYXQgSHVDIGZpcm13YXJl IGxvYWRpbmcgbXVzdCBiZSBkb25lIGJlZm9yZSBHdUMgbG9hZGluZy4KPj4gwqAgKi8KPj4gLSNk ZWZpbmUgQlhUX0hVQ19GV19NQUpPUiAwMQo+PiAtI2RlZmluZSBCWFRfSFVDX0ZXX01JTk9SIDgK Pj4gLSNkZWZpbmUgQlhUX0JMRF9OVU0gMjg5Mwo+PiAtCj4+IC0jZGVmaW5lIFNLTF9IVUNfRldf TUFKT1IgMDEKPj4gLSNkZWZpbmUgU0tMX0hVQ19GV19NSU5PUiAwNwo+PiAtI2RlZmluZSBTS0xf QkxEX05VTSAxMzk4Cj4+IC0KPj4gLSNkZWZpbmUgS0JMX0hVQ19GV19NQUpPUiAwMgo+PiAtI2Rl ZmluZSBLQkxfSFVDX0ZXX01JTk9SIDAwCj4+IC0jZGVmaW5lIEtCTF9CTERfTlVNIDE4MTAKPj4g LQo+PiAtI2RlZmluZSBHTEtfSFVDX0ZXX01BSk9SIDAzCj4+IC0jZGVmaW5lIEdMS19IVUNfRldf TUlOT1IgMDEKPj4gLSNkZWZpbmUgR0xLX0JMRF9OVU0gMjg5Mwo+PiAtCj4+IC0jZGVmaW5lIElD TF9IVUNfRldfTUFKT1IgOAo+PiAtI2RlZmluZSBJQ0xfSFVDX0ZXX01JTk9SIDQKPj4gLSNkZWZp bmUgSUNMX0JMRF9OVU0gMzIzOAo+PiAtCj4+IC0jZGVmaW5lIEhVQ19GV19QQVRIKHBsYXRmb3Jt LCBtYWpvciwgbWlub3IsIGJsZF9udW0pIFwKPj4gLcKgwqDCoCAiaTkxNS8iIF9fc3RyaW5naWZ5 KHBsYXRmb3JtKSAiX2h1Y192ZXIiIF9fc3RyaW5naWZ5KG1ham9yKSAiXyIgXAo+PiAtwqDCoMKg IF9fc3RyaW5naWZ5KG1pbm9yKSAiXyIgX19zdHJpbmdpZnkoYmxkX251bSkgIi5iaW4iCj4+IC0K Pj4gLSNkZWZpbmUgSTkxNV9TS0xfSFVDX1VDT0RFIEhVQ19GV19QQVRIKHNrbCwgU0tMX0hVQ19G V19NQUpPUiwgXAo+PiAtwqDCoMKgIFNLTF9IVUNfRldfTUlOT1IsIFNLTF9CTERfTlVNKQo+PiAt TU9EVUxFX0ZJUk1XQVJFKEk5MTVfU0tMX0hVQ19VQ09ERSk7Cj4+IC0KPj4gLSNkZWZpbmUgSTkx NV9CWFRfSFVDX1VDT0RFIEhVQ19GV19QQVRIKGJ4dCwgQlhUX0hVQ19GV19NQUpPUiwgXAo+PiAt wqDCoMKgIEJYVF9IVUNfRldfTUlOT1IsIEJYVF9CTERfTlVNKQo+PiAtTU9EVUxFX0ZJUk1XQVJF KEk5MTVfQlhUX0hVQ19VQ09ERSk7Cj4+IC0KPj4gLSNkZWZpbmUgSTkxNV9LQkxfSFVDX1VDT0RF IEhVQ19GV19QQVRIKGtibCwgS0JMX0hVQ19GV19NQUpPUiwgXAo+PiAtwqDCoMKgIEtCTF9IVUNf RldfTUlOT1IsIEtCTF9CTERfTlVNKQo+PiAtTU9EVUxFX0ZJUk1XQVJFKEk5MTVfS0JMX0hVQ19V Q09ERSk7Cj4+IC0KPj4gLSNkZWZpbmUgSTkxNV9HTEtfSFVDX1VDT0RFIEhVQ19GV19QQVRIKGds aywgR0xLX0hVQ19GV19NQUpPUiwgXAo+PiAtwqDCoMKgIEdMS19IVUNfRldfTUlOT1IsIEdMS19C TERfTlVNKQo+PiAtTU9EVUxFX0ZJUk1XQVJFKEk5MTVfR0xLX0hVQ19VQ09ERSk7Cj4+IC0KPj4g LSNkZWZpbmUgSTkxNV9JQ0xfSFVDX1VDT0RFIEhVQ19GV19QQVRIKGljbCwgSUNMX0hVQ19GV19N QUpPUiwgXAo+PiAtwqDCoMKgIElDTF9IVUNfRldfTUlOT1IsIElDTF9CTERfTlVNKQo+PiAtTU9E VUxFX0ZJUk1XQVJFKEk5MTVfSUNMX0hVQ19VQ09ERSk7Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGh1 Y19md19zZWxlY3Qoc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncpCj4+IC17Cj4+IC3CoMKgwqAg c3RydWN0IGludGVsX2h1YyAqaHVjID0gY29udGFpbmVyX29mKGh1Y19mdywgc3RydWN0IGludGVs X2h1YywgZncpOwo+PiAtwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGh1Y190b19ndChodWMpLT5pOTE1Owo+PiAtCj4+IC3CoMKgwqAgR0VNX0JVR19PTihodWNfZnct PnR5cGUgIT0gSU5URUxfVUNfRldfVFlQRV9IVUMpOwo+PiAtCj4+IC3CoMKgwqAgaWYgKCFIQVNf R1RfVUMoZGV2X3ByaXYpKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBodWNfZnctPmZldGNoX3N0YXR1 cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PVF9TVVBQT1JURUQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBy ZXR1cm47Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgaHVjX2Z3LT5mZXRjaF9zdGF0dXMg PSBJTlRFTF9VQ19GSVJNV0FSRV9OT1RfU1RBUlRFRDsKPj4gLQo+PiAtwqDCoMKgIGlmIChpOTE1 X21vZHBhcmFtcy5odWNfZmlybXdhcmVfcGF0aCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgaHVjX2Z3 LT5wYXRoID0gaTkxNV9tb2RwYXJhbXMuaHVjX2Zpcm13YXJlX3BhdGg7Cj4+IC3CoMKgwqDCoMKg wqDCoCBodWNfZnctPm1ham9yX3Zlcl93YW50ZWQgPSAwOwo+PiAtwqDCoMKgwqDCoMKgwqAgaHVj X2Z3LT5taW5vcl92ZXJfd2FudGVkID0gMDsKPj4gLcKgwqDCoCB9IGVsc2UgaWYgKElTX1NLWUxB S0UoZGV2X3ByaXYpKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBodWNfZnctPnBhdGggPSBJOTE1X1NL TF9IVUNfVUNPREU7Cj4+IC3CoMKgwqDCoMKgwqDCoCBodWNfZnctPm1ham9yX3Zlcl93YW50ZWQg PSBTS0xfSFVDX0ZXX01BSk9SOwo+PiAtwqDCoMKgwqDCoMKgwqAgaHVjX2Z3LT5taW5vcl92ZXJf d2FudGVkID0gU0tMX0hVQ19GV19NSU5PUjsKPj4gLcKgwqDCoCB9IGVsc2UgaWYgKElTX0JST1hU T04oZGV2X3ByaXYpKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBodWNfZnctPnBhdGggPSBJOTE1X0JY VF9IVUNfVUNPREU7Cj4+IC3CoMKgwqDCoMKgwqDCoCBodWNfZnctPm1ham9yX3Zlcl93YW50ZWQg PSBCWFRfSFVDX0ZXX01BSk9SOwo+PiAtwqDCoMKgwqDCoMKgwqAgaHVjX2Z3LT5taW5vcl92ZXJf d2FudGVkID0gQlhUX0hVQ19GV19NSU5PUjsKPj4gLcKgwqDCoCB9IGVsc2UgaWYgKElTX0tBQllM QUtFKGRldl9wcml2KSB8fCBJU19DT0ZGRUVMQUtFKGRldl9wcml2KSkgewo+PiAtwqDCoMKgwqDC oMKgwqAgaHVjX2Z3LT5wYXRoID0gSTkxNV9LQkxfSFVDX1VDT0RFOwo+PiAtwqDCoMKgwqDCoMKg wqAgaHVjX2Z3LT5tYWpvcl92ZXJfd2FudGVkID0gS0JMX0hVQ19GV19NQUpPUjsKPj4gLcKgwqDC oMKgwqDCoMKgIGh1Y19mdy0+bWlub3JfdmVyX3dhbnRlZCA9IEtCTF9IVUNfRldfTUlOT1I7Cj4+ IC3CoMKgwqAgfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewo+PiAtwqDCoMKg wqDCoMKgwqAgaHVjX2Z3LT5wYXRoID0gSTkxNV9HTEtfSFVDX1VDT0RFOwo+PiAtwqDCoMKgwqDC oMKgwqAgaHVjX2Z3LT5tYWpvcl92ZXJfd2FudGVkID0gR0xLX0hVQ19GV19NQUpPUjsKPj4gLcKg wqDCoMKgwqDCoMKgIGh1Y19mdy0+bWlub3JfdmVyX3dhbnRlZCA9IEdMS19IVUNfRldfTUlOT1I7 Cj4+IC3CoMKgwqAgfSBlbHNlIGlmIChJU19JQ0VMQUtFKGRldl9wcml2KSkgewo+PiAtwqDCoMKg wqDCoMKgwqAgaHVjX2Z3LT5wYXRoID0gSTkxNV9JQ0xfSFVDX1VDT0RFOwo+PiAtwqDCoMKgwqDC oMKgwqAgaHVjX2Z3LT5tYWpvcl92ZXJfd2FudGVkID0gSUNMX0hVQ19GV19NQUpPUjsKPj4gLcKg wqDCoMKgwqDCoMKgIGh1Y19mdy0+bWlub3JfdmVyX3dhbnRlZCA9IElDTF9IVUNfRldfTUlOT1I7 Cj4+IC3CoMKgwqAgfQo+PiAtfQo+PiAtCj4+IMKgLyoqCj4+IMKgICogaW50ZWxfaHVjX2Z3X2lu aXRfZWFybHkoKSAtIGluaXRpYWxpemVzIEh1QyBmaXJtd2FyZSBzdHJ1Y3QKPj4gwqAgKiBAaHVj OiBpbnRlbF9odWMgc3RydWN0Cj4+IEBAIC0xMTgsOCArMzMsNyBAQCB2b2lkIGludGVsX2h1Y19m d19pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9odWMgKmh1YykKPj4gwqB7Cj4+IMKgwqDCoMKgIHN0 cnVjdCBpbnRlbF91Y19mdyAqaHVjX2Z3ID0gJmh1Yy0+Znc7Cj4+IC3CoMKgwqAgaW50ZWxfdWNf ZndfaW5pdF9lYXJseShodWNfZncsIElOVEVMX1VDX0ZXX1RZUEVfSFVDKTsKPj4gLcKgwqDCoCBo dWNfZndfc2VsZWN0KGh1Y19mdyk7Cj4+ICvCoMKgwqAgaW50ZWxfdWNfZndfaW5pdF9lYXJseSho dWNfdG9fZ3QoaHVjKS0+aTkxNSwgaHVjX2Z3LCAKPj4gSU5URUxfVUNfRldfVFlQRV9IVUMpOwo+ PiDCoH0KPj4gc3RhdGljIHZvaWQgaHVjX3hmZXJfcnNhKHN0cnVjdCBpbnRlbF9odWMgKmh1YykK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjX2Z3LmMg Cj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWNfZncuYwo+PiBpbmRleCA4 Y2U3MjEwOTA3YzAuLjQ4MTAwZGZmNDY2ZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvdWMvaW50ZWxfdWNfZncuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF91Y19mdy5jCj4+IEBAIC0yOSw2ICsyOSwxNjIgQEAKPj4gwqAjaW5jbHVkZSAi aW50ZWxfdWNfZncuaCIKPj4gwqAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4gKy8qCj4+ICsgKiBM aXN0IG9mIHJlcXVpcmVkIEd1QyBhbmQgSHVDIGJpbmFyaWVzIHBlci1wbGF0Zm9ybS4KPj4gKyAq IE11c3QgYmUgb3JkZXJlZCBiYXNlZCBvbiBwbGF0Zm9ybSArIHJldmlkLCBmcm9tIG5ld2VyIHRv IG9sZGVyLgo+PiArICovCj4+ICsjZGVmaW5lIElOVEVMX1VDX0ZJUk1XQVJFX0RFRlMoZndfZGVm LCBndWNfZGVmLCBodWNfZGVmKSBcCj4+ICvCoMKgwqAgZndfZGVmKElDRUxBS0UswqDCoMKgIDAs IGd1Y19kZWYoaWNsLCAzMywgMCwgMCksIGh1Y19kZWYoaWNsLCA4LMKgIAo+PiA0LCAzMjM4KSkg XAo+PiArwqDCoMKgIGZ3X2RlZihDT0ZGRUVMQUtFLCAwLCBndWNfZGVmKGtibCwgMzMsIDAsIDAp LCBodWNfZGVmKGtibCwgMDIsIAo+PiAwMCwgMTgxMCkpIFwKPj4gK8KgwqDCoCBmd19kZWYoR0VN SU5JTEFLRSwgMCwgZ3VjX2RlZihnbGssIDMzLCAwLCAwKSwgaHVjX2RlZihnbGssIDAzLCAKPj4g MDEsIDI4OTMpKSBcCj4+ICvCoMKgwqAgZndfZGVmKEtBQllMQUtFLMKgwqAgMCwgZ3VjX2RlZihr YmwsIDMzLCAwLCAwKSwgaHVjX2RlZihrYmwsIDAyLCAKPj4gMDAsIDE4MTApKSBcCj4+ICvCoMKg wqAgZndfZGVmKEJST1hUT04swqDCoMKgIDAsIGd1Y19kZWYoYnh0LCAzMywgMCwgMCksIGh1Y19k ZWYoYnh0LCAwMSzCoCAKPj4gOCwgMjg5MykpIFwKPj4gK8KgwqDCoCBmd19kZWYoU0tZTEFLRSzC oMKgwqAgMCwgZ3VjX2RlZihza2wsIDMzLCAwLCAwKSwgaHVjX2RlZihza2wsIDAxLCAKPj4gMDcs IDEzOTgpKQo+PiArCj4+ICsjZGVmaW5lIF9fTUFLRV9VQ19GV19QQVRIKHByZWZpeF8sIG5hbWVf LCBzZXBhcmF0b3JfLCBtYWpvcl8sIAo+PiBtaW5vcl8sIHBhdGNoXykgXAo+PiArwqDCoMKgICJp OTE1LyIgXAo+PiArwqDCoMKgIF9fc3RyaW5naWZ5KHByZWZpeF8pIG5hbWVfIFwKPj4gK8KgwqDC oCBfX3N0cmluZ2lmeShtYWpvcl8pIHNlcGFyYXRvcl8gXAo+PiArwqDCoMKgIF9fc3RyaW5naWZ5 KG1pbm9yXykgc2VwYXJhdG9yXyBcCj4+ICvCoMKgwqAgX19zdHJpbmdpZnkocGF0Y2hfKSAiLmJp biIKPj4gKwo+PiArI2RlZmluZSBNQUtFX0dVQ19GV19QQVRIKHByZWZpeF8sIG1ham9yXywgbWlu b3JfLCBwYXRjaF8pIFwKPj4gK8KgwqDCoCBfX01BS0VfVUNfRldfUEFUSChwcmVmaXhfLCAiX2d1 Y18iLCAiLiIsIG1ham9yXywgbWlub3JfLCBwYXRjaF8pCj4+ICsKPj4gKyNkZWZpbmUgTUFLRV9I VUNfRldfUEFUSChwcmVmaXhfLCBtYWpvcl8sIG1pbm9yXywgYmxkX251bV8pIFwKPj4gK8KgwqDC oCBfX01BS0VfVUNfRldfUEFUSChwcmVmaXhfLCAiX2h1Y192ZXIiLCAiXyIsIG1ham9yXywgbWlu b3JfLCAKPj4gYmxkX251bV8pCj4+ICsKPj4gKy8qIEFsbCBibG9icyBuZWVkIHRvIGJlIGRlY2xh cmVkIHZpYSBNT0RVTEVfRklSTVdBUkUoKSAqLwo+PiArI2RlZmluZSBJTlRFTF9VQ19NT0RVTEVf RlcocGxhdGZvcm1fLCByZXZpZF8sIGd1Y18sIGh1Y18pIFwKPj4gK8KgwqDCoCBNT0RVTEVfRklS TVdBUkUoZ3VjXyk7IFwKPj4gK8KgwqDCoCBNT0RVTEVfRklSTVdBUkUoaHVjXyk7Cj4+ICsKPj4g K0lOVEVMX1VDX0ZJUk1XQVJFX0RFRlMoSU5URUxfVUNfTU9EVUxFX0ZXLCBNQUtFX0dVQ19GV19Q QVRILCAKPj4gTUFLRV9IVUNfRldfUEFUSCkKPj4gKwo+PiArLyoKPj4gKyAqIFRoZSBiZWxvdyBk ZWZzIGFuZCBtYWNyb3MgYXJlIHVzZWQgdG8gaXRlcmF0ZSBhY3Jvc3MgdGhlIGxpc3Qgb2YgCj4+ IGJsb2JzLiBTZWUKPj4gKyAqIF9fdWNfZndfc2VsZWN0KCkgYmVsb3cgZm9yIGRldGFpbHMuCj4+ ICsgKi8KPj4gK3N0cnVjdCBfX3BhY2tlZCBpbnRlbF91Y19md19ibG9iIHsKPj4gK8KgwqDCoCB1 OCBtYWpvcjsKPj4gK8KgwqDCoCB1OCBtaW5vcjsKPgo+IEh1QyBmaXJtd2FyZSBpcyB1c2luZyAx NiBiaXRzIGZvciBtYWpvci9taW5vciBidXQgSSBndWVzcyB3ZSBoYXZlCj4gc29tZSB0aW1lIHVu dGlsIHdlIGdldCB0byB2ZXJzaW9uIDI1NQo+Cj4+ICvCoMKgwqAgY29uc3QgY2hhciAqcGF0aDsK Pj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgVUNfRldfQkxPQihtYWpvcl8sIG1pbm9yXywgcGF0aF8p IFwKPj4gK8KgwqDCoCB7IC5tYWpvciA9IG1ham9yXywgLm1pbm9yID0gbWlub3JfLCAucGF0aCA9 IHBhdGhfIH0KPj4gKwo+PiArI2RlZmluZSBHVUNfRldfQkxPQihwcmVmaXhfLCBtYWpvcl8sIG1p bm9yXywgcGF0Y2hfKSBcCj4+ICvCoMKgwqAgVUNfRldfQkxPQihtYWpvcl8sIG1pbm9yXywgXAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUFLRV9HVUNfRldfUEFUSChwcmVmaXhfLCBtYWpvcl8s IG1pbm9yXywgcGF0Y2hfKSkKPj4gKwo+PiArI2RlZmluZSBIVUNfRldfQkxPQihwcmVmaXhfLCBt YWpvcl8sIG1pbm9yXywgYmxkX251bV8pIFwKPj4gK8KgwqDCoCBVQ19GV19CTE9CKG1ham9yXywg bWlub3JfLCBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNQUtFX0hVQ19GV19QQVRIKHByZWZp eF8sIG1ham9yXywgbWlub3JfLCBibGRfbnVtXykpCj4+ICsKPj4gKyNkZWZpbmUgTUFLRV9GV19M SVNUKHBsYXRmb3JtXywgcmV2aWRfLCBndWNfLCBodWNfKSBcCj4+ICt7IFwKPj4gK8KgwqDCoCAu cCA9IElOVEVMXyMjcGxhdGZvcm1fLCBcCj4+ICvCoMKgwqAgLmZpcnN0X3JldiA9IHJldmlkXywg XAo+PiArwqDCoMKgIC5ibG9ic1tJTlRFTF9VQ19GV19UWVBFX0dVQ10gPSBndWNfLCBcCj4+ICvC oMKgwqAgLmJsb2JzW0lOVEVMX1VDX0ZXX1RZUEVfSFVDXSA9IGh1Y18sIFwKPj4gK30sCj4KPiBu aXQ6IHVubmFtZWQgc3RydWN0IG9uIHdoaWNoIGFib3ZlIG1hY3JvIG9wZXJhdGVzIGlzIGRlZmlu ZWQgaW5zaWRlCj4gZnVuY3Rpb24gYmVsb3cgLSBlaXRoZXIga2VlcCB0aGlzIG1hY3JvIHByaXZh dGUgdG8gdGhlIGZ1bmN0aW9uIG9yCj4gbW92ZSBzdHJ1Y3QgZGVmaW5pdGlvbiBvdXRzaWRlIGZ1 bmN0aW9uLAo+Cj4gYnR3LCBhYm92ZSB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCBkZWZpbml0aW9u IGZvciBzdHJ1Y3QgaW50ZWxfdWNfZndfYmxvYgo+Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtf X3VjX2Z3X3NlbGVjdChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LCBlbnVtIGludGVsX3BsYXRm b3JtIHAsIHU4IAo+PiByZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RhdGljIGNvbnN0IHN0cnVjdCBf X3BhY2tlZCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbnVtIGludGVsX3BsYXRmb3JtIHA7Cj4KPiBu aXQ6IHVzaW5nIGZ1bGwgInBsYXRmb3JtIiB3b3JkIGluc3RlYWQgb2YgInAiIHdpbGwgbm90IGh1 cnQKPgo+PiArwqDCoMKgwqDCoMKgwqAgdTggZmlyc3RfcmV2Owo+Cj4gbml0OiBtYXliZSBqdXN0 ICJyZXYiLCBmcm9tIGNvbW1lbnQgYWJvdmUgd2Uga25vdyB0aGF0IHRoaXMgaXMgZmlyc3Qgb25l Cj4KPj4gK8KgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpbnRlbF91Y19md19ibG9iIGJsb2Jz W0lOVEVMX1VDX05VTV9UWVBFU107Cj4+ICvCoMKgwqAgfSBmd19ibG9ic1tdID0gewo+PiArwqDC oMKgwqDCoMKgwqAgSU5URUxfVUNfRklSTVdBUkVfREVGUyhNQUtFX0ZXX0xJU1QsIEdVQ19GV19C TE9CLCBIVUNfRldfQkxPQikKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZndfYmxvYnMpICYmIHAgPD0gZndf YmxvYnNbaV0ucDsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocCA9PSBmd19ibG9ic1tp XS5wICYmIHJldiA+PSBmd19ibG9ic1tpXS5maXJzdF9yZXYpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3Qgc3RydWN0IGludGVsX3VjX2Z3X2Jsb2IgKmJsb2IgPQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmZ3X2Jsb2JzW2ldLmJsb2JzW3VjX2Z3 LT50eXBlXTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPnBhdGggPSBibG9iLT5w YXRoOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+bWFqb3JfdmVyX3dhbnRlZCA9 IGJsb2ItPm1ham9yOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+bWlub3JfdmVy X3dhbnRlZCA9IGJsb2ItPm1pbm9yOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsK Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKiBtYWtl IHN1cmUgdGhlIGxpc3QgaXMgb3JkZXJlZCBhcyBleHBlY3RlZCAqLwo+PiArwqDCoMKgIGlmIChJ U19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGZ3X2Jsb2JzKTsgaSsrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChmd19ibG9ic1tpXS5wIDwgZndfYmxvYnNbaSAtIDFdLnApCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGZ3X2Jsb2JzW2ldLnAgPT0gZndfYmxvYnNbaSAtIDFdLnAg JiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmd19ibG9ic1tpXS5maXJzdF9y ZXYgPCBmd19ibG9ic1tpIC0gMV0uZmlyc3RfcmV2KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2Vy cigiaW52YWxpZCBGVyBibG9iIG9yZGVyOiAlcyByJXUgY29tZXMgYmVmb3JlICVzIAo+PiByJXVc biIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfcGxhdGZv cm1fbmFtZShmd19ibG9ic1tpIC0gMV0ucCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZndfYmxvYnNbaSAtIDFdLmZpcnN0X3JldiwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9wbGF0Zm9ybV9uYW1lKGZ3X2Jsb2JzW2ldLnAp LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZ3X2Jsb2JzW2ldLmZp cnN0X3Jldik7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPnBhdGggPSBO VUxMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5U RUxfVUNfRklSTVdBUkVfTk9UX1NVUFBPUlRFRDsKPgo+IGlmIHdlIHJlb3JkZXIgdGhpcyBzZWxm dGVzdCB3aXRoIGFjdHVhbCBzZWFyY2ggdGhlbiBtYXliZSB3ZSBjYW4gc2tpcAo+IHJlc2V0dGlu ZyBwYXRoIChidHcsIG1ham9yL21pbm9yIGFyZSB1bnRvdWNoZWQpIGFuZCByZXR1cm4KPgoKQWN0 dWFsbHkgYmV0dGVyIHRvIGFsd2F5cyBzY2FuIHRoZSB3aG9sZSB0YWJsZSAoYXMgeW91IG1lbnRp b25lZCBiZWxvdykKCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPgo+IG1heWJl IGZvciBmdWxsIHNlbGZ0ZXN0IHdlIHNob3VsZCBzY2FuIHdob2xlIHRhYmxlIGluc3RlYWQgb2Yg cmV0dXJuaW5nCj4gb24gZmlyc3QgbWlzbWF0Y2ggPwo+Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArdWNfZndfc2VsZWN0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQo+ PiArewo+PiArwqDCoMKgIEdFTV9CVUdfT04odWNfZnctPmZldGNoX3N0YXR1cyAhPSBJTlRFTF9V Q19GSVJNV0FSRV9VTklOSVRJQUxJWkVEKTsKPj4gKwo+PiArwqDCoMKgIGlmICghSEFTX0dUX1VD KGk5MTUpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxf VUNfRklSTVdBUkVfTk9UX1NVUFBPUlRFRDsKPgo+IG1heWJlIHdlIHNob3VsZCBjaGVjayB0aGlz IGluICdpbml0X2Vhcmx5JyBiZWZvcmUgY2FsbGluZyAnc2VsZWN0JyAKPiBmdW5jdGlvbiA/Cj4K Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCB1 Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9UX1NUQVJURUQ7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAodW5saWtlbHkoaTkxNV9tb2RwYXJhbXMuZ3VjX2Zpcm13YXJlX3BhdGgg JiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+dHlwZSA9PSBJTlRFTF9VQ19G V19UWVBFX0dVQykpCj4+ICvCoMKgwqDCoMKgwqDCoCB1Y19mdy0+cGF0aCA9IGk5MTVfbW9kcGFy YW1zLmd1Y19maXJtd2FyZV9wYXRoOwo+PiArwqDCoMKgIGVsc2UgaWYgKHVubGlrZWx5KGk5MTVf bW9kcGFyYW1zLmh1Y19maXJtd2FyZV9wYXRoICYmCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1Y19mdy0+dHlwZSA9PSBJTlRFTF9VQ19GV19UWVBFX0hVQykpCj4+ICvCoMKgwqDCoMKg wqDCoCB1Y19mdy0+cGF0aCA9IGk5MTVfbW9kcGFyYW1zLmh1Y19maXJtd2FyZV9wYXRoOwo+PiAr wqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgIF9fdWNfZndfc2VsZWN0KHVjX2Z3LCBJTlRF TF9JTkZPKGk5MTUpLT5wbGF0Zm9ybSwgCj4+IElOVEVMX1JFVklEKGk5MTUpKTsKPgo+IGlmIHdl IGRvbid0IHNlbGVjdCBhbnl0aGluZyAobm8gb3ZlcnJpZGUsIG5vIGhhcmRjb2RlZCBwYXRoKSB0 aGVuIHdlCj4gd2lsbCBzdGF5IHdpdGggZmV0Y2hfc3RhdHVzID0gTk9UX1NUQVJURUQsIGJ1dCBJ IHRoaW5rIGZvciBzdWNoIGNhc2UKPiB3ZSBzaG91bGQgdXNlIE5PVF9TVVBQT1JURUQKCkknbSBu b3QgY2hhbmdpbmcgYW55IG9mIHRoZSBzdGF0dXMgZmxvdyBpbiB0aGlzIHBhdGNoIDspCgpBbnl3 YXksIEkgYWdyZWUgd2l0aCB5b3UsIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0IGF0IHRoZSBtb21lbnQg YXMgd2Ugc3RpbGwgCm5lZWQgYSB3YXkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG5vIHVDIEhX IChOT1RfU1VQUE9SVEVEKSBhbmQgSFcgCmF2YWlsYWJsZSBidXQgbm8gRlcgKE5PVF9TVEFSVEVE L1NFTEVDVElPTl9ET05FICYmIHBhdGggPT0gTlVMTCkgZm9yIHRoZSAKZXJyb3IgbG9nZ2luZyBp biBzYW5pdGl6ZSBvcHRpb25zLiBBcyB3ZSd2ZSBkaXNjdXNzZWQgb2ZmbGluZSwgT25jZSAKd2Un dmUgY2xlYW5lZCB1cCB0aGUgc2FuaXRpemluZyB3ZSBjYW4gbWFrZSB0aG9zZSAyIHN0YXRlcyBj b252ZXJnZSBpbnRvIApvbmUuIEFsdGVybmF0aXZlbHksIHdlIGNhbiBqdXN0IGRyb3AgdGhlIGxv ZyBkaWZmZXJlbmNlIHNpbmNlIHRoZSB1c2VyIAp3b24ndCByZWFsbHkgY2FyZSB3aHkgdGhlIHN1 cHBvcnQgaXMgbm90IHRoZXJlIGFuZCBhIGRldmVsb3BlciBzaG91bGQgYmUgCmFibGUgdG8gcXVp Y2tseSBzcG90IHRoZSByZWFzb24uIFRob3VnaHRzPwoKPgo+PiArfQo+PiArCj4+ICsvKioKPj4g KyAqIGludGVsX3VjX2Z3X2luaXRfZWFybHkgLSBpbml0aWFsaXplIHRoZSB1QyBvYmplY3QgYW5k IHNlbGVjdCB0aGUgCj4+IGZpcm13YXJlCj4+ICsgKiBAaTkxNTogZGV2aWNlIHByaXZhdGUKPj4g KyAqIEB1Y19mdzogdUMgZmlybXdhcmUKPj4gKyAqIEB0eXBlOiB0eXBlIG9mIHVDCj4+ICsgKgo+ PiArICogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2Ygb3VyIHVDIG9iamVjdCBhbmQgcmVsZXZhbnQg dHJhY2tpbmcgYW5kIAo+PiBzZWxlY3QgdGhlCj4+ICsgKiBmaXJtd2FyZSB0byBmZXRjaCBhbmQg bG9hZC4KPj4gKyAqLwo+PiArdm9pZCBpbnRlbF91Y19md19pbml0X2Vhcmx5KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZW51bSBpbnRlbF91Y19md190eXBlIHR5cGUpCj4KPiB2b2lkIGludGVsX3VjX2Z3X2luaXRf ZWFybHkoCj4gwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAo+IMKgwqDCoMKgZW51 bSBpbnRlbF91Y19md190eXBlIHR5cGUsCj4gwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKPgo+IHRvIHVzZSBjb3JyZWN0IG9iamVjdC9zdWJqZWN0IG9yZGVyaW5nCj4KCldp bGwgZmxpcC4gSSBoYWQgaXQgbGlrZSB0aGlzIHRvIG1hdGNoIHRoZSBpbnRlbF91Y19md19mZXRj aCBmdW5jdGlvbi4KCj4+ICt7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogd2UgdXNlIEZJ Uk1XQVJFX1VOSU5JVElBTElaRUQgdG8gZGV0ZWN0IGNoZWNrcyBhZ2FpbnN0IAo+PiBmZXRjaF9z dGF0dXMKPj4gK8KgwqDCoMKgICogYmVmb3JlIHdlJ3JlIGxvb2tlZCBhdCB0aGUgSFcgY2FwcyB0 byBzZWUgaWYgd2UgaGF2ZSB1YyBzdXBwb3J0Cj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIEJV SUxEX0JVR19PTihJTlRFTF9VQ19GSVJNV0FSRV9VTklOSVRJQUxJWkVEKTsKPj4gKwo+PiArwqDC oMKgIHVjX2Z3LT5wYXRoID0gTlVMTDsKPj4gK8KgwqDCoCB1Y19mdy0+ZmV0Y2hfc3RhdHVzID0g SU5URUxfVUNfRklSTVdBUkVfVU5JTklUSUFMSVpFRDsKPj4gK8KgwqDCoCB1Y19mdy0+bG9hZF9z dGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT1RfU1RBUlRFRDsKPj4gK8KgwqDCoCB1Y19mdy0+ dHlwZSA9IHR5cGU7Cj4+ICsKPj4gK8KgwqDCoCB1Y19md19zZWxlY3QoaTkxNSwgdWNfZncpOwo+ Cj4gbWF5YmU6Cj4gwqDCoMKgwqBCVUlMRF9CVUdfT04oSU5URUxfVUNfRklSTVdBUkVfVU5JTklU SUFMSVpFRCk7Cj4gwqDCoMKgwqBHRU1fQlVHX09OKHVjX2Z3LT5mZXRjaF9zdGF0dXMpOwo+IMKg wqDCoMKgR0VNX0JVR19PTih1Y19mdy0+bG9hZF9zdGF0dXMpOwo+IMKgwqDCoMKgR0VNX0JVR19P Tih1Y19mdy0+cGF0aCk7Cj4KPiDCoMKgwqDCoHVjX2Z3LT50eXBlID0gdHlwZTsKPgo+IMKgwqDC oMKgaWYgKEhBU19HVF9VQyhpOTE1KSAmJiAhX191Y19md19vdmVycmlkZSh1Y19mdykpCj4gwqDC oMKgwqDCoMKgwqAgX191Y19md19hdXRvX3NlbGVjdCh1Y19mdywgSU5URUxfSU5GTyhpOTE1KS0+ cGxhdGZvcm0sIAo+IElOVEVMX1JFVklEKGk5MTUpKTsKPgo+IMKgwqDCoMKgaWYgKHVjX2Z3LT5w YXRoKSB7Cj4gwqDCoMKgwqDCoMKgwqAgdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJ Uk1XQVJFX05PVF9TVEFSVEVEOwo+IMKgwqDCoMKgwqDCoMKgIHVjX2Z3LT5sb2FkX3N0YXR1cyA9 IElOVEVMX1VDX0ZJUk1XQVJFX05PVF9TVEFSVEVEOwo+IMKgwqDCoMKgfSBlbHNlIHsKPiDCoMKg wqDCoMKgwqDCoCB1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9UX1NV UFBPUlRFRDsKPiDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+bG9hZF9zdGF0dXMgPSBJTlRFTF9VQ19G SVJNV0FSRV9OT1RfU1VQUE9SVEVEOwo+IMKgwqDCoMKgfQoKSSBjYW4ndCBkbyBpdCBsaWtlIHRo aXMgZm9yIHRoZSBsb2dnaW5nIHJlYXNvbnMgbWVudGlvbmVkIGFib3ZlLCBidXQgSSAKY2FuIHJl d29yayBpdCBhczoKCiDCoMKgwqAgaWYgKCFIQVNfR1RfVUMoaTkxNSkpIHsKIMKgwqDCoCDCoMKg wqAgdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PVF9TVVBQT1JURUQ7 CiDCoMKgwqAgwqDCoMKgIHJldHVybjsKIMKgwqDCoCB9CgogwqDCoMKgIGlmKCFfX3VjX2Z3X292 ZXJyaWRlKHVjX2Z3KSkKIMKgwqDCoCDCoMKgwqAgX191Y19md19hdXRvX3NlbGVjdCh1Y19mdywg SU5URUxfSU5GTyhpOTE1KS0+cGxhdGZvcm0sIApJTlRFTF9SRVZJRChpOTE1KSk7CgogwqDCoMKg IHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT1RfU1RBUlRFRDsKCiDC oMKgwqAgcmV0dXJuOwoKPj4gK30KPj4gKwo+PiDCoC8qKgo+PiDCoCAqIGludGVsX3VjX2Z3X2Zl dGNoIC0gZmV0Y2ggdUMgZmlybXdhcmUKPj4gwqAgKgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWNfZncuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF91Y19mdy5oCj4+IGluZGV4IDgzM2QwNGQwNjU3Ni4uYzI4NjhlZjE1ZWRh IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Y19mdy5o Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjX2Z3LmgKPj4gQEAg LTQ0LDggKzQ0LDkgQEAgZW51bSBpbnRlbF91Y19md19zdGF0dXMgewo+PiDCoH07Cj4+IGVudW0g aW50ZWxfdWNfZndfdHlwZSB7Cj4+IC3CoMKgwqAgSU5URUxfVUNfRldfVFlQRV9HVUMsCj4+IC3C oMKgwqAgSU5URUxfVUNfRldfVFlQRV9IVUMKPj4gK8KgwqDCoCBJTlRFTF9VQ19GV19UWVBFX0dV QyA9IDAsCj4+ICvCoMKgwqAgSU5URUxfVUNfRldfVFlQRV9IVUMsCj4+ICvCoMKgwqAgSU5URUxf VUNfTlVNX1RZUEVTCj4KPiB0aGlzIGlzIGJhZCBpZGVhLCBhcyBub3cgd2UgaGF2ZSBOVU1fVFlQ RVMgYXMgdmFsaWQgZncgdHlwZQo+ICNkZWZpbmUgSU5URUxfVUNfTlVNX1RZUEVTIDIKPgoKb2sK CkRhbmllbGUKCj4+IMKgfTsKPj4gLyoKPj4gQEAgLTEwNSwyNCArMTA2LDkgQEAgc3RhdGljIGlu bGluZSBjb25zdCBjaGFyIAo+PiAqaW50ZWxfdWNfZndfdHlwZV9yZXByKGVudW0gaW50ZWxfdWNf ZndfdHlwZSB0eXBlKQo+PiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAiR3VDIjsKPj4gwqDCoMKg wqAgY2FzZSBJTlRFTF9VQ19GV19UWVBFX0hVQzoKPj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g Ikh1QyI7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAidUMi Owo+PiDCoMKgwqDCoCB9Cj4+IC3CoMKgwqAgcmV0dXJuICJ1QyI7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBpbmxpbmUKPj4gLXZvaWQgaW50ZWxfdWNfZndfaW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxf dWNfZncgKnVjX2Z3LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gaW50 ZWxfdWNfZndfdHlwZSB0eXBlKQo+PiAtewo+PiAtwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIHdl IHVzZSBGSVJNV0FSRV9VTklOSVRJQUxJWkVEIHRvIGRldGVjdCBjaGVja3MgYWdhaW5zdCAKPj4g ZmV0Y2hfc3RhdHVzCj4+IC3CoMKgwqDCoCAqIGJlZm9yZSB3ZSdyZSBsb29rZWQgYXQgdGhlIEhX IGNhcHMgdG8gc2VlIGlmIHdlIGhhdmUgdWMgc3VwcG9ydAo+PiAtwqDCoMKgwqAgKi8KPj4gLcKg wqDCoCBCVUlMRF9CVUdfT04oSU5URUxfVUNfRklSTVdBUkVfVU5JTklUSUFMSVpFRCk7Cj4+IC0K Pj4gLcKgwqDCoCB1Y19mdy0+cGF0aCA9IE5VTEw7Cj4+IC3CoMKgwqAgdWNfZnctPmZldGNoX3N0 YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1VOSU5JVElBTElaRUQ7Cj4+IC3CoMKgwqAgdWNfZnct PmxvYWRfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9UX1NUQVJURUQ7Cj4+IC3CoMKgwqAg dWNfZnctPnR5cGUgPSB0eXBlOwo+PiDCoH0KPj4gc3RhdGljIGlubGluZSBib29sIGludGVsX3Vj X2Z3X2lzX3NlbGVjdGVkKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpCj4+IEBAIC0xNjQsNyAr MTUwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdTMyIAo+PiBpbnRlbF91Y19md19nZXRfdXBsb2FkX3Np emUoc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdykKPj4gwqDCoMKgwqAgcmV0dXJuIHVjX2Z3LT5o ZWFkZXJfc2l6ZSArIHVjX2Z3LT51Y29kZV9zaXplOwo+PiDCoH0KPj4gLXZvaWQgaW50ZWxfdWNf ZndfZmV0Y2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiArdm9pZCBpbnRl bF91Y19md19pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBpbnRlbF91Y19md190eXBlIHR5 cGUpOwo+PiArdm9pZCBpbnRlbF91Y19md19mZXRjaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF91Y19m dyAqdWNfZncpOwo+PiDCoHZvaWQgaW50ZWxfdWNfZndfY2xlYW51cF9mZXRjaChzdHJ1Y3QgaW50 ZWxfdWNfZncgKnVjX2Z3KTsKPj4gwqBpbnQgaW50ZWxfdWNfZndfdXBsb2FkKHN0cnVjdCBpbnRl bF91Y19mdyAqdWNfZncsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZng=