VGhlIFgxMSBkcml2ZXIKLS0tLS0tLS0tLS0tLS0KCiAgIE1vc3QgV2luZSB1c2VycyBydW4gV2luZSB1bmRlciB0aGUgd2luZG93aW5nIHN5c3RlbSBrbm93biBhcyBYMTEuCiAgIER1cmluZyBtb3N0IG9mIFdpbmUncyBoaXN0b3J5LCB0aGlzIHdhcyB0aGUgb25seSBkaXNwbGF5IGRyaXZlcgogICBhdmFpbGFibGUsIGJ1dCBpbiByZWNlbnQgeWVhcnMsIHBhcnRzIG9mIFdpbmUgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8KICAgYWxsb3cgZm9yIG90aGVyIGRpc3BsYXkgZHJpdmVycyAoYWx0aG91Z2ggdGhlIG9ubHkgYWx0ZXJuYXRpdmUKICAgY3VycmVudGx5IGF2YWlsYWJsZSBpcyBQYXRyaWsgU3RyaWR2YWxsJ3MgbmN1cnNlcy1iYXNlZCB0dHlkcnYsIHdoaWNoCiAgIGhlIGNsYWltcyB3b3JrcyBmb3IgZGlzcGxheWluZyBjYWxjLmV4ZSkuIFRoZSBkaXNwbGF5IGRyaXZlciBpcyBjaG9zZW4KICAgd2l0aCB0aGUgIkdyYXBoaWNzRHJpdmVyIiBvcHRpb24gaW4gdGhlIFt3aW5lXSBzZWN0aW9uIG9mCiAgIHdpbmUuY29uZi8ud2luZXJjLCBidXQgSSB3aWxsIG9ubHkgY292ZXIgdGhlIHgxMWRydiBpbiB0aGlzIGFydGljbGUuCiAgIAogIHgxMWRydiBtb2RlcyBvZiBvcGVyYXRpb24KICAKICAgVGhlIHgxMWRydiBjb25zaXN0cyBvZiB0d28gY29uY2VwdHVhbGx5IGRpc3RpbmN0IHBpZWNlcywgdGhlIGdyYXBoaWNzCiAgIGRyaXZlciAoR0RJIHBhcnQpLCBhbmQgdGhlIHdpbmRvd2luZyBkcml2ZXIgKFVTRVIgcGFydCkuIEJvdGggb2YgdGhlc2UKICAgYXJlIGxpbmtlZCBpbnRvIHRoZSBsaWJ4MTFkcnYuc28gbW9kdWxlLCB0aG91Z2ggKHdoaWNoIHlvdSBsb2FkIHdpdGgKICAgdGhlICJHcmFwaGljc0RyaXZlciIgb3B0aW9uKS4gSW4gV2luZSwgcnVubmluZyBvbiBYMTEsIHRoZSBncmFwaGljcwogICBkcml2ZXIgbXVzdCBkcmF3IG9uIGRyYXdhYmxlcyAod2luZG93IGludGVyaW9ycykgcHJvdmlkZWQgYnkgdGhlCiAgIHdpbmRvd2luZyBkcml2ZXIuIFRoaXMgZGlmZmVycyBhIGJpdCBmcm9tIHRoZSBXaW5kb3dzIG1vZGVsLCB3aGVyZSB0aGUKICAgd2luZG93aW5nIHN5c3RlbSBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGRldmljZSBjb250ZXh0cyBjb250cm9sbGVkIGJ5CiAgIHRoZSBncmFwaGljcyBkcml2ZXIsIGFuZCBhcHBsaWNhdGlvbnMgYXJlIGFsbG93ZWQgdG8gaG9vayBpbnRvIHRoaXMKICAgcmVsYXRpb25zaGlwIGFueXdoZXJlIHRoZXkgbGlrZS4gVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZQogICB0cmFkZW9mZiBiZXR3ZWVuIGNvbXBhdGliaWxpdHkgYW5kIHVzYWJpbGl0eSwgdGhlIHgxMWRydiBoYXMgdGhyZWUKICAgZGlmZmVyZW50IG1vZGVzIG9mIG9wZXJhdGlvbi4KICAgCiAgIFVubWFuYWdlZC9Ob3JtYWwKICAgICAgICAgIFRoZSBkZWZhdWx0LiBXaW5kb3ctbWFuYWdlci1pbmRlcGVuZGVudCAoYW55IHJ1bm5pbmcgd2luZG93CiAgICAgICAgICBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdyBkZWNvcmF0aW9ucyAodGl0bGUgYmFycywKICAgICAgICAgIGJvcmRlcnMsIGV0YykgYXJlIGRyYXduIGJ5IFdpbmUgdG8gbG9vayBhbmQgZmVlbCBsaWtlIHRoZSByZWFsCiAgICAgICAgICBXaW5kb3dzLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBkZXBlbmQgb24KICAgICAgICAgIGJlaW5nIGFibGUgdG8gY29tcHV0ZSB0aGUgZXhhY3Qgc2l6ZXMgb2YgYW55IHN1Y2ggZGVjb3JhdGlvbnMsCiAgICAgICAgICBvciB0aGF0IHdhbnQgdG8gZHJhdyB0aGVpciBvd24uCiAgICAgICAgICAKICAgTWFuYWdlZAogICAgICAgICAgU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSAtLW1hbmFnZWQgY29tbWFuZC1saW5lIG9wdGlvbiBvciB0aGUKICAgICAgICAgIE1hbmFnZWQgd2luZS5jb25mIG9wdGlvbiAoc2VlIGJlbG93KS4gT3JkaW5hcnkgdG9wLWxldmVsIGZyYW1lCiAgICAgICAgICB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywgdGl0bGUgYmFycywgYW5kIHN5c3RlbSBtZW51cyB3aWxsCiAgICAgICAgICBiZSBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93IG1hbmFnZXIuIFRoaXMgbGV0cyB0aGVzZSBhcHBsaWNhdGlvbnMKICAgICAgICAgIGludGVncmF0ZSBiZXR0ZXIgd2l0aCB0aGUgcmVzdCBvZiB5b3VyIGRlc2t0b3AsIGJ1dCBtYXkgbm90CiAgICAgICAgICBhbHdheXMgd29yayBwZXJmZWN0bHkuIChBIHJld3JpdGUgb2YgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiwgdG8KICAgICAgICAgIG1ha2UgaXQgbW9yZSByb2J1c3QgYW5kIGxlc3MgcGF0Y2h5LCBpcyBoaWdobHkgZGVzaXJhYmxlLAogICAgICAgICAgdGhvdWdoLCBhbmQgaXMgcGxhbm5lZCB0byBiZSBkb25lIGJlZm9yZSB0aGUgV2luZSAxLjAgcmVsZWFzZS4pCiAgICAgICAgICAKICAgRGVza3RvcC1pbi1hLUJveAogICAgICAgICAgU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSAtLWRlc2t0b3AgY29tbWFuZC1saW5lIG9wdGlvbiAod2l0aCBhCiAgICAgICAgICBnZW9tZXRyeSwgZS5nLiAtLWRlc2t0b3AgODAweDYwMCBmb3IgYSBzdWNoLXNpemVkIGRlc2t0b3AsIG9yCiAgICAgICAgICBldmVuIC0tZGVza3RvcCA4MDB4NjAwKzArMCB0byBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uIHRoZQogICAgICAgICAgZGVza3RvcCBhdCB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGRpc3BsYXkpLiBUaGlzIGlzIHRoZQogICAgICAgICAgbW9kZSBtb3N0IGNvbXBhdGlibGUgd2l0aCB0aGUgV2luZG93cyBtb2RlbC4gQWxsIGFwcGxpY2F0aW9uCiAgICAgICAgICB3aW5kb3dzIHdpbGwganVzdCBiZSBXaW5lLWRyYXduIHdpbmRvd3MgaW5zaWRlIHRoZQogICAgICAgICAgV2luZS1wcm92aWRlZCBkZXNrdG9wIHdpbmRvdyAod2hpY2ggd2lsbCBpdHNlbGYgYmUgbWFuYWdlZCBieQogICAgICAgICAgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzIGFwcGxpY2F0aW9ucyBjYW4gcm9hbSBmcmVlbHkKICAgICAgICAgIHdpdGhpbiB0aGlzIHZpcnR1YWwgd29ya3NwYWNlIGFuZCB0aGluayB0aGV5IG93biBpdCBhbGwsCiAgICAgICAgICB3aXRob3V0IGRpc3R1cmJpbmcgeW91ciBvdGhlciBYIGFwcHMuCiAgICAgICAgICAKICBUaGUgW3gxMWRydl0gc2VjdGlvbgogIAogICBBbGxvY1N5c3RlbUNvbG9ycwogICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuIGlmIHlvdXIKICAgICAgICAgIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAsIGFuZCBpZiB5b3UgaGF2ZW4ndAogICAgICAgICAgcmVxdWVzdGVkIGEgcHJpdmF0ZSBjb2xvciBtYXAuIEl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIKICAgICAgICAgIG9mIHNoYXJlZCBjb2xvcm1hcCBjZWxscyAocGFsZXR0ZSBlbnRyaWVzKSBXaW5lIHNob3VsZCBvY2N1cHkuCiAgICAgICAgICBUaGUgaGlnaGVyIHRoaXMgdmFsdWUsIHRoZSBsZXNzIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSB0bwogICAgICAgICAgb3RoZXIgYXBwbGljYXRpb25zLgogICAgICAgICAgCiAgIFByaXZhdGVDb2xvck1hcAogICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuIGlmIHlvdXIKICAgICAgICAgIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAuIEl0IHNwZWNpZmllcyB0aGF0IHlvdSBkb24ndAogICAgICAgICAgd2FudCB0byB1c2UgdGhlIHNoYXJlZCBjb2xvciBtYXAsIGJ1dCBhIHByaXZhdGUgY29sb3IgbWFwLAogICAgICAgICAgd2hlcmUgYWxsIDI1NiBjb2xvcnMgYXJlIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0CiAgICAgICAgICBXaW5lJ3MgcHJpdmF0ZSBjb2xvciBtYXAgaXMgb25seSBzZWVuIHdoaWxlIHRoZSBtb3VzZSBwb2ludGVyCiAgICAgICAgICBpcyBpbnNpZGUgYSBXaW5lIHdpbmRvdywgc28gcHN5Y2hlZGVsaWMgZmxhc2hpbmcgYW5kIGZ1bmt5CiAgICAgICAgICBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZSBhIGxvdC4KICAgICAgICAgIAogICBQZXJmZWN0R3JhcGhpY3MKICAgICAgICAgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzIG9yIGV4YWN0CiAgICAgICAgICBXaW5lIHJvdXRpbmVzIHdpbGwgYmUgdXNlZCBmb3IgY2VydGFpbiBST1AgY29kZXMgaW4gYmxpdAogICAgICAgICAgb3BlcmF0aW9ucy4gTW9zdCB1c2VycyB3b24ndCBub3RpY2UgYW55IGRpZmZlcmVuY2UuCiAgICAgICAgICAKICAgU2NyZWVuRGVwdGgKICAgICAgICAgIEFwcGxpZXMgb25seSB0byBtdWx0aS1kZXB0aCBkaXNwbGF5cy4gSXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRoZQogICAgICAgICAgYXZhaWxhYmxlIGRlcHRocyBXaW5lIHNob3VsZCB1c2UgKGFuZCB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCiAgICAgICAgICAKICAgRGlzcGxheQogICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hpY2ggWDExIGRpc3BsYXkgdG8gdXNlLCBhbmQgaWYgc3BlY2lmaWVkLCB3aWxsCiAgICAgICAgICBvdmVycmlkZSBib3RoIHRoZSBESVNQTEFZIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCB0aGUKICAgICAgICAgIC0tZGlzcGxheSBjb21tYW5kLWxpbmUgb3B0aW9uLgogICAgICAgICAgCiAgIE1hbmFnZWQKICAgICAgICAgIFdpbmUgY2FuIGxldCBmcmFtZSB3aW5kb3dzIGJlIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cgbWFuYWdlci4KICAgICAgICAgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoYXQgYnkgZGVmYXVsdC4KICAgICAgICAgIAogICBVc2VER0EKICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UgWEZyZWU4NidzCiAgICAgICAgICBEaXJlY3QgR3JhcGhpY3MgQXJjaGl0ZWN0dXJlIChER0EpLCB3aGljaCBpcyBhYmxlIHRvIHRha2Ugb3ZlcgogICAgICAgICAgdGhlIGVudGlyZSBkaXNwbGF5IGFuZCBydW4gdGhlIGdhbWUgZnVsbC1zY3JlZW4gYXQgbWF4aW11bQogICAgICAgICAgc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYgMy54KSwgeW91IHN0aWxsIGhhdmUgdG8gY29uZmlndXJlCiAgICAgICAgICB0aGUgWCBzZXJ2ZXIgdG8gdGhlIGdhbWUncyByZXF1ZXN0ZWQgYnBwIGZpcnN0LCBidXQgd2l0aCBER0EyCiAgICAgICAgICAoWEZyZWU4NiA0LngpLCBydW50aW1lIGRlcHRoLXN3aXRjaGluZyBtYXkgYmUgcG9zc2libGUsCiAgICAgICAgICBkZXBlbmRpbmcgb24geW91ciBkcml2ZXIncyBjYXBhYmlsaXRpZXMuKSBCdXQgYmUgYXdhcmUgdGhhdCBpZgogICAgICAgICAgV2luZSBjcmFzaGVzIHdoaWxlIGluIERHQSBtb2RlLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvCiAgICAgICAgICByZWdhaW4gY29udHJvbCBvdmVyIHlvdXIgY29tcHV0ZXIgd2l0aG91dCByZWJvb3RpbmcuIERHQQogICAgICAgICAgbm9ybWFsbHkgcmVxdWlyZXMgZWl0aGVyIHJvb3QgcHJpdmlsZWdlcyBvciByZWFkL3dyaXRlIGFjY2VzcwogICAgICAgICAgdG8gL2Rldi9tZW0uCiAgICAgICAgICAKICAgVXNlWFNobQogICAgICAgICAgSWYgeW91IGRvbid0IHdhbnQgRGlyZWN0WCB0byB1c2UgREdBLCB5b3UgY2FuIGF0IGxlYXN0IHVzZSBYCiAgICAgICAgICBTaGFyZWQgTWVtb3J5IGV4dGVuc2lvbnMgKFhTaG0pLiBJdCBpcyBtdWNoIHNsb3dlciB0aGFuIERHQSwKICAgICAgICAgIHNpbmNlIHRoZSBhcHAgZG9lc24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHBoeXNpY2FsIGZyYW1lCiAgICAgICAgICBidWZmZXIsIGJ1dCB1c2luZyBzaGFyZWQgbWVtb3J5IHRvIGRyYXcgdGhlIGZyYW1lIGlzIGF0IGxlYXN0CiAgICAgICAgICBmYXN0ZXIgdGhhbiBzZW5kaW5nIHRoZSBkYXRhIHRocm91Z2ggdGhlIHN0YW5kYXJkIFgxMSBzb2NrZXQsCiAgICAgICAgICBldmVuIHRob3VnaCBXaW5lJ3MgWFNobSBzdXBwb3J0IGlzIHN0aWxsIGtub3duIHRvIGNyYXNoCiAgICAgICAgICBzb21ldGltZXMuCiAgICAgICAgICAKICAgRFhHcmFiCiAgICAgICAgICBJZiB5b3UgZG9uJ3QgdXNlIERHQSwgeW91IG1heSB3YW50IGFuIGFsdGVybmF0aXZlIG1lYW5zIHRvCiAgICAgICAgICBjb252aW5jZSB0aGUgbW91c2UgY3Vyc29yIHRvIHN0YXkgd2l0aGluIHRoZSBnYW1lIHdpbmRvdy4gVGhpcwogICAgICAgICAgb3B0aW9uIGRvZXMgdGhhdC4gT2YgY291cnNlLCBhcyB3aXRoIERHQSwgaWYgV2luZSBjcmFzaGVzLAogICAgICAgICAgeW91J3JlIGluIHRyb3VibGUgKGFsdGhvdWdoIG5vdCBhcyBiYWRseSBhcyBpbiB0aGUgREdBIGNhc2UsCiAgICAgICAgICBzaW5jZSB5b3UgY2FuIHN0aWxsIHVzZSB0aGUga2V5Ym9hcmQgdG8gZ2V0IG91dCBvZiBYKS4KICAgICAgICAgIAogICBEZXNrdG9wRG91YmxlQnVmZmVyZWQKICAgICAgICAgIEFwcGxpZXMgb25seSBpZiB5b3UgdXNlIHRoZSAtLWRlc2t0b3AgY29tbWFuZC1saW5lIG9wdGlvbiB0bwogICAgICAgICAgcnVuIGluIGEgZGVza3RvcCB3aW5kb3cuIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNyZWF0ZSB0aGUKICAgICAgICAgIGRlc2t0b3Agd2luZG93IHdpdGggYSBkb3VibGUtYnVmZmVyZWQgdmlzdWFsLCBzb21ldGhpbmcgbW9zdAogICAgICAgICAgT3BlbkdMIGdhbWVzIG5lZWQgdG8gcnVuIGNvcnJlY3RseS4KICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gT3ZlIEvldmVuCg==