From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [RFC] ARM: New (Xen) VGIC design document Date: Wed, 11 Oct 2017 15:33:03 +0100 Message-ID: <20171011143303.27453-1-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2I4R-0006ya-Kz for xen-devel@lists.xenproject.org; Wed, 11 Oct 2017 14:33:15 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini , Julien Grall Cc: Marc Zyngier , xen-devel@lists.xenproject.org, Christoffer Dall , Eric Auger List-Id: xen-devel@lists.xenproject.org SGksCgooQ0M6aW5nIHNvbWUgS1ZNL0FSTSBmb2xrcyBpbnZvbHZlZCBpbiB0aGUgVkdJQykKCnN0 YXJ0aW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBJVFMgc3VwcG9ydCB3ZSB3ZXJlIHNlZWlu ZyBtb3JlIGFuZAptb3JlIGlzc3VlcyB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9m IG91ciBBUk0gR2VuZXJpYyBJbnRlcnJ1cHQKQ29udHJvbGxlciAoR0lDKSBlbXVsYXRpb24sIHRo ZSBWR0lDLgpBbW9uZyBvdGhlciBhcHByb2FjaGVzIHRvIGZpeCB0aG9zZSBpc3N1ZXMgaXQgd2Fz IHByb3Bvc2VkIHRvIGNvcHkgdGhlClZHSUMgZW11bGF0aW9uIHVzZWQgaW4gS1ZNLiBUaGlzIG9u ZSB3YXMgc3VmZmVyaW5nIGZyb20gdmVyeSBzaW1pbGFyCmlzc3VlcywgYW5kIGEgY2xlYW4gZGVz aWduIGZyb20gc2NyYXRjaCBsZWFkIHRvIGEgdmVyeSByb2J1c3QgYW5kCmNhcGFibGUgcmUtaW1w bGVtZW50YXRpb24uIEludGVyZXN0aW5nbHkgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmYWlybHkK c2VsZi1jb250YWluZWQsIHNvIGl0IHNlZW1zIGZlYXNpYmxlIHRvIGNvcHkgaXQuIEhvcGVmdWxs eSB3ZSBvbmx5IG5lZWQKbWlub3IgYWRqdXN0bWVudHMsIHBvc3NpYmx5IHdlIGNhbiBldmVuIGNv cHkgaXQgdmVyYmF0aW0gd2l0aCBzb21lCmFkZGl0aW9uYWwgZ2x1ZSBsYXllciBjb2RlLgpTdGVm YW5vIGFza2VkIGZvciBnZXR0aW5nIGEgZGVzaWduIG92ZXJ2aWV3LCB0byBhc3Nlc3MgdGhlIGZl YXNpYmlsaXR5Cm9mIGNvcHlpbmcgdGhlIEtWTSBjb2RlIHdpdGhvdXQgcmV2aWV3aW5nIHRvbnMg b2YgY29kZSBpbiB0aGUgZmlyc3QKcGxhY2UuClNvIHRvIGZvbGxvdyBYZW4gcnVsZXMgZm9yIG5l dyBmZWF0dXJlcywgdGhpcyBkZXNpZ24gZG9jdW1lbnQgYmVsb3cgaXMKYW4gYXR0ZW1wdCB0byBk ZXNjcmliZSB0aGUgY3VycmVudCBLVk0gVkdJQyBkZXNpZ24gLSBpbiBhIGh5cGVydmlzb3IKYWdu b3N0aWMgc2Vzc2lvbi4gSXQgaXMgYSBiaXQgb2YgYSByZXRyby1maXQgZGVzaWduIGRlc2NyaXB0 aW9uLCBhcyBpdAppcyBub3Qgc3RyaWN0bHkgZm9yd2FyZC1sb29raW5nIG9ubHksIGJ1dCBhY3R1 YWxseSBkZXNjcmliaW5nIHRoZQpleGlzdGluZyBpbXBsZW1lbmF0aW9uIFsxXS4KClBsZWFzZSBo YXZlIGEgbG9vayBhbmQgbGV0IG1lIGtub3c6CjEpIGlmIHRoaXMgZG9jdW1lbnQgaGFzIHRoZSBy aWdodCBzY29wZQoyKSBpZiB0aGlzIGRvY3VtZW50IGhhcyB0aGUgcmlnaHQgbGV2ZWwgb2YgZGV0 YWlsCjMpIGlmIHRoZXJlIGFyZSBwb2ludHMgbWlzc2luZyBmcm9tIHRoZSBkb2N1bWVudAozKSBp ZiB0aGUgZGVzaWduIGluIGdlbmVyYWwgaXMgYSBmaXQKCkFwcHJlY2lhdGUgYW55IGZlZWRiYWNr IQoKQ2hlZXJzLApBbmRyZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKVkdJQyBkZXNpZ24KPT09PT09PT09PT0KClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBk ZXNpZ24gb2YgYW4gQVJNIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKEdJQykKZW11bGF0 aW9uLiBJdCBpcyBtZWFudCB0byBlbXVsYXRlIGEgR0lDIGZvciBhIGd1ZXN0IGluIGFuIHZpcnR1 YWwgbWFjaGluZSwKdGhlIGNvbW1vbiBuYW1lIGZvciB0aGF0IGlzIFZHSUMgKGZyb20gInZpcnR1 YWwgR0lDIikuCgpUaGlzIGRlc2lnbiB3YXMgdGhlIHJlc3VsdCBvZiBhIG9uZS13ZWVrLWxvbmcg ZGVzaWduIHNlc3Npb24gd2l0aCBzb21lCmVuZ2luZWVycyBpbiBhIHJvb20sIHRyaWdnZXJlZCBi eSBldmVyLWluY3JlYXNpbmcgZGlmZmljdWx0aWVzIGluIG1haW50YWluaW5nCnRoZSBleGlzdGlu ZyBHSUMgZW11bGF0aW9uIGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gVGhlIGRlc2lnbiBldmVudHVh bGx5Cm1hdGVyaWFsaXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBWR0lDIGltcGxlbWVudGF0aW9uIGlu IHRoZSBMaW51eCBrZXJuZWwKKG1lcmdlZCBpbnRvIExpbnV4IHY0LjcpLiBBcyBvZiBMaW51eCB2 NC44IHRoZSBwcmV2aW91cyBWR0lDIGltcGxlbWVudGF0aW9uCndhcyByZW1vdmVkLCBzbyBpdCBp cyBub3cgdGhlIGN1cnJlbnQgY29kZSB1c2VkIGJ5IExpbnV4LgpBbHRob3VnaCBiZWluZyB1c2Vk IGluIEtWTSwgdGhlIGFjdHVhbCBkZXNpZ24gb2YgdGhpcyBWR0lDIGlzIHJhdGhlciBoeXBlcnZp c29yCmFnbm9zdGljIGFuZCBjYW4gYmUgdXNlZCBieSBvdGhlciBoeXBlcnZpc29ycyBhcyB3ZWxs LCBpbiBwYXJ0aWN1bGFyIGZvciBYZW4uCgpHSUMgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gc3Vw cG9ydAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIEFSTSBHZW5lcmlj IEludGVycnVwdCBDb250cm9sbGVyIChzaW5jZSB2Mikgc3VwcG9ydHMgdGhlIHZpcnR1YWxpemF0 aW9uCmV4dGVuc2lvbnMsIHdoaWNoIGFsbG93cyBzb21lIHBhcnRzIG9mIHRoZSBpbnRlcnJ1cHQg bGlmZSBjeWNsZSB0byBiZSBoYW5kbGVkCnB1cmVseSBpbnNpZGUgdGhlIGd1ZXN0IHdpdGhvdXQg ZXhpdGluZyBpbnRvIHRoZSBoeXBlcnZpc29yLgpJbiB0aGUgR0lDdjIgYW5kIEdJQ3YzIGFyY2hp dGVjdHVyZSB0aGlzIGNvdmVycyBtb3N0bHkgdGhlICJpbnRlcnJ1cHQKYWNrbm93bGVkZ2VtZW50 IiwgInByaW9yaXR5IGRyb3AiIGFuZCAiaW50ZXJydXB0IGRlYWN0aXZhdGUiIGFjdGlvbnMuClNv IGEgZ3Vlc3QgY2FuIGhhbmRsZSBtb3N0IG9mIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBjb2Rl IHdpdGhvdXQKbGVhdmluZyBFTDEgYW5kIHRyYXBwaW5nIGludG8gdGhlIGh5cGVydmlzb3IuIFRv IGFjY29tcGxpc2gKdGhpcywgdGhlIEdJQyBob2xkcyBzbyBjYWxsZWQgImxpc3QgcmVnaXN0ZXJz IiAoTFJzKSwgd2hpY2ggc2hhZG93IHRoZQppbnRlcnJ1cHQgc3RhdGUgZm9yIGFueSB2aXJ0dWFs IGludGVycnVwdC4gSW5qZWN0aW5nIGFuIGludGVycnVwdCB0byBhIGd1ZXN0Cmludm9sdmVzIHNl dHRpbmcgdXAgb25lIExSIHdpdGggdGhlIGludGVycnVwdCBudW1iZXIsIGl0cyBwcmlvcml0eSBh bmQgaW5pdGlhbApzdGF0ZSAobW9zdGx5ICJwZW5kaW5nIiksIHRoZW4gZW50ZXJpbmcgdGhlIGd1 ZXN0LiBBbnkgRU9JIHJlbGF0ZWQgYWN0aW9uCmZyb20gd2l0aGluIHRoZSBndWVzdCBqdXN0IGFj dHMgb24gdGhvc2UgTFJzLCB0aGUgaHlwZXJ2aXNvciBjYW4gbGF0ZXIgdXBkYXRlCnRoZSB2aXJ0 dWFsIGludGVycnVwdCBzdGF0ZSB3aGVuIHRoZSBndWVzdCBleGlzdHMgdGhlIG5leHQgdGltZSAo Zm9yIHdoYXRldmVyCnJlYXNvbikuCkJ1dCBkZXNwaXRlIHRoZSBHSUMgaGFyZHdhcmUgaGVscGlu ZyBvdXQgaGVyZSwgdGhlIHdob2xlIGludGVycnVwdApjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQg aXMgbm90IHZpcnR1YWxpemVkIGF0IGFsbCBhbmQgbmVlZHMgdG8gYmUgZW11bGF0ZWQKYnkgdGhl IGh5cGVydmlzb3IgLSBvciBhbm90aGVyIHJlbGF0ZWQgc29mdHdhcmUgY29tcG9uZW50LCBmb3Ig aW5zdGFuY2UgYQp1c2VybGFuZCBlbXVsYXRvci4gVGhpcyBzbyBjYWxsZWQgImRpc3RyaWJ1dG9y IiBwYXJ0IG9mIHRoZSBHSUMgY29uc2lzdHMgb2YKbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMsIHdo aWNoIGNhbiBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBzbyBhbnkgZ3Vlc3QKYWNjZXNz IGNhbiBiZSBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgd2F5LgoKVkdJQyBkZXNpZ24gbW90aXZhdGlv bgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBIEdJQyBlbXVsYXRpb24gdGh1cyBuZWVkcyB0byB0 YWtlIGNhcmUgb2YgdGhvc2UgYml0czoKCi0gdHJhcCBHSUMgZGlzdHJpYnV0b3IgTU1JTyBhY2Nl c3NlcyBhbmQgc2hhZG93IHRoZSBjb25maWd1cmF0aW9uIHNldHVwCiAgKGVuYWJsZWQvZGlzYWJs ZWQsIGxldmVsL2VkZ2UsIHByaW9yaXR5LCBhZmZpbml0eSkgZm9yIHZpcnR1YWwgaW50ZXJydXB0 cwotIGhhbmRsZSBpbmNvbWluZyBoYXJkd2FyZSBhbmQgdmlydHVhbCBpbnRlcnJ1cHQgcmVxdWVz dHMgYW5kIGluamVjdCB0aGUKICBhc3NvY2lhdGVkIHZpcnR1YWwgaW50ZXJydXB0IGJ5IG1hbmlw dWxhdGluZyBvbmUgb2YgdGhlIGxpc3QgcmVnaXN0ZXJzCi0gdHJhY2sgdGhlIHN0YXRlIG9mIGEg dmlydHVhbCBpbnRlcnJ1cHQgYnkgaW5zcGVjdGluZyB0aGUgTFJzIGFmdGVyIHRoZQogIGd1ZXN0 IGhhcyBleGl0ZWQsIHBvc3NpYmx5IGFkanVzdGluZyB0aGUgc2hhZG93ZWQgdmlydHVhbCBpbnRl cnJ1cHQgc3RhdGUKCkRlc3BpdGUgdGhlIGRpc3RyaWJ1dG9yIE1NSU8gcmVnaXN0ZXIgZW11bGF0 aW9uIGJlaW5nIGEgc2l6ZWFibGUgY2h1bmsgb2YKdGhlIGVtdWxhdGlvbiwgaXQgaXMgYWN0dWFs bHkgbm90IGRvbWluYW50IGlmIGxvb2tpbmcgYXQgdGhlIGZyZXF1ZW5jeSBhdAp3aGljaCBpdCBp cyBhY2Nlc3NlZC4gTm9ybWFsbHkgdGhlIGludGVycnVwdCBjb25maWd1cmF0aW9uIGlzIGRvbmUg YXQgYm9vdAp0aW1lIG9yIHVwb24gaW5pdGlhbGlzaW5nIHRoZSBkZXZpY2UgKGRyaXZlciksIGJ1 dCByYXJlbHkgZHVyaW5nIHRoZSBhY3R1YWwKcnVuIHRpbWUgb2YgYSBzeXN0ZW0uIEluamVjdGlu ZyBhbmQgRU9JLWluZyBpbnRlcnJ1cHRzIGhvd2V2ZXIgaGFwcGVucyBtdWNoCm1vcmUgb2Z0ZW4u IEEgZ29vZCBlbXVsYXRpb24gYXBwcm9hY2ggc2hvdWxkIHRodXMgZm9jdXMgb24gdHJhY2tpbmcg dGhlIHZpcnR1YWwKaW50ZXJydXB0IHN0YXRlIGVmZmljaWVudGx5LCBhbGxvd2luZyBxdWljayBo YW5kbGluZyBvZiBpbmNvbWluZyBhbmQgRU9JLWVkCmludGVycnVwdHMuCgpUaGUgYWN0dWFsIGlu dGVycnVwdCBzdGF0ZSB0cmFja2luZyBjYW4gYmUgcXVpdGUgdHJpY2t5IGluIHBhcnRzLiBJbnRl cnJ1cHQKaW5qZWN0aW9ucyBjYW4gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkv ZXhpdCBwb2ludHMsIGFsc28gTU1JTwpjb25maWd1cmF0aW9uIGFjY2Vzc2VzIGNvdWxkIGJlIHRy aWdnZXJlZCBieSBhbnkgVkNQVSBhdCBhbnkgcG9pbnQgaW4gdGltZS4KQ2hhbmdpbmcgaW50ZXJy dXB0IENQVSBhZmZpbml0eSBhZGRzIHRvIHRoZSBjb21wbGljYXRpb24uClRoaXMgbGVhZHMgdG8g bWFueSBjb2RlIHBhcnRzIHdoaWNoIGNvdWxkIHJ1biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBjb250 YWlucwpzb21lIHJhY2UgY29uZGl0aW9ucywgc28gcHJvcGVyIGxvY2tpbmcgYmVjb21lcyBrZXkg b2YgYSBnb29kIGRlc2lnbi4KQnV0IG9uZSBoYXMgdG8gY29uc2lkZXIgdGhhdCBpbnRlcnJ1cHRz IGluIGdlbmVyYWwgY2FuIGJlIGNoYXJhY3RlcmlzZWQKYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3 aXNlIGEgZ3Vlc3Qgd291bGQgYmUgYnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZApu b3QgcHJvY2VzcyBhY3R1YWwgY29tcHV0YXRpb24gdGFza3MuClRoYXQncyB3aHkgdGhlIGludGVy cnVwdCBzdGF0ZSB0cmFja2luZyBzaG91bGQgZm9jdXMgb24gYSBjbGVhciBhbmQgcmFjZS1mcmVl CmxvY2tpbmcgc2NoZW1lLCB3aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28gbXVjaCBp biB0aGlzIHJlc3BlY3QuCkV4cGVyaWVuY2Ugc2hvd3MgdGhhdCB0aGlzIGNvbXBsaWNhdGVzIHRo ZSBjb2RlIGFuZCBsZWFkcyB0byB1bmRldGVjdGVkIGFuZApoYXJkLXRvLWRlYnVnIHJhY2UgY29u ZGl0aW9ucywgd2hpY2ggYWZmZWN0IHRoZSBzdGFiaWxpdHkgb2YgdGhlIHN5c3RlbSBpbgpwb3Nz aWJseSB1bnRlc3RlZCBjb3JuZXIgY2FzZXMuCgpWR0lDIGRlc2lnbiBwcmluY2lwbGVzCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCiMjIyBEYXRhIHN0cnVjdHVyZQoKVGhpcyBWR0lDIGRlc2lnbiBp cyBiYXNlZCBvbiB0aGUgaWRlYSBvZiBoYXZpbmcgb25lIHN0cnVjdHVyZSBwZXIgdmlydHVhbApp bnRlcnJ1cHQsIHByb3RlY3RlZCBieSBpdHMgb3duIGxvY2suIEluIGFkZGl0aW9uIHRoZXJlIGlz IGEgbGlzdCBwZXIgVkNQVSwKd2hpY2ggcXVldWVzIHRoZSBpbnRlcnJ1cHRzIHdoaWNoIHRoaXMg VkNQVSBzaG91bGQgY29uc2lkZXIgZm9yIGluamVjdGlvbi4KT25lIGludGVycnVwdCBjYW4gb25s eSBiZSBvbiBvbmUgVkNQVSBsaXN0IGF0IGFueSBnaXZlbiBwb2ludCBpbiB0aW1lLgpGb3IgcHJp dmF0ZSBpbnRlcnJ1cHRzIGFuZCBTUElzIGEgc3RhdGljIGFsbG9jYXRpb24gb2YgdGhpcyBkYXRh IHN0cnVjdHVyZQp3b3VsZCBiZSBzdWZmaWNpZW50LCBob3dldmVyIExQSXMgKHRyaWdnZXJlZCBi eSBhICh2aXJ0dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5CmR5bmFtaWMgYW5kIHBvc3NpYmx5IHZlcnkg c3BhcnNlIGFsbG9jYXRpb24gc2NoZW1lLCBzbyB3ZSBuZWVkIHRvIGRlYWwgd2l0aApkeW5hbWlj IGFsbG9jYXRpb24gYW5kIGRlLWFsbG9jYXRpb24gb2YgdGhpcyBzdHJ1Y3QuIFRvIGFjY29tbW9k YXRlIHRoaXMKdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBsaXN0IGhlYWRlciB0byBsaW5rIGFsbCBM UElzLgpBbHNvIHRoZSBMUEkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGNhbiBoYXBwZW4gYXN5bmNo cm9ub3VzbHksIHNvIHdlIG5lZWQgdG8KcHJvcGVybHkgcmVmLWNvdW50IHRoZSBzdHJ1Y3R1cmUg KGF0IGxlYXN0IGZvciBMUElzKSwgb3RoZXJ3aXNlIHNvbWUgY29kZSBwYXJ0cwp3b3VsZCBwb3Rl bnRpYWxseSBlbmQgdXAgd2l0aCByZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWVkIHBvaW50ZXIu CgpUaGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBpcyBjYWxsZWQgYHN0cnVjdCB2Z2ljX2lycWAs IGFuZCwgYmVzaWRlIHRoZQpleHBlY3RlZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBkYXRhLCBj b250YWlucyBhdCBsZWFzdCB0aGUgbG9jaywgYSBsaXN0CmhlYWRlciAodG8gYmUgYWJsZSB0byBs aW5rIGl0IHRvIGEgVkNQVSkgYW5kIGEgcmVmY291bnQuIEFsc28gaXQgY29udGFpbnMKdGhlIGlu dGVycnVwdCBudW1iZXIgKHRvIGFjY29tbW9kYXRlIGZvciBub24tY29udGlndW91cyBpbnRlcnJ1 cHQgYWxsb2NhdGlvbnMsCmZvciBpbnN0YW5jZSBmb3IgTFBJcykuCkJlc2lkZSB0aG9zZSBlc3Nl bnRpYWwgZWxlbWVudHMgaXQgcHJvdmVzIHdvcnRoIHRvIHN0b3JlIChhIHJlZmVyZW5jZSB0bykg dGhlClZDUFUgdGhpcyBJUlEgaXMgYXNzb2NpYXRlZCB3aXRoLiBUaGlzIGFsbG93cyB0byBlYXNp bHkgZmluZCB0aGUgcmVzcGVjdGl2ZQpWQ1BVIGxpc3QuCgogICAgc3RydWN0IHZnaWNfaXJxIHsK ICAgICAgICBzcGlubG9ja190IGlycV9sb2NrOyAgICAgICAgICAgIC8qIFByb3RlY3RzIHRoZSBj b250ZW50IG9mIHRoZSBzdHJ1Y3QgKi8KICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxwaV9saXN0 OyAgICAgIC8qIFVzZWQgdG8gbGluayBhbGwgTFBJcyB0b2dldGhlciAqLwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgYXBfbGlzdDsKCiAgICAgICAgc3RydWN0IHZjcHUgKnZjcHU7ICAgICAgICAg ICAgICAvKiBTR0lzIGFuZCBQUElzOiBUaGUgVkNQVQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogU1BJcyBhbmQgTFBJczogVGhlIFZDUFUgd2hvc2UgYXBfbGlzdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBpcyBxdWV1ZWQg b24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAg c3RydWN0IHZjcHUgKnRhcmdldF92Y3B1OyAgICAgICAgLyogVGhlIFZDUFUgdGhhdCB0aGlzIGlu dGVycnVwdCBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBiZSBzZW50IHRvLCBhcyBhIHJlc3VsdCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiB0YXJnZXRzIHJlZyAodjIpIG9yIHRoZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFmZmluaXR5IHJlZyAodjMpLgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICAgICAgICB1MzIgaW50aWQ7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEd1ZXN0IHZpc2libGUgSU5USUQgKi8KICAgICAgICBi b29sIGxpbmVfbGV2ZWw7ICAgICAgICAgICAgICAgIC8qIExldmVsIG9ubHkgKi8KICAgICAgICBi b29sIHBlbmRpbmdfbGF0Y2g7ICAgICAgICAgICAgIC8qIFRoZSBwZW5kaW5nIGxhdGNoIHN0YXRl IHVzZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbGN1 bGF0ZSB0aGUgcGVuZGluZyBzdGF0ZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIGJvdGggbGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElSUXMuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgYm9vbCBhY3RpdmU7 ICAgICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZCBmb3IgTFBJcyAqLwogICAgICAgIGJvb2wg ZW5hYmxlZDsKICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQg dG8gSFcgSVJRICovCiAgICAgICAgc3RydWN0IGtyZWYgcmVmY291bnQ7ICAgICAgICAgICAvKiBV c2VkIGZvciBMUElzICovCiAgICAgICAgdTMyIGh3aW50aWQ7ICAgICAgICAgICAgICAgICAgICAv KiBIVyBJTlRJRCBudW1iZXIgKi8KICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgIHU4IHRhcmdl dHM7ICAgICAgICAgICAgICAgICAgICAgLyogR0lDdjIgdGFyZ2V0IFZDUFVzIG1hc2sgKi8KICAg ICAgICAgICAgdTMyIG1waWRyOyAgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MyB0YXJnZXQg VkNQVSAqLwogICAgICAgIH07CiAgICAgICAgdTggc291cmNlOyAgICAgICAgICAgICAgICAgICAg ICAvKiBHSUN2MiBTR0lzIG9ubHkgKi8KICAgICAgICB1OCBwcmlvcml0eTsKICAgICAgICBlbnVt IHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExldmVsIG9yIGVkZ2UgKi8KICAgIH07Cgoj IyMgVkNQVSBsaXN0IGhhbmRsaW5nCgpJbml0aWFsbHkgYSB2aXJ0dWFsIGludGVycnVwdCBqdXN0 IGxpdmVzIG9uIGl0cyBvd24uIEd1ZXN0IE1NSU8gYWNjZXNzZXMgdG8KdGhlIGRpc3RyaWJ1dG9y IHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZS4KV2hl biBhbiBpbnRlcnJ1cHQgaXMgYWN0dWFsbHkgbWFkZSBwZW5kaW5nIChlaXRoZXIgYnkgYW4gYXNz b2NpYXRlZCBoYXJkd2FyZQpJUlEgZmlyaW5nIG9yIGJ5IGEgdmlydHVhbCBJUlEgdHJpZ2dlciks IHRoZSBgdmdpY19pcnFgIHN0cnVjdHVyZSB3aWxsIGJlCmxpbmtlZCB0byB0aGUgY3VycmVudCB0 YXJnZXQgVkNQVS4gVGhlIGB2Y3B1YCBtZW1iZXIgaW4gdGhlIHN0cnVjdHVyZSB3aWxsCmJlIHNl dCB0byB0aGlzIFZDUFUuIEFueSBhZmZpbml0eSBjaGFuZ2UgYWZ0ZXIgdGhpcyBwb2ludCB3aWxs IG5vdCBhZmZlY3QKdGhlIGN1cnJlbnQgdGFyZ2V0IFZDUFUgYW55bW9yZSwgaXQganVzdCB1cGRh dGVzIHRoZSBgdGFyZ2V0X3ZwdWAgZmllbGQgaW4KdGhlIHN0cnVjdHVyZSwgd2hpY2ggd2lsbCBi ZSBjb25zaWRlcmVkIG9uIHRoZSBuZXh0IGluamVjdGlvbi4KVGhpcyBwZXItVkNQVSBsaXN0IGlz IGNhbGxlZCB0aGUgYGFwX2xpc3RgLCBzaW5jZSBpdCBob2xkcyBpbnRlcnJ1cHRzIHdoaWNoCmFy ZSBpbiBhIHBlbmRpbmcgYW5kL29yIGFjdGl2ZSBzdGF0ZS4KCiMjIyBWaXJ0dWFsIElSUSByZWZl cmVuY2VzCgpUaGVyZSBpcyBhIGZ1bmN0aW9uIGB2Z2ljX2dldF9pcnEoKWAgd2hpY2ggcmV0dXJu cyBhIHJlZmVyZW5jZSB0byBhIHZpcnR1YWwgSVJRCmdpdmVuIGl0cyBudW1iZXIuCkZvciBwcml2 YXRlIElSUXMgYW5kIFNQSXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGlzIGp1c3QgaW5kZXhlcyBh IHN0YXRpYyBhcnJheS4KRm9yIExQSXMgKHdoaWNoIGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQg YXQgcnVuIHRpbWUpIHRoaXMgaXMgZXhwZWN0ZWQgdG8KaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJl IChsaWtlIGEgbGlua2VkIGxpc3QpIHRvIGZpbmQgdGhlIHJpZ2h0IHN0cnVjdHVyZS4KSW4gYW55 IGNhc2UgYSBjYWxsIHRvIGB2Z2ljX2dldF9pcnFgIHdpbGwgaW5jcmVhc2UgYSByZWZjb3VudCwg d2hpY2ggd2lsbApwcmV2ZW50IExQSXMgZnJvbSBiZWluZyBkZS1hbGxvY2F0ZWQgd2hpbGUgYW5v dGhlciBwYXJ0IG9mIHRoZSBWR0lDIGlzIHN0aWxsCmhvbGRpbmcgYSByZWZlcmVuY2UuIFRodXMg YW55IGNhbGxlciB0byBgdmdpY19nZXRfaXJxYCBzaGFsbCBjYWxsCmB2Z2ljX3B1dF9pcnEoKWAg YWZ0ZXIgaXQgaXMgZG9uZSB3aXRoIGhhbmRsaW5nIHRoaXMgaW50ZXJydXB0LgpBbiBleGNlcHRp b24gd291bGQgYmUgaWYgdGhlIHZpcnR1YWwgSVJRIGlzIGV2ZW50dWFsbHkgaW5qZWN0ZWQgaW50 byBhIFZDUFUuIEluCnRoaXMgY2FzZSB0aGUgVkNQVSBob2xkcyB0aGF0IHJlZmVyZW5jZSBhbmQg aXQgaXMga2VwdCBhcyBsb25nIGFzIHRoZSBndWVzdApzZWVzIHRoaXMgdmlydHVhbCBJUlEuIFRo ZSByZWZjb3VudCB3b3VsZCBvbmx5IGJlIGRlY3JlYXNlZCB1cG9uIHRoZSBJUlEgaGF2aW5nCmJl ZW4gRU9JZWQgYnkgdGhlIGd1ZXN0IGFuZCBpdCBoYXZpbmcgYmVlbiByZW1vdmVkIGZyb20gdGhl IFZDUFUgbGlzdC4KCiMjIyBMb2NraW5nCgpUbyBrZWVwIHRoZSBgdmdpY19pcnFgIHN0cnVjdHVy ZSBjb25zaXN0ZW50IGFuZCB0byBhdm9pZCByYWNlcyBiZXR3ZWVuCmRpZmZlcmVudCBwYXJ0cyBv ZiB0aGUgVkdJQywgbG9ja2luZyBpcyBlc3NlbnRpYWwgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgbWVt YmVyCm9mIHRoaXMgc3RydWN0dXJlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgbG9jayBpcyBh bG1vc3QgbmV2ZXIgY29udGVuZGVkLAphbHNvIGhlbGQgb25seSBmb3IgYnJpZWYgcGVyaW9kcyBv ZiB0aW1lLCBzbyB0aGlzIGlzIGNvbnNpZGVyZWQgY2hlYXAuClRvIGtlZXAgdGhlIGNvZGUgY2xl YW4gYW5kIGF2b2lkIG5hc3R5IGNvcm5lciBjYXNlcywgdGhlcmUgYXJlIG5vIHRyaWNrcyBvbgp0 cnlpbmcgdG8gYmUgbG9ja2xlc3MgaGVyZS4KSWYgZm9yIGFueSByZWFzb24gdGhlIGNvZGUgbmVl ZHMgdG8gaG9sZCB0aGUgbG9ja3MgZm9yIHR3byB2aXJ0dWFsIElSUXMsIHRoZQpvbmUgd2l0aCB0 aGUgbG93ZXIgSVJRIG51bWJlciBpcyB0byBiZSB0YWtlbiBmaXJzdCwgdG8gYXZvaWQgZGVhZGxv Y2tzLgoKQW5vdGhlciBsb2NrIHRvIGNvbnNpZGVyIGlzIHRoZSBWQ1BVIGxvY2ssIHdoaWNoIG9u IHRoZSBmaXJzdCBnbGFuY2UgcHJvdGVjdHMKdGhlIHZpcnR1YWwgQ1BVJ3MgbGlzdCBzdHJ1Y3R1 cmUsIGJ1dCBhbHNvIHN5bmNocm9uaXNlcyBhZGRpdGlvbnMgYW5kIHJlbW92YWxzCm9mIElSUXMg ZnJvbSBhIFZDUFUuIFRvIGFkZCBhbiBJUlEgdG8gYSBsaXN0LCBib3RoIHRoZSBWQ1BVIGFuZCB0 aGUgcGVyLUlSUQpsb2NrIG5lZWQgdG8gYmUgaGVsZC4gVG8gYXZvaWQgZGVhZGxvY2tzLCB0aGVy ZSBpcyBhIHN0cmljdCBsb2NraW5nIG9yZGVyOgoKPiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJl IHRha2VuIGZpcnN0LCB0aGUgcGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCgpTb21lIG9wZXJhdGlv bnMgKGxpa2UgbWlncmF0aW5nIElSUXMgYmV0d2VlbiB0d28gVkNQVXMpIHJlcXVpcmUgdHdvIFZD UFUKbG9ja3MgdG8gYmUgaGVsZCwgaW4gdGhpcyBjYXNlIHRoZSBsb2NrIGZvciB0aGUgVkNQVSB3 aXRoIHRoZSBzbWFsbGVyIFZDUFUgSUQKaXMgdG8gYmUgdGFrZW4gZmlyc3QuCgpUaGVyZSBhcmUg b2NjYXNpb25zIHdoZXJlIHRoZSBsb2NraW5nIG9yZGVyIChWQ1BVIGZpcnN0KSBpcyBoYXJkIHRv IG9ic2VydmUsCmJlY2F1c2UgdGhlIHBlci1JUlEgbG9jayBpcyBhbHJlYWR5IGhlbGQsIGJ1dCB0 aGlzIElSUSBuZWVkcyB0byBnbyBvbiBhIFZDUFUKbGlzdC4gSW4gdGhpcyBjYXNlIHRoZSBJUlEg bG9jayBuZWVkcyB0byBiZSBkcm9wcGVkLCB0aGUgcmVzcGVjdGl2ZSBWQ1BVCmxvY2sgc2hvdWxk IGJlIHRha2VuLCB0aGVuIHRoZSBwZXItSVJRIGxvY2sgbmVlZHMgdG8gYmUgcmUtdGFrZW4uCkFm dGVyIGJvdGggdGhlIGxvY2tzIGFyZSBoZWxkLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb25k aXRpb25zIHdoaWNoCm9yaWdpbmFsbHkgbWFuZGF0ZWQgdGhlIGxpc3QgYWRkaXRpb24gKG9yIHJl bW92YWwpIGFyZSBzdGlsbCB0cnVlLiBUaGlzIGlzCm5lZWRlZCBiZWNhdXNlIHRoZSBJUlEgbG9j ayBjb3VsZCBoYXZlIGJlZW4gdGFrZW4gYnkgYW5vdGhlciBlbnRpdHkgbWVhbndoaWxlCmFuZCB0 aGUgc3RhdGUgb2YgdGhpcyBpbnRlcnJ1cHQgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQuIEV4YW1w bGVzIGFyZSBpZiB0aGUKaW50ZXJydXB0IGlzIG5vIGxvbmdlciBwZW5kaW5nLCBnb3QgZGlzYWJs ZWQgb3IgY2hhbmdlZCB0aGUgQ1BVIGFmZmluaXR5LgpTb21lIG9mIHRob3NlIGNoYW5nZXMgbWln aHQgcmVuZGVyIHRvIGN1cnJlbnQgYWN0aW9uIG9ic29sZXRlIChubyBsb25nZXIKcGVuZGluZyks IG90aGVyIHdpbGwgbGVhZCB0byBhIHJldHJ5IG9mIHRoZSByZS1sb2NraW5nIHNjaGVtZSBkZXNj cmliZWQgYWJvdmUuClRoaXMgcmUtbG9ja2luZyBzY2hlbWUgc2hhbGwgYmUgaW1wbGVtZW50ZWQg aW4gYSB3ZWxsLWRvY3VtZW50ZWQgZnVuY3Rpb24uCgojIyMgTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dl cmVkIGludGVycnVwdHMKClRoZSBHSUMga25vd3MgYWJvdXQgdHdvIGtpbmRzIG9mIHNpZ25hbGxp bmcgaW50ZXJydXB0czoKCi0gRWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dlcmVk IGJ5IGEgZGV2aWNlIG9uY2UsIHRoZWlyIGxpZmUgY3ljbGUKZW5kcyB3aGVuIHRoZSBndWVzdCBo YXMgRU9JZWQgdGhlbSwgYXQgd2hpY2ggcG9pbnQgd2UgcmVtb3ZlIHRoZSBwZW5kaW5nIHN0YXRl LApjbGVhciB0aGUgTFIgYW5kIHJldHVybiB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgdG8gYSBx dWllc2NlbnQgc3RhdGUuCgotIExldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSB0cmlnZ2Vy ZWQgd2hlbiBhIGRldmljZSByYWlzZXMgaXRzIGludGVycnVwdApsaW5lLCB0aGV5IHN0YXkgcGVu ZGluZyBhcyBsb25nIGFzIHRoaXMgbGluZSBpcyBoZWxkIGhpZ2guIEF0IHNvbWUgcG9pbnQgdGhl CmRyaXZlciBpbiB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8gcHJvZ3JhbSB0aGUgZGV2aWNlIHRv IGV4cGxpY2l0bHkgb3IKaW1wbGljaXRseSBsb3dlciB0aGlzIGludGVycnVwdCBsaW5lLiBUaGF0 IG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBzdG9yZSB0aGUKc3RhdGUgb2YgdGhlIHZpcnR1YWwgaW50 ZXJydXB0IGxpbmUsIHdoaWNoIGlzIG9ubHkgY29udHJvbGxlZCBieSB0aGUgKHZpcnR1YWwpCmRl dmljZS4gVGhpcyBpcyBkb25lIGluIHRoZSBgbGluZV9sZXZlbGAgbWVtYmVyIG9mIGBzdHJ1Y3Qg dmdpY19pcnFgLgoKVG8gYXNzZXJ0IHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uLCBhICh2aXJ0dWFs KSBkZXZpY2UgY2FsbHMgYSBmdW5jdGlvbiBleHBvcnRlZApieSB0aGUgVkdJQywgd2hpY2ggYWxs b3dzIHRvIHJhaXNlIG9yIGxvd2VyIGFuIGludGVycnVwdCBsaW5lLiBMb3dlcmluZyB0aGUKbGlu ZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQgSVJRIGlzIGlnbm9yZWQgKGFuZCBzbyBpcyBvcHRpb25h bCkuIFJhaXNpbmcgdGhlCmxpbmUgYXNzZXJ0cyB0aGUgcGVuZGluZyBzdGF0ZSBhbmQgcG90ZW50 aWFsbHkgaW5qZWN0cyB0aGlzIHZpcnR1YWwgSVJRLiBBbnkKc3Vic2VxdWVudCAicmFpc2luZyIg Y2FsbCBtaWdodCBpbmplY3QgYW5vdGhlciBJUlEsIGlmIHRoZSBwcmV2aW91cyBoYXMgYXQKbGVh c3QgYmVlbiBhY3RpdmF0ZWQgYnkgdGhlIGd1ZXN0IGFscmVhZHksIG90aGVyd2lzZSBpcyBpZ25v cmVkLgoKRm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIHRoaXMgZnVuY3Rpb24gc3RvcmVz IHRoZSBuZXcgc3RhdGUgaW50byB0aGUKYGxpbmVfbGV2ZWxgIHZhcmlhYmxlLCBwb3RlbnRpYWxs eSBpbmplY3RpbmcgdGhlIGludGVycnVwdCBpZiB0aGF0IGxpbmUKY2hhbmdlcyBmcm9tIGZhbHNl IHRvIHRydWUuIElmIHRoZSBsaW5lIGlzIGxvd2VyZWQgYmVmb3JlIHRoZSBndWVzdCBoYXMKc2Vl biBpdCwgdGhpcyBwYXJ0aWN1bGFyIGludGVycnVwdCBpbnN0YW5jZSB3aWxsIGJlIGRpc2NhcmRl ZC4gU3VjY2Vzc2l2ZQoicmFpc2luZyIgY2FsbHMgd2lsbCBub3QgbGVhZCB0byBtdWx0aXBsZSBp bnRlcnJ1cHRzIGlmIHRoZSBsaW5lIGhhcyBub3QKYmVlbiBsb3dlcmVkIGluIGJldHdlZW4uCgoj IyMgU29mdHdhcmUgdHJpZ2dlcmVkIGludGVycnVwdHMKCkJlc2lkZSB0aGUgbmF0dXJhbGx5IHNv ZnR3YXJlIHRyaWdnZXJlZCBpbnRlci1wcm9jZXNzb3ItaW50ZXJydXB0cwooU0dJcyBpbiBHSUMg c3BlYWspLCB0aGVyZSBpcyBhbm90aGVyIHdheSBvZiBsZXR0aW5nIHNvZnR3YXJlIHJhaXNlIGFu CmludGVycnVwdCBjb25kaXRpb24uClRoZSBHSUMgZGlzdHJpYnV0b3IgYWxsb3dzIHRvIHNldCBv ciBjbGVhciBib3RoIHRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgc3RhdGUKb2YgYW55IGludGVycnVw dCB2aWEgTU1JTyByZWdpc3RlcnMuIFRoaXMgaXNuJ3Qgd2lkZWx5IHVzZWQgYnkgbWFueSBvcGVy YXRpbmcKc3lzdGVtcywgYnV0IGlzIHVzZWZ1bCB3aGVuIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRo ZSBzdGF0ZSBvZiBhIG1hY2hpbmUuClNvIGVtdWxhdGluZyB0aGVzZSBmdW5jdGlvbnMgaXMgcmVx dWlyZWQgZm9yIGJlaW5nIGFyY2hpdGVjdHVyZSBjb21wbGlhbnQsCmhvd2V2ZXIgdGhlIGltcGxl bWVudGF0aW9uIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIHZlcnkgZWZmaWNpZW50IGdpdmVuIGl0cyBy YXJlCnVzYWdlLiBJbiBmYWN0IHN1cHBvcnRpbmcgdGhlIHNldC1wZW5kaW5nIGFuZCBjbGVhci1w ZW5kaW5nIHJlZ2lzdGVycyBpcwpyZWxhdGl2ZWx5IHN0cmFpZ2h0LWZvcndhcmQsIGFzIGxvbmcg YXMgb25lIGtlZXBzIHRoaXMgc3RhdGUgc2VwYXJhdGUgZnJvbQp0aGUgZW11bGF0ZWQgaW50ZXJy dXB0IGxpbmUuIGBwZW5kaW5nX2xhdGNoYCBzdG9yZXMgdGhpcyBzdGF0ZSBpbiBgdmdpY19pcnFg LgoKVGhlIHNldC1hY3RpdmUgYW5kIGNsZWFyLWFjdGl2ZSByZWdpc3RlcnMgYXJlIG11Y2ggaGFy ZGVyIHRvIGVtdWxhdGUsIHRob3VnaCwKYXMgbm9ybWFsbHkgdGhlIGFjdGl2ZSBzdGF0ZSBpcyBv ZiBsaXR0bGUgY29uY2VybiB0byB0aGUgR0lDIGVtdWxhdGlvbi4gSW4KYSBub3JtYWwgaW50ZXJy dXB0IGxpZmUgY3ljbGUgdGhlIGFjdGl2ZSBzdGF0ZSBpc24ndCBldmVuIHZpc2libGUgdG8gdGhl Cmh5cGVydmlzb3IsIGFzIGl0IG1pZ2h0IGJlIHNldCBhbmQgY2xlYXJlZCBhZ2FpbiBlbnRpcmVs eSB3aXRoaW4gdGhlIGd1ZXN0CmluIHRoZSBsaXN0IHJlZ2lzdGVyLCB3aXRob3V0IGV4aXRpbmcg dG8gdGhlIGh5cGVydmlzb3IuClNvIG1hbmlwdWxhdGluZyB0aGUgYWN0aXZlIHN0YXRlIHZpYSB0 aGUgTU1JTyByZWdpc3RlcnMgcmVxdWlyZXMgc29tZSBoZWF2eQpsaWZ0aW5nOiBJZiB0aGlzIGlu dGVycnVwdCBpcyBjdXJyZW50bHkgaW5qZWN0ZWQgaW50byBhIHJ1bm5pbmcgVkNQVSwgdGhpcwpW Q1BVIG11c3QgZXhpdCwgdGhlIGFjdGl2ZSBzdGF0ZSBtdXN0IGJlIHNldCBvciBjbGVhcmVkIGlu IHRoZSBMUiwgdGhlbgpleGVjdXRpb24gY2FuIGNvbnRpbnVlLiBXaGlsZSB0aGlzIGlzIGV4cGVu c2l2ZSwgYXMgbWVudGlvbmVkIGFib3ZlIHRoaXMKc2hvdWxkIG5vdCBoYXBwZW4gdG9vIG9mdGVu LCBhbHNvIHByb2JhYmx5IHRoZSBzeXN0ZW0gaXNuJ3QgdmVyeSBwZXJmb3JtYW5jZQpzZW5zaXRp dmUgd2hlbiB1c2luZyB0aGlzIGZlYXR1cmUgZm9yIHNhdmUgYW5kIHJlc3RvcmUgYW55d2F5LgoK IyMjIE1NSU8gZW11bGF0aW9uCgpBcyBtZW50aW9uZWQgYmVmb3JlLCB0aGUgZGlzdHJpYnV0b3Ig YW5kIHJlZGlzdHJpYnV0b3IgcGFydCBvZiB0aGUgVkdJQyBuZWVkcwp0byBiZSBmdWxseSBlbXVs YXRlZC4gVGhvc2UgcGFydHMgYXJlIGNoYXJhY3RlcmlzZWQgYnkgYSByYW5nZSBvZiBNTUlPCnJl Z2lzdGVycy4gVGhlIGltcGxlbWVudGF0aW9uIHNoYWxsIHByb3ZpZGUgYSBkaXNwYXRjaGVyIGZ1 bmN0aW9uLCB3aGljaAp0YWtlcyB0aGUgZmF1bHRlZCBhZGRyZXNzLCByZWxhdGl2ZSB0byB0aGUg YmVnaW5uaW5nIG9mIHRoZSBNTUlPIHJhbmdlLCBhbmQKd29ya3Mgb3V0IHdoaWNoIGFjdHVhbCBy ZWdpc3RlciBpcyBhZmZlY3RlZC4gSXQgdGhlbiBsb29rcyB1cCB0aGUgdGhlCnJlc3BlY3RpdmUg aGFuZGxlciBmdW5jdGlvbiBhbmQgY2FsbHMgaXQuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwZWN0 ZWQgdG8KYmUgbGlzdGVkIGluIGEgc3RydWN0IGluaXRpYWxpc2VyLCB3aGljaCBjb25uZWN0cyB0 aGUgYWN0dWFsIHJlZ2lzdGVyCm9mZnNldCBhbmQgaXRzIHNpemUgdG8gYSBwYXJ0aWN1bGFyIGhh bmRsZXIuIEhhdmluZyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IKYSByZWdpc3RlciByYW5nZSBzZWVt cyBiZW5lZmljaWFsIG92ZXIgaGFuZGxpbmcgcmVnaXN0ZXJzIGluIGEgc3dpdGNoL2Nhc2UsCmJl Y2F1c2UgaXQncyBlYXNpZXIgdG8gcmVhZCBhbmQgc2ltcGxpZmllcyBjb2RlIHNoYXJpbmcsIGZv ciBpbnN0YW5jZQpiZXR3ZWVuIHRoZSBHSUN2MiwgR0lDdjMgZGlzdHJpYnV0b3IgYW5kIEdJQ3Yz IHJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzCndpdGggdGhlIHNhbWUgc2VtYW50aWNzLgoKIyMjIExp c3QgcmVnaXN0ZXIgbWFuYWdlbWVudAoKQSBsaXN0IHJlZ2lzdGVyIChMUikgaG9sZHMgdGhlIHN0 YXRlIG9mIGEgdmlydHVhbCBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwKYmUgdXNlZCBieSB0aGUgR0lD IGhhcmR3YXJlIHRvIHNpbXVsYXRlIGFuIElSUSBsaWZlIGN5Y2xlIGZvciBhIGd1ZXN0LgpFYWNo IEdJQyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBjYW4gY2hvb3NlIHRvIGltcGxlbWVudCBhIG51 bWJlciBvZiBMUnMsCmhhdmluZyBmb3VyIG9mIHRoZW0gc2VlbXMgdG8gYmUgYSBjb21tb24gdmFs dWUuIFRoaXMgZGVzaWduIGhlcmUgZG9lcyBub3QKdHJ5IHRvIG1hbmFnZSB0aGUgTFJzIHZlcnkg Y2xldmVybHksIGluc3RlYWQgb24gZXZlcnkgZ3Vlc3QgZXhpdCBldmVyeSBMUgppbiB1c2Ugd2ls bCBiZSBzeW5jZWQgdG8gdGhlIGVtdWxhdGVkIHN0YXRlLCB0aGVuIGNsZWFyZWQuIFVwb24gZ3Vl c3QgZW50cnkKdGhlIHRvcCBwcmlvcml0eSB2aXJ0dWFsIElSUXMgd2lsbCBiZSBpbnNlcnRlZCBp bnRvIHRoZSBMUnMuIElmIHRoZXJlIGFyZQptb3JlIHBlbmRpbmcgb3IgYWN0aXZlIElSUXMgdGhh biBsaXN0IHJlZ2lzdGVycywgdGhlIEdJQyBtYW5hZ2VtZW50IElSUQp3aWxsIGJlIGNvbmZpZ3Vy ZWQgdG8gbm90aWZ5IHRoZSBoeXBlcnZpc29yIG9mIGEgZnJlZSBMUiAob25jZSB0aGUgZ3Vlc3QK aGFzIEVPSWVkIG9uZSBJUlEpLiBUaGlzIHdpbGwgdHJpZ2dlciBhIG5vcm1hbCBleGl0LCB3aGlj aCB3aWxsIGdvIHRocm91Z2gKdGhlIG5vcm1hbCBjbGVhbnVwL3JlcG9wdWxhdGUgc2NoZW1lLCBw b3NzaWJseSBub3cgcXVldWluZyB0aGUgbGVmdG92ZXIKaW50ZXJydXB0KHMpLgpUbyBmYWNpbGl0 YXRlIHF1aWNrIGd1ZXN0IGV4aXQgYW5kIGVudHJ5IHRpbWVzLCB0aGUgVkdJQyBtYWludGFpbnMg dGhlIGxpc3QKb2YgcGVuZGluZyBvciBhY3RpdmUgaW50ZXJydXB0cyAoYXBcX2xpc3QpIHNvcnRl ZCBieSB0aGVpciBwcmlvcml0eS4gQWN0aXZlCmludGVycnVwdHMgYWx3YXlzIGdvIGZpcnN0IG9u IHRoZSBsaXN0LCBzaW5jZSBhIGd1ZXN0IGFuZCB0aGUgaGFyZHdhcmUgR0lDCmV4cGVjdCB0aG9z ZSB0byBzdGF5IHVudGlsIHRoZXkgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgZGVhY3RpdmF0ZWQuIEZh aWx1cmUKaW4ga2VlcGluZyBhY3RpdmUgSVJRcyBhcm91bmQgd2lsbCByZXN1bHQgaW4gZXJyb3Ig Y29uZGl0aW9ucyBpbiB0aGUgR0lDLgpUaGUgc2Vjb25kIHNvcnQgY3JpdGVyaWEgZm9yIHRoZSBh cFxfbGlzdCBpcyB0aGVpciBwcmlvcml0eSwgc28gaGlnaGVyCnByaW9yaXR5IHBlbmRpbmcgaW50 ZXJydXB0IGFsd2F5cyBnbyBmaXJzdCBpbnRvIHRoZSBMUnMuCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK