PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ2xlYW4gdXAgdGhlIFRRTTh4eF9ZWU1IeiBjb25maWd1cmF0aW9uczsgYWxsb3cgdG8gdXNlIHRoZSBzYW1lCiAgYmluYXJ5IGltYWdlIGZvciBhbGwgY2xvayBmcmVxdWVuY2llcy4gSW1wbGVtZW50IHJ1bi10aW1lCiAgb3B0aW1pemF0aW9uIG9mIGZsYXNoIGFjY2VzcyB0aW1pbmcgYmFzZWQgb24gdGhlIGFjdHVhbCBidXMKICBmcmVxdWVuY3kuCgoqIE1vZGlmeSBLVVA0WCBib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSBTTDgxMSBkcml2ZXIgZm9yIFVTQiBtZW1vcnkKICBzdGlja3MgKGluY2x1ZGluZyBGQVQgLyBWRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCkKCiogQWRkIFNMODExIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IKCiogQWRkIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cgZGVzcmlwdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE5IEFwciAyMDA0OgogIEFsbG93IHRvIHVzZSBzaGVsbCBzdHlsZSBzeW50YXggKGkuIGUuICR7dmFyfSApIHdpdGggc3RhbmRhcmQgcGFyc2VyLgogIE1pbm9yIHBhdGNoZXMgZm9yIEludHJhY29tIGJvYXJkcy4KCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDE5IEFwciAyMDA0OgogIGNsZWFudXAgc3VwcG9ydCBmb3IgQ0YvSURFIG9uIFBDTUNJQSBmb3IgUFhBMjVYCgoqIFRlbXBvcmFyaWx5IGRpc2FibGVkIEpvaG4gS2VybCdzIGV4dGVuZGVkIE1JSSBjb21tYW5kIGNvZGUgYmVjYXVzZQogICJtaWl2YWxzLmgiIGlzIG1pc3NpbmcKCiogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxMyBBcHIgMjAwNDoKICAtIFJlbW92ZSBDUzAgY2hpcCBzZWxlY3QgdGltaW5nIHNldHRpbmcgZnJvbSBjcHUvbXBjNXh4eC9zdGFydC5TCiAgLSBBZGQgc3luYyBpbnN0cnVjdGlvbnMgdG8gSWNlQ3ViZSBTRFJBTSBpbml0IGNvZGUKICAtIE1vdmUgU0RSQU0gY2hpcCBjb25zdGFudHMgaW50byBzZXBlcmF0ZSBpbmNsdWRlIGZpbGVzCiAgLSBVbmlmeSBERFIgYW5kIFNEUiBpbml0aWFsaXphdGlvbiBjb2RlCiAgLSBVbmlmeSBhbGwgSWNlQ3ViZSAoTGl0ZTV4eHgpIHRhcmdldCBuYW1lcwoKKiBQYXRjaCBieSBKb2huIEtlcmwsIDE2IEFwciAyMDA0OgogIEVuYWJsZSByYW5nZXMgaW4gbWlpIGNvbW1hbmQsIGUuZy4gbWlpIHJlYWQgMC0xZiAwIG9yCiAgbWlpIHJlYWQgNC03IDE4LTFhLiAgQWxzbyBhZGQgbWlpIGR1bXAgc3ViY29tbWFuZCBmb3IKICBwcmV0dHktcHJpbnRpbmcgc3RhbmRhcmQgcmVncyAwLTUuCgoqIFBhdGNoIGJ5ICBTdGVwaGVuIFdpbGxpYW1zLCAxNiBBcHJpbCAyMDA0OgogIGZpeCB0eXBvIGluIEpTRS5oOyB1cGRhdGUgTUFJTlRBSU5FUlMKCiogUGF0Y2ggYnkgTWF0dGhldyBTLiBNY0NsaW50b2NrLCAxNCBBcHIgMjAwNDoKICBmaXggaW5pdGRyYW0gZnVuY3Rpb24gZm9yIHV0eDgyNDUgYm9hcmQKCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDE0IEFwciAyMDA0OgogIHVzZSBBVEFHX0lOSVRSRDIgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFUQUdfSU5JVFJEIHRhZwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMTggQXByIDIwMDQ6CiAgcHJvdmlkZSB0aGUgSURFIFJlc2V0IEZ1bmN0aW9uIGZvciBFTUsgNTIwMCBib2FyZHMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTIgQXByIDIwMDQ6CiAgZml4IHBjaV9ob3NlX3dyaXRlX2NvbmZpZ197Ynl0ZSx3b3JkfV92aWFfZHdvcmQgcHJvYmxlbXMKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxMiBBcHIgMjAwNDoKICBVcGRhdGUgbWF4IFJBTSBzaXplIGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDggQXByIDIwMDQ6CiAgQWRkIFRMQiBlbnRyeSBmb3Igc2Vjb25kIERJTU0gc2xvdCBvbiBvY290ZWEKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggQXByIDIwMDQ6CiAgYWRkIFJUTDgxNjkgbmV0d29yayBkcml2ZXIKCiogUGF0Y2ggYnkgRGFuIE1hbGVrLCAwNyBBcHIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUEMvU1R4IEdQMywgTW90b3JvbGEgODU2MCBib2FyZAogIC0gVXBkYXRlIDg1eHggVFNFQyBkcml2ZXIgc28gaXQgc2VhcmNoZXMgTUlJIGZvciBmaXJzdCBhdmFpbGFibGUgUEhZCiAgICBhbmQgdXNlcyB0aGF0IG9uZS4KICAtIEFkZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBjb25zb2xlIE1JSSBjb21tYW5kcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDQ6CiAgTW92ZSBpbml0aWFsaXphdGlvbiBvZiBiaV9paWNfZmFzdFtdCiAgZnJvbSBib2FyZF9pbml0X2YoKSB0byBib2FyZF9pbml0X3IoKQoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKICBDbGVhbnVwIG1pY3JvYmxhemUgcG9ydAoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IEFwciAyMDA0OgogIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIERlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMDYgQXByIDIwMDQ6CiAgLSBGaXggc29tZSBQQ0kgcHJvYmxlbXMgb24gdGhlIE1QQzgyNjZBRFMgYm9hcmQKICAtIEZpeCB0aGUgbG9jYXRpb24gb2Ygc29tZSBQQ0kgZW50cmllcyBpbiB0aGUgaW1tYXAgc3RydWN0dXJlCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIG1pY3JvYmxhemUgcHJvY2Vzc29ycwogIC0gYWRkIHN1cHBvcnQgZm9yIEF0bWFya1RlY2hubyAic3V6YWt1IiBib2FyZAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiBmbGFzaAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIEpGRlMyIE5BTkQgc3VwcG9ydC4KCiogQWRkZWQgc3VwcG9ydCBmb3IgSkZGUzIgZmlsZXN5c3RlbSAocmVhZC1vbmx5KSBvbiB0b3Agb2YgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTYgQXByIDIwMDQ6CiAgTEJBNDggZml4ZXMKCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgdmVyc2lvbiBvZiBhbiBJbnRyYWNvbSBib2FyZCBhbmQgZml4CiAgICB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbiBvdGhlcnMuCiAgLSBhZGQgdmVyaWZ5IHN1cHBvcnQgdG8gdGhlIGNyYzMyIGNvbW1hbmQgKGRlZmluZQogICAgQ09ORklHX0NSQzMyX1ZFUklGWSB0byBlbmFibGUgaXQpCiAgLSBmaXggRkVDIGRyaXZlciBmb3IgTVBDOHh4IHN5c3RlbXM6CiAgICAxLiBmaXggY29tcGlsYXRpb24gcHJvYmxlbXMgZm9yIGJvYXJkcyB0aGF0IHVzZSBkeW5hbWljCiAgICAgICBhbGxvY2F0aW9uIG9mIERQUkFNCiAgICAyLiBzaHV0IGRvd24gRkVDIGFmdGVyIG5ldHdvcmsgdHJhbnNmZXJzCiAgLSBIVVNIIHBhcnNlciBmaXhlczoKICAgIDEuIEEgbmV3IHRlc3QgY29tbWFuZCB3YXMgYWRkZWQuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKICAgICAgIHRoZSBvbmUgaW4gdGhlIGJvdXJuZSBzaGVsbC4KICAgIDIuIEEgbmV3IGV4aXQgY29tbWFuZCB3YXMgYWRkZWQgd2hpY2ggdGVybWluYXRlcyB0aGUgY3VycmVudAogICAgICAgZXhlY3V0aW5nIHNjcmlwdC4KICAgIDMuIEZpeGVkIGhhbmRpbmcgb2YgJD8gKGV4aXQgY29kZSBvZiBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQpCiAgLSBGaXggc29tZSBjb21waWxlIHByb2JsZW1zOwogICAgYWRkICJvbmNlIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV0cmV0cnkgdmFyaWFibGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwMiBBcHIgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgQXNzYWJldCBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwMSBBcHIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgUGljdHVyZSBFbGVtZW50cyBKU0UgYm9hcmQKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDAxIEFwciAyMDA0OgogIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgUFhBIHN5c3RlbXMuCgoqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0OgogIC0gYWRkIGF1dG8tY29tcGxldGUgc3VwcG9ydCB0byB0aGUgVS1Cb290IENMSQogIC0gYWRkIHN1cHBvcnQgZm9yIE5FVFRBIGFuZCBORVRQSE9ORSBib2FyZHM7IGZpeCBORVRWSUEgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRXBzb24gMTU2eCBzZXJpZXMgb2YgZ3JhcGhpY2FsIGRpc3BsYXlzCiAgICAoVGhlc2UgZGlzcGxheXMgYXJlIHNlcmlhbCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2luZyBhIG5vcm1hbAogICAgZnJhbWVidWZmZXIgY29uc29sZSBvbiB0aGVtKQogIC0gYWRkIGluZnJhc3RydWN0dXJlIG5lZWRlZCBpbiBvcmRlciB0byBQT1NUIGFueSBEU1BzIGluIGEgYm9hcmQKICAtIGltcHJvdmUgYW5kIGZpeCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgTVBDOHh4IEZFQyBkcml2ZXI6CiAgICAxLiBUaGUgbmV3IDg3eCBhbmQgODh4IHNlcmllcyBvZiBwcm9jZXNzb3JzIGhhdmUgdHdvIEZFQ3MsCiAgICAgICBhbmQgdGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoLgogICAgMi4gQW5vdGhlciBjaGFuZ2UgaW4gdGhlIDg3eC84OHggc2VyaWVzIGlzIHN1cHBvcnQgZm9yCiAgICAgICB0aGUgUk1JSSAoUmVkdWNlZCBNSUkpIGludGVyZmFjZS4gSG93ZXZlciBudW1lcm91cwogICAgICAgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBzaW5jZSB0aGUgUEhZcwogICAgICAgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBsaW5lcy4gVGhhdCBtZWFucyB0aGF0CiAgICAgICB5b3UgaGF2ZSB0byBhZGRyZXNzIHRoZW0gY29ycmVjdGx5IG92ZXIgdGhlIE1JSQogICAgICAgaW50ZXJmYWNlLgogICAgMy4gV2Ugbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgTUlJL1JNSUkgaW50ZXJmYWNlCiAgICAgICBjb25maWd1cmF0aW9uIHRvIHdoYXQgdGhlIFBIWSByZXBvcnRzLgogIC0gRml4IHByb2JsZW0gd2hlbiByZWFkaW5ndGhlIE1JSSBzdGF0dXMgcmVnaXN0ZXIuIER1ZSB0byB0aGUKICAgIGludGVybmFsIGRlc2lnbiBvZiBtYW55IFBIWXMgeW91IGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIKICAgIHR3aWNlLiBUaGUgcHJvYmxlbSBpcyBtb3JlIGFwcGFyZW50IGluIDEwTWJpdCBtb2RlLgogIC0gYWRkIG5ldyBtb2RlICIuamZmczJzIiBmb3IgcmVhZGluZyBmcm9tIGEgTkFORCBkZXZpY2U6IGl0IGp1c3QKICAgIHNraXBzIG92ZXIgYmFkIGJsb2Nrcy4KICAtIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIFZMQU5zICg4MDIuMXEpLCBhbmQgQ0RQIChDaXNjbwogICAgRGlzY292ZXJ5IFByb3RvY29sKQogIC0gc29tZSBtaW5vciBwYXRjaGVzIC8gY2xlYW51cAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyIGZhbWlseSBpbmNsdWRpbmcgTVBDODI0Ny84MjQ4LzgyNzEvODI3MgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzJBRFMgZXZhbHVhdGlvbiBib2FyZCAoYW5vdGhlciBmbGF2b3VyIG9mIE1QQzgyNjBBRFMpCiAgLSBDaGFuZ2UgY29uZmlndXJhdGlvbiBtZXRob2QgZm9yIE1QQzgyNjBBRFMgZmFtaWx5CgoqIGFkZCBzdGFydHVwIGNvZGUgdG8gY2xlYXIgdGhlIEJTUyBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBGaXggaWYgLyBlbGlmIGhhbmRsaW5nIGJ1ZyBpbiBIVVNIIHNoZWxsCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzOiBSZW1vdmUgY29uZmlnLnRtcCBmaWxlcyBvbmx5IHdoZW4KICB1bmNvbmZpZ3VyaW5nIHRoZSBib2FyZAoKKiBBZGFwdCBSTVUgYm9hcmQgZm9yIGJpZ2dlciBmbGFzaCBtZW1vcnkKCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTMgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEtVUDRYIEJvYXJkCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBNYXIgMjAwNAogIEFkZCBSZWlzZXJmcyBzdXBwb3J0CgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIwIE1hciAyMDA0CiAgLSBBZGQgYXV0by1yZWxlYXNlIGZvciBTTVNDIExBTjkxYzExMSBkcml2ZXIKICAtIEFkZCBzYXZlL3Jlc3RvcmUgb2YgUFRSIGFuZCBQTlIgcmVncyBhcyBzdWdnZXN0ZWQgaW4gZGF0YXNoZWV0CgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE5IE1hcmNoIDIwMDQKICBJbmNyZWFzZSBzcGVlZCBvZiBzZWN0b3IgcmVhZHMgZnJvbSBTeXN0ZW1BQ0UsCiAgc2hvcnRlbiBwb2xsIHRpbWVvdXQgYW5kIHJlbW92ZSBhIHVzZWxlc3MgcmVzZXQKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTkgTWFyIDIwMDQ6CiAgTWFrZSBHaWdFIFBIWSAxMDAwTWJwcyBTcGVlZC9EdXBsZXggZGV0ZWN0aW9uIGNvbmRpdGlvbmFsCiAgKENPTkZJR19QSFlfR0lHRSkKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxOCBNYXIgMjAwNDoKICBwcmV2ZW50IG1hY2hpbmUgY2hlY2tzIGR1cmluZyBhIFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIEZpeCBzdHJpbmcgY2xlYW5pbmcgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIC0gVW5pZnkgdmlkZW8gbW9kZSBoYW5kbGluZyBmb3IgQ2hpcHMgJiBUZWNobm9sb2dpZXMgNjkwMDAgVmlkZW8KICAgIGNoaXAgYW5kIFNpbGljb24gTW90aW9uIFNNSSA3MTIvNzEwLzgxMCBWaWRlbyBjaGlwCiAgLSBBZGQgc2VsZWN0aW9uIG9mIHRoZSB2aWRlbyBvdXRwdXQgKENSVCBvciBMQ0QpIHZpYSAndmlkZW9vdXQnCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlIFNpbGljb24gTW90aW9uCiAgLSBSRUFETUUgdXBkYXRlCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIGluY2x1ZGUvY29tbW9uLmggdHlwbyBmaXgKCiogUGF0Y2hlcyBieSBUb2x1bmF5IE9ya3VuLCAxNyBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBiZC0+YmlfaWljX2Zhc3RbXSBpbml0aWFsaXphdGlvbiB2aWEgZW52aXJvbm1lbnQKICAgIHZhcmlhYmxlICJpMmNmYXN0IiAoQ09ORklHX0kyQ0ZBU1QpCiAgLSBBZGQgImkyY2Zhc3QiIHUtYm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdXBwb3J0IGZvciBjc2IyNzIKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMTcgTWFyIDIwMDQ6CiAgSWdub3JlICdcMCcgY2hhcmFjdGVycyBpbiBjb25zb2xlIGlucHV0IGZvciB1c2Ugd2l0aCB0ZWxuZXQgYW5kCiAgdGVsY28gcGFkcy4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxNyBNYXIgMjAwNDoKICB0eXBvIGZpeCBmb3Igc3Ryc3dhYiBwcm90b3R5cGUgI2lmZGVmCgoqIFBhdGNoZXMgYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTYgTWFyIDIwMDQ6CiAgLSBzaG93IFBDSSBjbG9jayBmcmVxdWVuY3kgb24gTVBDODI2MCBzeXN0ZW1zCiAgLSBhZGQgRkNDX1BTTVJfUk1JSSBmbGFnIGZvciBIaVA3IHByb2Nlc3NvcnMKICAtIGluIGRvX2pmZnMyX2ZzbG9hZCgpLCB0YWtlIGxvYWQgYWRkcmVzcyBmcm9tIGxvYWRfYWRkciBpZiBub3Qgc2V0CiAgICBleHBsaWNpdCwgdXBkYXRlIGxvYWRfYWRkciBvdGhlcndpc2UKICAtIHJlcGxhY2VkIHByaW50ZiBieSBwdXRjL3B1dHMgd2hlbiBubyBmb3JtYXR0aW5nIGlzIG5lZWRlZAogICAgKHNtYWxsZXIgY29kZSBzaXplLCBmYXN0ZXIgZXhlY3V0aW9uKQoKKiBQYXRjaCBieSBQaGlsbGlwcGUgUm9iaW4sIDE2IE1hciAyMDA0OgogIGF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGluIGxpYl9hcm0vYXJtbGludXguYwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBNYXIgMjAwNDoKICBGaXggQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTUgTWFyIDIwMDQ6CiAgSW5pdGlhbGl6ZSBiaV9vcGJmcmVxIHRvIHJlYWwgT1BCIGZyZXF1ZW5jeSB2aWEgZ2V0X09QQl9mcmVxKCkKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgTWFyIDIwMDQ6CiAgVXBkYXRlIENSRURJVFMgJiBNQUlOVEFJTkVSUyBmaWxlcyBmb3IgUFBDNDQwR1ggJiBPY290ZWEgcG9ydAoKKiBBZGQgc3RhcnQtdXAgZGVsYXkgdG8gbWFrZSBzdXJlIHBvd2VyIGhhcyBzdGFiaWxpemVkIGJlZm9yZQogIGF0dGVtcHRpbmcgdG8gc3dpdGNoIG9uIFVTQiBvbiBTWDEgYm9hcmQuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTggTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgWE0yNTAgYm9hcmQgKFBYQTI1NSkKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTgyOCBib2FyZCAoTVBDODI4MCkKICAtIEFkZCBzdXBwb3J0IGZvciAzMiBNQiBGbGFzaCBvbiBQTTgyNS84MjYKICAtIG5ldyBTRFJBTSByZWZyZXNoIHJhdGUgZm9yIFBNODI1L1BNODI2CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTUyMCAoTVBDNTIwMCkKICAtIHJlcGxhY2VkIFF1ZXJ5IGJ5IElkZW50aWZ5IGNvbW1hbmQgaW4gQ1BVODYvZmxhc2guYwogICAgdG8gc3VwcG9ydCAyOEYxNjBGM0IKCiogRml4IHdyYXAgYXJvdW5kIHByb2JsZW0gd2l0aCB1ZGVsYXkoKSBvbiBBUk05MjBUCgoqIEFkZCBzdXBwb3J0IGZvciBNYWNyb25peCBmbGFzaCBvbiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE1IE1hciAyMDA0OgogIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIEZpeCBwb3dlci1vZmYgb2YgTENEIGZvciBvdXQtb2YtYmFuZCB0ZW1wZXJhdHVyZXMgb24gTFdNT04gYm9hcmQKCiogUmVtb3ZlIHJlZHVuZGFuZCAjZGVmaW5lIGluIEljZUN1YmUuaAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNyBGZWIgMjAwNDoKICAtIEFkZGluZyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgZm9yIEFUOTFSTTkyMDAKICAtIE1hbnkgd2hpdGUgc3BhY2UgZml4ZXMgaW4gY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCgoqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CiAgc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgcmVsYXRlZCBjb2RlCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMTIgTWFyIDIwMDQ6CiAgLSBGaXggR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IGZvciA0NDBHWAogIC0gQWRkIEdpZ2FiaXQgRXRoZXJuZXQgU3VwcG9ydCB0byBNSUkgUEhZIHV0aWxpdGllcwoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDEyIE1hciAyMDA0OgogIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQmV0dGVyIHN1cHBvcnQgZm9yIHg4L3gxNiBpbXBsZW1lbnRhdGlvbnMKICAtIEFkZGVkIGZhaWx1cmUgZm9yIEFNRCBjaGlwcyBhdHRlbXB0aW5nIHRvIHVzZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQogIC0gQWRkZWQgZGVmaW5lcyBmb3IgQU1EIGNvbW1hbmQgYW5kIGFkZHJlc3MgY29uc3RhbnRzCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgTWFyIDIwMDQ6CiAgRml4IGdldF9kZW50ZnJvbWRpcigpIHRvIGNvcnJlY3RseSBoYW5kbGUgZGVsZXRlZCBkZW50cmllcwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIFJlbW92ZSBoYXJkIGNvZGVkIG5ldHdvcmsgc2V0dGluZ3MgaW4gVEkgT01BUDE2MTAgSDIKICBkZWZhdWx0IGJvYXJkIGNvbmZpZwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBBRFMgR3JhcGhpY3NDbGllbnQrIGJvYXJkLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMSBNYXIgMjAwNDoKICAtIGFkZCBiaXRtYXAgY29tbWFuZCBhbmQgc3BsYXNoIHNjcmVlbiBzdXBwb3J0IGluIGNmYiBjb25zb2xlCiAgLSBhZGQgW29wdGlvbmFsXSBvcmlnaW4gaW4gdGhlIGJpdG1hcCBkaXNwbGF5IGNvbW1hbmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTEgTWFyIDIwMDQ6CiAgRml4IG9jb3RlYSBib2FyZCBlYXJseSBpbml0IGludGVycnVwdCBzZXR1cC4KCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIHJlZHVuZGFuZCBjb2RlOyBhZGQgIFBDSS1zcGVjaWZpYyBiaXRzIHRvIGluY2x1ZGUvbXBjODI2MC5oCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMDkgTWFyIDIwMDQKICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgU1NWIEFETlAvRVNDMSAoTmlvcyBTb2Z0Y29yZSkKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCA5IE1hciAyMDA0OgogIGZpeCByZWNlbnQgYnVpbGQgZmFpbHVyZSBmb3IgU0ExMTAwIHRhcmdldAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBNYXIgMjAwNDoKICBTdXBwb3J0IG5hdGl2ZSBpbnRlcnJ1cHQgbW9kZSBmb3IgdGhlIElCTTQ0MEdYLgogIFByZXZpb3VzbHkgaXQgd2FzIHJ1bm5pbmcgaW4gNDQwR1AgY29tcGF0aWJpbGl0eSBtb2RlLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDkgTWFyIDIwMDQ6CiAgQWRkZWQgQVJNIEludGVncmF0b3IgQVAsIENQIGFuZCBWZXJzYXRpbGUgUEI5MjZFSi1TIFJlZmVyZW5jZQogIFBsYXRmb3JtIHN1cHBvcnQuCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IE1hciAyMDA0OgogIERvbid0IG92ZXJ3cml0ZSBzZXJ2ZXIgSVAgYWRkcmVzcyBvciBib290IGZpbGUgbmFtZQogIHdoZW4gdGhlIGJvb3Qgc2VydmVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBSZW1vdmVkIGNvbXBpbGUgdGltZSByZXN0cmljdGlvbiBvbiBDRkdfSTJDX1NQRUVEIGZvciBEUzEzMzggUlRDCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CiAgRml4IGVhcmx5IGJvYXJkIGluaXRpYWxpemF0aW9uIGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCgoqIFBhdGNoIGJ5IEVkIE9rZXJzb24sIDMgTWFyIDIwMDQ6CiAgZml4IENGSSBmbGFzaCB3cml0ZXMgZm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtcwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDEgTWFyIDIwMDQ6CiAgZ2VuZXJhbGl6ZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBNUEM1MjAwIHdpdGggYWNjb3JkaW5nCiAgY2hhbmdlcyB0byBJY2VDdWJlLmggYW5kIFRPUDUyMDAuaAogIGFkZCBBbTI5TFYyNTYgMjU2IE1CaXQgRkxBU0ggc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZHMKICBhZGQgaW5mbyBhYm91dCBVU0IgYW5kIElERSB0byBSRUFETUUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNCBNYXIgMjAwNDoKICBGaXggcHJvYmxlbXMgd2l0aCBHQ0MgMy4zLnggd2hpY2ggY2hhbmdlZCBoYW5kbGluZyBvZiBnbG9iYWwKICB2YXJpYWJsZXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIChub3cgaW4gLmJzcyBpbnN0ZWFkIG9mCiAgLmRhdGEgYXMgYmVmb3JlKS4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAwMiBNYXIgMjAwNDoKICBhZGQgc3Ryc3dhYigpIHRvIGZpeCBJREUgTEJBIGNhcGFjaXR5LCBmaXJtd2FyZSBhbmQgbW9kZWwgbnVtYmVycwogIG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDIgTWFyIDIwMDQ6CiAgLSBSZW1vdmUgZ2V0X3RpY2tzKCkgZnJvbSBORlMgY29kZQogIC0gQWRkIHZlcmlmaWNhdGlvbiBvZiBSUEMgdHJhbnNhY3Rpb24gSUQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDIgTWFyIDIwMDQ6CiAgY2xlYW51cCBmb3IgSURFIGFuZCBVU0IgZHJpdmVycyBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwMSBNYXIgMjAwNDoKICBPY290ZWE6CiAgLSBBZGQgSUJNIFBQQzQ0MEdYIFJlZiBQbGF0Zm9ybSBzdXBwb3J0IChPY290ZWEpCiAgICBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgUmV5bm9sZHMgPFBhdWxSZXlub2xkc0BsaHNvbHV0aW9ucy5jb20+CiAgICBBZGFwdGVkIHRvIFUtQm9vdCBhbmQgNDQwR1ggcG9ydAogIDQ0MGd4X2VuZXQuYzoKICAtIEFkZCBncmFjaW91cyBoYW5kbGluZyBvZiBhbGwgRXRoZXJuZXQgUGluIFNlbGVjdGlvbnMgZm9yIDQ0MEdYCiAgLSBBZGQgUkdNSUkgc2VsZWN0aW9uIGZvciBDaWNhZGEgQ0lTODIwMSBHaWdhYml0IFBIWQogIHBwYzQ0MC5oOgogIC0gQWRkIG5lZWRlZCBiaXQgZGVmaW5pdGlvbnMKICAtIEZpeCBmb3JtYXR0aW5nCgoqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDEgTWFyIDIwMDQ6CiAgQWRkIFBQQzQ0MEdYIHByYmR2MCBkaXZpZGVyIHRvIGZpeCBtZW1vcnkgY2xvY2sgY2FsY3VsYXRpb24uCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjcgRmViIDIwMDQKICAtIGF2b2lkIHByb2JsZW1zIGZvciB0YXJnZXRzIHdpdGhvdXQgTkZTIGRvd25sb2FkIHN1cHBvcnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDI3IEZlYiAyMDA0OgogIC0gQWRkZWQgTEJBNDggc3VwcG9ydCAoQ09ORklHX0xCQTQ4ICYgQ0ZHXzY0QklUX0xCQSkKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHByaW50aW5nIGluIHZzcHJpbnRmIChDRkdfNjRCSVRfVlNQUklOVEYpCiAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBzdHJ0b3VsIChDRkdfNjRCSVRfU1RSVE9VTCkKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjcgRmViIDIwMDQ6CiAgRml4IHJhcnBib290OiBhZGQgYXV0b2xvYWQgYnkgTkZTCgoqIFBhdGNoIGJ5IERhbiBFaXNlbmh1dCwgMjYgRmViIDIwMDQ6CiAgZml4IGZsYXNoX3dyaXRlIHJldHVybiB2YWx1ZSBpbiBzYXZlZW52CgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDMKICBleHBhbmQgY29uZmlnLm1rIHRvIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmdzIG9uIE5JT1MKCiogUmVuYW1lICJCTVMyMDAzIiBib2FyZCBpbnRvICJITUkxMCIKCiogU1gxIHBhdGNoZXM6IHVzZSAic2VyaWFsIyIgZm9yIFVTQiBzZXJpYWwgIzsgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAogIHN0b3JhZ2U7IGF1dG8tc2V0IGNvbnNvbGUgb24gVVNCIHBvcnQgKHVzaW5nIHByZWJvb3QgY29tbWFuZCkKCiogQWRkIHN1cHBvcnQgZm9yIFNYMSBtb2JpbGUgcGhvbmU7IGFkZCBzdXBwb3J0IGZvciBVU0ItYmFzZWQgY29uc29sZQogIChlbmFibGUgd2l0aCAic2V0ZW52IHN0ZG91dCB1c2J0dHk7IHNldGVudiBzdGRpbiB1c2J0dHkiKQoKKiBGaXggTE9XQk9PVCBjb25maWd1cmF0aW9uIGZvciBNUEM1MjAwIHdpdGggRERSIG1lbW9yeQoKKiBGaXggU0RSQU0gdGltaW5ncyBmb3IgTElURTUyMDAgLyBJY2VDdWJlIGJvYXJkCgoqIEhhbmRsZSBBdXRpLU1ESVggLyBjb25uZWN0aW9uIHN0YXR1cyBmb3IgSU5DQS1JUAoKKiBGaXggVVNCIHByb2JsZW1zIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIDAgYnl0ZXMKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjYgRmViIDIwMDQ6CiAgRml4IGJyb2tlbiBjb21waWxlIGZvciBYUEVESVRFMUsgdGFyZ2V0LgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI2IEZlYiAyMDA0OgogIEJ1ZyBmaXggZm9yIE5GUyBjb2RlIG9uIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyNiBGZWIgMjAwNDoKICBCcmVhayB1cCBTeXN0ZW1BQ0UgcmVhZHMgb2YgbGFyZ2UgYmxvY2sgY291bnRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI2IEZlYiAyMDA0CiAgYWRkIElERSBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI2IEZlYiAyMDA0OgogIGFkZCBhdXRvbG9hZCB2aWEgTkZTCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMKICBVc2Ugb2YgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGluIGJvYXJkLmMgY29uc2lzdGVudCB3aXRoIHVzZXMKICBlbHNld2hlcmUgaW4gdGhlIHNvdXJjZS4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgLSBUaW1lb3V0cyBpbiBGUEdBIGNvZGUgc2hvdWxkIGJlIGJhc2VkIG9uIENGR19IWgogIC0gTWlub3IgY2xlYW51cCBpbiBjb2RlIGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgQ2hhbmdlZCAiRGlyZWN0b3J5IEhpZXJhcmNoeSIgc2VjdGlvbiBpbiBSRUFETUUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjUgRmViIDIwMDQ6CiAgUmVkdWNlIGNvcHkgY291bnQgaW4gbmZzX3JlYWRfcmVwbHkoKSBvZiBORlMgY29kZQoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMjQgRmViIDIwMDQ6CiAgTlM5NzUwIERldkJvYXJkIGFkZGVkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IEZlYiAyMDA0CiAgYWRkIFVTQiBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgogIC0gZml4IE1JSSBjb21tYW5kcyB0byB1c2UgdmFsdWVzIGZyb20gbGFzdCBjb21tYW5kCgoqIFBhdGNoIGJ5IFRvcnN0ZW4gRGVta2UsIDI0IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgZVhhbGlvbiBwbGF0Zm9ybSAoU1BTVy04MjQwLCBGLTMwLCBGLTMwMCkKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDE5IEZlYiAyMDA0OgogIEZpeGVzIGZvciBmb3IgT01BUDE2MTAgYm9hcmQ6CiAgLSBzaGlmdCBzb21lIElSUSBzcGVjaWZpYyBjb2RlIHRvIHBsYXRmb3JtLlMgZmlsZQogIC0gcmVtb3ZlIGR1cGxpY2F0ZXdhdGNoZG9nIHJlc2V0IGNvZGUgZnJvbSBzdGFydC5TCgoqIE1ha2UgQXV0by1NRElYIFN1cHBvcnQgY29uZmlndXJhYmxlIG9uIElOQ0EtSVAgYm9hcmQKCiogRml4IGxpY2Vuc2UgZm9yIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNCBGZWIgMjAwNDoKICBVcGRhdGUgTmV0Qm9vdEZpbGVYZmVyU2l6ZSBpbiBORlMgY29kZQoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI0IEZlYiAyMDA0OgogIGZpeCBwYWNrZXQgbGVuZ3RoIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peSwgMjIgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5GUyBmb3IgZmlsZSBkb3dubG9hZAoKKiBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDE3IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBTM0M0NEIwIHByb2Nlc3NvciBhbmQgREFWRSBCMiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNSUkgY29tbWFuZHMgb24gQVQ5MVJNOTIwMCBib2FyZHMKICAtIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGNvZGUKCiogUGF0Y2ggYnkgUGV0ZXIgUnlzZXIsIDIwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgWGlsaW54IE1MMzAwIHBsYXRmb3JtCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTcgRmViIDIwMDQ6CiAgRml4IHdhdGNoZG9nIHN1cHBvcnQgZm9yIE5JT1MKCiogUGF0Y2ggYnkgSm9zaCBGcnltYW4sIDE2IEZlYiAyMDA0OgogIEZpeCBieXRlLXN3YXBwaW5nIGZvciBjZmlfZmxhc2guYyBmb3IgZGlmZmVyZW50IGJ1cyB3aWR0aHMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IEplYiAyMDA0OgogIFJlbW92ZSBkdXBsaWNhdGUgIkZQR0EgU3VwcG9ydCIgbm90ZXMgZnJvbSB0aGUgUkVBRE1FIGZpbGUKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgMTQgRmViIDIwMDQ6CiAgLSB1cGRhdGUgYm9hcmQvZW1rIHRyZWU7IHVzZSBjb21tb24gZmxhc2ggZHJpdmVyCiAgLSBDb3JyZWN0ZWQgdGVzdGVkIGJpdHMgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaW4gY3B1L21wYzV4eHgvdHJhcHMuYwogICAgW2FkYXB0ZWQgZm9yIG90aGVyIFBQQyBDUFVzIC0tIHdkXQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE00OFQwOCBvbiB0aGUgRVZBTDUyMDAgYm9hcmQgaW4gcnRjL21rNDh0NTkuYwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTMgRmViIDIwMDQ6CiAgQ2FsbCBzaG93X2Jvb3RfcHJvZ3Jlc3MoKSB3aGVuZXZlciBQT1NUICJGQUlMRUQiIGlzIHByaW50ZWQuCgoqIFBhdGNoIGJ5IE5pc2hhbnQgS2FtYXQsIDEzIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQMTYxMCBIMiBCb2FyZAogIEZpeGVzIGZvciBjcHUvYXJtOTI2ZWpzL2ludGVycnVwdC5jCgkoYmFzZWQgb24gUmljaGFyZCBXb29kcnVmZidzIHBhdGNoIGZvciBhcm05MjUsIDE2IE9jdCAwMykKICBGaXggZm9yIGEgdGltZXIgYnVnIGluIE9NQVAxNjEwIElubm92YXRvcgogIEFkZCBzdXBwb3J0IGZvciBDUzAgKFJPTSkvQ1MzIChGbGFzaCkgYm9vdCBpbiBPTUFQMTYxMCBJbm5vdmF0b3IgYW5kIEgyCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMiBGZWIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBOSU9TIHRpbWVyIHdpdGggdmFyaWFibGUgcGVyaW9kIHByZWxvYWQgY291bnRlciB2YWx1ZQogIC0gcHJlcGFyZSBQT1NUIGZyYW1ld29yayBzdXBwb3J0IGZvciBOSU9TIHRhcmdldHMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIEZlYiAyMDA0OgogIGFkZCBQT1NUIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgYm9hcmQKCiogUGF0Y2ggYnkgTGF1cmVudCBNb2hpbiwgMTAgRmViIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjb21tb24vdXNiLmMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgVGhvbWFzIEVsc3RlLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIEZlYiAyMDA0OgogIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEwIEZlYiAyMDA0CiAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKCiogUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDEwIEZlYiAyMDA0OgogIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCiAgIT0sIDw+LCA8LCA+LCA8PSwgPj0pCgoqIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCgoqIFBhdGNoIGJ5IERhdmlkIEJlbnNvbiwgMTMgTm92IDIwMDM6CiAgYnVnIDg0MTM1OCAtIGZpeCBURlRQIGRvd25sb2FkIHNpemUgbGltaXQKCiogRml4aW5nIGJ1ZyA4NTA3Njg6CiAgaW1wcm9wZXIgZmx1c2hfY2FjaGUoKSBpbiBsb2FkX3NlcmlhbCgpCgoqIEZpeGluZyBidWcgODM0OTQzOgogIE1QQzg1NDAgLSBtaXNzaW5nIHZvbGF0aWxlIGRlY2xhcmF0aW9ucwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwOSBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgWGlsaW54IFN5c3RlbUFDRSBjaGlwOgogIC0gTmV3IGZpbGVzIGNvbW1vbi9jbWRfYWNlLmMgYW5kIGluY2x1ZGUvc3lzdGVtYWNlLmgKICAtIEhvb2sgc3lzdGVtYWNlIHN1cHBvcnQgaW50byBjbWRfZmF0IGFuZCB0aGUgcGFydGl0aW9uIG1hbmFnZXIKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgQWRkIGJpX29wYmZyZXEgJiBiaV9paWNfZmFzdCB0byA0NDBHWCBiZF9pbmZvIGFzIG5lZWRlZCBmb3IgTGludXgKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgbyA0NDBHWDoKICAgIC0gRml4IFBDSSBJbmRpcmVjdCBhY2Nlc3MgZm9yIHR5cGUgMSBjb25maWcgY3ljbGVzIHdpdGggcHBjNDQwLgogICAgLSBBZGQgcGh5bW9kZSBmb3IgNDQwIGVuZXQKICAgIC0gZml4IHBjaSBwcmUgaW5pdAogIG8gWFBlZGl0ZTFLOgogICAgLSBDaGFuZ2UgYm9hcmRfcHJlX2luaXQgdG8gYm9hcmRfZWFybHlfaW5pdF9mCiAgICAtIEFkZCB1c2VyIGZsYXNoIHRvIGJ1cyBjb250cm9sbGVyIHNldHVwCiAgICAtIEZpeCBwY2kgcHJlIGluaXQKICAgIC0gRml4IGlzX3BjaV9ob3N0IHRvIGNoZWNrIEdQSU8gZm9yIG1vbmFyY2ggYml0CiAgICAtIEZvcmNlIHhwZWRpdGUxayB0byBwY2kgY29udmVudGlvbmFsIG1vZGUgKHZpYSAjZGVmaW5lIG9wdGlvbikKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCA0IEZlYiAyMDA0OgogIC0gaGFuZGxlIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgaXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgUENJIHNjYW5zCiAgICBvbiA4Mnh4IHByb2Nlc3NvcnMuCiAgLSBkZWZpbmUgdGhlIHJlZ2lzdGVycyB1c2VkIGluIHRoZSBJTU1SIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMyBGZWIgMjAwNDoKICBjcHUvbXBjNXh4eC9zdGFydC5TOiBjb3B5IE1CQVIgaW50byBTUFIzMTEKCiogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAzIEZlYiAyMDA0OgogIEZpeCBjb3B5ICYgcGFzdGUgZXJyb3IgaW4gY3B1L21wYzgyNjAvcGNpLmMKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI0IEphbiAyMDA0OgogIEZpeCB0eXBvIGluIGNwdS9tcGM1eHh4L3BjaV9tcGM1MjAwLmMKCiogQWRkIEF1dG8tTURJWCBzdXBwb3J0IGZvciBJTkNBLUlQCgoqIFNvbWUgY29kZSBjbGVhbnVwCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAxMCBGZWIgMjAwNDoKICBGaXhlcyBmb3IgQ29sZGZpcmUgcG9ydAoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDExIEZlYiAyMDA0OgogIEZpeCBDRkkgZmxhc2ggZHJpdmVyIHByb2JsZW1zCgoqIE1ha2Ugc3VyZSB0byB1c2UgYSBidXMgY2xvY2sgZGl2aWRlciBvZiAyIG9ubHkgd2hlbiBydW5uaW5nIFRRTTh4eE0KICBtb2R1bGVzIGF0IENQVSBjbG9jayBmcmVxdWVuY2llcyBhYm92ZSA2NiBNSHouCgoqIE9wdGltaXplIGZsYXNoIHByb2dyYW1taW5nIHNwZWVkIGZvciBMV01PTiAoYnkgYW5vdGhlciAxMDAlIDotKQoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAzIEZlYiAyMDA0OgogIC0gQ2hhbmdlZCB0aGUgaW5jb3JyZWN0IEZBVDEyQlVGU0laRQogIC0gZGF0YV9iZWdpbiBpbiBmc2RhdGEgY2FuIGJlIG5lZ2F0aXZlLiBDaGFuZ2VkIGl0IHRvIGJlIHNob3J0LgoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMzAgSmFuIDIwMDQ6CiAgMTogLSBib2FyZC9hbHRlcmEvY29tbW9uL2ZsYXNoLmM6Zmxhc2hfZXJhc2UoKToKICAgICAgIG8gYWxsb3cgaW50ZXJydXB0cyBiZWZvciBnZXRfdGltZXIoKSBjYWxsCiAgICAgICBvIGNoZWNrLXVwIGVhY2ggZXJhc2VkIHNlY3RvciBhbmQgYXZvaWQgdW5leHBlY3RlZCB0aW1lb3V0cwogICAgIC0gYm9hcmQvYWx0ZXJhL2RrMWMyMC9kazFzMTAuYzpib2FyZF9lYXJseV9pbml0X2YoKToKICAgICAgIG8gZW5jbG9zZSBzZXZlbnNlZ19zZXQoKSBpbiBjcHAgY29uZGl0aW9uCiAgICAgLSByZW1vdmUgdGhlIEFTTUkgY29uZmlndXJhdGlvbiBmb3IgREsxUzEwX3N0YW5kYXJkXzMyIChuZXZlciBwcmVzZW50KQogICAgIC0gZml4IHNvbWUgdHlwZWQgaW4gbWlzdGFrZXMgaW4gdGhlIE5JT1MgZG9jdW1lbnRhdGlvbgogIDI6IC0gc3BsaXQgREsxQzIwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFDMjAuaAogIDM6IC0gc3BsaXQgREsxUzEwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFTMTAuaAogIDQ6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3Ryb25peCBMaW51eCBEZXZlbG9wbWVudCBLaXQKICAgICAgIE5JT1MgQ1BVIGNvbmZpZ3VyYXRpb24gYXQgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKICA1OiAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDY6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIFNlcmlhbCBQZXJpcGhhcmVsIEludGVyZmFjZSAoU1BJKQogICAgICAgKG1hc3RlciBvbmx5KQogIDc6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBjb21tb24gVS1Cb290IFNQSSBmcmFtZXdvcmsgYXQKICAgICAgIFJUQyBkcml2ZXIgRFMxMzA2CgoqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAyOCBKYW4gMjAwNDoKICBGaXggZmxhc2ggcHJvdGVjdGlvbi9sb2NraW5nIGhhbmRsaW5nIGZvciBPTUFQMTYxMCBpbm5vdmF0b3IgYm9hcmQuCgoqIFBhdGNoIGJ5IFJvbGYgUGV1a2VydCwgMjggSmFuIDIwMDQ6CiAgZml4IGZsYXNoIHdyaXRlIHByb2JsZW1zIG9uIENTQjIyNiBib2FyZCAod3JpdGUgd2l0aCAzMiBiaXQgYnVzIHdpZHRoKQoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDE2IEphbiAyMDA0OgogIC0gZml4IHJvdW5kaW5nIGVycm9yIHdoZW4gY2FsY3VsYXRpbmcgYmF1ZHJhdGVzIGZvciBNUEM1MjAwIFBTQ3MKICAtIG1ha2Ugc3VyZSBDRkdfUkFNQk9PVCBhbmQgQ0ZHX0xPV0JPT1QgYXJlIG5vdCBlbmFibGVkIGF0IHRoZSBzYW1lCiAgICB0aW1lIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjYgSmFuIDIwMDQ6CiAgQWxsb3cgYnppcDIgY29tcHJlc3Npb24gZm9yIHNtYWxsIG1lbW9yeSBmb290cHJpbnQgYm9hcmRzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMjEgSmFuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENGSSBmbGFzaCBkcml2ZXIgZm9yIGJvdGggdGhlIEludGVsIGFuZCB0aGUgQU1ECiAgY29tbWFuZCBzZXRzLgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMCBKYW4gMjAwNDoKICBGaXggcGNpIGJyaWRnZSBhdXRvIGVudW1lcmF0aW9uIG9mIHNpYmxpbmcgcDJwIGJyaWRnZXMuCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEyIEphbiAyMDA0OgogIEFkZCBzb21lIGRlbGF5cyBhcyBuZWVkZWQgZm9yIEludGVsIExYVDk3MUEgUEhZIHN1cHBvcnQKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDA5IEphbiAyMDA0OgogIC0gYXZvaWQgd2FybmluZzogdW51c2VkIHZhcmlhYmxlIGBwaW9wJyBpbiBib2FyZC9hbHRlcmEvY29tbW9uL3NldmVuc2VnLmMKICAtIG1ha2UgREsxQzIwIGJvYXJkIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBBU01JIGNvbmZvcm0gdG8KICAgIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDkgSmFuIDIwMDQ6CgogIEFSTSBtZW1vcnkgbGF5b3V0IGZpeGVzOiB0aGUgYWJvcnQtc3RhY2sgaXMgbm93IHNldCB1cCBpbiB0aGUKICBjb3JyZWN0IFJBTSBhcmVhLCBhbmQgdGhlIEJTUyBpcyB6ZXJvZWQgb3V0IGFzIGl0IHNob3VsZCBiZS4KCiAgRnVydGhlcm1vcmUsIHRoZSBtYWdpYyB2YXJpYWJsZXMgJ2FybWJvb3RfZW5kJyBhbmQgJ2FybWJvb3RfZW5kX2RhdGEnCiAgb2YgdGhlIGxpbmtlciBzY3JpcHRzIGFyZSByZXBsYWNlZCBieSAnX19ic3Nfc3RhcnQnIGFuZCAnX2VuZCcsCiAgcmVzcC4sIHdoaWNoIGlzIGEgZnVydGhlciBzdGVwIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcwogIGJldHdlZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDUFUgYXJjaGl0ZWN0dXJlcy4KCiogUGF0Y2ggYnkgbGlhbmcgYSBsZWksIDkgSmFuIDIwMDQ6CiAgRml4IEludGVsIDI4RjEyOEozIElEIGluIGluY2x1ZGUvZmxhc2guaAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOSBKYW4gMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgVEIwMjI5IGJvYXJkIChORUMgVlI0MTMxIE1JUFMgcHJvY2Vzc29yKQoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIERlYyAyMDAzOgogIGNoYW5nZWQgZXh0ZXJuIF9faW5saW5lX18gaW50byBzdGF0aWMgX19pbmxpbmVfXyBpbgogIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAzMCBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgSUJNIFBQQzQ0MEdYLiBNdWx0aXBsZSBFTUFDIEV0aGVybmV0IGRldmljZXMsCiAgc2VsZWN0IE1ESSBwb3J0IGJhc2VkIG9uIGVuYWJsZWQgRU1BQyBkZXZpY2UuCiAgQWRkIHN1cHBvcnQgZm9yIFhFUyBJbmMgPGh0dHA6Ly93d3cueGVzLWluYy5jb20+IFhQZWRpdGUxMDAwIDQ0MEdYCiAgYmFzZSBQclBNQyBib2FyZC4KCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAxNSBEZWMgMjAwMzoKICBtYWRlIENPTkZJR19TSUxFTlRfQ09OU09MRSB1c2FibGUgb24gYWxsIGFyY2hpdGVjdHVyZXMKCiogRGlzYWJsZSBkYXRlIGNvbW1hbmQgb24gVFFNODY2TSAtIHRoZXJlIGlzIG5vIFJUQyBvbiBNUEM4NjYKCiogRml4IHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIGZvciBsb3cgQ1BVIGNsb2NrcwoKKiBJbXBsZW1lbnQgYWRhcHRpdmUgU0RSQU0gdGltaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYWN0dWFsIENQVQogIGNsb2NrIGZyZXF1ZW5jeSBmb3IgSU5DQS1JUDsgZml4IHByb2JsZW0gd2l0aCBib2FyZCBoYW5naW5nIHdoZW4KICBzd2l0Y2hpbmcgZnJvbSAxNTBNSHogdG8gMTAwTUh6CgoqIEFkZCBQQ01DSUEgQ1Mgc3VwcG9ydCBmb3IgQk1TMjAwMyBib2FyZAoKKiBBZGQgdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgKHNvIGZhciBvbmx5IFRRTTg2Nk0pOgogIHNlZSBkb2MvUkVBRE1FLk1QQzg2NiBmb3IgZGV0YWlsczsKICBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgIlNJVTQiIGFuZCAiU0lVOSIgc2lsaWNvbiBidWdzIG9uIE1QQzg2NjsKICBjYWxjdWxhdGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSBmcm9tIFBMTCByZWdpc3RlciB2YWx1ZXMuCgoqIEFkZCBzdXBwb3J0IGZvciAxMjggTUIgUkFNIG9uIFRRTTh4eEwvTSBtb2R1bGVzCgoqIEZpeCBQUy8yIGtleWJvYXJkIHByb2JsZW0gY2F1c2VkIGJ5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdmFyaWFibGUKICBwb2ludGluZyB0byBhIGxvY2F0aW9uIGluIGZsYXNoCgoqIEZpeCBJTkNBLUlQIGNsb2NrIGNhbGN1bGF0aW9uOiA0MDAvMyA9IDEzMy4zIE1Ieiwgbm90IDEzMC4KCiogVGhlIFBTLzIgbXV4IG9uIHRoZSBCTVMyMDAzIGJvYXJkIG5lZWRzIDQ1MCBtcyBhZnRlciBwb3dlciBvbgogIGJlZm9yZSB3ZSBjYW4gYWNjZXNzIGl0OyBhZGQgZGVsYXkgaW4gY2FzZSB3ZSBhcmUgZmFzdGVyICh3aXRoIG5vCiAgQ0YgY2FyZCBpbnNlcnRlZCkKCiogQ2xlYW51cCBvZiBzb21lIGluaXQgZnVuY3Rpb25zCgoqIE1ha2Ugc3VyZSBTQ0MgRXRoZXJuZXQgaXMgYWx3YXlzIHN0b3BwZWQgYnkgdGhlIHRpbWUgd2UgYm9vdCBMaW51eAogIHRvIGF2b2lkIExpbnV4IGNyYXNoZXMgYnkgZWFybHkgcGFja2V0cyBjb21pbmcgaW4uCgoqIEFjY2VsZXJhdGUgZmxhc2ggYWNjZXNzZXMgb24gTFdNT04gYm9hcmQgYnkgdXNpbmcgYnVmZmVyZWQgd3JpdGVzCgoqIEZpeCB0eXBvIGluIE1ha2VmaWxlOwogIGZpeCBwcm9ibGVtIHdpdGggUEFSVE5VTSBkZXRlY3Rpb24KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDA5IEphbiAyMDA0OgogIC0gYWRkIFJUQyBzdXBwb3J0IGZvciBNUEM1MjAwIGJhc2VkIGJvYXJkcyAocmVxdWlyZXMgUlRDX1hUQUwpCgoqIEFkZCBzdXBwb3J0IGZvciBJREUgTEVEIG9uIEJNUzIwMDMgYm9hcmQKICAoZXhjbHVzaXZlIHdpdGggc3RhdHVzIExFRCEpCgoqIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkICh1c2VkIHdpdGggUFMvMiBtdWx0aXBsZXhvciBvbgogIEJNUzIwMDMgYm9hcmQpCgoqIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDQgSmFuIDIwMDQgKyA3IEphbiAyMDA0OgogIEFkZCBjb21tb24gZmlsZXMgZm9yICJlbWsiIGJvYXJkcwoKKiBBZGQgYSBjb21tb24gZ2V0X3JhbV9zaXplKCkgZnVuY3Rpb24gYW5kIG1vZGlmeSB0aGUgdGhlCiAgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gaW52b2tlIHRoYXQgY29tbW9uIGltcGxlbWVudGF0aW9uLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogU2V0IGRlZmF1bHQgY2xvY2sgZm9yIElOQ0EtSVAgdG8gMTUwIE1IegoKKiBNYWtlIEJNUzIwMDMgdXNlIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUgdG8gYXZvaWQgI2lmZGVmIG1lc3M7CiAgYWRkIEkyQyBzdXBwb3J0OyBhZGQgc3VwcG9ydCBmb3IgRFMxMzM3IFJUQwoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgIGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEIG9uIEJNUzIwMDMgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMiBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgQWN0aXZlIFNlcmlhbCBNZW1vcnkgSW50ZXJmYWNlIChBU01JKQogIG9uIEN5Y2xvbmUgZGV2aWNlcwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxNiBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBQQ2hhbWVsZW9uIE1FIGFuZCBISSBtb2R1bGVzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZCAoTVBDODd4Lzg4eCkKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBEZWMgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgY3JhbWZzICh1c2VzIEpGRlMyIGNvbW1hbmQgaW50ZXJmYWNlKQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDM6CiAgLSBtb3JlIGRvY3VtZW50YXRpb24gZm9yIE5JT1MgcG9ydAogIC0gbmV3IHN0cnVjdCBuaW9zX3Bpb190LCBzdHJ1Y3Qgbmlvc19zcGlfdAogIC0gUmVjb25maWd1cmF0aW9uIGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFDMjA6CiAgICBvIG1vdmUgYm9hcmQgcmVsYXRlZCBjb2RlIGZyb20gYm9hcmQvZGsxYzIwCiAgICAgIHRvIGJvYXJkL2FsdGVyYS9kazFjMjAKICAgIG8gY3JlYXRlIGEgbmV3IGNvbW1vbiBzb3VyY2UgcGF0aCBib2FyZC9hbHRlcmEvY29tbW9uCiAgICAgIGFuZCBtb3ZlIGdlbmVyaWMgZmxhc2ggYWNjZXNzIHN0dWZmIGludG8gaXQKICAgIG8gY2hhbmdlL2V4cGFuZCBjb25maWd1cmF0aW9uIGZpbGUgREsxQzIwLmgKICAtIEFkZCBzdXBwb3J0IGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFTMTAKICAtIEFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIE5JT1Mgc3lzdGVtcwogIC0gQWRkIGR1YWwgNy1zZWdtZW50IExFRCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBEZXZLaXRzCgoqIFBhdGNoIGJ5IFJvbmVuIFNoaXRyaXQsIDEwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBEQjY0MzYwIC8gREI2NDQ2MCBkZXZlbG9wbWVudCBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTAgRGVjIDIwMDM6CiAgZml4IGRlcGVuZGVuY3kgcHJvYmxlbSBpbiBleGFtcGxlcy9NYWtlZmlsZQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgOCBEZWMgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCiAgLSBhZGQgU1BJIHN1cHBvcnQgZm9yIHRoZSBNUEM1eHgKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6CiAgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBDT05GSUdfU0VSSUFMX1RBRyBhbmQgQ09ORklHX1JFVklTSU9OX1RBRwogIHRvIHBhc3MgQVRBR19TRVJJQUwgYW5kIEFUQUdfUkVWSVNJT04sIHJlc3AuLCB0byB0aGUgQVJNIHRhcmdldDsKICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCgoqIFBhdGNoIGJ5IEFuZHLpIFNjaHdhcnosIDggRGVjIDIwMDM6CiAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6CiAgLSBUWCBhbmQgUlggZGVza3JpcHRvcnMgbXVzdCBiZSBxdWFkLXdvcmQgYWxpZ25lZAogIC0gZG9lcyBub3Qgd29yayB3aXRoIG9ubHkgb25lIFRYIGRlc2tyaXB0b3IKICAtIHN0YW5kYXJkIHJlc2V0IG1ldGhvZCBkb2VzIG5vdCB3b3JrCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IERlYyAyMDAzOgogIGFkZCBSVEw4MTM5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaGVzIGJ5IEVkIE9rZXJzb24sIDA3IERlYyAyMDAzOgogIC0gZml4IGV0aGVybmV0IGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgogIC0gZXh0ZW5kIG1lbXNldHVwLlMgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBCRSBhbmQgTEUgbW9kZXMKCiogTWlub3IgY29kZSBjbGVhbnVwIChjb2Rpbmcgc3R5bGUpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAzMCBEZWMgMjAwMzoKICAtIGNwdS9tcGM1eHh4L2ZlYy5jOiBhZGRlZCBDT05GSUdfUEhZX0FERFIsIGFkZGVkIENPTkZJR19QSFlfVFlQRSwKICAtIGFkZGVkIENPTkZJR19QSFlfQUREUiB0byBpbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oLAogIC0gdHVybmVkIGRlYnVnIHByaW50IG9mIFBIWSByZWdpc3RlcnMgaW50byBhIGZ1bmN0aW9uIChjYWxsZWQgaW4gdHdvIHBsYWNlcykKICAtIGFkZGVkIHN1cHBvcnQgZm9yIEVNSyBNUEM1MjAwIGJhc2VkIG1vZHVsZXMKCiogRml4IE1QQzh4eCBQTFBSQ1JfTUZEX1NISUZUIHR5cG8KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2Nk0gbW9kdWxlcwoKKiBGaXhlcyBmb3IgVFFNODU1TSB3aXRoIDQgTUIgZmxhc2ggKEFtMjlETDE2MyA9IF9ub18gbWlycm9yIGJpdCBmbGFzaCkKCiogRml4IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyOCBEZWMgMjAwMzoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkCgoqIE1ha2UgQ1BVIGNsb2NrIG9uIElDQS1JUCBib2FyZCBjb250cm9sbGFibGUgYnkgYSAiY3B1Y2xrIgogIGVudmlyb25tZW50IHZhcmlhYmxlIHdoaWNoIGNhbiBzZXQgdG8gIjEwMCIsICIxMzMiLCBvciAiMTUwIi4gVGhlCiAgQ1BVIGNsb2NrIHdpbGwgYmUgY29uZmlndXJlZCBhY2NvcmRpbmdseSB1cG9uIG5leHQgcmVib290LiBPdGhlcgogIHZhbHVlcyBhcmUgaWdub3JlZC4gSW4gY2FzZSBvZiBhbiBpbnZhbGlkIG9yIHVuZGVmaW5lZCAiY3B1Y2xrIgogIHZhbHVlLCB0aGUgY29tcGlsZS10aW1lIGRlZmF1bHQgQ1BVIGNsb2NrIHNwZWVkIHdpbGwgYmUgdXNlZC4KCiogRW5hYmxlIFF1YWQtVUFSVCBvbiBCTVMyMDAzIGJvYXJkIChpbml0aWFsaXplIHRoZSBQQ01DSUEgbWVtb3J5CiAgd2luZG93IHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIFVBUlQgcmVnaXN0ZXJzIGJ5IHRoZSBMaW51eCBkcml2ZXIpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyMCBEZWMgMjAwMzoKICBGaXggY2xvY2sgY2FsY3VsYXRpb24gZm9yIHRoZSBNUEM1MjAwIGZvciBoaWdoZXIgY2xvY2sgZnJlcXVlbmNpZXMKICAoYWJvdmUgMioqMzIgLyAxMCA9IDQyOS41IE1IeikuCgoqIEZpeCBDT05GSUdfUExMX1BDSV9UT19NRU1fTVVMVElQTElFUiBkaXZpZGVyIGVycm9yIGluIFNQODI0MCBjb25maWd1cmF0aW9uCgoqIEZpeCBJY2VDdWJlIENMS0lOIGNvbmZpZ3VyYXRpb24gKGl0J3MgMzMuMDAwMDAwTUh6KQoKKiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIEljZUN1YmUgYm9hcmQgd2l0aCBERFIgbWVtb3J5CgoqIFVwZGF0ZSBUUkFCIG1lbW9yeSBjb25maWd1cmF0aW9ucwoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMDkgRGVjIDIwMDM6CiAgLSBCVUJJTkdBNDA1RVA6IGNoYW5nZWQgZmxhc2ggZHJpdmVyIHRvIHByb3RlY3QgdG9wIHNlY3RvciBjb250YWluaW5nCiAgICBmaXJzdCBpbnN0cnVjdGlvbi4KICAtIEJVQklOR0E0MDVFUDogY29uZmlndXJlZCAiZWVwcm9tIiBjb21tYW5kIHRvIGFjY2VzcyBib290IGNvbmZpZyBFRVBST00uCiAgLSBCVUJJTkdBNDA1RVA6IGZpeGVkIFBMTCBpbml0IChpbml0IGNoaXAgc2VsZWN0cyBiZWZvcmUgRlBHQS9OVlJBTSBhY2Nlc3MpLgogIC0gNDA1RVA6IGZpeGVkIFNQRC1iYXNlZCBTRFJBTSBpbml0IChvbmx5IHVzZSBiYW5rcyAwIGFuZCAxKS4KICAtIDQwNUVQOiBhZGRlZC9maXhlZCBzdXBwb3J0IGZvciAicmVnaW5mbyIgY29tbWFuZC4KICAtIDR4eDogcmVtb3ZlZCBzcHVyaW91cyBNSUkgZXJyb3IgbWVzc2FnZXMgb24gIm1paSBpbmZvIiBjb21tYW5kLgoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQ29sZGZpcmUgQ1BVCiAgYWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE01MjcyQzMgYW5kIE01MjgyRVZCIGJvYXJkcwoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBOb3YgMjAwMzoKICAtIGFkZCBhIHJldHVybiB2YWx1ZSBmb3IgdGhlIGZwZ2EgY29tbWFuZAogIC0gYWRkIGlkZV9wcmVpbml0KCkgZnVuY3Rpb24gY2FsbGVkIGluIGlkZV9pbml0IGlmIENPTkZJR19JREVfUFJFSU5JVAogICAgaXMgZGVmaW5lZC4gSWYgaWRlX3ByZWluaXQgZmFpbHMsIGlkZV9pbml0IGlzIGFib3J0ZWQuCiAgLSBmaXggYW4gZW5kaWFuZXNzIHByb2JsZW0gaW4gZmF0LmgKCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAwNSBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU05NQydzIFFTODUwL1FTODIzL1FTODYwVCBib2FyZHMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMyBEZWMgMjAwMzoKICAicmV2aXZlIiBVLUJvb3Qgc3VwcG9ydCBmb3Igb2xkIE1vdG9yb2xhIE1QQzg2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBDYW0oaWxvPyksIDAzIERlYyAyMDAzOgogIG1ha2UgZXhhbXBsZXMgYnVpbGQgZXZlbiB3aXRoIGJyb2tlbiBNb250YXZpc3RhIG9iamNvcHkKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDI3IE5vdiAyMDAzOgogIGZpeCBjb252ZXJzaW9uIHByb2JsZW0gd2l0aCAiYm9vdHJldHJ5IiBldmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IEFuZHJlIFNjaHdhcnosIDI0IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBtdmJsdWUgKG12Qmx1ZUxZTlggYW5kIG12Qmx1ZUJPWCkgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBOb3YgMjAwMzoKICBzZXQgWk1JSSBicmlkZ2Ugc3BlZWQgb24gNDQwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IE5vdiAyMDAzOgogIEZpeCBtaXNtYXRjaGVkICNpZmRlZiAvICNlbmRpZiBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTQgTm92IDIwMDM6CiAgLSBib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKICAgICogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEJaSVAyIGNvbXByZXNzZWQgaW1hZ2VzCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKICAgICogcmVwb3J0IGNvcnJlY3QgZXJyb3JzIHRvIHVwcGVyIGxheWVycwogICAgKiBjaGVjayB0aGUgZXJhc2UgZmFpbCBhbmQgVlBQIGxvdyBiaXRzIGluIHN0YXR1cyByZWcKICAtIGJvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwogIC0gYm9hcmQvbXBsL3ZjbWE5L2ZsYXNoLmMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGNvbW1vbi9jbWRfdXNiLmMKICAgICogZml4IHR5cG8gaW4gY29tbWVudAogIC0gY3B1L2FybTkyMHQvdXNiX29oY2kuYwogICAgKiBzdXBwb3J0IGZvciBTM0MyNDEwIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGRyaXZlcnMvY3M4OTAwLmMKICAgICogcmVpbml0IHNvbWUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgZXJyb3IgKGNhYmxlIG1pc3NpbmcsIC4uLikKICAtIGZzL2ZhdC9mYXQuYwogICAgKiBzdXBwb3J0IGZvciBVU0IvTU1DIGRldmljZXMgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCiAgLSBpbmNsdWRlL2NvbmZpZ3MvUElQNDA1LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAtIGluY2x1ZGUvY29uZmlncy9WQ01BOS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgICAqIGVuYWJsZSBVU0Igc3VwcG9ydAogIC0gbGliX2FybS9hcm1saW51eC5jCiAgICAqIGNoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgQVJNIExpbnV4IGtlcm5lbCBhcwogICAgICBkZXNjcmliZWQgb24gaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9ib290aW5nLnBocAoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFNwbGl0IGRiYXUxeDAwIGludG8gZGJhdTEwMDAsIGRiYXUxMTAwIGFuZCBkYmF1MTUwMCBjb25maWdzIHRvCiAgc3VwcG9ydCBhbGwgdGhlc2UgQU1EIGJvYXJkcy4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBXb3JrYXJvdW5kIGZvciBtaXBzIGF1MXgwMCBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzZXMgKHRoZSBhdTF4MDAKICB1c2VzIGEgMzYgYml0IGJ1cyBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYWNjZXNzIHBoeXNpY2FsIG1lbW9yeQogIGRpcmVjdGx5LiBVc2UgdGhlIHVuY2FjaGVkIFNEUkFNIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwKICBvbmUuKQoKKiBQYXRjaCBieSBYdWUgTGlnb25nIChKb2UpLCAxMyBOb3YgMjAwMzoKICBhZGQgUmVhbHRlayA4MDE5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBOb3YgMjAwMzoKICBNUEM4MjZ4QURTL1BRMkZBRFMgIGNsZWFudXAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTIgTm92IDIwMDM6CiAgVXBkYXRlIFJFQURNRSB0byBtYXJrIHRoZSBQT1JUSU8gY29tbWFuZHMgbm9uLXN0YW5kYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDEyIE5vdiAyMDAzOgogIHVwZGF0ZSBmb3IgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBkZXZlbG9wbWVudCBraXQ6CiAgLSBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gRGF0YUZsYXNoCiAgLSBBdG1lbCBEYXRhRmxhc2ggQVQ0NURCMTI4MiBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQ2FyciwgMTEgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG5ldyB2ZXJzaW9uIG9mIDgyNzAgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDUgTm92IDIwMDM6CiAgLSBvbmx5IHBhc3MgdGhlIEFSTSBsaW51eCBpbml0cmQgdGFnIHRvIHRoZSBrZXJuZWwgd2hlbiBhbiBpbml0cmQKICAgIGlzIGFjdHVhbGx5IHByZXNlbnQKICAtIHVwZGF0ZSBvbWFwMTUxMGlubiBjb25maWd1cmF0aW9uIGZpbGUKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMgTm92IDIwMDM6CiAgLSBtb3JlIGVuZGlhbmVzcyBmaXhlcyBmb3IgTEFOOTFDMTExIGRyaXZlcgogIC0gQ0ZHX0haIGNvbmZpZ3VyYXRpb24gcGF0Y2ggZm9yIE5JT1MgQ3ljbG9uZSBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBQSFlfSU5UX1JFRyB2cy4gUEhZX01BU0tfUkVHIGJ1ZyBpbiBkcml2ZXJzL3NtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgT2N0IDIwMDM6CiAgLSBtYWtlICJtaWkgaW5mbyA8YWRkcj4iIHNob3cgaW5mb3IgZm9yIFBIWSBhdCAiYWRkciIgb25seQogIC0gRW5kaWFuIGZpeCBmb3IgbWlpcGh5X2luZm8oKQoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE5IFNlcCAyMDAzOgogIE1vdmUgbW9zdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgUFBDIGNvZGUgdG8gcHBjX2xpYi9pbnRlcnJ1cHRzLmMKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgQnJpbmcgQVJNIG1lbW9yeSBsYXlvdXQgaW4gc3luYyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uOgogIHN0YWNrIGFuZCBtYWxsb2MtaGVhcCBhcmUgbm93IGxvY2F0ZWQgX2JlbG93XyB0aGUgVS1Cb290IGNvZGUKCiogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlICBpbWFnZQogIGhlYWRlcnMgZmlyc3QgaW5zdGVhZCBvZiBhbHdheXMgcmVhZGluZyB0aGUgd2hvbGUgaW1hZ2VzLgoKKiBGaXggdHlwZSBpbiBNUEM1WFhYIGNvZGUgKHBvaW50ZWQgb3V0IGJ5IFZpY3RvciBXcmVuKQoKKiBFbmFibGVkIHBhc3N3b3JkIGNoZWNrIG9uIFJNVSBib2FyZAoKKiBGaXggY29uZmlndXJhdGlvbiBwcm9ibGVtIHdpdGggSWNlQ3ViZSBpbiBMT1dCT09UIGNvbmZpZ3VyYXRpb246CiAgZW52cmlvbm1lbnQgZ290IGVtYmVkZGVkLCBjb3JydXB0aW5nIHRoZSBpbWFnZSBsYXlvdXQuCgoqIEZpeCBORUMgZGlzcGxheSBuYW1lcyAoaXQncyA2NDQwIFtmb3IgNjQweDQ4MF0sIG5vdCA2NjQwKS4KCiogQWRkZWQgQk1TMjAwMyBib2FyZAogIGFkZCBzdXBwb3J0IGZvciBORUMgTkw2NDQ4QkMzMy01NC4gMTAuNCIsIDY0MHg0ODAgVEZUIGRpc3BsYXkKCiogRml4IGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZCAobXVzdCB1c2UgVW5sb2NrIEJ5cGFzcyBSZXNldAogIGNvbW1hbmQgdG8gZXhpdCBVbmxvY2sgQnlwYXNzIE1vZGUpOyBhZGp1c3QgdGltaW5ncyBmb3IgZmxhc2gsIFNSQU0KICBhbmQgQ1BMRAoKKiBVc2UgIi1mUElDIiBpbnN0ZWFkIG9mICItbXJlbG9jYXRhYmxlIiB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGgKICByZWNlbnQgdG9vbHMKCiogQWRkIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiB0byAnaW1scycgY29tbWFuZAoKKiBBZGQgYmRfaW5mbyBmaWVsZHMgbmVlZGVkIGZvciA0eHggTGludXggSTJDIGRyaXZlcgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA0IE5vdi4gMjAwMzoKICBGaXggZXJyb3IgaW4gY21kX3ZmZC5jIChUUkFCIGJvYXJkOiAidmZkIC8xIiBzaG93cyBub3cgb25seSBvbmUgQml0bWFwKQoKKiBQcmludCB1c2VkIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gQ09ORklHX05FVF9NVUxUSSBpcyBzZXQKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggT2N0IDIwMDM6CiAgQWRkIGxvdyBib290IHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogRml4IHByb2JsZW0gd2l0aCBkdWFsIFBDTUNJQSBzdXBwb3J0IChOU0NVKQoKKiBGaXggTVBDNTIwMCBJMkMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBwYXJhbWV0ZXIgcGFzc2luZyB0byBzdGFuZGFsb25lIGltYWdlcyB3aXRoIGJvb3RtIGNvbW1hbmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDMwIE9jdCAyMDAzOgogIEZpeCBidWlsZCBlcnJvcnMgZm9yIGl4ZHA0MjUgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTS4gSG9ybiwgMjkgT2N0IDIwMDM6CiAgRml4ZXMgdG8gYnVpbGQgdW5kZXIgQ1lHV0lOCgoqIEdldCBJY2VDdWJlIE1HVDUxMDAgd29ya2luZyAoYWdhaW4pCgoqIEZpeCBwcm9ibGVtcyBpbiBtZW1vcnkgdGVzdCBvbiBzb21lIGJvYXJkcyAod2hpY2ggd2FzIG5vdAogIG5vbi1kZXN0cnVjdGl2ZSBhcyBpbnRlbmRlZCkKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IE9jdCAyMDAzOgogIENoYW5nZSBmcy9mYXQvZmF0LmMgdG8gcHV0IEkvTyBidWZmZXJzIGluIEJTUyBpbnN0ZWFkIG9uIHRoZSBzdGFjawogIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cgb24gQVJNIHN5c3RlbXMKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggaW5pdCBzZXF1ZW5jZSBlcnJvciBmb3IgTklPUyBwb3J0CgoqIEFsbG93IGxvd2VyY2FzZSBzcGVsbGluZyBmb3IgSWNlQ3ViZV81MjAwOyBzdXBwb3J0IE1QQzUyMDBMSVRFIG5hbWUKCiogQWRkIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIHRvIFRSQUIgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBYaWFvIFhpYW5naHVhLCAyMyBPY3QgMjAwMzoKICBzbWFsbCBwYXRjaCBmb3IgbXBjODV4eAoKKiBGaXggc21hbGwgcHJvYmxlbSBpbiBNUEM1MjAwIEkyQyBkcml2ZXIKCiogRml4IEZDQzMgc3VwcG9ydCBvbiBBVEMgYm9hcmQKCiogQ29ycmVjdCBoZWFkZXIgcHJpbnRpbmcgZm9yIG11bHRpLWltYWdlIGZpbGVzIGluIGRvX2Jvb3RtKCkKCiogTWFrZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgd29yayB3aXRoIENPTkZJR19BVVRPQk9PVF9LRVlFRAoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE4IE9jdCAyMDAzOgogIEZpeCBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNyBPY3QgMjAwMzoKICBGaXggdHlwbyBpbiBpbmNsdWRlL21wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE2IE9jdCAwMzoKICBGaXhlcyBmb3IgY3B1L2FybTkyNS9pbnRlcnJ1cHQuYwogIC0gSW5pdGlhbGl6ZSB0aW1lc3RhbXAgJiBsYXN0ZGVjIHZhcnMuCiAgLSBmaXggdGltZXN0YW1wIG92ZXJmbG93cy4KICAtIGZpeCBsYXN0ZGVjIG92ZXJmbG93LgogIC0gc21hcnRlciBub3JtYWxpemF0aW9uIHRvIGFsbG93IHVkZWxheSgpIGJlbG93IDFtcyB0byB3b3JrLgoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDE2IE9jdAogIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgQ3ljbG9uZSBFZGl0aW9uIChESy0xQzIwKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgT2N0IDIwMDM6CiAgYWRkIGhpbnQgYWJvdXQgZG9jL1JFQURNRS5zaWxlbnQgdG8gUkVBRE1FIGZpbGUKCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBOU0NVCgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb25FVkIKCiogVFJBQiBhdXRvLXVwZGF0ZTogQmFzZSBkZWNpc2lvbiBpZiB3ZSBoYXZlIHRvIHN0cmlwIHRoZSBpbWFnZQogIGhlYWRlciBvbiBpbWFnZSB0eXBlIGFzIGVuY29kZWQgaW4gdGhlIGhlYWRlcgogIChpbmNsdWRlIGltYWdlIHR5cGUgcGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgT2N0IDIwMDMpCgoqIFBhdGNoZXMgYnkgWGlhbmdodWEgWGlhbywgMTUgT2N0IDIwMDM6CgogIC0gQWRkZWQgTW90b3JvbGEgQ1BVIDg1NDAvODU2MCBzdXBwb3J0IChjcHUvODV4eCkKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NDBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU0MGFkcykKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NjBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU2MGFkcykKCiogRml4IGZsYXNoIHRpbWluZ3Mgb24gVFJBQiBib2FyZAoKKiBNYWtlIHN1cmUgSFVTSCBpcyBpbml0aWFsaXplZCBmb3IgcnVubmluZyBhdXRvLXVwZGF0ZSBzY3JpcHRzCgoqIE1ha2UgNTIwMCByZXNldCBjb21tYW5kIF9yZWFsbHlfIHJlc2V0IHRoZSBib2FyZCwgd2l0aG91dCBydW5uaW5nCiAgYW55IG90aGVyIGNvZGUgYWZ0ZXIgaXQKCiogRml4IGVycm9ycyB3aXRoIGZsYXNoIGVyYXNlIHdoZW4gcmFuZ2Ugc3BhbnMgIGFjcm9zcyBiYW5rcwogIHRoYXQgYXJlIG1hcHBlZCBpbiByZXZlcnNlIG9yZGVyCgoqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEludGVsIElYUDQyNSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBJWERQNDI1IGV2YWwgYm9hcmQKCiogQWRkZWQgY29uZmlnIG9wdGlvbiBDT05GSUdfU0lMRU5UX0NPTlNPTEUuICBTZWUgZG9jL1JFQURNRS5zaWxlbnQKICBmb3IgbW9yZSBpbmZvcm1hdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBPY3QgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaGVzIGJ5IFRob21hcyBMYW5nZSwgMDkgT2N0IDIwMDM6CiAgLSBmaXggY21kX2lkZS5jIGZvciBub24gcHBjIGJvYXJkcyAocmVhZC93cml0ZSBmdW5jdGlvbnMgZGlkIG5vdAogICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCiAgLSBmaXggZm9yIHNoYW5ub24gYm9hcmQKICAtICNpZmRlZiBDT05GSUdfSURFXzh4eF9ESVJFQ1Qgc29tZSBvdGhlcndpc2UgdW51c2VkIGNvZGUKICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCiAgLSBNSVBTIG9ubHk6IE5ldyBvcHRpb24gQ09ORklHX01FTVNJWkVfSU5fQllURVMgZm9yIHBhc3NpbmcgbWVtc2l6ZQogICAgYXJncyB0byBsaW51eAogIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOSBPY3QgMjAwMzoKICBGaXhlcyBmb3IgVFJBQiBib2FyZAogIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQogIC0gL2JvYXJkL3RyYWIvY21kX3RyYWIuYzogYnVnIGZpeCBmb3IgcHJvYmxlbSB3aXRoIHRpbWVyIG92ZXJmbG93IGluCiAgICB1ZGVsYXkoKTsgZml4IHNvbWUgdGltaW5nIHByb2JsZW1zIHdpdGggYWRjIGNvbnRyb2xsZXIKICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CiAgICBtb2RpZnkgY29tbWFuZHM6IHRvdWNoIGFuZCBidXp6ZXIKCiogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQogIChxdWljayAmIGRpcnR5IHdvcmthcm91bmQgZm9yIHJvZ3VlIHBvaW50ZXIgcHJvYmxlbSBpbiBnZXRfdmZhdG5hbWUoKSk7CiAgVXNlIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3IgYXV0b191cGRhdGUgaW5zdGVhZCBvZiBodXNoIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDQgT2N0IDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtMzIgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6CiAgLSBBIHNlY29uZCBwYXJhbWV0ZXIgZm9yIGJvb3RtIG92ZXJ3cml0ZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IKICAgICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMuCiAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZwogICAgKHVuY29tcHJlc3NlZCkgZGF0YSBsZW5ndGggZm9yICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMKICAgIHdoZW4gYXV0b3N0YXJ0IGlzIHNldCB0byAibm8iLiBOb3cgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZQoJaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgoJCWZwZ2EgbG9hZCAwICRzb21lX2ZyZWVfcmFtICRmaWxlc2l6ZQoJZmkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDI1IFNlcHQgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjUgU2VwIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMyBTZXAgMjAwMzoKICBhZGQgQ01EX1BPUlRJTyB0byBDRkdfQ01EX05PTlNURCAoY29tbWFuZHMgaW4gcXVlc3Rpb24gYXJlIG9ubHkKICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMjMgU2VwIDIwMDM6CiAgZml4IHBsbF9wY2lfdG9fbWVtX211bHRpcGxpZXIgdGFibGUgZm9yIE1QQzgyNDUKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6CiAgZW5hYmxlIHRpbWVkIGF1dG9ib290IG9uIFBYQQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgogIC0gYWRkICQoQ0ZMQUdTKSB0byAiLXByaW50LWxpYmdjYy1maWxlbmFtZSIgc28gY29tcGlsZXIgZHJpdmVyCiAgICByZXR1cm5zIGNvcnJlY3QgbGliZ2NjIGZpbGUgcGF0aAogIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKICAgIHRpbWUgb24gczNjMjR4MCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxOSBTZXAgMjAwMzoKICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0CiAgICBsaW5rIHN0YXRlIHRvIHRoZSBmYXVsdCBMRUQuCiAgLSBJbiBOZXRMb29wLCBtYWtlIHRoZSBGYXVsdCBMRUQgcmVmbGVjdCB0aGUgbGluayBzdGF0dXMuICBUaGUgbGluawogICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxOCBTZXAgMjAwMzoKICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6CiAgdXNlIGJpX2ludGZyZXEgaW5zdGVhZCBvZiBiaV9idXNmcmVxIHRvIGNvbXB1dGUgZmVjX21paV9zcGVlZCBpbgogIGNwdS9tcGM4eHgvZmVjLmMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IFNlcCAyMDAzOgogIGFkZCB0b29sIHRvIGNvbXB1dGUgZmlsZWRzIGluIHRoZSBQTFBSQ1IgcmVnaXN0ZXIgZm9yIE1QQzg2eAoKKiBVc2UgSUhfVFlQRV9GSUxFU1lTVEVNIGZvciBUUkFCICJkaXNrIiBpbWFnZXMuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyB1bmRlciBGcmVlQlNECgoqIEFkZCBnZW5lcmljIGZpbGVzeXN0ZW0gaW1hZ2UgdHlwZQoKKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIGVuYWJsZSBiYXNpYyAvIG1lZGl1bSAvIGhpZ2gtZW5kIGNvbmZpZ3VyYXRpb25zIGZvciBQUENoYW1lbGVvbkVWQgogIGJvYXJkOyBmaXggTkFORCBjb2RlCgoqIGVuYWJsZSBURlRQIGNsaWVudCBjb2RlIHRvIHNwZWNpZnkgdG8gdGhlIHNlcnZlciB0aGUgZGVzaXJlZAogIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKCiogSW1wcm92ZSBTRFJBTSBzZXR1cCBmb3IgVFJBQiBib2FyZAoKKiBTdXBwcmVzcyBhbGwgb3V0cHV0IHdpdGggc3BsYXNoc2NyZWVuIGNvbmZpZ3VyZWQgb25seSBpZiAic3BsYXNoaW1hZ2UiCiAgaXMgc2V0CgoqIEZpeCBwcm9ibGVtcyB3aXRoIEkyQyBzdXBwb3J0IGZvciBtcGM1MjAwCgoqIEFkYXB0IFRSQUIgY29uZmlndXJhdGlvbiBhbmQgYXV0b191cGRhdGUgdG8gbmV3IG1lbW9yeSBsYXlvdXQKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBGaXhlcyBmb3IgTVBDODI2NiBkZWZhdWx0IGNvbmZpZwogIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTcgU2VwIDIwMDM6CiAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAogICAgZW52X2NvbW1vbi5jKQogIC0gc2JjODI2MCB0d2Vha3MKICAtIGFkanVzdCAiaGVscCIgb3V0cHV0CgoqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBmaXggc3BlbGxpbmcgZXJyb3JzCiAgLSBzZXQgR0RfRkxHX0RFVklOSVQgZmxhZyBvbmx5IGFmdGVyIGRldmljZSBmdW5jdGlvbiBwb2ludGVycwogICAgYXJlIHZhbGlkCiAgLSBBbGxvdyBDRkdfQUxUX01FTVRFU1Qgb24gc3lzdGVtcyB3aGVyZSBhZGRyZXNzIHplcm8gaXNuJ3QKICAgIHdyaXRlYWJsZQogIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcwogIC0gdHJpZ2dlciB3YXRjaGRvZyB3aGlsZSB3YWl0aW5nIGluIHNlcmlhbCBkcml2ZXIKCiogQWRkIGF1dG8tdXBkYXRlIGNvZGUgZm9yIFRSQUIgYm9hcmQgdXNpbmcgVVNCIG1lbW9yeSBzdGlja3MsCiAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5CgoqIGRpc2FibGUgTVBDNTIwMCBidXMgcGlwZWxpbmluZyBhcyB3b3JrYXJvdW5kIGZvciBidXMgY29udGVudGlvbgoKKiBNb2RpZnkgWExCIGFyYml0ZXIgcHJpb3JpdGllcyBvbiBNUEM1MjAwIHNvIGFsbCBkZXZpY2VzIHVzZSBzYW1lCiAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAogIGludGVycnVwdHMKCiogTWFrZSBJUEIgY2xvY2sgb24gTUdUNTEwMC9NUEM1MjAwIGNvbmZpZ3VyYWJsZSBpbiBib2FyZCBjb25maWcgZmlsZTsKICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5CgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE1IFNlcCAyMDAzOgogIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQogIC0gc2Fjc25nIHR3ZWFrcwoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE0IFNlcCAyMDAzOgogIGVuYWJsZSB3YXRjaGRvZyBzdXBwb3J0IGZvciBhbGwgTVBDODI0eCBib2FyZHMgdGhhdCBoYXZlIGEgd2F0Y2hkb2cKCiogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQogICJOb24tb2N0ZXQgQWxpZ25lZCBGcmFtZSIgZXJyb3JzIHdlIHNlZSBhdCAxMDAgTWJwcwoKKiBQYXRjaCBieSBTaGFyYWQgR3VwdGEsIDE0IFNlcCAyMDAzOgogIGZpeCBTUFIgbnVtYmVycyBmb3IgdXBwZXIgQkFUIHJlZ2lzdGVyIChbSURdQkFUWzQtN11bVUxdKQoKKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKICB1cGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb25FVkIgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogQWRkIEkyQyBzdXBwb3J0IGZvciBNR1Q1MTAwIC8gTVBDNTIwMAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTEgU2VwIDIwMDM6CiAgQ2hhbmdlZCBkZWZhdWx0IG1lbW9yeSBvcHRpb24gb24gTVBDODI2NkFEUyB0byBOT1QgYmUgUGFnZSBCYXNlZAogIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAogIDE2TUIgRElNTQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDEyIFNlcCAyMDAzOgogIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwMzoKICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gY3B1L3BwYzR4eC9zZHJhbS5jOiBkaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBzZXR0aW5nCiAgICBmaXJzdCB2YWx1ZXMKICAtIGNwdS9wcGM0eHgvNDA1X3BjaS5jOiBzZXQgdmVuZG9yIGlkIG9uIFBQQzQwNUVQIHN5c3RlbXMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgU2VwIDIwMDM6CiAgYWRkIGJ1cm4taW4gdGVzdHMgZm9yIFRSQUIgYm9hcmQKCiogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIFNlcCAyMDAzOgogIC0gZml4IFVTQiBkYXRhIHBvaW50ZXIgYXNzaWdubWVudCBmb3IgYnVsayBvbmx5IHRyYW5zZmVyLgogIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KCiogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKICBtZW1vcnksIHRvbwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljg6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgogIGFkZCBGQVQgc3VwcG9ydCBmb3IgSURFLCBTQ1NJIGFuZCBVU0IKCiogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CiAgLSBjbGVhbnVwIG9mIFBPU1QgY29kZSBmb3IgdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwogIC0gTVBDODI0eCBsb2NrcyB3YXkwIG9mIGRhdGEgY2FjaGUgZm9yIHVzZSBhcyBpbml0aWFsIFJBTTsKICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKICAgIHRoZSBsb2NrZWQgZW50cmllcy4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAzMCBBdWcgMjAwMzoKICBuZXcgSTJDIGRyaXZlciBmb3IgbXBjMTA3IGJyaWRnZS4gTm93IHdvcmtzIGZyb20gZmxhc2guCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgogIC0gSkZGUzI6IGZpeCB0eXBvIGluIGNvbW1vbi9jbWRfamZmczIuYwogIC0gSkZGUzI6IGZpeCBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMgb3B0aW9uCiAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKICAtIEpGRlMyOiBhY2NlcHQgSkZGUzIgUEFERElORyBub2RlcwogIC0gU1hOSTg1NVQ6IGFkZCBBTTI5TFY4MDAgc3VwcG9ydAogIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKICAtIFNYTkk4NTVUOiBib290IGZyb20gSkZGUzIgaW4gTk9SIG9yIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDExIEF1ZyAyMDAzOgogIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAogIC0gZml4IGkyY193cml0ZSByb3V0aW5lCiAgLSBmaXggaXByb2JlIGNvbW1hbmQKICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzIChCQkIpCiAgKHRlc3RlZCB3aXRoIFVTQiBtZW1vcnkgc3RpY2tzIG9ubHkpCgoqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAoKKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKCiogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNiAgTUh6KQogIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQoKKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CiAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycwoKKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAoKKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKICBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgogIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgogIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQogIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KCiogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCiAgYmUgcmVzb2x2ZWQsIHRvbwoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkIHVzaW5nIHNvZnR3YXJlIEkyQyBkcml2ZXIKICAoYmVjYXVzZSBvZiBiZXR0ZXIgcmVzcG9uc2UgdG8gaXByb2JlIGNvbW1hbmQpOyBmaXggcHJvYmxlbSB3aXRoCiAgInJlc2V0IiBjb21tYW5kCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBBdWcgMjAwMzoKICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KICBDT05GSUdfQk9PVFBfTUFLUyAoc2VlIFJFQURNRSkuCgoqIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQoKKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKCiogSW1wbGVtZW50ICJyZXNldCIgZm9yIE1HVDUxMDAvTVBDNTIwMCBzeXN0ZW1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIEV0aGVybmV0IGF1dG9uZWdvdGlhdGlvbiBvbiBJTkNBLUlQIHdvcmsgZm9yIGFsbCBjbG9jayByYXRlczsKICBhbGxvdyBzZWxlY3Rpb24gb2YgY2xvY2sgZnJlcXVlbmN5IGFzICJtYWtlIiB0YXJnZXQKCiogSW1wbGVtZW50IG1lbW9yeSBhdXRvc2l6aW5nIGNvZGUgZm9yIEljZUN1YmUgYm9hcmRzCgoqIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCgoqIEZpeCBvdmVyZmxvdyBwcm9ibGVtIGluIG5ldHdvcmsgdGltZW91dCBjb2RlCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6CiAgQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwIChjcmMzMl9ub19jb21wLCB0b28pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXBkYXRlIGZvciBUUU0gYm9hcmQgZGVmYXVsdHM6CiAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAoKKiBSZW1vdmVkIHRvb2xzL2dkYiBmcm9tICJtYWtlIGFsbCIgdGFyZ2V0LiAgQWRkZWQgbWFrZSB0YXJnZXQgImdkYnRvb2xzIgogIGluIHRvcGxldmVsIGRpcmVjdG9yeSBpbnN0ZWFkLiAgUmVtb3ZlZCBhc3Rlc3QuYyBmcm9tIHRvb2xzL2dkYiBiZWNhdXNlCiAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgoKKiBGaXggUENJIHN1cHBvcnQgZm9yIE1QQzUyMDAgLyBJY2VDdWJlIEJvYXJkCgoqIE1hcCBJU1AxMzYyIFVTQiBPVEcgY29udHJvbGxlciBmb3IgTlNDVSBib2FyZAoKKiBQYXRjaCBieSBCcmFkIFBhcmtlciwgMDIgQXVnIDIwMDM6CiAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcwoKKiBJbXBsZW1lbnQgQm9vdCBDeWNsZSBEZXRlY3Rpb24gKFJlcS4gMi4zIG9mIE9TREwgQ0dMIFJlcWlyZW1lbnRzKQoKKiBBbGxvdyBlcmFzZSBjb21tYW5kIHRvIGNyb3NzIGZsYXNoIGJhbmsgYm91bmRhcmllcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIEp1bCAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KICBCb3RoIEx5bnhPUyBhbmQgQmx1ZUNhdCBsaW51eCBLRElzIGFyZSBzdXBwb3J0ZWQuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgogIHVzZSBtb3JlIHJlbGlhYmxlIHJlc2V0IGZvciBPTUFQLzkyNVQKCiogUGF0Y2ggYnkgTnllIExpdSwgMjUgSnVsIDIwMDM6CiAgZml4IHR5cG8gaW4gbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjQgSnVsIDIwMDM6CiAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6CiAgLSBGaXhlZCBudWxsIGRlcmVmZXJlY2Ugd2hpY2ggY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBFQ0MgdmFsdWVzLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIG5vIFJlYWR5L0J1c3kgc2lnbmFsIGhvb2tlZCB1cC4KICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KICAtIEZpeGVkIG5hbmQuaCdzIEVDQ1BPUy4gQSBjb25mbGljdCBleGlzdGVkIHdpdGggUE9TNSBhbmQgYmFkYmxvY2sKICAgIGZvciBub24tSkZGUzIuCiAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KCiogQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwCgoqIFByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzCiAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCiAgUHJvdmlkZSBhIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBtb3JlIHVzZWZ1bCB0byB1c2Vycy9kZXZlbG9wZXJzLgoKKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKCiogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCiAgYXBwbGljYXRpb25zOiBpbnN0ZWFkIG9mIHVzaW5nIChQUEMtc3BlY2lmaWMpIHN5c3RlbSBjYWxscyB3ZSBub3cKICB1c2UgYSBqdW1wIHRhYmxlOyBwbGVhc2Ugc2VlIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBmb3IgZGV0YWlscwoKKiBQYXRjaCBieSBEYXZlIFdlc3R3b29kLCAyNCBKdWwgMjAwMzoKICBhZGRlZCBzdXBwb3J0IGZvciBVbml0eSBPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6CiAgYWRkICJpbWxzIiBjb21tYW5kIHRvIHByaW50IGZsYXNoIHRhYmxlIG9mIGNvbnRlbnRzCgoqIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0CgoqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCgoqIEZpeCBzdGFydHVwIHByb2JsZW0gb24gTUlQUwoKKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0CiAgYml0bWFwIHN1cHBvcnQgaXMgY29uZmlndXJlZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTggSnVsIDIwMDM6CiAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6CiAgLSBmaXggbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIE1JUDQwNVQKICAtIGZpeCBwcmludG91dCBvZiBiYXVkcmF0ZSBmb3IgImxvYWRiIDxsb2FkYWRkcj4gPGJhdWRyYXRlPiIKCiogQ2xlYW51cCBvZiBUUU04Mnh4IGNvbmZpZ3VyYXRpb25zOyB1c2UgIm9mZmljaWFsIiBib2FyZCB0eXBlcwogIHRvIG1ha2Ugc2VsZWN0aW9uIGVhc2llci4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6CiAgYWRkIGRlbGF5IHRvIGdldCBJMkMgd29ya2luZyB3aXRoICJpbW0iIGNvbW1hbmQgYW5kIHMzYzI0eDBfaTJjLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTcgSnVseSAwMzoKICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMTYgSnVseSAyMDAzOgogIE1QQzg2MEZBRFMgZml4ZXM6CiAgLSBhZGQgTVBDODZ4QURTIHN1cHBvcnQgKHVzZXMgTVBDODZ4QURTLmgpCiAgLSBhZGQgODY2UC9UIGNvcmUgc3VwcG9ydCAoYWxzbyBNUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUKQogICAgbyBQTFBSQ1IgY2hhbmdlcwogICAgbyBCUkcgY2hhbmdlcyAoRVhUQUwvWFRBTCByZXN0cmljdGVkIHRvIDEwTUh6KQogICAgbyBkb24ndCB0cnVzdCBnY2xrKCkgc29mdHdhcmUgbWVhc3VyZW1lbnQgYnkgZGVmYXVsdCwgZGVwZW5kIG9uCiAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCiAgLSBhZGQgRFJBTSBTSU1NIG5vdCBpbnN0YWxsZWQgZGV0ZWN0aW9uCiAgLSB1c2UgbW9yZSAiY29ycmVjdCIgU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKICAtIGRlZmF1bHQgREVSIGlzIDAKICAtIHJlbW92ZSB1bnVzZWQgTUFNUiBkZWZpbmVzIGZyb20gRkFEUzg2MFQuaCAoYWxsIGRvbmUgaW4gZmFkcy5jKQogIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKICAgIGJlIG1lcmdlZCBpbnRvIE14TVIgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIFBvd2VyUVVJQ0MgZGF0YXNoZWV0LgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKICBzdXBwb3J0IG5ldyBNb3Rvcm9sYSBQUTJGQURTLVpVIGV2YWx1YXRpb24gYm9hcmQgd2hpY2ggcmVwbGFjZWQKICBNUEM4MjYwQURTIGFuZCBNUEM4MjY2QURTCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgSWNlQ3ViZSBib2FyZCAod2l0aCBNR1Q1MTAwIGFuZCBNUEM1MjAwIENQVXMpCgoqIEFkZCBzdXBwb3J0IGZvciBNR1Q1MTAwIGFuZCBNUEM1MjAwIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDE1IEp1bCAyMDAzOgogIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMwogIC0gYWRkZWQgc3VwcG9ydCBmb3IgYXJtOTI1dCBjcHUgY29yZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNTEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEp1bCAyMDAzOgogIC0gYWRkIEkyQyBzdXBwb3J0IGZvciBzM2MyNDAwIHN5c3RlbXMgKHRyYWIgYm9hcmQpCiAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKCiogRml4IGhhbmRsaW5nIG9mICJzbG93IiBQT1NUIHJvdXRpbmVzCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDM6CiAgLSBDb3JyZWN0IGZsYXNoIGFuZCBKRkZTMiBzdXBwb3J0IGZvciBNUEM4MjYwQURTCiAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKICAgICg4MjcwLzgyNzUvODI4MCkKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMDggSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAzIEp1bDoKICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAogIC0gRml4IGlvYmFzZSBmb3IgbmF0c2VtaS5jCiAgICAoUENJX0JBU0VfQUREUkVTU18wIGlzIHRoZSBJTyBiYXNlIHJlZ2lzdGVyIGZvciBEUDgzODE1KQoKKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCiogRml4IHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBzd2l0Y2hpbmcgb2YgTENEIGJhY2tsaWdodCBvbiBMV01PTgoqIFR3ZWFrIG91dHB1dCBmb3JtYXQgZm9yIExXTU9OCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgSnVsIDIwMDM6CiAgLSBGaXggYnVnIGluIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFLgogIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCiAgLSBPQ1JUQy9PUlNHOiBic3AgY29tbWFuZCBhZGRlZC4KICAtIEFTSDQwNSBic3AgdXBkYXRlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIE5TQ1UgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyM00sIFRRTTg1ME0sIFRRTTg1NU0gYW5kIFRRTTg2ME0gbW9kdWxlcwoKKiBBZGQgc3VwcG9ydCBmb3IgQW0yOUxWMTYwTUwsIEFtMjlMVjMyME1MLCBhbmQgQW0yOUxWNjQwTUwKICBtaXJyb3IgYml0IGZsYXNoIG9uIFRRTTh4eE0gbW9kdWxlcwoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMzAgSnVuIDIwMDM6CiAgZ2V0IHJpZCBvZiBNS19DTURfRU5UUlkgbWFjcm87IHVwZGF0ZSBkb2MvUkVBRE1FLmNvbW1hbmQKCiogUGF0Y2ggYnkgU2ViIEphbWVzLCAzMCBKdW4gMjAwMzoKICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgSTJDIGNvbmZpZ3VyYXRpb24gaW4gUkVBRE1FCgoqIEZpeCBwcm9ibGVtcyB3aXRoIHByZXZpb3VzIGxvZyBidWZmZXIgImZpeGVzIgoKKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwoKKiAibG9nIGFwcGVuZCIgZGlkIG5vdCBhcHBlbmQgYSBuZXdsaW5lCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggc29tZSBtaXNzaW5nIGNvbW1hbmRzLCBjbGVhbnVwIGhlYWRlciBmaWxlcwogIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQoKKiBSZXdyaXRlIGNvbW1hbmQgbG9va3VwIGFuZCBoZWxwIGNvbW1hbmQgKGZpeCBwcm9ibGVtcyB3aXRoIGJ1YmJsZQogIHNvcnQgd2hlbiBzb3J0aW5nIGNvbW1hbmQgbmFtZSBsaXN0KS4gTWlub3IgY2xlYW51cCBoZXJlIGFuZCB0aGVyZS4KCiogTWVyZ2UgZnJvbSAic3RhYmxlIGJyYW5jaCIsIHRhZyBMQUJFTF8yMDAzXzA2XzI4XzE4MDAtc3RhYmxlOgogIC0gQWxsb3cgdG8gY2FsbCBzeXNtb24gZnVuY3Rpb24gaW50ZXJhY3RpdmVseQogIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgbWlzc2luZyBSU1IgZGVmaW5pdGlvbnMgZm9yIE1QQzh4eAogIC0gSW1wcm92ZSBsb2cgYnVmZmVyIGhhbmRsaW5nOiBndWFyYW50ZWUgY2xlYW4gcmVzZXQgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCiAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIENvZGUgY2xlYW51cDoKICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgogIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQoKKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQogICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwogIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgogIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CgoqIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCiAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54CgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6CiAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCiAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgogIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgogIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQogIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CiAgLSBoeW1vZCB1cGRhdGUKICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQoKKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgogIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAogICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCiAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KCiogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQoKKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgogIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCiAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCiAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwogICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCiAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAogICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCiAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgogICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwogICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCiAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwogICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwogICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQogIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CiAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCiAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4CiAgICAgIGFuZCByeCBtZXNzYWdlcwogICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CiAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCiAgICB0ZWNobmljYWxseSBjb3JyZWN0CiAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAogIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCiAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgogIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgogIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgogIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CiAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgogIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAogIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgogIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCiAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwogICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKCiogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CiAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKCiogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCgoqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgogIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAogIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6CiAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CiAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQogICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCiAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQogICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgoKKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgogIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAoKKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCiAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgogIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQogICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KCiogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCiAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCgoqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CiAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQoKKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCiAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CiAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CiAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCiAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1CgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CiAgeDg2IHVwZGF0ZQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6CiAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCiAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CiAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwogIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQogIC0gYWRkIGRvYy9SRUFETUUubmFuZAogIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQogIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwogIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAogIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lICBfYXRfY29tcGlsZV8KICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCiAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCgoqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKCiogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQoKKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CiAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKCiogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCiAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQogIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KCiogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6CiAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgogIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCiAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAogICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCiAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCiAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgogIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCiAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzICBWRkQgY29tbWFuZDsKICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CiAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQoKKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAoKKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgogIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCgoqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CiAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0CgoqIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCiAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCiAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCgoqIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6CiAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKCiogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCiAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgogIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KCiogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKCiogTFdNT04gZXh0ZW5zaW9uczoKICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CiAgLSBtb2RlbSBzdXBwb3J0CiAgLSBzeXNtb24gc3VwcG9ydAogIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAoKKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgoKKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CiAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCgoqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgogIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCiogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgogIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQogICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCiAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CiAgZGF0YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCiAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KCiogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CiAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQoKKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCgoqIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgogIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCiAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgogIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCiAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKCiogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgogIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAogIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKCiogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQogIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAoKKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCiAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCgoqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CiAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQoKKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMwogIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCiAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKICAtIGZpeCBjb21tb24vY21kX25hbmQuYwoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6CiAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKCiogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCiAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQogIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCiAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwogIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCiAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCgoqIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAoKKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CiAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgogIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAogICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQogIC0gZml4IGkyYyBmaXh1cCBjb2RlCiAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCiAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRyYW5zbWlzc2lvbgoKKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKCiogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCiAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KCiogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6CiAgLSBQQ0k0MDUgdXBkYXRlLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgogIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5CiAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgogIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KCiogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgogIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCiAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCiAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jawoKKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCiAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CiAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwogIGluIGNvbW1vbi9jbWRfcGNpLmMKCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgogIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQogICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCiAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCiAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgogIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgogIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCiAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQogIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKCiogTmFtZSBjbGVhbnVwOgogIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCiAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwogIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6CiAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCgoqIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCiAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCiAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgoKKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKICAtIGFkZCBzdXBwb3J0IGZvciBGdWppdHN1IGZsYXNoZXMKICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgogIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCiAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgogIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQoKKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdwogIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgogIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgogIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQogICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCiAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKICAtIGZpeCBzb21lIGNvbW1lbnRzLgoKKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgc2NhbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6CiAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgogIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwogIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQogIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQoKKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CiAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgogIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCgoqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKCiogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgogIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6CiAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgogIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKICBDT05GSUdfUENJX0JPT1RERUxBWSkuCiAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KCiogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKICBzbG90IHBvcHVsYXRlZCkKCiogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCgoqIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZSAgZXRoYWRkciAgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKCiogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBkdWFsIGV0aGVybmV0IHN1cHBvcnQgb24gUE04MjYKCiogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKCiogUGF0Y2ggYnkgVG9yZCBBbmRlcnNzb24sIDE2IEphbiAyMDAzOgogIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKCiogRml4IEkyQyBFRVBST00gcHJvYmxlbSBvbiBJQ1U4NjIgYm9hcmQgKHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0CiAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBWMzcgYm9hcmQKICAocGF0Y2ggYnkgSvNuIEJlbmVkaWt0c3NvbiwgMTEgRGVjIDIwMDIpCgoqIFVwZGF0ZSBiYXVkcmF0ZSBpbiBiZF9pbmZvIHdoZW4gaXQgZ2V0cyBjaGFuZ2VkCgoqIEFkZCB3YXRjaGRvZyB0cmlnZ2VyIHBvaW50cyB3aGlsZSB3YWl0aW5nIGZvciBzZXJpYWwgcG9ydAogIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCgoqIEltcHJvdmUgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChmaWd1cmF0aW9uIG9mIHRoZSB1dGlsaXR5LCB1c2luZyBhIGNvbmZpZyBmaWxlKQoKKiBBZGQgc2luZ2xlIHF1b3RlIHN1cHBvcnQgZm9yIChvbGQpIGNvbW1hbmQgbGluZSBwYXJzZXIKCiogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CiAgaW4gUE9TVCwgRUVQUk9NIHNob3dzIHVwIG9uIDggYWRkcmVzc2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVc2UgMS1ieXRlLXJlYWQgaW5zdGVhZCBvZiAtd3JpdGUgZm9yIGlwcm9iZSgpIGZ1bmN0aW9uCiAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKCiogZXh0ZW5kIEkyQyBQT1NUIGNvZGU6IGNoZWNrIGZvciBsaXN0IG9uIGtub3duIGFkZHJlc3NlcwoKKiBJbXByb3ZlIGxvZyBidWZmZXIgY29kZTsgdXNlICJsb2dsZXZlbCIgdG8gZGVjaWRlIHdoaWNoIG1lc3NhZ2VzCiAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKCiogQWRkIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKCiogUGF0Y2ggYnkgSGFucy1Kb2VyZyBGcmllZGVuLCAwNiBEZWMgMjAwMgogIEZpeCBtaXNjIHByb2JsZW1zIHdpdGggQW1pZ2FPbmUgc3VwcG9ydAoKKiBQYXRjaCBieSBDaHJpcyBIYWxsaW5hbiwgMyBEZWMgMjAwMjoKICBtaW5vciBjbGVhbnVwIHRvIHRoZSBNUEM4MjQ1IEVQSUMgZHJpdmVyCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBGaXggbmVzdGVkIHN5c2NhbGxzIGJ1ZyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI3IE5vdiAyMDAyOgogIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCgoqIEZpeCBidWcgaW4gVFFNODI2MCBib2FyZCBkZXRlY3Rpb24gLSBib2FyZHMgZ290IHN0dWNrIHdoZW4gYm9hcmQgSUQKICB3YXMgbm90IHJlYWRhYmxlCgoqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCgoqIEZpeCBzdGFydHVwIHByb2JsZW1zIHdpdGggVkZEIGRpc3BsYXkgb24gVFJBQgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgogIEFkZCBkcml2ZXIgZm9yIEVwc29uIFNFRDEzODA2IGdyYXBoaWMgY29udHJvbGxlci4KICBBZGQgc3VwcG9ydCBmb3IgQk1QIGxvZ29zIGluIGNmYl9jb25zb2xlIGRyaXZlci4KCiogQWRkZWQgc3VwcG9ydCBmb3IgYm90aCBQQ01DSUEgc2xvdHMgKGF0IHRoZSBzYW1lIHRpbWUhKSBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKICBmaXggUENNQ0lBIG9uIE1CWDh4eCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKICBBZGQgQ0ZHX0NQTV9QT1NUX1dPUkRfQUREUiB0byBtYWtlIHRoZSBvZmZzZXQgb2YgdGhlCiAgYm9vdG1vZGUgd29yZCBpbiBEUFJBTSBjb25maWd1cmFibGUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxOCBOb3YgMjAwMjoKICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKCiogUGF0Y2ggYnkgS2VuIENob3UsIDE4IE5vdiAyMDAyOgogIEZpeCBmb3IgbmF0c2VtaSBOSUMgY2FyZHMgKERQODM4MTUpCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE5IE5vdiAyMDAyOgogIGZpeCBhIGJ1ZyBmb3IgdGhlIE1JSSBjb25maWd1cmF0aW9uLCBhbmQgc29tZSB3YXJuaW5ncwoKKiBQYXRjaCBieSBUaG9tYXMgRnJpZWRlbiwgMTMgTm92IDIwMDI6CiAgQWRkIGNvZGUgZm9yIEFtaWdhT25lIGJvYXJkCiAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTIgTm92IDIwMDI6CiAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKICAtIE1ha2luZyB0aGUgYXV0b2Jvb3QgI2RlZmluZXMgZGVwZW5kZW50IG9uIENPTkZJR19BVVRPQk9PVF9LRVlFRAogICAgYmVpbmcgZGVmaW5lZC4KICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKICAgIHJvb3Qtb24tbmZzIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gc3dpdGNoIGhvdyB0aGUgZGVmYXVsdCBib290CiAgICBtZXRob2QgZ2V0cyBkZWZpbmVkLgoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDEzIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBpMzg2IGFyY2hpdGVjdHVyZSBhbmQgQU1EIFNDNTIwIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDEyIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBET1MgZmlsZXN5c3RlbSBhbmQgYm9vdGluZyBmcm9tIERPUyBmbG9wcHkgZGlzawoKKiBQYXRjaCBieSBKaW0gU2FuZG96LCAwNyBOb3YgMjAwMjoKICBJbmNyZWFzZSBudW1iZXIgb2YgbmV0d29yayBSWCBidWZmZXJzIChQS1RCVUZTUlggaW4KICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQogIHdoaWNoIHNob3dlZCAiUmVjZWl2ZXIgaXMgbm90IHJlYWR5IiBlcnJvcnMgd2hlbiBVLUJvb3Qgd2FzCiAgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZSBidWZmZXJzIHNsb3dlciB0aGFuIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIKICB3YXMgZmlsbGluZyB0aGVtLgoKKiBQYXRjaCBieSBBbmRyZWFzIE9iZXJyaXR0ZXIsIDA5IE5vdiAyMDAyOgogIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKICBvdGhlcndpc2U7IHJldHVybiBjb2RlIDAgaXMgdmFsaWQgYW4gbWVhbnMgbm8gZmlsZSBsb2FkZWQgLSBpbiB0aGlzCiAgY2FzZSB0aGUgZW52aXJvbm1lbnQgc3RpbGwgZ2V0cyB1cGRhdGVkIQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgogIC0gaW1wcm92ZSBBREMvREFDIGNsb2NraW5nIG9uIHRoZSBTQUNTbmcgYm9hcmQgdG8gYWxpZ24KICAgIHRoZSBmYWlsaW5nIGVkZ2VzIG9mIExSQ0xLIGFuZCBTQ0xLCiAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciA4Mnh4IHN5c3RlbXMKICAtIHdpcmUgc3NwaS9zc3BvIGNvbW1hbmRzIGludG8gY29tbWFuZCBoYW5kbGVyOyBpbXByb3ZlZCBlcnJvcgogICAgaGFuZGxlcmluZwogIC0gYWRkIHRpbWVzdGFtcCBzdXBwb3J0IGFuZCBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgdG8gdGhlCiAgICBTQUNTbmcgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBWaW5jZSBIdXNvdnNreSwgNyBOb3YgMjAwMjoKICBBZGQgIi1uIiB0byBsaW5rZXIgb3B0aW9ucyB0byBnZXQgcmlkIG9mICJOb3QgZW5vdWdoIHJvb20gZm9yCiAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMDUgTm92IDIwMDIKICBSZW5hbWUgQ09ORklHX1BMTF9JTlBVVF9GUkVRIHRvIENPTkZJR19TWVNfQ0xLX0ZSRVEKICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKCiogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6CiAgTWFrZSB0aGUgUFhBIHJlYWxseSBjaGFuZ2UgaXQncyBmcmVxdWVuY3kKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcwoKKiBGaXggdW5pbml0aWFsaXplZCBtZW1vcnkgKE1BQyAgYWRkcmVzcykgIGluICA4eHggIFNDQy9GRUMgIGV0aGVybmV0CiAgZHJpdmVycwoKKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCiAgc3lzbG9nIG1lY2hhbmlzbTsgdXNlZCBlc3BlY2lhbGx5IGZvciBQT1NUIHJlc3VsdHMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGt1cDRrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDQgTm92IDIwMDI6CiAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKICAtIGFkZGVkIHByb2dyZXNzIGNhbGxiYWNrcyB0byAoc29tZSBvZiB0aGUpIEFSTSBjb2RlCiAgLSB1cGRhdGUgZm9yIENvZ2VudCBDU0IyMjYgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAoKKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CiAgSW1wcm92ZSBQQ0kgYWNjZXNzIG9uIDMyLWJpdHMgQ29tcGFjdCBQQ0kgYnVzCgoqIEZpeCBtZGVsYXkoKSBvbiBUUkFCIC0gdGhpcyB3YXMgc3RpbGwgdGhlIGRlYnVnZ2luZyB2ZXJzaW9uIHdpdGgKICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMSBOb3YgMjAwMjoKICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQoKKiBDbGVhbnVwIG9mIG5hbWVzIGFuZCBSRUFETUUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5vdGVzIGZvciBVLUJvb3QgMC4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiAiRGFzIFUtQm9vdCIsIHRoZSBVbml2ZXJzYWwgQm9vdCBMb2FkZXIuCgpJdCBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuMC4wICh0aGUgIkhhbGxvd2VlbiBSZWxlYXNlIikgb2YgUFBDQm9vdC4KRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0IHBsZWFzZSBzZWUgdGhlClBQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=