SU5UUk9EVUNUSU9OCgogIFRoZSBVU0Igc2VyaWFsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgYSBudW1iZXIgb2YgZGlmZmVyZW50IFVTQiB0bwogIHNlcmlhbCBjb252ZXJ0ZXIgcHJvZHVjdHMsIGFzIHdlbGwgYXMgc29tZSBkZXZpY2VzIHRoYXQgdXNlIGEgc2VyaWFsCiAgaW50ZXJmYWNlIGZyb20gdXNlcnNwYWNlIHRvIHRhbGsgdG8gdGhlIGRldmljZS4KCiAgU2VlIHRoZSBpbmRpdmlkdWFsIHByb2R1Y3Qgc2VjdGlvbiBiZWxvdyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQKICB0aGUgZGlmZmVyZW50IGRldmljZXMuCgoKQ09ORklHVVJBVElPTgoKICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgc2VyaWFsIGludGVyZmFjZXMgYXQKICBvbmUgdGltZS4gCgogICAgVGhlIG1ham9yIG51bWJlciB0aGF0IHRoZSBkcml2ZXIgdXNlcyBpcyAxODggc28gdG8gdXNlIHRoZSBkcml2ZXIsCiAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKCW1rbm9kIC9kZXYvdHR5VVNCMCBjIDE4OCAwCglta25vZCAvZGV2L3R0eVVTQjEgYyAxODggMQoJbWtub2QgL2Rldi90dHlVU0IyIGMgMTg4IDIKCW1rbm9kIC9kZXYvdHR5VVNCMyBjIDE4OCAzCgkJLgoJCS4KCQkuCglta25vZCAvZGV2L3R0eVVTQjI1NCBjIDE4OCAyNTQKCW1rbm9kIC9kZXYvdHR5VVNCMjU1IGMgMTg4IDI1NQoKICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKICB3aWxsIHByaW50IHRvIHRoZSBzeXN0ZW0gbG9nLCB3aGljaCBub2RlKHMpIHRoZSBkZXZpY2UgaGFzIGJlZW4gYm91bmQKICB0by4KICAKClNQRUNJRklDIERFVklDRVMgU1VQUE9SVEVECgoKQ29ubmVjdFRlY2ggV2hpdGVIRUFUIDQgcG9ydCBjb252ZXJ0ZXIKCiAgQ29ubmVjdFRlY2ggaGFzIGJlZW4gdmVyeSBmb3J0aGNvbWluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCiAgZGV2aWNlLCBpbmNsdWRpbmcgcHJvdmlkaW5nIGEgdW5pdCB0byB0ZXN0IHdpdGguCgogIFRoZSBkcml2ZXIgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgQ29ubmVjdCBUZWNoIEluYy4KICBodHRwOi8vd3d3LmNvbm5lY3R0ZWNoLmNvbQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIFN0dWFydCBNYWNEb25hbGQgYXQgc3R1YXJ0bUBjb25uZWN0dGVjaC5jb20KCgpIYW5kU3ByaW5nIFZpc29yLCBQYWxtIFVTQiwgYW5kIENsaekgVVNCIGRyaXZlcgoKICBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIGFsbCBIYW5kU3ByaW5nIFVTQiwgUGFsbSBVU0IsIGFuZCBTb255IENsaekgVVNCCiAgZGV2aWNlcy4KCiAgT25seSB3aGVuIHRoZSBkZXZpY2UgdHJpZXMgdG8gY29ubmVjdCB0byB0aGUgaG9zdCwgd2lsbCB0aGUgZGV2aWNlIHNob3cKICB1cCB0byB0aGUgaG9zdCBhcyBhIHZhbGlkIFVTQiBkZXZpY2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgZGV2aWNlIGlzCiAgcHJvcGVybHkgZW51bWVyYXRlZCwgYXNzaWduZWQgYSBwb3J0LCBhbmQgdGhlbiBjb21tdW5pY2F0aW9uIF9zaG91bGRfIGJlCiAgcG9zc2libGUuIFRoZSBkcml2ZXIgY2xlYW5zIHVwIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkLCBvcgogIHRoZSBjb25uZWN0aW9uIGlzIGNhbmNlbGVkIG9uIHRoZSBkZXZpY2UuCgogIE5PVEU6CiAgICBUaGlzIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gdGFsayB0byB0aGUgZGV2aWNlLCB0aGUgc3luYyBidXR0b24gbXVzdCBiZQogICAgcHJlc3NlZCBCRUZPUkUgdHJ5aW5nIHRvIGdldCBhbnkgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZSB0byB0aGUgZGV2aWNlLgogICAgVGhpcyBnb2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgZG9jdW1lbnRhdGlvbiBmb3IgcGlsb3QteGZlciBhbmQgb3RoZXIKICAgIHBhY2thZ2VzLCBidXQgaXMgdGhlIG9ubHkgd2F5IHRoYXQgaXQgd2lsbCB3b3JrIGR1ZSB0byB0aGUgaGFyZHdhcmUKICAgIGluIHRoZSBkZXZpY2UuCiAgCiAgV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCwgdHJ5IHRhbGtpbmcgdG8gaXQgb24gdGhlIHNlY29uZCBwb3J0CiAgKHRoaXMgaXMgdXN1YWxseSAvZGV2L3R0eVVTQjEgaWYgeW91IGRvIG5vdCBoYXZlIGFueSBvdGhlciB1c2Itc2VyaWFsCiAgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLikgVGhlIHN5c3RlbSBsb2cgc2hvdWxkIHRlbGwgeW91IHdoaWNoIHBvcnQgaXMKICB0aGUgcG9ydCB0byB1c2UgZm9yIHRoZSBIb3RTeW5jIHRyYW5zZmVyLiBUaGUgIkdlbmVyaWMiIHBvcnQgY2FuIGJlIHVzZWQKICBmb3Igb3RoZXIgZGV2aWNlIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgYSBQUFAgbGluay4KCiAgRm9yIHNvbWUgU29ueSBDbGnpIGRldmljZXMsIC9kZXYvdHR5VVNCMCBtdXN0IGJlIHVzZWQgdG8gdGFsayB0byB0aGUKICBkZXZpY2UuICBUaGlzIGlzIHRydWUgZm9yIGFsbCBPUyB2ZXJzaW9uIDMuNSBkZXZpY2VzLCBhbmQgbW9zdCBkZXZpY2VzCiAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKICBrZXJuZWwgc3lzdGVtIGxvZyBmb3IgaW5mb3JtYXRpb24gb24gd2hpY2ggaXMgdGhlIGNvcnJlY3QgcG9ydCB0byB1c2UuCgogIElmIGFmdGVyIHByZXNzaW5nIHRoZSBzeW5jIGJ1dHRvbiwgbm90aGluZyBzaG93cyB1cCBpbiB0aGUgc3lzdGVtIGxvZywKICB0cnkgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIGZpcnN0IGEgaG90IHJlc2V0LCBhbmQgdGhlbiBhIGNvbGQgcmVzZXQgaWYKICBuZWNlc3NhcnkuICBTb21lIGRldmljZXMgbmVlZCB0aGlzIGJlZm9yZSB0aGV5IGNhbiB0YWxrIHRvIHRoZSBVU0IgcG9ydAogIHByb3Blcmx5LgogIAogIERldmljZXMgdGhhdCBhcmUgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggbW9kdWxlCiAgcGFyYW1ldGVycy4gIGUuZy4gbW9kcHJvYmUgdmlzb3IgdmVuZG9yPTB4NTRjIHByb2R1Y3Q9MHg2NgogIAogIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6CiAgaHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KCgpQb2NrZXRQQyBQREEgRHJpdmVyCgogIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEsIENhc2lvIEVNNTAwCiAgYW5kIG90aGVyIFBEQXMgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyIHVzaW5nIGEgVVNCCiAgY2FibGUvY3JhZGxlLgogIE1vc3QgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94LgogIEZvciBvdGhlcnMsIHBsZWFzZSB1c2UgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcHJvZHVjdCBhbmQgdmVuZG9yCiAgaWQuIGUuZy4gbW9kcHJvYmUgaXBhcSB2ZW5kb3I9MHgzZjAgcHJvZHVjdD0weDExMjUKCiAgVGhlIGRyaXZlciBwcmVzZW50cyBhIHNlcmlhbCBpbnRlcmZhY2UgKHVzdWFsbHkgb24gL2Rldi90dHlVU0IwKSBvdmVyCiAgd2hpY2ggb25lIG1heSBydW4gcHBwIGFuZCBlc3RhYmxpc2ggYSBUQ1AvSVAgbGluayB0byB0aGUgUERBLiBPbmNlIHRoaXMKICBpcyBkb25lLCB5b3UgY2FuIHRyYW5zZmVyIGZpbGVzLCBiYWNrdXAsIGRvd25sb2FkIGVtYWlsIGV0Yy4gVGhlIG1vc3QKICBzaWduaWZpY2FudCBhZHZhbnRhZ2Ugb2YgdXNpbmcgVVNCIGlzIHNwZWVkIC0gSSBjYW4gZ2V0IDczIHRvIDExMwogIGtieXRlcy9zZWMgZm9yIGRvd25sb2FkL3VwbG9hZCB0byBteSBpUEFRLgoKICBUaGlzIGRyaXZlciBpcyBvbmx5IG9uZSBvZiBhIHNldCBvZiBjb21wb25lbnRzIHJlcXVpcmVkIHRvIHV0aWxpemUKICB0aGUgVVNCIGNvbm5lY3Rpb24uIFBsZWFzZSB2aXNpdCBodHRwOi8vc3luY2Uuc291cmNlZm9yZ2UubmV0IHdoaWNoCiAgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgYSBzaW1wbGUgc3RlcC1ieS1zdGVwIGhvd3RvLgoKICBPbmNlIGNvbm5lY3RlZCwgeW91IGNhbiB1c2UgV2luIENFIHByb2dyYW1zIGxpa2UgZnRwVmlldywgUG9ja2V0IE91dGxvb2sKICBmcm9tIHRoZSBQREEgYW5kIHhjZXJkaXNwLCBzeW5jZSB1dGlsaXRpZXMgZnJvbSB0aGUgTGludXggc2lkZS4KCiAgVG8gdXNlIFBvY2tldCBJRSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKICBodHRwOi8vd3d3LnRla2d1cnUuY28udWsvRU01MDAvdXNidG9uZXQuaHRtIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcKICBvbiBXaW45OC4gT21pdCB0aGUgcHJveHkgc2VydmVyIHBhcnQ7IExpbnV4IGlzIHF1aXRlIGNhcGFibGUgb2YgZm9yd2FyZGluZwogIHBhY2tldHMgdW5saWtlIFdpbjk4LiBBbm90aGVyIG1vZGlmaWNhdGlvbiBpcyByZXF1aXJlZCBhdCBsZWFzdCBmb3IgdGhlCiAgaVBBUSAtIGRpc2FibGUgYXV0b3N5bmMgYnkgZ29pbmcgdG8gdGhlIFN0YXJ0L1NldHRpbmdzL0Nvbm5lY3Rpb25zIG1lbnUKICBhbmQgdW5jaGVja2luZyB0aGUgIkF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgLi4uIiBib3guIEdvIHRvCiAgU3RhcnQvUHJvZ3JhbXMvQ29ubmVjdGlvbnMsIGNvbm5lY3QgdGhlIGNhYmxlIGFuZCBzZWxlY3QgInVzYmRpYWwiIChvcgogIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIG5ldyBVU0IgY29ubmVjdGlvbikuIFlvdSBzaG91bGQgZmluYWxseSB3aW5kCiAgdXAgd2l0aCBhICJDb25uZWN0ZWQgdG8gdXNiZGlhbCIgd2luZG93IHdpdGggc3RhdHVzIHNob3duIGFzIGNvbm5lY3RlZC4KICBOb3cgc3RhcnQgdXAgUElFIGFuZCBicm93c2UgYXdheS4KCiAgSWYgaXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiwgbG9hZCBib3RoIHRoZSB1c2JzZXJpYWwgYW5kIGlwYXEgbW9kdWxlCiAgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAiZGVidWciIHNldCB0byAxIGFuZCBleGFtaW5lIHRoZSBzeXN0ZW0gbG9nLgogIFlvdSBjYW4gYWxzbyB0cnkgc29mdC1yZXNldHRpbmcgeW91ciBQREEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uLgoKICBPdGhlciBmdW5jdGlvbmFsaXR5IG1heSBiZSBwb3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBQREEuIEFjY29yZGluZyB0bwogIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPiwgd2l0aCB0aGUgVG9zaGliYSBFNTcwLAogIC4uLmlmIHlvdSBib290IGludG8gdGhlIGJvb3Rsb2FkZXIgKGhvbGQgZG93biB0aGUgcG93ZXIgd2hlbiBoaXR0aW5nIHRoZQogIHJlc2V0IGJ1dHRvbiwgY29udGludWluZyB0byBob2xkIG9udG8gdGhlIHBvd2VyIHVudGlsIHRoZSBib290bG9hZGVyIHNjcmVlbgogIGlzIGRpc3BsYXllZCksIHRoZW4gcHV0IGl0IGluIHRoZSBjcmFkbGUgd2l0aCB0aGUgaXBhcSBkcml2ZXIgbG9hZGVkLCBvcGVuCiAgYSB0ZXJtaW5hbCBvbiAvZGV2L3R0eVVTQjAsIGl0IGdpdmVzIHlvdSBhICJVU0IgUmVmbGFzaCIgdGVybWluYWwsIHdoaWNoIGNhbgogIGJlIHVzZWQgdG8gZmxhc2ggdGhlIFJPTSwgYXMgd2VsbCBhcyB0aGUgbWljcm9QIGNvZGUuLiAgc28gbXVjaCBmb3IgbmVlZGluZwogIFRvc2hpYmEncyAkMzUwIHNlcmlhbCBjYWJsZSBmb3IgZmxhc2hpbmchISA6RAogIE5PVEU6IFRoaXMgaGFzIE5PVCBiZWVuIHRlc3RlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCiAKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhbmVzaAogIFZhcmFkYXJhamFuIDxnYW5lc2hAdmVyaXRhcy5jb20+CgoKS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIKCiAgU2luZ2xlIHBvcnQgREItOSBzZXJpYWwgYWRhcHRlciwgcHVzaGVkIGFzIGEgUERBIGFkYXB0ZXIgZm9yIGlNYWNzIChtb3N0bHkKICBzb2xkIGluIE1hY2ludG9zaCBjYXRhbG9ncywgY29tZXMgaW4gYSB0cmFuc2x1Y2VudCB3aGl0ZS9ncmVlbiBkb25nbGUpLgogIEZhaXJseSBzaW1wbGUgZGV2aWNlLiBGaXJtd2FyZSBpcyBob21lYnJldy4KICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGZvciB0aGUgWGlyY29tL0VudHJncmEgc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICBUaGluZ3MgdGhhdCB3b3JrOgogICAgIGJhc2ljIGlucHV0L291dHB1dCAodGVzdGVkIHdpdGggJ2N1JykKICAgICBibG9ja2luZyB3cml0ZSB3aGVuIHNlcmlhbCBsaW5lIGNhbid0IGtlZXAgdXAKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzICh1cCB0byAxMTUyMDApCiAgICAgZ2V0dGluZy9zZXR0aW5nIG1vZGVtIGNvbnRyb2wgcGlucyAoVElPQ017R0VULFNFVCxCSVMsQklDfSkKICAgICBzZW5kaW5nIGJyZWFrIChhbHRob3VnaCBkdXJhdGlvbiBsb29rcyBzdXNwZWN0KQogICBUaGluZ3MgdGhhdCBkb24ndDoKICAgICBkZXZpY2Ugc3RyaW5ncyAoYXMgbG9nZ2VkIGJ5IGtlcm5lbCkgaGF2ZSB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZQogICAgIGRldmljZSBJRCBpc24ndCByaWdodCwgbWlnaHQgY29sbGlkZSB3aXRoIG90aGVyIEtleXNwYW4gcHJvZHVjdHMKICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzIG91Z2h0IHRvIGZsdXNoIHR4L3J4IHRvIGF2b2lkIG1hbmdsZWQgaGFsZiBjaGFyYWN0ZXJzCiAgIEJpZyBUaGluZ3Mgb24gdGhlIHRvZG8gbGlzdDoKICAgICBwYXJpdHksIDcgdnMgOCBiaXRzIHBlciBjaGFyLCAxIG9yIDIgc3RvcCBiaXRzCiAgICAgSFcgZmxvdyBjb250cm9sCiAgICAgbm90IGFsbCBvZiB0aGUgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkOiBHZXRfU3RhdHVzLCBTZXRfRmVhdHVyZQogICAgIE9fTk9OQkxPQ0ssIHNlbGVjdCgpCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJyaWFuCiAgV2FybmVyIGF0IHdhcm5lckBsb3RoYXIuY29tIAoKCktleXNwYW4gVVNBLXNlcmllcyBTZXJpYWwgQWRhcHRlcnMKCiAgU2luZ2xlLCBEdWFsIGFuZCBRdWFkIHBvcnQgYWRhcHRlcnMgLSBkcml2ZXIgdXNlcyBLZXlzcGFuIHN1cHBsaWVkIAogIGZpcm13YXJlIGFuZCBpcyBiZWluZyBkZXZlbG9wZWQgd2l0aCB0aGVpciBzdXBwb3J0LgogIAogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIFVTQS0xOFgsIFVTQS0yOFgsIFVTQS0xOSwgVVNBLTE5VyBhbmQgVVNBLTQ5VyBhcmUgc3VwcG9ydGVkIGFuZAogICAgaGF2ZSBiZWVuIHByZXR0eSB0aG9yb3VnaGx5IHRlc3RlZCBhdCB2YXJpb3VzIGJhdWQgcmF0ZXMgd2l0aCA4LU4tMQogICAgY2hhcmFjdGVyIHNldHRpbmdzLiAgT3RoZXIgY2hhcmFjdGVyIGxlbmd0aHMgYW5kIHBhcml0eSBzZXR1cHMgYXJlCiAgICBwcmVzZW50bHkgdW50ZXN0ZWQuCgogICAgVGhlIFVTQS0yOCBpc24ndCB5ZXQgc3VwcG9ydGVkIHRob3VnaCBkb2luZyBzbyBzaG91bGQgYmUgcHJldHR5CiAgICBzdHJhaWdodGZvcndhcmQuICBDb250YWN0IHRoZSBtYWludGFpbmVyIGlmIHlvdSByZXF1aXJlIHRoaXMKICAgIGZ1bmN0aW9uYWxpdHkuCiAgCiAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CiAgICAgICAgaHR0cDovL21pc2MubnUvaHVnaC9rZXlzcGFuLmh0bWwKICAgCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgSHVnaAogIEJsZW1pbmdzIGF0IGh1Z2hAbWlzYy5udQoKCkZUREkgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlcgoKICBUaGlzIGlzIGEgc2luZ2xlIHBvcnQgREItMjUgc2VyaWFsIGFkYXB0ZXIuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcwogIGRldmljZSBhbmQgdGhlIExpbnV4IGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CglodHRwOi8vcmVhbGl0eS5zZ2kuY29tL2JyeWRlcl93ZWxsaW5ndG9uL2Z0ZGlfc2lvLwoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBCaWxsIFJ5ZGVyCiAgYXQgYnJ5ZGVyQHNnaS5jb20KCgpaeVhFTCBvbW5pLm5ldCBsY2QgcGx1cyBJU0ROIFRBCgogIFRoaXMgaXMgYW4gSVNETiBUQS4gUGxlYXNlIHJlcG9ydCBib3RoIHN1Y2Nlc3NlcyBhbmQgdHJvdWJsZXMgdG8KICBhenVtbW9AdG93ZXJ0ZWNoLml0CgoKQ3lwcmVzcyBNOCBDWTQ2MDEgRmFtaWx5IFNlcmlhbCBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgd2FzIGluIG1vc3QgcGFydCBkZXZlbG9wZWQgYnkgTmVpbCAia295YW1hIiBXaGVsY2hlbC4gIEl0CiAgaGFzIGJlZW4gaW1wcm92ZWQgc2luY2UgdGhhdCBwcmV2aW91cyBmb3JtIHRvIHN1cHBvcnQgZHluYW1pYyBzZXJpYWwKICBsaW5lIHNldHRpbmdzIGFuZCBpbXByb3ZlZCBsaW5lIGhhbmRsaW5nLiAgVGhlIGRyaXZlciBpcyBmb3IgdGhlIG1vc3QKICBwYXJ0IHN0YWJsZSBhbmQgaGFzIGJlZW4gdGVzdGVkIG9uIGFuIHNtcCBtYWNoaW5lLiAoZHVhbCBwMikKCiAgICBDaGlwc2V0cyBzdXBwb3J0ZWQgdW5kZXIgQ1k0NjAxIGZhbWlseToKCQoJCUNZN0M2MzcyMywgQ1k3QzYzNzQyLCBDWTdDNjM3NDMsIENZN0M2NDAxMwoKICAgIERldmljZXMgc3VwcG9ydGVkOgoKCQktRGVMb3JtZSdzIFVTQiBFYXJ0aG1hdGUgKFNpUkYgU3RhciBJSSBscCBhcmNoKQoJCS1DeXByZXNzIEhJRC0+Q09NIFJTMjMyIGFkYXB0ZXIKCQoJCU5vdGU6IEN5cHJlc3MgU2VtaWNvbmR1Y3RvciBjbGFpbXMgbm8gYWZmaWxpYXRpb24gd2l0aCB0aGUKCQkJaGlkLT5jb20gZGV2aWNlLgoKCU1vc3QgZGV2aWNlcyB1c2luZyBjaGlwc2V0cyB1bmRlciB0aGUgQ1k0NjAxIGZhbWlseSBzaG91bGQKICAgICB3b3JrIHdpdGggdGhlIGRyaXZlci4gIEFzIGxvbmcgYXMgdGhleSBzdGF5IHRydWUgdG8gdGhlIENZNDYwMQogICAgIHVzYnNlcmlhbCBzcGVjaWZpY2F0aW9uLgoKICAgIFRlY2huaWNhbCBub3RlczoKCiAgICAgICAgVGhlIEVhcnRobWF0ZSBzdGFydHMgb3V0IGF0IDQ4MDAgOE4xIGJ5IGRlZmF1bHQuLi4gdGhlIGRyaXZlciB3aWxsCgl1cG9uIHN0YXJ0IGluaXQgdG8gdGhpcyBzZXR0aW5nLiAgdXNic2VyaWFsIGNvcmUgcHJvdmlkZXMgdGhlIHJlc3QKCW9mIHRoZSB0ZXJtaW9zIHNldHRpbmdzLCBhbG9uZyB3aXRoIHNvbWUgY3VzdG9tIHRlcm1pb3Mgc28gdGhhdCB0aGUKCW91dHB1dCBpcyBpbiBwcm9wZXIgZm9ybWF0IGFuZCBwYXJzYWJsZS4KCQoJVGhlIGRldmljZSBjYW4gYmUgcHV0IGludG8gc2lyZiBtb2RlIGJ5IGlzc3VpbmcgTk1FQSBjb21tYW5kOgoJCSRQU1JGMTAwLDxwcm90b2NvbD4sPGJhdWQ+LDxkYXRhYml0cz4sPHN0b3BiaXRzPiw8cGFyaXR5PipDSEVDS1NVTQoJCSRQU1JGMTAwLDAsOTYwMCw4LDEsMCowQwoKCQlJdCBzaG91bGQgdGhlbiBiZSBzdWZmaWNpZW50IHRvIGNoYW5nZSB0aGUgcG9ydCB0ZXJtaW9zIHRvIG1hdGNoIHRoaXMKCQl0byBiZWdpbiBjb21tdW5pY2F0aW5nLgoKCUFzIGZhciBhcyBJIGNhbiB0ZWxsIGl0IHN1cHBvcnRzIHByZXR0eSBtdWNoIGV2ZXJ5IHNpcmYgY29tbWFuZCBhcwoJZG9jdW1lbnRlZCBvbmxpbmUgYXZhaWxhYmxlIHdpdGggZmlybXdhcmUgMi4zMSwgd2l0aCBzb21lIHVua25vd24KCW1lc3NhZ2UgaWRzLgoKCVRoZSBoaWQtPmNvbSBhZGFwdGVyIGNhbiBydW4gYXQgYSBtYXhpbXVtIGJhdWQgb2YgMTE1MjAwYnBzLiAgUGxlYXNlIG5vdGUKCXRoYXQgdGhlIGRldmljZSBoYXMgdHJvdWJsZSBvciBpcyBpbmNhcGFibGUgb2YgcmFpc2luZyBsaW5lIHZvbHRhZ2UgcHJvcGVybHkuCglJdCB3aWxsIGJlIGZpbmUgd2l0aCBudWxsIG1vZGVtIGxpbmtzLCBhcyBsb25nIGFzIHlvdSBkbyBub3QgdHJ5IHRvIGxpbmsgdHdvCgl0b2dldGhlciB3aXRob3V0IGhhY2tpbmcgdGhlIGFkYXB0ZXIgdG8gc2V0IHRoZSBsaW5lIGhpZ2guCgoJVGhlIGRyaXZlciBpcyBzbXAgc2FmZS4gIFBlcmZvcm1hbmNlIHdpdGggdGhlIGRyaXZlciBpcyByYXRoZXIgbG93IHdoZW4gdXNpbmcKCWl0IGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBUaGlzIGlzIGJlaW5nIHdvcmtlZCBvbiwgYnV0IEkgd291bGQgYmUgd2lsbGluZyB0bwoJYWNjZXB0IHBhdGNoZXMuICBBbiB1cmIgcXVldWUgb3IgcGFja2V0IGJ1ZmZlciB3b3VsZCBsaWtlbHkgZml0IHRoZSBiaWxsIGhlcmUuCgoJSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcHJvYmxlbXMsIHBhdGNoZXMsIGZlYXR1cmUgcmVxdWVzdHMsIGV0Yy4geW91IGNhbgoJY29udGFjdCBtZSBoZXJlIHZpYSBlbWFpbDoKCQkJCQlkaWdub21lQGdtYWlsLmNvbQoJCSh5b3VyIHByb2JsZW1zL3BhdGNoZXMgY2FuIGFsdGVybmF0ZWx5IGJlIHN1Ym1pdHRlZCB0byB1c2ItZGV2ZWwpCgoKRGlnaSBBY2NlbGVQb3J0IERyaXZlcgoKICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRGlnaSBBY2NlbGVQb3J0IFVTQiAyIGFuZCA0IGRldmljZXMsIDIgcG9ydAogIChwbHVzIGEgcGFyYWxsZWwgcG9ydCkgYW5kIDQgcG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuICBUaGUgZHJpdmVyCiAgZG9lcyBOT1QgeWV0IHN1cHBvcnQgdGhlIERpZ2kgQWNjZWxlUG9ydCBVU0IgOC4KCiAgVGhpcyBkcml2ZXIgd29ya3MgdW5kZXIgU01QIHdpdGggdGhlIHVzYi11aGNpIGRyaXZlci4gIEl0IGRvZXMgbm90CiAgd29yayB1bmRlciBTTVAgd2l0aCB0aGUgdWhjaSBkcml2ZXIuCgogIFRoZSBkcml2ZXIgaXMgZ2VuZXJhbGx5IHdvcmtpbmcsIHRob3VnaCB3ZSBzdGlsbCBoYXZlIGEgZmV3IG1vcmUgaW9jdGxzCiAgdG8gaW1wbGVtZW50IGFuZCBmaW5hbCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgdG8gZG8uICBUaGUgcGFyYWxsZWwgcG9ydAogIG9uIHRoZSBVU0IgMiBpcyBzdXBwb3J0ZWQgYXMgYSBzZXJpYWwgdG8gcGFyYWxsZWwgY29udmVydGVyOyBpbiBvdGhlcgogIHdvcmRzLCBpdCBhcHBlYXJzIGFzIGFub3RoZXIgVVNCIHNlcmlhbCBwb3J0IG9uIExpbnV4LCBldmVuIHRob3VnaAogIHBoeXNpY2FsbHkgaXQgaXMgcmVhbGx5IGEgcGFyYWxsZWwgcG9ydC4gIFRoZSBEaWdpIEFjY2VsZXBvcnQgVVNCIDgKICBpcyBub3QgeWV0IHN1cHBvcnRlZC4KCiAgUGxlYXNlIGNvbnRhY3QgUGV0ZXIgQmVyZ2VyIChwYmVyZ2VyQGJyaW1zb24uY29tKSBvciBBbCBCb3JjaGVycwogIChhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pIGZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzCiAgZHJpdmVyLgoKCkJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzCgogIFNpbmdsZSBwb3J0IERCLTkvUFMtMiBzZXJpYWwgYWRhcHRlciBmcm9tIEJlbGtpbiB3aXRoIGZpcm13YXJlIGJ5IGVURUsgTGFicy4KICBUaGUgUGVyYWNvbSBzaW5nbGUgcG9ydCBzZXJpYWwgYWRhcHRlciBhbHNvIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIsIGFzCiAgd2VsbCBhcyB0aGUgR29IdWJzIGFkYXB0ZXIuCgogIEN1cnJlbnQgc3RhdHVzOgogICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4gdGVzdGVkIGFuZCB3b3JrOgogICAgICBCYXVkIHJhdGUgICAgMzAwLTIzMDQwMCAgICAgICAgICAgICAgIAogICAgICBEYXRhIGJpdHMgICAgNS04CiAgICAgIFN0b3AgYml0cyAgICAxLTIKICAgICAgUGFyaXR5ICAgICAgIE4sRSxPLE0sUwogICAgICBIYW5kc2hha2UgICAgTm9uZSwgU29mdHdhcmUgKFhPTi9YT0ZGKSwgSGFyZHdhcmUgKENUU1JUUyxDVFNEVFIpKgogICAgICBCcmVhayAgICAgICAgU2V0IGFuZCBjbGVhcgogICAgICBMaW5lIGNvbnRyb2wgSW5wdXQvT3V0cHV0IHF1ZXJ5IGFuZCBjb250cm9sICoqCgogICAgICAqICBIYXJkd2FyZSBpbnB1dCBmbG93IGNvbnRyb2wgaXMgb25seSBlbmFibGVkIGZvciBmaXJtd2FyZQogICAgICAgICBsZXZlbHMgYWJvdmUgMi4wNi4gIFJlYWQgc291cmNlIGNvZGUgY29tbWVudHMgZGVzY3JpYmluZyBCZWxraW4KICAgICAgICAgZmlybXdhcmUgZXJyYXRhLiAgSGFyZHdhcmUgb3V0cHV0IGZsb3cgY29udHJvbCBpcyB3b3JraW5nIGZvciBhbGwKICAgICAgICAgZmlybXdhcmUgdmVyc2lvbnMuCiAgICAgICoqIFF1ZXJpZXMgb2YgaW5wdXRzIChDVFMsRFNSLENELFJJKSBzaG93IHRoZSBsYXN0CiAgICAgICAgIHJlcG9ydGVkIHN0YXRlLiAgUXVlcmllcyBvZiBvdXRwdXRzIChEVFIsUlRTKSBzaG93IHRoZSBsYXN0CiAgICAgICAgIHJlcXVlc3RlZCBzdGF0ZSBhbmQgbWF5IG5vdCByZWZsZWN0IGN1cnJlbnQgc3RhdGUgYXMgc2V0IGJ5CiAgICAgICAgIGF1dG9tYXRpYyBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCgogIFRPIERPIExpc3Q6CiAgICAtLSBBZGQgdHJ1ZSBtb2RlbSBjb250cm9sIGxpbmUgcXVlcnkgY2FwYWJpbGl0eS4gIEN1cnJlbnRseSB0cmFja3MgdGhlCiAgICAgICBzdGF0ZXMgcmVwb3J0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgdGhlIHN0YXRlcyByZXF1ZXN0ZWQuCiAgICAtLSBBZGQgZXJyb3IgcmVwb3J0aW5nIGJhY2sgdG8gYXBwbGljYXRpb24gZm9yIFVBUlQgZXJyb3IgY29uZGl0aW9ucy4KICAgIC0tIEFkZCBzdXBwb3J0IGZvciBmbHVzaCBpb2N0bHMuCiAgICAtLSBBZGQgZXZlcnl0aGluZyBlbHNlIHRoYXQgaXMgbWlzc2luZyA6KQoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXaWxsaWFtCiAgR3JlYXRob3VzZSBhdCB3Z3JlYXRob3VzZUBzbXZhLmNvbQoKCkVtcGVnIGVtcGVnLWNhciBNYXJrIEkvSUkgRHJpdmVyCgogIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciB0byBwcm92aWRlIGNvbm5lY3Rpdml0eSBzdXBwb3J0IGZvciB0aGUKICBjbGllbnQgc3luY2hyb25pemF0aW9uIHRvb2xzIGZvciBhbiBFbXBlZyBlbXBlZy1jYXIgbXAzIHBsYXllci4KCiAgVGlwczoKICAgICogRG9uJ3QgZm9yZ2V0IHRvIGNyZWF0ZSB0aGUgZGV2aWNlIG5vZGVzIGZvciB0dHlVU0J7MCwxLDIsLi4ufQogICAgKiBtb2Rwcm9iZSBlbXBlZyAobW9kcHJvYmUgaXMgeW91ciBmcmllbmQpCiAgICAqIGVtcHRvb2wgLS11c2IgL2Rldi90dHlVU0IwIChvciB3aGF0ZXZlciB5b3UgbmFtZWQgeW91ciBkZXZpY2Ugbm9kZSkKCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR2FyeQogIEJydWJha2VyIGF0IHhhdnllckBpeC5uZXRjb20uY29tCgoKTUNUIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQWRhcHRlciBVMjMyCgogIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgTUNUIFVTQi1SUzIzMiBDb252ZXJ0ZXIgKDI1IHBpbiwgTW9kZWwgTm8uCiAgVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KICBNb2RlbCBOby4gVTIzMi1QOSkuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkZXZpY2UgY2FuIGJlIGZvdW5kIGF0CiAgdGhlIG1hbnVmYWN0dXJlJ3Mgd2ViLXNpdGU6IGh0dHA6Ly93d3cubWN0LmNvbS50dy4KCiAgVGhlIGRyaXZlciBpcyBnZW5lcmFsbHkgd29ya2luZywgdGhvdWdoIGl0IHN0aWxsIG5lZWRzIHNvbWUgbW9yZSB0ZXN0aW5nLgogIEl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMgZHJpdmVyIGFuZCBpdHMKICBUT0RPIGxpc3QgaXMgdmFsaWQgZm9yIHRoaXMgZHJpdmVyIGFzIHdlbGwuCgogIFRoaXMgZHJpdmVyIGhhcyBhbHNvIGJlZW4gZm91bmQgdG8gd29yayBmb3Igb3RoZXIgcHJvZHVjdHMsIHdoaWNoIGhhdmUKICB0aGUgc2FtZSBWZW5kb3IgSUQgYnV0IGRpZmZlcmVudCBQcm9kdWN0IElEcy4gU2l0ZWNvbSdzIFUyMzItUDI1IHNlcmlhbAogIGNvbnZlcnRlciB1c2VzIFByb2R1Y3QgSUQgMHgyMzAgYW5kIFZlbmRvciBJRCAweDcxMSBhbmQgd29ya3Mgd2l0aCB0aGlzCiAgZHJpdmVyLiBBbHNvLCBELUxpbmsncyBEVS1IM1NQIFVTQiBCQVkgYWxzbyB3b3JrcyB3aXRoIHRoaXMgZHJpdmVyLgoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXb2xmZ2FuZwogIEdyYW5kZWdnZXIgYXQgd29sZmdhbmdAY2VzLmNoCgoKSW5zaWRlIE91dCBOZXR3b3JrcyBFZGdlcG9ydCBEcml2ZXIKCiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYWxsIGRldmljZXMgbWFkZSBieSBJbnNpZGUgT3V0IE5ldHdvcmtzLCBzcGVjaWZpY2FsbHkKICB0aGUgZm9sbG93aW5nIG1vZGVsczoKICAgICAgIEVkZ2Vwb3J0LzQKICAgICAgIFJhcGlkcG9ydC80CiAgICAgICBFZGdlcG9ydC80dAogICAgICAgRWRnZXBvcnQvMgogICAgICAgRWRnZXBvcnQvNGkKICAgICAgIEVkZ2Vwb3J0LzJpCiAgICAgICBFZGdlcG9ydC80MjEKICAgICAgIEVkZ2Vwb3J0LzIxCiAgICAgICBFZGdlcG9ydC84CiAgICAgICBFZGdlcG9ydC84IER1YWwKICAgICAgIEVkZ2Vwb3J0LzJEOAogICAgICAgRWRnZXBvcnQvNEQ4CiAgICAgICBFZGdlcG9ydC84aQogICAgICAgRWRnZXBvcnQvMiBESU4KICAgICAgIEVkZ2Vwb3J0LzQgRElOCiAgICAgICBFZGdlcG9ydC8xNiBEdWFsCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCgoKUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBjaGlwY2FyZCByZWFkZXIKICAgCiAgSW50ZXJmYWNlIHRvIElTTyA3ODE2IGNvbXBhdGlibGUgY29udGFjdGJhc2VkIGNoaXBjYXJkcywgZS5nLiBHU00gU0lNcy4KICAKICBDdXJyZW50IHN0YXR1czoKICAgIFRoaXMgaXMgdGhlIGtlcm5lbCBwYXJ0IG9mIHRoZSBkcml2ZXIgZm9yIHRoaXMgVVNCIGNhcmQgcmVhZGVyLgogICAgVGhlcmUgaXMgYWxzbyBhIHVzZXIgcGFydCBmb3IgYSBDVC1BUEkgZHJpdmVyIGF2YWlsYWJsZS4gQSBzaXRlCiAgICBmb3IgZG93bmxvYWRpbmcgaXMgVEJBLiBGb3Igbm93LCB5b3UgY2FuIHJlcXVlc3QgaXQgZnJvbSB0aGUKICAgIG1haW50YWluZXIgKGxpbnV4LXVzYkBzaWkubGkpLgoKICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAogIGxpbnV4LXVzYkBzaWkubGkKCgpQcm9saWZpYyBQTDIzMDMgRHJpdmVyCgogIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueSBkZXZpY2UgdGhhdCBoYXMgdGhlIFBMMjMwMyBjaGlwIGZyb20gUHJvbGlmaWMKICBpbiBpdC4gIFRoaXMgaW5jbHVkZXMgYSBudW1iZXIgb2Ygc2luZ2xlIHBvcnQgVVNCIHRvIHNlcmlhbAogIGNvbnZlcnRlcnMgYW5kIFVTQiBHUFMgZGV2aWNlcy4gIERldmljZXMgZnJvbSBBdGVuICh0aGUgVUMtMjMyKSBhbmQKICBJTy1EYXRhIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYXMgZG9lcyB0aGUgRENVLTExIG1vYmlsZS1waG9uZSBjYWJsZS4KCiAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZwogIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KICAKCktMNUtVU0IxMDUgY2hpcHNldCAvIFBhbG1Db25uZWN0IFVTQiBzaW5nbGUtcG9ydCBhZGFwdGVyCiAgCkN1cnJlbnQgc3RhdHVzOgogIFRoZSBkcml2ZXIgd2FzIHB1dCB0b2dldGhlciBieSBsb29raW5nIGF0IHRoZSB1c2IgYnVzIHRyYW5zYWN0aW9ucwogIGRvbmUgYnkgUGFsbSdzIGRyaXZlciB1bmRlciBXaW5kb3dzLCBzbyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGlzCiAgc3RpbGwgbWlzc2luZy4gIE5vdGFibHksIHNlcmlhbCBpb2N0bHMgYXJlIHNvbWV0aW1lcyBmYWtlZCBvciBub3QgeWV0CiAgaW1wbGVtZW50ZWQuICBTdXBwb3J0IGZvciBmaW5kaW5nIG91dCBhYm91dCBEU1IgYW5kIENUUyBsaW5lIHN0YXR1cyBpcwogIGhvd2V2ZXIgaW1wbGVtZW50ZWQgKHRob3VnaCBub3QgbmljZWx5KSwgc28geW91ciBmYXZvcml0ZSBhdXRvcGlsb3QoMSkKICBhbmQgcGlsb3QtbWFuYWdlciAtZGFlbW9uIGNhbGxzIHdpbGwgd29yay4gIEJhdWQgcmF0ZXMgdXAgdG8gMTE1MjAwCiAgYXJlIHN1cHBvcnRlZCwgYnV0IGhhbmRzaGFraW5nIChzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaXMgbm90LCB3aGljaCBpcwogIHdoeSBpdCBpcyB3aXNlIHRvIGN1dCBkb3duIG9uIHRoZSByYXRlIHVzZWQgaXMgd2lzZSBmb3IgbGFyZ2UKICB0cmFuc2ZlcnMgdW50aWwgdGhpcyBpcyBzZXR0bGVkLgogIApPcHRpb25zIHN1cHBvcnRlZDoKICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSB5b3UgY2FuIHBhc3MgdGhlIGZvbGxvd2luZwogIG9wdGlvbnMgdG8gaXQ6CiAgZGVidWcJCQktIGV4dHJhIHZlcmJvc2UgZGVidWdnaW5nIGluZm8KICAJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCiAgdXNlX2xvd2xhdGVuY3kJLSB1c2UgbG93X2xhdGVuY3kgZmxhZyB0byBzcGVlZCB1cCB0dHkgbGF5ZXIKCQkJICB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlLgoJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCgogIFNlZSBodHRwOi8vd3d3LnV1aGF1cy5kZS9saW51eC9wYWxtY29ubmVjdC5odG1sIGZvciB1cC10by1kYXRlCiAgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCgpHZW5lcmljIFNlcmlhbCBkcml2ZXIKCiAgSWYgeW91ciBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkIGRldmljZXMsIGNvbXBhdGlibGUgd2l0aAogIHRoZSBhYm92ZSBtb2RlbHMsIHlvdSBjYW4gdHJ5IG91dCB0aGUgImdlbmVyaWMiIGludGVyZmFjZS4gVGhpcwogIGludGVyZmFjZSBkb2VzIG5vdCBwcm92aWRlIGFueSB0eXBlIG9mIGNvbnRyb2wgbWVzc2FnZXMgc2VudCB0byB0aGUKICBkZXZpY2UsIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGFueSBraW5kIG9mIGRldmljZSBmbG93IGNvbnRyb2wuIEFsbCB0aGF0CiAgaXMgcmVxdWlyZWQgb2YgeW91ciBkZXZpY2UgaXMgdGhhdCBpdCBoYXMgYXQgbGVhc3Qgb25lIGJ1bGsgaW4gZW5kcG9pbnQsCiAgb3Igb25lIGJ1bGsgb3V0IGVuZHBvaW50LiAKICAKICBUbyBlbmFibGUgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHJlY29nbml6ZSB5b3VyIGRldmljZSwgYnVpbGQgdGhlIGRyaXZlcgogIGFzIGEgbW9kdWxlIGFuZCBsb2FkIGl0IGJ5IHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbjoKCWluc21vZCB1c2JzZXJpYWwgdmVuZG9yPTB4IyMjIyBwcm9kdWN0PTB4IyMjIwogIHdoZXJlIHRoZSAjIyMjIGlzIHJlcGxhY2VkIHdpdGggdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGRldmljZSdzCiAgdmVuZG9yIGlkIGFuZCBwcm9kdWN0IGlkLgoKICBUaGlzIGRyaXZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBOZXRDaGlwIFVTQgogIGRldmVsb3BtZW50IGJvYXJkLCBwcm92aWRpbmcgYSB3YXkgdG8gZGV2ZWxvcCBVU0IgZmlybXdhcmUgd2l0aG91dAogIGhhdmluZyB0byB3cml0ZSBhIGN1c3RvbSBkcml2ZXIuCgogIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCgoKQ09OVEFDVDoKCiAgSWYgYW55b25lIGhhcyBhbnkgcHJvYmxlbXMgdXNpbmcgdGhlc2UgZHJpdmVycywgd2l0aCBhbnkgb2YgdGhlIGFib3ZlCiAgc3BlY2lmaWVkIHByb2R1Y3RzLCBwbGVhc2UgY29udGFjdCB0aGUgc3BlY2lmaWMgZHJpdmVyJ3MgYXV0aG9yIGxpc3RlZAogIGFib3ZlLCBvciBqb2luIHRoZSBMaW51eC1VU0IgbWFpbGluZyBsaXN0IChpbmZvcm1hdGlvbiBvbiBqb2luaW5nIHRoZQogIG1haWxpbmcgbGlzdCwgYXMgd2VsbCBhcyBhIGxpbmsgdG8gaXRzIHNlYXJjaGFibGUgYXJjaGl2ZSBpcyBhdAogIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8gKQoKCkdyZWcgS3JvYWgtSGFydG1hbgpncmVnQGtyb2FoLmNvbQo=