From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3F418C433EF for ; Fri, 6 May 2022 18:32:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JIHd8RGy7LAi5fwc4H1K3FiP8TnuryaJQQLqp+tC97g=; b=Vbuzgutd18b/gq YAqp8oLRuenEl9/+4IEJHAdE5xWKEz85p9IyFN2mgnBHMmk5tEOy2/UoV9mTjoSo3Uw6qhvMdCkOO aTAqH/dlYy5VHXfnwTRkccbnBY89batjlfJGIyD6uT6tdheGl4UD7b+Ab7EBMb7xgO55NXTAhZ7OO ShIhgEX4M0Hie+tvUZYeoCVudR9BBgxf/vx1oGUxj8hBaVgMinTM0IE+K/cjpqrJX5fEk4cGFf7jv +E+++jPY04WML/jiSTc4bmVlxVJ/iahL9pQf8JHKQHF6hQ0B5NbIT18kIA7uEuv4BVj4o2TOzkhVH qBiMKlSw0dREb/iVyRtw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nn2jG-004hmR-Se; Fri, 06 May 2022 18:31:02 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nn2jB-004hl4-Ts for linux-arm-kernel@lists.infradead.org; Fri, 06 May 2022 18:31:00 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 15F4AB83590; Fri, 6 May 2022 18:30:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 76BC9C385A8; Fri, 6 May 2022 18:30:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651861854; bh=FkN04EloTtuPxgR0bSvk+Lk4xOANic4or5xe50i6rY4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=IFtpYuRKscAivolwJtsnW7BAYle6d72Agn3W+8Qw3RtCtoAl4gGJt38HJqXj8vUE9 VtNgxvlQFPOw1b1pMQxNc5AT821G/+oPNFMWoVktJezoyoOaV5IPreIR9kPvAZpPwz Mmz/Pcay+ufBdQLsSVN75dbcmv8eMo8b7RpsnKGQ1/OIjpU1L3JCIjVDvc/9F4R29t 14dCzpGPA4tUbXno8/nHTXibHkmi8qhMro7m0lcwzZuoLCsQUChB51UGS4r2FOEN8c YH7BcrR3vaCjZl6oiWwWHCYkUaQgUvHaL2mOhYYbVupSlZkgJIkieNB3b/8rdAR8B6 ynvi1RAe6UTDg== Received: by pali.im (Postfix) id 676471141; Fri, 6 May 2022 20:30:51 +0200 (CEST) Date: Fri, 6 May 2022 20:30:51 +0200 From: Pali =?utf-8?B?Um9ow6Fy?= To: Marc Zyngier Cc: Thomas Gleixner , Rob Herring , Bjorn Helgaas , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Thomas Petazzoni , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Marek =?utf-8?B?QmVow7pu?= , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 2/6] irqchip/armada-370-xp: Implement SoC Error interrupts Message-ID: <20220506183051.wimo7p4nuqfnl2aj@pali> References: <20220506134029.21470-1-pali@kernel.org> <20220506134029.21470-3-pali@kernel.org> <87mtfu7ccd.wl-maz@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87mtfu7ccd.wl-maz@kernel.org> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220506_113058_300471_DF5AADD3 X-CRM114-Status: GOOD ( 49.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpZGF5IDA2IE1heSAyMDIyIDE5OjE5OjQ2IE1hcmMgWnluZ2llciB3cm90ZToKPiBPbiBG cmksIDA2IE1heSAyMDIyIDE0OjQwOjI1ICswMTAwLAo+IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gCj4gPiBNUElDIElSUSA0IGlzIHVzZWQgYXMgU29DIEVycm9yIFN1 bW1hcnkgaW50ZXJydXB0IGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8KPiA+IGFub3RoZXIgaGllcmFy Y2h5IG9mIFNvQyBFcnJvciBpbnRlcnJ1cHRzLiBJbXBsZW1lbnQgYSBuZXcgSVJRIGNoaXAgYW5k Cj4gPiBkb21haW4gZm9yIGFjY2Vzc2luZyB0aGlzIElSUSBoaWVyYXJjaHkuCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+Cj4gPiAtLS0KPiA+ICBk cml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYyB8IDIxMyArKysrKysrKysrKysrKysr KysrKysrKysrKystCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCAzIGRl bGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hcm1h ZGEtMzcwLXhwLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYwo+ID4gaW5k ZXggZWJkNzZlYTFjNjliLi43MTU3OGI2NWY1YzggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2ly cWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYwo+ID4gKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1h cm1hZGEtMzcwLXhwLmMKPiA+IEBAIC0xMTcsNiArMTE3LDggQEAKPiA+ICAvKiBSZWdpc3RlcnMg cmVsYXRpdmUgdG8gbWFpbl9pbnRfYmFzZSAqLwo+ID4gICNkZWZpbmUgQVJNQURBXzM3MF9YUF9J TlRfQ09OVFJPTAkJKDB4MDApCj4gPiAgI2RlZmluZSBBUk1BREFfMzcwX1hQX1NXX1RSSUdfSU5U X09GRlMJCSgweDA0KQo+ID4gKyNkZWZpbmUgQVJNQURBXzM3MF9YUF9JTlRfU09DX0VSUl8wX0NB VVNFX09GRlMJKDB4MjApCj4gPiArI2RlZmluZSBBUk1BREFfMzcwX1hQX0lOVF9TT0NfRVJSXzFf Q0FVU0VfT0ZGUwkoMHgyNCkKPiA+ICAjZGVmaW5lIEFSTUFEQV8zNzBfWFBfSU5UX1NFVF9FTkFC TEVfT0ZGUwkoMHgzMCkKPiA+ICAjZGVmaW5lIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX0VOQUJM RV9PRkZTCSgweDM0KQo+ID4gICNkZWZpbmUgQVJNQURBXzM3MF9YUF9JTlRfU09VUkNFX0NUTChp cnEpCSgweDEwMCArIGlycSo0KQo+ID4gQEAgLTEzMCw2ICsxMzIsOCBAQAo+ID4gICNkZWZpbmUg QVJNQURBXzM3MF9YUF9DUFVfSU5UQUNLX09GRlMJCSgweDQ0KQo+ID4gICNkZWZpbmUgQVJNQURB XzM3MF9YUF9JTlRfU0VUX01BU0tfT0ZGUwkJKDB4NDgpCj4gPiAgI2RlZmluZSBBUk1BREFfMzcw X1hQX0lOVF9DTEVBUl9NQVNLX09GRlMJKDB4NEMpCj4gPiArI2RlZmluZSBBUk1BREFfMzcwX1hQ X0lOVF9TT0NfRVJSXzBfTUFTS19PRkYJKDB4NTApCj4gPiArI2RlZmluZSBBUk1BREFfMzcwX1hQ X0lOVF9TT0NfRVJSXzFfTUFTS19PRkYJKDB4NTQpCj4gPiAgI2RlZmluZSBBUk1BREFfMzcwX1hQ X0lOVF9GQUJSSUNfTUFTS19PRkZTCSgweDU0KQo+ID4gICNkZWZpbmUgQVJNQURBXzM3MF9YUF9J TlRfQ0FVU0VfUEVSRihjcHUpCSgxIDw8IGNwdSkKPiA+ICAKPiA+IEBAIC0xNDYsNiArMTUwLDgg QEAKPiA+ICBzdGF0aWMgdm9pZCBfX2lvbWVtICpwZXJfY3B1X2ludF9iYXNlOwo+ID4gIHN0YXRp YyB2b2lkIF9faW9tZW0gKm1haW5faW50X2Jhc2U7Cj4gPiAgc3RhdGljIHN0cnVjdCBpcnFfZG9t YWluICphcm1hZGFfMzcwX3hwX21waWNfZG9tYWluOwo+ID4gK3N0YXRpYyBzdHJ1Y3QgaXJxX2Rv bWFpbiAqYXJtYWRhXzM3MF94cF9zb2NfZXJyX2RvbWFpbjsKPiA+ICtzdGF0aWMgdW5zaWduZWQg aW50IHNvY19lcnJfaXJxX251bV9yZWdzOwo+ID4gIHN0YXRpYyB1MzIgZG9vcmJlbGxfbWFza19y ZWc7Cj4gPiAgc3RhdGljIGludCBwYXJlbnRfaXJxOwo+ID4gICNpZmRlZiBDT05GSUdfUENJX01T SQo+ID4gQEAgLTE1Niw2ICsxNjIsOCBAQCBzdGF0aWMgREVGSU5FX01VVEVYKG1zaV91c2VkX2xv Y2spOwo+ID4gIHN0YXRpYyBwaHlzX2FkZHJfdCBtc2lfZG9vcmJlbGxfYWRkcjsKPiA+ICAjZW5k aWYKPiA+ICAKPiA+ICtzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX3VubWFz ayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwo+ID4gKwo+ID4gIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19w ZXJjcHVfaXJxKGlycV9od19udW1iZXJfdCBpcnEpCj4gPiAgewo+ID4gIAlpZiAoaXJxIDw9IEFS TUFEQV8zNzBfWFBfTUFYX1BFUl9DUFVfSVJRUykKPiA+IEBAIC01MDksNiArNTE3LDI3IEBAIHN0 YXRpYyB2b2lkIGFybWFkYV94cF9tcGljX3JlZW5hYmxlX3BlcmNwdSh2b2lkKQo+ID4gIAkJYXJt YWRhXzM3MF94cF9pcnFfdW5tYXNrKGRhdGEpOwo+ID4gIAl9Cj4gPiAgCj4gPiArCS8qIFJlLWVu YWJsZSBwZXItQ1BVIFNvQyBFcnJvciBpbnRlcnJ1cHRzIHRoYXQgd2VyZSBlbmFibGVkIGJlZm9y ZSBzdXNwZW5kICovCj4gPiArCWZvciAoaXJxID0gMDsgaXJxIDwgc29jX2Vycl9pcnFfbnVtX3Jl Z3MgKiAzMjsgaXJxKyspIHsKPiA+ICsJCXN0cnVjdCBpcnFfZGF0YSAqZGF0YTsKPiA+ICsJCWlu dCB2aXJxOwo+ID4gKwo+ID4gKwkJdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKGFybWFkYV8zNzBf eHBfc29jX2Vycl9kb21haW4sIGlycSk7Cj4gPiArCQlpZiAodmlycSA9PSAwKQo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwo+ID4gKwkJZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7Cj4gPiAr Cj4gPiArCQlpZiAoIWlycV9wZXJjcHVfaXNfZW5hYmxlZCh2aXJxKSkKPiA+ICsJCQljb250aW51 ZTsKPiA+ICsKPiA+ICsJCWFybWFkYV8zNzBfeHBfc29jX2Vycl9pcnFfdW5tYXNrKGRhdGEpOwo+ ID4gKwl9Cj4gCj4gU28geW91IGRvIHRoaXMgbG9vcCBhbmQgYWxsIHRoZXNlIGxvb2t1cHMsIGJv dGggaGVyZSBhbmQgaW4gdGhlIHJlc3VtZQo+IGZ1bmN0aW9uIChkdXBsaWNhdGVkIGNvZGUhKSBq dXN0IHRvIGJlIGFibGUgdG8gY2FsbCB0aGUgdW5tYXNrCj4gZnVuY3Rpb24/ICBUaGlzIHdvdWxk IGJlIGJldHRlciBzZXJ2ZWQgYnkgdHdvIHN0cmFpZ2h0IHdyaXRlcyBvZiB0aGUKPiBtYXNrIHJl Z2lzdGVyLCB3aGljaCB5b3UnZCBjb252ZW5pZW50bHkgc2F2ZSBvbiBzdXNwZW5kLgo+IAo+IFll cywgeW91IGhhdmUgb25seSBkdXBsaWNhdGVkIHRoZSBleGlzdGluZyBsb2dpYy4gQnV0IHN1cmVs eSB0aGVyZSBpcwo+IHNvbWV0aGluZyBiZXR0ZXIgdG8gZG8uCgpZZXMsIEkganVzdCB1c2VkIGV4 aXN0aW5nIGxvZ2ljLgoKSSdtIG5vdCByZXdyaXRpbmcgZHJpdmVyIG9yIGRvaW5nIGJpZyByZWZh Y3RvciBvZiBpdCwgYXMgdGhpcyBpcyBub3QgaW4KdGhlIHNjb3BlIG9mIHRoZSBQQ0llIEFFUiBp bnRlcnJ1cHQgc3VwcG9ydC4KCj4gPiArCj4gPiArCS8qIFVubWFzayBzdW1tYXJ5IFNvQyBFcnJv ciBJbnRlcnJ1cHQgKi8KPiA+ICsJaWYgKHNvY19lcnJfaXJxX251bV9yZWdzID4gMCkKPiA+ICsJ CXdyaXRlbCg0LCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFT S19PRkZTKTsKPiA+ICsKPiA+ICAJaXBpX3Jlc3VtZSgpOwo+ID4gIH0KPiA+ICAKPiA+IEBAIC01 NDYsOCArNTc1LDggQEAgc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhcm1hZGFfMzcwX3hwX2lycV9j aGlwID0gewo+ID4gIHN0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9tcGljX2lycV9tYXAoc3RydWN0 IGlycV9kb21haW4gKmgsCj4gPiAgCQkJCSAgICAgIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdf bnVtYmVyX3QgaHcpCj4gPiAgewo+ID4gLQkvKiBJUlFzIDAgYW5kIDEgY2Fubm90IGJlIG1hcHBl ZCwgdGhleSBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5ICovCj4gPiAtCWlmIChodyA8PSAxKQo+ID4g KwkvKiBJUlFzIDAsIDEgYW5kIDQgY2Fubm90IGJlIG1hcHBlZCwgdGhleSBhcmUgaGFuZGxlZCBp bnRlcm5hbGx5ICovCj4gPiArCWlmIChodyA8PSAxIHx8IGh3ID09IDQpCj4gPiAgCQlyZXR1cm4g LUVJTlZBTDsKPiA+ICAKPiA+ICAJYXJtYWRhXzM3MF94cF9pcnFfbWFzayhpcnFfZ2V0X2lycV9k YXRhKHZpcnEpKTsKPiA+IEBAIC01NzcsNiArNjA2LDk5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aXJxX2RvbWFpbl9vcHMgYXJtYWRhXzM3MF94cF9tcGljX2lycV9vcHMgPSB7Cj4gPiAgCS54bGF0 ZSA9IGlycV9kb21haW5feGxhdGVfb25lY2VsbCwKPiA+ICB9Owo+ID4gIAo+ID4gK3N0YXRpYyBE RUZJTkVfUkFXX1NQSU5MT0NLKGFybWFkYV8zNzBfeHBfc29jX2Vycl9sb2NrKTsKPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX21hc2soc3RydWN0IGlycV9k YXRhICpkKQo+ID4gK3sKPiA+ICsJaXJxX2h3X251bWJlcl90IGh3aXJxID0gaXJxZF90b19od2ly cShkKTsKPiA+ICsJdTMyIHJlZywgbWFzazsKPiA+ICsKPiA+ICsJcmVnID0gaHdpcnEgPj0gMzIg PyBBUk1BREFfMzcwX1hQX0lOVF9TT0NfRVJSXzFfTUFTS19PRkYKPiA+ICsJCQkgIDogQVJNQURB XzM3MF9YUF9JTlRfU09DX0VSUl8wX01BU0tfT0ZGOwo+ID4gKwo+ID4gKwlyYXdfc3Bpbl9sb2Nr KCZhcm1hZGFfMzcwX3hwX3NvY19lcnJfbG9jayk7Cj4gPiArCW1hc2sgPSByZWFkbChwZXJfY3B1 X2ludF9iYXNlICsgcmVnKTsKPiA+ICsJbWFzayAmPSB+QklUKGh3aXJxICUgMzIpOwo+ID4gKwl3 cml0ZWwobWFzaywgcGVyX2NwdV9pbnRfYmFzZSArIHJlZyk7Cj4gPiArCXJhd19zcGluX3VubG9j aygmYXJtYWRhXzM3MF94cF9zb2NfZXJyX2xvY2spOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQp Cj4gPiArewo+ID4gKwlpcnFfaHdfbnVtYmVyX3QgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwo+ ID4gKwl1MzIgcmVnLCBtYXNrOwo+ID4gKwo+ID4gKwlyZWcgPSBod2lycSA+PSAzMiA/IEFSTUFE QV8zNzBfWFBfSU5UX1NPQ19FUlJfMV9NQVNLX09GRgo+ID4gKwkJCSAgOiBBUk1BREFfMzcwX1hQ X0lOVF9TT0NfRVJSXzBfTUFTS19PRkY7Cj4gPiArCj4gPiArCXJhd19zcGluX2xvY2soJmFybWFk YV8zNzBfeHBfc29jX2Vycl9sb2NrKTsKPiA+ICsJbWFzayA9IHJlYWRsKHBlcl9jcHVfaW50X2Jh c2UgKyByZWcpOwo+ID4gKwltYXNrIHw9IEJJVChod2lycSAlIDMyKTsKPiA+ICsJd3JpdGVsKG1h c2ssIHBlcl9jcHVfaW50X2Jhc2UgKyByZWcpOwo+ID4gKwlyYXdfc3Bpbl91bmxvY2soJmFybWFk YV8zNzBfeHBfc29jX2Vycl9sb2NrKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhcm1h ZGFfMzcwX3hwX3NvY19lcnJfaXJxX21hc2tfb25fY3B1KHZvaWQgKnBhcikKPiA+ICt7Cj4gPiAr CXN0cnVjdCBpcnFfZGF0YSAqZCA9IHBhcjsKPiA+ICsJYXJtYWRhXzM3MF94cF9zb2NfZXJyX2ly cV9tYXNrKGQpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBh cm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX3VubWFza19vbl9jcHUodm9pZCAqcGFyKQo+ID4gK3sK PiA+ICsJc3RydWN0IGlycV9kYXRhICpkID0gcGFyOwo+ID4gKwlhcm1hZGFfMzcwX3hwX3NvY19l cnJfaXJxX3VubWFzayhkKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgYXJtYWRhX3hwX3NvY19lcnJfaXJxX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEg KmQsCj4gPiArCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKPiA+ICsJCQkJ CSAgICAgIGJvb2wgZm9yY2UpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgY3B1Owo+ID4gKwo+ ID4gKwljcHVzX3JlYWRfbG9jaygpOwo+ID4gKwo+ID4gKwkvKiBGaXJzdCBkaXNhYmxlIElSUSBv biBhbGwgY29yZXMgKi8KPiA+ICsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCj4gPiArCQlzbXBf Y2FsbF9vbl9jcHUoY3B1LCBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX21hc2tfb25fY3B1LCBk LCB0cnVlKTsKPiA+ICsKPiA+ICsJLyogU2VsZWN0IGEgc2luZ2xlIGNvcmUgZnJvbSB0aGUgYWZm aW5pdHkgbWFzayB3aGljaCBpcyBvbmxpbmUgKi8KPiA+ICsJY3B1ID0gY3B1bWFza19hbnlfYW5k KG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7Cj4gPiArCXNtcF9jYWxsX29uX2NwdShjcHUsIGFybWFk YV8zNzBfeHBfc29jX2Vycl9pcnFfdW5tYXNrX29uX2NwdSwgZCwgdHJ1ZSk7Cj4gPiArCj4gPiAr CWNwdXNfcmVhZF91bmxvY2soKTsKPiA+ICsKPiA+ICsJaXJxX2RhdGFfdXBkYXRlX2VmZmVjdGl2 ZV9hZmZpbml0eShkLCBjcHVtYXNrX29mKGNwdSkpOwo+ID4gKwo+ID4gKwlyZXR1cm4gSVJRX1NF VF9NQVNLX09LOwo+ID4gK30KPiAKPiBBcmVuJ3QgdGhlc2UgcGVyLUNQVSBpbnRlcnJ1cHRzIGFu eXdheT8gV2hhdCBkb2VzIGl0IG1lYW4gdG8gc2V0IHRoZWlyCj4gYWZmaW5pdHk/IC9tZSByb2xs cyBleWVzLi4uCgpZZXMsIHRoZXkgYXJlIHBlci1DUFUgaW50ZXJydXB0cy4gQnV0IHRvIG1hc2sg b3IgdW5tYXNrIHBhcnRpY3VsYXIKaW50ZXJydXB0IGZvciBzcGVjaWZpYyBDUFUgaXMgcG9zc2li bGUgb25seSBmcm9tIHRoYXQgQ1BVLiBDUFUgMCBqdXN0CmNhbm5vdCBtb3ZlIGludGVycnVwdCBm cm9tIENQVSAwIHRvIENQVSAxLiBDUFUgMCBjYW4gb25seSBtYXNrIHRoYXQKaW50ZXJydXB0IGFu ZCBDUFUgMSBoYXMgdG8gdW5tYXNrIGl0LgoKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGlycV9j aGlwIGFybWFkYV8zNzBfeHBfc29jX2Vycl9pcnFfY2hpcCA9IHsKPiA+ICsJLm5hbWUgPSAiTVBJ QyBTT0MiLAo+ID4gKwkuaXJxX21hc2sgPSBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX21hc2ss Cj4gPiArCS5pcnFfdW5tYXNrID0gYXJtYWRhXzM3MF94cF9zb2NfZXJyX2lycV91bm1hc2ssCj4g PiArCS5pcnFfc2V0X2FmZmluaXR5ID0gYXJtYWRhX3hwX3NvY19lcnJfaXJxX3NldF9hZmZpbml0 eSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9zb2NfZXJyX2ly cV9tYXAoc3RydWN0IGlycV9kb21haW4gKmgsCj4gPiArCQkJCQkgdW5zaWduZWQgaW50IHZpcnEs IGlycV9od19udW1iZXJfdCBodykKPiA+ICt7Cj4gPiArCWFybWFkYV8zNzBfeHBfc29jX2Vycl9p cnFfbWFzayhpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKPiA+ICsJaXJxX3NldF9zdGF0dXNfZmxh Z3ModmlycSwgSVJRX0xFVkVMKTsKPiA+ICsJaXJxX3NldF9wZXJjcHVfZGV2aWQodmlycSk7Cj4g PiArCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmYXJtYWRhXzM3MF94cF9zb2NfZXJy X2lycV9jaGlwLAo+ID4gKwkJCQkgaGFuZGxlX3BlcmNwdV9kZXZpZF9pcnEpOwo+ID4gKwlpcnFf c2V0X3Byb2JlKHZpcnEpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhcm1hZGFfMzcwX3hwX3NvY19lcnJfaXJxX29w cyA9IHsKPiA+ICsJLm1hcCA9IGFybWFkYV8zNzBfeHBfc29jX2Vycl9pcnFfbWFwLAo+ID4gKwku eGxhdGUgPSBpcnFfZG9tYWluX3hsYXRlX29uZWNlbGwsCj4gPiArfTsKPiA+ICsKPiA+ICAjaWZk ZWYgQ09ORklHX1BDSV9NU0kKPiA+ICBzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX2hhbmRsZV9t c2lfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBib29sIGlzX2NoYWluZWQpCj4gPiAgewo+ID4g QEAgLTYwNSw2ICs3MjcsMzIgQEAgc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF9oYW5kbGVfbXNp X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncywgYm9vbCBpc19jaGFpbmVkKQo+ID4gIHN0YXRpYyB2 b2lkIGFybWFkYV8zNzBfeHBfaGFuZGxlX21zaV9pcnEoc3RydWN0IHB0X3JlZ3MgKnIsIGJvb2wg Yikge30KPiA+ICAjZW5kaWYKPiA+ICAKPiA+ICtzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX2hh bmRsZV9zb2NfZXJyX2lycSh2b2lkKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgbG9uZyBzdGF0dXMs IGJpdDsKPiA+ICsJdTMyIG1hc2ssIGNhdXNlOwo+ID4gKwo+ID4gKwlpZiAoc29jX2Vycl9pcnFf bnVtX3JlZ3MgPCAxKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwltYXNrID0gcmVhZGwocGVy X2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX1NPQ19FUlJfMF9NQVNLX09GRik7Cj4g PiArCWNhdXNlID0gcmVhZGwobWFpbl9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX1NPQ19F UlJfMF9DQVVTRV9PRkZTKTsKPiA+ICsJc3RhdHVzID0gY2F1c2UgJiBtYXNrOwo+ID4gKwo+ID4g Kwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnN0YXR1cywgMzIpCj4gPiArCQlnZW5lcmljX2hhbmRs ZV9kb21haW5faXJxKGFybWFkYV8zNzBfeHBfc29jX2Vycl9kb21haW4sIGJpdCk7Cj4gPiArCj4g PiArCWlmIChzb2NfZXJyX2lycV9udW1fcmVncyA8IDIpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4g PiArCW1hc2sgPSByZWFkbChwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfU09D X0VSUl8xX01BU0tfT0ZGKTsKPiA+ICsJY2F1c2UgPSByZWFkbChtYWluX2ludF9iYXNlICsgQVJN QURBXzM3MF9YUF9JTlRfU09DX0VSUl8xX0NBVVNFX09GRlMpOwo+ID4gKwlzdGF0dXMgPSBjYXVz ZSAmIG1hc2s7Cj4gPiArCj4gPiArCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmc3RhdHVzLCAzMikK PiA+ICsJCWdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEoYXJtYWRhXzM3MF94cF9zb2NfZXJyX2Rv bWFpbiwgYml0ICsgMzIpOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgdm9pZCBhcm1hZGFfMzcw X3hwX21waWNfaGFuZGxlX2Nhc2NhZGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPiA+ICB7 Cj4gPiAgCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwo+ ID4gQEAgLTYzMCw2ICs3NzgsMTEgQEAgc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF9tcGljX2hh bmRsZV9jYXNjYWRlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCj4gPiAgCQkJY29udGludWU7 Cj4gPiAgCQl9Cj4gPiAgCj4gPiArCQlpZiAoaXJxbiA9PSA0KSB7Cj4gPiArCQkJYXJtYWRhXzM3 MF94cF9oYW5kbGVfc29jX2Vycl9pcnEoKTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ ICsKPiA+ICAJCWdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEoYXJtYWRhXzM3MF94cF9tcGljX2Rv bWFpbiwgaXJxbik7Cj4gPiAgCX0KPiA+ICAKPiA+IEBAIC02NDksNyArODAyLDcgQEAgYXJtYWRh XzM3MF94cF9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIAkJaWYgKGlycW5y ID4gMTAyMikKPiA+ICAJCQlicmVhazsKPiA+ICAKPiA+IC0JCWlmIChpcnFuciA+IDEpIHsKPiA+ ICsJCWlmIChpcnFuciA+IDEgJiYgaXJxbnIgIT0gNCkgewo+ID4gIAkJCWdlbmVyaWNfaGFuZGxl X2RvbWFpbl9pcnEoYXJtYWRhXzM3MF94cF9tcGljX2RvbWFpbiwKPiA+ICAJCQkJCQkgIGlycW5y KTsKPiA+ICAJCQljb250aW51ZTsKPiA+IEBAIC02NTksNiArODEyLDEwIEBAIGFybWFkYV8zNzBf eHBfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICAJCWlmIChpcnFuciA9PSAx KQo+ID4gIAkJCWFybWFkYV8zNzBfeHBfaGFuZGxlX21zaV9pcnEocmVncywgZmFsc2UpOwo+ID4g IAo+ID4gKwkJLyogU29DIEVycm9yIGhhbmRsaW5nICovCj4gPiArCQlpZiAoaXJxbnIgPT0gNCkK PiA+ICsJCQlhcm1hZGFfMzcwX3hwX2hhbmRsZV9zb2NfZXJyX2lycSgpOwo+ID4gKwo+ID4gICNp ZmRlZiBDT05GSUdfU01QCj4gPiAgCQkvKiBJUEkgSGFuZGxpbmcgKi8KPiA+ICAJCWlmIChpcnFu ciA9PSAwKSB7Cj4gPiBAQCAtNzIyLDYgKzg3OSwyNiBAQCBzdGF0aWMgdm9pZCBhcm1hZGFfMzcw X3hwX21waWNfcmVzdW1lKHZvaWQpCj4gPiAgCQl9Cj4gPiAgCX0KPiA+ICAKPiA+ICsJLyogUmUt ZW5hYmxlIHBlci1DUFUgU29DIEVycm9yIGludGVycnVwdHMgKi8KPiA+ICsJZm9yIChpcnEgPSAw OyBpcnEgPCBzb2NfZXJyX2lycV9udW1fcmVncyAqIDMyOyBpcnErKykgewo+ID4gKwkJc3RydWN0 IGlycV9kYXRhICpkYXRhOwo+ID4gKwkJaW50IHZpcnE7Cj4gPiArCj4gPiArCQl2aXJxID0gaXJx X2xpbmVhcl9yZXZtYXAoYXJtYWRhXzM3MF94cF9zb2NfZXJyX2RvbWFpbiwgaXJxKTsKPiA+ICsJ CWlmICh2aXJxID09IDApCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlkYXRhID0gaXJx X2dldF9pcnFfZGF0YSh2aXJxKTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBSZS1lbmFibGUg b24gdGhlIGN1cnJlbnQgQ1BVLAo+ID4gKwkJICogYXJtYWRhX3hwX21waWNfcmVlbmFibGVfcGVy Y3B1KCkgd2lsbCB0YWtlCj4gPiArCQkgKiBjYXJlIG9mIHNlY29uZGFyeSBDUFVzIHdoZW4gdGhl eSBjb21lIHVwLgo+ID4gKwkJICovCj4gPiArCQlpZiAoaXJxX3BlcmNwdV9pc19lbmFibGVkKHZp cnEpKQo+ID4gKwkJCWFybWFkYV8zNzBfeHBfc29jX2Vycl9pcnFfdW5tYXNrKGRhdGEpOwo+ID4g Kwl9Cj4gCj4gQXMgSSBzYWlkIGFib3ZlLCB0aGlzIGlzIGR1cGxpY2F0ZWQgY29kZSB0aGF0IHNo b3VsZCBiZSByZXBsYWNlZCB3aXRoCj4gYSBzaW1wbGUgd3JpdGUgdG8gdGhlIGNvcnJlc3BvbmRp bmcgTU1JTyByZWdpc3RlcnMuCj4gCj4gPiArCj4gPiAgCS8qIFJlY29uZmlndXJlIGRvb3JiZWxs cyBmb3IgSVBJcyBhbmQgTVNJcyAqLwo+ID4gIAl3cml0ZWwoZG9vcmJlbGxfbWFza19yZWcsCj4g PiAgCSAgICAgICBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTl9EUkJFTF9NU0tf T0ZGUyk7Cj4gPiBAQCAtNzMwLDYgKzkwNywxMCBAQCBzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hw X21waWNfcmVzdW1lKHZvaWQpCj4gPiAgCWlmIChkb29yYmVsbF9tYXNrX3JlZyAmIFBDSV9NU0lf RE9PUkJFTExfTUFTSykKPiA+ICAJCXdyaXRlbCgxLCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURB XzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKPiA+ICAKPiA+ICsJLyogVW5tYXNrIHN1bW1h cnkgU29DIEVycm9yIEludGVycnVwdCAqLwo+ID4gKwlpZiAoc29jX2Vycl9pcnFfbnVtX3JlZ3Mg PiAwKQo+ID4gKwkJd3JpdGVsKDQsIHBlcl9jcHVfaW50X2Jhc2UgKyBBUk1BREFfMzcwX1hQX0lO VF9DTEVBUl9NQVNLX09GRlMpOwo+IAo+IE1hZ2ljIHZhbHVlPwo+IAo+IEFsc28sIHdyaXRpbmcg dG8gdGhpcyByZWdpc3RlciB0ZW5kcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB3aG9sZSB0aGluZwo+ IHNob3VsZCByZWFsbHkgYmUgYSBjaGFpbmVkIGlycWNoaXAuLi4gTWF5YmUgdGhhdCdzIG92ZXJr aWxsIGluIHRoaXMKPiBpbnN0YW5jZSwgYnV0IHRoZSB3aG9sZSB0aGluZyBpcyByYXRoZXIgb2Rk bHkgYXJjaGl0ZWN0ZWQuCgpJIHVzZWQgZXhhY3RseSBzYW1lIGNvZGUgc3R5bGUgbGlrZSBpdCBp cyB1c2VkIGZvciBNU0kgZG9vcmJlbGwKaW50ZXJydXB0cy4KClllcywgaXQgbG9va3MgbGlrZSBj aGFpbmVkIGlycWNoaXAsIGJ1dCBpdCBpcyBvdmVya2lsbC4KCj4gPiArCj4gPiAgCWlwaV9yZXN1 bWUoKTsKPiA+ICB9Cj4gPiAgCj4gPiBAQCAtNzQyLDYgKzkyMyw3IEBAIHN0YXRpYyBpbnQgX19p bml0IGFybWFkYV8zNzBfeHBfbXBpY19vZl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwK PiA+ICAJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCj4gPiAgewo+ID4gIAlz dHJ1Y3QgcmVzb3VyY2UgbWFpbl9pbnRfcmVzLCBwZXJfY3B1X2ludF9yZXM7Cj4gPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqc29jX2Vycl9ub2RlOwo+ID4gIAlpbnQgbnJfaXJxcywgaTsKPiA+ICAJ dTMyIGNvbnRyb2w7Cj4gPiAgCj4gPiBAQCAtNzc1LDEyICs5NTcsMzcgQEAgc3RhdGljIGludCBf X2luaXQgYXJtYWRhXzM3MF94cF9tcGljX29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2Rl LAo+ID4gIAlCVUdfT04oIWFybWFkYV8zNzBfeHBfbXBpY19kb21haW4pOwo+ID4gIAlpcnFfZG9t YWluX3VwZGF0ZV9idXNfdG9rZW4oYXJtYWRhXzM3MF94cF9tcGljX2RvbWFpbiwgRE9NQUlOX0JV U19XSVJFRCk7Cj4gPiAgCj4gPiArCXNvY19lcnJfbm9kZSA9IG9mX2dldF9uZXh0X2NoaWxkKG5v ZGUsIE5VTEwpOwo+ID4gKwlpZiAoIXNvY19lcnJfbm9kZSkgewo+ID4gKwkJcHJfd2FybigiTWlz c2luZyBTb0MgRXJyb3IgSW50ZXJydXB0IENvbnRyb2xsZXIgbm9kZVxuIik7Cj4gPiArCQlwcl93 YXJuKCJFeHRlbmRlZCBpbnRlcnJ1cHRzIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKPiA+ICsJfSBl bHNlIHsKPiA+ICsJCXByX2luZm8oIlJlZ2lzdGVyaW5nIE1QSUMgU29DIEVycm9yIEludGVycnVw dCBDb250cm9sbGVyXG4iKTsKPiA+ICsJCS8qCj4gPiArCQkgKiBBcm1hZGEgMzcwIGFuZCBYUCBo YXZlIG9ubHkgMzIgU29DIEVycm9yIElSUXMgaW4gb25lIHJlZ2lzdGVyCj4gPiArCQkgKiBhbmQg b3RoZXIgQXJtYWRhIHBsYXRmb3JtcyBoYXZlIDY0IElSUXMgaW4gdHdvIHJlZ2lzdGVycy4KPiA+ ICsJCSAqLwo+ID4gKwkJc29jX2Vycl9pcnFfbnVtX3JlZ3MgPQo+ID4gKwkJCW9mX21hY2hpbmVf aXNfY29tcGF0aWJsZSgibWFydmVsbCxhcm1hZGEtMzcwLXhwIikgPyAxIDogMjsKPiAKPiBEb24n dCB5b3UgaGF2ZSBhbiBhY3R1YWwgY29tcGF0aWJsZSBzdHJpbmcgZm9yIHRoZSBpbnRlcnJ1cHQK PiBjb250cm9sbGVyPyAgSXQgc2VlbXMgb2RkIHRvIHJlbHkgb24gdGhlIFNvQyBuYW1lLgoKQ29t cGF0aWJsZSBzdHJpbmcgaXMgc2FtZSBmb3IgYWxsIHRob3NlIDMyLWJpdCBBcm1hZGEgU29Dcy4g U28gaXQgY2Fubm90CmJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBYUCBhbmQgMzg1LiBU aGF0IGlzIHdoeSBJIHVzZWQKb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlLgoKPiA+ICsJCWFybWFk YV8zNzBfeHBfc29jX2Vycl9kb21haW4gPQo+ID4gKwkJCWlycV9kb21haW5fYWRkX2hpZXJhcmNo eShhcm1hZGFfMzcwX3hwX21waWNfZG9tYWluLCAwLAo+ID4gKwkJCQkJCSBzb2NfZXJyX2lycV9u dW1fcmVncyAqIDMyLAo+ID4gKwkJCQkJCSBzb2NfZXJyX25vZGUsCj4gPiArCQkJCQkJICZhcm1h ZGFfMzcwX3hwX3NvY19lcnJfaXJxX29wcywKPiA+ICsJCQkJCQkgTlVMTCk7Cj4gPiArCQlCVUdf T04oIWFybWFkYV8zNzBfeHBfc29jX2Vycl9kb21haW4pOwo+ID4gKwl9Cj4gPiArCj4gPiAgCS8q IFNldHVwIGZvciB0aGUgYm9vdCBDUFUgKi8KPiA+ICAJYXJtYWRhX3hwX21waWNfcGVyZl9pbml0 KCk7Cj4gPiAgCWFybWFkYV94cF9tcGljX3NtcF9jcHVfaW5pdCgpOwo+ID4gIAo+ID4gIAlhcm1h ZGFfMzcwX3hwX21zaV9pbml0KG5vZGUsIG1haW5faW50X3Jlcy5zdGFydCk7Cj4gPiAgCj4gPiAr CS8qIFVubWFzayBzdW1tYXJ5IFNvQyBFcnJvciBJbnRlcnJ1cHQgKi8KPiA+ICsJaWYgKHNvY19l cnJfaXJxX251bV9yZWdzID4gMCkKPiA+ICsJCXdyaXRlbCg0LCBwZXJfY3B1X2ludF9iYXNlICsg QVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKPiA+ICsKPiAKPiBNYWdpYyB2YWx1 ZSwgZHVwbGljYXRlZCB0aGlzIHRpbWU/Cj4gCj4gPiAgCXBhcmVudF9pcnEgPSBpcnFfb2ZfcGFy c2VfYW5kX21hcChub2RlLCAwKTsKPiA+ICAJaWYgKHBhcmVudF9pcnEgPD0gMCkgewo+ID4gIAkJ aXJxX3NldF9kZWZhdWx0X2hvc3QoYXJtYWRhXzM3MF94cF9tcGljX2RvbWFpbik7Cj4gPiAtLSAK PiA+IDIuMjAuMQo+ID4gCj4gPiAKPiAKPiAJTS4KPiAKPiAtLSAKPiBXaXRob3V0IGRldmlhdGlv biBmcm9tIHRoZSBub3JtLCBwcm9ncmVzcyBpcyBub3QgcG9zc2libGUuCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==