MC40NHRlc3QyIC0gVHVlcyBBdWcgMTcgMjAwNCAxNzo0Mzo1NCArMDgwMAoKLSBGaXggdXAgZHJvcGJlYXJtdWx0aSB0YXJnZXRzIGluIHRoZSBNYWtlZmlsZSAtIHN5bWxpbmtzIGFyZSBub3cgY3JlYXRlZAoKLSBDb21waWxlIGZha2UtcmZjMjU1MyBldmVuIHdpdGggZHJvcGJlYXJjb252ZXJ0L2Ryb3BiZWFya2V5IC0gdGhpcyAKICBhbGxvd3MgdGhlbSB0byB3b3JrIG9uIHBsYXRmb3JtcyB3aXRob3V0IGEgbmF0aXZlIGdldGFkZHJpbmZvKCkKCi0gQ3JlYXRlIH4vLnNzaC9rbm93bl9ob3N0cyBwcm9wZXJseSBpZiBpdCBkb2Vzbid0IGV4aXN0CgotIEZpeCBiYXNlbmFtZSgpIGZ1bmN0aW9uIHByb3RvdHlwZQoKLSBCYWNrcG9ydCBzb21lIGxvY2FsIGNoYW5nZXMgKG1vcmUgI2lmZGVmcyBmb3IgdGVybWNvZGVzLmMsIGEgZml4IGZvciBtaXNzaW5nCiAgZGVmaW5lcyBvbiBBSVgpLgoKLSBMZXQgZGJjbGllbnQgYmUgcnVuIGFzICJzc2giCgotIEluaXRpYWxpc2UgbXBfaW50cyBieSBkZWZhdWx0CgowLjQ0dGVzdDEgLSBTdW4gQXVnIDE2IDIwMDUgMTc6NDM6NTQgKzA4MDAKCi0gVEVTVElORyBSRUxFQVNFIC0gdGhpcyBpcyB0aGUgZmlyc3QgcHVibGljIHJlbGVhc2Ugb2YgdGhlIGNsaWVudCBjb2RlYmFzZSwKICBzbyB0aGVyZSBhcmUgc3VyZSB0byBiZSBidWdzIHRvIGJlIGZvdW5kLiBJbiBhZGRpdGlvbiwgaWYgeW91J3JlIGp1c3QgdXNpbmcKICB0aGUgc2VydmVyIHBvcnRpb24sIHRoZSBmaW5hbCBiaW5hcnkgc2l6ZSBwcm9iYWJseSB3aWxsIGluY3JlYXNlIC0gSSdsbAogIGJlIHRyeWluZyB0byBnZXQgaXQgYmFjayBkb3duIGluIGZ1dHVyZSByZWxlYXNlcy4KCi0gRHJvcGJlYXIgY2xpZW50IGFkZGVkIC0gbG90cyBvZiBjaGFuZ2VzIHRvIHRoZSBzZXJ2ZXIgY29kZSBhcyB3ZWxsIHRvIAogIGdlbmVyYWxpc2UgdGhpbmdzCgotIElQdjYgc3VwcG9ydCBhZGRlZCBmb3IgY2xpZW50LCBzZXJ2ZXIsIGFuZCBmb3J3YXJkaW5nCgotIE5ldyBtYWtlZmlsZSB3aXRoIG1vcmUgZ2VuZXJpYyBzdXBwb3J0IGZvciBtdWx0aXBsZS1wcm9ncmFtIGJpbmFyaWVzCgowLjQzIC0gRnJpIEp1bCAxNiAyMDA0IDE3OjQ0OjU0ICswODAwCgotIFNFQ1VSSVRZOiBEb24ndCB0cnkgdG8gZnJlZSgpIHVuaW5pdGlhbGlzZWQgdmFyaWFibGVzIGluIERTUyB2ZXJpZmljYXRpb24KICBjb2RlLiBUaGFua3MgdG8gQXJuZSBCZXJuaW4gZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4gVGhpcyBpcyBwb3NzaWJseQogIGV4cGxvaXRhYmxlLCBhbGwgdXNlcnMgd2l0aCBEU1MgYW5kIHB1YmtleS1hdXRoIGNvbXBpbGVkIGluIGFyZSBhZHZpc2VkIHRvCiAgdXBncmFkZS4KCi0gQ2xlYW4gdXAgYWdlbnQgZm9yd2FyZGluZyBzb2NrZXQgZmlsZXMgY29ycmVjdGx5LCBwYXRjaCBmcm9tIEdlcnJpdCBQYXBlLgoKLSBEb24ndCBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBwb3J0Zm9yd2FyZGluZyB0byBzZXJ2ZXJzIHdoaWNoIGRvbid0CiAgc2VuZCBhbnkgaW5pdGlhbCBkYXRhL2Jhbm5lci4gUGF0Y2ggZnJvbSBOaWtvbGEgVmxhZG92CgotIEZpeCBmb3IgbmV0d29yayB2cy4gaG9zdCBieXRlIG9yZGVyIGluIGxvZ2dpbmcgcmVtb3RlIFRDUCBwb3J0cywgYWxzbwogIGZyb20gR2Vycml0IFBhcGUuCgotIEluaXRpYWxpc2UgbWFueSBwb2ludGVycyB0byBOVUxMLCBmb3IgZ2VuZXJhbCBzYWZldHkuIEFsc28gY2hlY2tlZCBjbGVhbnVwCiAgY29kZSBmb3IgbXBfaW50cyAocmVsYXRlZCB0byBzZWN1cml0eSBpc3N1ZXMgYWJvdmUpLgoKMC40MiAtIFdlZCBKdW4gMTYgMjAwNCAxMjo0NDo1NCArMDgwMAoKLSBVcGRhdGVkIHRvIEdlcnJpdCBQYXBlJ3Mgb2ZmaWNpYWwgRGViaWFuIHN1YmRpcmVjdG9yeQoKLSBGaXhlZCBiYWQgY2hlY2sgd2hlbiBvcGVuaW5nIC9kZXYvdXJhbmRvbSAtIHRoYW5rcyB0byBEYW5ueSBTdW5nLgoKLSBBZGRlZCAtaSBpbmV0ZCBtb2RlIGZsYWcsIGFuZCBhc3NvY2lhdGVkIG9wdGlvbnMgaW4gb3B0aW9ucy5oIC4gRHJvcGJlYXIKICBjYW4gYmUgY29tcGlsZWQgd2l0aCBlaXRoZXIgbm9ybWFsIG1vZGUsIGluZXRkLCBvciBib3RoIG1vZGVzLiBUaGFua3MKICB0byBHZXJyaXQgUGFwZSBmb3IgYmFzaWMgcGF0Y2ggYW5kIG1vdGl2YXRpb24uCgotIFVzZSA8ZGlyZW50Lmg+IHJhdGhlciB0aGFuIDxzeXMvZGlyLmg+IGZvciBQT1NJWCBjb21wbGlhbmNlLiBUaGFua3MgdG8gQmlsbAogIFNvbW1lcmZpZWxkLgoKLSBGaXhlZCBhIFRDUCBmb3J3YXJkaW5nIChjbGllbnQtbG9jYWwsIC1MIHN0eWxlKSBidWcgd2hpY2ggY2F1c2VkIHRoZSB3aG9sZQogIHNlc3Npb24gdG8gY2xvc2UgaWYgdGhlIFRDUCBjb25uZWN0aW9uIGZhaWxlZC4gVGhhbmtzIHRvIEFuZHJldyBCcmF1bmQgZm9yCiAgcmVwb3J0aW5nIGl0IGFuZCBoZWxwaW5nIHRyYWNrIGl0IGRvd24uCgotIFJlLWVuYWJsZSBzaWdwaXBlIGZvciBjaGlsZCBwcm9jZXNzZXMuIFRoYW5rcyB0byBHZXJyaXQgUGFwZSBmb3Igc29tZQogIHN1Z2dlc3Rpb25zLCBhbmQgQlNEIG1hbnBhZ2VzIGZvciBhIGNsZWFyZXIgZXhwbGFuYXRpb24gb2YgdGhlIGJlaGF2aW91ci4KCi0gQWRkZWQgbWFucGFnZXMsIHRoYW5rcyB0byBHZXJyaXQgUGFwZS4KCi0gQ2hhbmdlZCBsaWNlbnNlIHRleHQgZm9yIExpYlRvbUNyeXB0IGFuZCBMaWJUb21NYXRoLgoKLSBBZGRlZCBzdHJpcC1zdGF0aWMgdGFyZ2V0CgotIEZpeGVkIGEgYnVnIGluIGFnZW50LWZvcndhcmRpbmcgY2xlYW51cCBoYW5kbGVyIC0gd291bGQgc2VnZmF1bHQKICAoZGVyZWZlcmVuY2luZyBhIG51bGwgcG9pbnRlcikgaWYgYWdlbnQgZm9yd2FyZGluZyBoYWQgZmFpbGVkLgoKLSBGaXggYmVoYXZpb3VyIG9mIGF1dGhvcml6ZWRfa2V5cyBwYXJzaW5nLCBzbyBsYXJnZXIgKD4xMDI0IGJpdCkgRFNBIGtleXMgd2lsbAogIHdvcmsuIFRoYW5rcyB0byBEci4gTWFya3VzIFdhbGRlY2sgZm9yIHRoZSByZXBvcnQuIAoKLSBGaXhlZCBsb2NhbCBwb3J0IGZvcndhcmRpbmcgY29kZSBzbyB0aGF0IHRoZSAiLWoiIG9wdGlvbiB3aWxsIG1ha2UgZm9yd2FyZGluZwogIGF0dGVtcHRzIGZhaWwgbW9yZSBncmFjZWZ1bGx5LgoKLSBBbGxvdyByZXBlYXRlZCByZXF1ZXN0cyBpbiBhIHNpbmdsZSBzZXNzaW9uIGlmIHByZXZpb3VzIG9uZXMgZmFpbCAtIHRoaXMgZml4ZXMgIFB1VFRZIGFuZCBzb21lIG90aGVyIFNDUCBjbGllbnRzLCB3aGljaCB0cnkgU0ZUUCwgdGhlbiBmYWxsLWJhY2sgdG8gU0NQIGlmIGl0CiAgaXNuJ3QgYXZhaWxhYmxlLiBUaGFua3MgdG8gU3RpcmxpbmcgV2VzdHJ1cCBmb3IgdGhlIHJlcG9ydC4KCi0gVXBkYXRlZCB0byBMaWJUb21DcnlwdCAwLjk2IGFuZCBMaWJUb21NYXRoIDAuMzAuIFRoZSBBRVMgY29kZSBub3cgdXNlcwogIHNtYWxsZXIgbm9uLXByZWNvbXB1dGVkIHRhYmxlcyBpZiBEUk9QQkVBUl9TTUFMTF9DT0RFIGlzIGRlZmluZWQgaW4KICBvcHRpb25zLmgsIGxlYWRpbmcgdG8gYSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaW4gdGhlIGJpbmFyeSBzaXplLgoKMC40MSAtIE1vbiBKYW4gMTkgMjAwNCAyMjo0MDoxOSArMDgwMAoKLSBGaXggaW4gY29uZmlndXJlIHNvIHRoYXQgY3Jvc3MtY29tcGlsaW5nIHdvcmtzLCB0aGFua3MgdG8gbnVtZXJvdXMgcGVvcGxlIGZvcgogIHJlcG9ydGluZyBhbmQgdGVzdGluZwoKLSBUZXJtaW5hbCBtb2RlIHBhcnNpbmcgbm93IGhhbmRsZXMgZW1wdHkgdGVybWluYWwgbW9kZSBzdHJpbmdzIChzZW50IGJ5CiAgV2luZG93cyBzc2guY29tIGNsaWVudHMpLCB0aGFua3MgdG8gUmljYXJkbyBEZXJiZXMgZm9yIHRoZSByZXBvcnQKCi0gSGFuZGxpbmcgaXMgaW1wcm92ZWQgZm9yIHVzZXJzIHdpdGggbm8gc2hlbGwgc3BlY2lmaWVkIGluIC9ldGMvcGFzc3dkLAogIHRoYW5rcyBhZ2FpbiB0byBSaWNhcmRvIERlcmJlcwoKLSBGaXggZm9yIGNvbXBpbGluZyB3aXRoIC0tZGlzYWJsZS1zeXNsb2csIHRoYW5rcyB0byBnb3Jkb25maAoKLSBWYXJpb3VzIG1pbm9yIGZpeGVzIGFsbG93IHNjcCB0byB3b3JrIHdpdGggaXJpeCwgdGhhbmtzIHRvIFBhdWwgTWFyaW5jZXUgZm9yCiAgZml4aW5nIGl0IHVwCgotIFVzZSA8c3Ryb3B0cy5oPiBub3QgPHN5cy9zdHJvcHRzLmg+LCBzaW5jZSB0aGUgZm9ybWVyIHNlZW1zIG1vcmUgY29tbW9uCgowLjQwIC0gVHVlIEphbiAxMyAyMDA0IDIxOjA1OjE5ICswODAwCgotIFJlbW90ZSBUQ1AgZm9yd2FyZGluZyAoLVIpIHN0eWxlIGltcGxlbWVudGVkCgotIExvY2FsIGFuZCByZW1vdGUgVENQIGZvcndhcmRpbmcgY2FuIGVhY2ggYmUgZGlzYWJsZWQgYXQgcnVudGltZSAoLWsgYW5kIC1qCiAgc3dpdGNoZXMpCgotIEZpeCBmb3IgcHJvYmxlbXMgZGV0ZWN0aW5nIG9wZW5wdHkoKSB3aXRoIHVDbGliYyAtIG1hbnkgdGhhbmtzIHRvIHZhcmlvdXMKICBwZW9wbGUgZm9yIHJlcG9ydGluZyBhbmQgdGVzdGluZyBmaXhlcywgaW5jbHVkaW5nIChpbiByYW5kb20gb3JkZXIpIENyaXN0aWFuCiAgSW9uZXNjdS1JZGJvaHJuLCBKYW1lcyBFd2luZywgU3RldmUgRG92ZXIsIFRob21hcyBMdW5kcXVpc3QgYW5kIEZyZWRlcmljCiAgTGF2ZXJuaGUKCi0gSW1wcm92ZWQgcG9ydGFiaWxpdHkgZm9yIElSSVgsIHRoYW5rcyB0byBQYXVsIE1hcmluY2V1CgotIEFJWCBhbmQgSFBVWCBwb3J0YWJpbGl0eSBmaXhlcywgdGhhbmtzIHRvIERhcnJlbiBUdWNrZXIgZm9yIHBhdGNoZXMKCi0gcHJuZ2Qgc2hvdWxkIG5vdyB3b3JrIGNvcnJlY3RseSwgdGhhbmtzIHRvIERhcnJlbiBUdWNrZXIgZm9yIHRoZSBwYXRjaAoKLSBzY3AgY29tcGlsYXRpb24gb24gc3lzdGVtcyB3aXRob3V0IHN0cmxjcHkoKSBpcyBmaXhlZCwgdGhhbmtzIHRvIFBldGVyCiAgSmFubmVzZW4gYW5kIERhdmlkIE11c2UgZm9yIHJlcG9ydGluZyBpdCAoaW5kZXBlbmRlbnRseSBhbmQgc2ltdWx0YW5lb3VzbHkgOikKCi0gTWVyZ2VkIGluIG5ldyBMaWJUb21DcnlwdCAwLjkyIGFuZCBMaWJUb21NYXRoIDAuMjgKCjAuMzkgLSBUdWUgRGVjIDE2IDIwMDMgMTU6MTk6MTkgKzA4MDAKCi0gQmV0dGVyIGNoZWNraW5nIG9mIGtleSBsZW5ndGhzIGFuZCBwYXJhbWV0ZXJzIGZvciBEU1MgYW5kIFJTQSBhdXRoCgotIFByaW50IGZpbmdlcnByaW50IG9mIGtleXMgdXNlZCBmb3IgcHVia2V5IGF1dGgKCi0gTW9yZSBjb25zaXN0ZW50IGxvZ2dpbmcgb2YgdXNlcm5hbWVzIGFuZCBJUHMKCi0gQWRkZWQgb3B0aW9uIHRvIGRpc2FibGUgcGFzc3dvcmQgYXV0aCAob3IganVzdCBmb3Igcm9vdCkgYXQgcnVudGltZQoKLSBBdm9pZCBpbmNsdWRpbmcgYmlnbnVtIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBnaXZlIG11Y2ggc3BlZWQgYmVuZWZpdCBidXQKICB0YWtlIHVwIGJpbmFyeSBzaXplCgotIEFkZGVkIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIE9wZW5TU0gncyBzY3AgYmluYXJ5CgotIEFkZGVkIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBmdW5jdGlvbnMgZm9yIElyaXgsIHRoYW5rcyB0byBQYXVsIE1hcmluY2V1CgotIERvbid0IGNoZWNrIGZvciB1bnVzZWQgbGlicmFyaWVzIGluIGNvbmZpZ3VyZSBzY3JpcHQKCi0gUmVtb3ZlZCB0cmFpbGluZyBjb21tYSBpbiBhbGdvcml0aG0gbGlzdHMgKHRoYW5rcyB0byBNaWhuZWEgU3RvZW5lc2N1KQoKLSBGaXhlZCB1cCBjaGFubmVsIGNsb3NlIGhhbmRsaW5nLCBhbHdheXMgc2VuZCBjbG9zZSBwYWNrZXQgaW4gcmVzcG9uc2UKICAoYWxzbyB0aGFua3MgdG8gTWlobmVhIFN0b2VuZXNjdSkKCi0gVmFyaW91cyBtYWtlZmlsZSBpbXByb3ZlbWVudHMgZm9yIGNyb3NzLWNvbXBpbGluZywgdGhhbmtzIHRvIEZyaWVkcmljaAogIExvYmVuc3RvY2sgYW5kIE1paG5lYSBTdG9lbmVzY3UKCi0gVXNlIGRhZW1vbigpIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZSAob3Igb3VyIG93biBjb3B5KSByYXRoZXIgdGhhbiBzZXBhcmF0ZQogIGNvZGUgKHRoYW5rcyB0byBGculk6XJpYyBMYXZlcm5oZSBmb3IgdGhlIHJlcG9ydCBhbmQgZGVidWdnaW5nLCBhbmQgQmVybmFyZAogIEJsYWNraGFtIGZvciBoaXMgc3VnZ2VzdGlvbiBvbiB3aGF0IHRvIGxvb2sgYXQpCgotIEZpeGVkIHVwIHN1cHBvcnQgZm9yIGZpcnN0X2tleF9wYWNrZXRfZm9sbG93cywgcmVxdWlyZWQgdG8gdGFsayB0byBzc2guY29tCiAgY2xpZW50cy4gVGhhbmtzIHRvIE1hcmlhbiBTdGFnYXJlc2N1IGZvciB0aGUgYnVnIHJlcG9ydC4KCi0gQXZvaWQgdXNpbmcgTUFYUEFUSExFTiwgcG9pbnRlciBmcm9tIElhbiBNb3JyaXMKCi0gSW1wcm92ZWQgaW5wdXQgc2FuaXR5IGNoZWNraW5nCgowLjM4IC0gU2F0IE9jdCAxMSAyMDAzIDE2OjI4OjEzICswODAwCgotIERlZmF1bHQgaG9zdGtleSBwYXRoIGNoYW5nZWQgdG8gL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl97cnNhLGRzc31faG9zdF9rZXkKICByYXRoZXIgdGhhbiAvZXRjL2Ryb3BiZWFyX3tyc2EsZHNzfV9ob3N0X2tleQoKLSBBZGRlZCBTTUFMTCBhbmQgTVVMVEkgdGV4dCBmaWxlcyB3aGljaCBoYXZlIGluZm8gb24gY29tcGlsaW5nIGZvciBtdWx0aXBsZQogIGJpbmFyaWVzIG9yIHNtYWxsIGJpbmFyaWVzCgotIEFsbG93IGZvciBjb21tYW5kbGluZSBkZWZpbml0aW9uIG9mIHNvbWUgb3B0aW9ucy5oIHNldHRpbmdzCiAgKHdpdGhvdXQgd2FybmluZ3MpCgotIEJlIG1vcmUgY2FyZWZ1bCBoYW5kbGluZyBFSU5UUgoKLSBNb3JlIGZpeGVzIGZvciBjaGFubmVsIGNsb3NpbmcKCi0gQWRkZWQgbXVsdGktYmluYXJ5IHN1cHBvcnQKCi0gSW1wcm92ZWQgbG9nZ2luZyBvZiBJUHMsIG5vdyBnZXQgbG9nZ2VkIGluIGFsbCBjYXNlcwoKLSBEb24ndCBjaGV3IGNwdSB3aGVuIHdhaXRpbmcgZm9yIHZlcnNpb24gaWRlbnRpZmljYXRpb24gc3RyaW5nLCBhbHNvCiAgbWFrZSBzdXJlIHRoYXQgd2Uga2ljayBvZmYgcGVvcGxlIGlmIHRoZXkgZG9uJ3QgYXV0aCB3aXRoaW4gNSBtaW51dGVzLgoKLSBWYXJpb3VzIHNtYWxsIGZpeGVzLCB3YXJuaW5ncyBldGMKCi0gRGlzcGxheSBNT1REIGlmIHJlcXVlc3RlZCAtIHN1Z2dlc3RlZCBieQogIFRyZW50IExsb3lkIDxsYXRoaWF0IGF0IHNpeGxhYnMub3JnPiBhbmQKICBaYWNoIFdoaXRlIDx6d2hpdGUgYXQgZGFya3N0YXIuZnJvcC5vcmc+CgotIHNmdHAgc3VwcG9ydCB3b3JrcyAocmVsaWVzIG9uIE9wZW5TU0ggc2Z0cCBiaW5hcnkgb3Igc2ltaWxhcikKCi0gQWRkZWQgLS1kaXNhYmxlLXNoYWRvdyBvcHRpb24gKHJlcXVlc3RlZCBieSB0aGUgZmxvcHB5ZncgZ3V5cykKCjAuMzcgLSBXZWQgU2VwdCAyNCAyMDAzIDE5OjQyOjEyICswODAwCgotIFZhcmlvdXMgcG9ydGFiaWxpdHkgZml4ZXMsIGZpeGVzIGZvciBTb2xhcmlzIDksIFRydTY0IDUuMSwgTWFjIE9TIFggMTAuMiwKICBBSVgsIEJTRHMKCi0gVXBkYXRlZCBMaWJUb21NYXRoIHRvIDAuMjcgYW5kIExpYlRvbUNyeXB0IHRvIDAuOTAKCi0gUmVuYW1lZCB1dGlsLntjLGh9IHRvIGRidXRpbC57YyxofSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBzeXN0ZW0gdXRpbC5oCgotIEFkZGVkIHNvbWUgc21hbGwgY2hhbmdlcyBzbyBpdCdsbCB3b3JrIHdpdGggQUlYIChwbHVzIExpbnV4IEFmZmluaXR5KS4KICBUaGFua3MgdG8gU2hpZyBmb3IgdGhlbS4KCi0gSW1wcm92ZWQgdGhlIGNsb3NpbmcgbWVzc2FnZXMsIHNvIGEgY2xlYW4gZXhpdCBpcyAiRXhpdGVkIG5vcm1hbGx5IgoKLSBBZGRlZCBzb21lIG1vcmUgcm9idXN0IGludGVnZXIvc2l6ZSBjaGVja2luZyBpbiBidWZmZXIuYyBhcyBhIGJhY2tzdG9wIGZvcgogIGludGVnZXIgb3ZlcmZsb3dzCgotIFgxMSBmb3J3YXJkaW5nIGZpeGVkIGZvciBPU1gsIHBhdGggZm9yIHhhdXRoIGNoYW5nZWQgdG8gL3Vzci9YMTFSNi9iaW4veGF1dGgKCi0gQ2hhbm5lbCBjb2RlIGhhbmRsZXMgY2xvc2luZyBtb3JlIG5pY2VseSwgZG9lc24ndCBzaXQgd2FpdGluZyBmb3IgYW4gZXh0cmEKICBrZXlzdHJva2Ugb24gQlNEL09TWCBwbGF0Zm9ybXMsIGFuZCBkYXRhIGlzIGZsdXNoZWQgZnVsbHkgYmVmb3JlIGNsb3NpbmcKICBjaGlsZCBwcm9jZXNzZXMgKHRoYW5rcyB0byAKICBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4gPGNyaXN0aWFuLmlvbmVzY3UtaWRib2hybiBhdCBheGlzLmNvbT4gZm9yCiAgcG9pbnRpbmcgdGhhdCBvdXQpLgoKLSBDaGFuZ2VkICJESVNBQkxFX1RDUEZXRCIgdG8gIkVOQUJMRV9UQ1BGV0QiIChhbmQgZm9yIHgxMS9hdXRoKSBzbwogICJkaXNhYmxlIERJU0FCTEVfVENQV0QiIGlzbid0IHNvIGNvbmZ1c2luZy4KCi0gRml4IGF1dGhvcml6ZWRfa2V5cyBoYW5kbGluZyAoZG9uJ3QgY3Jhc2ggb24gdG9vLWxvbmcga2V5cywgYW5kCiAgdXNlIGZnZXRjIG5vdCBnZXRjIHRvIGF2b2lkIHN0cmFuZ2UgbWFjcm8tcmVsYXRlZCBpc3N1ZXMpLCB0aGFua3MgdG8KICBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4gPGNyaXN0aWFuLmlvbmVzY3UtaWRib2hybiBhdCBheGlzLmNvbT4gCiAgYW5kIFN0ZXZlIFJvZGdlcnMgPGh3c3RhciBhdCBjb3gubmV0PiBmb3IgcmVwb3J0aW5nIGFuZCB0ZXN0aW5nLgoKLSBGaXhlcyB0byB0aGUgUkVBRE1FIHdpdGggcmVnYXJkIHRvIHVDbGliYyBzeXN0ZW1zLCB0aGFua3MgdG8gCiAgQ3Jpc3RpYW4gSW9uZXNjdS1JZGJvaHJuIDxjcmlzdGlhbi5pb25lc2N1LWlkYm9ocm4gYXQgYXhpcy5jb20+LAogIGFzIHdlbGwgYXMgZ2VuZXJhbCBpbXByb3ZlbWVudHMgdG8gZG9jdW1lbnRhdGlvbiAoc3BsaXQgUkVBRE1FL0lOU1RBTEwpCgotIEZpeGVkIHVwIHNvbWUgY29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkcm9wYmVhcmNvbnZlcnQvZHJvcGJlYXJrZXkgaWYKICBEU1Mgb3IgUlNBIHdlcmUgZGlzYWJsZWQsIHJlcG9ydGVkIGJ5IFBhdHJpayBLYXJsc3NvbiA8cGF0cmlrIGF0IGNxdXJlLm5ldD4KCi0gRml4IGRvdWJsZS1mcmVlIGJ1ZyBmb3IgaG9zdGtleXMsIHJlcG9ydGVkIGJ5CiAgVmluY2VudCBTYW5kZXJzIDx2aW5jZSBhdCBreWxsaWtraS5vcmc+CgotIEZpeCB1cCBtaXNzaW5nIFxucyBmcm9tIGRyb3BiZWFyY29udmVydCBoZWxwIG1lc3NhZ2UsCiAgdGhhbmtzIHRvIE1vcmR5IE92aXRzIDxtb3ZpdHMgYXQgYmxvb21iZXJnLmNvbT4gZm9yIHRoZSBwYXRjaAoKMC4zNiAtIFR1ZSBBdWd1c3QgMTkgMjAwMyAxMjoxNjoyMyArMDgwMAoKLSBGaXggdW5pbml0aWFsaXNlZCB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gRFNTIHNpZ25pbmcgY29kZQogICh0aGFua3MgdG8gTWF0dGhldyBGcmFueiA8bWRmcmFueiBhdCBpby5jb20+IGZvciByZXBvcnRpbmcsIGFuZCB0aGUgYXV0aG9ycwogIG9mIFZhbGdyaW5kIGZvciBtYWtpbmcgaXQgZWFzeSB0byB0cmFjayBkb3duKQotIEZpeCByZW1vdGUgdmVyc2lvbi1zdHJpbmcgcGFyc2luZyBlcnJvcgogICh0aGFua3MgdG8gQmVybmFyZCBCbGFja2hhbSA8YmVybmFyZCBhdCBibGFja2hhbS5jb20uYXU+IGZvciBub3RpY2luZykKLSBJbXByb3ZlZCBob3N0LWFsZ29yaXRobS1tYXRjaGluZyBhbGdvcml0aG0gaW4gYWxnby5jCi0gRGVjcmVhc2VkIE1BWF9TVFJJTkdfTEVOIHRvIGEgbW9yZSByZWFsaXN0aWMgdmFsdWUKLSBGaXggaW5jb3JyZWN0IHZlcnNpb24gKDAuMzQpIGluIHRoaXMgQ0hBTkdFUyBmaWxlIGZvciB0aGUgcHJldmlvdXMgcmVsZWFzZS4KCjAuMzUgLSBTdW4gQXVndXN0IDE3IDIwMDMgMDU6Mzc6NDcgKzA4MDAKCi0gRml4IGZvciByZW1vdGVseSBleHBsb2l0YWJsZSBmb3JtYXQgc3RyaW5nIGJ1ZmZlciBvdmVyZmxvdy4KICAodGhhbmtzIHRvIEpvZWwgRXJpa3Nzb24gPGplIGF0IGJpdG51eC5jb20+KQoKMC4zNCAtIEZyaSBBdWd1c3QgMTUgMjAwMyAxNToxMDowMCArMDgwMAoKLSBNYWRlIHN5c2xvZyBvcHRpb25hbCwgYm90aCBhdCBjb21waWxlIHRpbWUgYW5kIGFzIGEgY29tcGlsZSBvcHRpb24KICAoc3VnZ2VzdGVkIGJ5IExhdXJlbnQgQmVyY290IDxza2EgYXQgc2thcm5ldC5vcmc+KQotIEZpeHVwIGZvciBiYWQgYmFzZTY0IHBhcnNpbmcgaW4gYXV0aG9yaXplZF9rZXlzCiAgKG5vdGljZWQgYnkgRGF2eWQgTWFkZWxleSA8ZGF2eWQgYXQgemRsY29tcHV0aW5nLmNvbT4pCi0gQWRkZWQgaW5pdGlhbCB0Y3AgZm9yd2FyZGluZyBjb2RlLCBvbmx5IC1MIChsb2NhbCkgYXQgdGhpcyBzdGFnZQotIEltcHJvdmVkICJtYWtlIGluc3RhbGwiIHdpdGggREVTVERJUiBhbmQgY2hhbmdpbmcgb3duZXJzaGlwIHNlcGVyYXRlbHksCiAgZG9uJ3QgY2hlY2sgZm9yIHNldHBncnAgb24gTGludXggZm9yIGNyb3NzY29tcGlsaW5nLgogIChmcm9tIEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VuIGF0IGNvZGVwb2V0Lm9yZz4pCi0gTW9yZSBjb21tZW50aW5nLCBmaXggbWlub3IgY29tcGlsZSB3YXJuaW5ncywgbWFrZSByZXR1cm4gdmFsdWVzIG1vcmUKICBjb25zaXN0ZW50IGV0YwotIFZhcmlvdXMgc2lnbmVkbmVzcyBmaXhlcwotIENhbiBsaXN0ZW4gb24gbXVsdGlwbGUgcG9ydHMKLSBhZGRlZCBvcHRpb24gdG8gZGlzYWJsZSBvcGVucHR5IHdpdGggY29uZmlndXJlIHNjcmlwdCwKICAoZnJvbSBLLi1QLiBLaXJjaGT2cmZlciA8a2FwZWthIGF0IGVwb3N0LmRlPikKLSBWYXJpb3VzIGNsZWFudXBzIHRvIGJpZ251bSBjb2RlCiAgKHRoYW5rcyB0byBUb20gU3QgRGVuaXMgPHRvbXN0ZGVuaXMgYXQgaWFodS5jYT4pCi0gRml4IGNvbXBpbGUgZXJyb3Igd2hlbiBkaXNhYmxpbmcgUlNBCiAgKGZyb20gTWFyYyBLbGVpbmUtQnVkZGUgPGtsZWluZS1idWRkZSBhdCBnbXguZGU+KQotIE90aGVyIGNsZWFudXBzLCBzcGxpdHRpbmcgbGFyZ2UgZnVuY3Rpb25zIGZvciBwYWNrZXQgYW5kIGtleCBoYW5kbGluZyBldGMKCjAuMzMgLSBTdW4gSnVuZSAyMiAyMDAzIDIyOjI0OjEyICswODAwCgotIEZpeGVkIHNvbWUgaW52YWxpZCBhc3NlcnRpb25zIGluIHRoZSBjaGFubmVsIGNvZGUsIGZpeGluZyB0aGUgc2VydmVyIGR5aW5nCiAgd2hlbiBmb3J3YXJkaW5nIFgxMSBjb25uZWN0aW9ucy4KLSBBZGQgZHJvcGJlYXJjb252ZXJ0IHRvIGNvbnZlcnQgdG8vZnJvbSBPcGVuU1NIIGhvc3Qga2V5cyBhbmQgRHJvcGJlYXIga2V5cwotIFJTQSBrZXlzIG5vdyBrZWVwIHAgYW5kIHEgcGFyYW1ldGVycyBmb3IgY29tcGF0aWJpbGl0eSAtLSBvbGQgRHJvcGJlYXIga2V5cwogIHN0aWxsIHdvcmssIGJ1dCBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gT3BlblNTSCBldGMuCi0gRGViaWFuIHBhY2thZ2luZyBkaXJlY3RvcnkgYWRkZWQsIHRoYW5rcyB0byAKICBHcmFoYW1lIChncmFoYW1lIGF0IGFuZ3J5Z29hdHMubmV0KQotICdpbnN0YWxsJyB0YXJnZXQgYWRkZWQgdG8gdGhlIG1ha2VmaWxlCi0gZ2VuZXJhbCB0aWR5aW5nLCBpbXByb3ZlIGNvbnNpc3RlbmN5IG9mIGZ1bmN0aW9ucyBldGMKLSBJZiBSU0Egb3IgRFNTIGhvc3RrZXlzIGRvbid0IGV4aXN0LCB0aGF0IGFsZ29yaXRobSB3b24ndCBiZSB1c2VkLgotIEltcHJvdmVkIFJTQSBhbmQgRFNTIGtleSBnZW5lcmF0aW9uLCBtb3JlIGVmZmljaWVudCBhbmQgZml4ZWQgc29tZSBtaW5vciBidWdzCiAgKHRoYW5rcyB0byBUb20gU3QgRGVuaXMgZm9yIHRoZSBhZHZpY2UpCi0gTWVyZ2VkIG5ldyB2ZXJzaW9ucyBvZiBMaWJUb21DcnlwdCAoMC44NikgYW5kIExpYlRvbU1hdGggKDAuMjEpCgowLjMyIC0gU2F0IE1heSAyNCAyMDAzIDEyOjQ0OjExICswODAwCgotIERvbid0IGNvbXBpbGUgdW51c2VkIGNvZGUgZnJvbSBsaWJ0b21jcnlwdCAodGVzdCB2ZWN0b3JzIGV0YykKLSBVcGRhdGVkIHRvIGxpYnRvbW1hdGggMC4xNyBhbmQgbGlidG9tY3J5cHQgMC44My4gTmV3IGxpYnRvbW1hdGggcmVzdWx0cwogIGluIHNtYWxsZXIgYmluYXJ5IHNpemUsIGR1ZSB0byBub3QgbGlua2luZyB1bnJlcXVpcmVkIGNvZGUKLSBYMTEgZm9yd2FyZGluZyBhZGRlZAotIEFnZW50IGZvcndhcmRpbmcgYWRkZWQgKGZvciBPcGVuU1NILmNvbSBzc2ggY2xpZW50L2FnZW50KQotIEZpeCBpbmNvcnJlY3QgYnVmZmVyIGZyZWVpbmcgd2hlbiBiYW5uZXJzIGFyZSB1c2VkCi0gSG9zdG5hbWUgcmVzb2x1dGlvbiB3b3JrcwotIFZhcmlvdXMgbWlub3IgYnVnZml4ZXMvY29kZSBzaXplIGltcHJvdmVtZW50cyBldGMKCjAuMzEgLSBGcmkgTWF5IDkgMjAwMyAxNzo1NzoxNiArMDgwMAoKLSBJbXByb3ZlZCBzeXNsb2cgbWVzc2FnZXMgLSBJUCBsb2dnaW5nIGV0YwotIFN0cmlwIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIGxvZyBtZXNzYWdlcyAoc3BlY2lmaWVkIHVzZXJuYW1lIGN1cnJlbnRseSkKLSBMb2dpbiByZWNvcmRpbmcgKHV0bXAvd3RtcCkgc3VwcG9ydCwgc28gbGFzdC93L3dobyB3b3JrIC0gdGFrZW4gZnJvbSBPcGVuU1NICi0gU2hlbGwgaXMgc3RhcnRlZCBhcyBhIHByb3BlciBsb2dpbiBzaGVsbCwgc28gL2V0Yy9wcm9maWxlIGV0YyBpcyBzb3VyY2VkCi0gUHR5cyB3b3JrIG9uIFNvbGFyaXMgKDIuOCB4ODYgdGVzdGVkKSBub3cKLSBGaXhlZCBidWcgaW4gc3BlY2lmeWluZyB0aGUgcnNhIGhvc3RrZXkKLSBGaXhlZCBidWcgaW4gY29tcHJlc3Npb24gY29kZSwgY291bGQgdHJpZ2dlciBpZiBjb21wcmVzc2lvbiByZXN1bHRlZCBpbgogIGxhcmdlciBvdXRwdXQgdGhhbiBpbnB1dCAodW5jb21tb24gYnV0IHBvc3NpYmxlKS4KCjAuMzAgLSBUaHUgQXByIDE3IDIwMDMgMTg6NDY6MTUgKzA4MDAKCi0gU0VDVVJJVFk6IGJ1ZmZlci5jIGhhZCBiYWQgY2hlY2tpbmcgZm9yIGJ1ZmZlciBpbmNyZW1lbnQgbGVuZ3RoIC0gZml4ZWQKLSBjaGFubmVsIGNvZGUgbm93IGNsb3NlcyBwcm9wZXJseSBvbiBFT0YgLSBzY3AgcHJvY2Vzc2VzIGRvbid0IGhhbmcgYXJvdW5kCi0gc3lzbG9nIHN1cHBvcnQgYWRkZWQgLSBpbXByb3ZlZCBhdXRoL2xvZ2luL2ZhaWx1cmUgbWVzc2FnZXMKLSBnZW5lcmFsIGNvZGUgdGlkeWluZywgbWFkZSByZXR1cm4gY29kZXMgbW9yZSBjb25zaXN0ZW50Ci0gTWFrZWZpbGUgZml4ZWQgZm9yIGRlcGVuZGVuY2llcyBhbmQgbWFrZXMgbGlidG9tY3J5cHQgYXMgd2VsbAotIEltcGxlbWVudGVkIHNlbmRpbmcgU1NIX01TR19VTklNUExFTUVOVEVEIDopCgowLjI5IC0gV2VkIEFwciA5IDIwMDMKCi0gRml4ZWQgYSBzdHVwaWQgYnVnIGluIDAuMjggcmVsZWFzZSwgJ25ld3N0ciA9IHN0cmR1cChvbGRzdHIpJywKICBub3QgJ25ld3N0cj1vbGRzdHInCgowLjI4IC0gU3VuIEFwciA2IDIwMDMKCi0gSW5pdGlhbCBwdWJsaWMgcmVsZWFzZQoKRGV2ZWxvcG1lbnQgd2FzIHN0YXJ0ZWQgaW4gT2N0b2JlciAyMDAyCg==