From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 E657921B06E94 for ; Sun, 16 Jul 2017 19:01:37 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jul 2017 19:03:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,372,1496127600"; d="scan'208";a="993697361" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga003.jf.intel.com with ESMTP; 16 Jul 2017 19:03:29 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 16 Jul 2017 19:03:29 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 16 Jul 2017 19:03:28 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.146]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.122]) with mapi id 14.03.0319.002; Mon, 17 Jul 2017 10:03:27 +0800 From: "Yao, Jiewen" To: Laszlo Ersek , Stefan Berger , Javier Martinez Canillas , Peter Jones , =?utf-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= , "Valluri, Amarnath" CC: edk2-devel-01 , qemu devel list Thread-Topic: investigating TPM for OVMF-on-QEMU Thread-Index: AQHS/MukV91nqih6TEmiUW+4w71z+qJXQqwA Date: Mon, 17 Jul 2017 02:03:25 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503A97A4CF@shsmsx102.ccr.corp.intel.com> References: In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: investigating TPM for OVMF-on-QEMU 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: Mon, 17 Jul 2017 02:01:38 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvDQpUaGlzIGlzIGEgZ29vZCBzdW1tYXJ5Lg0KDQpPbmUgbWlub3IgY29tbWVudCBp czoNCjEpIFRjZzJQZWkvRHhlIGFyZSBhcmVjaGl0ZWN0dXJlIGRyaXZlci4gV2UgZG8gbm90IGV4 cGVjdCBhIHBsYXRmb3JtIG1vZGlmeSB0aGVtLg0KMikgVGNnMkNvbmZpZ1BlaS9EeGUgYXJlIHBs YXRmb3JtIHNhbXBsZSBkcml2ZXIuIEEgcGxhdGZvcm0gbWF5IGhhdmUgaXRzIG93biB2ZXJzaW9u IGJhc2VkIHVwb24gcGxhdGZvcm0gcmVxdWlyZW1lbnQuIEZvciBleGFtcGxlLCBpZiBhIHBsYXRm b3JtIHN1cHBvcnRzIGZUUE0sIGl0IG1heSB1c2UgYW5vdGhlciBUY2cyQ29uZmlnIGRyaXZlci4N Cg0KDQpCYWNrIHRvIGVuYWJsaW5nLCBJIHRoaW5rIHRoZSBmaXJzdCBpbXBvcnRhbnQgcXVlc3Rp b24gaXMgaG93IHRvIGFjY2VzcyBUUE0gZGV2aWNlLg0KDQpJZiB0aGUgVFBNIGNhbiBleHBvc2Ug RklGTyBpbnRlcmZhY2Ugb3IgQ1JCIGludGVyZmFjZSBkZWZpbmVkIGluICJQbGF0Zm9ybSBUUE0g UHJvZmlsZSBTcGVjaWZpY2F0aW9uIGRlZmluaXRpb24gZm9yIFRQTTIuMCIsIG1vc3QgY3VycmVu dCBUUE0yIGRyaXZlcnMgY2FuIGJlIHJldXNlZC4NCg0KDQpUaGUgc2Vjb25kIHF1ZXN0aW9uIGlz IGFib3V0IFBFSSB2YXJpYWJsZS4NCg0KSSBkbyBub3QgdGhpbmsgUEVJIFZhcmlhYmxlIGlzICpy ZXF1aXJlZCogY29tcG9uZW50LiBUY2cyUGVpIGhhcyBnRWZpUGVpUmVhZE9ubHlWYXJpYWJsZTJQ cGlHdWlkIGRlcGVuZGVuY3ksIGFuZCBJIHRoaW5rIHdlIGNhbiByZW1vdmUgaXQuDQoNClRjZzJD b25maWdQZWkgaGFzIGdFZmlQZWlSZWFkT25seVZhcmlhYmxlMlBwaUd1aWQgZGVwZW5kZW5jeSwg YnV0IHRoYXQgaXMgdG8gc3VwcG9ydCBUUE0gc2VsZWN0aW9uLiBUaGUgVGNnMkNvbmZpZyBkcml2 ZXIgaXMgYW4gb3B0aW9uYWwgZHJpdmVyLCBhbmQgaXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgcGxh dGZvcm0gYnkgZGVzaWduLg0KDQoNClRoYW5rIHlvdQ0KWWFvIEppZXdlbg0KDQoNCj4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2Vr QHJlZGhhdC5jb21dDQo+IFNlbnQ6IFNhdHVyZGF5LCBKdWx5IDE1LCAyMDE3IDI6MDQgQU0NCj4g VG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFN0ZWZhbiBCZXJnZXINCj4g PHN0ZWZhbmJAbGludXgudm5ldC5pYm0uY29tPjsgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxq YXZpZXJtQHJlZGhhdC5jb20+Ow0KPiBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+OyBN YXJjLUFuZHLDqSBMdXJlYXUNCj4gPG1hcmNhbmRyZS5sdXJlYXVAcmVkaGF0LmNvbT47IFZhbGx1 cmksIEFtYXJuYXRoDQo+IDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4NCj4gQ2M6IGVkazIt ZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgcWVtdSBkZXZlbCBsaXN0DQo+IDxx ZW11LWRldmVsQG5vbmdudS5vcmc+DQo+IFN1YmplY3Q6IGludmVzdGlnYXRpbmcgVFBNIGZvciBP Vk1GLW9uLVFFTVUNCj4gDQo+IEhpLA0KPiANCj4gSSBzcGVudCBtb3N0IG9mIHRvZGF5IHJlYWRp bmcgVFBNIHJlbGF0ZWQgbWF0ZXJpYWwgKHNwZWNzLCBndWlkZXMgYW5kDQo+IHNvdXJjZSBjb2Rl KSwgYW5kIGJlbG93IEknZCBsaWtlIHRvIGRlc2NyaWJlIHdoYXQgSSB0aGluayBzaG91bGQgYmUg b3VyDQo+IGluaXRpYWwgYXR0YWNrIG9uIGVuYWJsaW5nIFRQTSBvbiBRRU1VL09WTUYuDQo+IA0K PiAoMSkgVmVyc2lvbnMgb2YgVUVGSSBhYnN0cmFjdGlvbnMgcmVnYXJkaW5nIFRQTSAodmVyeSBy b3VnaGx5IHNwZWFraW5nKToNCj4gDQo+ICAgICBUaGVyZSBoYXZlIGJlZW4gdGhyZWUgc2V0cyBv ZiBzcGVjcyBmb3IgdGhpcywgYW5kIGFjY29yZGluZ2x5LA0KPiAgICAgZWRrMidzIFNlY3VyaXR5 UGtnL1RjZy8gZGlyZWN0b3J5IHN1cHBvcnRzIGVhY2ggc2V0LiBXZSBjYW4gY2FsbA0KPiAgICAg dGhlc2UgVFBNMSwgVHJFRSwgYW5kIFRQTTIuDQo+IA0KPiAgICAgLSBUUE0xIHdhcyB0aGUgaW5p dGlhbCBUUE0gdGhpbmcsIHN1cHBvcnRpbmcgb25seSBTSEEtMSwgYW5kIGlzIG5vdw0KPiAgICAg ICBvYnNvbGV0ZS4NCj4gDQo+ICAgICAtIFRyRUUgd2FzIE1pY3Jvc29mdCdzIG93biB1cGRhdGUg dG8gdGhlIFRQTTEgc29mdHdhcmUgaW50ZXJmYWNlcywNCj4gICAgICAgc3VwcG9ydGluZyBUUE0y IGhhcmR3YXJlIHdpdGggbW9yZSBoYXNoIGFsZ29yaXRobXMsIGFuZCBpcyBub3cNCj4gICAgICAg b2Jzb2xldGUuIEJlY2F1c2UsDQo+IA0KPiAgICAgLSBUUE0yIGlzIGJhc2ljYWxseSB0aGUgc3Rh bmRhcmRpemVkIHZlcnNpb24gb2YgVHJFRSwgdGhlIG1vc3QNCj4gICAgICAgcmVjZW50IHNldCBv ZiBzcGVjcywgYW5kIHdoYXQgd2Ugc2hvdWxkIGZvY3VzIG9uLg0KPiANCj4gKDIpIERyaXZlcnMg KGFuZCBmZWF0dXJlcykgaW4gZWRrMi9TZWN1cml0eVBrZy9UY2cuDQo+IA0KPiAgICAgVGhlcmUg YXJlIDE5IG1vZHVsZXMgdW5kZXIgU2VjdXJpdHlQa2cvVGNnLy4gTGV0IG1lIGNhdGVnb3JpemUg dGhlbS4NCj4gICAgIEluIGVhY2ggY2F0ZWdvcnksIEknbGwgdHJ5IHRvIGxpc3QgbW9kdWxlcyBp biBsb29zZWx5IGluY3JlYXNpbmcNCj4gICAgIGRlcGVuZGVuY3kgKG9yIFBJL1VFRkkgcGhhc2Up IG9yZGVyLg0KPiANCj4gKDJhKSBNb2R1bGVzIHRoYXQgYXJlIG9ic29sZXRlIGJlY2F1c2UgdGhl eSBhcmUgdGllZCB0byBUUE0xOg0KPiANCj4gICAgICAgIFRjZ1BlaS9UY2dQZWkuaW5mDQo+ICAg ICAgICBQaHlzaWNhbFByZXNlbmNlUGVpL1BoeXNpY2FsUHJlc2VuY2VQZWkuaW5mDQo+ICAgICAg ICBUY2dEeGUvVGNnRHhlLmluZg0KPiAgICAgICAgVGNnQ29uZmlnRHhlL1RjZ0NvbmZpZ0R4ZS5p bmYNCj4gICAgICAgIFRjZ1NtbS9UY2dTbW0uaW5mDQo+IA0KPiAgICAgIFRoZSBUUE0gZW5hYmxl bWVudCBpbnN0cnVjdGlvbnMgYXQNCj4gDQo+IA0KPiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9j b3JlL3RpYW5vY29yZS5naXRodWIuaW8vd2lraS9Ib3ctdG8tRW5hYmxlLVNlY3VyaXR5Iw0KPiBF bmFibGluZ19UcnVzdGVkX0NvbXB1dGVfTW9kdWxlX1RQTQ0KPiANCj4gICAgICBhcmUgd3JpdHRl biB1cCBpbiB0ZXJtcyBvZiB0aGVzZSBtb2R1bGVzLCBidXQgdGhhdCBkb2Vzbid0IG9ic29sZXRl DQo+ICAgICAgdGhlIGFydGljbGUgdG9vIG11Y2guDQo+IA0KPiAoMmIpIE1vZHVsZXMgdGhhdCBh cmUgb2Jzb2xldGUgZHVlIHRvIGJlaW5nIHRpZWQgdG8gVHJFRToNCj4gDQo+ICAgICAgICBUckVF Q29uZmlnL1RyRUVDb25maWdQZWkuaW5mDQo+ICAgICAgICBUckVFUGVpL1RyRUVQZWkuaW5mDQo+ ICAgICAgICBUckVFRHhlL1RyRUVEeGUuaW5mDQo+ICAgICAgICBUckVFQ29uZmlnL1RyRUVDb25m aWdEeGUuaW5mDQo+ICAgICAgICBUckVFU21tL1RyRUVTbW0uaW5mDQo+IA0KPiAgICAgIFRoZXJl IGlzIGEgZ3JlYXQgSW50ZWwgd2hpdGVwYXBlciBjYWxsZWQNCj4gDQo+ICAgICAgICBBIFRvdXIg QmV5b25kIEJJT1Mgd2l0aCB0aGUgVUVGSSBUUE0yIFN1cHBvcnQgaW4gRURLSUkNCj4gDQo+ICAg ICAgd2hpY2ggaXMgd3JpdHRlbiBpbiB0ZXJtcyBvZiBUckVFIGFuZCB0aGVzZSBtb2R1bGVzLCBl eHBsYWluaW5nIGhvdw0KPiAgICAgIHRoZXkgc3VwZXJzZWRlIFRQTTEgYW5kIHRoZSBtb2R1bGVz IHVuZGVyICgyYSkuDQo+IA0KPiAgICAgIFRoaXMgd2hpdGVwYXBlciBzZWVtcyB0byBhcHBseSB0 byB0aGUgbW9zdCByZWNlbnQgVFBNMiBzdGFjayBhcw0KPiAgICAgIHdlbGwgKG1vc3RseSBqdXN0 IHJlcGxhY2UgVHJFRSByZWZlcmVuY2VzIHdpdGggVFBNMiByZWZlcmVuY2VzKSwgc28NCj4gICAg ICBpdCBpcyB2ZXJ5IHVzZWZ1bC4NCj4gDQo+ICgyYykgTW9kdWxlcyB0aGF0IGNhbGwgdGhlbXNl bHZlcyBvYnNvbGV0ZSBvciBkZXByZWNhdGVkICh3aXRob3V0IGJlaW5nDQo+ICAgICAgb2J2aW91 c2x5IHRpZWQgdG8gVFBNMSBvciBUckVFKToNCj4gDQo+ICAgICAgICBNZW1vcnlPdmVyd3JpdGVS ZXF1ZXN0Q29udHJvbExvY2svVGNnTW9yTG9ja1NtbS5pbmYNCj4gDQo+ICgyZCkgTW9kdWxlcyB0 aGF0IHdlIHdvbid0IG5lZWQgZHVlIHRvIG5vIGhhcmR3YXJlIHN1cHBvcnQgaW4gUUVNVToNCj4g DQo+ICAgICAgICBPcGFsL09wYWxQYXNzd29yZER4ZS9PcGFsUGFzc3dvcmREeGUuaW5mDQo+ICAg ICAgICBPcGFsL09wYWxQYXNzd29yZFNtbS9PcGFsUGFzc3dvcmRTbW0uaW5mDQo+IA0KPiAgICAg IFRDRydzICJPcGFsIiBzZWVtcyB0byBiZSBhYm91dCBzZWxmLWVuY3J5cHRpbmcgZHJpdmVzLCBz ZWUNCj4gDQo+ICAgICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGFsX1N0b3Jh Z2VfU3BlY2lmaWNhdGlvbg0KPiANCj4gICAgICBzbyB0aGVzZSBtb2R1bGVzIGFyZSBub3QgcmVs ZXZhbnQgZm9yIHVzLg0KPiANCj4gKDJlKSBNb2R1bGVzIHRoYXQgd2Ugc2hvdWxkIHVzZS4gQWdh aW4sIGluIGluY3JlYXNpbmcgb3JkZXIgb2YNCj4gICAgICBkZXBlbmRlbmNlLiBBbmQgaGVyZSBJ J2xsIGNvbW1lbnQgYXMgd2VsbCBvbiB3aGF0IHRoZXNlIGRvOg0KPiANCj4gICAgICAgIFRjZzJD b25maWcvVGNnMkNvbmZpZ1BlaS5pbmYgLS0gSW5mb3JtcyB0aGUgZmlybXdhcmUgZ2xvYmFsbHkN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQgdGhlIFRQTSBk ZXZpY2UgdHlwZS4gVGhpcw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb2R1bGUgY2FuIHBlcmZvcm0gZGV2aWNlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldGVjdGlvbiBvciByZWFkIGEgY2FjaGVkIHZhbHVlDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSBub24tdm9sYXRpbGUgVUVGSQ0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4NCj4gDQo+ ICAgICAgICBUY2cyUGVpL1RjZzJQZWkuaW5mICAgICAgICAgIC0tIEluaXRpYWxpemVzIHRoZSBU UE0gZGV2aWNlIGFuZA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZWFzdXJlcyB0aGUgZmlybXdhcmUgdm9sdW1lcyBpbg0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgUEVJIHBoYXNlIGludG8gdGhlIFRQTSdzDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtIGNvbmZpZyByZWdpc3RlcnMu DQo+IA0KPiAgICAgICAgVGNnMkR4ZS9UY2cyRHhlLmluZiAgICAgICAgICAtLSBNZWFzdXJlcyBE WEUgcGhhc2UgKGFuZCBsYXRlcikNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9kdWxlcyBpbnRvIHRoZSBUUE0ncyBQQ1JzLCBhbmQNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBsZXRzIHRoZSBPUyBib290IGxvYWRlcg0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlIHRoaW5ncywgYnkg ZXhwb3NpbmcgdGhlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9UQ0cyX1BST1RPQ09MLg0KPiANCj4gICAgICAgIFRjZzJDb25maWcvVGNnMkNvbmZpZ0R4ZS5p bmYgLS0gUHJvdmlkZXMgYSBTZXR1cCBUVUkgaW50ZXJmYWNlIHRvDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0aGUgVFBNLiBJSVVDLCBpdCBjYW4N Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBzYXZlIHRoZSBj b25maWd1cmVkIFRQTSB0eXBlDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBzdWJzZXF1ZW50IGJvb3RzIChzZWUNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVGNnMkNvbmZpZ1BlaS5pbmYgYWJvdmUpLg0KPiANCj4gICAgICBUaGlz IGRyaXZlciBzdGFjayBzdXBwb3J0cyB0aGUgVElTIChNTUlPKSBoYXJkd2FyZSBpbnRlcmZhY2Us IHdoaWNoDQo+ICAgICAgaXMgYWR2ZXJ0aXplZCB0byB0aGUgT1MgaW4gdGhlIFRQTTIgQUNQSSBU YWJsZSdzICJzdGFydCBtZXRob2QiDQo+ICAgICAgZmllbGQgd2l0aCB2YWx1ZSA2LiAoVGhlIGFj Y29yZGluZyBtYWNybyBpcyBUUE0yX1NUQVJUX01FVEhPRF9NTUlPDQo+ICAgICAgaW4gdGhlIFFF TVUgc291cmNlIGNvZGUsIGFuZA0KPiBFRklfVFBNMl9BQ1BJX1RBQkxFX1NUQVJUX01FVEhPRF9U SVMNCj4gICAgICBpbiB0aGUgZWRrMiBzb3VyY2UgY29kZS4pDQo+IA0KPiAgICAgIEluY2x1ZGlu ZyB0aGVzZSBkcml2ZXJzIHNob3VsZCByZXN1bHQgaW4gYSBmdW5jdGlvbmFsDQo+ICAgICAgRUZJ X1RDRzJfUFJPVE9DT0wsIHdoaWNoIGlzIHdoYXQgT1MgYm9vdCBsb2FkZXJzIHByaW1hcmlseSBj YXJlDQo+ICAgICAgYWJvdXQsIGFzIEkgdW5kZXJzdGFuZC4NCj4gDQo+ICAgICAgSW1wb3J0YW50 bHksIHRoZSBkcml2ZXIgc3RhY2sgYWJvdmUgcmVxdWlyZXMgUEVJLXBoYXNlIHZhcmlhYmxlDQo+ ICAgICAgYWNjZXNzLCB0aGVyZWZvcmUNCj4gICAgICA8aHR0cHM6Ly9idWd6aWxsYS50aWFub2Nv cmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zODY+IG11c3QgYmUgc29sdmVkDQo+ICAgICAgZmlyc3Qu DQo+IA0KPiAgICAgIChJIGhhdmUgaGFkIHBhdGNoZXMgZm9yIHNhaWQgQlogcmVhZHkgZm9yIGEg d2hpbGUuIEkndmUgZmFpbGVkIHRvDQo+ICAgICAgdXBzdHJlYW0gdGhlbSB0aHVzIGZhciBiZWNh dXNlIGEgcGZsYXNoLWJhc2VkIHZhcnN0b3JlIGlzIGEgaGFyZA0KPiAgICAgIHJlcXVpcmVtZW50 IGZvciB0aGVtLiBJIHRoaW5rIHRoYXQncyBhIG5hdHVyYWwgcmVxdWlyZW1lbnQsIGJ1dA0KPiAg ICAgIHRodXMgZmFyIG15IGFyZ3VtZW50cyBoYXZlbid0IHByb3ZlZCBjb21wZWxsaW5nIGVub3Vn aC4pDQo+IA0KPiAgICAgIEhlcmUgSSBzaG91bGQgbWVudGlvbiBzb21lIEFDUEkgYW5kIGhhcmR3 YXJlIGFzcGVjdHMuIFVuZGVyIFRQTTENCj4gICAgICAod2hvc2UgQUNQSSB0YWJsZSB3YXMgY2Fs bGVkICJUQ1BBIiksIHRoZSBUUE0gZXZlbnRzIChtZWFzdXJlbWVudHMNCj4gICAgICBJIHRoaW5r KSB3ZXJlIGxvZ2dlZCBpbiBhIHJlc2VydmVkIG1lbW9yeSBhcmVhIGRlc2NyaWJlZCBieSB0aGUN Cj4gICAgICBUQ1BBIHRhYmxlLiBVbmRlciBUUE0yLCB0aGUgIlRQTTIiIEFDUEkgdGFibGUgZG9l cyBubyBzdWNoIHRoaW5nLA0KPiAgICAgIGl0IG9ubHkgaGVscHMgaWRlbnRpZnkgdGhlIGNvbW11 bmljYXRpb24gY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQ0KPiAgICAgIGRldmljZSwgYW5kIHRoZSBl dmVudCBsb2cgaXRzZWxmIGlzIGFjY2Vzc2libGUgdG8gdGhlIE9TIGJvb3QNCj4gICAgICBsb2Fk ZXIgdmlhIHRoZSBFRklfVENHMl9QUk9UT0NPTC4NCj4gDQo+ICAgICAgKElmIHlvdSBhcmUgY3Vy aW91cyBob3cgYSBsZWdhY3kgQklPUyBib290IGxvYWRlciBpcyBzdXBwb3NlZCB0bw0KPiAgICAg IHJlYWQgdGhlIGV2ZW50IGxvZyBmcm9tIGEgVFBNMi1vbmx5IGRldmljZSAobm8gIlRDUEEiIHRh YmxlKTogSQ0KPiAgICAgIGRvbid0IGhhdmUgdGhlIHNsaWdodGVzdCBjbHVlLikNCj4gDQo+ICAg ICAgSSdtIG5vdCBzdXJlIGFib3V0IHRoZSBleGFjdCBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHZp cnR1YWwgVFBNDQo+ICAgICAgdGhhdCBTdGVmYW4ncyBzd3RwbSBwcm9qZWN0Og0KPiANCj4gICAg ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVmYW5iZXJnZXIvc3d0cG0NCj4gDQo+ICAgICAgY29t YmluZWQgd2l0aCBBbWFybmF0aCdzIHBlbmRpbmcgUUVNVSBwYXRjaGVzOg0KPiANCj4gDQo+IGh0 dHA6Ly9taWQubWFpbC1hcmNoaXZlLmNvbS8xNDk2NjY2NzExLTE0NjMwLTEtZ2l0LXNlbmQtZW1h aWwtYW1hcm5hdGgudmFsbHVyDQo+IGlAaW50ZWwuY29tDQo+IA0KPiAgICAgIHdpbGwgZXhwb3Nl IHRvIHRoZSBndWVzdC4gV2hhdCBJIGRvIGtub3cgaXMgdGhhdCB0aGUgY3VycmVudCBRRU1VDQo+ ICAgICAgc29sdXRpb24sIHdoaWNoIG1vc3RseSBmb3J3YXJkcyBhIHBoeXNpY2FsIChob3N0KSBU UE0gdG8gdGhlIGd1ZXN0LA0KPiAgICAgIHByb2R1Y2VzIGEgIlRQTTIiIEFDUEkgdGFibGUgaWYg c2FpZCBob3N0IFRQTSBkZXZpY2UgaXMgVFBNMi4gVGhlDQo+ICAgICAgIlRQTTIiIHRhYmxlIGlz IGV4cG9zZWQgdG8gdGhlIGd1ZXN0IE9TIHdpdGggT1ZNRidzIGhlbHAsIGFuZCBoYXMNCj4gICAg ICB0aGUgZm9sbG93aW5nIGZpZWxkczoNCj4gDQo+ICAgICAgLSBhZGRyZXNzIG9mIGNvbnRyb2wg YXJlYTogemVybw0KPiAgICAgIC0gc3RhcnQgbWV0aG9kOiA2IChUSVMgcGx1cyBDYW5jZWwpDQo+ ICAgICAgLSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbXM6IG5vbmUuDQo+IA0KPiAgICAgIFRoaXMg aW1wbGllcyB0aGF0IG5laXRoZXIgQUNQSSBhY3RpdmF0aW9uIChtZXRob2QgMikgbm9yIENvbW1h bmQNCj4gICAgICBSZXNwb25zZSBCdWZmZXIgYWN0aXZhdGlvbiAobWV0aG9kIDcpIG5vciBhIGNv bWJpbmF0aW9uIG9mIHRoZXNlDQo+ICAgICAgdHdvIChtZXRob2QgOCkgaXMgYXZhaWxhYmxlIGlu IFFFTVUuDQo+IA0KPiAgICAgIEFuZCB0aGF0IHNob3VsZCBiZSBqdXN0IGZpbmUsIGJlY2F1c2Ug Ym90aCBMaW51eCBhbmQgdGhlIGFib3ZlDQo+ICAgICAgVGNnMiogbW9kdWxlcyBhcHBlYXIgdG8g c3VwcG9ydCB0aGlzIChmcm9tIHJlYWRpbmcsIG5vdCBmcm9tDQo+ICAgICAgdGVzdGluZykuDQo+ IA0KPiAoMmYpIE1vZHVsZXMgdGhhdCB3ZSAqY291bGQqIHVzZSwgYnV0ICpzaG91bGQgbm90Kiwg YXQgdGhpcyBwb2ludDoNCj4gDQo+ICAgICAgICBNZW1vcnlPdmVyd3JpdGVDb250cm9sL1RjZ01v ci5pbmYNCj4gDQo+ICAgICAgTU9SIGlzICJNZW1vcnkgT3ZlcndyaXRlIFJlcXVlc3QiLiBJdCBp cyBhIGZlYXR1cmUgc3BlY2lmaWVkDQo+ICAgICAgc2VwYXJhdGVseSwgaW4gYW5vdGhlciBUQ0cg c3BlY2lmaWNhdGlvbiAoIlBsYXRmb3JtIFJlc2V0IEF0dGFjaw0KPiAgICAgIE1pdGlnYXRpb24i KSwgYW5kIGl0IGlzIG9wdGlvbmFsIGZvciBhIGZpcm13YXJlIHBsYXRmb3JtIHRvDQo+ICAgICAg c3VwcG9ydC4gKEZvciBleGFtcGxlLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBMaW51eCBkb2Vzbid0 IGV2ZW4gdHJ5DQo+ICAgICAgdG8gZGV0ZWN0IG9yIHVzZSBpdC4pIElmIHlvdSBjYXJlIGFib3V0 IHRoZSB0aHJlYXQgbW9kZWwgYW5kIGhvdw0KPiAgICAgIE1PUiBtaXRpZ2F0ZXMgdGhhdCB0aHJl YXQsIHBsZWFzZSByZWFkIHRoZSBzcGVjIG9uIHRoZSBUQ0cgd2Vic2l0ZS4NCj4gDQo+ICAgICAg Rm9yIGluaXRpYWwgVFBNIGVuYWJsZW1lbnQgaW4gT1ZNRiwgd2Ugc2hvdWxkIGF2b2lkIE1PUiBz dXBwb3J0Lg0KPiAgICAgIFRoZSBtb2R1bGUgYWJvdmUgaW5pdGlhbGl6ZXMgdGhlICJNZW1vcnlP dmVyd3JpdGVSZXF1ZXN0Q29udHJvbCINCj4gICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgb25lIHRo aXJkIG9mIHRoZSBNT1IgaW1wbGVtZW50YXRpb24uDQo+IA0KPiAgICAgICAgVGNnMlNtbS9UY2cy U21tLmluZg0KPiANCj4gICAgICBUaGlzIGlzIGEgY29tcGxleCBkcml2ZXIgdGhhdCB3ZSAqc2hv dWxkIG5vdCogdXNlIGF0IHRoaXMgcG9pbnQ6DQo+IA0KPiAgICAgICgyZjEpIEl0IGluc3RhbGxz IHR3byBBQ1BJIHRhYmxlcy4gT25lIG9mIHRob3NlIGlzIGEgIlRQTTIiIEFDUEkNCj4gICAgICAg ICAgICB0YWJsZSwgYWNjb3JkaW5nIHRvIHRoZSBkZXRlY3RlZCAvIGNvbmZpZ3VyZWQgVFBNIGRl dmljZSAoc2VlDQo+ICAgICAgICAgICAgdW5kZXIgKDJlKS4gVGhpcyAiVFBNMiIgdGFibGUgd291 bGQgY29uZmxpY3Qgd2l0aCAtLSBvciBtb3JlDQo+ICAgICAgICAgICAgcHJlY2lzZWx5LCBkdXBs aWNhdGUgLS0gdGhlICJUUE0yIiB0YWJsZSBhbHJlYWR5IGdlbmVyYXRlZCBieQ0KPiAgICAgICAg ICAgIFFFTVUsIGFuZCBpbnN0YWxsZWQgYnkgT1ZNRi4NCj4gDQo+ICAgICAgKDJmMikgVGhlIG90 aGVyIEFDUEkgdGFibGUgaXMgYW4gU1NEVCB3aGljaCBwcm92aWRlcyBhIF9EU00gKERldmljZQ0K PiAgICAgICAgICAgIFNwZWNpZmljIE1ldGhvZCkgdG8gdGhlIGd1ZXN0IE9TLiBXaGVuZXZlciB0 aGUgX0RTTSBpcw0KPiAgICAgICAgICAgIGNhbGxlZCwgdGhlIGZpcm13YXJlIGlzIGVudGVyZWQg KHZpYSBTTUkvU01NKSwgYW5kIHRoZSBPUw0KPiAgICAgICAgICAgIHJlcXVlc3QgaXMgaGFuZGxl ZC4gVGhyZWUgc2V0cyBvZiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkOg0KPiANCj4gICAgICAgICAg ICAoMmYyYSkgVENHIEhhcmR3YXJlIEluZm9ybWF0aW9uLiBOb3QgbmVlZGVkIGJ5IHRoZSBndWVz dA0KPiAgICAgICAgICAgICAgICAgICBPUyhlcyksIHRoZSBUSVMrQ2FuY2VsIHN0YXJ0IG1ldGhv ZCBpcyBzdWZmaWNpZW50Lg0KPiANCj4gICAgICAgICAgICAoMmYyYikgVENHIE1lbW9yeSBDbGVh ciBJbnRlcmZhY2UuIFRoaXMgaXMgdGhlIHNlY29uZCB0aGlyZA0KPiAgICAgICAgICAgICAgICAg ICBvZiB0aGUgTU9SIGZlYXR1cmUgSSBtZW50aW9uZWQgYWJvdmUuIEl0IHNhdmVzIHRoZSBPUw0K PiAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGluIHRoZSAiTWVtb3J5T3ZlcndyaXRlUmVxdWVz dENvbnRyb2wiDQo+ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIChvbmx5IHdyaXRlYWJsZSBp biBTTU0pLg0KPiANCj4gICAgICAgICAgICAgICAgICAgVXBvbiBuZXh0IGJvb3QsIE9WTUYncyBQ bGF0Zm9ybVBlaSB3b3VsZCBoYXZlIHRvIGNsZWFyDQo+ICAgICAgICAgICAgICAgICAgIGFsbCBt ZW1vcnkgLS0gdGhpcyB3b3VsZCBiZSB0aGUgbGFzdCB0aGlyZCBvZiB0aGUgTU9SDQo+ICAgICAg ICAgICAgICAgICAgIGZlYXR1cmU7IHNlZSB1bmRlcjoNCj4gDQo+IA0KPiBodHRwczovL2dpdGh1 Yi5jb20vdGlhbm9jb3JlL3RpYW5vY29yZS5naXRodWIuaW8vd2lraS9Ib3ctdG8tRW5hYmxlLVNl Y3VyaXR5Iw0KPiBFbmFibGluZ19UcnVzdGVkX0NvbXB1dGVfTW9kdWxlX1RQTQ0KPiANCj4gICAg ICAgICAgICAgICAgICAgSG93ZXZlciwgY2xlYXJpbmcgYWxsIG1lbW9yeSBpbiBPVk1GJ3MgUGxh dGZvcm1QZWkNCj4gICAgICAgICAgICAgICAgICAgd291bGQgYmUgYSAqcmVhbCogcGFpbiwgYXMg d2UgYXJlIGxpbWl0ZWQgdG8gdGhlDQo+ICAgICAgICAgICAgICAgICAgIDMyLWJpdCBhZGRyZXNz IHNwYWNlIHRoZXJlICh5ZXMsIGV2ZW4gaWYgT1ZNRidzIFBFSQ0KPiAgICAgICAgICAgICAgICAg ICBwaGFzZSBpcyBidWlsdCBpbiA2NC1iaXQgbW9kZSkuIEluIHBoeXNpY2FsIGZpcm13YXJlLA0K PiAgICAgICAgICAgICAgICAgICB3aGVyZSBEUkFNIHRha2VzIGFjdHVhbCBoYXJkd2FyZSBpbml0 aWFsaXphdGlvbiwgdGhlDQo+ICAgICAgICAgICAgICAgICAgIGNsZWFyaW5nIGNhbiBsaWtlbHkg b2NjdXIgd2l0aG91dCBlbnRlcmluZyBsb25nIG1vZGUNCj4gICAgICAgICAgICAgICAgICAgYW5k IHNldHRpbmcgdXAgbGFyZ2UgcGFnZSB0YWJsZXMgKGUuZy4sIHRoZSBtZW1vcnkNCj4gICAgICAg ICAgICAgICAgICAgY29udHJvbGxlciBpdHNlbGYgY291bGQgYmUgcHJvZ3JhbW1lZCB3aXRoIElP DQo+ICAgICAgICAgICAgICAgICAgIGFjY2Vzc2VzKSwgc28gaW4gdGhpcyBjYXNlIHBoeXNpY2Fs IGZpcm13YXJlIGhhcyBpdA0KPiAgICAgICAgICAgICAgICAgICBlYXNpZXIuDQo+IA0KPiAgICAg ICAgICAgICAgICAgICBBZ2FpbiwgTGludXggZG9lc24ndCBjYXJlIGFib3V0IE1PUi4NCj4gDQo+ ICAgICAgICAgICAgKDJmMmMpIFRDRyBQaHlzaWNhbCBQcmVzZW5jZSBJbnRlcmZhY2UuIFRoZSBP UyBjYW4gcXVldWUgVFBNDQo+ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgKD8pIHRoYXQg cmVxdWlyZSBQaHlzaWNhbCBQcmVzZW5jZSwgYW5kIGF0DQo+ICAgICAgICAgICAgICAgICAgIG5l eHQgYm9vdCwgT1ZNRidzIFBsYXRmb3JtQm9vdE1hbmFnZXJMaWIgKGluIHRoZSBCRFMNCj4gICAg ICAgICAgICAgICAgICAgcGhhc2UpIHdvdWxkIGhhdmUgdG8gZGlzcGF0Y2ggdGhvc2UgcGVuZGlu Zw0KPiAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLiAoVGhlIHF1ZXVlaW5nIGFnYWluIGhh cHBlbnMgaW4gcHJvdGVjdGVkDQo+ICAgICAgICAgICAgICAgICAgIG5vbi12b2xhdGlsZSBVRUZJ IHZhcmlhYmxlcyAtLSB3cml0ZWFibGUgb25seSBpbiBTTU0uKQ0KPiANCj4gICAgICAgICAgICAg ICAgICAgVGhpcyBpcyBvZiBkdWJpb3VzIHVzZWZ1bG5lc3MsIGFuZCBwcmVzZW50cyBleHRyYQ0K PiAgICAgICAgICAgICAgICAgICBjb21wbGljYXRpb24gZm9yIE9WTUYuIFNhaWQgZGlzcGF0Y2hp bmcgaXMgc3VwcG9zZWQgdG8NCj4gICAgICAgICAgICAgICAgICAgb2NjdXIgKmJlZm9yZSogc2ln bmFsaW5nIHRoZSBlbmQtb2YtRFhFIGV2ZW50IGdyb3VwDQo+ICAgICAgICAgICAgICAgICAgIChh Y2NvcmRpbmcgdG8gdGhlIEludGVsIHdoaXRlcGFwZXIgbWVudGlvbmVkIGFib3ZlKSwNCj4gICAg ICAgICAgICAgICAgICAgYnV0ICphZnRlciogdGhlIGNvbnNvbGUgaXMgcmVhZHkgKGFjY29yZGlu ZyB0byB0aGUNCj4gICAgICAgICAgICAgICAgICAgd2lraSBhcnRpY2xlIGxpbmtlZCBhYm92ZSku IEhvd2V2ZXIsIE9WTUYgKmFscmVhZHkqDQo+ICAgICAgICAgICAgICAgICAgIHNpZ25hbHMgdGhl IGVuZC1vZi1EWEUgZXZlbnQgZ3JvdXAgaW4NCj4gICAgICAgICAgICAgICAgICAgUGxhdGZvcm1C b290TWFuYWdlckJlZm9yZUNvbnNvbGUoKSwgdGhhdCBpcywgKmJlZm9yZSoNCj4gICAgICAgICAg ICAgICAgICAgdGhlIGNvbnNvbGUgaXMgcmVhZHkuIE1hbnkgdGhpbmdzIGFyZSBvcmNoZXN0cmF0 ZWQNCj4gICAgICAgICAgICAgICAgICAgYXJvdW5kIGVuZC1vZi1EWEUsIHNvIG1vdmluZyBhcm91 bmQgaXRzIHNpZ25hbGluZw0KPiAgICAgICAgICAgICAgICAgICBsb29rcyBkaWZmaWN1bHQuDQo+ IA0KPiAgICAgICAgICAgICAgICAgICBBbHNvLCB3aGlsZSBMaW51eCBhcHBlYXJzIHRvIGJlIGNh cGFibGUgb2YgdXNpbmcNCj4gICAgICAgICAgICAgICAgICAgUGh5c2ljYWwgUHJlc2VuY2UsIGl0 IGlzIGFnYWluIG9wdGlvbmFsLCBhbmQgSSBzdWdnZXN0DQo+ICAgICAgICAgICAgICAgICAgIHRv IGlnbm9yZSBpdCBhdCBmaXJzdC4NCj4gDQo+ICAgICAgSW4gYnJpZWYsIGJ5IG5vdCBpbmNsdWRp bmcgdGhlc2UgdHdvIG1vZHVsZXMsIHdlIGF2b2lkIGEgIlRQTTIiDQo+ICAgICAgQUNQSSB0YWJs ZSBkdXBsaWNhdGlvbi4gV2UgYWxzbyB0dXJuIG9mZiB0aGUgTWVtb3J5IE92ZXJ3cml0ZQ0KPiAg ICAgIFJlcXVlc3QgYW5kIFBoeXNpY2FsIFByZXNlbmNlIEludGVyZmFjZSBmZWF0dXJlcyAtLSB3 aGljaCBhcmUgYm90aA0KPiAgICAgIG9wdGlvbmFsLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBhbmQg dmVyeSBtZXNzeSBmb3IgT1ZNRidzIHBsYXRmb3JtDQo+ICAgICAgY29kZS4NCj4gDQo+ICgzKSBE cml2ZXJzIChhbmQgZmVhdHVyZXMpIHRoYXQgYXJlICpub3QgaW4gZWRrMi9TZWN1cml0eVBrZy9U Y2c6DQo+IA0KPiAgICAgVGhlIEludGVsIHdoaXRlcGFwZXIgZGlzY3Vzc2VzIChhbmQgUGV0ZXIg YWxzbyBtZW50aW9uZWQgZWFybGllcikNCj4gICAgICJkVFBNIiB2ZXJzdXMgImZUUE0iLg0KPiAN Cj4gICAgICJkVFBNIiBpcyBiYXNpY2FsbHkgVFBNIHByb3ZpZGVkIGluIHB1YmxpY2x5IHNwZWNp ZmllZCBoYXJkd2FyZSwNCj4gICAgIHdoZXJlIHRoZSBmaXJtd2FyZSBjYW4gb2ZmZXIgc3VwcG9y dCwgc3VjaCBhcyBFRklfVENHMl9QUk9UT0NPTCwgYnV0DQo+ICAgICB0aGUgT1MgY2FuIGFsc28g ZGlyZWN0bHkgZHJpdmUgdGhlIGhhcmR3YXJlLiBUaGlzIGlzIHdoYXQgUUVNVQ0KPiAgICAgb2Zm ZXJzIHdpdGggdGhlIFRJUytDYW5jZWwgc3RhcnQgbWV0aG9kICh2YWx1ZSA2KS4gKFRoZSAiQ29t bWFuZA0KPiAgICAgUmVzcG9uc2UgQnVmZmVyIiBzdGFydCBtZXRob2QgKHZhbHVlIDcpIHdvdWxk IGFsc28gcXVhbGlmeSBhcw0KPiAgICAgImRUUE0iKS4gV2hlbiB0aGUgcGxhdGZvcm0gcHJvdmlk ZXMgImRUUE0iLCB0aGUgX0RTTSBtZXRob2QNCj4gICAgIGRlc2NyaWJlZCBhYm92ZSAqbWF5KiBi ZSBvZmZlcmVkLCBidXQgaXQgaXMgbm90IHJlcXVpcmVkLg0KPiANCj4gICAgICJmVFBNIiBpcyB3 aGVyZSB0aGUgaGFyZHdhcmUgaXMgY29tcGxldGVseSBoaWRkZW4gZnJvbSB0aGUgT1MsIGFuZA0K PiAgICAgaXMgaW1wbGVtZW50ZWQgZnVsbHkgaW4gZmlybXdhcmUuIFRoZSBjb3JyZXNwb25kaW5n IHN0YXJ0IG1ldGhvZA0KPiAgICAgdmFsdWVzIGFyZSAyICgiQUNQSSIpIGFuZCA4ICgiQUNQSSB3 aXRoIENSQiIpLiBJbiB0aGlzIGNhc2UsIHRoZQ0KPiAgICAgX0RTTSBtZXRob2QgaXMgKnJlcXVp cmVkKi4NCj4gDQo+ICAgICBUbyBteSB1bmRlcnN0YW5kaW5nLCBlZGsyIGNvbnRhaW5zIG5vICJm VFBNIiBpbXBsZW1lbnRhdGlvbi4gVGhlDQo+ICAgICBpbi10cmVlIGRyaXZlcnMgcmVjb2duaXpl IGhhcmR3YXJlIHRoYXQgZGVzY3JpYmVzIGl0c2VsZiBhcw0KPiAgICAgVElTK0NhbmNlbCAoNikg b3IgQ1JCICg3KS4gUHVyZSBBQ1BJIHZhcmlhbnRzIGFyZSBuZWl0aGVyIHJlY29nbml6ZWQNCj4g ICAgIG5vciBvZmZlcmVkLg0KPiANCj4gICAgIEkgdGhpbmsgVElTK0NhbmNlbCAvIGRUUE0gaXMg dGhlIGJlc3QgbWF0Y2g6IHRoZSBlbXVsYXRlZCBUUE0gaGFzIHRvDQo+ICAgICBiZSBpbXBsZW1l bnRlZCBpbiB2aXJ0dWFsIGhhcmR3YXJlIChub3QganVzdCBmYWtlZCB3aXRoaW4gdGhlIGd1ZXN0 LA0KPiAgICAgaW4gUkFNKSwgc28gdGhhdCBRRU1VIGNhbiBzZWN1cmUgdGhlIHNlbnNpdGl2ZSBz dHVmZiBmcm9tIGd1ZXN0DQo+ICAgICBrZXJuZWwgbGV2ZWwgYWNjZXNzLg0KPiANCj4gSSdtIGdv aW5nIHRvIGxpbmsgdGhpcyBwb3N0IGZyb20NCj4gPGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3Jl Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk0PjsgcGxlYXNlIGNvbnNpZGVyDQo+IHJlZ2lzdGVyaW5n IGluIHRoZSBUaWFub0NvcmUgQlogYW5kIHN1YnNjcmliaW5nIHRvIHRoYXQgYnVnLiBEaXNjdXNz aW9uDQo+IHNob3VsZCBvY2N1ciBvbiB0aGUgbGlzdChzKSwgYnV0IGl0J3MgbmljZSB0byBjYXB0 dXJlIHNlcGFyYXRlIHRocmVhZHMNCj4gYW5kIGRpc3RpbGxlZCBpZGVhcyBpbiB0aGUgQlouDQo+ IA0KPiBUaGFua3MNCj4gTGFzemxvDQo=