From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [RFC PATCH v3 00/18] Add ITS support Date: Wed, 24 Jun 2015 11:02:16 +0100 Message-ID: <1435140136.28264.285.camel@citrix.com> References: <1434974517-12136-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1434974517-12136-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: vijay.kilari@gmail.com Cc: stefano.stabellini@eu.citrix.com, Prasun.Kapoor@caviumnetworks.com, vijaya.kumar@caviumnetworks.com, tim@xen.org, xen-devel@lists.xen.org, julien.grall@citrix.com, stefano.stabellini@citrix.com, manish.jaggi@caviumnetworks.com List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAyMDE1LTA2LTIyIGF0IDE3OjMxICswNTMwLCB2aWpheS5raWxhcmlAZ21haWwuY29t IHdyb3RlOgo+IEZyb206IFZpamF5YSBLdW1hciBLIDxWaWpheWEuS3VtYXJAY2F2aXVtbmV0d29y a3MuY29tPgo+IAo+IFRoaXMgaXMgYmFzZWQgb24gRHJhZnRGIHZlcnNpb24gCj4gaHR0cDovL3hl bmJpdHMueGVuLm9yZy9wZW9wbGUvaWFuYy92aXRzL2RyYWZ0Ri5wZGYKCkkgaGFkIHNvbWUgbG9j YWwgZWRpdHMgZHVlIHRvIGNvbW1lbnRzIG1hZGUgb24gSVJDIGFuZCBpbiByZXNwb25zZSB0bwpx dWVzdGlvbnMgeW91IGFza2VkIHdoaWxlIGltcGxlbWVudGluZyBldGMuIEl0J3Mgbm90aGluZyBt YWpvciBhbmQgSQpkb24ndCB0aGluayBpdCB3aWxsIGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBpbXBs ZW1lbnRhdGlvbiBidXQgcmF0aGVyIHRoYW4KaGF2ZSBpdCBzaXR0aW5nIG9uIG15IEhERCBJJ3Zl IHN0dWNrIGl0IGF0Cmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvcGVvcGxlL2lhbmMvdml0cy9kcmFm dEcucGRmIGFuZCBiZWxvdy4KCklhbi4KCiUgWGVuIG9uIEFSTSB2SVRTIEhhbmRsaW5nCiUgSWFu IENhbXBiZWxsIDxpYW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KJSBEcmFmdCBHCgojIENoYW5nZWxv ZwoKIyMgU2luY2UgRHJhZnQgRgoKKiBGaXggd29yZGluZyBpbiBgSU5WYCBhbmQgYElOVkFMTGAg Y2FzZXMuCiogRHJvcCBhdHRlbXB0IGF0IHByZWVtcHRpYmxlIGBHSVRTX0NXUklURVJgIGhhbmRs aW5nLgoqIENsYXJpZnkgcGh5c2ljYWwgdnMgdmlydHVhbCBjb2xsZWN0aW9ucyBhbmQgcGh5c2lj YWwgdnMgdmlydHVhbCBMUElzCiAgaW4gc29tZSBwbGFjZXMuCgojIyBTaW5jZSBEcmFmdCBFCgoq IERpc2N1c3Npb24gb2YgYHN0cnVjdCBwZW5kaW5nX2lycWAKKiBGaXggaGFuZGxpbmcgb2YgZW5h YmxlL2Rpc2FibGUsIHJlcXVpcmluZyBzd2l0Y2hpbmcgYmFjayB0byB0cmFwcGluZwogIHRoZSB2 aXJ0dWFsIGNmZyB0YWJsZSBhZ2Fpbi4gZ2V0X3ZscGlfY2ZnIGlzIG5vIGxvbmdlciBuZWVkZWQu CiogRml4IHAybV9sb29rdXAgdG8gYWxzbyB1c2UgZ2V0X3BhZ2VfZnJvbV9nZm4uCgojIyBTaW5j ZSBEcmFmdCBECgoqIEZpeGVkIGFzc3VtcHRpb25zIGFib3V0IHZMUEktPnBMUEkgbWFwcGluZywg d2hpY2ggaXMgbm90CiAgcG9zc2libGUuIFRoaXMgbGVhZCB0byBjaGFuZ2VzIHRvIHRoZSBtb2Rl bCBmb3IgZW5hYmxpbmcgYW5kCiAgZGlzYWJsaW5nIHBMUEkgYW5kIHZMUEkgYW5kIHRoZSBoYW5k bGluZyBvZiB0aGUgdmlydHVhbCBMUEkKICBjb25maWd1cmF0aW9uIHRhYmxlLCByZXNvbHZpbmcg X1VucmVzb2x2ZWQgSXNzdWUgMV8uCiogTWFkZSB0aGUgcExQSSBhbmQgdkxQSSBpbnRlcnJ1cHQg cHJpb3JpdGllcyBleHBsaWNpdC4KKiBBdHRlbXB0ZWQgdG8gY2xhcmlmeSB0aGUgdHJ1c3QgaXNz dWVzIHJlZ2FyZGluZyBpbi1ndWVzdCBkYXRhCiAgc3RydWN0dXJlcy4KKiBNYW5kYXRlIGEgcGFy dGljdWxhciBjYWNoZWFiaWxpdHkgZm9yIHRhYmxlcyBpbiBndWVzdCBtZW1vcnkuCgojIyBTaW5j ZSBEcmFmdCBDCgoqIF9NYWpvcl8gcmV3b3JrLCBpbiBhbiBhdHRlbXB0IHRvIHNpbXBsaWZ5IGV2 ZXJ5dGhpbmcgaW50byBzb21ldGhpbmcKICBtb3JlIGxpa2VseSB0byBiZSBhY2hpZXZhYmxlIGZv ciA0LjYuCiAgICAqIE1hZGUgc29tZSBzaW1wbGlmeWluZyBhc3N1bXB0aW9ucy4KICAgICogUmVk dWNlZCB0aGUgc2NvcGUgb2Ygc29tZSBzdXBwb3J0LgogICAgKiBDb21tYW5kIGVtdWxhdGlvbiBp cyBub3cgbW9zdGx5IHRyaXZpYWwuCiAgICAqIEV4cGFuZGVkIGRldGFpbCBvbiBob3N0IHNldHVw LCBhbGxvd2luZyBvdGhlciBhc3N1bXB0aW9ucyB0byBiZQogICAgICBtYWRlIGR1cmluZyBlbXVs YXRpb24uCiogTWFueSBvdGhlciB0aGluZ3MgbG9zdCBpbiB0aGUgbm9pc2Ugb2YgdGhlIGFib3Zl LgoKIyMgU2luY2UgRHJhZnQgQgoKKiBEZXRhaWxzIG9mIGNvbW1hbmQgdHJhbnNsYXRpb24gKHRo YW5rcyB0byBKdWxpZW4gYW5kIFZpamF5KQoqIEFkZGVkIGJhY2tncm91bmQgb24gTFBJIFRyYW5z bGF0aW9uIGFuZCBQZW5kaW5nIHRhYmxlcwoqIEFkZGVkIGJhY2tncm91bmQgb24gQ29sbGVjdGlv bnMKKiBTZXR0bGVkIG9uIGBOOk5gIHNjaGVtZSBmb3IgdklUUzpwYXQncyBtYXBwaW5nLgoqIFJl amlnZ2VkIHNlY3Rpb24gbmVzdGluZyBhIGJpdC4KKiBTaW5jZSB3ZSBub3cgdGhpbmcgdHJhbnNs YXRpb24gc2hvdWxkIGJlIGNoZWFwLCBzZXR0bGUgb24KICB0cmFuc2xhdGlvbiBhdCBzY2hlZHVs aW5nIHRpbWUuCiogTGF6eSBgSU5WQUxMYCBhbmQgYFNZTkNgCgojIyBTaW5jZSBEcmFmdCBBCgoq IEFkZGVkIGRpc2N1c3Npb24gb2Ygd2hlbi93aGVyZSBjb21tYW5kIHRyYW5zbGF0aW9uIG9jY3Vy cy4KKiBDb250ZW50aW9uIG9uIHNjaGVkdWxlciBsb2NrLCBzdWdnZXN0aW9uIHRvIHVzZSBTT0ZU SVJRLgoqIEhhbmRsaW5nIG9mIGRvbWFpbiBzaHV0ZG93bi4KKiBNb3JlIGRldGFpbGVkIGRpc2N1 c3Npb24gb2YgbXVsdGlwbGUgdnMgc2luZ2xlIHZpdHMgcHJvcy9jb25zLgoKIyBJbnRyb2R1Y3Rp b24KCkFSTSBzeXN0ZW1zIGNvbnRhaW5pbmcgYSBHSUMgdmVyc2lvbiAzIG9yIGxhdGVyIG1heSBj b250YWluIG9uZSBvcgptb3JlIElUUyBsb2dpY2FsIGJsb2Nrcy4gQW4gSVRTIGlzIHVzZWQgdG8g cm91dGUgTWVzc2FnZSBTaWduYWxsZWQKaW50ZXJydXB0cyBmcm9tIGRldmljZXMgaW50byBhbiBM UEkgaW5qZWN0aW9uIG9uIHRoZSBwcm9jZXNzb3IuCgpUaGUgZm9sbG93aW5nIHN1bW1hcmlzZXMg dGhlIElUUyBoYXJkd2FyZSBkZXNpZ24gYW5kIHNlcnZlcyBhcyBhIHNldApvZiBhc3N1bXB0aW9u cyBmb3IgdGhlIHZJVFMgc29mdHdhcmUgZGVzaWduLiBGb3IgZnVsbCBkZXRhaWxzIG9mIHRoZQpJ VFMgc2VlIHRoZSAiR0lDIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIi4KCiMjIExvY2FsaXR5 LXNwZWNpZmljIFBlcmlwaGVyYWwgSW50ZXJydXB0cyAoYExQSWApCgpUaGlzIGlzIGEgbmV3IGNs YXNzIG9mIG1lc3NhZ2Ugc2lnbmFsbGVkIGludGVycnVwdHMgaW50cm9kdWNlZCBpbgpHSUN2My4g VGhleSBvY2N1cHkgdGhlIGludGVycnVwdCBJRCBzcGFjZSBmcm9tIGA4MTkyLi4oMl4zMiktMWAu CgpUaGUgbnVtYmVyIG9mIExQSXMgc3VwcG9ydCBieSBhbiBJVFMgaXMgZXhwb3NlZCB2aWEKYEdJ VFNfVFlQRVIuSURiaXRzYCAoYXMgbnVtYmVyIG9mIGJpdHMgLSAxKSwgaXQgbWF5IGJlIHVwIHRv CjJeMzIuIF9Ob3RlXzogVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgRXZl bnQgSURzCnN1cHBvcnRlZCBieSB0aGUgSVRTLgoKIyMjIExQSSBDb25maWd1cmF0aW9uIFRhYmxl CgpFYWNoIExQSSBoYXMgYW4gYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGJ5dGUgaW4gdGhlIExQ SSBDb25maWd1cmF0aW9uClRhYmxlIChtYW5hZ2VkIHZpYSB0aGUgR0lDIFJlZGlzdHJpYnV0b3Ig YW5kIHBsYWNlZCBhdApgR0lDUl9QUk9QQkFTRVJgIG9yIGBHSUNSX1ZQUk9QQkFTRVJgKS4gVGhp cyBieXRlIGNvbmZpZ3VyZXM6CgoqIFRoZSBMUEkncyBwcmlvcml0eTsKKiBXaGV0aGVyIHRoZSBM UEkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KClNvZnR3YXJlIHVwZGF0ZXMgdGhlIENvbmZpZ3Vy YXRpb24gVGFibGUgZGlyZWN0bHkgYnV0IG11c3QgdGhlbiBpc3N1ZQphbiBpbnZhbGlkYXRlIGNv bW1hbmQgKHBlci1kZXZpY2UgYElOVmAgSVRTIGNvbW1hbmQsIGdsb2JhbCBgSU5WQUxMYApJVFMg Y29tbWFuZCBvciB3cml0ZSBgR0lDUl9JTlZMUElSYCkgZm9yIHRoZSBhZmZlY3QgdG8gYmUgZ3Vh cmFudGVlZAp0byBiZWNvbWUgdmlzaWJsZSAocG9zc2libHkgcmVxdWlyaW5nIGFuIElUUyBgU1lO Q2AgY29tbWFuZCB0byBlbnN1cmUKY29tcGxldGlvbiBvZiB0aGUgYElOVmAgb3IgYElOVkFMTGAp LiBOb3RlIHRoYXQgaXQgaXMgdmFsaWQgZm9yIGFuCmltcGxlbWVudGF0aW9uIHRvIHJlcmVhZCB0 aGUgY29uZmlndXJhdGlvbiB0YWJsZSBhdCBhbnkgdGltZSAoSU9XIGl0CmlzIF9ub3RfIGd1YXJh bnRlZWQgdGhhdCBhIGNoYW5nZSB0byB0aGUgTFBJIENvbmZpZ3VyYXRpb24gVGFibGUgd29uJ3QK YmUgdmlzaWJsZSB1bnRpbCBhbiBpbnZhbGlkYXRlIGlzIGlzc3VlZCkuCgojIyMgTFBJIFBlbmRp bmcgVGFibGUKCkVhY2ggTFBJIGFsc28gaGFzIGFuIGFzc29jaWF0ZWQgYml0IGluIHRoZSBMUEkg UGVuZGluZyBUYWJsZSAobWFuYWdlZApieSB0aGUgR0lDIHJlZGlzdHJpYnV0b3IpLiBUaGlzIGJp dCBzaWduYWxzIHdoZXRoZXIgdGhlIExQSSBpcyBwZW5kaW5nCm9yIG5vdC4KClRoaXMgcmVnaW9u IG1heSBjb250YWluIG91dCBvZiBkYXRlIGluZm9ybWF0aW9uIGFuZCB0aGUgbWVjaGFuaXNtIHRv CnN5bmNocm9uaXNlIGlzIGBJTVBMRU1FTlRBVElPTiBERUZJTkVEYC4KCiMjIEludGVycnVwdCBU cmFuc2xhdGlvbiBTZXJ2aWNlIChgSVRTYCkKCiMjIyBEZXZpY2UgSWRlbnRpZmllcnMKCkVhY2gg ZGV2aWNlIHVzaW5nIHRoZSBJVFMgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdW5pcXVlICJEZXZpY2UK SWRlbnRpZmllciIuCgpUaGUgZGV2aWNlIElEcyBhcmUgcHJvcGVydGllcyBvZiB0aGUgaW1wbGVt ZW50YXRpb24gYW5kIGFyZSB0eXBpY2FsbHkKZGVzY3JpYmVkIHZpYSBzeXN0ZW0gZmlybXdhcmUs IGUuZy4gdGhlIEFDUEkgSU9SVCB0YWJsZSBvciB2aWEgZGV2aWNlCnRyZWUuCgpUaGUgbnVtYmVy IG9mIGRldmljZSBpZHMgaW4gYSBzeXN0ZW0gZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50YXRpb24g YW5kCmNhbiBiZSBkaXNjb3ZlcmVkIHZpYSBgR0lUU19UWVBFUi5EZXZiaXRzYC4gVGhpcyBmaWVs ZCBhbGxvd3MgYW4gSVRTCnRvIGhhdmUgdXAgdG8gMl4zMiBkZXZpY2VzLgoKIyMjIEV2ZW50cwoK RWFjaCBkZXZpY2UgY2FuIGdlbmVyYXRlICJFdmVudHMiIChjYWxsZWQgYElEYCBpbiB0aGUgc3Bl YykgdGhlc2UKY29ycmVzcG9uZCB0byBwb3NzaWJsZSBpbnRlcnJ1cHQgc291cmNlcyBpbiB0aGUg ZGV2aWNlIChlLmcuIE1TSQpvZmZzZXQpLgoKVGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVw dCBzb3VyY2VzIGlzIGRldmljZSBzcGVjaWZpYy4gSXQgaXMKdXN1YWxseSBkaXNjb3ZlcmVkIGVp dGhlciBmcm9tIGZpcm13YXJlIHRhYmxlcyAoZS5nLiBEVCBvciBBQ1BJKSBvcgpmcm9tIGJ1cyBz cGVjaWZpYyBtZWNoYW5pc21zIChlLmcuIFBDSSBjb25maWcgc3BhY2UpLgoKVGhlIG1heGltdW0g bnVtYmVyIG9mIGV2ZW50cyBpZHMgc3VwcG9ydCBieSBhbiBJVFMgaXMgZXhwb3NlZCB2aWEKYEdJ VFNfVFlQRVIuSURiaXRzYCAoYXMgbnVtYmVyIG9mIGJpdHMgLSAxKSwgaXQgbWF5IGJlIHVwIHRv CjJeMzIuIF9Ob3RlXzogVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYExQ SXNgIHN1cHBvcnRlZApieSB0aGUgSVRTLgoKIyMjIEludGVycnVwdCBDb2xsZWN0aW9ucwoKRWFj aCBpbnRlcnJ1cHQgaXMgYSBtZW1iZXIgb2YgYW4gIkludGVycnVwdCBDb2xsZWN0aW9uIi4gVGhp cyBhbGxvd3MKc29mdHdhcmUgdG8gbWFuYWdlIGxhcmdlIG51bWJlcnMgb2YgcGh5c2ljYWwgaW50 ZXJydXB0cyB3aXRoIGEgc21hbGwKbnVtYmVyIG9mIGNvbW1hbmRzIHJhdGhlciB0aGFuIGlzc3Vp bmcgb25lIGNvbW1hbmQgcGVyIGludGVycnVwdC4KCk9uIGEgc3lzdGVtIHdpdGggTiBwcm9jZXNz b3JzLCB0aGUgSVRTIG11c3QgcHJvdmlkZSBhdCBsZWFzdCBOKzEKY29sbGVjdGlvbnMuCgpBbiBJ VFMgbWF5IHN1cHBvcnQgc29tZSBudW1iZXIgb2YgaW50ZXJuYWwgY29sbGVjdGlvbnMgKGluZGlj YXRlZCBieQpgR0lUU19UWVBFUi5IQ0NgKSBhbmQgZXh0ZXJuYWwgb25lcyB3aGljaCByZXF1aXJl IG1lbW9yeSBwcm92aXNpb25lZApieSB0aGUgT3BlcmF0aW5nIFN5c3RlbSB2aWEgYSBgR0lUU19C QVNFUm5gIHJlZ2lzdGVyLgoKIyMjIFRhcmdldCBBZGRyZXNzZXMKClRoZSBUYXJnZXQgQWRkcmVz cyBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMgR0lDIHJlLWRpc3RyaWJ1dG9yLiBUaGUKZm9ybWF0 IG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIGBHSVRTX1RZUEVSLlBU QWAgYml0OgoKKiAxOiB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZS1kaXN0cmlidXRvciB0YXJn ZXQgaXMgdXNlZAoqIDA6IGEgdW5pcXVlIHByb2Nlc3NvciBudW1iZXIgaXMgdXNlZC4gVGhlIG1h cHBpbmcgYmV0d2VlbiB0aGUKICBwcm9jZXNzb3IgYWZmaW5pdHkgdmFsdWUgKGBNUElEUmApIGFu ZCB0aGUgcHJvY2Vzc29yIG51bWJlciBpcwogIGRpc2NvdmVyYWJsZSB2aWEgYEdJQ1JfVFlQRVIu UHJvY2Vzc29yTnVtYmVyYC4KClRoaXMgdmFsdWUgaXMgdXAgdG8gdGhlIElUUyBpbXBsZW1lbnRl ciAoYEdJVFNfVFlQRVJgIGlzIGEgcmVhZC1vbmx5CnJlZ2lzdGVyKS4KCiMjIyBEZXZpY2UgVGFi bGUKCkEgRGV2aWNlIFRhYmxlIGlzIGNvbmZpZ3VyZWQgaW4gZWFjaCBJVFMgd2hpY2ggbWFwcyBp bmNvbWluZyBkZXZpY2UKaWRlbnRpZmllcnMgaW50byBhbiBJVFMgSW50ZXJydXB0IFRyYW5zbGF0 aW9uIFRhYmxlLgoKIyMjIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSAoYElUVGApIGFuZCBD b2xsZWN0aW9uIFRhYmxlCgpBbiBgRXZlbnRgIGdlbmVyYXRlZCBieSBhIGBEZXZpY2VgIGlzIHRy YW5zbGF0ZWQgaW50byBhbiBgTFBJYCB2aWEgYQpwZXItRGV2aWNlIEludGVycnVwdCBUcmFuc2xh dGlvbiBUYWJsZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRhYmxlIGlzCmRlc2NyaWJlZCBpbiBH SUMgU3BlYyA0LjkuMTIuCgpUaGUgSVRTIHRyYW5zbGF0aW9uIHRhYmxlIG1hcHMgdGhlIGRldmlj ZSBpZCBvZiB0aGUgb3JpZ2luYXRpbmcgZGV2aWNlCmludG8gYSBwaHlzaWNhbCBpbnRlcnJ1cHQg KGBMUElgKSBhbmQgYW4gSW50ZXJydXB0IENvbGxlY3Rpb24uCgpUaGUgQ29sbGVjdGlvbiBpcyBp biB0dXJuIGxvb2tlZCB1cCBpbiB0aGUgQ29sbGVjdGlvbiBUYWJsZSB0byBwcm9kdWNlCmEgVGFy Z2V0IEFkZHJlc3MsIGluZGljYXRpbmcgYSByZWRpc3RyaWJ1dG9yIChBS0EgQ1BVKSB0byB3aGlj aCB0aGUKTFBJIGlzIGRlbGl2ZXJlZC4KCiMjIyBPUyBQcm92aXNpb25lZCBNZW1vcnkgUmVnaW9u cwoKVGhlIElUUyBoYXJkd2FyZSBkZXNpZ24gcHJvdmlkZXMgbWVjaGFuaXNtcyBmb3IgYW4gSVRT IHRvIGJlIHByb3ZpZGVkCndpdGggdmFyaW91cyBibG9ja3Mgb2YgbWVtb3J5IGJ5IHRoZSBPUyBm b3IgSVRTIGludGVybmFsIHVzZSwgdGhpcwppbmNsdWRlIHRoZSBwZXItZGV2aWNlIElUVCAoZXN0 YWJsaXNoZWQgd2l0aCBgTUFQRGApIGFuZCBtZW1vcnkKcmVnaW9ucyBmb3IgRGV2aWNlIFRhYmxl cywgVmlydHVhbCBQcm9jZXNzb3JzIGFuZCBJbnRlcnJ1cHQKQ29sbGVjdGlvbnMuIFVwIHRvIDgg c3VjaCByZWdpb25zIGNhbiBiZSByZXF1ZXN0ZWQgYnkgdGhlIElUUyBhbmQKcHJvdmlzaW9uZWQg YnkgdGhlIE9TIHZpYSB0aGUgYEdJVFNfQkFTRVJuYCByZWdpc3RlcnMuCgojIyMgSVRTIENvbmZp Z3VyYXRpb24KClRoZSBJVFMgaXMgY29uZmlndXJlZCBhbmQgbWFuYWdlZCwgaW5jbHVkaW5nIGVz dGFibGlzaGluZyBhbmQKY29uZmlndXJpbmcgdGhlIFRyYW5zbGF0aW9uIFRhYmxlcyBhbmQgQ29s bGVjdGlvbiBUYWJsZSwgdmlhIGFuIGluCm1lbW9yeSByaW5nIHNoYXJlZCBiZXR3ZWVuIHRoZSBD UFUgYW5kIHRoZSBJVFMgY29udHJvbGxlci4gVGhlIHJpbmcgaXMKbWFuYWdlZCB2aWEgdGhlIGBH SVRTX0NCQVNFUmAgcmVnaXN0ZXIgYW5kIGluZGV4ZWQgYnkgYEdJVFNfQ1dSSVRFUmAKYW5kIGBH SVRTX0NSRUFEUmAgcmVnaXN0ZXJzLgoKQSBwcm9jZXNzb3IgYWRkcyBjb21tYW5kcyB0byB0aGUg c2hhcmVkIHJpbmcgYW5kIHRoZW4gdXBkYXRlcwpgR0lUU19DV1JJVEVSYCB0byBtYWtlIHRoZW0g dmlzaWJsZSB0byB0aGUgSVRTIGNvbnRyb2xsZXIuCgpUaGUgSVRTIGNvbnRyb2xsZXIgcHJvY2Vz c2VzIGNvbW1hbmRzIGZyb20gdGhlIHJpbmcgYW5kIHRoZW4gdXBkYXRlcwpgR0lUU19DUkVBRFJg IHRvIGluZGljYXRlIHRoZSB0aGUgcHJvY2Vzc29yIHRoYXQgdGhlIGNvbW1hbmQgaGFzIGJlZW4K cHJvY2Vzc2VkLgoKQ29tbWFuZHMgYXJlIHByb2Nlc3NlZCBzZXF1ZW50aWFsbHkuCgpDb21tYW5k cyBzZW50IG9uIHRoZSByaW5nIGluY2x1ZGUgb3BlcmF0aW9uYWwgY29tbWFuZHM6CgoqIFJvdXRp bmcgaW50ZXJydXB0cyB0byBwcm9jZXNzb3JzOwoqIEdlbmVyYXRpbmcgaW50ZXJydXB0czsKKiBD bGVhcmluZyB0aGUgcGVuZGluZyBzdGF0ZSBvZiBpbnRlcnJ1cHRzOwoqIFN5bmNocm9uaXNpbmcg dGhlIGNvbW1hbmQgcXVldWUKCmFuZCBtYWludGVuYW5jZSBjb21tYW5kczoKCiogTWFwIGRldmlj ZS9jb2xsZWN0aW9uL3Byb2Nlc3NvcjsKKiBNYXAgdmlydHVhbCBpbnRlcnJ1cHQ7CiogQ2xlYW4g aW50ZXJydXB0czsKKiBEaXNjYXJkIGludGVycnVwdHM7CgpUaGUgZmllbGQgYEdJVFNfQ0JBU0VS LlNpemVgIGVuY29kZXMgdGhlIG51bWJlciBvZiA0S0IgcGFnZXMgbWludXMgMApjb25zaXN0aW5n IG9mIHRoZSBjb21tYW5kIHF1ZXVlLiBUaGlzIGZpZWxkIGlzIDggYml0cyB3aGljaCBtZWFucyB0 aGUKbWF4aW11bSBzaXplIGlzIDJeOCAqIDRLQiA9IDFNQi4gR2l2ZW4gdGhhdCBlYWNoIGNvbW1h bmQgaXMgMzIgYnl0ZXMsCnRoZXJlIGlzIGEgbWF4aW11bSBvZiAzMjc2OCBjb21tYW5kcyBpbiB0 aGUgcXVldWUuCgpUaGUgSVRTIHByb3ZpZGVzIG5vIHNwZWNpZmljIGNvbXBsZXRpb24gbm90aWZp Y2F0aW9uCm1lY2hhbmlzbS4gQ29tcGxldGlvbiBpcyBtb25pdG9yZWQgYnkgYSBjb21iaW5hdGlv biBvZiBhIGBTWU5DYApjb21tYW5kIGFuZCBlaXRoZXIgcG9sbGluZyBgR0lUU19DUkVBRFJgIG9y IG5vdGlmaWNhdGlvbiB2aWEgYW4KaW50ZXJydXB0IGdlbmVyYXRlZCB2aWEgdGhlIGBJTlRgIGNv bW1hbmQuCgpOb3RlIHRoYXQgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIHZpYSBgSU5UYCByZXF1 aXJlcyBhbiBvcmlnaW5hdGluZwpkZXZpY2UgSUQgdG8gYmUgc3VwcGxpZWQgKHdoaWNoIGlzIHRo ZW4gdHJhbnNsYXRlZCB2aWEgdGhlIElUUyBpbnRvIGFuCkxQSSkuIE5vIHNwZWNpZmljIGRldmlj ZSBJRCBpcyBkZWZpbmVkIGZvciB0aGlzIHB1cnBvc2UgYW5kIHNvIHRoZSBPUwpzb2Z0d2FyZSBp cyBleHBlY3RlZCB0byBmYWJyaWNhdGUgb25lLgoKUG9zc2libGUgd2F5cyBvZiBpbnZlbnRpbmcg c3VjaCBhIGRldmljZSBJRCBhcmU6CgoqIEVudW1lcmF0ZSBhbGwgZGV2aWNlIGlkcyBpbiB0aGUg c3lzdGVtIGFuZCBwaWNrIGFub3RoZXIgb25lOwoqIFVzZSBhIFBDSSBCREYgYXNzb2NpYXRlZCB3 aXRoIGEgbm9uLWV4aXN0ZW50IGRldmljZSBmdW5jdGlvbiAoc3VjaAogIGFzIGFuIHVudXNlZCBv bmUgcmVsYXRpbmcgdG8gdGhlIFBDSSByb290LWJyaWRnZSkgYW5kIHRyYW5zbGF0ZSB0aGF0CiAg KHZpYSBmaXJtd2FyZSB0YWJsZXMpIGludG8gYSBzdWl0YWJsZSBkZXZpY2UgaWQ7CiogPz8/Cgoj IExQSSBIYW5kbGluZyBpbiBYZW4KCiMjIElSUSBkZXNjcmlwdG9ycwoKQ3VycmVudGx5IGFsbCBT R0kvUFBJL1NQSSBpbnRlcnJ1cHRzIGFyZSBjb3ZlcmVkIGJ5IGEgc2luZ2xlIHN0YXRpYwphcnJh eSBvZiBgc3RydWN0IGlycV9kZXNjYCB3aXRoIH4xMDI0IGVudHJpZXMgKHRoZSBtYXhpbXVtIGlu dGVycnVwdApudW1iZXIgaW4gdGhhdCBzZXQgb2YgaW50ZXJydXB0IHR5cGVzKS4KClRoZSBhZGRp dGlvbiBvZiBMUElzIGluIEdJQ3YzIG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgcG90ZW50aWFsCmlu dGVycnVwdCBzcGVjaWZpZXIgaXMgbXVjaCBsYXJnZXIuCgpUaGVyZWZvcmUgYSBzZWNvbmQgZHlu YW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IHdpbGwgYmUgYWRkZWQgdG8gY292ZXIKdGhlIHJhbmdl IGA4MTkyLi5ucl9scGlzYC4gVGhlIGBpcnFfdG9fZGVzY2AgZnVuY3Rpb24gd2lsbCBkZXRlcm1p bmUKd2hpY2ggYXJyYXkgdG8gdXNlIChzdGF0aWMgYDAuLjEwMjRgIG9yIGR5bmFtaWMgYDgxOTIu LmVuZGAgbHBpIGRlc2MKYXJyYXkpIGJhc2VkIG9uIHRoZSBpbnB1dCBpcnEgbnVtYmVyLiBUd28g YXJyYXlzIGFyZSB1c2VkIHRvIGF2b2lkIGEKd2FzdGVmdWwgYWxsb2NhdGlvbiBjb3ZlcmluZyB0 aGUgdW51c2VkL3VudXNhYmxlKSBgMTAyNC4uODE5MWAgcmFuZ2UuCgojIyBWaXJ0dWFsIExQSSBp bnRlcnJ1cHQgaW5qZWN0aW9uCgpBIHBoeXNpY2FsIGludGVycnVwdCB3aGljaCBpcyByb3V0ZWQg dG8gYSBndWVzdCB2Q1BVIGhhcyB0aGUKYF9JUlFfR1VFU1RgIGZsYWcgc2V0IGluIHRoZSBgaXJx X2Rlc2NgIHN0YXR1cyBtYXNrLiBTdWNoIGludGVycnVwdHMKaGF2ZSBhbiBhc3NvY2lhdGVkIGlu c3RhbmNlIG9mIGBzdHJ1Y3QgaXJxX2d1ZXN0YCB3aGljaCBjb250YWlucyB0aGUKdGFyZ2V0IGBz dHJ1Y3QgZG9tYWluYCBwb2ludGVyIGFuZCB2aXJ0dWFsIGludGVycnVwdCBudW1iZXIuCgpJbiBY ZW4gYSB2aXJ0dWFsIGludGVycnVwdCAoZWl0aGVyIGFyaXNpbmcgZnJvbSBhIHBoeXNpY2FsIGlu dGVycnVwdApvciBjb21wbGV0ZWx5IHZpcnR1YWwpIGlzIHVsdGltYXRlbHkgaW5qZWN0ZWQgdG8g YSBWQ1BVIHVzaW5nIHRoZQpgdmdpY192Y3B1X2luamVjdF9pcnFgIGZ1bmN0aW9uLCBvciBgdmdp Y192Y3B1X2luamVjdF9scGlgLgoKVGhpcyBtZWNoYW5pc20gd2lsbCBsaWtlbHkgbmVlZCB1cGRh dGluZyB0byBoYW5kbGUgdGhlIGluamVjdGlvbiBvZgp2aXJ0dWFsIExQSXMuIEluIHBhcnRpY3Vs YXIgcmF0aGVyIHRoYW4gYEdJQ0RfSVRBUkdFUlJuYCBvcgpgR0lDRF9JUk9VVEVSbmAgcm91dGlu ZyBvZiBMUElzIGlzIHBlcmZvcm1lZCB2aWEgdGhlIElUUyBjb2xsZWN0aW9ucwptZWNoYW5pc20u IFRoaXMgaXMgZGlzY3Vzc2VkIGJlbG93IChJbiBfdklUU186X1ZpcnR1YWwgTFBJIGluamVjdGlv bl8pLgoKIyBTY29wZQoKVGhlIElUUyBpcyByYXRoZXIgY29tcGxpY2F0ZWQsIGVzcGVjaWFsbHkg d2hlbiBjb21iaW5lZCB3aXRoCnZpcnR1YWxpc2F0aW9uLiBUbyBzaW1wbGlmeSB0aGluZ3Mgd2Ug aW5pdGlhbGx5IG9taXQgdGhlIGZvbGxvd2luZwpmdW5jdGlvbmFsaXR5OgoKLSBJbnRlcnJ1cHQg LT4gdkNQVSAtPiBwQ1BVIGFmZmluaXR5LiBUaGUgbWFuYWdlbWVudCBvZiBwaHlzaWNhbCB2cwog IHZpcnR1YWwgQ29sbGVjdGlvbnMgaXMgYSBmZWF0dXJlIG9mIEdJQ3Y0LCB0aHVzIGlzIG9taXR0 ZWQgaW4gdGhpcwogIGRlc2lnbiBmb3IgR0lDdjMuIFBoeXNpY2FsIGludGVycnVwdHMgd2hpY2gg b2NjdXIgb24gYSBwQ1BVIHdoZXJlCiAgdGhlIHRhcmdldCB2Q1BVIGlzIG5vdCBhbHJlYWR5IHJl c2lkZW50IHdpbGwgYmUgZm9yd2FyZGVkICh2aWEgSVBJKQogIHRvIHRoZSBjb3JyZWN0IHBDUFUg Zm9yIGluamVjdGlvbiB2aWEgdGhlIGV4aXN0aW5nCiAgYHZnaWNfdmNwdV9pbmplY3RfaXJxYCBt ZWNoYW5pc20gKGV4dGVuZGVkIHRvIGhhbmRsZSBMUEkgaW5qZWN0aW9uCiAgY29ycmVjdGx5KS4K LSBDbGVhcmluZyBvZiB0aGUgcGVuZGluZyBzdGF0ZSBvZiBhbiBMUEkgdW5kZXIgdmFyaW91cyBj aXJjdW1zdGFuY2VzCiAgKGBNT1ZJYCwgYERJU0NBUkRgLCBgQ0xFQVJgIGNvbW1hbmRzKSBpcyBu b3QgZG9uZS4gVGhpcyB3aWxsIHJlc3VsdAogIGluIGd1ZXN0cyBzZWVpbmcgc29tZSBwZXJoYXBz IHNwdXJpb3VzIGludGVycnVwdHMuCi0gdklUUyBmdW5jdGlvbmFsaXR5IHdpbGwgb25seSBiZSBh dmFpbGFibGUgb24gNjQtYml0IEFSTSBob3N0cywKICBhdm9pZGluZyB0aGUgbmVlZCB0byB3b3Jy eSBhYm91dCBmYXN0IGFjY2VzcyB0byBndWVzdCBvd25lZCBkYXRhCiAgc3RydWN0dXJlcyAoNjQt Yml0IHVzZXMgYSBkaXJlY3QgbWFwKS4gKE5COiAzMi1iaXQgZ3Vlc3RzIG9uIDY0LWJpdAogIGhv c3RzIGNhbiBiZSBjb25zaWRlcmVkIHRvIGhhdmUgYWNjZXNzKQoKIyBwSVRTCgojIyBBc3N1bXB0 aW9ucwoKSXQgaXMgYXNzdW1lZCB0aGF0IGBHSVRTX1RZUEVSLklEYml0c2AgaXMgbGFyZ2UgZW5v dWdoIHRoYXQgdGhlcmUgYXJlCnN1ZmZpY2llbnQgTFBJcyBhdmFpbGFibGUgdG8gY292ZXIgdGhl IHN1bSBvZiB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCmV2ZW50cyBnZW5lcmF0ZWQgYnkgZWFjaCBk ZXZpY2UgaW4gdGhlIHN5c3RlbSAodGhhdCBpcyB0aGUgc3VtIG9mIHRoZQphY3R1YWwgZXZlbnRz IGZvciBlYWNoIGJpdCBvZiBoYXJkd2FyZSwgcmF0aGVyIHRoYW4gdGhlIG5vdGlvbmFsCnBlci1k ZXZpY2UgbWF4aW11bSBmcm9tIGBHSVRTX1RZUEVSLklkYml0c2ApLgoKVGhpcyBhc3N1bXB0aW9u IGF2b2lkcyB0aGUgbmVlZCB0byBkbyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGludGVycnVwdApy b3V0aW5nIGF0IHJ1biB0aW1lLCBlLmcuIGR1cmluZyBjb21tYW5kIHByb2Nlc3NpbmcgYnkgYWxs b3dpbmcgdXMgdG8Kc2V0dXAgZXZlcnl0aGluZyB1cCBmcm9udC4KCiMjIERyaXZlcgoKVGhlIHBo eXNpY2FsIGRyaXZlciB3aWxsIHByb3ZpZGUgZnVuY3Rpb25zIGZvciBlbmFibGluZywgZGlzYWJs aW5nCnJvdXRpbmcgZXRjIGEgc3BlY2lmaWVkIGludGVycnVwdCwgdmlhIHRoZSB1c3VhbCBYZW4g QVBJcyBmb3IgZG9pbmcKc3VjaCB0aGluZ3MuCgpUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgaW50 ZXJhY3Rpbmcgd2l0aCB0aGUgcGh5c2ljYWwgSVRTIGNvbW1hbmQKcXVldWUgZXRjLiBJbiB0aGlz IGRvY3VtZW50IHN1Y2ggaW50ZXJhY3Rpb25zIGFyZSBjb25zaWRlcmVkIGludGVybmFsCnRvIHRo ZSBkcml2ZXIgKGkuZS4gd2UgY2FyZSB0aGF0IHRoZSBBUEkgdG8gZW5hYmxlIGFuIGludGVycnVw dApleGlzdHMsIG5vdCBob3cgaXQgaXMgaW1wbGVtZW50ZWQpLgoKVGhlIHBoeXNpY2FsIElUUyB3 aWxsIGJlIHByb3Zpc2lvbmVkIHdpdGggd2hhdGV2ZXIgdGFibGVzIGl0IHJlcXVlc3RzCnZpYSBp dHMgYEdJVFNfQkFTRVJuYCByZWdpc3RlcnMuCgojIyBDb2xsZWN0aW9ucwoKVGhlIGBwSVRTYCB3 aWxsIGJlIGNvbmZpZ3VyZWQgYXQgc3RhcnQgb2YgZGF5IHdpdGggMSBDb2xsZWN0aW9uIG1hcHBl ZAp0byBlYWNoIHBoeXNpY2FsIHByb2Nlc3NvciwgdXNpbmcgdGhlIGBNQVBDYCBjb21tYW5kIG9u IHRoZSBwaHlzaWNhbApJVFMuCgojIyBQZXIgRGV2aWNlIEluZm9ybWF0aW9uCgpFYWNoIHBoeXNp Y2FsIGRldmljZSBpbiB0aGUgc3lzdGVtIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg YW4KSVRTICh3aGV0aGVyIHVzaW5nIHBhc3N0aHJvdWdoIG9yIG5vdCkgd2lsbCBoYXZlIGFzc29j aWF0ZWQgd2l0aCBpdCBhCmRhdGEgc3RydWN0dXJlOgoKICAgIHN0cnVjdCBpdHNfZGV2aWNlIHsK ICAgICAgICBzdHJ1Y3QgcGl0cyAqcGl0czsKICAgICAgICB1aW50Tk5fdCBwaHlzX2RldmljZV9p ZDsKICAgICAgICB1aW50Tk5fdCB2aXJ0X2RldmljZV9pZDsKICAgICAgICB1bnNpZ25lZCBpbnQg KmV2ZW50czsKICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzOwogICAgICAgIHN0cnVjdCBw YWdlX2luZm8gKnBpdHQ7CiAgICAgICAgdW5zaWduZWQgaW50IG5yX3BpdHRfcGFnZXM7CiAgICAg ICAgLyogT3RoZXIgZmllbGRzIHJlbGF0aW5nIHRvIHBJVFMgbWFpbnRlbmFuY2UgYnV0IHVucmVs YXRlZCB0byB2SVRTICovCiAgICB9OwoKV2hlcmU6CgotIGBwaXRzYDogUG9pbnRlciB0byB0aGUg YXNzb2NpYXRlZCBwaHlzaWNhbCBJVFMuCi0gYHBoeXNfZGV2aWNlX2lkYDogVGhlIHBoeXNpY2Fs IGRldmljZSBJRCBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlCi0gYHZpcnRfZGV2aWNlX2lkYDogVGhl IHZpcnR1YWwgZGV2aWNlIElEIGlmIHRoZSBkZXZpY2UgaXMgYWNjZXNzaWJsZQogIHRvIGEgZG9t YWluCi0gYGV2ZW50c2A6IEFuIGFycmF5IG1hcHBpbmcgYSBwZXItZGV2aWNlIGV2ZW50IG51bWJl ciBpbnRvIGEgcGh5c2ljYWwKICBMUEkuCi0gYG5yX2V2ZW50c2A6IFRoZSBudW1iZXIgb2YgZXZl bnRzIHdoaWNoIHRoaXMgZGV2aWNlIGlzIGFibGUgdG8KICBnZW5lcmF0ZS4KLSBgcGl0dGAsIGBu cl9waXR0X3BhZ2VzYDogUmVjb3JkcyBhbGxvY2F0aW9uIG9mIHBhZ2VzIGZvciBwaHlzaWNhbAog IElUVCAobm90IGRpcmVjdGx5IGFjY2Vzc2libGUpLgoKRHVyaW5nIGl0cyBsaWZldGltZSB0aGlz IHN0cnVjdHVyZSBtYXkgYmUgcmVmZXJlbmNlZCBieSBzZXZlcmFsCmRpZmZlcmVudCBtYXBwaW5n cyAoZS5nLiBwaHlzaWNhbCBhbmQgdmlydHVhbCBkZXZpY2UgaWQgbWFwcywgdmlydHVhbApjb2xs ZWN0aW9uIGRldmljZSBpZCkuCgojIyBEZXZpY2UgRGlzY292ZXJ5L1JlZ2lzdHJhdGlvbiBhbmQg Q29uZmlndXJhdGlvbgoKUGVyIGRldmljZSBpbmZvcm1hdGlvbiB3aWxsIGJlIGRpc2NvdmVyZWQg YmFzZWQgb24gZmlybXdhcmUgdGFibGVzIChEVApvciBBQ1BJKSBhbmQgaW5mb3JtYXRpb24gcHJv dmlkZWQgYnkgZG9tMCAoZS5nLiByZWFkaW5nIGFzc29jaWF0ZWQgUENJCmNmZyBzcGFjZSwgcmVn aXN0cmF0aW9uIHZpYSBQSFlTREVWT1BfcGNpX2RldmljZV9hZGQgb3IgbmV3IGN1c3RvbQpoeXBl cmNhbGxzKS4KClRoaXMgaW5mb3JtYXRpb24gc2hhbGwgaW5jbHVkZSBhdCBsZWFzdDoKCi0gVGhl IERldmljZSBJRCBvZiB0aGUgZGV2aWNlLgotIFRoZSBtYXhpbXVtIG51bWJlciBvZiBFdmVudHMg d2hpY2ggdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mCiAgZ2VuZXJhdGluZy4KCldoZW4gYSBkZXZp Y2UgaXMgZGlzY292ZXJlZC9yZWdpc3RlcmVkIChpLmUuIHdoZW4gYWxsIG5lY2Vzc2FyeQppbmZv cm1hdGlvbiBpcyBhdmFpbGFibGUpIHRoZW46CgotIGBzdHJ1Y3QgaXRzX2RldmljZWAgYW5kIHRo ZSBlbWJlZGRlZCBgZXZlbnRzYCBhcnJheSB3aWxsIGJlCiAgYWxsb2NhdGVkICh0aGUgbGF0dGVy IHdpdGggYG5yX2V2ZW50c2AgZWxlbWVudHMpLgotIFRoZSBgc3RydWN0IGl0c19kZXZpY2VgIHdp bGwgYmUgaW5zZXJ0ZWQgaW50byBhIG1hcHBpbmcgKHBvc3NpYmx5IGFuCiAgUi1CIHRyZWUpIGZy b20gaXRzIHBoeXNpY2FsIERldmljZSBJRCB0byB0aGUgYHN0cnVjdCBpdHNgLgotIGBucl9ldmVu dHNgIHBoeXNpY2FsIExQSXMgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIHJlY29yZGVkIGluIHRoZQog IGBldmVudHNgIGFycmF5LgotIEFuIElUVCB0YWJsZSB3aWxsIGJlIGFsbG9jYXRlZCBmb3IgdGhl IGRldmljZSBhbmQgdGhlIGFwcHJvcHJpYXRlCiAgYE1BUERgIGNvbW1hbmQgd2lsbCBiZSBpc3N1 ZWQgdG8gdGhlIHBoeXNpY2FsIElUUy4gVGhlIGxvY2F0aW9uIHdpbGwKICBiZSByZWNvcmRlZCBp biBgc3RydWN0IGl0c19kZXZpY2UucGl0dGAuCi0gRWFjaCBFdmVudCB3aGljaCB0aGUgZGV2aWNl IG1heSBnZW5lcmF0ZSB3aWxsIGJlIG1hcHBlZCB0byB0aGUKICBjb3JyZXNwb25kaW5nIExQSSBp biB0aGUgYGV2ZW50c2AgYXJyYXkgYW5kIGEgY29sbGVjdGlvbiwgYnkgaXNzdWluZwogIGEgc2Vy aWVzIG9mIGBNQVBWSWAgY29tbWFuZHMuIEV2ZW50cyB3aWxsIGJlIGFzc2lnbmVkIHRvIHBoeXNp Y2FsCiAgY29sbGVjdGlvbnMgaW4gYSByb3VuZC1yb2JpbiBmYXNoaW9uLgoKVGhpcyBzZXR1cCBt dXN0IG9jY3VyIGZvciBhIGdpdmVuIGRldmljZSBiZWZvcmUgYW55IElUUyBpbnRlcnJ1cHRzIG1h eQpiZSBjb25maWd1cmVkIGZvciB0aGUgZGV2aWNlIGFuZCBjZXJ0YWlubHkgYmVmb3JlIGEgZGV2 aWNlIGlzIHBhc3NlZAp0aHJvdWdoIHRvIGEgZ3Vlc3QuIFRoaXMgaW1wbGllcyB0aGF0IGRvbTAg Y2Fubm90IHVzZSBNU0lzIG9uIGEgUENJCmRldmljZSBiZWZvcmUgaGF2aW5nIGNhbGxlZCBgUEhZ U0RFVk9QX3BjaV9kZXZpY2VfYWRkYC4KCiMgRGV2aWNlIEFzc2lnbm1lbnQKCkVhY2ggZG9tYWlu IHdpbGwgaGF2ZSBhbiBhc3NvY2lhdGVkIG1hcHBpbmcgZnJvbSB2aXJ0dWFsIGRldmljZSBpZHMK aW50byBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHBoeXNpY2FsIGRldmljZSwgaW5j bHVkaW5nIGEKcmVmZXJlbmNlIHRvIHRoZSByZWxldmFudCBgc3RydWN0IGl0c19kZXZpY2VgLgoK VGhlIG51bWJlciBvZiBwb3NzaWJsZSBkZXZpY2UgSURzIG1heSBiZSBsYXJnZSBzbyBhIHNpbXBs ZSBhcnJheSBvcgpsaXN0IGlzIGxpa2VseSB1bnN1aXRhYmxlLiBBIHRyZWUgKGUuZy4gUmVkLUJs YWNrIG1heSBiZSBhIHN1aXRhYmxlCmRhdGEgc3RydWN0dXJlLiBDdXJyZW50bHkgd2UgZG8gbm90 IG5lZWQgdG8gcGVyZm9ybSBsb29rdXBzIGluIHRoaXMKdHJlZSBvbiBhbnkgaG90IHBhdGhzLgoK X05vdGVfOiBJbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXNlZCBkZXZpY2UgaWRzIChlc3BlY2lh bGx5IGZvciBkb21VKQppdCBtYXkgYmUgcG9zc2libGUgdG8gYXJyYW5nZSBmb3IgdGhlIHVwcGVy IGJvdW5kIG9uIHRoZSBudW1iZXIgb2YKZGV2aWNlIElEcyB0byBiZSBsb3dlciBhbGxvd2luZyBh IG1vcmUgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlIHRvIGJlCnVzZWQuIFRoaXMgaXMgbGVmdCBm b3IgYSBmdXR1cmUgaW1wcm92ZW1lbnQuCgpXaGVuIGEgZGV2aWNlIGlzIGFzc2lnbmVkIHRvIGEg ZG9tYWluIChpbmNsdWRpbmcgdG8gZG9tYWluIDApIHRoZQptYXBwaW5nIGZvciB0aGUgbmV3IHZp cnR1YWwgZGV2aWNlIElEIHdpbGwgYmUgZW50ZXJlZCBpbnRvIHRoZSB0cmVlLgoKRHVyaW5nIGFz c2lnbm1lbnQgYWxsIExQSXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2Ugd2lsbCBiZSByb3V0 ZWQKdG8gdGhlIGd1ZXN0IChpLmUuIGByb3V0ZV9pcnFfdG9fZ3Vlc3RgIHdpbGwgYmUgY2FsbGVk IGZvciBlYWNoIExQSSBpbgp0aGUgYHN0cnVjdCBpdHNfZGV2aWNlLmV2ZW50c2AgYXJyYXkpIGFu ZCB0aGUgcExQSSB3aWxsIGJlIGVuYWJsZWQgaW4KdGhlIHBoeXNpY2FsIExQSSBjb25maWd1cmF0 aW9uIHRhYmxlIHdpdGggYSBwcmlvcml0eSBvZiBgR0lDX1BSSV9JUlFgCihub3QgYW55IHByaW9y aXR5IGZyb20gdGhlIGd1ZXN0KS4KCiMgdklUUwoKQSBndWVzdCBkb21haW4gd2hpY2ggaXMgYWxs b3dlZCB0byB1c2UgSVRTIGZ1bmN0aW9uYWxpdHkgKGkuZS4gaGFzCmJlZW4gYXNzaWduZWQgcGFz cy10aHJvdWdoIGRldmljZXMgd2hpY2ggY2FuIGdlbmVyYXRlIE1TSXMpIHdpbGwgYmUKcHJlc2Vu dGVkIHdpdGggYSB2aXJ0dWFsaXNlZCBJVFMuCgpBY2Nlc3NlcyB0byB0aGUgdklUUyByZWdpc3Rl cnMgd2lsbCB0cmFwIHRvIFhlbiBhbmQgYmUgZW11bGF0ZWQgYW5kIGEKdmlydHVhbGlzZWQgQ29t bWFuZCBRdWV1ZSB3aWxsIGJlIHByb3ZpZGVkLgoKQ29tbWFuZHMgZW50ZXJlZCBvbnRvIHRoZSB2 aXJ0dWFsIENvbW1hbmQgUXVldWUgd2lsbCBiZSB0cmFuc2xhdGVkCmludG8gcGh5c2ljYWwgY29t bWFuZHMsIGFzIGRlc2NyaWJlZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKVGhlcmUgYXJlIG90 aGVyIGFzcGVjdHMgdG8gdmlydHVhbGlzaW5nIHRoZSBJVFMgKExQSSBjb2xsZWN0aW9uCm1hbmFn ZW1lbnQsIGFzc2lnbm1lbnQgb2YgTFBJIHJhbmdlcyB0byBndWVzdHMsIGRldmljZQptYW5hZ2Vt ZW50KS4gSG93ZXZlciB0aGVzZSBhcmUgb25seSBjb25zaWRlcmVkIGhlcmUgdG8gdGhlIGV4dGVu dApuZWVkZWQgZm9yIGRlc2NyaWJpbmcgdGhlIHZJVFMgZW11bGF0aW9uLgoKIyMgWGVuIGludGVy YWN0aW9uIHdpdGggZ3Vlc3QgT1MgcHJvdmlzaW9uZWQgdklUUyBtZW1vcnkKCk1lbW9yeSB3aGlj aCB0aGUgZ3Vlc3QgcHJvdmlzaW9ucyB0byB0aGUgdklUUyAoSVRUIHZpYSBgTUFQRGAgb3Igb3Ro ZXIKdGFibGVzIHZpYSBgR0lUU19CQVNFUm5gKSBuZWVkcyBjYXJlZnVsIGhhbmRsaW5nIGluIFhl bi4KCiMjIyBUcnVzdAoKU2luY2UgWGVuIGNhbm5vdCB0cnVzdCBkYXRhIGluIGRhdGEgc3RydWN0 dXJlcyBjb250YWluZWQgaW4gc3VjaAptZW1vcnkgaWYgYSBndWVzdCBjYW4gdHJhbXBsZSBvdmVy IGl0IGF0IHdpbGwuIFRoZXJlZm9yZSBYZW4gZWl0aGVyCm11c3QgdGFrZSBncmVhdCBjYXJlIHdo ZW4gYWNjZXNzaW5nIGRhdGEgc3RydWN0dXJlcyBzdG9yZWQgaW4gc3VjaAptZW1vcnkgdG8gdmFs aWRhdGUgdGhlIGNvbnRlbnRzIGUuZy4gbm90IHRydXN0IHRoYXQgdmFsdWVzIGFyZSB3aXRoaW4K dGhlIHJlcXVpcmVkIGxpbWl0cyBvciBpdCBtdXN0IHRha2Ugc3RlcHMgdG8gcmVzdHJpY3QgZ3Vl c3QgYWNjZXNzIHRvCnRoZSBtZW1vcnkgd2hlbiBpdCBpcyBwcm92aXNpb25lZC4gU2luY2UgdGhl IGRhdGEgc3RydWN0dXJlcyBhcmUKc2ltcGxlIGFuZCBtb3N0IGFjY2Vzc29ycyBuZWVkIHRvIGRv IGJvdW5kcyBjaGVjayBhbnl3YXkgaXQgaXMKY29uc2lkZXJlZCBzdWZmaWNpZW50IHRvIHNpbXBs eSBkbyB0aGUgbmVjZXNzYXJ5IGNoZWNrcyBvbiBhY2Nlc3MuCgoqKkFueSBpbmZvcm1hdGlvbiBy ZWFkIG1lbW9yeSB3aGljaCBoYXMgYmVlbiBwcm92aXNpb25lZCBieSB0aGUgZ3Vlc3QKICAgT1Mg c2hvdWxkIG5vdCBiZSB0cnVzdGVkIGFuZCBtdXN0IGJlIGNhcmVmdWxseSBjaGVja2VkIChlLmcu IHJhbmdlcwogICBldGMpIGJlZm9yZSB1c2UuKioKCiMjIyBNYXBwaW5nCgpNb3N0IGRhdGEgc3Ry dWN0dXJlcyBzdG9yZWQgaW4gdGhpcyBzaGFyZWQgbWVtb3J5IGFyZSBhY2Nlc3NlZCBvbiB0aGUK aG90IGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgbXVzdCB0aGVyZWZvcmUgYmUgcXVpY2ts eSBhY2Nlc3NpYmxlCmZyb20gd2l0aGluIFhlbi4gU2luY2Ugd2UgaGF2ZSByZXN0cmljdGVkIHZp dHMgc3VwcG9ydCB0byA2NC1iaXQgaG9zdHMKb25seSBgbWFwX2RvbWFpbl9wYWdlYCBpcyBmYXN0 IGVub3VnaCB0byBiZSB1c2VkIG9uIHRoZSBmbHkgYW5kCnRoZXJlZm9yZSB3ZSBkbyBub3QgbmVl ZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgdW5ib3VuZGVkIGFtb3VudHMgb2YKcGVybWFuZW50bHkg bWFwcGVkIG1lbW9yeSBjb25zdW1lZCBieSBlYWNoIGBNQVBEYCBjb21tYW5kLgoKQWx0aG91Z2gg YG1hcF9kb21haW5fcGFnZWAgaXMgZmFzdCwgYHAybV9sb29rdXBgICh0cmFuc2xhdGlvbiBmcm9t IElQQQp0byBQQSkgaXMgbm90IG5lY2Vzc2FyaWx5IHNvIGFuZCBpcyB1c2VkIGJ5IGBnZXRfcGFn ZV9mcm9tX2dmbmAuIEZvcgpub3cgd2UgYWNjZXB0IHRoaXMsIGFzIGEgZnV0dXJlIGV4dGVuc2lv biBhIHNwYXJzZSBtYXBwaW5nIG9mIHRoZQpndWVzdCBkZXZpY2UgdGFibGUgaW4gdm1hcCBzcGFj ZSBjb3VsZCBiZSBjb25zaWRlcmVkLCB3aXRoIGxpbWl0cyBvbgp0aGUgdG90YWwgYW1vdW50IG9m IHZtYXAgc3BhY2Ugd2hpY2ggd2UgYWxsb3cgZWFjaCBkb21haW4gdG8gY29uc3VtZS4KClRoZSBg R0lUU19CQVNFUm5gIHJlZ2lzdGVycyBhbGxvdyBmb3IgdGhlIGd1ZXN0IHRvIHNwZWNpZnkgY2Fj aGUKYXR0cmlidXRlcyBmb3IgdGhlIG1lbW9yeS4gRm9yIG5vdyB3ZSByZXF1aXJlIHRoYXQgdGhl c2UgaGF2ZSB0aGUgc2FtZQphdHRyaWJ1dGVzIGFzIGh5cGVyY2FsbCBhcmd1bWVudHMgaW4gZ2Vu ZXJhbCAoc2VlIGBwdWJsaWMvYXJjaC1hcm0uaGApCgpJbiBhZGRpdGlvbiB3aGlsZSBgR0lUU19C QVNFUm5gIGFsbG93cyB0aGUgQ2FjaGVhYmlsaXR5IHRvIGJlCnNwZWNpZmllZCBhcyBgRGV2aWNl LW5HblJuRWAgd2UgcmVxdWlyZSB0aGF0IHRoZSB0YWJsZXMgcHJvdmlkZWQgYmUgaW4Kbm9ybWFs IGd1ZXN0IFJBTSAobm90IE1NSU8sIG5vdCBncmFudGVkIG1lbW9yeSBldGMpLCB0aGF0IGlzIGl0 IG11c3QKaGF2ZSB0eXBlIGBwMm1fcmFtX3J3YC4KCiMjIHZJVFMgcHJvcGVydGllcwoKVGhlIHZJ VFMgaW1wbGVtZW50YXRpb24gc2hhbGwgaGF2ZToKCi0gYEdJVFNfVFlQRVIuSENDID09IG5yX3Zj cHVzICsgMWAuCi0gYEdJVFNfVFlQRVIuUFRBID09IDBgLiBUYXJnZXQgYWRkcmVzc2VzIGFyZSBs aW5lYXIgcHJvY2Vzc29yIG51bWJlcnMuCi0gYEdJVFNfVFlQRVIuRGV2Yml0cyA9PSBTZWUgYmVs b3dgLgotIGBHSVRTX1RZUEVSLklEYml0cyA9PSBTZWUgYmVsb3dgLgotIGBHSVRTX1RZUEVSLklU VCBFbnRyeSBTaXplID09IDdgLCBtZWFuaW5nIDggYnl0ZXMsIHdoaWNoIGlzIHRoZSBzaXplCiAg b2YgYHN0cnVjdCB2aXR0YCAoZGVmaW5lZCBiZWxvdykuCgpgR0lUU19UWVBFUi5EZXZiaXRzYCBh bmQgYEdJVFNfVFlQRVIuSWRiaXRzYCB3aWxsIG5lZWQgdG8gYmUgY2hvc2VuIHRvCnJlZmxlY3Qg dGhlIGhvc3QgYW5kIGd1ZXN0IGNvbmZpZ3VyYXRpb25zIChudW1iZXIgb2YgTFBJcywgbWF4aW11 bQpkZXZpY2UgSUQgZXRjKS4KCk90aGVyIGZpZWxkcyAobm90IG1lbnRpb25lZCBoZXJlKSB3aWxs IGJlIHNldCB0byBzb21lIHNlbnNpYmxlIChvcgptYW5kYXRlZCkgdmFsdWUuCgpUaGUgYEdJVFNf QkFTRVIwYCB3aWxsIGJlIHNldHVwIHRvIHJlcXVlc3Qgc3VmZmljaWVudCBtZW1vcnkgZm9yIGEK ZGV2aWNlIHRhYmxlIGNvbnNpc3Rpbmcgb2YgZW50cmllcyBvZjoKCiAgICBzdHJ1Y3QgdmRldmlj ZV90YWJsZSB7CiAgICAgICAgdWludDY0X3Qgdml0dF9pcGE7CiAgICAgICAgdWludDMyX3Qgdml0 dF9zaXplOwogICAgICAgIHVpbnQzMl90IHBhZGRpbmc7CiAgICB9OwogICAgQlVJTERfQlVHX09O KHNpemVvZihzdHJ1Y3QgdmRldmljZV90YWJsZSkgIT0gMTYpOwoKT24gd3JpdGUgdG8gYEdJVFNf QkFTRVIwYCB0aGUgcmVsZXZhbnQgZGV0YWlscyBvZiB0aGUgRGV2aWNlIFRhYmxlCihJUEEsIHNp emUsIGNhY2hlIGF0dHJpYnV0ZXMgdG8gdXNlIHdoZW4gbWFwcGluZykgd2lsbCBiZSByZWNvcmRl ZCBpbgpgc3RydWN0IGRvbWFpbmAuCgpBbGwgb3RoZXIgYEdJVFNfQkFTRVJuLlZhbGlkID09IDBg LgoKIyMgdklUUyB0byBwSVRTIG1hcHBpbmcKCkEgcGh5c2ljYWwgc3lzdGVtIG1heSBoYXZlIG11 bHRpcGxlIHBoeXNpY2FsIElUU3MuCgpXaXRoIHRoZSBzaW1wbGlmaWVkIHZpdHMgY29tbWFuZCBt b2RlbCBwcmVzZW50ZWQgaGVyZSBvbmx5IGEgc2luZ2xlCmB2aXRzYCBpcyByZXF1aXJlZC4KCklu IHRoZSBmdXR1cmUgYSBtb3JlIGNvbXBsZXggYXJyYW5nZW1lbnQgbWF5IGJlIGRlc2lyZWQuIFNp bmNlIHRoZQpjaG9pY2Ugb2YgbW9kZWwgaXMgaW50ZXJuYWwgdG8gdGhlIGh5cGVydmlzb3IvdG9v bHMgYW5kIGlzCmNvbW11bmljYXRlZCB0byB0aGUgZ3Vlc3QgdmlhIGZpcm13YXJlIHRhYmxlcyB3 ZSBhcmUgbm90IHRpZWQgdG8gdGhpcwptb2RlbCBhcyBhbiBBQkkgaWYgd2UgZGVjaWRlIHRvIGNo YW5nZS4KCldoZW4gY29uc3RydWN0aW5nIGRvbTAgaXQgd2lsbCB0aGVyZWZvcmUgYmUgbmVjZXNz YXJ5IHRvIHJld3JpdGUgYW55CkRUUyBwcm9wZXJ0aWVzIHdoaWNoIHJlZmVyIHRvIGFuIElUUyB0 byBwb2ludCB0byB0aGUgc2luZ2xlIHByb3ZpZGVkCklUUywgYXMgd2VsbCBhcyBkcm9wcGluZyBh bGwgSVRTIG5vZGVzIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIGEKc2luZ2xlIG5vZGUgcmVwcmVz ZW50aW5nIHRoZSB2SVRTLgoKIyMgTWFwcGluZyBmcm9tIGB2TFBJYCBiYWNrIHRvIGBwTFBJYAoK V2hpbGUgd2UgaGF2ZSBhcnJhbmdlZCBmb3IgYSAoYHBEZXZpY2VgLGBwRXZlbnRgKSB0byBtYXAg dG8gYSBzaW5nbGUKYHBMUElgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIGdpdmVuIGB2TFBJ YCBpcyBtYXBwZWQgYnkgYSBzaW5nbGUKKGB2RGV2aWNlYCxgdkV2ZW50YCkgc2luY2UgdGhlIGd1 ZXN0IG1heSBzZXR1cCBtdWx0aXBsZSBJVFQgdGFibGVzCnN1Y2ggdGhhdCB0aGlzIGlzIG5vdCB0 aGUgY2FzZS4gRW5mb3JjaW5nIHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBpcwpwcm9oaWJpdGl2ZWx5 IGV4cGVuc2l2ZS4KClRoZXJlZm9yZSBpdCBpcyBub3QgaW4gZ2VuZXJhbCBwb3NzaWJsZSB0byBh c3NvY2lhdGUgYSBgdkxQSWAgd2l0aCBhCmBwTFBJYC4KCiMjIFBlci1kb21haW4gYHN0cnVjdCBw ZW5kaW5nX2lycWAgZm9yIGB2TFBJYHMKCkludGVybmFsbHkgWGVuIHVzZXMgYSBgc3RydWN0IHBl bmRpbmdfaXJxYCB0byB0cmFjayB0aGUgc3RhdHVzIG9mIGFueQpwZW5kaW5nIHZpcnR1YWwgSVJR LCBpbmNsdWRpbmcgYSB2aXJ0dWFsIExQSS4KClVwb24gZG9tYWluIGNyZWF0aW9uIGFuIGFycmF5 IG9mIHN1Y2ggYHN0cnVjdCBwZW5kaW5nX2lycWAncyB3aWxsIGJlCmFsbG9jYXRlZCB0byBjb3Zl ciB0aGUgcmFuZ2UgYDgxOTIuLm5yX2xwaXNgIChmb3IgdGhlIG51bWJlciBvZiBMUElzCndoaWNo IHRoZSBndWVzdCBpcyBjb25maWd1cmVkIHdpdGgpIGFuZCBhIHBvaW50ZXIgdGhpcyBhcnJheSB3 aWxsIGJlCnN0b3JlZCBpbiB0aGUgYHN0cnVjdCBkb21haW5gLiBUaGUgZnVuY3Rpb24gYGlycV90 b19wZW5kaW5nYCB3aWxsIGJlCm1vZGlmaWVkIHRvIGxvb2t1cCBpbnRlcnVwdHMgaW4gdGhlIExQ SSByYW5nZSBpbiB0aGlzIGFycmF5LgoKIyMgSGFuZGxpbmcgb2YgdW5yb3V0ZWQvc3B1cmlvdXMg TFBJcwoKU2luY2UgdGhlcmUgaXMgbm8gMToxIGxpbmsgYmV0d2VlbiBhIGB2TFBJYCBhbmQgYHBM UElgIGVuYWJsaW5nIGFuZApkaXNhYmxpbmcgb2YgcGh5c2ljYWwgTFBJcyBjYW5ub3QgYmUgZHJp dmVuIGZyb20gdGhlIHN0YXRlIG9mIGFuCmFzc29jaWF0ZWQgdkxQSS4KCkVhY2ggYHBMUElgIGlz IHJvdXRlZCBhbmQgZW5hYmxlZCBkdXJpbmcgZGV2aWNlIGFzc2lnbm1lbnQsIHRoZXJlZm9yZQpp dCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIGEgcGh5c2ljYWwgTFBJIHdoaWNoIGhhcyB5ZXQgdG8g YmUgcm91dGVkCih2aWEgYSBgdklUU2ApIHRvIGEgYHZMUElgLgoKU2ltaWxhcmx5IGlmIGEgZ3Vl c3Qgcm91dGVzIG11bHRpcGxlIEV2ZW50cyB0byBhIHNpbmdsZSBgdkxQSWAgdGhlCmludGVycnVw dCBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdoZW4gd2UgYXR0ZW1wdCB0byBkZWxpdmVyIGl0LgoK U3VjaCBgcExQSWBzIHNoYWxsIGJlIGlnbm9yZWQgYW5kIGxlZnQgaW4gdGhlIHByaW9yaXR5IGRy b3BwZWQgc3RhdGUKKHBlciB0aGUgcmVhZCBmcm9tIGBHSUNDX0lBUmApLiBUaGV5IHdpbGwgbm90 IGJlIGBFT0lgLWQgaW4gb3JkZXIgdG8KYXZvaWQgYSBwb3NzaWJsZSBpbnRlcnJ1cHQgc3Rvcm0u CgpPbiBkZXZpY2UgZGVhc3NpZ25tZW50IChpbmNsdWRpbmcgYXMgcGFydCBvZiBkb21haW4gZGVz dHJveSkgYWZ0ZXIKcmVzZXR0aW5nIHRoZSBkZXZpY2UgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8g RU9JIGFueSBpbnRlcnJ1cHRzIGluCnN1Y2ggYSBzdGF0ZSBieSB3YWxraW5nIG92ZXIgYWxsIGV2 ZW50cyBpbiB0aGUgY29ycmVzcG9uZGluZyBgc3RydWN0Cml0c19kZXZpY2VgLgoKIyMgRW5hYmxp bmcgYW5kIGRpc2FibGluZyBMUElzCgpUd28gbmV3IGZ1bmN0aW9ucyBgdmdpY19lbmFibGVfbHBp YCBhbmQgYHZnaWNfZGlzYWJsZV9scGlgIHdpbGwgYmUKcHJvdmlkZWQgd2hpY2ggYXJlIGFuYWxv Z291cyB0byBgdmdpY19lbmFibGVfaXJxc2AgYW5kCmB2Z2ljX2Rpc2FibGVfaXJxc2AgYnV0IHdv cmsgZm9yIHRoZSBMUEkgaW50ZXJmYWNlLiAoQWx0ZXJuYXRpdmVseSwKcmVmYWN0b3JpbmcgdGhl IGV4aXN0aW5nIGZ1bmN0aW9ucyB0byB3b3JrIGZvciBhbGwgY2FlcyB3b3VsZCBiZQphY2NlcHRh YmxlIHRvbykuCgpBIGB2TFBJYCB3aGljaCBoYXMgbm90IHlldCBiZSBlbmFibGVkIHdpbGwgYXV0 b21hdGljYWxseSBiZSBxdWV1ZWQsIGJ5CnRoZSBleGlzdGluZyB2Z2ljIGluamVjdGlvbiBtYWNo aW5lcnksIHVudGlsIGEgY2FsbCB0bwpgdmdpY19lbmFibGVfbHBpYCBpcyBtYWRlIChpbiByZXNw b25zZSB0byBhIHRyYXBwZWQgYWNjZXNzIHRvIHRoZQp2aXJ0dWFsIGNmZyB0YWJsZSkuCgojIyBM UEkgQ29uZmlndXJhdGlvbiBUYWJsZSBWaXJ0dWFsaXNhdGlvbgoKQSBndWVzdCdzIHdyaXRlIGFj Y2Vzc2VzIHRvIGl0cyBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSAod2hpY2ggaXMganVzdAphbiBh cmVhIG9mIGd1ZXN0IFJBTSB3aGljaCB0aGUgZ3Vlc3QgaGFzIG5vbWluYXRlZCkgd2lsbCBiZSB0 cmFwcGVkIHRvCnRoZSBoeXBlcnZpc29yLCB1c2luZyBzdGFnZSAyIE1NVSBwZXJtaXNzaW9ucywg aW4gb3JkZXIgZm9yIGNoYW5nZXMgdG8KYmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBob3N0IGludGVy cnVwdCBjb25maWd1cmF0aW9uLgoKT24gd3JpdGUgYGJpdFswXWAgb2YgdGhlIHdyaXR0ZW4gYnl0 ZSBpcyB0aGUgZW5hYmxlL2Rpc2FibGUgc3RhdGUgZm9yCnRoZSBpcnEgYW5kIGlzIGhhbmRsZWQg dGh1cywgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgd3JpdHRlbiB2YWx1ZToKCiAgICB2bHBpID0gbHBp IGNvcnJlc3BvbmRpbmcgdG8gYnl0ZSBvZmZzZXQgKGFkZHIgLSB0YWJsZV9iYXNlKTsKCiAgICBw ZW5kaW5nX2lycSA9IGlycV90b19wZW5kaW5nKGN1cnJlbnQsIHZscGkpOwogICAgcGVuZGluZ19p cnEtPnByaW9yaXR5ID0gYnl0ZSAmIDB4ZmM7IC8qIFhYWDogb3IgYnl0ZSA+PiAyICovCgogICAg aWYgKCBieXRlICYgMHgxICkKICAgICAgICB2Z2ljX2VuYWJsZV9scGkoY3VycmVudCwgdmxwaSk7 CiAgICBlbHNlCiAgICAgICAgdmdpY19kaXNhYmxlX2xwaShjdXJyZW50LCB2bHBpKTsKCk5vdGUg dGhhdCBwaHlzaWNhbCBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgY29uZmlndXJlZCB3aXRoIGEgcHJp b3JpdHkgb2YKYEdJQ19QUklfSVJRYCwgcmVnYXJkbGVzcyBvZiB0aGUgcHJpb3JpdHkgb2YgYW55 IHZpcnR1YWwgaW50ZXJydXB0LgoKIyMgTFBJIFBlbmRpbmcgVGFibGUgVmlydHVhbGlzYXRpb24K CkFjY29yZGluZyB0byBHSUMgc3BlYyA0LjguNSB0aGlzIHRhYmxlIGlzIG5vdCBuZWNlc3Nhcmls eSBpbiBzeW5jIGFuZAp0aGUgbWVjaGFuaXNtIHRvIGZvcmNlIGEgc3luYyBpcyBgSU1QTEVNRU5U QVRJT04gREVGSU5FRGAsIGhlbmNlIHdlCmRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCgojIyBE ZXZpY2UgVGFibGUgVmlydHVhbGlzYXRpb24KClRoZSBJUEEsIHNpemUgYW5kIGNhY2hlYWJpbGl0 eSBhdHRyaWJ1dGVzIG9mIHRoZSBndWVzdCBkZXZpY2UgdGFibGUKd2lsbCBiZSByZWNvcmRlZCBp biBgc3RydWN0IGRvbWFpbmAgdXBvbiB3cml0ZSB0byBgR0lUU19CQVNFUjBgLgoKSW4gb3JkZXIg dG8gbG9va3VwIGFuIGVudHJ5IGZvciBgZGV2aWNlYDoKCiAgICBkZWZpbmUge2dldCxzZXR9X3Zk ZXZpY2VfZW50cnkoZG9tYWluLCBkZXZpY2UsIHN0cnVjdCBkZXZpY2VfdGFibGUgKmVudHJ5KToK ICAgICAgICBvZmZzZXQgPSBkZXZpY2Uqc2l6ZW9mKHN0cnVjdCB2ZGV2aWNlX3RhYmxlKQogICAg ICAgIGlmIG9mZnNldCA+IDxEVCBzaXplPjogZXJyb3IKCiAgICAgICAgZHRfZW50cnkgPSA8RFQg YmFzZSBJUEE+ICsgZGV2aWNlKnNpemVvZihzdHJ1Y3QgdmRldmljZV90YWJsZSkKICAgICAgICBw YWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBkdF9lbnRyeT4+UEFHRV9T SElGVCwgJnAybXQsIFAyTV9BTExPQyk7CiAgICAgICAgaWYgIXBhZ2U6IGVycm9yCiAgICAgICAg aWYgIXBhZ2VfaXNfcmFtKHAybXQpOiBwdXRfcGFnZShwYWdlKTsgZXJyb3I7CgogICAgICAgIGR0 X21hcHBpbmcgPSBtYXBfZG9tYWluX3BhZ2UocGFnZSkKCiAgICAgICAgaWYgKHNldCkKICAgICAg ICAgICAgIGR0X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0IGZyb20gZGV2aWNlPl0g PSAqZW50cnk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgKmVudHJ5ID0gZHRfbWFwcGluZ1s8 YXBwcm9wcmlhdGUgcGFnZSBvZmZzZXQ+XTsKCiAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UoZHRf bWFwcGluZykKICAgICAgICBwdXRfcGFnZShwYWdlKQoKU2luY2UgZXZlcnl0aGluZyBpcyBiYXNl ZCB1cG9uIElQQSAoZ3Vlc3QgYWRkcmVzc2VzKSBhIG1hbGljaW91cyBndWVzdApjYW4gb25seSBy ZWZlcmVuY2UgaXRzIG93biBSQU0gaGVyZS4KCiMjIElUVCBWaXJ0dWFsaXNhdGlvbgoKVGhlIGxv Y2F0aW9uIG9mIGEgVklUUyB3aWxsIGhhdmUgYmVlbiByZWNvcmRlZCBpbiB0aGUgZG9tYWluIERl dmljZQpUYWJsZSBieSBhIGBNQVBJYCBvciBgTUFQVklgIGNvbW1hbmQgYW5kIGlzIGxvb2tlZCB1 cCBhcyBhYm92ZS4KClRoZSBgdml0dGAgaXMgYSBgc3RydWN0IHZpdHRgOgoKICAgIHN0cnVjdCB2 aXR0IHsKICAgICAgICB1aW50MTZfdCB2YWxpZDoxOwogICAgICAgIHVpbnQxNl90IHBhZDoxNTsK ICAgICAgICB1aW50MTZfdCB2Y29sbGVjdGlvbjsKICAgICAgICB1aW50MzJfdCB2bHBpOwogICAg fTsKICAgIEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHZpdHQpICE9IDgpOwoKQSBsb29rdXAg b2NjdXJzIHNpbWlsYXIgdG8gZm9yIGEgZGV2aWNlIHRhYmxlLCB0aGUgb2Zmc2V0IGlzIHJhbmdl CmNoZWNrZWQgYWdhaW5zdCB0aGUgYHZpdHRfc2l6ZWAgZnJvbSB0aGUgZGV2aWNlIHRhYmxlLiBU byBsb29rdXAKYGV2ZW50YCBvbiBgZGV2aWNlYDoKCiAgICBkZWZpbmUge2dldCxzZXR9X3ZpdHRf ZW50cnkoZG9tYWluLCBkZXZpY2UsIGV2ZW50LCBzdHJ1Y3Qgdml0dCAqZW50cnkpOgogICAgICAg IGdldF92ZGV2aWNlX2VudHJ5KGRvbWFpbiwgZGV2aWNlLCAmZHQpCgogICAgICAgIG9mZnNldCA9 IGV2ZW50KnNpemVvZihzdHJ1Y3Qgdml0dCk7CiAgICAgICAgaWYgb2Zmc2V0ID4gZHQtPnZpdHRf c2l6ZTogZXJyb3IKCiAgICAgICAgdml0dF9lbnRyeSA9IGR0LT52aXRhX2lwYSArIGV2ZW50KnNp emVvZihzdHJ1Y3Qgdml0dCkKICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmVu dC0+ZG9tYWluLCB2aXR0X2VudHJ5Pj5QQUdFX1NISUZULCAmcDJtdCwgUDJNX0FMTE9DKTsKICAg ICAgICBpZiAhcGFnZTogZXJyb3IKICAgICAgICBpZiAhcGFnZV9pc19yYW0ocDJtdCk6IHB1dF9w YWdlKHBhZ2UpOyBlcnJvcjsKCiAgICAgICAgdml0dF9tYXBwaW5nID0gbWFwX2RvbWFpbl9wYWdl KHBhZ2UpCgogICAgICAgIGlmIChzZXQpCiAgICAgICAgICAgICB2aXR0X21hcHBpbmdbPGFwcHJv cHJpYXRlIHBhZ2Ugb2Zmc2V0IGZyb20gZXZlbnQ+XSA9ICplbnRyeTsKICAgICAgICBlbHNlCiAg ICAgICAgICAgICAqZW50cnkgPSB2aXR0X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0 Pl07CgogICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGVudHJ5KQogICAgICAgIHB1dF9wYWdlKHBh Z2UpCgpBZ2FpbiBzaW5jZSB0aGlzIGlzIElQQSBiYXNlZCBhIG1hbGljaW91cyBndWVzdCBjYW4g b25seSBwb2ludCB0aGluZ3MKdG8gaXRzIG93biByYW0uCgojIyBDb2xsZWN0aW9uIFRhYmxlIFZp cnR1YWxpc2F0aW9uCgpBIHBvaW50ZXIgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkg YGl0c19jb2xsZWN0aW9uc2AgbWFwcGluZwpjb2xsZWN0aW9uIElEIHRvIHZjcHUgSUQgd2lsbCBi ZSBhZGRlZCB0byBgc3RydWN0IGRvbWFpbmAuIFRoZSBhcnJheQpzaGFsbCBoYXZlIGBucl92Y3B1 cyArIDFgIGVudHJpZXMgYW5kIHJlc2V0cyB0byB+MCAob3IgYW5vdGhlcgpleHBsaWNpdGx5IGlu dmFsaWQgdnBjdSBucikuCgojIyBWaXJ0dWFsIExQSSBpbmplY3Rpb24KCkFzIGRpc2N1c3NlZCBh Ym92ZSB0aGUgYHZnaWNfdmNwdV9pbmplY3RfaXJxYCBmdW5jdGlvbmFsaXR5IHdpbGwgbmVlZAp0 byBiZSBleHRlbmRlZCB0byBjb3ZlciB0aGlzIG5ldyBjYXNlLCBtb3N0IGxpa2VseSB2aWEgYSBu ZXcKYHZnaWNfdmNwdV9pbmplY3RfbHBpYCBmcm9udGVuZCBmdW5jdGlvbi4gYHZnaWNfdmNwdV9p bmplY3RfaXJxYCB3aWxsCmFsc28gcmVxdWlyZSBzb21lIHJlZmFjdG9yaW5nIHRvIGFsbG93IHRo ZSBwcmlvcml0eSB0byBiZSBwYXNzZWQgaW4KZnJvbSB0aGUgY2FsbGVyIChzaW5jZSBgTFBJYCBw cm9wcml0eSBjb21lcyBmcm9tIHRoZSBgTFBJYCBDRkcgdGFibGUsCndoaWxlIGBTUElgIGFuZCBg UFBJYCBwcmlvcml0eSBpcyBjb25maWd1cmVkIHZpYSBvdGhlciBtZWFucykuCgpgdmdpY192Y3B1 X2luamVjdF9scGlgIHJlY2VpdmVzIGEgYHN0cnVjdCBkb21haW4gKmAgYW5kIGEgdmlydHVhbApp bnRlcnJ1cHQgbnVtYmVyIChjb3JyZXNwb25kaW5nIHRvIGEgdkxQSSkgYW5kIG5lZWRzIHRvIGZp Z3VyZSBvdXQKd2hpY2ggdmNwdSB0aGlzIHNob3VsZCBtYXAgdG8uCgpUbyBkbyB0aGlzIGl0IG11 c3QgbG9vayB1cCB0aGUgQ29sbGVjdGlvbiBJRCBhc3NvY2lhdGVkICh2aWEgdGhlIHZJVFMpCndp dGggdGhhdCBMUEkuCgpQcm9wb3NhbDogQWRkIGEgbmV3IGBpdHNfZGV2aWNlYCBmaWVsZCB0byBg c3RydWN0IGlycV9ndWVzdGAsIGEKcG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBgc3RydWN0IGl0 c19kZXZpY2VgLiBUaGUgZXhpc3RpbmcgYHN0cnVjdAppcnFfZ3Vlc3QudmlycWAgZmllbGQgY29u dGFpbnMgdGhlIGV2ZW50IElEIChwZXJoYXBzIHVzZSBhIGB1bmlvbmAKdG8gZ2l2ZSBhIG1vcmUg YXBwcm9wcmlhdGUgbmFtZSkgYW5kIF9ub3RfIHRoZSB2aXJ0dWFsIExQSS4gSW5qZWN0aW9uCnRo ZW4gY29uc2lzdHMgb2Y6CgogICAgICAgIGQgPSBpcnFfZ3Vlc3QtPmRvbWFpbgogICAgICAgIHZp cnEgPSBpcnFfZ3Vlc3QtPnZpcnEKICAgICAgICBpdHNfZGV2aWNlID0gaXJxX2d1ZXN0LT5pdHNf ZGV2aWNlCgogICAgICAgIGdldF92aXR0X2VudHJ5KGQsIGl0c19kZXZpY2UtPnZpcnRfZGV2aWNl X2lkLCB2aXJxLCAmdml0dCkKICAgICAgICB2Y3B1ID0gZC0+aXRzX2NvbGxlY3Rpb25zW3ZpdHQu dmNvbGxlY3Rpb25dCgogICAgICAgIGlmICFpc192YWxpZF9scGkodml0dC52bHBpKTogZXJyb3IK CiAgICAgICAgdmdpY192Y3B1X2luamVjdF9scGkoJmQtPnZjcHVzW3ZjcHVdLCB2aXR0LnZscGkp CgpJZiB0aGUgTFBJIGlzIGN1cnJlbnRseSBkaXNhYmxlZCB0aGVuIGl0IHdpbGwgYmUgcXVldWVk IGJ5CmB2Z2ljX3ZjcHVfaW5qZWN0X2xwaWAgYW5kIGluamVjdGVkIGluIHJlc3BvbnNlIHRvIGEg c3Vic2VxdWVudApgdmdpY19lbmFibGVfbHBpYCBjYWxsLgoKIyMgQ29tbWFuZCBRdWV1ZSBWaXJ0 dWFsaXNhdGlvbgoKVGhlIGNvbW1hbmQgdHJhbnNsYXRpb24vZW11bGF0aW9uIGluIHRoaXMgZGVz aWduIGhhcyBiZWVuIGFycmFuZ2VkIHRvCmJlIGFzIGNoZWFwIGFzIHBvc3NpYmxlIChlLmcuIGlu IG1hbnkgY2FzZXMgdGhlIGFjdGlvbnMgYXJlIE5PUHMpLAphdm9pZGluZyBwcmV2aW91cyBjb25j ZXJucyBhYm91dCB0aGUgbGVuZ3RoIG9mIHRpbWUgd2hpY2ggYW4gZW11bGF0ZWQKd3JpdGUgdG8g YSBgQ1dSSVRFUmAgcmVnaXN0ZXIgbWF5IGJsb2NrIHRoZSB2Y3B1LgoKRWFjaCBkb21haW4gd2ls bCBoYXZlIGFuIGFzc29jaWF0ZWQgYHN0cnVjdCB2aXRzX2NxYDoKCiAgICBzdHJ1Y3Qgdml0c19j cSB7CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwogICAgICAgIGF0b21pY190IGNyZWFkcjsgICAg ICAgICAvKiBWaXJ0dWFsIGNyZWFkciAqLwogICAgICAgIFsgUmVmZXJlbmNlIHRvIGNvbW1hbmQg cXVldWUgbWVtb3J5IF0KICAgIH07CgpPbiByZWFkIGZyb20gYEdJVFNfQ1JFQURSYCB0aGUgY3Vy cmVudCB2YWx1ZSBvZiBgdml0c19jcS5jcmVhZHJgIGlzCnJlYWQgYW5kIHJldHVybmVkIHVzaW5n IGBhdG9taWNfcmVhZGAuIE5vIGxvY2sgaXMgcmVxdWlyZWQuCgpXcml0ZXMgdG8gYEdJVFNfQ1dS SVRFUmAgYXJlIGhhbmRsZWQgc3luY2hyb25vdXNseSBhcyBmb2xsb3dzLCBnaXZlbiBhCndyaXRl IG9mIGB2YWxgOgoKICAgIHNwaW5fbG9jayh2aXRzX2NxLmxvY2spCgogICAgd2hpbGUgdml0c19j cS5jcmVhZHIgIT0gdmFsOgogICAgICAgIHByb2Nlc3Mgb25lIGNvbW1hbmQgZnJvbSBvZmZzZXQg dml0c19jcS5jcmVhZHIKICAgICAgICBhdG9taWNfYWRkKHZpdHNfY3EuY3JlYWRyLCAweDEwKTsg LyogWFhYIGhhbmRsZSB3cmFwIGFyb3VuZCAqLwoKICAgIHNwaW5fdW5sb2NrKHZpdHNfY3EubG9j aykKICAgIGluY3JlbWVudCBQQwogICAgcmV0dXJuCgpBZGRpbmcgcHJlZW1wdGlvbiB0byB0aGlz IGlzIHRyaWNreSB3aXRoIG11bHRpcGxlIHZjcHVzIHByZXNlbnQuIGUuZywKYSBzdWJ0bGUgY2Fz ZToKCiAgICAtIFZDUFVBIHdyaXRlcyBHSVRTX0NXUklURVIgVzEsIHByb2Nlc3NlcyBhIHByb3Bv cnRpb24gYW5kIGlzCiAgICAgIHByZWVtcHRlZC4KICAgIC0gVkNQVUIgd3JpdGUgR0lUU19DV1JJ VEVSIFcyICg+VzEpIGFuZCBwcm9jZXNzZXMgYSBwcm9wb3J0aW9uIHN1Y2ggdGhhdAogICAgICBX MTxHSVRTX0NSRUFEUjxXMi4KICAgIC0gVkNQVUEgcmVzdW1lcywgc2VlcyBHSVRTX0NSRUFEUiAh PSBXMSwgcHJvY2Vzc2VzIGp1bmsgdW50aWwgaXQKICAgICAgd3JhcHMgYXJvdW5kLgoKIyMgSVRT IENvbW1hbmQgVHJhbnNsYXRpb24KClRoaXMgc2VjdGlvbiBpcyBiYXNlZCBvbiB0aGUgc2VjdGlv biA1LjEzIG9mIEdJQ3YzIHNwZWNpZmljYXRpb24KKFBSRDAzLUdFTkMtMDEwNzQ1IDI0LjApIGFu ZCBwcm92aWRlcyBjb25jcmV0ZSBpZGVhcyBvZiBob3cgdGhpcyBjYW4KYmUgaW50ZXJwcmV0ZWQg Zm9yIFhlbi4KClRoZSBJVFMgcHJvdmlkZXMgMTIgY29tbWFuZHMgaW4gb3JkZXIgdG8gbWFuYWdl IGludGVycnVwdCBjb2xsZWN0aW9ucywKZGV2aWNlcyBhbmQgaW50ZXJydXB0cy4gUG9zc2libGUg Y29tbWFuZCBwYXJhbWV0ZXJzIGFyZToKCi0gRGV2aWNlIElEIChgRGV2aWNlYCkgKGNhbGxlZCBg ZGV2aWNlYCBpbiB0aGUgc3BlYykuCi0gRXZlbnQgSUQgKGBFdmVudGApIChjYWxsZWQgYElEYCBp biB0aGUgc3BlYykuIFRoaXMgaXMgYW4gaW5kZXggaW50bwogIGEgZGV2aWNlcyBgSVRUYC4KLSBD b2xsZWN0aW9uIElEIChgQ29sbGVjdGlvbmApIChjYWxsZWQgYGNvbGxlY3Rpb25gIGluIHRoZSBz cGVjKQotIExQSSBJRCAoYExQSWApIChjYWxsZWQgYHBJRGAgaW4gdGhlIHNwZWMpCi0gVGFyZ2V0 IEFkZHJlc3MgKGBUQWApIChjYWxsZWQgYFRBYCBpbiB0aGUgc3BlY2ApCgpUaGVzZSBwYXJhbWV0 ZXJzIG5lZWQgdG8gYmUgdmFsaWRhdGVkIGFuZCB0cmFuc2xhdGVkIGZyb20gVmlydHVhbCAoYHZg CnByZWZpeCkgdG8gUGh5c2ljYWwgKGBwYCBwcmVmaXgpLgoKTm90ZSwgd2UgZGlmZmVyIGZyb20g dGhlIG5hbWluZyBpbiB0aGUgR0lDIHNwZWMgZm9yIGNsYXJpdHksIGluCnBhcnRpY3VsYXIgd2Ug dXNlIGBFdmVudGAgbm90IGBJRGAgYW5kIGBMUElgIG5vdCBgcElEYCB0byByZWR1Y2UKY29uZnVz aW9uLCBlc3BlY2lhbGx5IHdoZW4gYHZgIGFuZCBgcGAgc3VmZml4ZXMgYXJlIHVzZWQgZHVlIHRv CnZpcnR1YWxpc2F0aW9uLgoKIyMjIFBhcmFtZXRlciBWYWxpZGF0aW9uIC8gVHJhbnNsYXRpb24K CkVhY2ggY29tbWFuZCBjb250YWlucyBwYXJhbWV0ZXJzIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRh dGVkIGJlZm9yZSBhbnkKdXNhZ2UgaW4gWGVuIG9yIHBhc3NpbmcgdG8gdGhlIGhhcmR3YXJlLgoK IyMjIyBEZXZpY2UgSUQgKGBEZXZpY2VgKQoKQ29ycmVzcG9uZGluZyBJVFQgb2J0YWluZWQgYnkg bG9va2luZyB1cCBhcyBkZXNjcmliZWQgYWJvdmUuCgpUaGUgcGh5c2ljYWwgYHN0cnVjdCBpdHNf ZGV2aWNlYCBjYW4gYmUgZm91bmQgYnkgbG9va2luZyB1cCBpbiB0aGUKZG9tYWluJ3MgZGV2aWNl IG1hcC4KCklmIGxvb2t1cCBmYWlscyBvciB0aGUgcmVzdWx0aW5nIGRldmljZSB0YWJsZSBlbnRy eSBpcyBpbnZhbGlkIHRoZW4KdGhlIERldmljZSBpcyBpbnZhbGlkLgoKIyMjIyBFdmVudCBJRCAo YEV2ZW50YCkKClZhbGlkYXRlZCBhZ2FpbnN0IGVtdWxhdGVkIGBHSVRTX1RZUEVSLklEYml0c2Au CgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHRyYW5zbGF0ZSBhIGB2RXZlbnRgLgoKIyMjIyBMUEkg KGBMUElgKQoKVmFsaWRhdGVkIGFnYWluc3QgZW11bGF0ZWQgYEdJVFNfVFlQRVIuSURiaXRzYC4K Ckl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJhbnNsYXRlIGEgYHZMUElgIGludG8gYSBgcExQSWAg c2luY2UgdGhlCnRhYmxlcyBhbGwgY29udGFpbiBgdkxQSWAuIChUcmFuc2xhdGlvbiBmcm9tIGBw TFBJYCB0byBgdkxQSWAgaGFwcGVucwp2aWEgYHN0cnVjdCBpcnFfZ3Vlc3RgIHdoZW4gd2UgcmVj ZWl2ZSB0aGUgSVJRKS4KCiMjIyMgSW50ZXJydXB0IENvbGxlY3Rpb24gKGBDb2xsZWN0aW9uYCkK ClRoZSBgQ29sbGVjdGlvbmAgaXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIHNpemUgb2YgdGhlIHBl ci1kb21haW4KYGl0c19jb2xsZWN0aW9uc2AgYXJyYXkgKGkuZS4gbnJfdmNwdXMgKyAxKSBhbmQg dGhlbiB0cmFuc2xhdGVkIGJ5IGEKc2ltcGxlIGxvb2t1cCBpbiB0aGF0IGFycmF5LgoKICAgICB2 Y3B1X25yID0gZC0+aXRzX2NvbGxlY3Rpb25zW0NvbGxlY3Rpb25dCgpBIHJlc3VsdCA+IGBucl9j cHVzYCBpcyBpbnZhbGlkCgojIyMjIFRhcmdldCBBZGRyZXNzIChgVEFgKQoKVGhpcyBwYXJhbWV0 ZXIgaXMgdXNlZCBpbiBjb21tYW5kcyB3aGljaCBtYW5hZ2UgY29sbGVjdGlvbnMuIEl0IGlzIGEK dW5pcXVlIGlkZW50aWZpZXIgcGVyIHByb2Nlc3Nvci4KCldlIGhhdmUgY2hvc2VuIHRvIGltcGxl bWVudCBgR0lUU19UWVBFUi5QVEFgIGFzIDAsIGhlbmNlIGB2VEFgIHNpbXBseQpjb3JyZXNwb25k cyB0byB0aGUgYHZjcHVfaWRgLCBzbyBvbmx5IG5lZWRzIGJvdW5kcyBjaGVja2luZyBhZ2FpbnN0 CmBucl92Y3B1c2AuCgojIyMgQ29tbWFuZHMKClRvIGJlIHJlYWQgd2l0aCByZWZlcmVuY2UgdG8g c3BlYyBmb3IgZWFjaCBjb21tYW5kICh3aGljaCBpbmNsdWRlcwplcnJvciBjaGVja3MgZXRjIHdo aWNoIGFyZSBvbWl0dGVkIGhlcmUpLgoKSXQgaXMgYXNzdW1lZCB0aGF0IGlucHV0cyB3aWxsIGJl IGJvdW5kcyBhbmQgdmFsaWRpdHkgY2hlY2tlZCBhcwpkZXNjcmliZWQgYWJvdmUsIHRodXMgZXJy b3IgaGFuZGxpbmcgaXMgb21pdHRlZCBmb3IgYnJldml0eSAoaS5lLiBpZgpnZXQgYW5kL29yIHNl dCBmYWlsIHRoZW4gc28gYmUgaXQpLiBJbiBnZW5lcmFsIGludmFsaWQgY29tbWFuZHMgYXJlCnNp bXBseSBpZ25vcmVkLgoKIyMjIyBgTUFQRGA6IE1hcCBhIHBoeXNpY2FsIGRldmljZSB0byBhbiBJ VFQuCgpfRm9ybWF0XzogYE1BUEQgRGV2aWNlLCBWYWxpZCwgSVRUIEFkZHJlc3MsIElUVCBTaXpl YC4KCl9TcGVjXzogNS4xMy4xMQoKYE1BUERgIGlzIHNlbnQgd2l0aCBgVmFsaWRgIGJpdCBzZXQg aWYgdGhlIG1hcHBpbmcgaXMgdG8gYmUgYWRkZWQgYW5kCnJlc2V0IHdoZW4gbWFwcGluZyBpcyBy ZW1vdmVkLgoKV2hlbiB0aGUgYFZhbGlkYCBiaXQgaXMgc2V0IHRoZW4gdGhlIHJhbmdlIGBJVFQg QWRkcmVzc2AgdG8gYElUVApBZGRyZXNzYCArIGBJVFQgU2l6ZWAgbmVlZCBub3QgYmUgdmFsaWRh dGVkLCB0aGlzIGlzIGRvbmUgaW4KYHtnZXQsc2V0fV92ZGV2aWNlX2VudHJ5YCB3aGVuIGNhbGxp bmcgdGhlIGBnZXRfcGFnZV9mcm9tX2dmbmAKZnVuY3Rpb24uIFZhbGlkYXRpbmcgdGhlIG1lbW9y eSBhdCBgTUFQRGAgdGltZSB3b3VsZCBzZXJ2ZSBubyBwdXJwb3NlCnNpbmNlIHRoZSBndWVzdCBj b3VsZCBzdWJzZXF1ZW50bHkgYmFsbG9vbiBpdCBvdXQgb3IgZ3JhbnQgbWFwIG92ZXIgaXQgZXRj LgoKVGhlIGRvbWFpbidzIGRldmljZSB0YWJsZSBpcyB1cGRhdGVkIHdpdGggdGhlIHByb3ZpZGVk IGluZm9ybWF0aW9uLgoKVGhlIGB2aXR0X21hcGRgIGZpZWxkIGlzIHNldCBhY2NvcmRpbmcgdG8g dGhlIGBWYWxpZGAgZmxhZyBpbiB0aGUKY29tbWFuZDoKCiAgICBkdF9lbnRyeS52aXR0X2lwYSA9 IElUVCBBZGRyZXNzCiAgICBkdF9lbnRyeS52aXR0X3NpemUgPSBJVFQgU2l6ZQogICAgc2V0X3Zk ZXZpY2VfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2UsICZkdF9lbnRyeSkKCiMjIyMgYE1B UENgOiBNYXAgYW4gaW50ZXJydXB0IGNvbGxlY3Rpb24gdG8gYSB0YXJnZXQgcHJvY2Vzc29yCgpf Rm9ybWF0XzogYE1BUEMgQ29sbGVjdGlvbiwgVEFgCgpfU3BlY186IDUuMTMuMTIKClRoZSB1cGRh dGVkIGB2VEFgIChhIHZjcHUgbnVtYmVyKSBpcyByZWNvcmRlZCBpbiB0aGUgYGl0c19jb2xsZWN0 aW9uc2AKYXJyYXkgb2YgdGhlIGRvbWFpbiBzdHJ1Y3Q6CgogICAgZC0+aXRzX2NvbGxlY3Rpb25z W0NvbGxlY3Rpb25dID0gVEEKCiMjIyMgYE1BUElgOiBNYXAgYW4gaW50ZXJydXB0IHRvIGFuIGlu dGVycnVwdCBjb2xsZWN0aW9uLgoKX0Zvcm1hdF86IGBNQVBJIERldmljZSwgTFBJLCBDb2xsZWN0 aW9uYAoKX1NwZWNfOiA1LjEzLjEzCgpBZnRlciB2YWxpZGF0aW9uOgoKICAgIHZpdHQudmFsaWQg PSBUcnVlCiAgICB2aXR0LmNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uCiAgICB2aXR0LnZscGkgPSBM UEkKICAgIHNldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWlhbiwgRGV2aWNlLCBMUEksICZ2aXR0 KQoKIyMjIyBgTUFQVklgOiBNYXAgYW4gaW5wdXQgaWRlbnRpZmllciB0byBhIHBoeXNpY2FsIGlu dGVycnVwdCBhbmQgYW4gaW50ZXJydXB0IGNvbGxlY3Rpb24uCgpGb3JtYXQ6IGBNQVBWSSBEZXZp Y2UsIEV2ZW50LCBMUEksIENvbGxlY3Rpb25gCgogICAgdml0dC52YWxpZCA9IFRydWUKICAgIHZp dHQuY29sbGVjdGlvbiA9IENvbGxlY3Rpb24KICAgIHZpdHQudmxwaSA9IExQSQogICAgc2V0X3Zp dHRfZW50cnkoY3VycmVudC0+b2RtaWFuLCBEZXZpY2UsIEV2ZW50LCAmdml0dCkKCiMjIyMgYE1P VklgOiBSZWRpcmVjdCBpbnRlcnJ1cHQgdG8gYW4gaW50ZXJydXB0IGNvbGxlY3Rpb24KCl9Gb3Jt YXRfOiBgTU9WSSBEZXZpY2UsIEV2ZW50LCBDb2xsZWN0aW9uYAoKX1NwZWNfOiA1LjEzLjE1Cgog ICAgZ2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2UsIEV2ZW50LCAmdml0dCkK ICAgIHZpdHQuY29sbGVjdGlvbiA9IENvbGxlY3Rpb24KICAgIHNldF92aXR0X2VudHJ5KGN1cnJl bnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCgogICAgWFhYIGNvbnNpZGVyIGhlbHBl ciB3aGljaCBzZXRzIGZpZWxkIHdpdGhvdXQgbWFwcGluZy91bm1hcHBpbmcKICAgIHR3aWNlLgoK VGhpcyBjb21tYW5kIGlzIHN1cHBvc2VkIHRvIG1vdmUgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBh c3NvY2lhdGVkCndpdGggYEV2ZW50YCB0byB0aGUgdmNwdSBpbXBsaWVkIGJ5IHRoZSBuZXcgYENv bGxlY3Rpb25gLCB3aGljaCBpcwp0cmlja3kuIEZvciBub3cgd2UgaWdub3JlIHRoaXMgcmVxdWly ZW1lbnQgKGFzIHdlIGRvIGZvcgpgR0lDRF9JUk9VVEVSbmAgYW5kIGBHSUNEX1RBUkdFVFJuYCBm b3Igb3RoZXIgaW50ZXJydXB0IHR5cGVzKS4KCiMjIyMgYERJU0NBUkRgOiBEaXNjYXJkIGludGVy cnVwdCByZXF1ZXN0cwoKX0Zvcm1hdF86IGBESVNDQVJEIERldmljZSwgRXZlbnRgCgpfU3BlY186 IDUuMTMuMTYKCiAgICBnZXRfdml0dF9lbnRyeShjdXJyZW50LT5kb21haW4sIERldmljZSwgRXZl bnQsICZ2aXR0KQogICAgdml0dC52YWxpZCA9IEZhbHNlCiAgICBzZXRfdml0dF9lbnRyeShjdXJy ZW50LT5kb21haW4sIERldmljZSwgRXZlbnQsICZ2aXR0KQoKICAgIFhYWCBjb25zaWRlciBoZWxw ZXIgd2hpY2ggc2V0cyBmaWVsZCB3aXRob3V0IG1hcHBpbmcvdW5tYXBwaW5nCiAgICB0d2ljZS4K ClRoaXMgY29tbWFuZCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgcGVuZGluZyBzdGF0ZSBvZiBh bnkgYXNzb2NpYXRlZAppbnRlcnJ1cHQuIFRoaXMgcmVxdWlyZW1lbnQgaXMgaWdub3JlZCAoZ3Vl c3QgbWF5IHNlZSBhIHNwdXJpb3VzCmludGVycnVwdCkuCgojIyMjIGBJTlZgOiBDbGVhbiBhbnkg Y2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQKCl9Gb3JtYXRfOiBgSU5WIERldmljZSwg RXZlbnRgCgpfU3BlY186IDUuMTMuMTcKClNpbmNlIExQSSBDb25maWd1cmF0aW9uIHRhYmxlIHVw ZGF0ZXMgYXJlIGhhbmRsZWQgc3luY2hyb25vdXNseSwgdGhlcmUKaXMgbm90aGluZyB0byBkbyBo ZXJlLgoKIyMjIyBgSU5WQUxMYDogQ2xlYW4gYW55IGNhY2hlcyBhc3NvY2lhdGVkIHdpdGggYW4g aW50ZXJydXB0IGNvbGxlY3Rpb24KCl9Gb3JtYXRfOiBgSU5WQUxMIENvbGxlY3Rpb25gCgpfU3Bl Y186IDUuMTMuMTkKClNpbmNlIExQSSBDb25maWd1cmF0aW9uIHRhYmxlIHVwZGF0ZXMgYXJlIGhh bmRsZWQgc3luY2hyb25vdXNseSwgdGhlcmUKaXMgbm90aGluZyB0byBkbyBoZXJlLgoKIyMjIyBg SU5UYDogR2VuZXJhdGUgYW4gaW50ZXJydXB0CgpfRm9ybWF0XzogYElOVCBEZXZpY2UsIEV2ZW50 YAoKX1NwZWNfOiA1LjEzLjIwCgpUaGUgYHZpdHRgIGVudHJ5IGNvcnJlc29uZGluZyB0byBgRGV2 aWNlLEV2ZW50YCBpcyBsb29rZWQgdXAgYW5kIHRoZW46CgogICAgZ2V0X3ZpdHRfZW50cnkoY3Vy cmVudC0+ZG9tYWluLCBEZXZpY2UsIEV2ZW50LCAmdml0dCkKICAgIHZnaWNfdmNwdV9pbmplY3Rf bHBpKGN1cnJlbnQtPmRvbWFpbiwgdml0dC52bHBpKQoKX05vdGVfOiBXaGVyZSAoRGV2aWNlLEV2 ZW50KSBpcyByZWFsIG1heSBuZWVkIGNvbnNpZGVyYXRpb24gb2YKaW50ZXJhY3Rpb25zIHdpdGgg cmVhbCBMUElzIGJlaW5nIGRlbGl2ZXJlZDogSnVsaWVuIGhhZCBjb25jZXJucyBhYm91dApYZW4n cyBpbnRlcm5hbCBJUlEgU3RhdGUgdHJhY2tpbmcuIGlmIHRoaXMgaXMgYSBwcm9ibGVtIHRoZW4g bWF5IG5lZWQKY2hhbmdlcyB0byBJUlEgc3RhdGUgdHJhY2tpbmcsIG9yIHRvIGluamVjdCBhcyBh IHJlYWwgSVJRIGFuZCBsZXQKcGh5c2ljYWwgSVJRIGluamVjdGlvbiBoYW5kbGUgaXQsIG9yIHdy aXRlIHRvIGBHSUNSX1NFVExQSVJgPwoKIyMjIyBgQ0xFQVJgOiBDbGVhciB0aGUgcGVuZGluZyBz dGF0ZSBvZiBhbiBpbnRlcnJ1cHQKCl9Gb3JtYXRfOiBgQ0xFQVIgRGV2aWNlLCBFdmVudGAKCl9T cGVjXzogNS4xMy4yMQoKU2hvdWxkIGNsZWFyIHBlbmRpbmcgc3RhdGUgb2YgTFBJLiBJZ25vcmUg KGd1ZXN0IG1heSBzZWUgYSBzcHVyaW91cwppbnRlcnJ1cHQpLgoKIyMjIyBgU1lOQ2A6IFdhaXQg Zm9yIGNvbXBsZXRpb24gb2YgYW55IG91dHN0YW5kaW5nIElUUyBhY3Rpb25zIGZvciBjb2xsZWN0 aW9uCgpfRm9ybWF0XzogYFNZTkMgVEFgCgpfU3BlY186IDUuMTMuMjIKClRoaXMgY29tbWFuZCBj YW4gYmUgaWdub3JlZC4KCiMgR0lDdjQgRGlyZWN0IEludGVycnVwdCBJbmplY3Rpb24KCkdJQ3Y0 IHdpbGwgZGlyZWN0bHkgbWFyayB0aGUgTFBJcyBwZW5kaW5nIGluIHRoZSB2aXJ0dWFsIHBlbmRp bmcgdGFibGUKd2hpY2ggaXMgcGVyLXJlZGlzdHJpYnV0b3IgKGkuZSBwZXItdkNQVSkuCgpMUElz IHdpbGwgYmUgcmVjZWl2ZWQgYnkgdGhlIGd1ZXN0IHRoZSBzYW1lIHdheSBhcyBhbiBTUElzLiBJ LmUgdHJhcCBpbgpJUlEgbW9kZSB0aGVuIHJlYWQgSUNDX0lBUjFfRUwxIChmb3IgR0lDdjMpLgoK VGhlcmVmb3JlIEdJQ3Y0IHdpbGwgbm90IHJlcXVpcmUgb25lIHZJVFMgcGVyIHBJVFMuCgojIEV2 ZW50IENoYW5uZWxzCgpJdCBoYXMgYmVlbiBwcm9wb3NlZCB0aGF0IGl0IG1pZ2h0IGJlIG5pY2Ug dG8gaW5qZWN0IGV2ZW50IGNoYW5uZWxzIGFzCkxQSXMgaW4gdGhlIGZ1dHVyZS4gV2hldGhlciBv ciBub3QgdGhhdCB3b3VsZCBpbnZvbHZlIGFueSBzb3J0IG9mIHZJVFMKaXMgdW5jbGVhciwgYnV0 IGlmIGl0IGRpZCB0aGVuIGl0IHdvdWxkIGxpa2VseSBiZSBhIHNlcGFyYXRlIGVtdWxhdGlvbgp0 byB0aGUgdklUUyBlbXVsYXRpb24gdXNlZCB3aXRoIGEgcElUUyBhbmQgYXMgc3VjaCBpcyBub3Qg Y29uc2lkZXJlZApmdXJ0aGVyIGhlcmUuCgojIEdsb3NzYXJ5CgoqIF9NU0lfOiBNZXNzYWdlIFNp Z25hbGxlZCBJbnRlcnJ1cHQKKiBfSVRTXzogSW50ZXJydXB0IFRyYW5zbGF0aW9uIFNlcnZpY2UK KiBfR0lDXzogR2VuZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlcgoqIF9MUElfOiBMb2NhbGl0eS1z cGVjaWZpYyBQZXJpcGhlcmFsIEludGVycnVwdAoKIyBSZWZlcmVuY2VzCgoiR0lDIEFyY2hpdGVj dHVyZSBTcGVjaWZpY2F0aW9uIiBQUkQwMy1HRU5DLTAxMDc0NSAyNC4wLgoKIklPIFJlbWFwcGlu ZyBUYWJsZSBTeXN0ZW0gU29mdHdhcmUgb24gQVJNwq4gUGxhdGZvcm1zIiBBUk0gREVOIDAwNDlB LgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==