Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2380876ybi; Sat, 25 May 2019 23:12:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqwVLiyQcsZFzCRZI/YQHXxhalrJjoOyo6kGBvPoef9KCIgWcfXtXTU6cZsEY8VYFOJBHJt1 X-Received: by 2002:a17:902:f081:: with SMTP id go1mr71773246plb.211.1558851162272; Sat, 25 May 2019 23:12:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558851162; cv=none; d=google.com; s=arc-20160816; b=fbKzdVLDOw95BS9qNHeFVuk73zfoCCOdRQ9Z+fmHudIMg0Kh/cSPLijIe1rZc7B7ux TJabQaDfDePoth4x2JVcEcK2b3uReMoPHNxjtPW9dXdMOOKrHSheiIVYp0GW64vUdZYx zWLr3SBNCd1LTC9HEviaHQkoZYOaoyz+xhlSQS9g7w8MWO4VrhObSlihy8PPXfqicSmc AKHZD5UQvvGTh8V30KTKDarV6nONZaoWiGuIaAB0zAg7sf3NFIg6Y7vCzWSq0DaV0kpI tsN2yzT/UfrjxRRGV5QoHQzORW522kp77t1iAMa+q9O7Gx29+1qzV+RpL4XcxrZ5+4+C Uz/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from; bh=5P4kHOnj7jgGkom9Ke8g2k8yw20eGCAzrfsuDfELgOc=; b=V/fJpyzYrAJBvmcYaKFt3fwenccfSxa4EYW9vqSPQgAi4we4tx6DSD2UFrzQPx0fgQ OKCusJWswM2aOTEjcDCXlFVMSpK6lWo67f3NuZ082nS+buRT0uKXA6eIanwctHqvvlW7 iXFPCJSUQoUZJX1Ifqu9kG9/I/6u5MInxid4CeSFyO/N5nzwAR0emcvraBRzSDbAK88Y +/mVCoy+UdLCa7JEBwEFKB9zY7S0icwhl/atouZhXLQsQwFePdMPoZLZKmZWmvSvrsTM gsgPipSUvykJGwazoYvsBJRabfvvgw0M+DJExWJZLlir80r+3GQkJC7lCFY3nOCPLONx 6gSg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 68si12404696plc.160.2019.05.25.23.12.03; Sat, 25 May 2019 23:12:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726548AbfEZGJm (ORCPT + 99 others); Sun, 26 May 2019 02:09:42 -0400 Received: from mga01.intel.com ([192.55.52.88]:30751 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726131AbfEZGJm (ORCPT ); Sun, 26 May 2019 02:09:42 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 May 2019 23:09:40 -0700 X-ExtLoop1: 1 Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by orsmga005.jf.intel.com with ESMTP; 25 May 2019 23:09:39 -0700 Received: from orsmsx159.amr.corp.intel.com (10.22.240.24) by ORSMSX103.amr.corp.intel.com (10.22.225.130) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sat, 25 May 2019 23:09:39 -0700 Received: from orsmsx116.amr.corp.intel.com ([169.254.7.165]) by ORSMSX159.amr.corp.intel.com ([169.254.11.57]) with mapi id 14.03.0415.000; Sat, 25 May 2019 23:09:39 -0700 From: "Xing, Cedric" To: Andy Lutomirski CC: "Christopherson, Sean J" , "Stephen Smalley" , Jarkko Sakkinen , James Morris , "Serge E. Hallyn" , LSM List , Paul Moore , Eric Paris , "selinux@vger.kernel.org" , Jethro Beekman , "Hansen, Dave" , Thomas Gleixner , "Dr. Greg" , Linus Torvalds , LKML , X86 ML , "linux-sgx@vger.kernel.org" , Andrew Morton , "nhorman@redhat.com" , "npmccallum@redhat.com" , "Ayoun, Serge" , "Katz-zamir, Shay" , "Huang, Haitao" , Andy Shevchenko , "Svahn, Kai" , Borislav Petkov , Josh Triplett , "Huang, Kai" , David Rientjes Subject: RE: SGX vs LSM (Re: [PATCH v20 00/28] Intel SGX1 support) Thread-Topic: SGX vs LSM (Re: [PATCH v20 00/28] Intel SGX1 support) Thread-Index: AQHVC0vUmIXibKT8TUm/EUnHn2XAfqZu5q2AgAAGWoCABXOKgIABz2SAgAAI9ACAAWgPAIAAAJWAgAAJhACAAByGAIAAdoKAgABA+ICAAIOmAIAAQKcAgAAWeICAAIbLAIAAGyYA///WAeCAARtHgIAAIeCAgAADbAD//5AmcIAAjJAAgAAHN4CAABd5AIAAFI2AgAARBICAAPo7MIAArTmA///E0eA= Date: Sun, 26 May 2019 06:09:38 +0000 Message-ID: <960B34DE67B9E140824F1DCDEC400C0F654E9824@ORSMSX116.amr.corp.intel.com> References: <20190523234044.GC12078@linux.intel.com> <960B34DE67B9E140824F1DCDEC400C0F654E8956@ORSMSX116.amr.corp.intel.com> <20190524174243.GA365@linux.intel.com> <20190524175458.GB365@linux.intel.com> <960B34DE67B9E140824F1DCDEC400C0F654E8E1D@ORSMSX116.amr.corp.intel.com> <20190524200333.GF365@linux.intel.com> <20190524224107.GJ365@linux.intel.com> <683B5E3D-AFB6-4B45-8D39-B00847312209@amacapital.net> <960B34DE67B9E140824F1DCDEC400C0F654E965F@ORSMSX116.amr.corp.intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTNhZmM2YjUtYTQzMC00ODE4LThmMjEtNWZmNGQ1NDA5YWU2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiZkNDNTJcL1llYWlNVkU4aWpLakE0bXYwXC96eXA2elFsRVpHWUhkWkRvV3RyblpiSnZlUmJSVGUxM2VXYmREandoIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.22.254.139] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBBbmR5IEx1dG9taXJza2kgW21haWx0bzpsdXRvQGtlcm5lbC5vcmddDQo+IFNlbnQ6 IFNhdHVyZGF5LCBNYXkgMjUsIDIwMTkgNTo1OCBQTQ0KPiANCj4gT24gU2F0LCBNYXkgMjUsIDIw MTkgYXQgMzo0MCBQTSBYaW5nLCBDZWRyaWMgPGNlZHJpYy54aW5nQGludGVsLmNvbT4gd3JvdGU6 DQo+ID4NCj4gPiA+IEZyb206IEFuZHkgTHV0b21pcnNraSBbbWFpbHRvOmx1dG9AYW1hY2FwaXRh bC5uZXRdDQo+ID4gPiBTZW50OiBGcmlkYXksIE1heSAyNCwgMjAxOSA0OjQyIFBNDQo+ID4gPg0K PiA+ID4gPiBPbiBNYXkgMjQsIDIwMTksIGF0IDM6NDEgUE0sIFNlYW4gQ2hyaXN0b3BoZXJzb24g PHNlYW4uai5jaHJpc3RvcGhlcnNvbkBpbnRlbC5jb20+DQo+IHdyb3RlOg0KPiA+ID4gPg0KPiA+ ID4gPj4gT24gRnJpLCBNYXkgMjQsIDIwMTkgYXQgMDI6Mjc6MzRQTSAtMDcwMCwgQW5keSBMdXRv bWlyc2tpIHdyb3RlOg0KPiA+ID4gPj4gT24gRnJpLCBNYXkgMjQsIDIwMTkgYXQgMTowMyBQTSBT ZWFuIENocmlzdG9waGVyc29uDQo+ID4gPiA+PiA8c2Vhbi5qLmNocmlzdG9waGVyc29uQGludGVs LmNvbT4gd3JvdGU6DQo+ID4gPiA+Pj4NCj4gPiA+ID4+Pj4gT24gRnJpLCBNYXkgMjQsIDIwMTkg YXQgMTI6Mzc6NDRQTSAtMDcwMCwgQW5keSBMdXRvbWlyc2tpIHdyb3RlOg0KPiA+ID4gPj4+Pj4g T24gRnJpLCBNYXkgMjQsIDIwMTkgYXQgMTE6MzQgQU0gWGluZywgQ2VkcmljIDxjZWRyaWMueGlu Z0BpbnRlbC5jb20+IHdyb3RlOg0KPiA+ID4gPj4+Pj4NCj4gPiA+ID4+Pj4+IElmICJpbml0aWFs IHBlcm1pc3Npb25zIiBmb3IgZW5jbGF2ZXMgYXJlIGxlc3MgcmVzdHJpY3RpdmUNCj4gPiA+ID4+ Pj4+IHRoYW4gc2hhcmVkIG9iamVjdHMsIHRoZW4gaXQnZCBiZWNvbWUgYSBiYWNrZG9vciBmb3IN Cj4gPiA+ID4+Pj4+IGNpcmN1bXZlbnRpbmcgTFNNIHdoZW4gZW5jbGF2ZSB3aGl0ZWxpc3Rpbmcg aXMgKm5vdCogaW4gcGxhY2UuDQo+ID4gPiA+Pj4+PiBGb3IgZXhhbXBsZSwgYW4gYWR2ZXJzYXJ5 IG1heSBsb2FkIGEgcGFnZSwgd2hpY2ggd291bGQNCj4gPiA+ID4+Pj4+IG90aGVyd2lzZSBuZXZl ciBiZSBleGVjdXRhYmxlLCBhcyBhbiBleGVjdXRhYmxlDQo+ID4gPiBwYWdlIGluIEVQQy4NCj4g PiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiBJbiB0aGUgY2FzZSBhIFJXWCBwYWdlIGlzIG5lZWRlZCwg dGhlIGNhbGxpbmcgcHJvY2VzcyBoYXMgdG8NCj4gPiA+ID4+Pj4+IGhhdmUgYSBSV1ggcGFnZSBz ZXJ2aW5nIGFzIHRoZSBzb3VyY2UgZm9yIEVBREQgc28NCj4gPiA+ID4+Pj4+IFBST0NFU1NfX0VY RUNNRU0gd2lsbCBoYXZlIGJlZW4gY2hlY2tlZC4gRm9yIFNHWDIsIGNoYW5naW5nIGFuDQo+ID4g PiA+Pj4+PiBFUEMgcGFnZSB0byBSV1ggaXMgc3ViamVjdCB0byBGSUxFX19FWEVDTUVNIG9uDQo+ ID4gPiA+Pj4+PiAvZGV2L3NneC9lbmNsYXZlLCB3aGljaCBJIHNlZSBhcyBhIHNlY3VyaXR5IGJl bmVmaXQgYmVjYXVzZSBpdA0KPiA+ID4gPj4+Pj4gb25seSBhZmZlY3RzIHRoZSBlbmNsYXZlIGJ1 dCBub3QgdGhlIHdob2xlIHByb2Nlc3MgaG9zdGluZw0KPiA+ID4gaXQuDQo+ID4gPiA+Pj4+DQo+ ID4gPiA+Pj4+IFNvIHRoZSBwZXJtaXNzaW9uIHdvdWxkIGJlIGxpa2UgRklMRV9fRVhFQ01PRCBv biB0aGUgc291cmNlDQo+ID4gPiA+Pj4+IGVuY2xhdmUgcGFnZSwgYmVjYXVzZSBpdCB3b3VsZCBi ZSBtYXBwZWQgTUFQX0FOT05ZTU9VUywgUFJPVF9XUklURT8NCj4gPiA+ID4+Pj4gTUFQX1NIQVJF RCwgUFJPVF9XUklURSBpc24ndCBnb2luZyB0byB3b3JrIGJlY2F1c2UgdGhhdCBtZWFucw0KPiA+ ID4gPj4+PiB5b3UgY2FuIG1vZGlmeSB0aGUgZmlsZS4NCj4gPiA+ID4+Pg0KPiA+ID4gPj4+IFdh cyB0aGlzIGluIHJlc3BvbnNlIHRvIENlZHJpYydzIGNvbW1lbnQsIG9yIHRvIG15IGNvbW1lbnQ/ DQo+ID4gPiA+Pg0KPiA+ID4gPj4gWW91cnMuICBJIHRoaW5rIHRoYXQgcmVxdWlyaW5nIHNvdXJj ZSBwYWdlcyB0byBiZSBhY3R1YWxseSBtYXBwZWQNCj4gPiA+ID4+IFcgaXMgbm90IHN1Y2ggYSBn cmVhdCBpZGVhLg0KPiA+ID4gPg0KPiA+ID4gPiBJIHdhc24ndCByZXF1aXJpbmcgc291cmNlIHBh Z2VzIHRvIGJlIG1hcHBlZCBXLiAgQXQgbGVhc3QgSSBkaWRuJ3QNCj4gPiA+ID4gaW50ZW5kIHRv IHJlcXVpcmUgVy4gIFdoYXQgSSB3YXMgdHJ5aW5nIHRvIHNheSBpcyB0aGF0IFNHWCBjb3VsZA0K PiA+ID4gPiB0cmlnZ2VyIGFuIEVYRUNNRU0gY2hlY2sgaWYgdXNlcnNwYWNlIGF0dGVtcHRlZCB0 byBFQUREIG9yIEVBVUcgYW4NCj4gPiA+ID4gZW5jbGF2ZSBwYWdlIHdpdGggUldYIHBlcm1pc3Np b25zLCBlLmcuOg0KPiA+ID4gPg0KPiA+ID4gPiAgaWYgKChTRUNJTkZPLlBFUk1TICYgUldYKSA9 PSBSV1gpIHsNCj4gPiA+ID4gICAgICByZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoTlVMTCwgUldY LCA/Pz8pOw0KPiA+ID4gPiAgICAgIGlmIChyZXQpDQo+ID4gPiA+ICAgICAgICAgIHJldHVybiBy ZXQ7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IEJ1dCB0aGF0J3MgYSBtb290IHBvaW50 IGlmIHdlIGFkZCBzZWN1cml0eV9lbmNsYXZlX2xvYWQoKSBvciB3aGF0ZXZlci4NCj4gPiA+ID4N Cj4gPiA+ID4+DQo+ID4gPiA+Pj4NCj4gPiA+ID4+Pj4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRo YXQgbG9va2luZyBhdCB0aGUgc291cmNlIFZNQSBwZXJtaXNzaW9uDQo+ID4gPiA+Pj4+IGJpdHMg b3Igc291cmNlIFBURSBwZXJtaXNzaW9uIGJpdHMgaXMgcHV0dGluZyBhIGJpdCB0b28gbXVjaA0K PiA+ID4gPj4+PiBwb2xpY3kgaW50byB0aGUgZHJpdmVyIGFzIG9wcG9zZWQgdG8gdGhlIExTTS4g IEhvdyBhYm91dA0KPiA+ID4gPj4+PiBkZWxlZ2F0aW5nIHRoZSB3aG9sZSB0aGluZyB0byBhbiBM U00gaG9vaz8gIFRoZSBFQUREIG9wZXJhdGlvbg0KPiA+ID4gPj4+PiB3b3VsZCBpbnZva2UgYSBu ZXcgaG9vaywgc29tZXRoaW5nIGxpa2U6DQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+IGludCBzZWN1 cml0eV9lbmNsYXZlX2xvYWRfYnl0ZXModm9pZCAqc291cmNlX2FkZHIsIHN0cnVjdA0KPiA+ID4g Pj4+PiB2bV9hcmVhX3N0cnVjdCAqc291cmNlX3ZtYSwgbG9mZl90IHNvdXJjZV9vZmZzZXQsIHVu c2lnbmVkIGludA0KPiA+ID4gPj4+PiBtYXhwZXJtKTsNCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4g VGhlbiB5b3UgZG9uJ3QgaGF2ZSB0byBtdWNrIHdpdGggbWFwcGluZyBhbnl0aGluZyBQUk9UX0VY RUMuDQo+ID4gPiA+Pj4+IEluc3RlYWQgeW91IGxvYWQgZnJvbSBhIG1hcHBpbmcgb2YgYSBmaWxl IGFuZCB0aGUgTFNNIGFwcGxpZXMNCj4gPiA+ID4+Pj4gd2hhdGV2ZXIgcG9saWN5IGl0IGZlZWxz IGFwcHJvcHJpYXRlLiAgSWYgdGhlIGZpcnN0IHBhc3MgZ2V0cw0KPiA+ID4gPj4+PiBzb21ldGhp bmcgd3JvbmcsIHRoZSBhcHBsaWNhdGlvbiBvciBsaWJyYXJ5IGF1dGhvcnMgY2FuIHRha2UgaXQN Cj4gPiA+ID4+Pj4gdXAgd2l0aCB0aGUgU0VMaW51eCBmb2xrcyB3aXRob3V0IGJyZWFraW5nIHRo ZSB3aG9sZSBBQkkgOikNCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4gKEknbSBwcm9wb3NpbmcgcGFz c2luZyBpbiB0aGUgc291cmNlX3ZtYSBiZWNhdXNlIHRoaXMgaG9vaw0KPiA+ID4gPj4+PiB3b3Vs ZCBiZSBjYWxsZWQgd2l0aCBtbWFwX3NlbSBoZWxkIGZvciByZWFkIHRvIGF2b2lkIGEgVE9DVE9V DQo+ID4gPiA+Pj4+IHJhY2UuKQ0KPiA+ID4gPj4+Pg0KPiA+ID4gPj4+PiBJZiB3ZSBnbyB0aGlz IHJvdXRlLCB0aGUgb25seSBzdWJzdGFudGlhbCBjaGFuZ2UgdG8gdGhlDQo+ID4gPiA+Pj4+IGV4 aXN0aW5nIGRyaXZlciB0aGF0J3MgbmVlZGVkIGZvciBhbiBpbml0aWFsIHVwc3RyZWFtIG1lcmdl IGlzDQo+ID4gPiA+Pj4+IHRoZSBtYXhwZXJtIG1lY2hhbmlzbSBhbmQgd2hhdGV2ZXIgaG9wZWZ1 bGx5IG1pbmltYWwgQVBJDQo+ID4gPiA+Pj4+IGNoYW5nZXMgYXJlIG5lZWRlZCB0byBhbGxvdyB1 c2VycyB0byBjb252ZW5pZW50bHkgc2V0IHVwIHRoZQ0KPiA+ID4gPj4+PiBtYXBwaW5ncy4gIEFu ZCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhvdyB0byBoYWNrIGFyb3VuZA0KPiA+ID4g Pj4+PiBtcHJvdGVjdCgpIGNhbGxpbmcgaW50byB0aGUgTFNNLCBiZWNhdXNlIHRoZSBMU00gd2ls bCBhY3R1YWxseQ0KPiA+ID4gPj4+PiBiZSBhd2FyZSBvZiBTR1ggYW5kIGNhbiBqdXN0IGRvIHRo ZSByaWdodCB0aGluZy4NCj4gPiA+ID4+Pg0KPiA+ID4gPj4+IFRoaXMgZG9lc24ndCBhZGRyZXNz IHJlc3RyaWN0aW5nIHdoaWNoIHByb2Nlc3NlcyBjYW4gcnVuIHdoaWNoDQo+ID4gPiA+Pj4gZW5j bGF2ZXMsIGl0IG9ubHkgYWxsb3dzIHJlc3RyaWN0aW5nIHRoZSBidWlsZCBmbG93LiAgT3IgYXJl IHlvdQ0KPiA+ID4gPj4+IHN1Z2dlc3RpbmcgdGhpcyBiZSBkb25lIGluIGFkZGl0aW9uIHRvIHdo aXRlbGlzdGluZyBzaWdzdHJ1Y3RzPw0KPiA+ID4gPj4NCj4gPiA+ID4+IEluIGFkZGl0aW9uLg0K PiA+ID4gPj4NCj4gPiA+ID4+IEJ1dCBJIG5hbWVkIHRoZSBmdW5jdGlvbiBiYWRseSBhbmQgZ2F2 ZSBpdCBhIGJhZCBzaWduYXR1cmUsIHdoaWNoDQo+ID4gPiA+PiBjb25mdXNlZCB5b3UuICBMZXQn cyB0cnkgYWdhaW46DQo+ID4gPiA+Pg0KPiA+ID4gPj4gaW50IHNlY3VyaXR5X2VuY2xhdmVfbG9h ZF9mcm9tX21lbW9yeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QNCj4gPiA+ID4+ICpzb3Vy Y2UsIHVuc2lnbmVkIGludCBtYXhwZXJtKTsNCj4gPiA+ID4NCj4gPiA+ID4gSSBwcmVmZXIgc2Vj dXJpdHlfZW5jbGF2ZV9sb2FkKCksICJmcm9tX21lbW9yeSIgc2VlbXMgcmVkdW5kYW50IGF0IGJl c3QuDQo+ID4gPg0KPiA+ID4gRmluZSB3aXRoIG1lLg0KPiA+DQo+ID4gSWYgd2UgdGhpbmsgb2Yg RUFERCBhcyBhIHdheSBvZiBtbWFwKCknaW5nIGFuIGVuY2xhdmUgZmlsZSBpbnRvIG1lbW9yeSwg d291bGQgdGhpcw0KPiBzZWN1cml0eV9lbmNsYXZlX2xvYWQoKSBiZSB0aGUgc2FtZSBhcyBzZWN1 cml0eV9tbWFwX2ZpbGUoc291cmNlX3ZtYS0+dm1fZmlsZSwgbWF4cGVybSwNCj4gTUFQX1BSSVZB VEUpLCBleGNlcHQgdGhhdCB0aGUgdGFyZ2V0IGlzIG5vdyBFUEMgaW5zdGVhZCBvZiByZWd1bGFy IHBhZ2VzPw0KPiANCj4gSG1tLCB0aGF0J3MgY2xldmVyLiAgQWx0aG91Z2ggaXQgc2VlbXMgcGxh dXNpYmxlIHRoYXQgYW4gTFNNIHdvdWxkIHdhbnQgdG8gYWxsb3cgUlggb3IgUldYDQo+IG9mIGEg Z2l2ZW4gZmlsZSBwYWdlIGJ1dCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGFuIGFwcHJvdmVkIGVu Y2xhdmUsIHNvIEkgdGhpbmsgaXQgc2hvdWxkDQo+IHN0aWxsIGJlIGl0cyBvd24gaG9vay4NCg0K V2hhdCBkbyB5b3UgbWVhbiBieSAiaW4gdGhlIGNvbnRleHQgb2YgYW4gYXBwcm92ZWQgZW5jbGF2 ZSI/IEVQQyBwYWdlcyBhcmUgKmluYWNjZXNzaWJsZSogdG8gYW55IHNvZnR3YXJlIHVudGlsIGFm dGVyIEVJTklULiBTbyBpdCB3b3VsZCBuZXZlciBiZSBhIHNlY3VyaXR5IGNvbmNlcm4gdG8gRUFE RCBhIHBhZ2Ugd2l0aCB3cm9uZyBwZXJtaXNzaW9ucyBhcyBsb25nIGFzIHRoZSBlbmNsYXZlIHdv dWxkIGJlIGRlbmllZCBldmVudHVhbGx5IGJ5IExTTSBhdCBFSU5JVC4NCg0KQnV0IEkgYWNrbm93 bGVkZ2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2FkaW5nIGEgcGFnZSBpbnRvIHJlZ3VsYXIg bWVtb3J5IHZzLiBpbnRvIEVQQy4gU28gaXQncyBiZW5lZmljaWFsIHRvIGhhdmUgYSBzZXBhcmF0 ZSBob29rLCB3aGljaCBpZiBub3QgaG9va2VkLCB3b3VsZCBwYXNzIHRocm91Z2ggdG8gc2VjdXJp dHlfbW1hcF9maWxlKCkgYnkgZGVmYXVsdD8gDQoNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ ID4gPiA+PiBNYXliZSBzb21lIHJlYWxseSBmYW5jeSBmdXR1cmUgTFNNIHdvdWxkIGFsc28gd2Fu dCBsb2ZmX3QNCj4gPiA+ID4+IHNvdXJjZV9vZmZzZXQsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCB0 ZXJyaWJseSB1c2VmdWwuICBUaGlzIHNhbWUNCj4gPiA+ID4+IGNhbGxiYWNrIHdvdWxkIGJlIHVz ZWQgZm9yIEVBVUcuDQo+ID4NCj4gPiBFQVVHIGFsd2F5cyB6ZXJvZXMgdGhlIEVQQyBwYWdlIGJl Zm9yZSBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGFuIGVuY2xhdmUuIFNvIEkgZG9uJ3QNCj4gdGhp bmsgdGhlcmUncyBhbnl0aGluZyBuZWVkZWQgdG8gZG9uZSBoZXJlLg0KPiANCj4gRHVoLiAgU28g c2VjdXJpdHlfZW5jbGF2ZV9sb2FkX3plcm9zKCkgZm9yIEVBVUcuICBTZWUgYmVsb3cuDQo+IA0K PiA+DQo+ID4gPiA+Pg0KPiA+ID4gPj4gRm9sbG93aW5nIHVwIG9uIHlvdXIgZGlzY3Vzc2lvbiB3 aXRoIENlZHJpYyBhYm91dCBzaWdzdHJ1Y3QsIHRoZQ0KPiA+ID4gPj4gb3RoZXIgY2FsbGJhY2sg d291bGQgYmUgc29tZXRoaW5nIGxpa2U6DQo+ID4gPiA+Pg0KPiA+ID4gPj4gaW50IHNlY3VyaXR5 X2VuY2xhdmVfaW5pdChzdHJ1Y3QgZmlsZSAqc2lnc3RydWN0X2ZpbGUpOw0KPiA+DQo+ID4gSSdk IHN0aWxsIGluc2lzdCBpbiB1c2luZyBhIHBvaW50ZXIgcmF0aGVyIHRoYW4gYSBmaWxlLCBmb3Ig cmVhc29ucyB0aGF0IHdlJ3ZlIGRpc2N1c3NlZA0KPiBiZWZvcmUuIEZvciB0aG9zZSB3aG8gY2Fu J3QgcmVjYWxsLCB0aGUgbWFqb3IgcmVhc29uIGlzIHRoYXQgbW9zdCBpbXBsZW1lbnRhdGlvbiB3 b3VsZA0KPiBlbWJlZCBTSUdTVFJVQ1QgaW50byB0aGUgc2FtZSBmaWxlIGFzIHRoZSBlbmNsYXZl IChvciBhdCBsZWFzdCBJIGRvbid0IHdhbnQgdG8gcHJldmVudA0KPiBhbnlvbmUgZnJvbSBkb2lu ZyBzbyksIHdoaWNoIGNvdWxkIGFsc28gYmUgcGFydCBvZiBhbm90aGVyIGZpbGUsIHN1Y2ggYXMg YSBzaGFyZWQgb2JqZWN0DQo+IG9yIGV2ZW4gdGhlIG1haW4gZXhlY3V0YWJsZSBpdHNlbGYuIEl0 IGNvdWxkIGJlIGRpZmZpY3VsdCB0byBvYnRhaW4gYSBmZCBpbiB0aG9zZSBjYXNlcy4NCj4gbWVt ZmQgd29uJ3Qgd29yayBiZWNhdXNlIGl0IGNhbid0IHJldGFpbiB0aGUgc2FtZSBhdHRyaWJ1dGVz IG9mIHRoZSBvcmlnaW5hbCBmaWxlDQo+IGNvbnRhaW5pbmcgdGhlIFNJR1NUUlVDVC4NCj4gPg0K PiA+IEFmdGVyIGFsbCwgd2hhdCBtYXR0ZXJzIGlzIHRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQg d2l0aCB0aGUgYmFja2luZyBmaWxlLCB3aGljaCBjb3VsZA0KPiBiZSBlYXNpbHkgcmV0cmlldmUg ZnJvbSB2bV9maWxlIG9mIHRoZSBjb3ZlcmluZyBWTUEuIFNvIGZvciB0aGUgc2FrZSBvZiBmbGV4 aWJpbGl0eSwgbGV0J3MNCj4gc3RheSB3aXRoIHdoYXQgd2UndmUgYWdyZWVkIGJlZm9yZSAtIGEg cG9pbnRlciB0byBTSUdTVFJVQ1QuDQo+IA0KPiBJJ20gb2theSB3aXRoIHRoaXMsIGV4Y2VwdCBm b3Igb25lIG5hc3RpbmVzczogdGhlcmUncyBhIGJpZyBkaWZmZXJlbmNlIGJldHdlZW4gYSBmaWxl IHRoYXQNCj4gaXMganVzdCBhIHNpZ3N0cnVjdCBhbmQgYSBmaWxlIHRoYXQgY29udGFpbnMgZXNz ZW50aWFsbHkgYXJiaXRyYXJ5IGRhdGEgcGx1cyBhIHNpZ3N0cnVjdA0KPiBhdCBhbiBhcmJpdHJh cnkgb2Zmc2V0Lg0KPiBXZSBjb3VsZCBkbyBzb21ldGhpbmcgdHJpY2t5IGxpa2Ugc2F5aW5nIHRo YXQgU0lHU1RSVUNUIGNhbiBiZSBpbiBhIGZpbGUgdGhhdCdzIGp1c3QgYQ0KPiBTSUdTVFJVQ1Qg b3IgaXQgY2FuIGJlIGluIGEgc3BlY2lhbCBTSUdTVFJVQ1QgRUxGIG5vdGUgaW4gYSBmaWxlIHRo YXQgaXNuJ3QganVzdCBhDQo+IFNJR1NUUlVDVCwgYnV0IHRoYXQgY291bGQgYmUgYW5ub3lpbmds eSByZXN0cmljdGl2ZS4NCg0KQWdyZWVkLiBBcHByb3ZpbmcgYSBmaWxlIGltcGxpZXMgYXBwcm92 aW5nIGFsbCBTSUdTVFJVQ1RzIHdpdGhpbiB0aGF0IGZpbGUuIEJ1dCBJIGd1ZXNzIGl0IHdvdWxk bid0IGNhdXNlIHByYWN0aWNhbCBwcm9ibGVtcy4NCg0KPiANCj4gSWYgaXQncyBnb2luZyB0byBi ZSBpbiBhbiBhcmJpdHJhcnkgZmlsZSwgdGhlbiBJIHRoaW5rIHRoZSBzaWduYXR1cmUgbmVlZHMg dG8gYmUgbW9yZSBsaWtlOg0KPiANCj4gaW50IHNlY3VyaXR5X2VuY2xhdmVfaW5pdChzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnNpZ3N0cnVjdF92bWEsIGxvZmZfdCBzaWdzdHJ1Y3Rfb2Zmc2V0LA0K PiBjb25zdCBzZ3hfc2lnc3RydWN0ICpzaWdzdHJ1Y3QpOw0KPiANCj4gU28gdGhhdCB0aGUgTFNN IHN0aWxsIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gYmFzZSBpdHMgZGVjaXNpb24gb24gdGhlIGNv bnRlbnRzIG9mIHRoZQ0KPiBTSUdTVFJVQ1QuICBBY3R1YWxseSwgd2UgbmVlZCB0aGF0IGNoYW5n ZSByZWdhcmRsZXNzLg0KDQpXb3VsZG4ndCB0aGUgcGFpciBvZiB7IHNpZ3N0cnVjdF92bWEsIHNp Z3N0cnVjdF9vZmZzZXQgfSBiZSB0aGUgc2FtZSBhcyBqdXN0IGEgcG9pbnRlciwgYmVjYXVzZSB0 aGUgVk1BIGNvdWxkIGJlIGxvb2tlZCB1cCB1c2luZyB0aGUgcG9pbnRlciBhbmQgdGhlIG9mZnNl dCB3b3VsZCB0aGVuIGJlIChwb2ludGVyIC0gdm1hLT52bV9zdGFydCk/DQoNCj4gDQo+ID4NCj4g PiA+ID4+DQo+ID4gPiA+PiBUaGUgbWFpbiBpc3N1ZSBJIHNlZSBpcyB0aGF0IHdlIGFsc28gd2Fu dCB0byBjb250cm9sIHRoZQ0KPiA+ID4gPj4gZW5jbGF2ZSdzIGFiaWxpdHkgdG8gaGF2ZSBSV1gg cGFnZXMgb3IgdG8gY2hhbmdlIGEgVyBwYWdlIHRvIFguDQo+ID4gPiA+PiBXZSBtaWdodCBhbHNv DQo+ID4gPiA+PiB3YW50Og0KPiA+ID4gPj4NCj4gPiA+ID4+IGludCBzZWN1cml0eV9lbmNsYXZl X2xvYWRfemVyb3ModW5zaWduZWQgaW50IG1heHBlcm0pOw0KPiA+ID4gPg0KPiA+ID4gPiBXaGF0 J3MgdGhlIHVzZSBjYXNlIGZvciB0aGlzPyAgQG1heHBlcm0gd2lsbCBhbHdheXMgYmUgYXQgbGVh c3QgUlcNCj4gPiA+ID4gaW4gdGhpcyBjYXNlLCBvdGhlcndpc2UgdGhlIHBhZ2UgaXMgdXNlbGVz cyB0byB0aGUgZW5jbGF2ZSwgYW5kIGlmDQo+ID4gPiA+IHRoZSBlbmNsYXZlIGNhbiB3cml0ZSB0 aGUgcGFnZSwgdGhlIGZhY3QgdGhhdCBpdCBzdGFydGVkIGFzIHplcm9zDQo+ID4gPiA+IGlzIGly cmVsZXZhbnQuDQo+ID4gPg0KPiA+ID4gVGhpcyBpcyBob3cgRUFVRyBjb3VsZCBhc2sgaWYgUldY IGlzIG9rYXkuIElmIGFuIGVuY2xhdmUgaXMNCj4gPiA+IGludGVybmFsbHkgZG9pbmcgZHluYW1p YyBsb2FkaW5nLCB0aGUgaXQgd2lsbCBuZWVkIGEgaGVhcCBwYWdlIHdpdGgNCj4gPiA+IG1heHBl cm0gPSBSV1guICAoSWYgaXTigJlzIHdlbGwgZGVzaWduZWQsIGl0IHdpbGwgbWFrZSBpdCBSVyBh bmQgdGhlbg0KPiA+ID4gUlgsIGVpdGhlciBieSBjaGFuZ2luZyBTRUNJTkZPIG9yIGJ5IGFza2lu ZyB0aGUgaG9zdCB0byBtcHJvdGVjdCgpIGl0LCBidXQgaXQgc3RpbGwNCj4gbmVlZHMgdGhlIG92 ZXJhbGwgUldYIG1hc2suKS4NCj4gPg0KPiA+IEFueSBuZXcgcGFnZSBFQVVHJ2VkIHdpbGwgc3Rh cnQgaW4gUlcgKGFzIGRpY3RhdGVkIGJ5IFNHWCBJU0EpLiBFQUNDRVBUQ09QWSB3aWxsIHRoZW4N Cj4gY2hhbmdlIGl0IHRvIFJYLiBSV1ggaXMgbmV2ZXIgbmVlZGVkIGZvciBhbGwgcHJhY3RpY2Fs IHB1cnBvc2VzLiBUaGlzIGluIGZhY3QgY291bGQgYmUNCj4gZ2F0ZWQgYnkgbXByb3RlY3QoKSBh bmQgdGhlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIC9kZXYvc2d4L2VuY2xhdmUuIEluIHRo ZSBjYXNlIG9mDQo+IFNFTGludXgsIEZJTEVfX0VYRUNNT0QgaXMgdGhlIHJpZ2h0IGF0dHJpYnV0 ZSBhbmQgbXByb3RlY3QoKSB3aWxsIHRha2UgY2FyZSBvZiBhbGwgdGhlDQo+IHJlc3QuIEkgZG9u J3Qgc2VlIHdoeSB0aGUgZHJpdmVyIG5lZWQgYSByb2xlIGhlcmUuDQo+IA0KPiBJIGZpbmQgdGhl IFNETSdzIGRpc2N1c3Npb24gb2YgRUFVRywgRUFDQ0VQVCwgYW5kIEVBQ0NFUFRDT1BZIHRvIGJl IGV4dHJlbWVseSBjb25mdXNpbmcuDQo+IE15IGNvcHkgb2YgdGhlIFNETSBoYXMgRUFDQ0VQVCdz IFNFQ0lORk8gYXJndW1lbnQgYXMgIlJlYWQgYWNjZXNzIHBlcm1pdHRlZCBieSBOb24NCj4gRW5j bGF2ZSIuICBJcyB0aGF0IGFuIGVycm9yPw0KDQpJJ20gY29uZnVzZWQgYnkgdGhvc2UgZGVzY3Jp cHRpb25zIHRvby4gR3Vlc3MgSSBjYW5ub3QgY29tbWVudCBpZiB0aGF0J3MgYW4gZXJyb3Igb3Ig bm90Lg0KDQpBbnl3YXksIHBlciBvdXIgaW50ZXJuYWwgZG9jdW1lbnRzLCBmb3IgRUFVRywgU0VD SU5GTyBoYXMgdG8gYmUgc2V0IHRvIFBUX1JFR3xSVy4gRm9yIEVBQ0NFUFQsIFNHWCBJU0EgY29t cGFyZXMgc3VwcGxpZWQgU0VDSU5GTyB3aXRoIEVQQ00gYXR0cmlidXRlcyBhbmQgcmV0dXJucyBh biBlcnJvciBpZiB0aGV5IGRvbid0IG1hdGNoLiBFQUNDRVBUQ09QWSBvbmx5IHdvcmtzIG9uIHBl bmRpbmcgcGFnZXMgKGkuZS4gU0VDSU5GTy5QIG11c3QgYmUgc2V0KSwgYW5kIHNldHMgRVBDTSBh Y2Nlc3MgcGVybWlzc2lvbnMgdG8gd2hhdGV2ZXIgc3VwcGxpZWQgaW4gU0VDSU5GTy4gDQogDQo+ ICBBbmQgaXMgRUFDQ0VQVENPUFkganVzdCBFQUNDRVBUICsgbWVtY3B5IG9yIGlzIHRoZXJlIHNv bWUgb3RoZXIgZnVuZGFtZW50YWwgZGlmZmVyZW5jZT8NCj4gMzguNS43IGRvZXNuJ3QgZXZlbiBt ZW50aW9uIEVBQ0NFUFRDT1BZLg0KDQoyIGRpZmZlcmVuY2VzOiAxKSBFQUNDRVBUIG9ubHkgKmNv bXBhcmVzKiBidXQgRUFDQ0VQVENPUFkgKnNldHMqIEVQQ00gcGVybWlzc2lvbnM7IGFuZCAyKSBF QUNDRVBUQ09QWSBkb2VzIEVBQ0NFUFQrbWVtY3B5IGF0b21pY2FsbHkuDQogDQo+IA0KPiBBbnl3 YXksIGFsbCBteSBjb25mdXNpb24gYXNpZGUsIEkgd2FzIHRhbGtpbmcgYWJvdXQgdGhlIHBhZ2Ug dGFibGUsIG5vdCB0aGUgRVBDTS4gIEkgdGhpbmsNCj4gdGhlIGVuY2xhdmUgc2hvdWxkIG5lZWQg cGVybWlzc2lvbiB0byB3cml0ZSBpdHMgb3duIGNvbnRlbnQgaW50byBhIHBhZ2UgdGhhdCB3aWxs IGV2ZXINCj4gYmVjb21lIFgsIGFuZCB0aGUgZW5jbGF2ZSdzIHVudHJ1c3RlZCBob3N0IGxpYnJh cnkgd291bGQgZG8gdGhpcyBieSBhZGRpbmcgdGhlIHBhZ2Ugd2l0aA0KPiBNQVhQRVJNPVJXWCBh bmQgdGhlbiBtYXBwaW5nL21wcm90ZWN0aW5nIGl0IGFzIFBST1RfV1JJVEUgYW5kIHRoZW4gKGxh dGVyIG9yDQo+IHNpbXVsdGFuZW91c2x5KSBQUk9UX0VYRUMuDQoNCkkgd2FzIHRhbGtpbmcgYWJv dXQgdGhlIHNhbWUgdGhpbmcuIEEgY29kZSBwYWdlIGluIEVQQyB3aWxsIHN0YXJ0IGluIFJXIChi b3RoIEVQQ00gYW5kIFBURSkgYW5kIGVuZCBpbiBSWCAoYm90aCBFUENNIGFuZCBQVEUpLiBFQUND RVBUQ09QWSB0YWtlcyBjYXJlIG9mIEVQQ00sIHdoaWxlIG1wcm90ZWN0KCkgY291bGQgdGFrZSBj YXJlIG9mIFBURSBhcyBsb25nIGFzIC9kZXYvc2d4L2VuY2xhdmUgaGFzIEZJTEVfX0VYRUNNT0Qu DQoNCkkgdW5kZXJzdGFuZCB5b3VyIGludGVudGlvbiB0byBlbmNsYXZlIHBhZ2VzIHRvIHNlZ21l bnRzIHdpdGggZGlmZmVyZW50IE1BWFBFUk1zLiBNeSBjb25jZXJuIGlzIHRob3VnaCB0aGUgaG9z dCBwcm9jZXNzIG1heSBub3QgYWx3YXlzIGhhdmUgYSBwcmlvcmkga25vd2xlZGdlIG9uIHdoaWNo IHJhbmdlcyB0byBiZSB1c2VkIGFzIGNvZGUgdnMuIGRhdGEuIEFmdGVyIGFsbCwgb25seSB0aGUg d2Vha2VzdCBsaW5rIG1hdHRlcnMgaW4gc2VjdXJpdHkgc28gSSB0aGluayB3aGF0IGEgaG9zdCBw cm9jZXNzIGNhcmVzIHdvdWxkIGJlIHdoZXRoZXIgdGhlIGVuY2xhdmUgbG9hZHMgY29kZSBkeW5h bWljYWxseSwgb3IgZXhwYW5kcyBpdHMgZGF0YSBzZWdtZW50cyBvbmx5LCBvciBuZWl0aGVyLiBB bmQgZm9yIHRoYXQgcmVhc29uLCBJIHRoaW5rIGl0IG1vcmUgInVzZXIgZnJpZW5kbHkiIHRvIGtl ZXAganVzdCBvbmUgTUFYUEVSTSAtIGkuZS4gdGhlIG1vc3QgcGVybWlzc2l2ZSBvbmUuIFRoZW4g d2UgY291bGQgYXNzb2NpYXRlIHRoYXQgd2l0aCAvZGV2L3NneC9lbmNsYXZlIHNvIGFzIHRvIHJl bGlldmUgdGhlIGRyaXZlciBmcm9tIGtlZXBpbmcgdHJhY2sgb2YgdG9vIG1hbnkgdGhpbmdzLiAN Cg0KPiANCj4gU2luY2UgU0dYMiBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHdheSB0byBhZGQgYW4g aW5pdGlhbGl6ZWQgcGFnZSB0byBFUEMgYWZ0ZXIgYW4gZW5jbGF2ZQ0KPiBzdGFydHMsIEkgZ3Vl c3MgdGhhdCBpdCdzIGltcG9zc2libGUgdG8gaGF2ZSB0aGUgZW5jbGF2ZSBkbyBzb21ldGhpbmcg bGlrZSBkbG9wZW4oKQ0KPiB3aXRob3V0IE1BWFBFUk09UldYLiAgU28gYmUgaXQuDQoNClRoYXQn cyB0cnVlLiBUaGUgcmVhc29uIGJlaGluZCBpdCBpcyBTR1ggZG9lc27igJl0IHRydXN0IGFueXRo aW5nIGZyb20gb3V0c2lkZS4gU28gbm9uLXByZWRldGVybWluZWQgY29udGVudHMgbXVzdCBiZSBt ZWFzdXJlZCAoZS5nLiBFQUREK0VFWFRFTkQpLCBidXQgaXQncyBoYXJkIHRvIG1lYXN1cmUgKG9y IGF0dGVzdCB0bykgZHluYW1pY2FsbHkgYWRkZWQgY29udGVudHMgc28gd2UgZGVjaWRlZCB0byBh bGxvdyBwcmVkZXRlcm1pbmVkIGNvbnRlbnRzIChpLmUuIGFsbCB6ZXJvcyBpbiB0aGUgY2FzZSBv ZiBFQVVHKSBvbmx5Lg0KIA0KPiBNYXliZSBzb21lb25lIHdpbGwgZmluZCB0aGlzIGFubm95aW5n IHNvbWVkYXkgYW5kIFNHWDMgd2lsbCBhZGQgRUFVRy1idXQtZG9uJ3QtemVybyBhbmQNCj4gRUFD Q0VQVC13aXRoLWV4aXN0aW5nLWNvbnRlbnRzLg0KDQpGcm9tIHNlY3VyaXR5IHBlcnNwZWN0aXZl LCBhY2NlcHRpbmcgYSBwYWdlIHRoYXQgaXMgbWVhc3VyZWQvaGFzaGVkIHRvIFhZWiBpcyBlcXVp dmFsZW50IHRvIG92ZXJ3cml0aW5nIHRoYXQgcGFnZSB3aXRoIGNvbnRlbnQgaGFzaGVkIHRvIFhZ Wi4gRUFDQ0VQVENPUFkgYWN0dWFsbHkgZG9lcyB0aGUgbGF0dGVyLiBUaGUgYW5ub3lpbmcgcGFy dCBpcyBkdWUgdG8gdGhlIG1pc21hdGNoIGJldHdlZW4gU0dYIElTQSBhbmQgdGhlIHMvdyBtb2Rl bCBhZG9wdGVkIGJ5IExTTSwgYnV0IHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBzZWN1cml0 eS4gDQoNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiBBbHNvLCBkbyByZWFsIFNHWDEgZW5jbGF2ZSBm b3JtYXRzIGhhdmUgQlNTPyBJZiBzbywgdGhlbiBlaXRoZXIgd2UNCj4gPiA+IG5lZWQgYW4gaW9j dGwgb3IgbG9hZCB6ZXJvcyBvciB1c2VyIGNvZGUgaXMgZ29pbmcgdG8gbG9hZCBmcm9tDQo+ID4g PiAvZGV2L3plcm8gb3IganVzdCBmcm9tIHRoZSBoZWFwLCBidXQgdGhlIExTTSBpcyBnb2luZyB0 byBwbGF5IGJldHRlcg0KPiA+ID4gd2l0aCBhbiBpb2N0bCwgSSBzdXNwZWN0IDopDQo+ID4NCj4g PiBZZXMsIGl0IGRvZXMuIEJ1dCBhbiBlbmNsYXZlIHdvdWxkIGVpdGhlciBtZWFzdXJlIEJTUywg aW4gd2hpY2ggY2FzZSB0aGUgaW5pdGlhbCBieXRlcw0KPiBoYXZlIHRvIGJlIHplcm8gb3IgTVJF TkNMQVZFIHdpbGwgY2hhbmdlOyBvciB6ZXJvIEJTUyBleHBsaWNpdGx5IGluIGl0cyBpbml0aWFs aXphdGlvbg0KPiBjb2RlLg0KPiA+DQo+ID4gQnV0IGZyb20gTFNNJ3MgcGVyc3BlY3RpdmUgaXQg bWFrZXMgbm8gZGlmZmVyZW5jZSB0aGFuIEVBREQnaW5nIGEgcGFnZSB3aXRoIG5vbi16ZXJvDQo+ IGNvbnRlbnQuIEFuZCBzZWN1cml0eV9lbmNsYXZlX2xvYWQoTlVMTCwgUlcpIHdvdWxkIHRha2Ug Y2FyZSBvZiBpdCBpbiBleGFjdGx5IGluIHRoZSBzYW1lDQo+IHdheS4NCj4gDQo+IFN1cmUsIEkg c3VwcG9zZSB0aGUgc2FtZSBob29rIHdpdGggTlVMTCBwYXJhbWV0ZXJzIHdvdWxkIGJlIGVxdWl2 YWxlbnQuDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPj4gQW4gZW5jbGF2ZSB0aGF0 J3MgZ29pbmcgdG8gbW9kaWZ5IGl0cyBvd24gY29kZSB3aWxsIG5lZWQgbWVtb3J5DQo+ID4gPiA+ PiB3aXRoIG1heHBlcm0gPSBSV1ggb3IgV1guDQo+ID4NCj4gPiBXaXRoIFNHWDIvRURNTSwgUldY IGlzICpuZXZlciogbmVlZGVkIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLg0KPiA+DQo+ID4g SW4gdGhlb3J5LCBpbiB0ZXJtcyBvZiBzZWN1cml0eSwgbm8gcGFnZSBzaGFsbCBiZSBtYWRlIGV4 ZWN1dGFibGUgd2hpbGUgaXQgaXMgc3RpbGwNCj4gYmVpbmcgcHJlcGFyZWQuIFNvIFcgYW5kIFgg c2hhbGwgYWx3YXlzIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgcmVnYXJkbGVzcyBpdCdzIGluIEVQ QyBvcg0KPiByZWd1bGFyIG1lbW9yeS4NCj4gPg0KPiA+IFJXWCBpcyBvbmx5IG5lZWRlZCBpbiBT R1gxLCBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gdXNhZ2VzLCBiZWNhdXNlIEVQQ00gcGVy bWlzc2lvbnMNCj4gY2FuIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lLg0KPiANCj4gQXMgYWJvdmUs IEkgdGhpbmsgSSBkaXNhZ3JlZS4gIE1BWFBFUk0gaXMgaW50ZW5kZWQgYXMgYW4gdXBwZXIgYm91 bmQgb24gdGhlIHBlcm1pc3Npb25zDQo+IHRoYXQgYSBwYWdlIGNhbiBldmVyIGhhdmUsIGF0IGxl YXN0IHVudGlsIGl0J3MgRVJFTU9WRWQgYW5kIHJlLWFkZGVkLiAgU2luY2UgdGhlcmUncyBubw0K PiBFQVVHLWJ1dC1kb24ndC16ZXJvLCBFQVVHIHdpdGggTUFYUEVSTS5XPTAgaXMgYmFzaWNhbGx5 IHVzZWxlc3MgYmVjYXVzZSB0aGUgcGFnZSBjYW4gbmV2ZXINCj4gY29udGFpbiBhbnl0aGluZyBv dGhlciB0aGFuIHplcm9zLCBzbyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBwYWdlIHRoYXQgaXMg ZXZlciBleGVjdXRlZA0KPiBoYXMgdG8gaGF2ZSBNQVhQRVJNPVJXWCBvciBNQVhQRVJNPVdYLiAg QW5kIHRoYXQgd2lsbCBuZWVkIHNwZWNpYWwgcGVybWlzc2lvbnMsIHdoaWNoIEkNCj4gdGhpbmsg aXMgY29uc2lzdGVudCB3aXRoIHlvdXIgcmVjZW50IGVtYWlscyBvbiBob3cgdGhpcyBjb3VsZCBh bGwgbWFwIHRvIFNFTGludXgNCj4gcGVybWlzc2lvbnMuDQoNCkknbSB0b3RhbGx5IHdpdGggeW91 LiBXaGF0IEkgd2FzIHRyeWluZyB0byBzYXkgd2FzIHRoYXQgb25seSBXIG9yIFggd291bGQgYmUg bmVlZGVkIGF0IGFueSBnaXZlbiB0aW1lLiBUaGF0IHNhaWQsIE1BWFBFUk09UldYIGJ1dCBQUk9D RVNTX19FWEVDTUVNIHdpbGwgbm90IGJlIG5lZWRlZCwgd2hpbGUgRklMRV9fRVhFQ01PRCB3aWxs IGJlIG5lZWRlZCBvbmx5IG9uIC9kZXYvc2d4L2VuY2xhdmUuIFNvIHRoZSBpbmhlcmVudCByaXNr IGlzIGNvbnRhaW5lZC4gDQoNCj4gDQo+ID4NCj4gPiA+ID4+DQo+ID4gPiA+PiBCdXQgdGhpcyBp cyBhIGJpdCBhd2t3YXJkIGlmIHRoZSBMU00ncyBkZWNpc2lvbiBkZXBlbmRzIG9uIHRoZQ0KPiA+ ID4gPj4gc2lnc3RydWN0LiAgV2UgY291bGQgZ2V0IGZhbmN5IGFuZCByZXF1aXJlIHRoYXQgdGhl IHNpZ3N0cnVjdCBiZQ0KPiA+ID4gPj4gc3VwcGxpZWQgYmVmb3JlIGFueSBFQUREIG9wZXJhdGlv bnMgc28gdGhhdCB0aGUgbWF4cGVybSBkZWNpc2lvbnMNCj4gPiA+ID4+IGNhbiBkZXBlbmQgb24g dGhlIHNpZ3N0cnVjdC4NCj4gPiA+ID4+DQo+ID4gPiA+PiBBbSBJIG1ha2luZyBtb3JlIHNlbnNl IG5vdz8NCj4gPiA+ID4NCj4gPiA+ID4gWWVwLiAgUmVxdWlyaW5nIC5zaWdzdHJ1Y3QgYXQgRUNS RUFURSB3b3VsZCBiZSB0cml2aWFsLiAgSWYgd2UNCj4gPiA+ID4gd2FudGVkIGZsZXhpYmlsaXR5 IHdlIGNvdWxkIGRvOg0KPiA+ID4gPg0KPiA+ID4gPiAgIGludCBzZWN1cml0eV9lbmNsYXZlX2xv YWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLA0KPiA+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwcm90KTsNCj4gPiA+ ID4NCj4gPiA+ID4gQW5kIGZvciB1bHRpbWF0ZSBmbGV4aWJpbGl0eSB3ZSBjb3VsZCBwYXNzIGJv dGggLnNpZ3N0cnVjdCBhbmQgdGhlDQo+ID4gPiA+IGZpbGUgcG9pbnRlciBmb3IgL2Rldi9zZ3gv ZW5jbGF2ZSwgYnV0IHRoYXQgc2VlbXMgYSBiaXQgcmlkaWN1bG91cy4NCj4gPiA+DQo+ID4gPiBJ IGFncmVlLg0KPiA+DQo+ID4gTG9vc2VseSBzcGVha2luZywgYW4gZW5jbGF2ZSAoaW5jbHVkaW5n IGluaXRpYWwgY29udGVudHMgb2YgYWxsIG9mIGl0cyBwYWdlcyBhbmQgdGhlaXINCj4gcGVybWlz c2lvbnMpIGFuZCBpdHMgTVJFTkNMQVZFIGFyZSBhIDEtdG8tMSBjb3JyZXNwb25kZW5jZSAoZ2l2 ZW4gdGhlIGNvbGxpc2lvbiByZXNpc3RhbnQNCj4gcHJvcGVydHkgb2YgU0hBLTIpLiBTbyBvbmx5 IG9uZSBpcyBuZWVkZWQgZm9yIGEgZGVjaXNpb24sIGFuZCBlaXRoZXIgb25lIHdvdWxkIGxlYWQg dG8gdGhlDQo+IHNhbWUgZGVjaXNpb24uIFNvIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG1ha2luZyBh bnkgc2Vuc2UgaGVyZS4NCj4gPg0KPiA+IFRoZW9yZXRpY2FsbHkgc3BlYWtpbmcsIGlmIExTTSBj YW4gbWFrZSBhIGRlY2lzaW9uIGF0IEVJTklUIGJ5IG1lYW5zIG9mDQo+IHNlY3VyaXR5X2VuY2xh dmVfbG9hZCgpLCB0aGVuIHNlY3VyaXR5X2VuY2xhdmVfbG9hZCgpIGlzIG5ldmVyIG5lZWRlZC4N Cj4gPg0KPiA+IEluIHByYWN0aWNlLCBJIHN1cHBvcnQga2VlcGluZyBib3RoIGJlY2F1c2Ugc2Vj dXJpdHlfZW5jbGF2ZV9sb2FkKCkgY2FuIG9ubHkgYXBwcm92ZSBhbg0KPiBlbnVtZXJhYmxlIHNl dCB3aGlsZSBzZWN1cml0eV9lbmNsYXZlX2xvYWQoKSBjYW4gYXBwcm92ZSBhIG5vbi1lbnVtZXJh YmxlIHNldCBvZiBlbmNsYXZlcy4NCj4gTW9yZW92ZXIsIGluIG9yZGVyIHRvIGRldGVybWluZSB0 aGUgdmFsaWRpdHkgb2YgYSBNUkVOQ0xBVkUgKGFzIGluIGRldmVsb3BtZW50IG9mIGEgcG9saWN5 DQo+IG9yIGluIGNyZWF0aW9uIG9mIGEgd2hpdGUvYmxhY2sgbGlzdCksIHN5c3RlbSBhZG1pbnMg d2lsbCBuZWVkIHRoZSBhdWRpdCBsb2cgcHJvZHVjZWQgYnkNCj4gc2VjdXJpdHlfZW5jbGF2ZV9s b2FkKCkuDQo+IA0KPiBJJ20gY29uZnVzZWQuICBUaGluZ3MgbGlrZSBNUlNJR05FUiBhcmVuJ3Qg a25vd24gdW50aWwgdGhlIFNJR1NUUlVDVCBzaG93cyB1cC4gIEFsc28sDQo+IHNlY3VyaXR5X2Vu Y2xhdmVfbG9hZCgpIHByb3ZpZGVzIG5vIHByb3RlY3Rpb24gYWdhaW5zdCBsb2FkaW5nIGEgbWlz aG1hc2ggb2YgdHdvIGRpZmZlcmVudA0KPiBlbmNsYXZlIGZpbGVzLiAgSSBzZWUNCj4gc2VjdXJp dHlfZW5jbGF2ZV9pbml0KCkgYXMgInZlcmlmeSB0aGlzIFNJR1NUUlVDVCBhZ2FpbnN0IHlvdXIg cG9saWN5IG9uIHdobyBtYXkgc2lnbg0KPiBlbmNsYXZlcyBhbmQvb3IgZ3JhbnQgRVhFQ01PRCBk ZXBlbmRpbmcgb24gU0lHU1RSVUNUIg0KPiBhbmQgc2VjdXJpdHlfZW5jbGF2ZV9sb2FkKCkgYXMg ImltcGxlbWVudCB5b3VyIEVYRUNNT0QgLyBFWEVDVVRFIC8gV1JJVEUgLyB3aGF0ZXZlciBwb2xp Y3kNCj4gYW5kIHBvc3NpYmx5IGNoZWNrIGVuY2xhdmUgZmlsZXMgZm9yIHNvbWUgbGFiZWwuIg0K DQpTb3JyeSBmb3IgdGhlIGNvbmZ1c2lvbi4gSSB3YXMgc2F5aW5nIHRoZSBzYW1lIHRoaW5nIGV4 Y2VwdCB0aGF0IHRoZSBkZWNpc2lvbiBvZiBzZWN1cml0eV9lbmNsYXZlX2xvYWQoKSBkb2Vzbid0 IGhhdmUgdG8gZGVwZW5kIG9uIFNJR1NUUlVDVC4gR2l2ZW4geW91ciBwcm90b3R5cGUgb2Ygc2Vj dXJpdHlfZW5jbGF2ZV9sb2FkKCksIEkgdGhpbmsgd2UgYXJlIG9uIHRoZSBzYW1lIHBhZ2UuIEkg bWFkZSB0aGUgYWJvdmUgY29tbWVudCB0byBvYmplY3QgdG8gdGhlIGlkZWEgb2YgInJlcXVpcmUg dGhhdCB0aGUgc2lnc3RydWN0IGJlIHN1cHBsaWVkIGJlZm9yZSBhbnkgRUFERCBvcGVyYXRpb25z IHNvIHRoYXQgdGhlIG1heHBlcm0gZGVjaXNpb25zIGNhbiBkZXBlbmQgb24gdGhlIHNpZ3N0cnVj dCIuDQoNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IFBhc3NpbmcgYm90aCB3b3Vs ZCBhbGxvdyB0eWluZyBFWEVDTU9EIHRvIC9kZXYvc2d4L2VuY2xhdmUgYXMNCj4gPiA+ID4gQ2Vk cmljIHdhbnRlZCAod2l0aG91dCBoYXZpbmcgdG8gcGxheSBnYW1lcyBhbmQgcGFzcw0KPiA+ID4g PiAvZGV2L3NneC9lbmNsYXZlIHRvIHNlY3VyaXR5X2VuY2xhdmVfbG9hZCgpKSwgYnV0IEkgZG9u J3QgdGhpbmsNCj4gPiA+ID4gdGhlcmUncyBhbnl0aGluZyBmdW5kYW1lbnRhbGx5IGJyb2tlbiB3 aXRoIHVzaW5nIC5zaWdzdHJ1Y3QgZm9yDQo+ID4gPiA+IEVYRUNNT0QuICBJdCByZXF1aXJlcyBt b3JlIHZlcmJvc2UgbGFiZWxpbmcsIGJ1dCB0aGF0J3Mgbm90IGEgYmFkIHRoaW5nLg0KPiA+ID4N Cj4gPiA+IFRoZSBiZW5lZml0IG9mIHB1dHRpbmcgaXQgb24gLnNpZ3N0cnVjdCBpcyB0aGF0IGl0 IGNhbiBiZSBwZXItZW5jbGF2ZS4NCj4gPiA+DQo+ID4gPiBBcyBJIHVuZGVyc3RhbmQgaXQgZnJv bSBGZWRvcmEgcGFja2FnaW5nLCB0aGUgd2F5IHRoaXMgd29ya3Mgb24NCj4gPiA+IGRpc3Ryb3Mg aXMgZ2VuZXJhbGx5IHRoYXQgYSBwYWNrYWdlIHdpbGwgaW5jbHVkZSBzb21lIGZpbGVzIGFuZA0K PiA+ID4gdGhlaXIgYXNzb2NpYXRlZCBsYWJlbHMsIGFuZCwgaWYgdGhlIHBhY2thZ2UgbmVlZHMg RVhFQ01PRCwgdGhlbiB0aGUNCj4gPiA+IGZpbGVzIGFyZSBsYWJlbGVkIHdpdGggRVhFQ01PRCBh bmQgdGhlIGF1dGhvciBvZiB0aGUgcmVsZXZhbnQgY29kZSBtaWdodCBnZXQgYSBkaXJ0eQ0KPiBs b29rLg0KPiA+ID4NCj4gPiA+IFRoaXMgY291bGQgdHJhbnNsYXRlIHRvIHRoZSBhdXRob3Igb2Yg YW4gZXhjbGF2ZSB0aGF0IG5lZWRzIFJXWA0KPiA+ID4gcmVnaW9ucyBnZXR0aW5nIGEgZGlydHkg bG9vayB3aXRob3V0IGxlYWtpbmcgdGhpcyBwZXJtaXNzaW9uIGludG8gb3RoZXIgZW5jbGF2ZXMu DQo+ID4gPg0KPiA+ID4gKEluIG15IG9waW5pb24sIHRoZSBkaXJ0eSBsb29rcyBhcmUgYWN0dWFs bHkgdGhlIGJlc3Qgc2VjdXJpdHkNCj4gPiA+IGJlbmVmaXQgb2YgdGhlIGVudGlyZSBjb25jZXB0 IG9mIExTTXMgbWFraW5nIFJXWCBkaWZmaWN1bHQuICBBDQo+ID4gPiBzdWZmaWNpZW50bHkgY3Jl YXRpdmUgYXR0YWNrZXIgY2FuIGFsbW9zdCBhbHdheXMgYnlwYXNzIFdeWA0KPiA+ID4gcmVzdHJp Y3Rpb25zIG9uY2UgdGhleeKAmXZlIHB3bmVkIHlvdSwgYnV0IFdeWCBtYWtlcyBpdCBoYXJkZXIg dG8gcHduDQo+ID4gPiB5b3UgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgU0VMaW51eCBtYWtlcyBp dCByZWFsbHkgb2J2aW91cyB3aGVuDQo+ID4gPiBwYWNrYWdpbmcgYSBwcm9ncmFtIHRoYXQgZG9l c27igJl0IHJlc3BlY3QgV15YLiAgVGhlIHVwc2hvdCBpcyB0aGF0IGENCj4gPiA+IGxvdCBvZiBw cm9ncmFtcyBnb3QgZml4ZWQuKQ0KPiA+DQo+ID4gSSdtIGxvc3QgaGVyZS4gRHluYW1pY2FsbHkg bGlua2VkIGVuY2xhdmVzLCBpZiBydW5uaW5nIG9uIFNHWDIsIHdvdWxkIG5lZWQgUlctPlJYLCBp LmUuDQo+IEZJTEVfX0VYRUNNT0Qgb24gL2Rldi9zZ3gvZW5jbGF2ZS4gQnV0IHRoZXkgbmV2ZXIg bmVlZCBSV1gsIGkuZS4gUFJPQ0VTU19fRVhFQ01FTS4NCj4gDQo+IEhtbS4gIElmIHdlIHdhbnQg dG8gbWFrZSB0aGlzIGRpc3RpbmN0aW9uLCB3ZSBuZWVkIHNvbWV0aGluZyBhIGJpZyByaWNoZXIg dGhhbiBteSBwcm9wb3NlZA0KPiBjYWxsYmFja3MuICBBIGNoZWNrIG9mIHRoZSBhY3R1YWwgbXBy b3RlY3QoKSAvDQo+IG1tYXAoKSBwZXJtaXNzaW9ucyB3b3VsZCBhbHNvIGJlIG5lZWRlZC4gIFNw ZWNpZmljYWxseSwgYWxsb3dpbmcgTUFYUEVSTT1SV1ggd291bGRuJ3QNCj4gaW1wbHkgdGhhdCBQ Uk9UX1dSSVRFIHwgUFJPVF9FWEVDIGlzIGFsbG93ZWQuDQoNCklmIHdlIGtlZXAgb25seSBvbmUg TUFYUEVSTSwgd291bGRuJ3QgdGhpcyBiZSB0aGUgY3VycmVudCBiZWhhdmlvciBvZiBtbWFwKCkv bXByb3RlY3QoKT8NCg0KVG8gYmUgYSBiaXQgbW9yZSBjbGVhciwgc3lzdGVtIGFkbWluIHNldHMg TUFYUEVSTSB1cHBlciBib3VuZCBpbiB0aGUgZm9ybSBvZiBGSUxFX197UkVBRHxXUklURXxFWEVD VVRFfEVYRUNNT0R9IG9mIC9kZXYvc2d4L2VuY2xhdmUuIFRoZW4gZm9yIGEgcHJvY2Vzcy9lbmNs YXZlLCBpZiB3aGF0IGl0IHJlcXVpcmVzIGZhbGxzIGJlbG93IHdoYXQncyBhbGxvd2VkIG9uIC9k ZXYvc2d4L2VuY2xhdmUsIHRoZW4gZXZlcnl0aGluZyB3aWxsIGp1c3Qgd29yay4gT3RoZXJ3aXNl LCBpdCBmYWlscyBpbiB0aGUgZm9ybSBvZiAtRVBFUk0gcmV0dXJuZWQgZnJvbSBtbWFwKCkvbXBy b3RlY3QoKS4gUGxlYXNlIG5vdGUgdGhhdCBNQVhQRVJNIGhlcmUgYXBwbGllcyB0byAicnVudGlt ZSIgcGVybWlzc2lvbnMsIHdoaWxlICJpbml0aWFsIiBwZXJtaXNzaW9ucyBhcmUgdGFrZW4gY2Fy ZSBvZiBieSBzZWN1cml0eV9lbmNsYXZlX3tsb2FkfGluaXR9LiAiaW5pdGlhbCIgcGVybWlzc2lv bnMgY291bGQgYmUgbW9yZSBwZXJtaXNzaXZlIHRoYW4gInJ1bnRpbWUiIHBlcm1pc3Npb25zLCBl LmcuLCBSWCBpcyBzdGlsbCByZXF1aXJlZCBmb3IgaW5pdGlhbCBjb2RlIHBhZ2VzIGV2ZW4gdGhv dWdoIHN5c3RlbSBhZG1pbnMgY291bGQgZGlzYWJsZSBkeW5hbWljYWxseSBsb2FkZWQgY29kZSBw YWdlcyBieSAqbm90KiBnaXZpbmcgRklMRV9fe0VYRUNVVEV8RVhFQ01PRH0uIFRoZXJlZm9yZSwg dGhlICJpbml0aWFsIiBtYXBwaW5nIHdvdWxkIHN0aWxsIGhhdmUgdG8gYmUgZG9uZSBieSB0aGUg ZHJpdmVyICh0byBieXBhc3MgTFNNKSwgZWl0aGVyIHZpYSBhIG5ldyBpb2N0bCBvciBhcyBwYXJ0 IG9mIElPQ19FSU5JVC4NCg==