From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3323E21E97802 for ; Thu, 14 Sep 2017 23:26:08 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Sep 2017 23:29:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,396,1500966000"; d="scan'208";a="900490793" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by FMSMGA003.fm.intel.com with ESMTP; 14 Sep 2017 23:29:07 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Sep 2017 23:29:05 -0700 Received: from shsmsx151.ccr.corp.intel.com ([169.254.3.98]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.117]) with mapi id 14.03.0319.002; Fri, 15 Sep 2017 14:28:59 +0800 From: "Zeng, Star" To: "Wang, Jian J" , Laszlo Ersek , "Yao, Jiewen" CC: "Kinney, Michael D" , "Justen, Jordan L" , "edk2-devel@lists.01.org" , "Dong, Eric" , "Wolman, Ayellet" , "Zeng, Star" Thread-Topic: [edk2] [PATCH 4/4] OvmfPkg/QemuVideoDxe: Update QemuVideoDxe driver to bypass NULL pointer detection if enabled. Thread-Index: AQHTLHJCQi2+U94RoUitjf7fG7CRTaKy8rOAgAAcvwCAACF6gIAAV2QAgAACRYCAAAJGAIAAAkEAgACPtlD//4FWAIAAiwkwgABlQoCAAGHdgIAAjBLw Date: Fri, 15 Sep 2017 06:28:58 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103B95A403@SHSMSX151.ccr.corp.intel.com> References: <20170913092507.12504-1-jian.j.wang@intel.com> <20170913092507.12504-5-jian.j.wang@intel.com> <848bc70b-b3f7-62fb-ef2d-df89ff8805a6@redhat.com> <4dd43619-552e-9d0e-3d2b-ca9c1f3b80a3@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503A9B264A@SHSMSX151.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103B958C07@SHSMSX151.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103B958C40@SHSMSX151.ccr.corp.intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 4/4] OvmfPkg/QemuVideoDxe: Update QemuVideoDxe driver to bypass NULL pointer detection if enabled. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Sep 2017 06:26:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2l0aCB0aGlzIGFwcHJvYWNoLCBwbGVhc2UgbWFrZSBzdXJlIHRvIGRvIG1vcmUgdGVzdCwgZm9y IGV4YW1wbGUsIGNoZWNrIG1lbW9yeSBtYXAgY2hhbmdlIGFuZCBPUyBib290LCBldGMuDQoNCg0K VGhhbmtzLA0KU3Rhcg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IFdhbmcsIEpp YW4gSiANClNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDE1LCAyMDE3IDI6MDYgUE0NClRvOiBXYW5n LCBKaWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0Bp bnRlbC5jb20+OyBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPjsgWWFvLCBKaWV3ZW4g PGppZXdlbi55YW9AaW50ZWwuY29tPg0KQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT47IEp1c3RlbiwgSm9yZGFuIEwgPGpvcmRhbi5sLmp1c3RlbkBpbnRl bC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGlu dGVsLmNvbT47IFdvbG1hbiwgQXllbGxldCA8YXllbGxldC53b2xtYW5AaW50ZWwuY29tPg0KU3Vi amVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggNC80XSBPdm1mUGtnL1FlbXVWaWRlb0R4ZTogVXBkYXRl IFFlbXVWaWRlb0R4ZSBkcml2ZXIgdG8gYnlwYXNzIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24gaWYg ZW5hYmxlZC4NCg0KRm9yIHJlY29yZCwgd2UnbGwgbWFrZSBmb2xsb3dpbmcgY2hhbmdlcyB0byBh ZGRyZXNzIHRoZSBwYWdlIGF0dHJpYnV0ZXMgaXNzdWU6DQoNCigxKSBVcGRhdGUgZ0RTLT5TZXRN ZW1vcnlTcGFjZUFkZHJlc3MoKSB0byByZW1vdmUgdGhlIGZpbHRlciBzZXQgb24gcGFnZSBhdHRy aWJ1dGVzDQooMikgVXBkYXRlIENQVSBkcml2ZXIgdG8gc3luYyBhbGwgbWVtb3J5IGF0dHJpYnV0 ZXMgaW5jbHVkaW5nIHBhZ2UgcmVsYXRlZC4gTm8gcGxhdGZvcm0gY29kZSBjaGFuZ2VzIG5lZWRl ZC4NCg0KQWJvdmUgY2hhbmdlcyB3aWxsIGJlIHN1Ym1pdHRlZCBpbiBhIHNlcGFyYXRlIHBhdGNo LiBBcyBhIHJlc3VsdCAoYWZ0ZXIgaXQncyBkb25lKSwgdGhlIHJlbGF0ZWQgY2hhbmdlcyBmb3Ig dGhpcyBwYXRjaCB3aWxsIGJlIA0KKDMpIFJlcGxhY2UgbWFjcm9zIHdpdGggZnVuY3Rpb25zLCBp biB3aGljaCBnRFMtPlNldE1lbW9yeVNwYWNlQXR0cmlidXRlcygpIHdpbGwgYmUgdXNlZCBpbnN0 ZWFkIG9mIENQVSBhcmNoIG1ldGhvZC4NCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K RnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmdd IE9uIEJlaGFsZiBPZiBXYW5nLCBKaWFuIEoNClNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDE1LCAy MDE3IDg6MTUgQU0NClRvOiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPjsgTGFzemxv IEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVs LmNvbT4NCkNjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ OyBKdXN0ZW4sIEpvcmRhbiBMIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPjsgZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc7IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBXb2xtYW4s IEF5ZWxsZXQgPGF5ZWxsZXQud29sbWFuQGludGVsLmNvbT4NClN1YmplY3Q6IFJlOiBbZWRrMl0g W1BBVENIIDQvNF0gT3ZtZlBrZy9RZW11VmlkZW9EeGU6IFVwZGF0ZSBRZW11VmlkZW9EeGUgZHJp dmVyIHRvIGJ5cGFzcyBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGlmIGVuYWJsZWQuDQoNCmdEUy0+ IFNldE1lbW9yeVNwYWNlQ2FwYWJpbGl0aWVzKCkgY2FuIGNoYW5nZSB0aGUgQ2FwYWJpbGl0eSBh dCBhbnkgdGltZS4gQnV0IEknbSBub3Qgc3VyZSBhYm91dCBhbnkgc2lkZS1lZmZlY3Qgb2YgaXQu DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBaZW5nLCBTdGFyIA0KU2VudDog VGh1cnNkYXksIFNlcHRlbWJlciAxNCwgMjAxNyA2OjE3IFBNDQpUbzogTGFzemxvIEVyc2VrIDxs ZXJzZWtAcmVkaGF0LmNvbT47IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsg WWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KQ2M6IEtpbm5leSwgTWljaGFlbCBE IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEp1c3RlbiwgSm9yZGFuIEwgPGpvcmRhbi5s Lmp1c3RlbkBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgRG9uZywgRXJpYyA8 ZXJpYy5kb25nQGludGVsLmNvbT47IFdvbG1hbiwgQXllbGxldCA8YXllbGxldC53b2xtYW5AaW50 ZWwuY29tPjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NClN1YmplY3Q6IFJFOiBb ZWRrMl0gW1BBVENIIDQvNF0gT3ZtZlBrZy9RZW11VmlkZW9EeGU6IFVwZGF0ZSBRZW11VmlkZW9E eGUgZHJpdmVyIHRvIGJ5cGFzcyBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGlmIGVuYWJsZWQuDQoN Ck5vLCBJIHdhbnQgdG8gc2F5IGV2ZW4gdGhlIEdDRCBpcyB1cGRhdGVkIHRvIG5vdCBmaWx0ZXIg cGFnZSBhdHRyaWJ1dGVzLCBpdCB3aWxsIHN0aWxsIG5vdCB3b3JrIGFzIGFsbCB0aGUgbWVtb3J5 IGNvbnRyb2xsZXIgY29kZSBmb3Igbm93IGFyZSBub3QgcmVwb3J0aW5nIHRoZSBDYXBhYmlsaXR5 Lg0KDQoNClRoYW5rcywNClN0YXINCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBl ZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVo YWxmIE9mIExhc3psbyBFcnNlaw0KU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAxNCwgMjAxNyA1 OjU1IFBNDQpUbzogWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IFdhbmcsIEppYW4g SiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPg0KQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47 IEp1c3RlbiwgSm9yZGFuIEwgPGpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb20+OyBlZGsyLWRldmVs QGxpc3RzLjAxLm9yZzsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IFdvbG1hbiwg QXllbGxldCA8YXllbGxldC53b2xtYW5AaW50ZWwuY29tPg0KU3ViamVjdDogUmU6IFtlZGsyXSBb UEFUQ0ggNC80XSBPdm1mUGtnL1FlbXVWaWRlb0R4ZTogVXBkYXRlIFFlbXVWaWRlb0R4ZSBkcml2 ZXIgdG8gYnlwYXNzIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24gaWYgZW5hYmxlZC4NCg0KT24gMDkv MTQvMTcgMTE6MzksIFplbmcsIFN0YXIgd3JvdGU6DQo+IFRoZXJlIGlzIGEgcmVhbGlzdGljIHBy b2JsZW0gSSBqdXN0IGZvdW5kIGFuZCB3YW50IHRvIHNoYXJlLg0KPiANCj4gR0NEIGRhdGFiYXNl IGlzIGJ1aWx0IGJhc2VkIG9uIHJlc291cmNlIGhvYiByZXBvcnRlZCBmcm9tIFBFSSwgYW5kIEdD RCANCj4gY2hlY2tzIHRoZSBpbnB1dCBBdHRyaWJ1dGVzIGFnYWluc3QgQ2FwYWJpbGl0aWVzIHdo ZW4gc2V0dGluZyANCj4gQXR0cmlidXRlcywgYnV0IHdlIChJIGp1c3Qgc2VhcmNoZWQgdGhlIHdo b2xlIGNvZGViYXNlKSBjYW4gc2VlIHRoZXJlIA0KPiBpcyBubyBjb2RlIHJlcG9ydGluZyByZXNv dXJjZSBob2Igd2l0aCANCj4gRUZJX1JFU09VUkNFX0FUVFJJQlVURV9SRUFEX1BST1RFQ1RBQkxF LA0KPiBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0VYRUNVVElPTl9QUk9URUNUQUJMRSBvciANCj4g RUZJX1JFU09VUkNFX0FUVFJJQlVURV9SRUFEX09OTFlfUFJPVEVDVEFCTEUgc2V0Lg0KLi4uIEFy ZSB5b3Ugc2F5aW5nIHRoYXQsIGlmIHdlIG1vZGlmeSBBZGRNZW1vcnlCYXNlU2l6ZUhvYigpIGlu IE92bWZQa2cvUGxhdGZvcm1QZWksIHRvIHJlcG9ydCBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1JF QURfT05MWV9QUk9URUNUQUJMRSAoKiksIHRoZW4NCmdEUy0+U2V0TWVtb3J5U3BhY2VBdHRyaWJ1 dGVzKCkgd2lsbCBzdGFydCB0byB3b3JrPw0KDQooKCopICJNZGVQa2cvSW5jbHVkZS9QaS9QaUhv Yi5oIjogIk5PVEU6IFNpbmNlIFBJIHNwZWMgMS40LCBwbGVhc2UgdXNlIEVGSV9SRVNPVVJDRV9B VFRSSUJVVEVfUkVBRF9PTkxZX1BST1RFQ1RBQkxFIGFzIE1lbW9yeSBjYXBhYmlsaXR5DQphdHRy aWJ1dGU6IFRoZSBtZW1vcnkgc3VwcG9ydHMgYmVpbmcgcHJvdGVjdGVkIGZyb20gcHJvY2Vzc29y IHdyaXRlcyIpDQoNCklmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBJIGhvcGUgSmlhbiBjYW4gaW5j bHVkZSBzdWNoIGFuIE92bWZQa2cgcGF0Y2ggaW4gaGlzIHNlcmllcy4gOikNCg0KVGhhbmtzIQ0K TGFzemxvDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFzemxvIEVy c2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1i ZXIgMTQsIDIwMTcgNDo1NCBQTQ0KPiBUbzogV2FuZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRl bC5jb20+OyBZYW8sIEppZXdlbiANCj4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBDYzogRG9u ZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IEp1c3RlbiwgSm9yZGFuIEwgDQo+IDxqb3Jk YW4ubC5qdXN0ZW5AaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFdvbG1hbiwg QXllbGxldCANCj4gPGF5ZWxsZXQud29sbWFuQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBE IA0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdA aW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCA0LzRdIE92bWZQa2cvUWVt dVZpZGVvRHhlOiBVcGRhdGUgUWVtdVZpZGVvRHhlIGRyaXZlciB0byBieXBhc3MgTlVMTCBwb2lu dGVyIGRldGVjdGlvbiBpZiBlbmFibGVkLg0KPiANCj4gT24gMDkvMTQvMTcgMTA6NDYsIFdhbmcs IEppYW4gSiB3cm90ZToNCj4+IEl04oCZcyBhbiBpbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9uLiBB bGwgcGFnZSBhdHRyaWJ1dGVzIHdpbGwgYmUgZmlsdGVyZWQgb3V0IGJlZm9yZSBjYWxsaW5nIENQ VSBhcmNoIHByb3RvY29sIHRvIHVwZGF0ZSB0aGUgYXR0cmlidXRlcyAoR2NkLmMpLg0KPiANCj4g VGhhdCBjYW5ub3QgYmUgYSByYW5kb20gb2NjdXJyZW5jZTsgSSdtIHN1cmUgdGhlcmUgd2FzIHNv bWUgc3BlY2lmaWMgaW50ZW50IGJlaGluZCBmaWx0ZXJpbmcgb3V0IHRoZSBwYWdlIGF0dHJpYnV0 ZXMuDQo+IA0KPiBEb2VzICJnaXQgYmxhbWUiIHByb3ZpZGUgYSByZWFzb24sIGZyb20gdGhlIG1l c3NhZ2Ugb2YgdGhlIGNvbW1pdCB0aGF0IGFkZGVkIHRoZSBmaWx0ZXJpbmc/DQo+IA0KPiBUaGFu a3MsDQo+IExhc3psbw0KPiANCj4+IEZyb206IFlhbywgSmlld2VuDQo+PiBTZW50OiBUaHVyc2Rh eSwgU2VwdGVtYmVyIDE0LCAyMDE3IDQ6MzggUE0NCj4+IFRvOiBMYXN6bG8gRXJzZWsgPGxlcnNl a0ByZWRoYXQuY29tPjsgV2FuZywgSmlhbiBKIA0KPj4gPGppYW4uai53YW5nQGludGVsLmNvbT4N Cj4+IENjOiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgSnVzdGVuLCBKb3JkYW4g TCANCj4+IDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmc7IFdvbG1hbiwgQXllbGxldCANCj4+IDxheWVsbGV0LndvbG1hbkBpbnRlbC5jb20+OyBLaW5u ZXksIE1pY2hhZWwgRCANCj4+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFplbmcsIFN0 YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+PiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCA0 LzRdIE92bWZQa2cvUWVtdVZpZGVvRHhlOiBVcGRhdGUgUWVtdVZpZGVvRHhlIGRyaXZlciB0byBi eXBhc3MgTlVMTCBwb2ludGVyIGRldGVjdGlvbiBpZiBlbmFibGVkLg0KPj4NCj4+IEhJDQo+PiBJ IHdvbmRlciBpZiBpdCBpcyBzcGVjIGxpbWl0YXRpb24gb3IgaW1wbGVtZW50YXRpb24gbGltaXRh dGlvbi4NCj4+DQo+PiBJZiBpdCBpcyBpbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9uLCB3ZSBjYW4g ZW5oYW5jZSB0aGUgRHhlQ29yZSB0byBhbGxvdyBpdC4NCj4+DQo+PiBUaGFuayB5b3UNCj4+IFlh byBKaWV3ZW4NCj4+DQo+PiBGcm9tOiBMYXN6bG8gRXJzZWsgW21haWx0bzpsZXJzZWtAcmVkaGF0 LmNvbV0NCj4+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMTQsIDIwMTcgNDozMCBQTQ0KPj4g VG86IFdhbmcsIEppYW4gSiANCj4+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb208bWFpbHRvOmppYW4u ai53YW5nQGludGVsLmNvbT4+DQo+PiBDYzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNv bTxtYWlsdG86ZXJpYy5kb25nQGludGVsLmNvbT4+Ow0KPj4gSnVzdGVuLCBKb3JkYW4gTA0KPj4g PGpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb208bWFpbHRvOmpvcmRhbi5sLmp1c3RlbkBpbnRlbC5j b20+PjsNCj4+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3Rz LjAxLm9yZz47IFlhbywgSmlld2VuIA0KPj4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpq aWV3ZW4ueWFvQGludGVsLmNvbT4+OyBXb2xtYW4sIEF5ZWxsZXQgDQo+PiA8YXllbGxldC53b2xt YW5AaW50ZWwuY29tPG1haWx0bzpheWVsbGV0LndvbG1hbkBpbnRlbC5jb20+PjsgS2lubmV5LCAN Cj4+IE1pY2hhZWwgRCANCj4+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgDQo+PiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50 ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj4NCj4+IFN1YmplY3Q6IFJlOiBbZWRr Ml0gW1BBVENIIDQvNF0gT3ZtZlBrZy9RZW11VmlkZW9EeGU6IFVwZGF0ZSBRZW11VmlkZW9EeGUg ZHJpdmVyIHRvIGJ5cGFzcyBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGlmIGVuYWJsZWQuDQo+Pg0K Pj4gT24gMDkvMTQvMTcgMDU6MTcsIFdhbmcsIEppYW4gSiB3cm90ZToNCj4+PiBGb3IgdGhlIHVz ZSBvZiBhcmNoIHByb3RvY29sLCB0aGVyZSdzIG9uZSB0aGluZyBJIG1lbnRpb25lZCBpcyBub3Qg DQo+Pj4gYWNjdXJhdGUuIEkgYWN0dWFsbHkgdHJpZWQgZ0RTLT5TZXRNZW1vcnlTcGFjZUF0dHJp YnV0ZXMoKSBidXQgaXQgDQo+Pj4gY2Fubm90IGNoYW5nZSBwYWdlIGF0dHJpYnV0ZXMuIFRoYXQn cyB3aHkgSSBoYXZlIHRvIHR1cm4gdG8gY3B1IGFyY2ggDQo+Pj4gcHJvdG9jb2wuDQo+PiBUaGFu ayB5b3UgZm9yIHRoZSBleHBsYW5hdGlvbi4NCj4+DQo+PiBJbiB0aGF0IGNhc2UsIHdlIGNhbm5v dCBhdm9pZCB2aW9sYXRpbmcgdGhlIFBJIHNwZWMuIEkgYWdyZWUgd2UgY2FuIA0KPj4gYnJlYWsg dGhlIHNwZWMgaWYgaXQgaGFwcGVucyBmb3Igc2VjdXJpdHkgcHVycG9zZXMsIGJ1dCBpbiB0aGF0 IGNhc2UsIA0KPj4gSSBiZWxpZXZlIHRoYXQgaGlkaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBiZWhp bmQgYSBsaWJyYXJ5IGNsYXNzIGlzIA0KPj4gbWFuZGF0b3J5LiBWaWV3ZWQgZnJvbSB0aGUgc3Bl YyBzaWRlLCBhY2Nlc3NpbmcgdGhlIENQVSBBcmNoIHByb3RvY29sIA0KPj4gaXMgYSBoYWNrLCBh bmQgc28gaXQgc2hvdWxkIG5vdCBiZSBzcHJlYWQgdG8gdGhlIHNvdXJjZSBjb2RlIG9mIA0KPj4g c2V2ZXJhbCBkcml2ZXIgbW9kdWxlcy4NCj4+DQo+PiBUaGFuayB5b3UsDQo+PiBMYXN6bG8NCj4+ DQo+Pg0KPj4+DQo+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+PiBGcm9tOiBlZGsy LWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxm IA0KPj4+IE9mIFdhbmcsIEppYW4gSg0KPj4+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMTQs IDIwMTcgOToxNyBBTQ0KPj4+IFRvOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPG1h aWx0bzpsZXJzZWtAcmVkaGF0LmNvbT4+DQo+Pj4gQ2M6IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0Bp bnRlbC5jb208bWFpbHRvOmVyaWMuZG9uZ0BpbnRlbC5jb20+PjsNCj4+PiBKdXN0ZW4sIEpvcmRh biBMDQo+Pj4gPGpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb208bWFpbHRvOmpvcmRhbi5sLmp1c3Rl bkBpbnRlbC5jb20+PjsNCj4+PiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmc+OyBZYW8sIEppZXdlbiANCj4+PiA8amlld2VuLnlhb0BpbnRlbC5j b208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IFdvbG1hbiwgQXllbGxldCANCj4+PiA8 YXllbGxldC53b2xtYW5AaW50ZWwuY29tPG1haWx0bzpheWVsbGV0LndvbG1hbkBpbnRlbC5jb20+ PjsgS2lubmV5LCANCj4+PiBNaWNoYWVsIEQgDQo+Pj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+Ow0KPj4+IFplbmcsIFN0YXIg PHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pg0KPj4+IFN1 YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIDQvNF0gT3ZtZlBrZy9RZW11VmlkZW9EeGU6IFVwZGF0 ZSBRZW11VmlkZW9EeGUgZHJpdmVyIHRvIGJ5cGFzcyBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGlm IGVuYWJsZWQuDQo+Pj4NCj4+PiBUaGFua3MgZm9yIHRoZSBjb21tZW50cyBhbmQgZ29vZCBhZHZp Y2VzLiBTb3JyeSB0aGUgZm9ybWF0IGlzc3Vlcy4NCj4+PiBUaGlzIGlzIG15IGZpcnN0IHBhdGNo IGZvciB0aGlzIHByb2plY3QuIFRvbyBtYW55IGRldGFpbHMgZm9yIG1lIHRvIA0KPj4+IGdldCBm YW1pbGlhciB3aXRoLg0KPj4+DQo+Pj4gKDEpIFN1cmUuDQo+Pj4gKDIpIEknbGwgY2hhbmdlIHRo YXQuDQo+Pj4gKDMpIEknbGwgdXNlIHRoZSB0b29sIHRvIGVuc3VyZSB0aGUgcGF0Y2ggZm9ybWF0 Lg0KPj4+ICg0KSBJJ2xsIHJlbW92ZSB0aGUgJywnIGluIG5hbWUNCj4+PiAoNSkgSSdsbCBhZGQg bW9yZSBkZXNjcmlwdGlvbiBhYm91dCBpdC4NCj4+PiAoNikgWW91J3JlIHJpZ2h0LiBJIHNob3Vs ZCB1c2UgU2V0TWVtb3J5U3BhY2VBdHRyaWJ1dGVzKCkgb2YgRFhFIHNlcnZpY2UNCj4+PiAgICAg IGluc3RlYWQuIFRoZSBvbmx5IHJlYXNvbiBJIGRpZG4ndCBkbyBpdCBpcyB0aGF0IEkgZm91bmQN Cj4+PiAgICAgICBHZXRNZW1vcnlTcGFjZURlc2NyaXB0b3IoKSBkb2Vzbid0IHJldHVybiB0aGUg c2FtZSBpbmZvcm1hdGlvbg0KPj4+ICAgICAgd2hpY2ggU2V0TWVtb3J5U3BhY2VBdHRyaWJ1dGVz KCkganVzdCBjaGFuZ2VkLiBTbyBJIGZlZWwgdXNpbmcgQ1BVDQo+Pj4gICAgIGFyY2ggcHJvdG9j b2wgaXMgYSBiaXQgc2FmZXIuIEFueXdheSwgSSdsbCBjaGFuZ2UgaXQuDQo+Pj4gKDcpIEkgZGlk IHB1dCB0aG9zZSBtYWNyb3MgaW4gdGhlIGluc3RhbGwgZnVuY3Rpb24gYmVmb3JlLiBUbyByZWR1 Y2UgdGhlDQo+Pj4gICAgICBudW1iZXIgb2YgY2hhbmdlZCBmaWxlcywgSSBtYWRlIGN1cnJlbnQg Y2hhbmdlcy4gWW91J3JlIHJpZ2h0IGl0J3MNCj4+PiAgICAgIG5vdCB3b3J0aHkuDQo+Pj4gKDgp IFVzaW5nIG1hY3JvIGNhbiBoZWxwIHRoZSByZWFkYWJpbGl0eSwgd2hpY2ggaXMgbW9yZSBpbXBv cnRhbnQgdG8gbWUuDQo+Pj4gICAgIEkga25vdyBmdW5jdGlvbiBjYW4gZG8gdGhlIHNhbWUuIEJ1 dCBpdCBsb29rcyBhIGJpdCBoZWF2eSBpbiB0aGlzIHNpdHVhdGlvbi4NCj4+PiAgICAgSSBoYXZl IHRvIGFkbWl0IHJlcGxhY2luZyAgdGhlIG1hY3JvcyB3aXRoIGEgbGlicmFyeSBpcyBhIHZlcnkg Z29vZCBpZGVhLA0KPj4+ICAgICB3aGljaCBicmluZ3MgdGhlIHNhbWUgcmVhZGFiaWxpdHkuIEkg ZGlkbid0IHRoaW5rIG9mIHRoYXQgYmVmb3JlLiBBbHRob3VnaA0KPj4+ICAgICBMaWJyYXJ5IGlz IHN0aWxsIGEgbGl0dGxlIGJpdCBoZWF2eSB0byBtZSBidXQgaXQncyBpbiBhIGRpZmZlcmVudCB3 YXksIEkgdGhpbmsgaXQNCj4+PiAgICAgd29ydGggYSB0cnlpbmcuDQo+Pj4gKDkpIFB1dHRpbmcg YSBzcGFjZSBiZWZvcmUgb3BlbiBwYXJlbnRoZXNpcyBpcyBmb3JjZWQgc3R5bGU/IElmIHNvLCBJ J2xsIGFkZCBpdC4NCj4+PiAoMTApIFlvdSdyZSByaWdodC4gVXNpbmcgbGlicmFyeSBjYW4gcmVk dWNlIHRoZSBkaXN0dXJicyB0byBhZmZlY3RlZCBkcml2ZXJzDQo+Pj4gICAgICAgIGJ5IHRoaXMg ZmVhdHVyZSB0byB0aGUgbWluaW11bS4NCj4+Pg0KPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+Pj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+ Pj4gU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAxNCwgMjAxNyA3OjM1IEFNDQo+Pj4gVG86IFdh bmcsIEppYW4gSg0KPj4+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb208bWFpbHRvOmppYW4uai53YW5n QGludGVsLmNvbT4+DQo+Pj4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsy LWRldmVsQGxpc3RzLjAxLm9yZz47IEp1c3RlbiwgDQo+Pj4gSm9yZGFuIEwgDQo+Pj4gPGpvcmRh bi5sLmp1c3RlbkBpbnRlbC5jb208bWFpbHRvOmpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb20+Pjsg RG9uZywgDQo+Pj4gRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbTxtYWlsdG86ZXJpYy5kb25nQGlu dGVsLmNvbT4+OyBLaW5uZXksIA0KPj4+IE1pY2hhZWwgRCANCj4+PiA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47DQo+Pj4gV29s bWFuLCBBeWVsbGV0DQo+Pj4gPGF5ZWxsZXQud29sbWFuQGludGVsLmNvbTxtYWlsdG86YXllbGxl dC53b2xtYW5AaW50ZWwuY29tPj47IFlhbywgDQo+Pj4gSmlld2VuIDxqaWV3ZW4ueWFvQGludGVs LmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgWmVuZywgDQo+Pj4gU3RhciA8c3Rh ci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+DQo+Pj4gU3ViamVj dDogUmU6IFtlZGsyXSBbUEFUQ0ggNC80XSBPdm1mUGtnL1FlbXVWaWRlb0R4ZTogVXBkYXRlIFFl bXVWaWRlb0R4ZSBkcml2ZXIgdG8gYnlwYXNzIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24gaWYgZW5h YmxlZC4NCj4+Pg0KPj4+IEhpLA0KPj4+DQo+Pj4gc29tZSBvZiB0aGUgcG9pbnRzIEknbSBnb2lu ZyB0byBtYWtlIGhhdmUgYWxyZWFkeSBiZWVuIHBvaW50ZWQgb3V0IA0KPj4+IGJ5DQo+Pj4gSm9y ZGFuOg0KPj4+DQo+Pj4gKDEpIFdoZW4gcG9zdGluZyBhIHBhdGNoIHNlcmllcywgcGxlYXNlIGNv bGxlY3QgdGhlIENjOiB0YWdzIGZyb20gDQo+Pj4gYWxsIG9mIHRoZSBwYXRjaGVzLCBhbmQgYWRk IHRoZW0gKmFsbCogdG8gdGhlIGNvdmVyIGxldHRlci4gVGhpcyB3YXkgDQo+Pj4gZXZlcnlvbmUg d2lsbCBnZXQgYSBwZXJzb25hbCBjb3B5IG9mIHRoZSBnZW5lcmFsIGRlc2NyaXB0aW9uLg0KPj4+ DQo+Pj4NCj4+PiAoMikgVGhlIHN1YmplY3QgbGluZSBpcyB0b28gbG9uZy4gT25lIHBvc3NpYmxl IHNpbXBsaWZpY2F0aW9uOg0KPj4+DQo+Pj4gT3ZtZlBrZy9RZW11VmlkZW9EeGU6IGJ5cGFzcyBO VUxMIHBvaW50ZXIgZGV0ZWN0aW9uDQo+Pj4NCj4+Pg0KPj4+IE9uIDA5LzEzLzE3IDExOjI1LCBX YW5nLCBKaWFuIEogd3JvdGU6DQo+Pj4+IFFlbXVWaWRlb0R4ZSBkcml2ZXIgd2lsbCBpbnN0YWxs IFZCRSBTSElNIGludG8gcGFnZSAwLiBJZiBOVUxMIA0KPj4+PiBwb2ludGVyIGRldGVjdGlvbiBp cyBlbmFibGVkLCBwYWdlIDAgbXVzdCBiZSBlbmFibGVkIHRlbXBvcmFyaWx5IA0KPj4+PiBiZWZv cmUgaW5zdGFsbGluZyBhbmQgZGlzYWJsZWQgYWdhaW4gYWZ0ZXJ3YXJkcy4gRm9yIFdpbmRvd3Mg NyANCj4+Pj4gYm9vdCwNCj4+Pj4gQklUNyBvZiBQY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3Bl cnR5TWFzayBtdXN0IHN0aWxsIGJlIHNldCB0byBhdm9pZCBoYW5nLg0KPj4+DQo+Pj4gKDMpIFN1 YmplY3QgbGluZSBhbmQgY29tbWl0IG1lc3NhZ2UgYm90aCBzaG91bGQgbm90IGV4Y2VlZCA3NCAN Cj4+PiBjaGFyYWN0ZXJzIGxpbmUgbGVuZ3RoLiAoTm90IHN1cmUgaG93IG1hbnkgY2hhcnMgUGF0 Y2hDaGVjay5weSANCj4+PiBhY3R1YWxseSBlbmZvcmNlcywgSSBhbHdheXMgc3RpY2sgd2l0aCA3 NCwgZm9sbG93aW5nIHRoZSBMaW51eCANCj4+PiBrZXJuZWwNCj4+PiB0cmFkaXRpb24uKQ0KPj4+ DQo+Pj4gSSByZXdyYXBwZWQgdGhlIGNvbW1pdCBtZXNzYWdlIGhlcmUgZm9yIHJlYWRhYmlsaXR5 Lg0KPj4+DQo+Pj4NCj4+Pj4NCj4+Pj4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwu Y29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQo+Pj4+IENjOiBFcmljIERvbmcgPGVy aWMuZG9uZ0BpbnRlbC5jb208bWFpbHRvOmVyaWMuZG9uZ0BpbnRlbC5jb20+Pg0KPj4+PiBDYzog U3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29t Pj4NCj4+Pj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb208bWFpbHRvOmxlcnNl a0ByZWRoYXQuY29tPj4NCj4+Pj4gQ2M6IEp1c3RlbiwgSm9yZGFuIEwNCj4+Pj4gPGpvcmRhbi5s Lmp1c3RlbkBpbnRlbC5jb208bWFpbHRvOmpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb20+Pg0KPj4+ PiBDYzogS2lubmV5LCBNaWNoYWVsIEQNCj4+Pj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t PG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+DQo+Pj4+IENjOiBXb2xtYW4sIEF5 ZWxsZXQNCj4+Pj4gPGF5ZWxsZXQud29sbWFuQGludGVsLmNvbTxtYWlsdG86YXllbGxldC53b2xt YW5AaW50ZWwuY29tPj4NCj4+Pj4gU3VnZ2VzdGVkLWJ5OiBXb2xtYW4sIEF5ZWxsZXQNCj4+Pj4g PGF5ZWxsZXQud29sbWFuQGludGVsLmNvbTxtYWlsdG86YXllbGxldC53b2xtYW5AaW50ZWwuY29t Pj4NCj4+Pj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVt ZW50IDEuMQ0KPj4+PiBTaWduZWQtb2ZmLWJ5OiBXYW5nLCBKaWFuIEoNCj4+Pj4gPGppYW4uai53 YW5nQGludGVsLmNvbTxtYWlsdG86amlhbi5qLndhbmdAaW50ZWwuY29tPj4NCj4+Pg0KPj4+ICg0 KSBJIHRoaW5rIHRoaXMgaXMgYWxzbyBzb21ldGhpbmcgdGhhdCBKb3JkYW4gaGFkIHBvaW50ZWQg b3V0IGEgDQo+Pj4gbG9uZyB0aW1lIGFnbyAoYXBvbG9naWVzIGlmIEkgbWlzLXJlbWVtYmVyKToN Cj4+Pg0KPj4+IFRoZSBzdHJpbmdzIGFmdGVyIHRoZSB0YWdzIHNob3VsZCBmb3JtIGNvcnJlY3Qg ZW1haWwgYWRkcmVzc2VzLCBhbmQgDQo+Pj4gaWYgdGhlcmUgYXJlIHZhcmlvdXMgZW1haWwgbWV0 YS1jaGFyYWN0ZXJzIGluIHRoZW0sIGxpa2UgIi4iIChkb3QpIGFuZCAiLCINCj4+PiAoY29tbWEp LCB0aGVuIHRoZXkgc2hvdWxkIGJlIHF1b3RlZCwgbGlrZSB0aGlzOg0KPj4+DQo+Pj4gQ2M6ICJK dXN0ZW4sIEpvcmRhbiBMIiANCj4+PiA8am9yZGFuLmwuanVzdGVuQGludGVsLmNvbTxtYWlsdG86 am9yZGFuLmwuanVzdGVuQGludGVsLmNvbT4+DQo+Pj4gQ2M6ICJLaW5uZXksIE1pY2hhZWwgRCIg DQo+Pj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4+DQo+Pj4gQ2M6ICJXb2xtYW4sIEF5ZWxsZXQiIA0KPj4+IDxheWVsbGV0Lndv bG1hbkBpbnRlbC5jb208bWFpbHRvOmF5ZWxsZXQud29sbWFuQGludGVsLmNvbT4+DQo+Pj4gU3Vn Z2VzdGVkLWJ5OiAiV29sbWFuLCBBeWVsbGV0IiANCj4+PiA8YXllbGxldC53b2xtYW5AaW50ZWwu Y29tPG1haWx0bzpheWVsbGV0LndvbG1hbkBpbnRlbC5jb20+Pg0KPj4+IFNpZ25lZC1vZmYtYnk6 ICJXYW5nLCBKaWFuIEoiIA0KPj4+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb208bWFpbHRvOmppYW4u ai53YW5nQGludGVsLmNvbT4+DQo+Pj4NCj4+PiBJZiB5b3UgbG9vayBhdCB0aGUgYWN0dWFsIGFk ZHJlc3NlcyBvbiB0aGUgZW1haWxzIHRoYXQgaGF2ZSBiZWVuIA0KPj4+IHNlbnQgb3V0LCB5b3Ug Y2FuIHNlZSB0aGV5IGFyZSBhbGwgbWFsZm9ybWVkLiBGb3IgZXhhbXBsZSwgSSBoYXZlOg0KPj4+ DQo+Pj4gIkpvcmRhbiBMDQo+Pj4gPGpvcmRhbi5sLmp1c3RlbkBpbnRlbC5jb208bWFpbHRvOmpv cmRhbi5sLmp1c3RlbkBpbnRlbC5jb20+PiIgZm9yIEpvcmRhbiAtLSB0aGUgcGFydCBiZWZvcmUg dGhlIGNvbW1hIHdhcyB0YWtlbiB0byBiZSBhIHNlcGFyYXRlIGVtYWlsIGFkZHJlc3MgKGEgbWFs Zm9ybWVkIG9uZSkuDQo+Pj4NCj4+PiBBdCBsZWFzdCBmb3IgbXkgcmVwbHksIEkgaGF2ZSBmaXhl ZCB1cCB0aGUgZW1haWwgYWRkcmVzc2VzLg0KPj4+DQo+Pj4NCj4+PiAoNSkgVGhlIGNvbW1pdCBt ZXNzYWdlIG1lbnRpb25zIEJJVDcgb2YgdGhlIG5ldyBQQ0QuDQo+Pj4NCj4+PiBGaXJzdCwgdGhh bmtzIGZvciBjaGVja2luZyBXaW5kb3dzIDcgYm9vdCAoYW5kIEknbSBoYXBweSB0aGF0IEkgZ290 IA0KPj4+IHN1c3BpY2lvdXMgb2YgdGhlIGZlYXR1cmUgd2l0aCByZWdhcmQgdG8gV2luZG93cyA3 KS4gSSB0aGluayBCSVQ3IGlzIA0KPj4+IGEgZ29vZCBmZWF0dXJlLg0KPj4+DQo+Pj4gSG93ZXZl ciwgcGxlYXNlIGluY2x1ZGUgdGhlIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoYXQgZmVhdHVyZSBp biB0aGUgDQo+Pj4gY29tbWl0IG1lc3NhZ2UgLS0gaXQgaXMgb25lIHNlbnRlbmNlOyAiRGlzYWJs ZSBOVUxMIHBvaW50ZXIgDQo+Pj4gZGV0ZWN0aW9uIGp1c3QgYWZ0ZXIgRW5kT2ZEeGUuIg0KPj4+ DQo+Pj4gKEkgdGhpbmsgQklUNyBpcyBhIHJlYWxseSBzbWFydCBmZWF0dXJlLCBhbmQgSSBsaWtl ICpob3cqIGl0IGlzIHVzZWQgDQo+Pj4gaW4gIk5VTExfREVURUNUSU9OX0VOQUJMRUQiIGJlbG93 LiBUaGUgY2hlY2sgbWVhbnMsICJpZiB0aGUgDQo+Pj4gcHJvdGVjdGlvbiBpcyBlbmFibGVkIGZv ciBEWEUsIGFuZCAqbm90IGRpc2FibGVkKiAoPT0gYWxzbyBlbmFibGVkKSBhZnRlciBFbmQtb2Yt RHhlIi4NCj4+Pg0KPj4+IFRoaXMgZG9lc24ndCBtZWFuIHRoYXQgSSBsaWtlIHRoZSBOVUxMX0RF VEVDVElPTl9FTkFCTEVEIG1hY3JvIA0KPj4+IGl0c2VsZjsgbW9yZSBvbiB0aGF0IGJlbG93LikN Cj4+Pg0KPj4+DQo+Pj4+IC0tLQ0KPj4+PiAgT3ZtZlBrZy9RZW11VmlkZW9EeGUvRHJpdmVyLmMg ICAgICAgICB8IDE1ICsrKysrKysrKysrKysrLQ0KPj4+PiAgT3ZtZlBrZy9RZW11VmlkZW9EeGUv UWVtdS5oICAgICAgICAgICB8IDE2ICsrKysrKysrKysrKysrKysNCj4+Pj4gIE92bWZQa2cvUWVt dVZpZGVvRHhlL1FlbXVWaWRlb0R4ZS5pbmYgfCAgMiArKw0KPj4+PiAgMyBmaWxlcyBjaGFuZ2Vk LCAzMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+Pj4+DQo+Pj4+IGRpZmYgLS1naXQg YS9Pdm1mUGtnL1FlbXVWaWRlb0R4ZS9Ecml2ZXIuYyANCj4+Pj4gYi9Pdm1mUGtnL1FlbXVWaWRl b0R4ZS9Ecml2ZXIuYyBpbmRleCAwZGNlODBlNTliLi5lZTBlZWQ3MjE0IDEwMDY0NA0KPj4+PiAt LS0gYS9Pdm1mUGtnL1FlbXVWaWRlb0R4ZS9Ecml2ZXIuYw0KPj4+PiArKysgYi9Pdm1mUGtnL1Fl bXVWaWRlb0R4ZS9Ecml2ZXIuYw0KPj4+PiBAQCAtMTk0LDYgKzE5NCw3IEBAIFFlbXVWaWRlb0Nv bnRyb2xsZXJEcml2ZXJTdGFydCAoDQo+Pj4+ICAgIFBDSV9UWVBFMDAgICAgICAgICAgICAgICAg ICAgICAgICBQY2k7DQo+Pj4+ICAgIFFFTVVfVklERU9fQ0FSRCAgICAgICAgICAgICAgICAgICAq Q2FyZDsNCj4+Pj4gICAgRUZJX1BDSV9JT19QUk9UT0NPTCAgICAgICAgICAgICAgICpDaGlsZFBj aUlvOw0KPj4+PiArICBFRklfQ1BVX0FSQ0hfUFJPVE9DT0wgICAgICAgICAgICAgKkNwdTsNCj4+ Pg0KPj4+ICg2KSBJIGJlbGlldmUgSSBtZW50aW9uZWQgdGhpcyBpbiB0aGUgZWFybGllciBkaXNj dXNzaW9uLCBpbiBzb21lIA0KPj4+IGZvcm0sIGJ1dCBub3cgSSdsbCBzYXkgaXQgYWdhaW46DQo+ Pj4NCj4+PiBBIFVFRkkgZHJpdmVyIGhhcyBubyBidXNpbmVzcyBwb2tpbmcgYXQgdGhlIENQVSBB cmNoIHByb3RvY29sLiBUaGUgDQo+Pj4gUEkgc3BlYyAoMS42KSBzdGF0ZXMsDQo+Pj4NCj4+PiAg IDEyLjMgQ1BVIEFyY2hpdGVjdHVyYWwgUHJvdG9jb2wNCj4+PiAgIEVGSV9DUFVfQVJDSF9QUk9U T0NPTA0KPj4+DQo+Pj4gICBTdW1tYXJ5DQo+Pj4NCj4+PiAgIEFic3RyYWN0cyB0aGUgcHJvY2Vz c29yIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGltcGxlbWVudCBzb21lDQo+Pj4gICBv ZiB0aGUgRFhFIHNlcnZpY2VzLiBUaGlzIHByb3RvY29sIG11c3QgYmUgcHJvZHVjZWQgYnkgYSBi b290IHNlcnZpY2UNCj4+PiAgIG9yIHJ1bnRpbWUgRFhFIGRyaXZlciBhbmQgbWF5IG9ubHkgYmUg Y29uc3VtZWQgYnkgdGhlIERYRSBGb3VuZGF0aW9uDQo+Pj4gICBhbmQgRFhFIGRyaXZlcnMgdGhh dCBwcm9kdWNlIGFyY2hpdGVjdHVyYWwgcHJvdG9jb2xzLg0KPj4+DQo+Pj4gVGhlIERYRSBjb3Jl IGlzIG9idmlvdXNseSBmcmVlIHRvIHVzZSB0aGUgQ1BVIEFyY2ggcHJvdG9jb2wsIGJ1dCBhIA0K Pj4+IFVFRkkgZHJpdmVyIGlzIGZvcmJpZGRlbiBmcm9tIGl0LCAqZXZlbiBpZiogd2Ugc2F5IHRo YXQsIGluIHRoaXMgDQo+Pj4gVUVGSSBkcml2ZXIsIHdlIGFyZSBnb2luZyB0byB1c2UgRFhFIHNl cnZpY2VzLiAoV2hpY2ggY29tZSBmcm9tIHRoZSANCj4+PiBQSSBzcGVjLCBhbmQgbm90IHRoZSBV RUZJIHNwZWMuKQ0KPj4+DQo+Pj4gVGhlcmVmb3JlLCBoZXJlIHdlIGhhdmUgdG8gdXNlIGdEUy0+ U2V0TWVtb3J5U3BhY2VBdHRyaWJ1dGVzKCkuDQo+Pj4NCj4+PiBUaGUgZ0RTLT5TZXRNZW1vcnlT cGFjZUF0dHJpYnV0ZXMoKSBzZXJ2aWNlIGRlcGVuZHMgb24gdGhlIENQVSBBcmNoIA0KPj4+IHBy b3RvY29sLCBieSB0aGUgUEkgc3BlYy4gSXQgaXMgbm90IGVhc3kgdG8gc2VlLCBiZWNhdXNlIHRo ZSBQSSBzcGVjIA0KPj4+IGhhcyBhIGZvcm1hdHRpbmcgZXJyb3IgaW4gdGhpcyBhcmVhLiBJZiB5 b3UgbG9vayB1bmRlciANCj4+PiBHZXRNZW1vcnlTcGFjZURlc2NyaXB0b3IoKSwgdGhlcmUgaXMg YW4gZXJyb3IgY29kZQ0KPj4+DQo+Pj4gICBFRklfTk9UX0FWQUlMQUJMRV9ZRVQgIFRoZSBhdHRy aWJ1dGVzIGNhbm5vdCBiZSBzZXQgYmVjYXVzZSBDUFUNCj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgYXJjaGl0ZWN0dXJhbCBwcm90b2NvbCBpcyBub3QgYXZhaWxhYmxlIHlldC4NCj4+Pg0K Pj4+IE9idmlvdXNseSB0aGlzIGVycm9yIGNvZGUgYmVsb25ncyB0byBTZXRNZW1vcnlTcGFjZUF0 dHJpYnV0ZXMoKSwgbm90IA0KPj4+IEdldE1lbW9yeVNwYWNlRGVzY3JpcHRvcigpLg0KPj4+DQo+ Pj4gQW55d2F5LCBnRFMgc2hvdWxkIGJlIHVzZWQsIGFyY2hpdGVjdHVyYWwgcHJvdG9jb2xzIHNo b3VsZG4ndCBiZS4NCj4+Pg0KPj4+DQo+Pj4+DQo+Pj4+ICAgIE9sZFRwbCA9IGdCUy0+UmFpc2VU UEwgKFRQTF9DQUxMQkFDSyk7DQo+Pj4+DQo+Pj4+IEBAIC00NzksNyArNDgwLDE5IEBAIFFlbXVW aWRlb0NvbnRyb2xsZXJEcml2ZXJTdGFydCAoICAjaWYgZGVmaW5lZA0KPj4+PiBNREVfQ1BVX0lB MzIgfHwgZGVmaW5lZCBNREVfQ1BVX1g2NA0KPj4+PiAgICBpZiAoUHJpdmF0ZS0+VmFyaWFudCA9 PSBRRU1VX1ZJREVPX0JPQ0hTX01NSU8gfHwNCj4+Pj4gICAgICAgIFByaXZhdGUtPlZhcmlhbnQg PT0gUUVNVV9WSURFT19CT0NIUykgew0KPj4+PiAtICAgIEluc3RhbGxWYmVTaGltIChDYXJkLT5O YW1lLCBQcml2YXRlLT5HcmFwaGljc091dHB1dC5Nb2RlLT5GcmFtZUJ1ZmZlckJhc2UpOw0KPj4+ PiArICAgIC8vDQo+Pj4+ICsgICAgLy8gUHJlcGFyZSBDUFUgYXJjaCBwcm90b2NvbCBmb3IgTlVM TCBwb2ludGVyIGRldGVjdGlvbg0KPj4+PiArICAgIC8vDQo+Pj4+ICsgICAgU3RhdHVzID0gZ0JT LT5Mb2NhdGVQcm90b2NvbCAoDQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpQ3B1QXJj aFByb3RvY29sR3VpZCwNCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZDcHUNCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgKTsNCj4+Pj4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPj4+PiArDQo+Pj4+ ICsgICAgRElTQUJMRV9OVUxMX0RFVEVDVElPTihDcHUpOw0KPj4+PiArICAgICAgSW5zdGFsbFZi ZVNoaW0gKENhcmQtPk5hbWUsIFByaXZhdGUtPkdyYXBoaWNzT3V0cHV0Lk1vZGUtPkZyYW1lQnVm ZmVyQmFzZSk7DQo+Pj4+ICsgICAgRU5BQkxFX05VTExfREVURUNUSU9OKENwdSk7DQo+Pj4NCj4+ PiAoNykgVGhlIE5VTEwgZGV0ZWN0aW9uIGRpc2FibGluZyBhbmQgZW5hYmxpbmcgc2hvdWxkIGJy YWNrZXQgdGhlIA0KPj4+IGFmZmVjdGVkIGNvZGUgYXMgdGlnaHRseSBhcyBwb3NzaWJsZS4NCj4+ Pg0KPj4+IFNvIHBsZWFzZSBtb3ZlIHRoaXMgaW50byBJbnN0YWxsVmJlU2hpbSgpIGFjY29yZGlu Z2x5Lg0KPj4+DQo+Pj4NCj4+Pj4gICAgfQ0KPj4+PiAgI2VuZGlmDQo+Pj4+DQo+Pj4+IGRpZmYg LS1naXQgYS9Pdm1mUGtnL1FlbXVWaWRlb0R4ZS9RZW11LmggDQo+Pj4+IGIvT3ZtZlBrZy9RZW11 VmlkZW9EeGUvUWVtdS5oIGluZGV4IDdmYmIyNWIzZWYuLmJiM2JjNmViMGYgMTAwNjQ0DQo+Pj4+ IC0tLSBhL092bWZQa2cvUWVtdVZpZGVvRHhlL1FlbXUuaA0KPj4+PiArKysgYi9Pdm1mUGtnL1Fl bXVWaWRlb0R4ZS9RZW11LmgNCj4+Pj4gQEAgLTI1LDYgKzI1LDcgQEANCj4+Pj4gICNpbmNsdWRl IDxQcm90b2NvbC9QY2lJby5oPg0KPj4+PiAgI2luY2x1ZGUgPFByb3RvY29sL0RyaXZlclN1cHBv cnRlZEVmaVZlcnNpb24uaD4NCj4+Pj4gICNpbmNsdWRlIDxQcm90b2NvbC9EZXZpY2VQYXRoLmg+ DQo+Pj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvQ3B1Lmg+DQo+Pj4+DQo+Pj4+ICAjaW5jbHVkZSA8 TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPj4+PiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaURyaXZlckVu dHJ5UG9pbnQuaD4gQEAgLTgyLDYgKzgzLDIxIEBAIA0KPj4+PiB0eXBlZGVmIHN0cnVjdCB7DQo+ Pj4+DQo+Pj4+ICAjZGVmaW5lIEdSQVBISUNTX09VVFBVVF9JTlZBTElERV9NT0RFX05VTUJFUiAg MHhmZmZmDQo+Pj4+DQo+Pj4+ICsvLw0KPj4+PiArLy8gVkJFIGNvZGUgd2lsbCBhY2Nlc3MgbWVt b3J5IGJldHdlZW4gMC00MDk1IHdoaWNoIHdpbGwgY2F1c2UgDQo+Pj4+ICtwYWdlIGZhdWx0IGV4 Y2VwdGlvbiAvLyBpZiBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIG1lY2hhbmlzbSBpcyBlbmFibGVk Lg0KPj4+PiArRm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0byAvLyBkaXNhYmxlL2VuYWJs ZSBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGJlZm9yZS9hZnRlciBhY2Nlc3NpbmcgdGhvc2UgbWVt b3J5Lg0KPj4+PiArLy8NCj4+Pj4gKyNkZWZpbmUgTlVMTF9ERVRFQ1RJT05fRU5BQkxFRCAgKChQ Y2RHZXQ4KFBjZE51bGxQb2ludGVyRGV0ZWN0aW9uUHJvcGVydHlNYXNrKSAmIChCSVQwfEJJVDcp KSA9PSBCSVQwKQ0KPj4+PiArI2RlZmluZSBESVNBQkxFX05VTExfREVURUNUSU9OKENwdSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+Pj4+ICsgIGlmIChO VUxMX0RFVEVDVElPTl9FTkFCTEVEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCj4+Pj4gKyAgICAoQ3B1KS0+U2V0TWVtb3J5QXR0cmlidXRlcygo Q3B1KSwgMCwgRUZJX1BBR0VfU0laRSwgMCk7ICAgICAgICAgICAgICAgICAgICAgXA0KPj4+PiAr ICB9DQo+Pj4+ICsjZGVmaW5lIEVOQUJMRV9OVUxMX0RFVEVDVElPTihDcHUpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+Pj4gKyAgaWYgKE5VTExfREVU RUNUSU9OX0VOQUJMRUQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4+PiArICAgIChDcHUpLT5TZXRNZW1vcnlBdHRyaWJ1dGVzKChDcHUpLCAw LCBFRklfUEFHRV9TSVpFLCBFRklfTUVNT1JZX1JQKTsgICAgICAgICBcDQo+Pj4+ICsgIH0NCj4+ Pj4gKw0KPj4+DQo+Pj4gKDgpIEkgYmVsaWV2ZSBKb3JkYW4gdG9vIGNvbW1lbnRlZCBvbiB0aGVz ZSBtYWNyb3MgZWxzZXdoZXJlICh1bmRlciANCj4+PiBwYXRjaCAxLzQpLg0KPj4+DQo+Pj4gSW4g bXkgb3BpbmlvbiwgdGhpcyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBh IGxpYnJhcnkgDQo+Pj4gY2xhc3MsIHdpdGggYSBsaWJyYXJ5IGluc3RhbmNlIHRoYXQgaXMgc3Vp dGFibGUgZm9yIGF0IGxlYXN0IA0KPj4+IFVFRklfRFJJVkVSIG1vZHVsZXMuIChNYXliZSBldmVu IGZvciBEWEVfRFJJVkVSIG1vZHVsZXMuKQ0KPj4+DQo+Pj4gWW91IGNvdWxkIGFkZCBhIHNlcGFy YXRlIGxpYnJhcnkgaW5zdGFuY2UgZm9yIFNNTSBkcml2ZXJzLCBpZiB0aGF0IA0KPj4+IHdlcmUg bmVjZXNzYXJ5Lg0KPj4+DQo+Pj4NCj4+PiAoOSkgU3R5bGUgY29tbWVudDogcGxlYXNlIHB1dCBv bmUgc3BhY2UgY2hhcmFjdGVyIGJldHdlZW4gdGhlIA0KPj4+IGZ1bmN0aW9uIGRlc2lnbmF0b3Ig YW5kIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzLg0KPj4+DQo+Pj4NCj4+Pj4gIC8vDQo+Pj4+ICAv LyBRRU1VIFZpZGVvIFByaXZhdGUgRGF0YSBTdHJ1Y3R1cmUgIC8vIGRpZmYgLS1naXQgDQo+Pj4+ IGEvT3ZtZlBrZy9RZW11VmlkZW9EeGUvUWVtdVZpZGVvRHhlLmluZg0KPj4+PiBiL092bWZQa2cv UWVtdVZpZGVvRHhlL1FlbXVWaWRlb0R4ZS5pbmYNCj4+Pj4gaW5kZXggN2M3ZDQyOWJjYS4uNWQx NjZlYjk5YyAxMDA2NDQNCj4+Pj4gLS0tIGEvT3ZtZlBrZy9RZW11VmlkZW9EeGUvUWVtdVZpZGVv RHhlLmluZg0KPj4+PiArKysgYi9Pdm1mUGtnL1FlbXVWaWRlb0R4ZS9RZW11VmlkZW9EeGUuaW5m DQo+Pj4+IEBAIC03Miw3ICs3Miw5IEBADQo+Pj4+ICAgIGdFZmlHcmFwaGljc091dHB1dFByb3Rv Y29sR3VpZCAgICAgICAgICAgICAgICAjIFBST1RPQ09MIEJZX1NUQVJUDQo+Pj4+ICAgIGdFZmlE ZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAjIFBST1RPQ09MIEJZX1NU QVJUDQo+Pj4+ICAgIGdFZmlQY2lJb1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAg ICAjIFBST1RPQ09MIFRPX1NUQVJUDQo+Pj4+ICsgIGdFZmlDcHVBcmNoUHJvdG9jb2xHdWlkDQo+ Pj4+DQo+Pj4+ICBbUGNkXQ0KPj4+PiAgICBnT3B0aW9uUm9tUGtnVG9rZW5TcGFjZUd1aWQuUGNk RHJpdmVyU3VwcG9ydGVkRWZpVmVyc2lvbg0KPj4+PiArICANCj4+Pj4gKyBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Qcm9wZXJ0eU1hcw0KPj4+ PiArIGsNCj4+Pg0KPj4+ICgxMCkgSW5zdGVhZCBvZiB0aGVzZSwgdGhlIGxpYnJhcnkgY2xhc3Mg dGhhdCBJIGRlc2NyaWJlZCB1bmRlciAoOCkgDQo+Pj4gc2hvdWxkIGJlIGFkZGVkIGhlcmUuDQo+ Pj4NCj4+PiBBbnkgZnVydGhlciBkZXBlbmRlbmNpZXMgbGlrZSBQQ0RzLCBwcm90b2NvbHMgZXRj IHNob3VsZCBiZSANCj4+PiBpbmhlcml0ZWQgYnkgdGhlIGRyaXZlciB0aHJvdWdoIHRoZSBsaWJy YXJ5IGluc3RhbmNlIHRoYXQgdGhlIA0KPj4+IHBsYXRmb3JtIERTQyBmaWxlIHJlc29sdmVzIHRo ZSBsaWJyYXJ5IGNsYXNzIHRvLg0KPj4+DQo+Pj4gQm9udXM6IHNob3VsZCB5b3UgcmVhbGl6ZSB0 aGF0IHRoZSBmZWF0dXJlIGlzIGltcG9zc2libGUgdG8gDQo+Pj4gaW1wbGVtZW50IHdpdGhvdXQg YWNjZXNzaW5nIHRoZSBDUFUgQXJjaCBwcm90b2NvbCBkaXJlY3RseSwgeW91IA0KPj4+IGNvdWxk IGhpZGUgdGhlIHByb3RvY29sIEdVSUQgZGVwZW5kZW5jeSBpbiB0aGUgbGlicmFyeSBpbnN0YW5j ZSBJTkYgDQo+Pj4gZmlsZSwgYW5kIEknZCBiZSBub25lIHRoZSB3aXNlci4NCj4+Pg0KPj4+IC4u LiBXZWxsLCBJIGNvdWxkIGF0IGxlYXN0IHByZXRlbmQgdGhhdC4gOikNCj4+Pg0KPj4+IFRoYW5r cywNCj4+PiBMYXN6bG8NCj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXw0KPj4+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+Pj4gZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KPj4+IGh0dHBzOi8v bGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0KPj4+DQo+IA0KDQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KZWRrMi1kZXZlbCBt YWlsaW5nIGxpc3QNCmVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQpodHRwczovL2xpc3RzLjAxLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQplZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRr Mi1kZXZlbA0K