LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWF5IDE3IDE2OjIzOjU2IDE5OTggIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFtmaWxlL3Byb2ZpbGUuY10KCUZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIFBST0ZJTEVfR2V0U2VjdGlvbgoKCSogW21pc2MvY3J0ZGxsLmNdCglEbyBfZ2V0ZHJpdmUsIGZpeCBfY2hkcml2ZS4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUZpcnN0IGN1dCBhdCBDaG9vc2VDb2xvcltXQV0uCgoJKiBbbWlzYy9uZXR3b3JrLmNdCglEbyBzb21ldGhpbmcgc2Vuc2libGUgZm9yIFdOZXRHZXREaXJlY3RvcnlUeXBlMTYuCgpTdW4gTWF5IDE3IDEwOjIxOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGRpc2FibGVkIHN1YiBtZW51cyB3aXRoIE1GX0JZUE9TSVRJT04gdGhhdCB3ZXJlIG5vdCBkaXNhYmxlZC4KCgkqIFttaXNjL2NydGRsbC5jXSBbcmVsYXkzMi9jcnRkbGwuc3BlY10gW2luY2x1ZGUvd2luZXJyb3IuaF0KCUltcGxlbWVudGVkIGZzY2FuZiwgZnNldHBvcywgX2FjY2VzcywgX2ZwcmVzZXQgKHRoYW5rcyB0byBVd2UgQm9ubmVzKSwKCWFuZCBfbHRvYS4gCgoJKiBbbG9hZGVyL3Rhc2suY10KCU1ha2VQcm9jSW5zdGFuY2U6IG11c3QgdXNlIENVUlJFTlRfRFMgaWYgaEluc3QgPT0gTlVMTC4KCgkqIFttaXNjL3NoZWxsLmNdCglTSEVMTF9HZXRSZXNvdXJjZVRhYmxlLCBJbnRlcm5hbEV4dHJhY3RJY29uOiBmaXhlZCBicm9rZW4gLklDTyBoYW5kbGluZwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEZWZlcldpbmRvd1BvczogcmVtb3ZlZCAic2FtZSBwYXJlbnQiIHJlcXVpcmVtZW50LgoJV2hpY2ggZG9jIHN0YXRlcyB0aGF0IHRoaXMgaXMgcmVxdWlyZWQgPwoKU2F0IE1heSAxNiAyMDowODoxMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmUvbW9kdWxlLmNdCglNb3JlIE5FIG1vZHVsZSBjbGVhbnVwcy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgU3dpdGNoU3RhY2tCYWNrKCkuCgpGcmkgTWF5IDE1IDEwOjA0OjI3IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoKCSogW2NvbmZpZ3VyZS5pbl1baW5sY3VkZS9hY2NvbmZpZy5oXQoJRml4ZWQgYnJva2VuIE9TUyBjaGVjaywgYWRkZWQgY2hlY2sgZm9yIHdvcmtpbmcgc2lnYWx0c3RhY2ssCglmaXhlZCBicm9rZW4gc3RhdGZzIGNoZWNrcyBvbiBzb21lIGxpbnV4IHN5c3RlbXMuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdW2xvYWRlci9wZV9pbWFnZS5jXVtyZWxheTMyL2J1aWx0aW4uY10KCSAgW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIGhhbmRsaW5nIG9mIHdpbjMyIG1vZHVsZSBwYXRobmFtZXMuCgoJKiBbcmVsYXkzMi93bmFzcGkzMi5zcGVjXQoJTmV3IGZpbGUuCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJTFpDb3B5IGF1dG8tZGVjb21wcmVzc2VzIExaIGNvbXByZXNzZWQgZmlsZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90CglzcGVjaWFsbHkgZmxhZ2dlZC4gRml4ZXMgc29tZSBJbnN0YWxsU2hpZWxkIHByb2JsZW1zLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgZml4ZXMgZm9yIFJlZ1F1ZXJ5SW5mb0tleSAocmVmZXJlbmNlIHByb2dyYW0gbW9ua2V5LmV4ZQoJZnJvbSBXaW4zMiBTREsgd29ya3Mgbm93IGJldHRlcikuIFByb2JhYmx5IHN0aWxsIGhhcyBmYXVsdHMuCgpGcmkgTWF5IDE1IDA4OjU4OjU4IDE5OTggIE1hcnRpbiBCb2VobWUgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgoJKiBbZ3JhcGhpY3MvbWFwcGluZy5jXSBbaW5jbHVkZS9kYy5oXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZGMuY10KCVJld29ya2VkIHRoZSB3YXkgd29ybGQgdHJhbnNmb3JtYXRpb25zIGFuZCBtYXBwaW5nIG1vZGVzIGFyZSBoYW5kbGVkCglzbyB0aGF0IGJvdGggb2YgdGhlc2UgdHJhbnNmb3JtYXRpb25zIGNhbiBiZSBjb21wdXRlZCBpbiBhIHNpbmdsZQoJc3RlcC4KCgkqIFtncmFwaGljcy9wYWludGluZy5jXSBbZ3JhcGhpY3MvcGF0aC5jXSBbaW5jbHVkZS9wYXRoLmhdCglNb3JlIEdESSBwYXRoIHN1cHBvcnQuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCglGaXhlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIEdSQVBIX0RyYXdBcmMgZm9yIHRoZSB6ZXJvIGhlaWdodCAvCgl6ZXJvIHdpZHRoIGNhc2UgdG8gcmVmbGVjdCBXaW5kb3dzJyBiZWhhdmlvdXIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2RjLmNdCglJbXBsZW1lbnRlZCBNb2RpZnlXb3JsZFRyYW5zZm9ybSBhbmQgQ29tYmluZVRyYW5zZm9ybS4KClR1ZSBNYXkgMTQgMTg6MDM6NDYgMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFtjb250cm9scy9jb21tY3RybC5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCgkgIFtjb250cm9scy8qLmNdW2luY2x1ZGUvKi5oXQoJSW1wbGVtZW50ZWQgSW5pdENvbW1vbkNvbnRyb2xzRXggKGRsbCB2ZXJzaW9uIDQuNzIgY29tcGF0aWJsZSkuCglJbml0Q29tbW9uQ29udHJvbHMgY2FsbHMgSW1hZ2VDb21tb25Db250cm9sc0V4LgoJUmVnaXN0ZXJpbmcgY29kZSBvZiB0aGUgY29tbW9uIGNvbnRyb2xzIGhhZCB0byBiZSBjaGFuZ2VkCgkoc2VlIFhYWFhfUmVnaXN0ZXIgZnVuY3Rpb25zKS4KCgkqIFtjb250cm9scy9zdGF0dXMuY11baW5jbHVkZS9jb21tY3RybC5oXVtpbmNsdWRlL3N0YXR1cy5oXQoJSW1wbGVtZW50ZWQgbW9zdCBuZXcgZmVhdHVyZXMgYW5kIGZpeGVkIHRoZSBsb29rIGFuZCBmZWVsLgoKCSogW2NvbnRvbHMvY29tbWN0cmwuY11baW5jbHVkZS9jb21tY3RybC5oXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglJbXBsZW1lbnRlZCBNZW51SGVscCAoaW5jb21wbGV0ZSkuCgoJKiBbY29udHJvbHMvc3RhdHVzLmNdW2NvbnRyb2xzL3Byb2dyZXNzLmNdCglDaGFuZ2VkIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIGNvbnRyb2wgc3BlY2lmaWMgbWVtb3J5LgoKCSogW2NvbnRyb2xzL2hlYWRlci5jXVtpbmNsdWRlL2hlYWRlci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCglGaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBoZWFkZXIgY29udHJvbC4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXVt3aW5kb3dzL3N5c2NvbG9ycy5jXQoJRml4ZWQgZGVmYXVsdCBjb250cm9sIGNvbG9ycyBmb3IgV2luOTUgbG9vay4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4ZWQgb2ZmIGJ5IG9uZSBlcnJvciBmb3IgV2luOTUgbG9vay4gVG9wIGJvcmRlciBvZiBjaGlsZCB3aW5kb3dzCglzaG91bGQgYmUgdmlzaWJsZS4KCgkqIFttaXNjL2ltYWdlbGlzdC5oXQoJSW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBhbmQgZml4ZWQgc29tZSBidWdzLgoKVGh1IE1heSAxNCAxNTo0MjoyMSAxOTk4ICBSb2JlcnQgV2lsaGVsbSAgPHJvYmVydEBwaHlzaW9sLm1lZC50dS1tdWVuY2hlbi5kZT4KCgkqIFtyZWxheTMyL2NydGRsbC5zcGVjXQoJQWRkZWQgaHlwb3QsajAsajEsam4gYW5kIGNlaWwuCgpXZWQgTWF5IDEzIDE5OjEwOjEwIDE5OTggIFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglJdGVtIGhlaWdodCBpcyBub3cgZXhhY3RseSBmb250IGhlaWdodC4KCVdpbmUgbGlzdGJveGVzIG5vdyBiZWhhdmUgbGlrZSBXaW5kb3dzJyB3aGVuIHRoZXkgYXJlIAoJY3JlYXRlZCB3aXRob3V0IFdTX1ZTQ1JPTEwgYnV0IHRoZSBwcm9ncmFtIHN1YnNlcXVlbnRseSAKCWNhbGxzIFNob3dTY3JvbGxCYXIgb3IgU2V0U2Nyb2xsSW5mby4KCldlZCBNYXkgMTMgMTg6MzM6MDEgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbcmVsYXkzMi9yZWxheTM4Ni5jXQoJUmVzdG9yZSBFUyBhbHNvIGluIHRoZSBub24tZGVidWcgY2FzZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglCdWdmaXg6IEJsb2NraW5nIFRTWE5leHRFdmVudCBjb3VsZCBkZWFkbG9jayBXaW5lLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU2lsbHkgc3R1YnMgZm9yIE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgLyBQb3N0VGhyZWFkTWVzc2FnZQoJdGhhdCBtYWtlIHNvbWUgcHJvZ3JhbXMgcnVuIGJldHRlci4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCVdJTlBST0NfTWFwTXNnMzJBdG8xNi8xNlRvMzJBOiBhZGRlZCBXTV9OT1RJRlkuICAKCiAgICAgICAgKiBbd2luMzIva2VybmVsMzIuY10KCUFkZGVkIDE2LT4zMiB0aHVua2luZyBhbmQgaW1wcm92ZWQgMzItPjE2IHRodW5raW5nIGZ1bmN0aW9ucy4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgbmV3IHZhcmlhbnQgb2YgQ2FsbEZyb20xNiBzdHViIGZvciB1c2Ugd2l0aCBXaW45NSB0aHVua3MuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2J1aWx0aW4uY10gW3dpbjMyL2tlcm5lbDMyLmNdCglBZGRlZCBhIGZldyB1bmRvY3VtZW50ZWQgS0VSTkVMIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvbmUvbW9kdWxlLmNdIFtsb2FkZXIvbmUvc2VnbWVudC5jXQoJQ2FsbCBEbGxFbnRyeVBvaW50IGZvciAxNi1iaXQgRExMcyB3aXRoIHN1YnN5c3RlbSA+PSA0LjAuCgoJKiBbd2luMzIva2VybmVsMzIuc3BlY10gW3dpbjMyL3dvdzMyLnNwZWNdIFt3aW4zMi9vcmRpbmFscy5jXQoJVXNlIG5hbWVzIGZyb20gdGhlIE9jdCA5NCBiZXRhIHJlbGVhc2UgZm9yIHVuZG9jLiBmdW5jdGlvbnMuCgpXZWQgTWF5IDEzIDE0OjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJQ29kZSBjbGVhbnVwLgoKCSogW21pc2MvY3B1LmNdCglDb21tZW50ZWQgb3V0IHRoZSByZWdpc3RyeSBwdXRzIHRlbXBvcmFyaWx5LgoKCSogW3Byb2dyYW1zL3JlZ3Rlc3QvKl0KCU5ldyByZWdpc3RyeSB0ZXN0aW5nIHByb2dyYW0uCgpUdWUgTWF5IDEyIDIyOjU0OjAzIDE5OTggIE1pY2hhZWwgTWVzcyA8bWljaGFlbEBrYXdvMi5yd3RoLWFhY2hlbi5kZT4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglpb2N0bCdzIGRvIG5vdCBjb21tdXRlIGluIC9kZXYvZHNwIGluaXRpYWxpemF0aW9uLgoKVHVlIE1heSAxMiAyMDoxMTo0MiAxOTk4ICBLYXJsIEdhcnJpc29uIDxrYXJsb3NAZXpuZXQubmV0PgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUltcGxlbWVudGVkIFNldENvbnNvbGVUZXh0QXR0cmlidXRlLCBGaWxsQ29uc29sZU91dHB1dENoYXJhY3Rlci4KCUltcHJvdmVkIGN1cnNvciBwb3NpdGlvbmluZy4KCVRoaXMgYWxsb3dzIGZvciB0ZXh0IGNvbG9ycyBpbiBhbiB4dGVybSwgcnh2dCwgb3IgY29uc29sZS4KClR1ZSBNYXkgMTIgMTc6NTc6NTIgMTk5OCAgUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoKCSogW01ha2VmaWxlLmluXQoJQ3JlYXRlIHByZWZpeC97YmlufGxpYn0gZGlyZWN0b3JpZXMgaWYgbWlzc2luZyBkdXJpbmcgaW5zdGFsbC4KClN1biBNYXkgMTAgMTk6Mzc6NTEgMTk5OCAgSmFuIFdpbGxhbW93aXVzIDxqYW5AamFuaGguc2huZXQub3JnPgoKCSogW211bHRpbWVkaWEvbW1pby5jXQoJSGF2ZSBtbWlvU2V0QnVmZmVyIHJldHVybiBzdWNjZXNzICgwKSwgc28gQ29yZWwgRHJhdyA0CglrZWVwcyB3b3JraW5nLiAoSU8gaXMgc3RpbGwgdW5idWZmZXJlZCkKCldlZCBNYXkgIDYgMTY6NTc6NTUgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoKICAgICAgICAqIFtNYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCglDaGFuZ2VkICJtYWtlIGNsZWFuIiB0byByZW1vdmUgYHRleHRlZGl0YCBiYWNrdXAgZmlsZXMgKColKQoKCSogW2NvbnRyb2xzL21lbnUuY11bZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdW2luY2x1ZGUvbGlicmVzLmhdCgkgIFtsb2FkZXIvbWFpbi5jXVtsb2FkZXIvbmUvbW9kdWxlLmNdW3NjaGVkdWxlci9zeW5jaHJvLmNdCgkgIFt3aW4zMi90aW1lLmNdW3dpbmRvd3Mvd2lucG9zLmNdW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgbWlzY2VsbGFuZW91cyBjb21waWxhdGlvbiB3YXJuaW5ncy4KCgkqIFttaXNjL21haW4uY11bbWlzY2VtdS9tYWluLmNdW2luY2x1ZGUvbWFpbi5oXQoJTW92ZWQgcHJvdG90eXBlcyB0byBuZXcgaW5jbHVkZSBmaWxlIG1haW4uaCwgdmFyaW91cyBjbGVhbnVwcy4KClR1ZSBNYXkgIDUgMjE6MDU6MDYgMTk5OCAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFttaXNjL3dpbnNvY2suY10KCURvbid0IHJlZmVyIHRvIF9fRnJlZUJTRF9fIHdoZW4gSEFWRV9TVFJFUlJPUiBpcyBtZWFudC4KCgkqIFttaXNjL2RlYnVnc3RyLmNdCglGb3IgZGVidWdfZHVtcHN0clNlbmQsIHNlbmQgc3RyaW5ncyB0byBzdGRlcnIuCgpUdWUgTWF5ICA1IDIxOjQ3OjQwIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeCBmb3IgUkVHSU9OX1JlZ2lvbk9wKCkgaWYgbmV3UmVnIGlzIG9uZSBvZiB0aGUgc291cmNlIHJlZ2lvbnMuCgpUdWUgTWF5ICA1IDE4OjI3OjMyIDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgoKCSogW21pc2MvbWFpbi5jXQoJQWRkICctaC8taGVscCcgb3B0aW9uIGFuZCBwcmludCBXSU5FX1JFTEVBU0VfSU5GTyB3aXRoIHVzYWdlIG1lc3NhZ2UuCgoJKiBbbWlzYy9zcHkuY10KCVJlYWxpZ24gdHJhY2UgbWVzc2FnZXMuCgpUdWUgTWF5ICA1IDE1OjQ2OjQ3IDE5OTggIERvbm5pZSBWLiBTYXZhZ2UgPGRzYXZhZ2VAY2lzY28uY29tPgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdCglGaXhlZCBjb21waWxlIHdhcm5pbmdzCgoJKiBbbWlzYy93aW5zb2NrLmNdCglXYXJuaW5ncyBzaG91bGQgbm90IGJlIGVycm9ycy4KClR1ZSBNYXkgIDUgMTM6NDA6NDIgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQHJvYW5va2UuaW5maS5uZXQ+CgoJKiBbKi8qXQoJUmVtb3ZlIG1hbnkgd2FybmluZ3MgdGhyb3VnaCBleHBsaWNpdCBjYXN0cywgYWRkZWQgI2luY2x1ZGUncywKCWFuZCBjb3JyZWN0ZWQgcHJpbnRmIGZvcm1hdHMuCgpUdWUgTWF5ICA1IDA1OjE4OjEyIDE5OTggIEluc29tbmlhIChTdGVhIEdyZWVuZSkgPGluc29tbmlhQGNvcmUuYmluZ2hhbXRvbi5lZHU+CgoJKiBbZ3JhcGhpY3MvZGRyYXcuY10KCUtlcHQgdW5jaGFuZ2VkIHBvcnRpb24gb2Ygb2xkIHBhbGV0dGUgd2hlbiBjaGFuZ2luZyBvbmx5IGEgZmV3CglwYWxldHRlIGVudHJpZXMuICBSZWFsbHkgc2hvdWxkIG9ubHkgZGVhbGxvY2F0ZSB0aGUgY2hhbmdlZCBjZWxscy4KCVRoaXMgbWFrZSBTdGFyQ3JhZnQgd29yayBhbG1vc3QgcGVyZmVjdGx5IChzb3VuZCBvdmVyZmxvd3Mgc3RpbGwKCWNhdXNlIHN0YXRpYykuCgpNb24gTWF5ICA0IDE1OjA0OjU3IDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZTogdGVybWluYXRlIHN0cmluZyBvbiAlMCwgdW5kbyBsaW5lZmVlZCBzdHJpcC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEFwciAzMCAxNjoyODoxMiAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUltcGxlbWVudGVkIEdldEV4aXRDb2RlUHJvY2Vzcy4gIFRoZSBjb2RlIGlzIGEgZGlyZWN0IHRyYW5zbGF0aW9uCglvZiBHZXRFeGl0Q29kZVRocmVhZC4KCk1vbiBBcHIgMjcgMjI6MjA6MjUgMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJVW5sb2FkIGR1bW15IG1vZHVsZSB3aGVuIFBFX0xvYWRMaWJyYXJ5RXgzMkEgZmFpbHMgd2l0aAoJUEVfTG9hZEltYWdlIChtYWtlcyBFbmNhcnRhIDk4IGluc3RhbGxlciBwcm9jZWVkKS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJTWFrZSBHZXREcml2ZVR5cGUxNiByZXR1cm4gRFJJVkVfUkVNT1ZBQkxFIGZvciBUWVBFX0NEUk9NLgoJTWFrZSBHZXRDdXJyZW50RGlyZWN0b3J5MzIgYmVoYXZlIGxpa2UgdGhlIGNvZGUgZG9lcyBhbmQgbm90CglsaWtlIHRoZSBoZWxwIGRlc2NyaWJlcy4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglSZXZva2UgcmVjZW50IGNoYW5nZSBpbiBQUk9GSUxFX0dldFNlY3Rpb24gYW5kIHRyeSBiZXR0ZXIgCgloYW5kbGluZyBvZiBzcGVjaWFsIGNhc2UuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFuZ2UgZGVmaW5pdGlvbiBvZiBBQ0NFTDMyLgoKCSogW21pc2MvY29tbWRsZy5jXQoJUmVwbGFjZSB0aGUgR2V0WFhYRmlsZW5hbWUzMiBtYWNyb3MgYnkgbm9ybWFsIGNvZGUuCglGaXggdHdvIHJlcG9ydGVkIGJ1Z3MgaW4gbXkgY2hhbmdlcyB0byBjb21tZGxnLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGQgYSBob29rIHRvIGNhdGNoIGJvZ3VzIFdNX1NJWkUgbWVzc2FnZXMgYnkgZW1pdHRpbmcgYSB3YXJuaW5nCglpbiB0aGUgYXBwcm9wcmlhdGUgY2FzZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJUmVqZWN0IHVucmVhc29uYmFibGUgbGFyZ2Ugc2l6ZSBhcmd1bWVudHMgaW4KCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAzMiBhbmQgYWRkIGFuIGZpeG1lIGZvciB0aGF0IHNpdHVhdGlvbi4KClN1biBBcHIgMjYgMTg6MzA6MDcgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaW5jbHVkZS9sZHQuaF0gW2RlYnVnZ2VyLyouY10gW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIElTX1NFTEVDVE9SX1NZU1RFTSBhbmQgSVNfU0VMRUNUT1JfMzJCSVQgbWFjcm9zLgoJTWFrZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24gc3VwcG9ydCBzeXN0ZW0gc2VsZWN0b3JzLgoKCSogW2xvYWRlci8qLmNdCglTdGFydGVkIG1vdmluZyBORSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGhlIG5ldyBsb2FkZXIvbmUKCWRpcmVjdG9yeS4KCgkqIFttZW1vcnkvZW52aXJvbi5jXQoJRW5mb3JjZSB0aGUgMTI3IGNoYXJzIGxpbWl0IG9ubHkgd2hlbiBjcmVhdGluZyB0aGUgZW52aXJvbm1lbnQgb2YKCWEgV2luMTYgcHJvY2Vzcy4KClN1biBBcHIgMjYgMTI6MjI6MjMgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgYW4gaW5jcmVkaWJsZSB0eXBvIGluIENvcHlGaWxlMzJBIHRoYXQgbWFkZSBpdCB1bnVzYWJsZQoJc2luY2UgYSByZXdyaXRlIGluIDk3MDExMiAoISEpLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRml4ZWQgR2V0VGVtcFBhdGgzMkEvVyB0byBpbmNsdWRlIHRyYWlsaW5nIGJhY2tzbGFzaC4KCgkqIFttaXNjL3Zlci5jXQoJTWFrZSBmaW5kX3BlX3Jlc291cmNlICJ3b3JrIiB3aXRoIGNvcnJ1cHQgZmlsZXMuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJQWx0ZXJlZCBXUFJJTlRGX1BhcnNlRm9ybWF0QS9XIHRvIHRyZWF0IGludmFsaWQgZm9ybWF0IGNoYXJzCglhcyBub3JtYWwgb3V0cHV0LCB0b28uCgoJKiBbbXNkb3MvZHBtaS5jXQoJSW1wbGVtZW50ZWQgIkFsbG9jYXRlL0ZyZWUgcmVhbCBtb2RlIGNhbGxiYWNrIiAoMHgwMzAzLzB4MDMwNCkuCglDcm9zcyB5b3VyIGZpbmdlcnMgaWYgeW91IG5lZWQgdG8gdXNlIGl0IDspIChjb21wbGV0ZWx5IHVudGVzdGVkKQoJSW1wbGVtZW50ZWQgIkNhbGwgcmVhbCBtb2RlIHByb2Mgd2l0aCBmYXIgcmV0dXJuIiAoMHgwMzAxLCB0ZXN0ZWQpLgoKCSogW21zZG9zL2ludDIxLmNdCglGaXhlZCBpb2N0bEdlbmVyaWNCbGtEZXZSZXEvMHg2MC4KCgkqIFtyZWxheTMyL2RwbGF5eC5zcGVjXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3JlbGF5MzIvTWFrZWZpbGUuaW5dCglBZGRlZCBidWlsdC1pbiBEUExBWVguRExMLiAKCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgR2V0V2luZG93V29yZCgpL0dXV19IV05EUEFSRU5UIHRvIHJldHVybiB0aGUgd2luZG93J3Mgb3duZXIKCWlmIGl0IGhhcyBubyBwYXJlbnQgKFNESykuCgpTYXQgQXByIDI1IDE1OjA5OjUzIDE5OTggIE0uVC5Gb3J0ZXNjdWUgIDxtYXJrQG10ZmhwYy5kZW1vbi5jby51az4KCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCUZpeGVkIGRpc2Fzc2VtYmxlIGJ1ZyBmb3Igbm8tZGlzcGxheSBvcHRpb24gYW5kICdsb2NrJywKCSdyZXBuZScgYW5kICdyZXBlJyBwcmVmaXhlcy4KCgkqIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCUFkZGVkIHRleHR1YWwgZmxhZyBkZXNjcmlwdGlvbiBvdXRwdXQgb24gJ2luZm8gcmVncycuCgpTYXQgQXByIDI1IDE0OjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbKi8qLmNdCglBZGRlZCBzdHVicyBhbmQvb3IgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IAoJTG9va3VwUHJpdmlsZWdlVmFsdWUsIE9wZW5TZXJ2aWNlLCBDb250cm9sU2VydmljZSwgUmVnR2V0S2V5U2VjdXJpdHksIAoJU3RhcnRTZXJ2aWNlLCBTZXRDb21wdXRlck5hbWUsIERlbGV0ZVNlcnZpY2UsIENsb3NlU2VydmljZUhhbmRsZSwgCglPcGVuUHJvY2Vzc1Rva2VuLCBPcGVuU0NNYW5hZ2VyLCBEZXJlZ2lzdGVyRXZlbnRTb3VyY2UsIAoJV2FpdEZvckRlYnVnRXZlbnQsIFdhaXRGb3JJbnB1dElkbGUsIFJlZ2lzdGVyRXZlbnRTb3VyY2UsCglTZXREZWJ1Z0Vycm9yTGV2ZWwsIFNldENvbnNvbGVDdXJzb3JQb3NpdGlvbiwgQ2hvb3NlUGl4ZWxGb3JtYXQsCglTZXRQaXhlbEZvcm1hdCwgR2V0UGl4ZWxGb3JtYXQsIERlc2NyaWJlUGl4ZWxGb3JtYXQsIFN3YXBCdWZmZXJzLAoJUG9seUJlemllciwgQWJvcnRQYXRoLCBEZXN0cm95QWNjZWxlcmF0b3JUYWJsZSwgSGVhcFdhbGssCglEZGVJbml0aWFsaXplLCBEZGVVbmluaXRpYWxpemUsIERkZUNvbm5lY3RMaXN0LCBEZGVEaXNjb25uZWN0TGlzdCwKCURkZUNyZWF0ZVN0cmluZ0hhbmRsZSwgRGRlUG9zdEFkdmlzZSwgRGRlR2V0RGF0YSwgRGRlTmFtZVNlcnZpY2UsCglEZGVHZXRMYXN0RXJyb3IsIFdOZXRHZXREaXJlY3RvcnlUeXBlLCBFbnVtUHJpbnRlcnMsIFJlZ0ZsdXNoS2V5LAoJUmVnR2V0S2V5U2VjdXJpdHksIERsbEdldENsYXNzT2JqZWN0LCBEbGxDYW5VbmxvYWROb3csIENyZWF0ZUJpdG1hcCwKCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAsIENyZWF0ZUJpdG1hcEluZGlyZWN0LCBHZXRCaXRtYXBCaXRzLAoJU2V0Qml0bWFwQml0cywgTG9hZEltYWdlLCBDb3B5SW1hZ2UsIExvYWRCaXRtYXAsIERyYXdJY29uLAoJQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAsIFNldERJQml0cywgR2V0Q2hhckFCQ1dpZHRocywgTG9hZFR5cGVMaWIsCglTZXRDb25zb2xlQ3RybEhhbmRsZXIsIENyZWF0ZUNvbnNvbGVTY3JlZW5CdWZmZXIsIFJlYWRDb25zb2xlSW5wdXQsCglHZXRDb25zb2xlQ3Vyc29ySW5mbywgU2V0Q29uc29sZUN1cnNvckluZm8sIFNldENvbnNvbGVXaW5kb3dJbmZvLAoJU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUsIFNldENvbnNvbGVTY3JlZW5CdWZmZXJTaXplLAoJRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIsIEZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlLAoJQ3JlYXRlTWFpbHNsb3QsIEdldE1haWxzbG90SW5mbywgR2V0Q29tcHJlc3NlZEZpbGVTaXplLAoJR2V0UHJvY2Vzc1dpbmRvd1N0YXRpb24sIEdldFRocmVhZERlc2t0b3AsIFNldERlYnVnRXJyb3JMZXZlbCwKCVdhaXRGb3JEZWJ1Z0V2ZW50LCBTZXRDb21wdXRlck5hbWUsIENyZWF0ZU1ESVdpbmRvdy4KClRodSBBcHIgMjMgMjM6NTQ6MDQgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXQoJSW1wbGVtZW50IENvcHlFbmhNZXRhRmlsZSwgR2V0L1NldEVuaE1ldGFGaWxlQml0cywgb3RoZXIgZml4ZXMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL21ldGFmaWxlLmNdIFtyZWxheTMyL2dkaTMyLnNwZWNdCgkzMi1iaXQgbWV0YWZpbGUgZml4ZXMsIGltcGxlbWVudCBFbnVtTWV0YUZpbGUzMiwgR2V0TWV0YUZpbGVCaXRzRXguCgoJKiBbb2JqZWN0cy9mb250LmNdIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10gW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdCglTb21lIHJvdGF0ZWQgdGV4dCBzdXBwb3J0IGZvciBYMTFSNiBkaXNwbGF5cy4KCgkqIFt3aW4zMi9uZXdmbnMuY10gW29sZS9vbGUybmxzLmNdCglNb3ZlZCBHZXROdW1iZXJGb3JtYXQzMkEuCgpXZWQgQXByIDIyIDE3OjM4OjIwIDE5OTggIERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KCgkqIFtvbGUvb2xlMm5scy5jXSBbbWlzYy9uZXR3b3JrLmNdCglDaGFuZ2VkIHNvbWUgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiB0byB0aGUgbmV3IHN0eWxlLgoKCSogW21pc2MvbmV0d29yay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIvdXNlci5zcGVjXQoJICBbcmVsYXkzMi9tcHIuc3BlY10gW21pc2MvbXByLmNdCglBZGRlZCBzdHVicyBmb3Igc29tZSBXaW4zMiBuZXR3b3JrIGZ1bmN0aW9uczsgIHJlbmFtZWQgc29tZSAKCTE2LWJpdCBvbmVzIHdpdGggMzItYml0IGNvdW50ZXJwYXJ0cywgIGFzIHdlbGwgYXMKCVdOZXRHZXREaXJlY3RvcnlUeXBlOyAgbW92ZWQgdGhlIHN0dWJzIGluIG1pc2MvbXByLmMgKHRocmVlIG9mCgl0aGVtISkgdG8gbWlzYy9uZXR3b3JrLmMuCgoJKiBbb2xlL2NvbXBvYmouY10gW29sZS9zdG9yYWdlLmNdIFtvbGUvb2xlMmRpc3AuY10gCgkgIFtvbGUvb2xlMm5scy5jXSBbb2xlL2ZvbGRlcnMuY10gW29sZS9tb25pa2VyLmNdIFtvbGUvb2xlMi5jXQoJICBbZ3JhcGhpY3MvZm9udGVuZ2luZS5jXSBbZ3JhcGhpY3MvZGRyYXcuY10gW2dyYXBoaWNzL2Vudi5jXQoJICBbZ3JhcGhpY3MvZHJpdmVyLmNdIFtncmFwaGljcy9lc2NhcGUuY10KCUNoYW5nZWQgZnByaW50ZidzIHRvIHByb3BlciBkZWJ1Zy1tYWNyb3MuCgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUFkZGVkIHNvbWUgZmxhZ3MgKGZvciBpbnRlcm5hbCB1c2UpLgoKCSogW29sZS9vbGUybmxzLmNdIAoJQWRkZWQgdGhlIFVuaWNvZGUgY29yZSBmdW5jdGlvbiwgYW5kIHdvcmtlZCBvdXQgYSB3YXkgdG8gaGlkZQoJdGhlIGNvbW1vbmFsaXR5IG9mIHRoZSBjb3JlLgoKCSogW3JlbGF5MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIHN1cHBvcnQgZm9yIEdldERhdGUvVGltZTMyQS9XLgoKV2VkIEFwciAyMiAwOToxNjowMyAxOTk4ICBHb3Jkb24gQ2hhZmZlZSAgPGNoYWZmZWVAY3MuYmVya2VsZXkuZWR1PgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIE11bHRpQnl0ZVRvV2lkZUNoYXIgdGhhdCB3YXMgaW50cm9kdWNlZCBpbgoJbGFzdCByZWxlYXNlLiAgTWFkZSBNdWx0aUJ5dGVUb1dpZGVDaGFyIG1vcmUgY29tcGF0aWJsZSB3aXRoIFdpbjMyLgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIGRyYXdpbmcgYXJjcy4KClR1ZSBBcHIgMjEgMTE6MjQ6NTggMTk5OCAgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIDxjc2FwdW50ekB0bWEtMS5sY3MubWl0LmVkdT4KCgkqICBbb2xlL29sZTJubHMuY10KCU1vdmUgc3R1ZmYgZnJvbSAweDQwOSBjYXNlIHRvIExhbmdfRW4uIAoKCSogIFtyZWxheTMyL3VzZXIzMi5zcGVjXSBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHN0dWJzIGZvciBHZXRXaW5kb3dSZ24zMiBhbmQgU2V0V2luZG93UmduMzIuIE1ha2VzIE9mZmljZQoJUGFwZXJjbGlwIGhhcHB5LgoKVHVlIEFwciAyMSAxMToxNjoxNiAxOTk4ICBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgPGNzYXB1bnR6QHRtYS0xLmxjcy5taXQuZWR1PgoKCSogIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUlmIGltYWdlIGlzIHJlbG9jYXRlZCwgVExTIGFkZHJlc3NlcyBuZWVkIHRvIGJlIGFkanVzdGVkLgoKCSogW2RlYnVnZ2VyLyouY10KCUdlbmVyYWxpemVkIHRlc3RzIGZvciAzMi1iaXQgc2VnbWVudHMuCgpUdWUgQXByIDIxIDAyOjA0OjU5IDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CgkKCSogW21pc2MvKi5jXSBbbWlzY2VtdS8qLmNdIFttc2Rvcy8qLmNdIFtpZjE2MzIvKi5jXSAKCSAgW2luY2x1ZGUvKi5oXSBbbG9hZGVyLyouY10gW21lbW9yeS8qLmNdIFttdWx0aW1lZGlhLyouY10gCgkgIFtvYmplY3RzLyouY10KCUFsbW9zdCBhbGwgZnByaW50ZiBzdGF0ZW1lbnRzIGNvbnZlcnRlZCB0byBhcHByb3ByaWF0ZSAKCWRlYnVnIG1lc3NhZ2VzLgoKCSogW1JFQURNRV0KCVVwZGF0ZWQgIkdFVFRJTkcgTU9SRSBJTkZPUk1BVElPTiIgc2VjdGlvbiB0byBpbmNsdWRlIFdpbmVIUS4KCgkqIFtkb2N1bWVudGF0aW9uL2RlYnVnZ2VyXQoJRml4ZWQgdHlwby4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KClN1biBBcHIgMTkgMTY6MzA6NTggMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAbXVkLmRlPgoKCSogW01ha2UucnVsZXMuaW5dCglBZGRlZCBsaW50IHRhcmdldCAodXNpbmcgbGNsaW50KS4KCgkqIFtyZWxheTMyL29sZWF1dDMyLnNwZWNdW3JlbGF5MzIvTWFrZWZpbGUuaW5dW29sZS90eXBlbGliLmNdCgkgIFtvbGUvb2xlMmRpc3AuY10KCUFkZGVkIG9sZWF1dDMyIHNwZWMsIGFkZGVkIHNvbWUgU3lzU3RyaW5nIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvc2lnbmFsLmNdCglBZGRlZCBwcmludGluZyBvZiBmYXVsdGFkZHJlc3MgaW4gTGludXggKHVzaW5nIENSMiBkZWJ1ZyByZWdpc3RlcikuCgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgPHN5cy90eXBlcy5oPiBmb3Igc3RhdGZzIGNoZWNrcy4KCgkqIFtsb2FkZXIvKi5jXVtkZWJ1Z2dlci9icmVhay5jXVtkZWJ1Z2dlci9oYXNoLmNdCglTdGFydGVkIHRvIHNwbGl0IHdpbjMyL3dpbjE2IG1vZHVsZSBoYW5kbGluZywgcHJlcGFyaW5nIHN1cHBvcnQKCWZvciBvdGhlciBiaW5hcnkgZm9ybWF0cyAobGlrZSBFTEYpLgoKU2F0IEFwciAxOCAxMDowNzo0MSAxOTk4ICBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeGVkIGEgYnVnIHRoYXQgbWFkZSBSZWdRdWVyeVZhbHVleHh4IHJldHVybmluZwoJaW5jb3JyZWN0IHJlZ2lzdHJ5IHZhbHVlcy4KCkZyaSBBcHIgMTcgMjI6NTk6MjIgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+CgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlMzIqOiByZW1vdmUgbGluZWZlZWQgd2hlbiBub2xpbmVmZWVkIHNldDsKCWNoZWNrIGZvciB0YXJnZXQgdW5kZXJmbG93LgoKRnJpIEFwciAxNyAwMDozODoxNCAxOTk4ICBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCgkqIFttaXNjL2NydGRsbC5jXQoJSW1wbGVtZW50IHhsYXRfZmlsZV9wdHIgZm9yIENSVCBzdGRpbi9zdGRvdXQvc3RkZXJyIGFkZHJlc3MKCXRyYW5zbGF0aW9uLgoKV2VkIEFwciAxNSAyMDo0Mzo1NiAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFkZGVkICdvZGFjdGlvbicgcGFyYW1ldGVyIHRvIE1FTlVfRHJhd01lbnVJdGVtKCkgYW5kIHJlZGlyZWN0ZWQKCVdNX0RSQVdJVEVNIG1lc3NhZ2VzIHRvIEdldFdpbmRvdyhod25kLEdXX09XTkVSKS4KClR1ZSBBcHIgMTQgMTY6MTc6NTUgMTk5OCAgQmVyZW5kIFJlaXRzbWEgPGJlcmVuZEB1bml0ZWQtaW5mby5jb20+CgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXQlbZ3JhcGhpY3MvcGFpbnRpbmcuY10gCgkgIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCSAgW2dyYXBoaWNzL3gxMWRydi9pbml0LmNdIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS94MTFkcnYuaF0KCSAgW3JlbGF5MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFBvbHlQb2x5bGluZSByb3V0aW5lLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQ2hhbmdlZCBXSU5QUk9DX0dldFByb2MoKSB0byByZXR1cm4gcHJvYyBpbnN0ZWFkIG9mICYoam1wIHByb2MpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByIDEyIDEyOjIyOjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2RyaXZlLmNdCglGaXhlZCAibm8gZnJlZSBzcGFjZSIgcHJvYmxlbSB3aXRoIHBhcnRpdGlvbiBzaXplcyBiZXR3ZWVuIDEgYW5kIDIgR0IKCShjbHVzdGVyX3NlY3RvcnMgbWF5IG5vdCBleGNlZWQgMHg0MCkuCgoJKiBbd2luZG93cy9tc2dib3guY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUltcGxlbWVudGVkIE1lc3NhZ2VCb3hJbmRpcmVjdDE2LCBjb3JyZWN0ZWQgTVNHQk9YUEFSQU1TMTYuCgoJKiBbbG9hZGVyL3Rhc2suY10KCURPUyBlbnZpcm9ubWVudCBzdHJpbmdzIG1heSBuZXZlciBleGNlZWQgMTI3IGNoYXJzCgktPiB0cnVuY2F0ZSBVbml4IGVudmlyb25tZW50IHN0cmluZ3MgaWYgbmVjZXNzYXJ5LgoKU3VuIEFwciAxMiAwMjo1MTo0NCAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgoKCSogW2ZpbGVzLyouY10KCUFsbCBmcHJpbnRmIHN0YXRlbWVudHMgd2VyZSBjb252ZXJ0ZWQgdG8gYXBwcm9wcmlhdGUgZGVidWcKCW1lc3NhZ2VzLgoKCSogW3Rvb2xzL2ZpbmRfZGVidWdfY2hhbm5lbHNdCglVcGRhdGVkIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCgpTYXQgQXByIDExIDE1OjI3OjIxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci90YXNrLmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJTW92ZWQgc29tZSBjb2RlIGFyb3VuZCB0byBwcmVwYXJlIHRoZSBncm91bmQgZm9yIENyZWF0ZVByb2Nlc3MoKS4KCgkqIFttZW1vcnkvZW52aXJvbi5jXSBbbG9hZGVyL3Rhc2suY10KCU1vdmVkIFdpbjMyIGVudmlyb25tZW50IHN0cmluZ3MgZnVuY3Rpb25zIHRvIGVudmlyb24uYy4KCVVuaWZpZWQgV2luMTYgYW5kIFdpbjMyIGVudmlyb25tZW50IG1hbmFnZW1lbnQuCgoJKiBbc2NoZWR1bGVyL2hhbmRsZS5jXSBbc2NoZWR1bGVyL2szMm9iai5jXSBbc2NoZWR1bGVyLyouY10KCUltcGxlbWVudGVkIGhhbmRsZSBpbmhlcml0YW5jZSBhbmQgRHVwbGljYXRlSGFuZGxlKCkuCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXQoJQ3JlYXRlIGEgMTYtYml0IHN0YWNrIGZvciBhbGwgdGhyZWFkcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgRElBTE9HRVggcmVzb3VyY2UgZm9ybWF0LgoKRnJpIEFwciAxMCAyMDoyMTo1MSAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BtdWQuZGU+CgoJKiBbY29uZmlndXJlLmluXVtpbmNsdWRlL2FjY29uZmlnLmhdWyovKl1bbXVsdGltZWRpYS8qXQoJQ2xlYW5lZCB1cCB0aGUgT1NTIGRldGVjdGlvbiBzdHVmZiwgYWRkZWQgc29tZSBtb3JlIGNoZWNrcyBmb3IKCWhlYWRlcmZpbGVzL2Z1bmN0aW9ucy4KCVJlbW92ZWQgYSBsb3Qgb2YgT1Mgc3BlY2lmaWMgI2lmZGVmcy4KCUxvdHMgb2YgZGVwZW5kZW5kIG11bHRpbWVkaWEgY2xlYW51cHMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglFbmhhbmNlZCBjb21tZW50LCBhZGRlZCBtaXNzaW5nIHJlZmVyZW5jZSBjb3VudCBpbmNyZWFzZS4KCgkqIFtvbGUvY29tcG9iai5jXQoJUmVwbGFjZWQgYnJva2VuIFN0cmluZ0Zyb21HVUlEMiBieSB3b3JraW5nIG9uZS4KCgkqIFttaXNjL3dpbnNvY2suY10KCVNPX0xJTkdFUiB1c2VzIHVuc2lnbmVkIDE2IGJpdCBpbiBXaW4xNiBhbmQgV2luMzIsIGJ1dCB1bnNpZ25lZAoJaW50ICgzMmJpdCkgZm9yIFVOSVguCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQWxsb3cgcmVhbGxvYyBmb3IgbG9ja2NvdW50IDEgdG9vLgoKRnJpIEFwciAxMCAxNToyNzozNCAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdCglIYW5kbGUgY29udHJvbCBjaGFyYWN0ZXJzIGluIHRyYWNlLiAgSWdub3JlIHRlcm1pbmF0aW5nIG5ld2xpbmUuCgoJKiBbbXVsdGltZWRpYS9pbml0LmNdCgkoTVVMVElNRURJQV9Jbml0KTogQ29ycmVjdCBhbGxvY2F0aW9ucy4KCgkqIFt0b29scy9leGFtaW5lLXJlbGF5XQogCVRpZHkgdXAuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQ2hhbmdlIGhpZ2hsaWdodCBjb2xvdXIgZnJvbSBsaWdodGJsdWUgdG8gbGlnaHRncmF5LiAgVGhpcwoJbG9va3MgY29ycmVjdCBmb3IgbWVudXMuCgpGcmkgQXByIDEwIDAxOjQ5OjU4IDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlLnJ1bGVzLmluXQoJQWRkIGNoZWNrIGZvciBjMm1hbiBiZWZvcmUgdXNpbmcgaXQuCgpGcmkgQXByIDEwIDAyOjU5OjIxIDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtERVZFTE9QRVJTLUhJTlRTXQoJU2ltcGxlIGRlc2NyaXB0aW9uIG9mIGFkZGluZyBBUEkgY2FsbHMuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXQgcmlkIG9mIFdpbmVsaWIxNiwgYXZvaWQgZGVjbGFyaW5nIHNvbWUgaWxsZWdhbCBmdW5jdGlvbnMgaW4KCVdpbmVsaWIsIGFkZCBwcm90b3R5cGVzIGZvciBzb21lIGVuaGFuY2VkIG1ldGFmaWxlIGZ1bmN0aW9ucywgZml4CglHZXRUZXh0RXh0ZW50UG9pbnQzMiBkZWNsYXJhdGlvbnMuCgoJKiBbcmVsYXkzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXQoJQ29zbWV0aWMgYW5kIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzLgoKCSogW2luY2x1ZGUvd2luY29uLmhdIFtwcm9ncmFtcy92aWV3LypdCglGaXhlcywgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG5hdGl2ZSBjb21waWxlcnMuCgpUaHUgQXByICA5IDE1OjQ4OjQ5IDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3dpbjMyL2tlcm5lbDMyLmNdCglJbXBsZW1lbnRlZCBGVF9UaHVuayAvIEZUX1Byb2xvZyAvIEZUX0V4aXQgLyBGVF9Qcm9sb2dQcmltZS4KCUZpeGVkIENvbW1vbjMyVGhrTFMgdGh1bmsgZnVuY3Rpb24uCgoJKiBbdG9vbHMvYnVpbGQuY10gW3JlbGF5MzIvcmVsYXkzODYuY10gW2lmMTYzMi9yZWxheS5jXQoJQ2hhbmdlZCByZWxheSBjb2RlIHRvIGFsbG93IHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBtb2RpZnkgc3RhY2sgbGF5b3V0LgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJSW1wbGVtZW50ZWQgQWxsb2NNYXBwZWRCdWZmZXIgLyBGcmVlTWFwcGVkQnVmZmVyLgoKCSogW3JlbGF5MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW3dpbjMyL29yZGluYWxzLmNdCglBZGRlZCBuYW1lcyBmb3IgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglCdWdmaXg6IExvYWRMaWJyYXJ5MTYgc2hvdWxkICpub3QqIHNpbGVudGx5IGxvYWQgMzItYml0IERMTC4KClRodSBBcHIgIDkgMDM6NTQ6NTggMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglGaXggYW4gZXJyb25lb3VzIHRlc3QgaW4gVHJhbnNsYXRlQWNjZWxlcmF0b3J7MTYsMzJ9IGZvciB0aGUgZW5kCglvZiB0aGUgYWNjZWxlcmF0b3IgdGFibGUuCgpUaHUgQXByICA4IDIwOjM2OjI4IDE5OTggIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4gCgoJKiBbbWlzYy9jcnRkbGwuY10KCUltcGxlbWVudCBnZXRlbnYuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglNYWtlIEdldFtTYXZlL09wZW5dRmlsZU5hbWUgd29yayBpbiBtb3N0IHNpdHVhdGlvbnMuCgoJKiBbbWlzYy9sc3RyLmNdCglVc2Ugd3ZzcHJpbnRmMzJBIGluc3RlYWQgb2YgdnNwcmludGYgaW4gRm9ybWF0TWVzc2FnZTMyWAoKCSogW21pc2MvdmVyc2lvbl0KCU1ha2UgTlQzLjUwIGEgcmVjb2duaXNlZCB2ZXJzaW9uCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCglDaGFuZ2UgdGhlIGFsZ29yaXRobWUgdG8gZHJhdyBhcmNzCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglSZXR1cm4gYW4gZW1wdHkgYnVmZmVyIGluIExvYWRTdHJpbmczMkEgaWYgbm8gcmVzb3VyY2UgZm91bmQuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglUcnkgaGFyZGVyIHRvIGdldCB0aGUgcmlnaHQgc2l6ZSBpbiBNdWx0aUJ5dGVUb1dpZGVDaGFyLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUNhbGwgV2luRXhlYzMyIGZvciBDcmVhdGVQcm9jZXNzMzJBLgoKCSogW3dpbmRvd3MvdXNlci5jXQoJSW5zdGFsbCBkZWZhdWx0IEludDAgSGFuZGxlciBpbiBJbml0QXBwKCkuCgpUaHUgQXByICA4IDE5OjI5OjQ4IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CgoJKiBbbWlzYy9pbWFnZWxpc3QuY10KCVByZWxpbWluYXJ5IGZpeCBmb3IgZHJhd2luZyBzZWxlY3RlZCBpbWFnZXMuCglWYXJpb3VzIGltcHJvdmVtZW50cy4KCgkqIFtjb250cm9scy9wcm9ncmVzcy5jXVtpbmNsdWRlL3Byb2dyZXNzLmNdW2luY2x1ZGUvY29tbWN0cmwuaF0KCUFkZGVkIHByb2dyZXNzIGJhciBtZXNzYWdlcyBhbmQgc3R5bGVzIGZvciBJRTQuMDEgKGRsbCB2ZXJzaW9uIDQuNzIpCgljb21wYXRpYmlsaXR5LgoJRml4ZWQgbGVkIHNpemUgcHJvYmxlbS4KCgkqIFtjb250cm9scy91cGRvd24uY11baW5jbHVkZS9jb21tY3RybC5oXQoJQWRkZWQgVURNX0dFVFJBTkdFMzIgYW5kIFVETV9TRVRSQU5HRTMyLgoKCSogW29iamVjdHMvb2VtYml0bWFwcy5jXVtpbmNsdWRlL3dpbmRvd3MuaF1baW5jbHVkZS9iaXRtYXBzLypdCglBZGRlZCBXaW45NSBpY29ucyBhbmQgZml4ZWQgV2luOTUgY3Vyc29yIGFuZCByZXN0b3JlIGJ1dHRvbiBidWcuCglOb3cgdGhleSBzaG91bGQgYmUgdmlzaWJsZS4gU29ycnkhISEKCgkqIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglBZGRlZCBtb3N0IG1pc3NpbmcgZnVuY3Rpb24gbmFtZXMuCgpUdWUgQXByICA2IDE4OjQ4OjM2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglHZXRPdXRsaW5lVGV4dE1ldHJpY3M6IHN0dWIKCgkqIFtvYmplY3RzL3RleHQuY10KCUdldFRleHRDaGFyc2V0IHNob3VsZCBqdXN0IGNhbGwgR2V0VGV4dENoYXJzZXRJbmZvLgoKCSogW21pc2MvbXByLmNdIFtyZWxheTMyL21wci5zcGVjXQoJV05ldENhY2hlUGFzc3dvcmQ6IHN0dWIKCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQoJQXR0YWNoVGhyZWFkSW5wdXQ6IHN0dWIKCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbi4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbi4KClR1ZSBNYXIgMzEgMTc6MDY6MzAgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoKCSogWyovKi5jXQoJRmluaXNoZWQgZml4aW5nIFVTRVIzMiBvcmRpbmFsIG51bWJlcnMgaW4gZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KCk1vbiBNYXIgMzAgMjA6Mjc6MzggMTk5OCAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFttaXNjL2RlYnVnc3RyLmNdIFtpbmNsdWRlL2RlYnVnc3RyLmhdCglNb3ZlZCBfZHVtcHN0ciBmcm9tIHJlbGF5MzIvcmVsYXkzODYuYy4gIEltcHJvdmVkIGNvbnRyb2wKCWNoYXJhY3RlciBoYW5kbGluZy4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJSW1wbGVtZW50IDIxNUUwMCAtLSBnZXQgbWFjaGluZSBuYW1lLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTZXRXaW5kb3dQb3MzMjogTWFrZSBhbiBleHRyYSBzeW5jIHdoZW4gbWFwcGluZyBtYW5hZ2VkCgl3aW5kb3dzLiAgVGhpcyBtYWtlcyBzdXJlIHRoZSByZWNvbmZpZ3VyZSBldmVudCBoYXMgYmVlbgoJaGFuZGxlZC4gIFNlZSBNc2hlYXJ0cycgd2hhdCdzLXlvdXItbmFtZSB3aW5kb3cuCgpNb24gTWFyIDMwIDAxOjEzOjUwIDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoKCSogW01ha2VmaWxlLmluXQoJSW5zdGFsbCBpbmNsdWRlcyBmcm9tIFRPUFNSQ0RJUi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAyOSAxNToxODo1NyAxOTk4ICBVd2UgQm9ubmVzIDxlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJTW9yZSB2ZXJib3NlIFRyYWNlIG1lc3NhZ2VzCgpTdW4gTWFyIDI5IDE1OjAzOjMwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJVGVybWluYXRlIHJlbG9jYXRpb24gY2hhaW5zIG9uIDAgb2Zmc2V0LgoKU3VuIE1hciAyOSAwMjozNTo0NSAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgoKCSogW3dpbmRvd3MvY2FyZXQuY10gW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvY2xpcGJvYXJkLmNdCglGaXhlZCBtb3JlIFVTRVIzMiBvcmRpbmFsIG51bWJlcnMgaW4gZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KClNhdCBNYXIgMjggMjI6NDA6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJUmV0dXJuIDEgZm9yIFdNX05DQ1JFQVRFIGluIERlc2t0b3BXbmRQcm9jLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGNyYXNoIHdoZW4gZGVzdHJveWluZyBhIHRvcCBwb3B1cCB3aW4gdGhhdCB3YXMgb25seSBjcmVhdGVkCglidXQgbm90IHNob3duLgoKCSogW29sZS90eXBlbGliLmNdIFtpZjE2MzIvdHlwZWxpYi5zcGVjXQoJSW1wbGVtZW50ZWQgT0FCdWlsZFZlcnNpb24uCgoJKiBbd2luZG93cy93aW4uY10KCUZpbmFsbHkgZml4ZWQgdWdseSBidWcgaW4gR2V0UGFyZW50MzIgdGhhdCBhZmZlY3RlZCB3aW5kb3cgcGxhY2VtZW50OgoJRGlkbid0IHJldHVybiAwIGZvciB3aW5kb3dzIHRoYXQgaGF2ZSBuZWl0aGVyIFdTX1BPUFVQIG5vcgoJV1NfQ0hJTEQgc2V0LiBOb3cgaXQgYWN0cyBleGFjdGx5IGxpa2UgV2luZG93cyAoYXQgbGVhc3QgSSBob3BlIHNvIDspCgpTYXQgTWFyIDI4IDAyOjI2OjQzIDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+CgoJKiBbREVWRUxPUEVSUy1ISU5UU10gW2RvY3VtZW50YXRpb24vZGVidWctbXNnc10KCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBvbiBkZWJ1ZyBtZXNzYWdlcwoKCSogW2luY2x1ZGUvYnV0dG9uLmhdIFtjb250cm9scy9idXR0b24uY10gW2luY2x1ZGUvd2luZG93cy5oXQoJW2luY2x1ZGUvY29tYm8uaF0gW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9jb21tY3RybC5jXQoJW2NvbnRyb2xzL2ljb250aXRsZS5jXSBbY29udHJvbHMvbGlzdGJveC5jXQlbY29udHJvbHMvbWVudS5jXQoJW2NvbnRyb2xzL3Njcm9sbC5jXSBbY29udHJvbHMvd2lkZ2V0cy5jXSAKCUNoYW5nZWQgc29tZSAxNi1iaXQgY29kZSB0byAzMi1iaXQgY29kZS4gSSBhbSBwb3NpdGl2ZSB0aGlzIHdpbGwKCW5vdCBicmVhayBhbnl0aGluZy4KCgkqIFtjb250cm9scy91aXRvb2xzLmNdIAoJUmVuYW1lZCB0aGUgcHJlZml4IG9mIHNvbWUgZnVuY3Rpb25zIGZyb20gVUlUT09MU18gdG8gVUlUT09MUzk1XwoJdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgaW1wbGVtZW50IFdpbjk1IGxvb2suIE1heWJlIHdlIHdpbGwKCWhhdmUgYSBVSVRPT0xTMzFfIGluIHRoZSBmdXR1cmUuIEFueWhvdywgdGhlIGNoYW5nZSBpcyBjb21wbGV0ZWx5CglpbnRlcm5hbCB0byB0aGlzIGZpbGUuCgoJKiBbKi8qLmNdCglDaGFuZ2VkIGEgbG90IG9mIFtmXXByaW50ZiBpbnRvIGFwcHJvcHJpYXRlIGRlYnVnIG1lc3NhZ2VzLgoKRnJpIE1hciAyNyAxOTo1NjoxMiAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW2RvY3VtZW50YXRpb24vc3RhdHVzL10KCUFkZGVkIGRpcmVjdGRyYXcgYW5kIGRpcmVjdHNvdW5kIHN0YXR1cy4KCgkqIFtpZjE2MzIvdGh1bmsuY11bb2xlLyouY11bd2luMzIva2VybmVsMzIuY10KCUFkZGVkIHNvbWUgZG9jdW1lbnRhdGlvbi4KCU1vdmVkIEZVTkMwMDQgdG8gdGh1bmsuYyBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIDE2LT4zMiB0aHVuawoJKGNhbGxpbmcgY29udmVudGlvbnMgYW5kIHRoZSBsaWtlIHN0aWxsIHVua25vd24pLgoKRnJpIE1hciAyNyAwOTo1OTozMiAxOTk4ICBNb3J0ZW4gRXJpa3NlbiAgPG1vcnRlbmVAcHZ2Lm9yZz4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY11bd2luZG93cy9rZXlib2FyZC5jXQoJSW1wbGVtZW50ZWQgQ29weUFjY2VsZXJhdG9yVGFibGUoKSBhbmQgQ3JlYXRlQWNjZWxlcmF0b3JUYWJsZSgpLgoJCgkqIFtpbmNsdWRlL2NvbXBvYmouaF1bb2xlL2NvbXBvYmouY11bcmVsYXkzMi9vbGUzMi5zcGVjXQoJQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgU3RyaW5nRnJvbUdVSUQyKCkuIAoKVHVlIE1hciAyNiAyMzoxMjowNSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW21pc2MvaW1hZ2VsaXN0LmNdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUltcGxlbWVudGVkIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlLgoJQWRkZWQgbWlzc2luZyBmdW5jdGlvbnMgKHNvbWUgYXJlIGVtcHR5IHN0dWJzKS4KCUNoYW5nZWQgb3JkaW5hbHMgaW4gY29tY3RsMzIuc3BlYyAobm93IGRsbCB2ZXJzaW9uIDQuNzIgY29tYXRpYmxlKS4KCgkqIFtvYmplY3RzL29lbWJpdG1hcHMuY11baW5jbHVkZS93aW5kb3dzLmhdCgkgIFtpbmNsdWRlL2JpdG1hcHMvKl0KCUFkZGVkIG1pc3NpbmcgcmVzdG9yZSBiaXRtYXBzIGZvciBXaW45NSBsb29rLgoJQWRkZWQgbWlzc2luZyBXaW45NSBjdXJzb3JzLgoKVGh1IE1hciAyNiAxMDoxODoyMCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbcHJvZ3JhbXMvdmlldy9NYWtlZmlsZS5pbl0gW3Byb2dyYW1zL3ZpZXcvdmlldy5jXQoJRml4IGNvbXBpbGF0aW9uLCBBbGR1cyBwbGFjZWFibGUgbWV0YWZpbGUgbG9hZGluZy4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtyZWxheTMyL2dkaTMyLnNwZWNdIAoJICBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW1wbGVtZW50ZWQgdmFyaW91cyAzMiBiaXQgdmVyc2lvbnMgb2YgcmVndWxhciBtZXRhZmlsZSBBUEkuCgoJKiBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXQoJSW1wbGVtZW50ZWQgcmVuZGVyaW5nIG9mIGEgY291cGxlIG9mIGRvemVuIHJlY29yZHMuCgpUdWUgTWFyIDI0IDIwOjA2OjM5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbbWVtb3J5LyouY10KCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgQVBJIG1hbnBhZ2VzLgoKTW9uIE1hciAyMyAwOTowOTowMCAxOTk4ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3dpbnNvY2suY10KCUZpeGVkIDMyLWJpdCBETlMgbG9va3VwLgoKTW9uIE1hciAyMyAyMzo1NDo0NyAxOTk4ICBMdWl6IE90YXZpbyBMLiBab3J6ZWxsYSAgPHpvcnplbGxhQG5yLmNvbmV4d2FyZS5jb20+CgoJKiBbbXVsdGltZWRpYS9pbml0LmNdCglOZXcgY29kZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBnYXRoZXJpbmcgb2YgaW5mb3JtYXRpb24gYWJvdXQKCXRoZSBNSURJIGRldmljZXMsIGZvciBmdXR1cmUgdXNlLgoKVGh1IE1hciAxOSAwMDo1OToyOSAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAbm9zcGFtLmJpcmNoLmVlLnZ0LmVkdT4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRWxpbWluYXRlZCBpbmFjY3VyYXRlIHNldHRpbmcgb2YgY3MtPmhNZW51IGluCglXSU5fQ3JlYXRlV2luZG93RXgsIGFsb25nIHdpdGggc3VwZXJmbHVvdXMgU2V0TWVudTMyIGNhbGwuCgpNb24gTWFyIDE2IDE3OjQwOjUzIDE5OTggIFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL01ha2VmaWxlLmluXSBbTWFrZWZpbGUuaW5dCglJbnN0YWxsIHdpbmUuc3ltIGluICQoZXhlY19wcmVmaXgpL2xpYiBhbmQgbWFrZSBzdXJlIHRoZSBkZWJ1Z2dlcgoJZmluZHMgaXQuCgpTdW4gTWFyIDE1IDIyOjM2OjM1IDE5OTggIE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdHgudGVjaG5pb24uYWMuaWw+CgoJKiBbZHVtbXkuY10gW2lmMTYzMi9nZGkuc3BlY10KCUZpeGVkIHN0dWIgZGVjbGFyYXRpb24gb2YgR0RJXzUzMiwgc28gSGVicmV3LVdvcmQyIGtpbmQgb2Ygd29ya3MuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMTUgMDM6NDY6NTAgMTk5OCAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAbWFpbC5jcy50b3JvbnRvLmVkdT4KCgkqIFsqLypdCglGaXhlZCBzb21lIGRwcmludGZfIHN1Y2ggdGhhdCB0aGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lCgluZXcgbGluZSBmb3IgZWFjaCBkcHJpbnRmIGFuZCB0aGF0IG5ldyBsaW5lIG9jY3VycyBhdCB0aGUgZW5kLgoJVHJhbnNmb3JtZWQgc29tZSBmcHJpbnRmcyBpbnRvIHByb3BlciBkZWJ1ZyBzdGF0ZW1lbnRzLgoJUmVtb3ZlZCBtdWNoIHJlZHVuZGFuY3kgZnJvbSBtb3N0IG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzLiBUaGUKCXJlZHVuZGFuY3kgYXBwZWFyZWQgYmVjYXVzZSBub3cgdGhlIGNvbXBvbmVudCBhbmQgZnVuY3Rpb24KCW5hbWUgaXMgb3V0cHV0IGF1dG9tYXRpY2FsbHkuIE1vc3QgZGVidWcgc3RhdGVtZW50cyBhbHNvIHVzZWQgdG8KCW91dHB1dCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uCglBbGwgdGhlc2UgY2hhbmdlcyBwcmVwYXJlZCB0aGUgc291cmNlIHRvIHN3aXRjaCBjb21wbGV0ZWx5IHRvCgl0aGUgbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UuCglGb3IgbW9yZSBpbmZvLCByZWZlciB0byAuL2RvY3VtZW50YXRpb24vZGVidWctbXNnCgpTYXQgTWFyIDE0IDE5OjQ1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW21pc2Mvc2hlbGwuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCUNoYW5nZWQgcGFyYW1ldGVycyBvZiBGVU5DMDA0KCkgdG8gZml4IGEgY3Jhc2guCglOb3Qgc3VyZSBpZiB0aGlzIGZpeCBpcyBjb3JyZWN0IChkb2Mgd2FudGVkKS4KCgkqIFt3aW5kb3dzL3VzZXIuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3VzZXIuaF0KCUltcGxlbWVudGVkIFVzZXJTZWVVc2VyRG8uCgoJKiBbbXNkb3MvaW50MjEuY10gW2luY2x1ZGUvbXNkb3MuaF0KCUFkZGVkICJHRVQgTElTVCBPRiBMSVNUUyIgKElOVCAyMS81MmgpLgoKU2F0IE1hciAxNCAxNTo0ODowMiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAZ21jbC5jb20+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdCglCZWdpbm5pbmdzIG9mIGVuaGFuY2VkIG1ldGFmaWxlIHN1cHBvcnQuCgpGcmkgTWFyIDEzIDIwOjUzOjA5IDE5OTggIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemtvLmRlYy5jb20+CgoJKiBbd2luMzIvY29uc29sZS5jXQoJUmVzdGFydCBpbnRlcnJ1cHRlZCBjb25zb2xlIHdyaXRlcy4KCkZyaSBNYXIgMTMgMTg6NTk6MjQgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFsqLyouY10KCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgQVBJIG1hbnBhZ2VzLgoKCSogW3dpbmRvd3MvZGNlLmNdCglSZWxlYXNlREMxNjogRml4ZWQgY2FzdC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21lbW9yeS92aXJ0dWFsLmNdCglWaXJ0dWFsUXVlcnl7RXh9IHNob3VsZCByZXR1cm4gRFdPUkQgaW5zdGVhZCBvZiBCT09MMzIuCgpGcmkgTWFyIDEzIDEzOjAzOjA2IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW1JFQURNRV1bZG9jdW1lbnRhdGlvbi9zdGF0dXMvXQoJUkVBRE1FIHVwZGF0ZWQsIGFkZGVkIGx6ZXhwYW5kLHZlcnNpb24gYW5kIG11bHRpbWVkaWEKCXN0YXR1cyBub3RlcyB0byBuZXcgZG9jdW1lbnRhdGlvbi9zdGF0dXMgZGlyZWN0b3J5LgoKCSogW29sZS8qLmNdW2lmMTYzMi90eXBlbGliLnNwZWNdCglBZGRlZCB0eXBlbGliIHN0dWJzLCBzZXZlcmFsIHNtYWxsIGFkZGl0aW9ucyBhbmQgZml4ZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBhIHNtYWxsIGJ1ZyAoZml4dXBfaW1wb3J0cyBnb3QgcGFzc2VkIHRoZSB3cm9uZyBoTW9kdWxlIGluIGEKCXJlbWFwY2FzZSkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXVtpZjE2MzIvc2lnbmFsLmNdW21pc2Mvd2luc29ja19kbnMuY10KCSAgW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIHNvbWUgcmVjdXJzaXZlIGRlYnVnZ2VyIGNyYXNoZXMgKGNhdXNlZCBieSBpbnZhbGlkIEZTKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglUd28gYnVncyBmaXhlZC4KCkZyaSBNYXIgMTMgMDQ6NTU6MDEgMTk5OCAgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgoKCSogW2luY2x1ZGUvd2lubnQuaF0gW2luY2x1ZGUvd2lubmxzLmhdCglNb3ZlZCBMQU5HX3h4eCBmbGFncyB0byB3aW5ubHMuaAoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglBZGRlZCBmbGFncyBmb3IgR2V0RGF0ZUZvcm1hdCgpOyBmaXhlZCB2YWxpZGl0eSBvZgoJTE9DQUxFX1NZU1RFTV9ERUZBVUxULgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSAKCUFkZGVkIEdldFRpbWVGb3JtYXQoKSBwcm90b3R5cGVzLgoKCSogW29sZS9vbGUybmxzLmNdCglJbXBsZW1lbnRlZCBBU0NJSSBkYXRlLSBhbmQgdGltZS1mdW5jdGlvbnMsICB1c2luZyBhbgoJb3B0aW1pemVkIGNvbW1vbiBjb3JlOyAgYWRkZWQgc3R1YnMgZm9yIFVuaWNvZGUgdmVyc2lvbnM7ICAKCXN0YXJ0ZWQgd29yayBvbiBhIFVuaWNvZGUgY29yZS4KCgkqIFtBVVRIT1JTXQoJQWRkZWQgbXkgbmFtZS4KCk1vbiBNYXIgIDkgMjA6MTA6MTUgMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdIFtpbmNsdWRlL2ltYWdlbGlzdC5oXQoJICBbaW5jbHVkZS9jb21tY3RybC5oXSBbbWlzYy9pbWFnZWxpc3QuY10gW21pc2MvTWFrZWZpbGUuaW5dCglGaXJzdCBhdHRlbXB0IGF0IGltcGxlbWVudGluZyBJbWFnZUxpc3RzLgoKU3VuIE1hciAgOCAyMDoxOTo0OSAxOTk4ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGVzL2Rvc19mcy5jXSBbY29uZmlndXJlLmluXQoJVHJ5IHRvIGdldCBGaWxlVGltZVRvTG9jYWxGaWxlVGltZSxGaWxlVGltZVRvU3lzdGVtVGltZSBhbmQKCVN5c3RlbVRpbWVUb0ZpbGVUaW1lIHJpZ2h0LgoJVXNlIHRpbWVnbSgpIHdoZXJlIGF2YWlsYWJsZS4KCgkqIFttaXNjL2xzdHIuY10KCUZpeCBhbiBvZmYgYnkgb25lIGVycm9yIGluIEZvcm1hdE1lc3NhZ2UgYW5kIGhhbmRsZSB0aGUgY2FzZSAKCXdoZW4gYXJncyA9IE5VTEwgKHVzZWQgYnkgcHJvZ3JhbXMgdG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIAoJc3RyaW5nKS4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglBY3R1YWwgZGlzcGxheSBhIHBlci1wcm9jZXNzIFRpdGxlIHN0cmluZywgYmV0dGVyIHdvcmtpbmcKCWF0dGVtcHQgZm9yIFdyaXRlQ29uc29sZTMyVyBhbmQgUmVhZENvbnNvbGUzMlcuCgpGcmkgTWFyICA2IDIwOjMzOjQ1IDE5OTggIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbaW5jbHVkZS9jb25maWcuaC5pbl1bY29uZmlndXJlLmluXVttdWx0aW1lZGlhL2F1ZGlvLmNdCgkgIFttdWx0aW1lZGlhL2Rzb3VuZC5jXQoJQWRkZWQgY2hlY2sgZm9yIEZyZWVCU0Qgc291bmQgc3lzdGVtLgoKU3VuIE1hciAgMSAxNzo0MDoxMCAxOTk4ICBKYXNvbiBTY2hvbmJlcmcgPHNjaG9uQG10aS5zZ2kuY29tPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2luY2x1ZGUvb2xlLmhdIFtpbmNsdWRlL3NobG9iai5oXQoJUmVtb3ZlZCBmaW5hbCBjb21tYXMgaW4gZW51bSB0eXBlcy4KCk1vbiBGZWIgMjMgMDc6NTI6MTggMTk5OCAgTHVpeiBPdGF2aW8gTC4gWm9yemVsbGEgIDx6b3J6ZWxsYUBuci5jb25leHdhcmUuY29tPgoKCSogW211bHRpbWVkaWEvdGltZS5jXQoJV29ya2Fyb3VuZCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW5zaWRlIHRpbWVHZXRUaW1lLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCVdPRE1fR0VUTlVNREVWUyBhbmQgV0lETV9HRVROVU1ERVZTIG9ubHkgcmV0dXJuIDEgbm93IGlmIHRoZQoJU09VTkRfREVWIGNhbiBiZSBvcGVuZWQsIG9yIGlmIGl0J3MgYnVzeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAgMSAxMDo0NToyMyAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUZpeGVkIHByb2JsZW0gd2l0aCB3ZWlyZCBETExzIChORV9GRkxBR1NfU0lOR0xFREFUQSAmJiBER1JPVVAgPSAwKS4KCgkqIFttc2Rvcy9kb3NtZW0uY10KCUV4cG9ydCBhZGRyZXNzIGZvciBfXzAwMDBILCB0b28uCgoJKiBbbXNkb3MvZHBtaS5jXQoJQ2hhbmdlZCBNZW1BbGxvYyBmdW5jdGlvbnMgdG8gcmV0dXJuIGxlc3MgZnJhZ21lbnRlZCBhZGRyZXNzZXMuCgpTYXQgRmViIDI4IDE4OjUwOjEyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvc3lzZGVwcy5jXQoJRG9uJ3QgdXNlICVmcyByZWdpc3RlciBiZWZvcmUgdGhyZWFkaW5nIGluaXRpYWxpemF0aW9uLgoKU2F0IEZlYiAyOCAxNDowNDo1NiAxOTk4ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdCglBdXRvY29uZiBtYWNybyB0byBjaGVjayBmb3Igbm9uLXJlZW50cmFudCBYIGxpYnJhcmllcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW4gU2V0V2luZG93UG9zMzIoKSwgZG8gbm90IGNhdXNlIFdNX1NJWkUgbWVzc2FnZXMgd2hlbiB0aGUKCVNXUF9OT1NJWkUgZmxhZyBpcyBzcGVjaWZpZWQuIFRoaXMgZml4ZXMgdGhlIGRpdmlzaW9uLWJ5LXplcm8gaW4KCUJvcmxhbmQgQysrIDQuMCAiT3BlbiBQcm9qZWN0IiBtZW51IGl0ZW0uCgpTYXQgRmViIDI4IDEzOjExOjI2IDE5OTggIEphbWVzIE1vb2R5ICA8MDEzMjYzbUBkcmFnb24uYWNhZGlhdS5jYT4KCgkqIFtvbGUvb2xlMm5scy5jXQoJQ2hhbmdlZCAiRW5nbGlzaCIgdmFsdWVzIGZyb20gR2VybWFuIHRvIEVuZ2xpc2guCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglGaXhlZCBvZmYtYnktb25lIG1vbnRoIGJ1Zy4KCkZyaSBGZWIgMjcgMjI6MTI6MDEgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXggd2luZWxpYiBjbGFzcyBtZW51IGxvYWRpbmcgYnVnLgoKCSogW2luY2x1ZGUvbW9kdWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdCglMb2FkTW9kdWxlMzIgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIENyZWF0ZVByb2Nlc3MuCgoJKiBbcHJvZ3JhbXMvdmlldy8qXQoJTWV0YWZpbGUgdmlld2VyIHNhbXBsZSBwcm9ncmFtLgoKCSogW2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvXSBbZG9jdW1lbnRhdGlvbi9NYWtlZmlsZS5pbl0KCUltcHJvdmVtZW50cyBhbmQgYWRkaXRpb25zLCBIVE1MIHRhcmdldC4KCkZyaSBGZWIgMjcgMDQ6Mjc6NDggMTk5OCAgRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCgkqIFsqLypdCglTd2l0Y2hlZCB0byB0aGUgbmV3IGRlYnVnIG1lc3NhZ2VzIGludGVyZmFjZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KCXBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3MuIEJlY2F1c2UgdGhlIG5ldyBzY2hlbWUKCWludHJvZHVjZXMgYSBuZXcgc2VtYW50aWMgbGV2ZWwsIEkgaGFkIHRvIG1hbnVhbGx5IGRvIHRocm91Z2gKCWFib3V0IDUzMCBkcHJpbnRmX3h4eCEgIFRoZSByZXN0IG9mIGFib3V0IDI0MDAgd2hlcmUgdHJhbnNmb3JtZWQKCXZpYSBhIHNjcmlwdC4gIEJlY2F1c2Ugb2YgdGhlIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIHRoYXQgSSBoYWQKCXRvIGRvLCBzb21lIG1heSBoYXZlIG5vdCBjb21lIG91dCBhcyBuaWNlbHkgYXMgSSB3YW50ZWQgdGhlbS4gIElmCgl0aGlzIGlzIHRoZSBjYXNlLCBwbGVhc2UgbGV0IG1lIGtub3cuIFRoZXJlIGlzIGEgbG90IG9mIHdvcmsgbGVmdAoJdG8gZG86IC0tIGEgZmV3IGh1bmRyZWQgcHJpbnRmJ3MgdG8gYmUgY29udmVydGVkIC0tIGFib3V0IDIzMDAKCWZwcmludGYncyB0byBiZSBjb252ZXJ0ZWQgLS0gYWJvdXQgNjAwIEZJWE1FJ3MgdG8gYmUgdHJhbnNmb3JtZWQKCVRoZSBwcm9ibGVtIGlzIHRoYXQgaW4gdGhlIGFib3ZlIG1lbnRpb25lZCBjYXNlcywgYSBsb3Qgb2YgbWFudWFsCglpbnRlcnZlbnRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSBhIGxvdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMKCW1pc3NpbmcuICBUaGVyZSBhcmUgYWxzbyBhIGxvdCBvZiBvdGhlciB0aGluZ3MgdG8gYmUgZG9uZSB0byB0aGUKCWludGVyZmFjZSBhbmQgc28gZm9ydGguIEkgaGF2ZSBub3cgaWRlYXMgZm9yIGEgYXQgbGVhc3QgYSBtb250aAoJd29ydGggb2YgZnVsbCB0aW1lIHdvcmsgOikgSSB3aWxsIHByb2NlZWQgd2l0aCBtYW55IGNoYW5nZXMgaW4gdGhlCgluZXh0IGZldyByZWxlYXNlcywgc28gcGxlYXNlIGRvIG5vdCBzdGFydCBtb2RpZmluZyB0aGluZ3MgYmVjYXVzZQoJdGhlcmUgd2lsbCBiZSBhIGhlbGwgb2YgYSBsb3Qgb2YgY29uZmxpY3RzLiBJZiB5b3UgaGF2ZSBpZGVhcyB0aGF0Cgl5b3Ugd2FudCB0byBpbnRlZ3JhdGUgb3IgeW91IHdhbnQgdG8gd29yayBvbiBkaWZmZXJlbnQgdGhpbmdzLAoJcGxlYXNlIGNvb3JkaW5hdGUgd2l0aCBtZS4KClRodSBGZWIgMjYgMTM6MDQ6MjkgMTk5OCAgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgoKCSogW29sZS9vbGUybmxzLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpcnN0IHRyeSBhdCBPTEUgZGF0ZS0gYW5kIHRpbWUtZm9ybWF0dGluZyBmdW5jdGlvbnMuCgpXZWQgRmViIDI1IDExOjIwOjM1IDE5OTggTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvKi5jXQoJQ2hhbmdlZCBkb3MgZGV2aWNlIGhhbmRsaW5nLCBhZGRlZCAnQ09OJyBkZXZpY2VoYW5kbGluZy4KCgkqIFtncmFwaGljcy9kZHJhdy5jXQoJQnVnIGZpeGVzLCBzb21lIGFkZGl0aW9ucy4KCgkqIFtpZjE2MzIvYnVpbHRpbi5jXVtsb2FkZXIvbW9kdWxlLmNdW2xpYnJhcnkvd2luZXN0dWIuY10KCVNtYWxsIGhhY2sgc28gd2UgZG9uJ3QgbmVlZCBhIGR1bW15IEJVSUxUSU5fTG9hZE1vZHVsZQoJaW4gd2luZXN0dWIuYy4KCgkqIFtvbGUvKl1bcmVsYXkzMi9vbGUzMi5zcGVjXVtpZjE2MzIvc3RvcmFnZS5zcGVjXQoJc3RvcmFnZS5kbGwgc3RhcnRlZC4gd2lud29yZCBsb2FkcyBkb2N1bWVudHMgKHNhdmluZwoJZG9lc24ndCB3b3JrIHlldCwgZHVubm8gd2h5KS4KCVNldmVyYWwgb2xlIGFkZGl0aW9ucywgc29tZSBjbGVhbnVwcyBhbmQgYnVnZml4ZXMuCglJTWFsbG9jMTYgaW1wbGVtZW50ZWQuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglBZGRlZCBzb21lIGNvbW1lbnRzLCBmaXhlZCBjaXJjdWxhciBkbGwgcmVmZXJlbmNlcywKCWZpeGVkIG1vZHJlZiBvcmRlcmluZywgZml4ZWQgdGxzIGFsbG9jYXRpb24uCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQWRkZWQgdmFsaWRpdHkgY2hlY2tzIGJlZm9yZSBldmVyeSBHRVRfQVJFTkFfUFRSLgoJKHNldmVyYWwgZnVuY3Rpb25zIHJlbHkgb24gR2xvYmFsKiByZXR1cm4gdmFsdWVzCgkgb24gaW52YWxpZCBoYW5kbGVzLCBsaWtlIElzVGFzaykuCglJbXBsZW1lbnRlZCBHbG9iYWxVbmxvY2tGcmVlMTYuCgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10KCVJlcGxhY2VkIGRwcmludGZfdmlydHVhbCBieSBmcHJpbnRmLCBzbyB3ZSBjYW4KCWRvICdpbmZvIG1hcCcgYWdhaW4gaW4gdGhlIGRlYnVnZ2VyLiBJbmNyZWFzZSByZWFkCglsaW5lc2l6ZSBmb3IgTGludXgyLjEgY2FzZXMuCgoJKiBbbWlzYy9jcHUuY11bbWlzYy9yZWdpc3RyeS5jXQoJTW92ZWQgY3B1IHJlZ2lzdHJ5IGluaXRpYWxpemF0aW9uIHRvIG1pc2MvY3B1LmMuCgoJKiBbbXVsdGltZWRpYS9kc291bmQuY10KCUVuaGFuY2VkLCByZXBsYWNlZCBHRVRPU1BBQ0UgYnVmZmVyaW5nY2hlY2sgYnkgU0VURlJBR01FTlQuCgoJKiBbcmVsYXkzMi9jcnRkbGwuc3BlY11bcmVsYXkzMi9udGRsbC5zcGVjXQoJUmVwbGFjZWQgc29tZSBwdHIgYnkgcmVzcGVjdGl2ZSAnc3RyJyBhbmQgJ3dzdHInIGFyZ3VtZW50cwoJZm9yIGxpYmMgZnVuY3Rpb25zLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCUFkZGVkIHNvbWUgc2FuaXR5IGNoZWNrcyB0byBzdGFja2FsbG9jYXRpb24sIHRsc2hhbmRsaW5nIGZpeGVkLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBjZGVjbCBhcmd1bWVudHR5cGUgb3JkZXIgKHdhcyByZXZlcnNlZCkuCgoJKiBbd2luMzIvb3JkaW5hbHMuY10KCUltcGxlbWVudGVkIEtFUk5FTF80NDkuCgoJKiBbd2luZG93cy9kaW5wdXQuY10KCVNvbWUgZml4ZXMsIG5lZWRzIG11Y2ggbW9yZSB3b3JrLiBUb21iIFJhaWRlcjIgd29ya3Mgd2l0aCBrZXlib2FyZCA7KQoKVHVlIEZlYiAyNCAyMDo0NjozNyAxOTk4ICBKYW1lcyBKdXJhbiAgIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgVVNFUjMyIG9yZGluYWwgbnVtYmVycyBpbiBkb2N1bWVudGF0aW9uLgoKU2F0IEZlYiAyMSAxMjozMDozOCAxOTk4ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHprby5kZWMuY29tPgoKCSogW2ZpbGVzL2ZpbGUuY10gW2luY2x1ZGUvazMyb2JqLmhdIFttZW1vcnkvdmlydHVhbC5jXQoJW3NjaGVkdWxlci9jcml0c2VjdGlvbi5jXSBbc2NoZWR1bGVyL2V2ZW50LmNdIFtzY2hlZHVsZXIvaGFuZGxlLmNdCglbc2NoZWR1bGVyL2szMm9iai5jXSBbc2NoZWR1bGVyL211dGV4LmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJW3NjaGVkdWxlci9zZW1hcGhvcmUuY10gW3NjaGVkdWxlci90aHJlYWQuY10KCUFkZGVkIGdlbmVyaWMgazMyb2JqIHJlYWQgYW5kIHdyaXRlIHJvdXRpbmVzIGZvciBrMzJvYmpzIHRoYXQKCXN1cHBvcnQgSS9PLgoKCSogW2RvY3VtZW50YXRpb24vY29uc29sZV0KCVVwZGF0ZWQgY29uc29sZSBkb2NzLgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCU1ha2UgY29uc29sZSB3b3JrIGxpa2UgYSBrMzJvYmogdGhhdCBzdXBwb3J0cyBJL08uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglNYWtlIFdyaXRlRmlsZSBhbmQgUmVhZEZpbGUgdGFrZSBIQU5ETEUzMiBmb3IgaGFuZGxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViIDE1IDE0OjA3OjA3IDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbbWlzYy92ZXIuY10gW211bHRpbWVkaWEvZHNvdW5kLmNdCgkgIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgc29tZSBkcHJpbnRmX3h4eCdzIHRvIHByZXBhcmUgdGhlbSBmb3IgYSBuZXcKCWRwcmludGZfIHNjaGVtZS4gQmFzaWNhbGx5LCBJIGNoYW5nZWQgdGhlIGRwcmludGYncyB0aGF0CglvdXRwdXRlZCBhIGxpbmUgd2l0aCBtYW55IGRwcmludGYgY2FsbHMgdG8gZG8ganVzdCBvbmUKCWRwcmludGYgY2FsbC4KClN1biBGZWIgMTUgMTI6MDI6NTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZ3JhcGhpY3MveDExZHJ2LyouY10gW29iamVjdHMvKi5jXQoJQSBmZXcgWDExIGNyaXRpY2FsIHNlY3Rpb24gb3B0aW1pemF0aW9ucywgbW9zdGx5IHdpdGggWEdldC9QdXRQaXhlbC4KCgkqIFtzY2hlZHVsZXIvc3lzZGVwcy5jXSBbbWlzYy9tYWluLmNdCglNYWtlIHN1cmUgWDExIGNyaXRpY2FsIHNlY3Rpb24gaXMgYXZhaWxhYmxlIGJlZm9yZSBhbnkgWGxpYiBjYWxsLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbdG9vbHMvYnVpbGQuY10KCVlldCBhbm90aGVyIGF0dGVtcHQgYXQgZml4aW5nIENhdGNoL1Rocm93LgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgYnJva2VuIFBFIERMTCBsb2FkaW5nLgoKCSogW2luY2x1ZGUvd2lubnQuaF0gW3NjaGVkdWxlci9oYW5kbGUuY10gW3NjaGVkdWxlci8qLmNdCglJbXBsZW1lbnRlZCBoYW5kbGUgYWNjZXNzIHJpZ2h0cy4KCUFkZGVkIEdldC9TZXRIYW5kbGVJbmZvcm1hdGlvbi4KClN1biBGZWIgMTUgMDk6NDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbWlzYy93aW5zb2NrLmNdCglGaXhlZCBidWcgaW4gV1NBQ2xlYW51cCB3aGljaCBsZWFkIHRvIGNyYXNoZXMgaW4gV0lOU09DS19IYW5kbGVJTy4KCgkqIFtncmFwaGljcy9mb250ZW5naW5lLmNdIFtpbmNsdWRlL2ZvbnQuaF0KCU1pbm9yIGltcHJvdmVtZW50cy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBHbG9iYWxFbnRyeUhhbmRsZS4KCgkqIFttaXNjL3Rvb2xoZWxwLmNdCglGaXhlZCBhIG1lbW9yeSBidWcgaW4gTm90aWZ5KnJlZ2lzdGVyLgoKCSogW21pc2MvdzMyc2NvbWIuY10KCUltcHJvdmVkIEdldDE2RExMQWRkcmVzcy4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJSW1wbGVtZW50ZWQgR2RpU2VlR2RpRG8uCgoKU2F0IEZlYiAxNCAxNDo1NzozOSAxOTk4ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHprby5kZWMuY29tPgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIHRoZSBjb25zb2xlIGltcGxlbWVudGF0aW9uLCBBbGxvY0NvbnNvbGUsIEZyZWVDb25zb2xlLAoJQ09OU09MRV9Jbmhlcml0Q29uc29sZS4KCgkqIFtkb2N1bWVudGF0aW9uL2NvbnNvbGVdCglTb21lIGRvY3VtZW50YXRpb24gb24gdGhlIGNvbnNvbGUuCgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJQWRkZWQgc29tZSBlcnJvciBkZWZpbmVzLgoKCSogW3NjaGVkdWxlci9rMzJvYmouY10KCVJlZ2lzdGVyZWQgdGhlIHNjaGVkdWxlciBvcHMuCgpGcmkgRmViIDEzIDE5OjM1OjM1IDE5OTggIEphbWVzIE1vb2R5ICA8MDEzMjYzbUBkcmFnb24uYWNhZGlhdS5jYT4KCgkqIFtvbGUvb2xlMm5scy5jXQoJU29tZSBFbmdsaXNoIGxhbmd1YWdlIGZpeGVzIGZvciBtaXNzaW5nIHZhbHVlcy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggdG8gYWxsb3cgYW4gZW1wdHkgbGlzdGJveCB0byBkZXNlbGVjdCBhbGwgaXRlbXMuCgoJKiBbcmVsYXkzMi91c2VyMzIuc3BlY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNyZWF0ZUFjY2VsZXJhdG9yVGFibGVBIHN0dWIgbWV0aG9kLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQoJQWRkZWQgbWlzc2luZyBTTV9DWENVUlNPUiAmIFNNX0NZQ1VSU09SIGluaXRpYWxpemVycy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVBvc3RUaHJlYWRNZXNzYWdlMzJBIHN0dWIgbWV0aG9kLgoKRnJpIEZlYiAxMyAxNzoxMjoyNCAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAcm9hbm9rZS5pbmZpLm5ldD4KCgkqIFtsaWJ0ZXN0L2hlbGxvM3Jlcy5yY10gW2xpYnRlc3QvaGVsbG8zLmNdIFtsaWJ0ZXN0L01ha2VmaWxlLmluXQoJVXBkYXRlZCB0aGUgJ2hlbGxvMycgdGVzdCBzbyB0aGF0IGl0IGZ1bmN0aW9ucyBwcm9wZXJseSBhZ2Fpbi4KCkZyaSBGZWIgMTMgMTQ6MDg6MDcgMTk5OCAgTWFydGluIEJvZWhtZSAgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgkKCSogW2dyYXBoaWNzL21hcHBpbmcuY10KCUZpeGVkIHRoZSBlbWJhcnJhc3NpbmcgYnVncyBJIGludHJvZHVjZWQgaW50byBEUHRvTFAgYW5kCglMUHRvRFAuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCVByZXZlbnQgU2Nyb2xsV2luZG93MzIgZnJvbSBzZW5kaW5nIFdNX0VSQVNFQktHTkQuCgpUaHUgRmViIDEyIDIyOjQ2OjUzIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZV0gW2luY2x1ZGUvbGR0LmhdCglGaXggdG8gY29wZSB3aXRoIHJlY29yZHMgbG9uZ2VyIHRoYW4gNjRLLgoKCSogW3dpbmRvd3MvY2xpcGJvYXJkLmNdCglDbGVhbiB1cCBiaXRtYXBzIGFuZCBtZXRhcGljdHMgcHJvcGVybHkuCgpNb24gRmViICAzIDIxOjUyOjE4IDE5OTggIEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4KCgkqIFtwcm9ncmFtcy93aW5oZWxwL1N3LnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19Tdy5yY10KCU1pbm9yIHVwZGF0ZSBvZiBTd2VkaXNoIGxhbmd1YWdlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgIDEgMTM6MjQ6NTQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkIERldmljZT0gcGFyYW1ldGVyIHRvIGRyaXZlIGNvbmZpZ3VyYXRpb24uCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglUaHJvdygpIGFuZCBDYXRjaCgpIG5vdyB1c2UgdGhlIGNvcnJlY3QgQ0FUQ0hCVUYgbGF5b3V0ICh1bnRlc3RlZCkuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbbG9hZGVyL3Rhc2suY10KCU1vdmVkIDE2LWJpdCBzdGFjayBwb2ludGVyIGludG8gdGhyZWFkIGRhdGFiYXNlLgoJU2F2ZSBjdXJyZW50ICVmcyB3aGlsZSBydW5uaW5nIDE2LWJpdCBjb2RlLgoKRnJpIEphbiAzMCAwOToyNTo0OSAxOTk4ICBNYXJ0aW4gQm9laG1lICA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCgkqIFtncmFwaGljcy9tYXBwaW5nLmNdCglNYWRlIERQdG9MUDMyIGFuZCBMUHRvRFAzMiByZXNwZWN0IHdvcmxkIHRyYW5zZm9ybXMuCgoJKiBbZ3JhcGhpY3MvcGF0aC5jXSBbZ3JhcGhpY3MvcGFpbnRpbmcuY10gW2lmMTYzMi9nZGkuc3BlY10KCSAgW2luY2x1ZGUvcGF0aC5oXQoJTW9yZSBwYXRoIHN1cHBvcnQuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9kYy5jXQoJICBbcmVsYXkvZ2RpMzIuc3BlY10KCVN1cHBvcnQgZm9yIEdldC9TZXRBcmNEaXJlY3Rpb24gYW5kIEdldC9TZXRXb3JsZFRyYW5zZm9ybQoKCSogW3dpbmRvd3MvaG9vay5jXQoJRml4ZWQgYSBidWcgaW4gSE9PS19NYXAxNlRvMzJDb21tb24uCgpUaHUgSmFuIDI5IDIzOjQzOjE4IDE5OTggIERvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB0YWlnYS5nbWNsLmNvbT4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtvYmplY3RzL21ldGFmaWxlLmNdCglEb2N1bWVudGF0aW9uIGZvciBtZXRhZmlsZSByZWxhdGVkIEFQSSBjYWxscy4gRml4ZWQgYSBidWcgdG8gYXZvaWQKCWRvY3VtZW50aW5nIGl0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRGVjbGFyYXRpb24gZm9yIExvYWRJbWFnZS4KClRodSBKYW4gMjkgMjE6NDQ6NDUgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi8qXQoJQ2hhbmdlcyB0byBwcmludGluZyBjb2RlIHRvIGVuYWJsZSB1c2Ugb2YgcHJpbnRlciBmb250cyB3aXRoIHRoZQoJd2luMy4xIHBvc3RzY3JpcHQgZHJpdmVyLiBSZW1lbWJlciB0byBhZGQgcHJpbnRlcj1vbiB0byBbd2luZV0KCXNlY3Rpb24gb2Ygd2luZS5jb25mIC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRpc2FibGUgdHJ1ZXR5cGUKCWZvbnRzIGZyb20gY29udHJvbCBwYW5lbC4gV2lud29yZCA2LjAgYW5kIFdyaXRlIHNlZW0gdG8gYmUgaGFwcHkKCXdpdGggdGhpcy4uLgoKCSogW2luY2x1ZGUvYml0bWFwLmhdCglGaXggV2lkdGhieXRlcyBmb3IgMTVicHAgZGlzcGxheXMuCgpUdWUgSmFuIDI3IDIwOjU0OjA4IDE5OTggIEtyaXN0aWFuIE5pZWxzZW4gPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbdHN4MTEvKl0gW2luY2x1ZGUvdHMqXSBbdG9vbHMvbWFrZV9YMTF3cmFwcGVyc10KCUltcGxlbWVudGVkIHRocmVhZC1zYWZlIFgxMSB3cmFwcGVycy4KClR1ZSBKYW4gMjcgMTM6NTQ6MDkgMTk5OCAgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIDxjc2FwdW50ekB0bWEtMS5sY3MubWl0LmVkdT4KCgkqIFt3aW5kb3dzL3F1ZXVlLmNdCglGb3Jnb3QgdG8gY29udmVydCB0aGRiIHRvIHRocmVhZF9pZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTcGVkIHVwIFdpbmRvd3MgOTUgcmVnaXN0cnkgcmVhZGluZy4gQ2hhbmdlZCBjb2RlIHRvIHRyYXZlcnNlCglyZWdpc3RyeSBhcyBhIHRyZWUgcmF0aGVyIHRoYW4gcmVhZCBpbiBhbGwgcG9zc2libGUga2V5cwoJKGluY2x1ZGluZyBkZWFkIG9uZXMpLiAKClR1ZSBKYW4gMjcgMTI6NDY6MDkgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdW01ha2VmaWxlLmluXVtzY2hlZHVsZXIvdGhyZWFkLmNdCgkgIFtsaWJ0ZXN0L2hlbGxvNS5jXQoJRG9uJ3QgZXhpdCgpIG9uIGZhaWxlZCB0byBsb2FkIHJlZmVyZW5jZWQgZGxscy4KCUZpeGVkIHN0YXRpYyB0bHMgYWxsb2NhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcy4KCVdJTkVMSUIgc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGxvYWQgUEUgZGxscy4gQSBzYW1wbGUKCXdpbmVsaWIgcHJvZ3JhbSwgdGhhdCBkeW5hbWljYWxseSBsb2FkcyBhIGludGVybmFsIGRsbAoJaXMgaW5jbHVkZWQuCgoJKiBbZ3JhcGhpY3MvZGRyYXcuY11baW5jbHVkZS9kZHJhdy5oXVtpbmNsdWRlL2QzZC5oXQoJQ2xlYW5lZCB1cCBhbmQgZW5oYW5jZWQgZnVydGhlci4gQWRkZWQgc2V2ZXJhbCBEaXJlY3RYNQoJaW50ZXJmYWNlIGRlZmluaXRpb25zIGFuZCBEaXJlY3RTdXJmYWNlMyBpbXBsZW1lbnRhdGlvbi4KCVN0dWJzIGZvciBEM0QgKE5PVCBjb21pbmcgc29vbiwganVzdCB0aGVyZSBzbyBpdCBmYWlscyBzYWZlbHkpLgoKCSogW211bHRpbWVkaWEvZHNvdW5kLmNdW2luY2x1ZGUvZHNvdW5kLmhdCglBY3R1YWxseSB3b3JrcyBub3cgZm9yIGEgbG90IG9mIGNhc2VzLiBTb21lIERpcmVjdFg1IHN0dWZmCglhZGRlZC4gU3RpbGwgbGFja2luZyBzZXZlcmFsIGZlYXR1cmVzLgoKCSogW3dpbmRvd3MvZGlucHV0LmNdW2luY2x1ZGUvZGlucHV0LmhdCglTdGFydGVkIGltcGxlbWVudGluZyBEaXJlY3RJbnB1dC4gRG9lc24ndCB3b3JrIHlldCwgZG9uJ3QgCglrbm93IHdoeS4KCgkqIFtpZjE2MzIvdGh1bmsuY11bbWlzYy9jYWxsYmFja3MuY10KCSAgW3dpbjMyL2tlcm5lbC5jXVtpbmNsdWRlL2NhbGxiYWNrcy5oXQoJQWRkZWQgV09XQ2FsbGJhY2sxNkV4LCBXT1dIYW5kbGUzMi4KCgkqIFttaXNjL2NwdS5jXQoJRml4ZWQgR2V0U3lzdGVtSW5mbywgSXNQcm9jZXNzb3JGZWF0dXJlUHJlc2VudC4KCgkqIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdW211bHRpbWVkaWEvdGltZS5jXQoJU2V2ZXJhbCBmaXhlcy4gU21hbGwgaGFjayB0byBnZXQgdGltZXJldmVudHMgaW4gdGltZUdldFRpbWUoKSBsb29wcy4KClR1ZSBKYW4gMjAgMTE6MjY6MjcgMTk5OCAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFtjb25maWd1cmUuaW5dCglGaXhlZCBjaGVjayBmb3IgdW5pb24gc2VtdW4gb24gRnJlZUJTRCBzeXN0ZW1zLgoKU3VuIEphbiAxOCAyMzowNTowNCAxOTk4ICBLYXJsIEJhY2tzdHL2bSA8a2FybF9iQGdlb2NpdGllcy5jb20+CgoJKiBbbWlzYy9vbGUybmxzLmNdIFtwcm9ncmFtcy9wcm9nbWFuL1N3LnJjXSBbcHJvZ3JhbXMvd2luaGVscC9Tdy5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfU3cucmNdCglBZGRlZC91cGRhdGVkIFN3ZWRpc2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KClN1biBKYW4gMTggMTg6NDk6MDEgMTk5OCAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19kbnMuY10gW3dpbmRvd3MvZXZlbnQuY10KCSAgW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXhlcy4KClN1biBKYW4gMTggMTI6NDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbXNkb3MvaW50MjUuY10gW21zZG9zL2ludDI2LmNdCiAgICAgICAgSW1wbGVtZW50ZWQgIm5hdGl2ZSIgYWJzb2x1dGUgZGlzayByZWFkL3dyaXRlIGFjY2Vzcy4KCgkqIFttc2Rvcy9pbnQxMy5jXSBbbXNkb3MvaW9wb3J0cy5jXQoJRW5oYW5jZWQgR0VUIERSSVZFIFBBUkFNRVRFUlMgKGludDEzIEFIPTA4KS4KCgkqIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10gW2lmMTYzMi9nZGkuc3BlY10KCUZpeGVkIHR5cG9zLCBpbXBsZW1lbnRlZCBkbUVudW1ERm9udHMsCglTdGFydGVkIGltcGxlbWVudGF0aW9uIG9mIGRtUmVhbGl6ZU9iamVjdC4KCgkqIFtpZjE2MzIvY29tcG9iai5zcGVjXSBbb2xlL2NvbXBvYmouY10gW3JlbGF5MzIvb2xlMzIuc3BlY10KCVN0dWJzIENvQ3JlYXRlSW5zdGFuY2UsIENvRnJlZVVudXNlZExpYnJhcmllcywgaW1wbGVtZW50ZWQKCUNvRmlsZVRpbWVOb3cuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFttZW1vcnkvZ2xvYmFsLmNdCgkgIFttZW1vcnkvc3RyaW5nLmNdIFttaXNjL2tlcm5lbC5jXSBbbWlzYy9NYWtlZmlsZS5pbl0KCSAgW21pc2MvdG9vbGhlbHAuY10gW21zZG9zL2ludDIxLmNdCglJbXBsZW1lbnRlZCBHbG9iYWxIYW5kbGVOb1JJUCwgR2V0RnJlZU1lbUluZm8sIERlYnVnRmlsbEJ1ZmZlciwgCglzdHVicyBHZXRTZXRLZXJuZWxET1NQcm9jLCBEaWFnUXVlcnksIERpYWdPdXRwdXQsIFRvb2xIZWxwSG9vawoJKFVuZG9jdW1lbnRlZCBXaW5kb3dzKS4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL3dpbjMyczE2LnNwZWNdIFttaXNjL3dpbjMyczE2LmNdCglNaXNjIHN0dWJzLgoKCSogW2lmMTYzMi93aW5hc3BpLnNwZWNdIFttaXNjL2FzcGkuY10KCUltcGxlbWVudGVkIEdldEFTUElETExWZXJzaW9uLgoKCSogW2lmMTYzMi93cHJvY3Muc3BlY10gW21zZG9zL2ludDIwLmNdIFttc2Rvcy9NYWtlZmlsZS5pbl0KCUFkZGVkIGhhbmRsZXIgZm9yIEludCAweDIwICh0ZXJtaW5hdGUgcHJvZ3JhbSwgX3ZlcnlfIG9sZC1mYXNoaW9uZWQpLgoKCSogW21pc2MvdzMyc2NvbWIuY10KCUltcGxlbWVudGVkIEdldDE2RExMQWRkcmVzcygpIHBhcnRpYWxseQoJKGJpZyB0aGFua3MgdG8gTWFyY3VzIGFuZCBBbGV4YW5kcmUpLgoKCSogW3JlbGF5MzIvTWFrZWZpbGUuaW5dIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9kcGxheS5zcGVjXQoJQWRkZWQgYnVpbHQtaW4gRFBMQVkuRExMLgoKCSogW3JlbGF5MzIvd2lubW0uc3BlY10gW211bHRpbWVkaWEvam95c3RpY2suY10KCUFkZGVkIGpveVNldFRocmVzaG9sZC4KCgkqIFttaXNjL3dpbmRlYnVnLmNdCglBZGRlZCBXaW5Ob3RpZnkuCgoJKiBbd2luMzIvY29uc29sZS5jXQoJU3R1YnMgQ3JlYXRlQ29uc29sZVNjcmVlbkJ1ZmZlciwgU2V0Q29uc29sZUFjdGl2ZVNjcmVlbkJ1ZmZlciwKCVdyaXRlQ29uc29sZU91dHB1dDMyQS4KCgkqIFt3aW5kb3dzL3VzZXIuY10KCVN0dWIgU2V0RXZlbnRIb29rLgoKU2F0IEphbiAxNyAxOTozMDozNSAxOTk4ICBNYXR0aGV3IFRvc2VsYW5kICA8UGF1bC5Ub3NlbGFuZEBidGludGVybmV0LmNvbT4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlZCBicm9rZW4gcmVzdG9yZS10by1tYXhpbWl6ZWQuCgpNb24gSmFuIDEyIDIxOjI1OjMyIDE5OTggIFBlcmNldmFsIC0gTWFyYyBIdWd1ZXQgUHVpZyA8bWhwQHRpbmV0LmZ1dC5lcz4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUubWFuXSBbaW5jbHVkZS9vcHRpb25zLmhdCgkgIFttaXNjL21haW4uY10gW29sZS9vbGUybmxzLmNdIFtyZXNvdXJjZXMvc3lzcmVzLmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0NhLnJjXSBbcmVzb3VyY2VzL01ha2VmaWxlLmluXQoJQWRkZWQgbGFuZ3VhZ2UgY2F0YWxhbi4gKEFmZWdpdCBsJ2lkaW9tYSBjYXRhbOApLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDE4IDE3OjA1OjU4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbdG9vbHMvYnVpbGQuY10KCVNvbWUgY2xlYW51cHMgaW4gc3RhY2sgZnJhbWUgYnVpbGRpbmcuCgoJKiBbbWlzYy9wb3J0LmNdCglJbXBsZW1lbnRlZCBjbG9uZSgpIHdyYXBwZXIgZm9yIGxpYmM1IHVzZXJzLgoKCSogW3NjaGVkdWxlci9tdXRleC5jXSBbc2NoZWR1bGVyL3N5bmNocm8uY10KCUltcGxlbWVudGVkIGFiYW5kb25lZCBtdXRleGVzLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglXZSBub3cgY3JlYXRlIGEgcHJvY2VzcyBhbmQgYSB0aHJlYWQgc3RydWN0dXJlIGFzIHNvb24gYXMgcG9zc2libGUKCWR1cmluZyBpbml0aWFsaXphdGlvbi4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtzY2hlZHVsZXIvc3lzZGVwcy5jXQoJTW92ZWQgc3lzdGVtLXNwZWNpZmljIHRocmVhZCBoYW5kbGluZyB0byBzeXNkZXBzLmMuCgpGcmkgSmFuIDE2IDEwOjQ1OjE1IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdW2luY2x1ZGUvZGRyYXcuaF0KCVN1cmZhY2UgaGFuZGxpbmcgZW5oYW5jZWQuIFNvbWUgc3R1ZmYgYWxyZWFkeSB3b3JrcyA7KQoKCSogW211bHRpbWVkaWEvZHNvdW5kLmNdW2luY2x1ZGUvZHNvdW5kLmhdCglJbXBsZW1lbnRlZCB1c2luZyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0uCglTbG93bHkgc3RhcnRzIHRvIHdvcmsgKHNvdW5kcyB0ZXJyaWJsZSBmb3Igc29tZSBwcm9ncmFtcykuCgoJKiBbY29uZmlndXJlLmluXVttdWx0aW1lZGlhL2F1ZGlvLmNdW2luY2x1ZGUvY29uZmlnLmguaW5dCglBZGRlZCBjaGVjayBmb3IgT3BlblNvdW5kU3lzdGVtLCBmaXhlZCAtbFh4Zjg2ZGdhIGNoZWNrLgoJUmVwbGFjZWQgT1MgI2lmZGVmcyBieSAjaWZkZWYgSEFWRV9PU1MgaW4gbW0vYXVkaW8uYy4KCgkqIFtpZjE2MzIvcmVsYXkuY11bcmVsYXkzMi9yZWxheTM4Ni5jXQoJRG8gbm90IHByaW50IGNvbnRyb2wgY2hhcmFjdGVycyBmb3IgJ3N0cicgb3IgJ3dzdHInIGFyZ3MuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJIiIgc2VlbXMgdG8gZXF1YWxzIE5VTEwgaW4ga2V5bmFtZXMuIFJlcGxhY2Ugd2hlcmUgbmVlZGVkLiBTZWVtcwoJdG8gaGVscCB0aGUgd2luOTUgcmVnZWRpdC5leGUuLi4KCgkqIFt3aW4zMi9uZXdmbnMuY10KCUltcGxlbWVudGVkIFF1ZXJ5UGVyZm9ybWFuY2UqIHVzaW5nIGdldHRpbWVvZmRheSgyKQoJKHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBwZW50aXVtIHRpbWVycyBwcm9iYWJseSkuCgoJKiBbdG9vbHMvaXBjbF0KCVJlbW92ZWQgdXNlbGVzcyBvcGVuX3BpcGUgY29uc3RydWN0LgoKU3VuIEphbiAxMSAxNzoxMDowMiAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvcmVnaW9uLmNdIFtpbmNsdWRlL3JlZ2lvbi5oXSBbZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmNdCglSZWdpb25zIGFyZSBub3cgaW50ZXJuYWwgdG8gV2luZS4gVGhlIGJhc2lzIG9mIHRoaXMgY29kZSBpcyB0YWtlbgoJZnJvbSB0aGUgWDExIGRpc3RyaWJ1dGlvbi4gR2V0UmVnaW9uRGF0YSgpIGlzIGltcGxlbWVudGVkIGFzIGlzIAoJRXh0Q3JlYXRlUmVnaW9uKCkgKHdpdGhvdXQgWGZvcm1zKS4gQ3JlYXRlUG9seVBvbHlnb25SZ24oKSBzaG91bGQKCWJlaGF2ZSBjb3JyZWN0bHkgbm93LiAKCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtncmFwaGljcy9tZXRhZmlsZWRydi9ncmFwaGljcy5jXQoJICBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXQoJICBbaW5jbHVkZS9tZXRhZmlsZWRydi5oXQoJUGxheWJhY2sgb2YgTUVUQV9DUkVBVEVSRUdJT04gc2hvdWxkIG5vdyB3b3JrLiBJbXBsZW1lbnRlZCByZWNvcmRpbmcKCW9mIE1FVEFfQ1JFQVRFUkVHSU9OIGFuZCBNRVRBX1BBSU5UUkVHSU9OLgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJRmlsbFJnbigpIChhbmQgdGhlcmVmb3JlIGl0cyBmcmllbmRzKSByZXNwZWN0IGxvZ2ljYWwgY28tb3Jkcy4KCldlZCBKYW4gIDcgMDE6MjE6NDUgMTk5OCAgU3RlaW5hciBIYW1yZSAgPHN0ZWluYXJoQHN0dWQuZmltLm50bnUubm8+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbdG9vbHMvYnVpbGQuY10KCU5vdyBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSAuc3RyaW5nIG9yIC5hc2NpaS4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10KCURlZmluaW5nIHVuaW9uIHNlbXVuIGlmIHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmcm9tIGhlYWRlciBmaWxlcy4KCgkqIFttaXNjL2xzdHIuY10KCU1vdmVkIHdpbmUncyBvd24gaGVhZGVyIGZpbGVzIGJlbG93IDx3Y3R5cGUuaD4gdG8gYXZvaWQKCXBhcnNlIGVycm9yIG9uIFNvbGFyaXMuCgpTdW4gSmFuICA0IDE1OjM4OjA3IDE5OTggIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL21taW8uY10KCUltcGxlbWVudGVkIG1taW9TZW5kTWVzc2FnZSBhbmQgcmVhcnJhbmdlZCB0aGUgbW1pbwoJc3Vic3lzdGVtIGluIHRlcm1zIG9mIHRoaXMgZnVuY3Rpb24uCgpXZWQgRGVjIDI0IDAwOjUxOjI5IDE5OTcgIENoYXJsZXMgRHVmZnkgPGNkdWZmeUBiaWdmb290LmNvbT4KCgkqIFt3aW5kb3dzL2NsaXBib2FyZC5jXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KCUdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0MzIgbm93IGhhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBqdXN0CglhIHN0dWIuIEkgaGF2ZSBubyBpZGVhIGlmIGl0IHdvcmtzIChjYW4ndCB0ZXN0IHVudGlsCglTZXRDbGlwYm9hcmREYXRhIGlzIGZpbmlzaGVkKSBidXQgSEVkaXQgbGlrZXMgdGhpbmdzIGEgbG90IG1vcmUKCXRoaXMgd2F5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSmFuICAzIDE3OjE1OjU2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJQWRkZWQgY3B1aWQgYW5kIGNtcHhjaGcgaW5zdHJ1Y3Rpb25zLgoKCSogW2lmMTYzMi9idWlsdGluLmNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXQoJRml4ZWQgYnJva2VuIC1kbGwgb3B0aW9uIHdpdGggV2luMzIgRExMcy4KCgkqIFtpbmNsdWRlL2hlYXAuaF0KCUFkZGVkIFNZU1RFTV9MT0NLL1NZU1RFTV9VTkxPQ0sgbWFjcm9zLgoKCSogW2NvbmZpZ3VyZS5pbl0gW21pc2MvbHN0ci5jXQoJQWRkZWQgY2hlY2sgZm9yIHdjdHlwZS5oLgoJQ29tbWVudGVkIG91dCAtLWVuYWJsZS1pcGMgb3B0aW9uIChJUEMgY29kZSBoYXMgYmVlbiBicm9rZW4gZm9yIGEKCWxvbmcgdGltZSBhbnl3YXkpLgoKCSogW3NjaGVkdWxlci9jcml0c2VjdGlvbi5jXSBbc2NoZWR1bGVyL2V2ZW50LmNdCgkgIFtzY2hlZHVsZXIvbXV0ZXguY10gW3NjaGVkdWxlci9zZW1hcGhvcmUuY10KCUltcGxlbWVudGVkIFdpbjMyIHN5bmNocm9uaXphdGlvbiBvYmplY3RzLgoKCSogW3NjaGVkdWxlci9zeW5jaHJvLmNdCglJbXBsZW1lbnRlZCBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglJZiBwb3NzaWJsZSwgdXNlIGNsb25lKCkgaW4gQ3JlYXRlVGhyZWFkKCkuCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCU1hZGUgdGhyZWFkIGFuZCBwcm9jZXNzIHdhaXRhYmxlIG9iamVjdHMuCglUaHJlYWQgYW5kIHByb2Nlc3MgaWQgdmFsdWVzIGFyZSBub3cgZGlmZmVyZW50IGZyb20gdGhlIHBvaW50ZXJzCgl0aGV5IHJlcHJlc2VudC4KCgkqIFt3aW4zMi9rMzJvYmouY10KCU1vdmVkIHRvIHNjaGVkdWxlciBkaXJlY3RvcnkuCglBZGRlZCBmdW5jdGlvbiB0YWJsZSBmb3Igd2FpdGluZyBvcGVyYXRpb25zIG9uIG9iamVjdHMuCgoJKiBbZmlsZXMvZmlsZS5jXSBbbWVtb3J5L3ZpcnR1YWwuY10KCUFkZGVkIG5ldyBLMzJPQkogZnVuY3Rpb24gdGFibGUuCgpTdW4gSmFuICAxIDE2OjQ4OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIG15IHBhdGNoIGZvciBHZXRUZW1wRmlsZU5hbWUxNigpIGFzIG5lZWRlZC4KCUl0IHdhcyAuLi5OYW1lMzJBKCkgdGhhdCBkaWRuJ3Qgd29yayBwcm9wZXJseSwgbm90IC4uLk5hbWUxNigpLgoKCSogW2dyYXBoaWNzL3gxMWRydi9icnVzaC5jXQoJRml4ZWQgYSBCYWRNYXRjaCBlcnJvci4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJRml4ZWQgSU5UMjFfRmluZE5leHRGQ0IoKSB0byBnZXQgY29ycmVjdCB2b2x1bWUgbGFiZWxzIGUuZy4KCWluICJmaWxlIG9wZW4iIGRpYWxvZy4KCgkqIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdIFtyZWxheTMyL3dpbm1tLnNwZWNdCglTdHViIEpveUdldFBvc0V4KCkuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3JlbGF5MzIva2VybmVsMzIuc3BlY10KCUltcGxlbWVudGVkIFJlZ2lzdGVyU2VydmljZVByb2Nlc3MoKS4KCldlZCBEZWMgMzEgMTE6MTQ6NDMgMTk5NyAgTGF3c29uIFdoaXRuZXkgIDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KCURlZmluZSBDYWxsUHJvY0V4MzJ3IC0gVGhhbmtzIHRvIE1hcmN1cyBNZWlzc25lciBmb3IgaGlzIGV4Y2VsbGVudAoJQ2FsbFByb2MzMlcuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJVGFrZSBhIHNob3QgYXQgZGVmaW5pbmcgRnJlZUxpYnJhcnkzMlcuCgpTdW4gRGVjIDI4IDEyOjQ0OjA0IDE5OTcgIEthaSBNb3JpY2ggPGthaS5tb3JpY2hAcmhlaW4tbmVja2FyLm5ldHN1cmYuZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTWVudSBtb2RpZmljYXRpb24gZnJvbSBXTV9JTklUTUVOVVBPUFVQIG1lc3NhZ2UgZml4ZWQuCglNZW51IGl0ZW1zIG5vdyBjYW4gaGF2ZSBkaWZmZXJlbnQgd0lEIGFuZCBoU3ViTWVudSAoV2luOTUgYmVoYXZpb3IpLgoKCSogW21pc2MvY3B1LmNdCglJbXByb3ZlZCBJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50LgoKU3VuIERlYyAyOCAwMzoyMTowOCAxOTk3ICBPdmUgS2FhdmVuIDxvdmVrQG1haW4uYXJjdGljbmV0Lm5vPgoKCSogW2luY2x1ZGUvd2luc29jay5oXSBbbWlzYy93aW5zb2NrLmNdCglGaXhlZCBXU19TT0xfU09DS0VUIGZvciBzZXRzb2Nrb3B0KCksIGFuZCBtYWRlIHNlbGVjdCgpIHJldHVybgoJZW1wdHkgZmRfc2V0cyBpZiB0aW1lb3V0LgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQW5pbWF0ZVBhbGV0dGUoKSBiYWlsZWQgb3V0IGlmIGVudGlyZSBwYWxldHRlIGlzIGFuaW1hdGVkLiBGaXhlZC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgc29tZSBjb2RlIHRvIFNldERJQml0c1RvRGV2aWNlKCkgYW5kIGl0cyBoZWxwZXJzIHRvIGZpeAoJc29tZSBvZmZzZXRpbmcgcHJvYmxlbXMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglNYWRlIENyZWF0ZUN1cnNvcjMyKCkgY29udmVydCB0aGUgaW5zdGFuY2UgaGFuZGxlIHByb3Blcmx5LiBNYWRlCglEZXN0cm95Q3Vyc29yKCkgcmV0dXJuIGNvcnJlY3Qgc3VjY2VzcyBzdGF0dXMuCgpXZWQgRGVjIDI0IDE3OjU2OjM0IDE5OTcgIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIGRlZmluaXRpb24gb2YgR2V0U3lzQ29sb3JQZW4xNi8zMi4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAoJZXhpc3QgaW4gdGhlIFdpbjMyIEFQSSBidXQgaXMgYSB2ZXJ5IGNsb3NlIChhbmQgbmF0dXJhbCkgcmVsYXRpdmUKCXRvIEdldFN5c0NvbG9yQnJ1c2ggZnVuY3Rpb24uIE1vcmVvdmVyLCBpdCBpcyAqdmVyeSogbXVjaCB1c2VkIAoJd2l0aGluIFdpbmUgc2luY2UgdGhlcmUgYXJlIGEgbG90IG9mIHBsYWNlcyB3aGVyZSB3ZSBuZWVkIHRvIGRyYXcKCWxpbmVzIHdpdGggdGhlIHN0YW5kYXJkIGNvbG9ycy4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9pY29udGl0bGUuY10KCSAgW2NvbnRyb2xzL21lbnUuY10gW2NvbnRyb2xzL3Byb2dyZXNzLmNdIFtjb250cm9scy9zY3JvbGwuY10KCSAgW2NvbnRyb2xzL3VwZG93bi5jXSBbZ3JhcGhpY3MvcGFpbnRpbmcuY10gW21pc2MvdHdlYWsuY10KCSAgW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUmVwbGFjZWQgcmVmZXJlbmNlcyB0byBzeXNDb2xvck9iamVjdHMgd2l0aCB0aGUgYXBwcm9wcmlhdGUKCWNhbGwgdG8gR2V0U3lzQ29sb3JCcnVzaDMyL0dldFN5c0NvbG9yUGVuMzIuIFRoZXJlIGlzIG5vIG5lZWQgdG8KCWV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBldmVuIHdpdGhpbiBXaW5lLgoJVGhpcyBtYWtlcyB0aGUgY29kZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCwgZGVidWcsIG1haW50YWluLgoKCSogW2NvbnRyb2xzL3VpdG9vbHMuY10KCU1vZGlmaWVkIG1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdG8gdXNlIHRoZSBub3cKCXN0YW5kYXJkIHBlbnMgKGkuZS4gR2V0U3lzQ29sb3JQZW4zMikuIFRoZXNlIGZ1bmN0aW9ucyBtYWRlCgkqaGVhdnkqIHVzZSBvZiBzdGFuZGFyZCBwZW5zIHNvIEkgZXhwZWN0IGEgbG90IGxlc3MKCUNyZWF0ZVBlbi9EZWxldGVPYmplY3QgY2FsbHMgY2FuIGRvIG9ubHkgZ29vZC4uLjopCglQbHVzIHNvbWUgbWlub3IgbW9kaWZpY2F0aW9ucyAoKm5vKiBmdW5jdGlvbmFsIGNoYW5nZXMgdGhvdWdoKS4KCgkqIFtjb250cm9scy91cGRvd24uY10KCVVzZWQgdGhlIG5ldyBEcmF3RnJhbWVDb250cm9sMzIgZnVuY3Rpb24gdG8gcGFpbnQgdGhlIGNvbnRyb2wuCglJIGFsc28gZGVsZXRlZCBVRERPV05fRHJhd0Fycm93IHNpbmNlIGl0IHdhcyBubyBsb25nZXIgcmVxdWlyZWQuCgpUdWUgRGVjIDIzIDAwOjAzOjMzIDE5OTcgIFN0ZWluYXIgSGFtcmUgIDxzdGVpbmFyaEBzdHVkLmZpbS5udG51Lm5vPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNoZWNrIGZvciAtbHcuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZXMgdG8gbWFrZSB0aGUgYXNzZW1ibHkgdW5kZXJzdGFuZGFibGUgZm9yIGV2ZW4gc3VuIGFzLgoJIi5hc2NpaSIgLT4gIi5zdHJpbmciLCAiY2FsbCAlZm9vIiAtPiAiY2FsbCAqJWZvbyIsCgkicHVzaHcvcG9wdyAlW2NkZXNdcyIgd3JpdHRlbiBvdXQgdG8gIi5ieXRlIDB4NjZcbnB1c2hsL3BvcGwgJVtjZGVzXXMiLgoKCSogW21lbW9yeS9sZHQuY10KCSNpZmRlZiBhZGRlZCBzbyA8c3lzL3NlZy5oPiB3aWxsIG5vdCBiZSBpbmNsdWRlZCBvbiBTb2xhcmlzLgoKTW9uIERlYyAyMiAxODo1NToxOSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBYRjg2REdBIGNoZWNrLgoKCSogW211bHRpbWVkaWEvZHNvdW5kLmNdW3JlbGF5MzIvZHNvdW5kLnNwZWNdW2luY2x1ZGUvZHNvdW5kLmhdCglTdGFydGVkIERpcmVjdFNvdW5kLiBPbmx5IHN0dWJzIGZvciBub3cuCgoJKiBbZ3JhcGhpY3MvZGRyYXcuY11baW5jbHVkZS9kZHJhdy5oXVtyZWxheTMyL2RkcmF3LnNwZWNdCglTdGFydGVkIHRvIGltcGxlbWVudCBEaXJlY3REcmF3LiBNb3N0bHkgc3R1YnMsIHNvbWUKCXRlc3RjYXNlcyB3b3JrLiBSZXF1aXJlcyB0aGUgWEY4NkRHQSBleHRlbnNpb24gdG8gWEZyZWU4Ni4KCShjaGVjayBkZW1vL2JsaXpkZW1vLmV4ZSBmcm9tIHRoZSBEaWFibG8gQ0QtUk9NKS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJUmV0dXJuIGNvcnJlY3QgIkNERlMiIGZzbmFtZSBzbyBEaWFibG8gaXMgYSBiaXQgaGFwcGllci4KClN1biBEZWMgMjEgMjE6NDU6NDggMTk5NyAgS2V2aW4gQ296ZW5zIDxrY296ZW5zQGludGVybG9nLmNvbT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXhlZCBidWdzIGluIHRoZSByb3V0aW5lcyB3aGljaCByZWFkIHRoZSBXaW5kb3dzICc5NSByZWdpc3RyeQoJZmlsZXMuIEFkZGVkIGV4dHJhIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgZm9ybWF0IG9mIHRoZSBXaW5kb3dzCgknOTUgcmVnaXN0cnkgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBEZWMgMTkgMTA6NTA6NDYgMTk5NyAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW01ha2UucnVsZXMuaW5dIFtNYWtlZmlsZS5pbl0gW2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW5dCiAJICBbZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbl0KCUZpcnN0IGN1dCBhdCBXaW5lIEFQSSBkb2N1bWVudGF0aW9uLiBObyBsb25nZXIgaW5zdGFsbCByZWZlcmVuY2UKCW1hbnVhbCBieSBkZWZhdWx0LgoKV2VkIERlYyAxNyAyMTozMjoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCBHZXRUZW1wRmlsZU5hbWUxNigpIHRvIHVzZSBjdXJyZW50IHBhdGggb2YgcmVxdWVzdGVkIGRyaXZlCglhcyBuZWVkZWQuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9kY2ltYW4zMi5zcGVjXQoJICBbaWYxNjMyL21zdmZ3MzIuc3BlY10gW2lmMTYzMi90YXBpMzIuc3BlY10gW2lmMTYzMi93b3czMi5zcGVjXQoJQWRkZWQgbWlzYyBETExzIG5lZWRlZCBieSB2YXJpb3VzIGFwcHMuCgpXZWQgRGVjIDE3IDEyOjAxOjUwIDE5OTcgIE1vcnRlbiBFcmlrc2VuIDxtb3J0ZW5lQHNpbS5ubz4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9wYWxldHRlLmNdCglJbnNlcnRlZCBlbXB0eSBzdHViIGZvciBDcmVhdGVIYWxmdG9uZVBhbGV0dGUuCgpUdWUgRGVjIDE2IDIyOjA4OjA2IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbd2luZG93cy9tZGkuY10KCVVzZSBWS19UQUIgaW5zdGVhZCBvZiBWS19TRVBBUkFUT1IgaW4gVHJhbnNsYXRlTURJU3lzQWNjZWwoKS4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdCglEZWxldGVEQygpIG9uIGEgTWV0YURDIGRvZXNuJ3QgZG8gYW55dGhpbmcgLSBpdCBzaG91bGRuJ3QuIFRoZXJlZm9yZQoJZml4IGNsZWFudXAgb2YgTWV0YURDcyBpbiBDbG9zZU1ldGFGaWxlKCk7IHRoZXkgbm93IGFjdHVhbGx5IGdldAoJcmVtb3ZlZCBmcm9tIHRoZSBHREkgaGVhcCEKCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCVByZXNlcnZlIEZPX01BVENIX1hZSU5ERVAgZmxhZyBpbiBYRk9OVF9NYXRjaEZJTGlzdCgpLiBTaG91bGQgcmVkdWNlCgl0aGUgbnVtYmVyIG9mIGJvbGQtaXRhbGljIG1hdGNoZXMuCgpUdWUgRGVjIDE2IDIwOjExOjQzIDE5OTcgIEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CgoJKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KCUluY2x1ZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIERyYXdTdGF0ZQoKCSogW2lmMTYzMi90aHVuay5jXQoJQ2hhbmdlZCBtYW55IGZwcmludGZzIGludG8gZHByaW50Zl90aHVuawoKCSogW2luY2x1ZGUvY2FjaGUuaF0gW2dyYXBoaWNzL2NhY2hlLmNdCglOZXcgZmlsZXMgdG8gaG9sZCBjYWNoZWQgaGFuZGxlcyB0byByZWd1bGFyeSB1c2VkIEdESSBvYmplY3QuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBEUkFXU1RBVEV4eCB0eXBlZGVmcwoJQWRkZWQgRFNTX0RFRkFVTFQgZGVmaW5lIGZvciBEcmF3U3RhdGUKCgkqIFtvYmplY3RzL3RleHQuY10KCU5ldyBpbXBsZW1lbnRhdGlvbiBvZiBHcmF5U3RyaW5nKCkKCgkqIFtjb250cm9scy91aXRvb2xzLmNdCglJbXBsZW1lbnRlZCBEcmF3RnJhbWVDb250cm9sKCkgZnVuY3Rpb25zCglDaGFuZ2VkIERyYXdFZGdlKCkgYmVoYXZpb3VyIHRvIHdpbjk1IGltcGxlbWVudGF0aW9uCgpNb24gRGVjIDE1IDIzOjQzOjAxIDE5OTcgIE1hcnRpbiBCb2VobWUgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgoJKiBbZ3JhcGhpY3MvcGF0aC5jXSBbaW5jbHVkZS9wYXRoLmhdIFtncmFwaGljcy9wYWludGluZy5jXQoJICBbaWYxNjMyL2dkaTMyLnNwZWNdIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCgkgIFtvYmplY3RzL2RjLmNdCiAgICAgICAgQWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgR0RJIHBhdGhzLgoKCSogW29iamVjdHMvZGMuY10KCUFkZGVkIERDX0luaXRfRENfSU5GTyBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIFdJTl9EQ19JTkZPCglzdHJ1Y3R1cmUuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9nZGlvYmouY10KCUFkZGVkIERFRkFVTFRfR1VJX0ZPTlQuCgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJQWRkZWQgYSBmZXcgZXJyb3IgY29kZXMuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUNoYW5nZWQgSGVhcEFsbG9jIHRvIG1ha2UgdGhlIGNvcnJlY3QgY2FsbHMgdG8gU2V0TGFzdEVycm9yCgkobm93IGNvbmZvcm1zIHRvIE5UJ3MgYmVoYXZpb3VyKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ2hhbmdlZCBXSU5fQ3JlYXRlV2luZG93RXggdG8gYWxsb3cgY2hpbGQgd2luZG93cyB3aXRoIHplcm8KCXdpZHRoIC8gaGVpZ2h0LgoKU3VuIERlYyAxNCAxMjowMTowNyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpZjE2MzIvKl0gW3JlbGF5MzIvKl0KCU1vdmVkIGFsbCAzMi1iaXQgcmVsYXkgc3R1ZmYgdG8gcmVsYXkzMi8KCgkqIFtmaTE2MzIvdGh1bmsuY10gW3dpbjMyL2tlcm5lbDMyLmNdCglNb3ZlZCBhbGwgS0VSTkVMMzIgb3JkaW5hbCBmdW5jdGlvbnMgdG8ga2VybmVsMzIuYwoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJSW5pdGlhbGl6ZSBzZWxlY3RvcnMgaW4gQWxsb2NTZWxlY3RvckFycmF5LgoKCSogW3Rvb2xzL2J1aWxkLmNdCglHZW5lcmF0ZSBDIGluc3RlYWQgb2YgYXNzZW1ibHkgZm9yIFdpbjMyIHJlbGF5cy4KCUZpeGVkIHN0YWNrIGNvcnJ1cHRpb24gaW4gQ2FsbFRvMTYgZnVuY3Rpb25zLCBmb3VuZCBieSBCZXJ0aG8KCVN0dWx0aWVucy4KCQpTdW4gRGVjIDE0IDEwOjU1OjAwIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvb2xlMnRoay5zcGVjXQoJQWRkZWQgYnVpbHQtaW4gT0xFMlRISy5ETEwuIAoKCSogW2lmMTYzMi90b29saGVscC5zcGVjXSBbaW5jbHVkZS90b29saGVscC5oXSBbbWVtb3J5L3NlbGVjdG9yLmNdCgkgIFttaXNjL3Rvb2xoZWxwLmNdCglBZGRlZCBzdHVicyBmb3IgU3RhY2tUcmFjZUZpcnN0KCksIFN0YWNrVHJhY2VDU0lQRmlyc3QoKSwKCVN0YWNrVHJhY2VOZXh0KCksIFVUU2VsZWN0b3JPZmZzZXRUb0xpbmVhcigpCglhbmQgVVRMaW5lYXJUb1NlbGVjdG9yT2Zmc2V0KCkuCgpTYXQgRGVjIDEzIDE3OjI2OjQxIDE5OTcgIEFsZXggS29yb2JrYSAgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvd2luc29jay5jXQoJMzItYml0IEFQSSBmaXhlcyBmb3IgcmVwb3J0ZWQgcHJvYmxlbXMgKHRoYW5rcyB0byBNYXJjdXMKCWFuZCBEYXZpZCkuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglMaXR0bGUgdHdlYWsgaW4gcG9pbnQgc2l6ZSBjYWxjdWxhdGlvbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3Mvd2luaGVscC5jXQoJICBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeGVzLgoKU2F0IERlYyAxMyAxNjozNToxNCAxOTk3ICBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQHJoZWluLW5lY2thci5uZXRzdXJmLmRlPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJT3BlbkZpbGUgd2l0aCBlbXB0eSBmaWxlbmFtZSBhbmQgT0ZfUEFSU0UgcmV0dXJucyBjdXJyZW50IGRpci4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUlnbm9yZSBpbml0aWFsIGRpciBpZiBib2d1cy4KCgkqIFtmaWxlcy9maWxlLmNdCglMb2NraW5nIGFuIGlkZW50aWMgcmVnaW9uIGluIGEgZmlsZSBtdXN0IG5vdCBiZSBhbiBlcnJvci4KCgkqIFttaXNjL2xzdHIuY10KCVVzZSB3aWRlIGNoYXIgY3R5cGUgZnVuY3Rpb25zLgoKRnJpIERlYyAxMiAyMzo0NjoyMiAxOTk3ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGUvZHJpdmUuY10KCUZpcnN0IGF0dGVtcHQgZm9yIEdldERpc2tGcmVlU3BhY2VFeC4KCkZyaSBEZWMgMTIgMjM6MTg6NDEgMTk5NyAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9yZXNvdXJjZS5jXQkKCUZpeGVkIHdyb25nbHkgYXBwZWFyaW5nIG1lbnVzIHByb2JsZW0gKG9ubHkgdXNlIGRlZmF1bHQgbG9va3VwcyBpbgoJbGFzdCByZXNvdXJjZSBzdWJ0cmVlKS4KCgkqIFttdWx0aW1lZGlhLyouY10KCUFkZGVkIHdpbjMyIHN1cHBvcnQgZm9yIHRpbWUqIGFuZCBqb3kqIGxvd2xldmVsIGRyaXZlcnMsCgkobm90IGV4Y2Vzc2l2ZWx5IHRlc3RlZCksIHNvbWUgbWlzYyBmaXhlcyBhbmQgY2xlYW51cHMuCgoJKiBbbWlzYy9zaGVsbG9yZC5jXVttaXNjL3NoZWxsLmNdW29sZS9mb2xkZXJzLmNdW29sZS9pZnMuY10KCSAgW2luY2x1ZGUvaW50ZXJmYWNlcy5oXVtpbmNsdWRlL3NobG9iai5oXQoJQWRkZWQgc29tZSBtb3JlIHVuZG9jdW1lbnRlZCBTSEVMTDMyIGZ1bmN0aW9ucywgc29tZSBzaGVsbCBmb2xkZXIKIAlpbnRlcmZhY2Ugc3R1YnMgYWRkZWQsIFNIR2V0TWFsbG9jLCBTSEdldERlc2t0b3BGb2xkZXIsCglTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiwgU0hHZXRQYXRoRnJvbUlETGlzdCBzdHVicyBhZGRlZCwKCUlNYWxsb2MsIElVbmtub3duIGltcGxlbWVudGVkLgoKCSogW3dpbmRvd3MvbXNnYm94LmNdCglJbXBsZW1lbnRlZCBNZXNzYWdlQm94SW5kaXJlY3QqLCBzb21lIGludGVybmFsIGNoYW5nZXMuCgoJKiBbaWYxNjMyL3RodW5rLmNdCglLRVJORUxfNDMxIGltcGxlbWVudGVkLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglHZXRDdXJyZW50T2JqZWN0IGltcGxlbWVudGVkLgoKV2VkIERlYyAgMyAwMTowOToxNyAxOTk3ICBHb3Jkb24gQ2hhZmZlZSAgPGNoYWZmZWVAYXB1LmNzLmJlcmtlbGV5LmVkdT4KCgkqIFtvYmplY3RzL2RpYi5jXQoJRml4IGEgY291cGxlIHNtYWxsIERJQiBwcm9ibGVtcy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXggYSB0eXBvLgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJVHJ5IG5vcm1hbCByZWFkZGlyIGluIGNhc2UgZnMgaXMgc3BlY2lmaWVkIGFzIHZmYXQgYnV0IGlzbid0LgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUltcGxlbWVudGF0aW9uIG9mIFdyaXRlUHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJBIGZyb20gVXdlIEJvbm5lcy4KCgkqIFttaXNjL3ByaW50ZHJ2LmNdCglPcGVuUHJpbnRlcjMyQSBzdHViLCBoZWxwcyBXb3JkOTcgc3RhcnQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXh1cCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRUZXh0Q2hhcnNldEluZm8uCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUZpeCBlbnZpcm9ubWVudCB2YXJpYWJsZSBleHBhbnNpb24uCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglNYWtlIE11bHRpQnl0ZVRvV2lkZUNoYXIgYW5kIFdpZGVDaGFyVG9NdWx0aUJ5dGUgY29uZm9ybSBpbiByZXR1cm4KCXZhbHVlcyBhbmQgZXJyb3IgY29uZGl0aW9ucyB0byB0aG9zZSBpbiBXaW5kb3dzIE5UIDQuMC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeCBicm9hZGNhc3RpbmcgcHJvYmxlbXMgaW4gV2luMzIuICBUaGUgV2luMzIgZG9jcyBzYXkgdG8gdXNlCglIV05EX1RPUE1PU1QgdG8gYnJvYWRjYXN0IHRvIGFsbCBXaW4zMiBXaW5kb3dzLgoKCSogW21lbW9yeS92aXJ0dWFsLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCURvIG5vdCBtYXAgaW4gVmlydHVhbEFsbG9jIGlmIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGFuZCBzcGFjZSBpcwoJbm90IGF2YWlsYWJsZS4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgV2luMzIuCgoJKiBbaW5jbHVkZS9wZW4uaF0gW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2RjLmNdCgkgIFtvYmplY3RzL3Blbi5jXSBbZ3JhcGhpY3MveDExZHJ2L3Blbi5jXQoJU3VwcG9ydCBmb3IgRXh0Q3JlYXRlUGVuLgoKVHVlIERlYyAgMiAyMDoyMjowNiAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogWyovKi5jXSBbKi8qLmhdCglBZGQgbG90cyBvZiBwcm90b3R5cGVzLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtpbmNsdWRlL3dpbmRvd3MuaF1baW5jbHVkZS93aW5udC5oXQoJICBbbWlzYy9jcHUuY10KCURlZmluZSBJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50LgoKCSogW21pc2MvY3J0ZGxsLmNdCiAJKENSVERMTF9fZ2V0Y3dkKTogQWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHRlcm1pbmF0aW5nIHplcm8uCgoJKiBbbWlzYy92ZXIuY10KCUltcHJvdmUgY2hlY2sgZm9yIG51bGwgY29tcG9uZW50IGluIF9maW5kX2RhdGFbQVddLiAgUGx1ZyBsZWFrcwoJaW4gVmVyUXVlcnlWYWx1ZSouCgoJKiBbd2luMzIvY29uc29sZS5jXVtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZCBzdHVicyBmb3IgR2V0Q29uc29sZUN1cnNvckluZm8zMiwgU2V0Q29uc29sZUN1cnNvckluZm8zMi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY11baWYxNjMyL3VzZXIzMi5zcGVjXVtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluZSBTZW5kTWVzc2FnZVRpbWVvdXQqLgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJQ2hhbmdlIGFsZ29yaXRobSBvZiBfX2dlbmVyaWNDaGVja1N1bSB0byBiZSBhbGlnbm1lbnQgc2FmZS4KCgkqIFttaXNjL21haW4uY10gW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2Rucy5jXQoJSW5jbHVkZSB3aW5zb2NrLmggZWFybHkgdG8gYXZvaWQgU29sYXJpcyBwcm9ibGVtLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJVW5kZWYgRlNISUZUIGJlZm9yZSB3ZSBkZWZpbmUgaXQuCgoJKiBbcmMvd2luZXJjLmNdCglJbmNsdWRlIDxmY250bC5oPiBpbnN0ZWFkIG9mIDxzeXMvZmNudGwuaD4uCgoJKiBbZmlsZXMvZmlsZS5jXQoJVXNlIHN0cmVycm9yIGluIEZJTEVfU2V0RG9zRXJyb3IgaWYgYXZhaWxhYmxlLgoKCSogW2luY2x1ZGUvY29uZmlnLmguaW5dIFtjb25maWd1cmUuaW5dCglDaGVjayBmb3Igc3RyZXJyb3IuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCU1ha2Ugc3RhdGljIGZvbnQgc3RydWN0dXJlcyBhbGlnbmVkLgoKTW9uIERlYyAgMSAxMDoxMDoyMSAxOTk3ICBLYXJsIEdhcnJpc29uICA8a2FybG9zQGV6bmV0Lm5ldD4KCgkqIFt3aW4zMi9jb25zb2xlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgc3R1YiBmb3IgR2V0TnVtYmVyT2ZDb25zb2xlTW91c2VCdXR0b25zLgoJQWRkZWQgc3R1YiBmb3IgUGVla0NvbnNvbGVJbnB1dChBLFcpLgoJRml4ZWQgcGFyYW1ldGVyIGxpc3QgZm9yIFdyaXRlQ29uc29sZShBLFcpLgoJR2V0TnVtYmVyT2ZDb25zb2xlSW5wdXRFdmVudHMgbm93IHJldHVybnMgMCBldmVudHMgaW5zdGVhZCBvZiAxCgkoc2luY2UgbG93LWxldmVsIGNvbnNvbGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IHN1cHBvcnRlZCkuCglHZXRDb25zb2xlTW9kZSBubyBsb25nZXIgcmV0dXJucyBFTkFCTEVfV0lORE9XX0lOUFVUIGFuZAoJRU5BQkxFX01PVVNFX0lOUFVUIHNpbmNlIHRoZXNlIGFyZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTm92IDI5IDEyOjM1OjI2IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi9idWlsdGluLmNdCglCdWlsZCBhIGNvbXBsZXRlIFBFIGhlYWRlciBmb3IgYnVpbHRpbiBXaW4zMiBtb2R1bGVzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQoJSE1PRFVMRTMyIG5vdyBwb2ludHMgdG8gdGhlIGxvYWRpbmcgYWRkcmVzcyBvZiB0aGUgbW9kdWxlLiBUaGVyZQoJaXMgbm8gbG9uZ2VyIGEgc2VwYXJhdGUgUEVfTU9EVUxFIHN0cnVjdHVyZS4KCkZyaSBOb3YgMjggMTE6MjE6NDcgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2xlLypdW2NvbmZpZ3VyZS5pbl1bTWFrZWZpbGUuaW5dW2luY2x1ZGUvaW50ZXJmYWNlcy5oXQoJICBbaWYxNjMyL29sZXN2cjMyLnNwZWNdW2lmMTYzMi9vbGVjbGkzMi5zcGVjXQoJTmV3IGRpcmVjdG9yeSwgbW92ZWQgT0xFIHN0dWZmIHRoZXJlLgoJbmV3IC5zcGVjIGZpbGVzIGZvciBvbGVjbGkzMixvbGVzdnIzMiwgc29tZSBzdHVicyBhZGRlZC4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGljb25zIGZyb20gUEUgZGxscy4KCgkqIFttaXNjL3NoZWxsb3JkLmNdW2lmMTYzMi9zaGVsbDMyLnNwZWNdCglBZGRlZCBhIGh1Z2UgaGVhcCBvZiBvcmRpbmFsIG9ubHkgZXhwb3J0ZWQgc2hlbGwgZnVuY3Rpb25zCgkod2lsbCB3b3JrIG9ubHkgaW4gV2luOTUpLgoKCSogW2xvYWRlci90YXNrLmNdCglIYWNrIHRvIG1ha2UgTWFrZVByb2NJbnN0YW5jZTE2IHdvcmsgaW4gYWxsIGNhc2VzIChtcGxheWVyLmV4ZSkuCgoJKiBbd2luMzIvc3RyaW5nMzIuY11baW5jbHVkZS9zdHJpbmczMi5oXQoJT2Jzb2xldGUsIHJlbW92ZWQuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQWRkZWQgKlJlZ2lzdGVySG90a2V5LgoKCSogW29iamVjdHMvZm9udC5jXVtvYmplY3RzL3RleHQuY10KCUFkZGVkIEdldEZvbnRMYW5ndWFnZUluZm8sIEdldFRleHRDaGFyc2V0SW5mby4KCldlZCBOb3YgMjYgMTg6MTA6NDAgMTk5NyAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFttaXNjL25ldHdvcmsuY10KCUluIFdOZXRHZXRDb25uZWN0aW9uMTYgcmV0dXJuIHRoZSBEcml2ZSBsYWJlbCBhbmQgbm90IHRoZSBET1MtQ3dkLgoJTWFrZXMgV29yZHZpZXcgNiBzdGFydCBvbiBhIG5ldHdvcmsgY29ubmVjdGVkIG1hY2hpbmUuCgoJKiBbY29udHJvbHMvc3RhdHVzLmNdCglDYXRjaCBhIE51bGwgcG9pbnRlciBpbiBTV19TZXRUZXh0LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQogCUFkZCBOVDUgZnVuY3Rpb25zIEdldExvbmdQYXRoTmFtZTMyLgoKCSogW2ZpbGVzL2ZpbGUuY10KCU1ha2UgR2V0VGVtcEZpbGVOYW1lMTYgYWNjZXB0IGRyaXZlIDAgKEN1cnJlbnQgRHJpdmUpIHRvby4KCUhhbmRsZSBtb3JlIGVycm9ycyBhbmQgYmUgbW9yZSB2ZXJib3NlIGluIEZJTEVfU2V0RG9zRXJyb3IsIGZpeAoJYW4gZXJyb3IgaW4gRGVsZXRlRmlsZTMyVwoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglJbXBsZW1lbnQgRmx1c2hWaWV3T2ZGaWxlLgoKCSogW21pc2MvY3J0ZGxsXQoJSW1wbGVtZW50IF9yb3RsIGFuZCBzcGxpdHBhdGggYW5kIGFkZCBhIHN0dWIgZm9yIAoJX2Fibm9ybWFsX3Rlcm1pbmF0aW9uLgoKCSogW21pc2MvcHJpbnRkcnYuY10KCVN0dWIgZm9yIEVudW1QcmludGVyczMyQS4KCgkqIFt3aW4zMi9uZXdmbnNdCglBZGQgU3R1YiBmb3IgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSwgY2hhbmdlIHJldHVybiB2YWx1ZQoJZm9yIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyLgogCUFkZCBzdHViIGZvciBEZXZpY2VJb0NvbnRyb2wuCgpUdWUgTm92IDI1IDE1OjU1OjAxIDE5OTcgTWFydGluIEJvZWhtZSA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCgkqIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvZWRpdC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCSAgW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBXSU5fTk9fUkVEUkFXIGZsYWcuCgpUdWUgTm92IDI1IDEzOjIwOjM1IDE5OTcgIERvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB0YWlnYS52LXdhdmUuY29tPgoKCSogW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10KCUZpeGVkIG1lbW9yeSBsZWFrIGluIEJJVEJMVF9HZXREc3RBcmVhLgoKU3VuIE5vdiAyMyAxNDowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUV4cG9ydCB3aW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkgdG8gZW52aXJvbm1lbnQuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi93MzJza3JubC5zcGVjXQoJICBbaWYxNjMyL3dpbjMyczE2LnNwZWNdIFttaXNjL3czMnNjb21iLmNdIFttaXNjL3czMnNrcm5sLmNdCglBZGRlZCBXaW4zMnMgRExMcyBXMzJTS1JOTCBhbmQgV0lOMzJTMTYuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBtaXNjIGZ1bmN0aW9ucyBmb3IgV2luMzJzLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci90YXNrLmNdCglBZGRlZCBEZWZpbmVIYW5kbGVUYWJsZSgpLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglGaXhlZCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlMzJBKCkgdG8gYXZvaWQgaGVhcCBjb3JydXB0aW9uLgoKU2F0IE5vdiAyMiAxNDoxMTo0MiAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXggbGVhayBpbiBCZWdpblBhaW50MTYoKSBmb3IgQ1NfUEFSRU5UREMgd2luZG93cyB3aGVyZSB0aGUKCXVwZGF0ZSByZWdpb24gd2FzIG5vdCBwcm9wZXJseSByZWxlYXNlZC4KClRodSBOb3YgMjAgMDM6NTU6MjkgMTk5NyAgR29yZG9uIENoYWZmZWUgPGNoYWZmZWVAQ1MuQmVya2VsZXkuRURVPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJSW1wbGVtZW50ZWQgZm9yd2FyZGVkIERMTCBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIDE2LSBhbmQgMzItYml0IG1vZGUgRElCcy4KCVN1cHBvcnQgbmVnYXRpdmUgYml0bWFwIGhlaWdodHMuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlUHJvY2VzczMyVy4KCgkqIFt3aW4zMi9zZWN1cml0eS5jXSBbaW5jbHVkZS9udGRsbC5oXQoJQWRkZWQgc3R1YnMgZm9yIExvb2t1cEFjY291bnRTaWQzMkEvVy4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJVXNlIHRoZSBzaXplIHNwZWNpZmllZCBpbiB0aGUgUEUgaGVhZGVyIGZvciB0aGUgcHJvY2VzcyBoZWFwLgoKTW9uIE5vdiAxNyAwMDo1MzozNSAxOTk3ICBMZW4gV2hpdGUgPHBocmVha0BjZ29jYWJsZS5uZXQ+CgoJKiBbbXNkb3MvaW50M2QuY10KCU5ldyBmaWxlLiBTdHVicyBmb3IgaW50M2QuCgpTdW4gTm92IDE2IDEyOjMwOjAwIFBTVCAxOTk3ICBKYXNvbiBTY2hvbmJlcmcgIDxzY2hvbkBtdGkuc2dpLmNvbT4KCgkqIFtpbmNsdWRlL2FzcGkuaF0KCUNoYW5nZWQgY29tbWVudCBzdHlsZSBmcm9tIEMrKyB0byBDLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92IDE2IDA3OjQyOjQ0IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVnIGZpeGVzLgoKCSogW21pc2Mvc2hlbGwuY10gW3Jlc291cmNlcy8qXQoJTmV3ICJBYm91dCIgZGlhbG9nLgoKU2F0IE5vdiAxNSAxNzozMDoxOCAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZS5pbl0KCVJlcGxhY2VkIC0td2l0aC1saWJyYXJ5IG9wdGlvbiBieSAtLWRpc2FibGUtZW11bGF0b3IuIFRoZSBkZWZhdWx0CiAJaXMgbm93IHRvIGJ1aWxkIGJvdGggdGhlIGxpYnJhcnkgYW5kIHRoZSBlbXVsYXRvci4KCVJlbmFtZWQgLS13aXRoIG9wdGlvbnMgdG8gLS1lbmFibGUgdG8gZm9sbG93IGF1dG9jb25mIGd1aWRlbGluZXMuCgoJKiBbbG9hZGVyL21haW4uY10gW21pc2NlbXUvbWFpbi5jXSAoTmV3IGZpbGUpCglTcGxpdCBpbml0aWFsaXphdGlvbiBpbiBXaW5lbGliSW5pdC9FbXVsYXRvckluaXQuCgoJKiBbbG9hZGVyLyouY10KCVJlbW92ZWQgYWxsIHJlbWFpbmluZyAjaWZkZWYncyBXSU5FTElCLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10gW3dpbmRvd3MvbWRpLmNdCglDb252ZXJ0ZWQgTURJQ2xpZW50V25kUHJvYyB0byAzMi1iaXQuCgoJKiBbZGVidWdnZXIvYnJlYWsuY10gW2lmMTYzMi9zaWduYWwuY10gW2luY2x1ZGUvc2VsZWN0b3JzLmhdCgkgIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglDb2RlIGFuZCBkYXRhIHNlbGVjdG9yIHZhbHVlcyBhcmUgbm93IGNvbXB1dGVkIGF0IHJ1bi10aW1lLgoKCSogW2xpYnJhcnkvbGlicmVzLmNdCglNb3ZlZCB0byBsb2FkZXIvIGRpcmVjdG9yeS4KCgkqIFttaXNjL21haW4uY10gW21pc2MvdmVyc2lvbi5jXSAoTmV3IGZpbGUpCglNb3ZlZCBhbGwgdmVyc2lvbiBzdHVmZiB0byB2ZXJzaW9uLmMuIENsZWFuZWQgdXAgYSBiaXQuCgoJKiBbbXNkb3MvZHBtaS5jXQoJVXBkYXRlIHRoZSBSRUFMTU9ERUNBTEwgc3RydWN0dXJlIG9uIHJldHVybiBmcm9tIHJlYWwtbW9kZQoJaW50ZXJydXB0LgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNoYW5nZWQgdGhlIHdheSBldmVudCBjb29yZGluYXRlcyBhcmUgZGV0ZXJtaW5lZC4gRG9uJ3QgcmVseSBvbgoJdGhlIENvbmZpZ3VyZU5vdGlmeSBldmVudCB2YWx1ZXMuIFRoaXMgc2hvdWxkIGZpeCBhbGwgcHJvYmxlbXMKCXdpdGggY3Vyc29yIHBvc2l0aW9uIGluIC1kZXNrdG9wIGFuZCAtbWFuYWdlZCBtb2Rlcy4KClNhdCBOb3YgMTUgMTY6MDk6MzYgMTk5NyAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9idXR0b24uY10KCShCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24pOiBQcmV2ZW50IHBvc3NpYmxlIGVuZGxlc3MgbG9vcC4KCldlZCBOb3YgMTIgMDM6NDI6NDUgMTk5NyAgQ2hyaXMgRmFoZXJ0eSA8Y2hyaXNmQGFtZXJpY2EuY29tPgoKCSogW21pc2MvdmVyLmNdCglDaGFuZ2VkIFZlckluc3RhbGwzMkEgdG8gYXNzdW1lIHNyY2RpciBhcyBkZXN0aW5hdGlvbiBpZiBkZXN0ZGlyCglpcyBibGFuay4gIFRoaXMgd2FzIGNhdXNpbmcgYWxvdCBvZiBETEwgaW5zdGFsbGF0aW9uIGludG8gU1lTVEVNCglkaXJlY3RvcnkgdG8gZmFpbC4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCU5FX0xvYWRTZWdtZW50IGJ1ZmZlclsxMDBdIHdhcyB0b28gc21hbGwgYW5kIGdldHRpbmcgb3ZlcnJ1bnMuCglDaGFuZ2VkIGl0IHRvIGJ1ZmZlclsyMDBdLgoKU2F0IE5vdiAgOCAwNjowOTo1NyAxOTk3ICBMZW4gV2hpdGUgPHBocmVha0BjZ29jYWJsZS5uZXQ+CgoJKiBbbWlzYy9kZGVtbC5jXSBbaW5jbHVkZS9kZGVtbC5oXSBbaWYxNjMyL2RkZW1sLnNwZWNdCglBZGRlZCBzdHViIGZ1bmN0aW9ucyBEZGVDb25uZWN0TGlzdCgpLCBEZGVRdWVyeU5leHRTZXJ2ZXIoKSwKCURkZURpc2Nvbm5lY3RMaXN0KCksIERkZVNldFVzZXJIYW5kbGUoKSwgRGRlQWJhbmRvblRyYW5zYWN0aW9uKCksCglEZGVQb3N0QWR2aXNlKCksIERkZUNyZWF0ZURhdGFIYW5kbGUoKSwgRGRlQWRkRGF0YSgpLCBEZGVHZXREYXRhKCksCglEZGVBY2Nlc3NEYXRhKCksIERkZVVuYWNjZXNzRGF0YSgpLCBEZGVFbmFibGVDYWxsYmFjaygpLAoJRGRlQ21wU3RyaW5nSGFuZGxlcygpLgoKRnJpIE5vdiAgNyAxOTo0NDoyNiAxOTk3ICBPbGFmIEZsZWJiZSAgPG8uZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLmRlPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRml4IHR5cG8gaW4gZGlyZWN0b3J5LmMgW2Jyb2tlIGxvYWRpbmcgb2YgY2RwbGF5ZXIgb24gbnQ0MF0KCgkqIFttaXNjL21haW4uY10KCUltcGxlbWVudGVkIC13aW52ZXIgbnQ0MC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW3VzZXIzMi5zcGVjXQoJU3R1YnMgZm9yIENvcHlBY2NlbGVyYXRvclRhYmxlLCBEZXN0cm95IEFjY2VsZXJhdG9yVGFibGUuCgpUaHUgTm92ICA2IDIyOjM3OjA0IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbZmlsZXMvZHJpdmUuY10KCShHZXREaXNrRnJlZVNwYWNlMzJBKTogQ2FwIGF0IDJHQi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVByb3RvdHlwZSBEcmF3SWNvbkV4IGFuZCBDcmVhdGVESUJTZWN0aW9uMzIuCglEZWZpbmUgT0JNX1JBRElPQ0hFQ0suCglBZGQgRElfKiBtYWNyb3MuCgoJKiBbb2JqZWN0cy9kaWIuY10gW2lmMTYzMi9nZGkuc3BlY10KCUNyZWF0ZURJQlNlY3Rpb24gaXMgYSBXSU5BUEkuICBSZW5hbWVkIHRvIENyZWF0ZURJQlNlY3Rpb24zMi4KCUltcGxlbWVudCBDcmVhdGVESUJTZWN0aW9uMTYuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZCBEcmF3SWNvbkV4LgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJKENvcHlJY29uMzIpOiBGaXggYm9ndXMgaW1wbGVtZW50YXRpb24uCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCShDb3B5Qml0bWFwMzIpOiBOZXcgZnVuY3Rpb24uCgkoQ29weUltYWdlMzIpOiBEbyBiaXRtYXBzLgoKCSogW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdCgkoWDExRFJWX0V4dFRleHRPdXQpOiBDaGFuZ2UgYXNjZW50IGFuZCBkZXNjZW50IGRlZmF1bHQgdG8gYXZvaWQKCXplcm8tdGhpbmtuZXNzIG92ZXJzdHJpa2UgbGluZS4KCgkqIFtpbmNsdWRlL2RlYnVnc3RyLmhdIFttaXNjL2RlYnVnc3RyLmNdCglOZXcgZmlsZXMuCgoJKiBbbXNkb3MvZHBtaS5jXQoJRG9uJ3QgcHJvdG90eXBlIGRvX21zY2RleC4gSW4gSU5UX0ludDMxSGFuZGxlciwgaGFuZGxlIHJlYWwtbW9kZQoJaW50IDB4MjEsIGFoPTB4NTIuCgoJKiBbbXNkb3MvaW50MmYuY10KCUFkZCBkdW1teXMgZm9yIDB4MTY4MSBhbmQgMHgxNjgyLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeCBtZW1vcnkgbGVha3MgaW4gUmVnRGVsZXRlS2V5MzJXLgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW4gVEVYVF9OZXh0TGluZSwgZml4IGFub3RoZXIgb2ZmLWJ5LW9uZSBidWcuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29ibV9yYWRpb2NoZWNrXQoJTmV3IGZpbGUuICAoSXQgYSBzbWFsbCBjaXJjbGUgdXNlZCB0byByYWRpby1idXR0b24gbWVudSBpdGVtcwoJd2hlbiBzZWxlY3RlZC4pCgkKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGQgb2JtX3JhZGlvY2hlY2suCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtjb250cm9scy9tZW51LmNdCgkgIFtpZjE2MzIvdXNlci5zcGVjXQoJRGVmaW5lIENoZWNrTWVudVJhZGlvSXRlbXsxNiwzMn0uICBEZWZpbmUgR2V0TWVudUl0ZW1SZWN0ezE2LDMyfS4KCldlZCBOb3YgIDUgMTE6MzA6MTQgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFttaXNjL21haW4uY10KCUF1dG8gYWRqdXN0IHZlcnNpb25zIGRlcGVuZGluZyBvbiBiaW5hcnkuCgpUdWUgTm92ICA0IDE1OjIxOjAwIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVBhaW50IGZ1bGwgYmFja2dyb3VuZCBpbiBsaXN0Ym94IGl0ZW1zIHdpdGggdGFiIHN0b3BzIGVuYWJsZWQuCgoJKiBbaWYxNjMyL3RodW5rLmNdCglDb3B5IHNvbWUgbW9yZSBtZXNzYWdlIHBhcmFtZXRlciBzdHJ1Y3R1cmVzIChEUkFXSVRFTVNUUlVDVDE2LAoJQ09NUEFSRUlURU1TVFJVQ1QxNikgdG8gdGhlIHN0YWNrIHNlZ21lbnQgdG8gZml4IGJyb2tlbiBwcm9ncmFtcwoJdGhhdCBuZWVkIHRoaXMuCgoJKiBbd2luZG93cy9kY2UuY10KCU9ubHkgY2xpcCBzaWJsaW5nIHdpbmRvd3Mgd2hlbiB0aGUgcGFyZW50IGhhcyB0aGUgV1NfQ0xJUFNJQkxJTkdTCglzdHlsZSBzZXQuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJTWFrZSBvcmRlciBvZiBldmVudHMgaW4gRk9DVVNfU3dpdGNoRm9jdXMoKSByZWZsZWN0IEFQSSBkb2NzLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglGaXggcHJvYmxlbSB3aXRoIGxvc3Mgb2YgZm9jdXMgaW4gc29tZSBkaWFsb2dzLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJRml4IHJldHVybiB2YWx1ZSBmb3IgTXVsdGlCeXRlVG9XaWRlQ2hhcigpLgoKCSogW0JVR1NdCglCQ1cgbm93IHdvcmtzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgT2N0IDMwIDIxOjUyOjIzIDE5OTcgIE1hcnRpbiBCb2VobWUgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNoYW5nZWQgTkNfVHJhY2tTeXNNZW51IHRvIGdpdmUgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIE1TLVdpbmRvd3MsCglpLmUuIHN5c3RlbSBtZW51IGFscmVhZHkgYXBwZWFycyB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBkZXByZXNzZWQuCglDaGFuZ2VkIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsayBzbyB0aGF0IGRvdWJsZSBjbGlja3Mgb24gc2Nyb2xsCgliYXIgYXJyb3dzIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBzaW5nbGUgY2xpY2tzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglGaXhlZCBTZXRXaW5kb3dQb3MzMiB0byBjbGVhciBXSU5fTk9fUkVEUkFXIHdoZW4gU1dQX1NIT1dXSU5ET1cgaXMKCXNldDsgdGhpcyBpcyB0aGUgd2F5IE1TLVdpbmRvd3MgYmVoYXZlcy4KClRodSBPY3QgMzAgMjE6MDg6NTcgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb250cm9scy9zdGF0dXMuY10KCUluIFNXX1NldFRleHQsIGZpeCBjb25kaXRpb24sIEkgaG9wZS4KCgkqIFtjb250cm9scy9tZW51LmNdCiAJKEdldE1lbnVTdGF0ZTMyKTogRG9uJ3QgbWFzayByZXR1cm4gdmFsdWUuIFByaW50IG1vcmUgZGVidWcgaW5mby4KCShNRU5VX01lbnVCYXJDYWxjU2l6ZSk6IEJlIG1vcmUgY2FyZWZ1bCB3aGVuIHByaW50aW5nIGRlYnVnCglpbmZvcm1hdGlvbi4KCShNRU5VX1NldEl0ZW1EYXRhKTogRW1wdHkgc3RyaW5ncyBhcmUgc2VwYXJhdG9ycy4KCgkqIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQoJRG9uJ3QgcHJvdG90eXBlIENMSVBQSU5HX0ludGVyc2VjdENsaXBSZWN0LgoKCSogW2luY2x1ZGUvZGMuaF0KCVByb3RvdHlwZSBDTElQUElOR19JbnRlcnNlY3RDbGlwUmVjdC4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCVJlbW92ZSBub24tcG9ydGFibGUgKGFuZCBmYXVsdHkpIHNtYXJ0bmVzcyBpbiBGT05UX1RleHRNZXRyaWMqdG8qLgoJSW4gQ3JlYXRlRm9udDMyVyBhbmQgQ3JlYXRlRm9udDE2LCBoYW5kbGUgbnVsbCBmb250IG5hbWUuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCiAJKFRFWFRfTmV4dExpbmUpOiBGaXggZW5kLW9mLWxpbmUgYnVnLgoKCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCglBY3RpdmF0ZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiBFeHRyYWN0SWNvbkEuCgoJKiBbbWlzYy9zaGVsbC5jXQoJRm9yIENvbnRyb2xfUnVuRExMLCBhZGQgdHlwZXMgZm9yIHBhcmFtZXRlcnMuCgpUaHUgT2N0IDMwIDE0OjU0OjExIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFttaXNjL3NweS5jXQoJQWRkZWQgc29tZSB3aW4zMiBkZWZpbmVzIHRvIHN0YXRpYyBjb250cm9scywgYmFzaWMgU1NfQklUTUFQIHN0eWxlCgloYW5kbGluZyBpbXBsZW1lbnRlZC4gW3BsZWFzZSBhZGQgbW9yZSwgSSBhbSBsYWNraW5nIGtub3dsZWRnZSBhbmQKCXRpbWVdCgoJKiBbY29udHJvbHMvc3RhdHVzLmNdCglwYXJ0X251bSAyNTUgc2VlbXMgdG8gaW5kaWNhdGUgd2hvbGUgc3RhdHVzbGluZSAod2luOTUgY2RwbGF5ZXIuZXhlKQoKCSogW2lmMTYzMi90aHVuay5jXSBbdG9vbHMvYnVpbGQuY10KCVN1cHBvcnQgbHJldCBhbmQgMHg2NiBscmV0IGNhbGxzIGZvciBDYWxsVG8xNl9yZWdzCgkobmVlZGVkIGZvciBLRVJORUwzMl80NSkKCUZpeGVkIEtFUk5FTDMyXzQ1LCBRVF9UaHVuayAoc2hvdWxkIHdvcmsgbm93KS4KCgkqIFtpZjE2MzIvcmVsYXkuY11baWYxNjMyL2J1aWx0aW4uY11bdG9vbHMvYnVpbGQuY11baWYxNjMyLyozMi5zcGVjXQoJQWRkZWQgc3RyaW5nIGR1bXBpbmcgdG8gcmVsYXkgZGVidWdnaW5nIGZvciB3aW4zMiBhcGlmdW5jcy4KCgkqIFttaXNjL3Zlci5jXQoJRml4ZWQgYW5kIGNsZWFuZWQgdXAgVmVyUXVlcnlWYWx1ZSouCgoJKiBbbXVsdGltZWRpYS8qLmNdW2luY2x1ZGUvbW1zeXN0ZW0uaF1baWYxNjMyL21tc3lzdGVtLnNwZWNdCgkgIFtpZjE2MzIvd2lubW0uc3BlY10KCVdpbjMyIHN1cHBvcnQgZm9yIGxvd2xldmVsIG11bHRpbWVkaWEgZnVuY3Rpb25zLgoJQWRkZWQgc29tZSBtaXhlciogbG93bGV2ZWwgZnVuY3Rpb25zLgoJU29tZSBzbWFsbCBmaXhlcyBpbiB0aGUgYXVkaW8gbG93bGV2ZWwgcXVldWUgaGFuZGxpbmcsIGNvZGUKCXJlZm9ybWF0dGluZy9jbGVhbnVwcy4KCgkqIFtkZWJ1Z2dlci9oYXNoLmNdCglEb24ndCBzaG93IGRpZmZlcmVuY2UgYmV0d2VlbiAxNmJpdCBzeW1ib2xzIGlmIHRoZXkgYXJlIGluCglkaWZmZXJlbnQgc2VnbWVudHMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglBZGRlZCBHZXRJY29uSW5mbyAocGFydGlhbCkgYW5kIENyZWF0ZUljb25JbmRpcmVjdC4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgc29tZSAiYmFkIGNsYXNzIiBwcm9ibGVtcyBhbmQgY3Jhc2hlcyBpbiBNRElDcmVhdGVDaGlsZCwKCXdoaWNoIGhhcHBlbiBpbiBXaW4zMiAoandwMzIuZXhlKS4KCldlZCBPY3QgMjkgMDA6NTc6MjcgMTk5NyAgQnJ1Y2UgTWlsbmVyICA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2lmMTYzMi93aW5hc3BpLnNwZWNdIFttaXNjL2FzcGkuY10gW2luY2x1ZGUvYXNwaS5jXQoJICBbZG9jdW1lbnRhdGlvbi9hc3BpXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgMTYgYml0IEFTUEkgY2FsbHMgdG8gbGludXggZ2VuZXJpYyBTQ1NJLgoJVGhlIHN1cHBvcnQgaXMgbm90IGNvbXBsZXRlLCBidXQgYXBwZWFycyB0byBydW4gbXkgTXVzdGVrCglzY2FubmVyIGZyb20gd2l0aGluIGlwcGx1cy5leGUuCgpNb24gT2N0IDI3IDAwOjU5OjQxIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10KCURDIHJldXNlIGZyYW1ld29yay4KClN1biBPY3QgMjYgMTg6NDE6MjEgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCVN1YnN0aXR1dGVkIGZvbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIGFsaWFzIHRhYmxlLiBSZWZlcmVuY2VzIHRvCgl0aGUgb2xkIG5hbWUgYXJlIGFsc28gdXBkYXRlZC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTEJfU0VMRUNUU1RSSU5HMzIgbm90IENCX1NFTEVDVFNUUklORzMyIHNob3VsZCBiZSBzZW50IHRvCglDb21ib0xCb3guCgpTdW4gT2N0IDI2IDE0OjI1OjAwIDE5OTcgIE5pa2l0YSBWLiBZb3VzaGNoZW5rbyA8eW91c2hAY3MubXN1LnN1PgoKCSogW2luY2x1ZGUvZHJpdmUuaF0gW2ZpbGVzL2RyaXZlLmNdIFttc2Rvcy9pbnQyMS5jXQoJUGFydGlhbGx5IGltcGxlbWVudGVkIERPUyBkcml2ZSBtYXBwaW5nIChpbnQyMSBBWD00NDBGKS4KClNhdCBPY3QgMjUgMTM6MDM6MjkgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZGVidWdnZXIvZGVidWcubF0KCVN1cHBvcnQgJy4nIGluIGlkZW50aWZpZXJzLiBVc2UgInggLiB5IiB0byBhY2Nlc3Mgc3RydWN0dXJlCglmaWVsZHMuCgoJKiBbZGVidWdnZXIvaGFzaC5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCglMb2FkIGVudHJ5IHBvaW50cyBvZiBXaW4zMiBtb2R1bGVzIG9ubHkgd2hlbiBlbnRlcmluZyB0aGUKCWRlYnVnZ2VyLgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCglOZXcgZnVuY3Rpb24gREVCVUdfQWRkTW9kdWxlQnJlYWtwb2ludCgpIHRvIHNldCBhIGJyZWFrcG9pbnQgYXQKCXRoZSBzdGFydCBvZiBldmVyeSBtb2R1bGUuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRklMRV9tbWFwKCkgY2FuIG5vdyBmYWtlIG1tYXAoKSBmb3IgdW5hbGlnbmVkIG9mZnNldHMgb3IgYnJva2VuCglmaWxlc3lzdGVtcy4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFttaXNjL2NhbGxiYWNrLmNdIFtpZjE2MzIvdGh1bmsuY10KCVVzZSBhIHRhYmxlIG9mIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIG1hY3JvcyB0byBkaWZmZXJlbnRpYXRlCgliZXR3ZWVuIGVtdWxhdG9yIGFuZCBXaW5lbGliLgoKCSogW2xvYWRlci90YXNrLmNdCglJbml0aWFsaXplIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20gY3dkLCBub3QgZnJvbSBtb2R1bGUgcGF0aC4KCgkqIFt0b29scy9idWlsZC5jXQoJUmVhZCBDYWxsVG8xNiBwcm90b3R5cGVzIGRpcmVjdGx5IGZyb20gdGh1bmsuYyBzb3VyY2UgZmlsZS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3MvbWRpLmNdCglBZGRlZCB0cmFuc2xhdGlvbiBmb3IgV01fTURJQUNUSVZBVEUgYW5kIFdNX01ESUdFVEFDVElWRS4KCkZyaSBPY3QgMjQgMjE6NDE6MjUgMTk5NyAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AudHUtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBbGxvdyBhcmd1bWVudHMgbGlrZSAiYSIgZm9yIHRoZSBkcml2ZSByZWxhdGVkIGFwaXMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJS2VlcCB0aGUgY2FsY3VsYXRpb24gZm9yIGR3TWVtb3J5TG9hZCBpbiByYW5nZS4KCgkqIFttaXNjL2NydGRsbC5jXQoJTWFrZSBDUlRETExfZ2V0Y3dkIHVzZSBHZXRDdXJyZW50RGlyZWN0b3J5MzJBIGFuZCBhbGxvYwoJaXRzIG1lbW9yeSBpZiByZXF1ZXN0ZWQuCglJbXBsZW1lbnRlZCBDUlRETExfcmVuYW1lIGFuZCBDUlRETExfc3RhdCBuZWVkZWQgZm9yCglsY2Mtd2luMzI6d2VkaXQuZXhlLgoJSW1wbGVtZW50ZWQgQ1JURExMX19mdWxscGF0aC4KCgkqIFttaXNjL2NvbW0uY10KCUhpZ2ggc3BlZWQgbW9kZXMgZm9yIHRoZSAxNi1iaXQgbW9kZSBDb21tIGZ1bmN0aW9ucy4KCgkqIFttaXNjL2NwdS5jXQoJQXMgYXBwbGljYXRpb25zIG1heSB0cmVhdCBscE1heGltdW1BcHBsaWNhdGlvbkFkZHJlc3MgYXMgbG9uZywKCXVzZSBhIHZhbGlkIGxvbmcgbnVtYmVyLgoKCSogW21pc2MvbWFpbi5jXQoJSW4gU3lzdGVtUGFyYW1ldGVyc0luZm8xNiBpZ25vcmUgU1BJX0dFVEhJR0hDT05UUkFTVCB0b28uCgoJKiBbbWlzYy9vbGUybmxzLmNdCglJbXBsZW1lbnQgTENNQVBfVVBQRVJDQVNFIGZvciBMQ01hcFN0cmluZzMyLgoKCSogW21pc2Mvd3NwcmludGZdCglNYWRlIFdQUklOVEZfUGFyc2VGb3JtYXRBIHVuZGVyc3RhbmQgJXdzLgoKCSogW3dpbjMyL2ZpbGUuY10KCUlnbm9yZSBGSUxFX0FUVFJJQlVURV9OT1JNQUwuCglTdHViIGZvciBSZWFkRmlsZUV4LgoKRnJpIE9jdCAyNCAxNTozNjowMiAxOTk3ICBEb3VnIFJpZGd3YXkgPHJpZGd3YXlAcm91dGgudWNzZC5lZHU+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglMb2NhbCBoZWFwIGV4aGF1c3Rpb24gbWVzc2FnZSBub3cgcHJpbnRzIHdoaWNoIGJ1aWx0aW4gaGVhcCBmaWxsZWQuCgpGcmkgT2N0IDI0IDAwOjQ2OjM0IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVJldmVyc2VkIENyZWF0ZUZvbnQxNi8zMlcgdHlwby4KClRodSBPY3QgMjMgMjM6NDQ6MjAgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUZpeGVkIGFyZ3VtZW50IGxpc3QgZm9yIENoYW5nZUNsaXBib2FyZENoYWluLgoKCSogW3dpbmRvd3MvbWRpLmNdCglQYXNzIGNvcnJlY3QgaEluc3RhbmNlIHRvIENyZWF0ZVdpbmRvdzE2KCkgaW4gTURJQ3JlYXRlQ2hpbGQoKS4KCk1vbiBPY3QgMjAgMTE6NTE6MjQgMTk5NyAgQ2Fyc3RlbiBGYWxsZXNlbiA8Y2ZAaXQuZHR1LmRrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUFkZGVkIHN1cHBvcnQgZm9yIE1FVEFfU0VUVEVYVENIQVJFWFRSQS4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4ZWQgY3Jhc2ggaW4gWFBvbHlnb25SZWdpb24gaWYgdGhlcmUgaXMgb25seSBvbmUgcG9pbnQgaW4gCglpbiB0aGUgcmVnaW9uLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpbmNsdWRlL2dkaS5oXVtpbmNsdWRlL3dpbmRvd3MuaF0KCSAgW29iamVjdHMvZ2Rpb2JqLmNdCglDb21wbGV0ZWQgT0JKX1hYWCBkZWZpbmVzIGluIGdkaS5oLCByZW1vdmVkIE9CSl9YWFggaW4gZ2Rpb2JqLmMgCglhbmQgaW5jbHVkZWQgZ2RpLmggaW5zdGVhZC4gSW1wbGVtZW50ZWQgR2V0T2JqZWN0VHlwZTMyKCkuCgpUaHUgT2N0IDE2IDE3OjIxOjMyIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm9dCglGaXhlZCBXSU4zMiBhbmQgTWFrZWZpbGVzIGVudHJpZXMgb2YgUmVmZXJlbmNlIG1hbnVhbCBub2RlLCB0aGF0CgltYWRlIG1ha2VpbmZvIGR1bXAgY29yZS4KCk1vbiBPY3QgMTMgMTc6MTU6NTcgMTk5NyAgUm9iZXJ0IFdpbGhlbG0gIDxyb2JlcnRAcGh5c2lvbC5tZWQudHUtbXVlbmNoZW4uZGU+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgbWlzc2luZyBtYXRoIGZ1bmN0aW9ucyB5MCgpLCB5MSgpLCB5MigpLCBmbG9vcigpLCBmcmV4cCgpLAoJbGRleHAoKSwgbW9kZigpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDEyIDE1OjAzOjAxIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvcmVsYXkuY10KCVJlbGF5IGRlYnVnZ2luZyBlbnRyeSBwb2ludHMgYXJlIG5vdyBnZW5lcmF0ZWQgb24gdGhlIGZseSBmb3IKCVdpbjMyIERMTHMuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglBZGRlZCBWQV9MSVNUMTYgdHlwZSBhbmQgbWFjcm9zIHRvIGFjY2VzcyBhcmd1bWVudHMgb24gdGhlIDE2LWJpdAoJc3RhY2suCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgR2xvYmFsSGFuZGxlMzIgdG8gd29yayB3aXRoIGZpeGVkIGJsb2Nrcy4KCgkqIFttaXNjL2RkZW1sLmNdIChOZXcgZmlsZSkKCUFkZGVkIGEgbG90IG9mIHN0dWJzIGZvciBEREVNTCBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJQWRkZWQgR2V0L1NldEdyYXBoaWNzTW9kZSgpLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgYSBmZXcgc3R1YnMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVJlbW92ZWQgJ2J5dGUnLCAnd29yZCcsICdsb25nJyBhbmQgJ3JldHVybicgZW50cnkgcG9pbnRzIGZvciBXaW4zMi4KCSdyZWdpc3RlcicgZnVuY3Rpb25zIGNhbiBubyBsb25nZXIgdGFrZSBhcmd1bWVudHMgaW4gV2luMzIuCiAJVGhlIFdpbjMyIE5FIG1vZHVsZSBpcyBub3cgZ2VuZXJhdGVkIGJ5IE1PRFVMRV9DcmVhdGVEdW1teU1vZHVsZS4KCUNhbGxGcm9tMzIgY2FsbGJhY2tzIHJlbW92ZWQgZXhjZXB0IGZvciByZWdpc3RlciBmdW5jdGlvbnMuCgpGcmkgT2N0IDEwIDE4OjIyOjE4IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L01ha2VmaWxlLmluXSBbZ3JhcGhpY3Mvd2luMTZkcnYvYnJ1c2guY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L2dyYXBoaWNzLmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCgkgIFtncmFwaGljcy93aW4xNmRydi9vYmplY3RzLmNdIFtncmFwaGljcy93aW4xNmRydi9wZW4uY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvdGV4dC5jXQoJICBbaW5jbHVkZS9jYWxsYmFjay5oXSBbaW5jbHVkZS93aW4xNmRydi5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgcGVucyBhbmQgYnJ1c2hlcyBpbiBTZWxlY3RPYmplY3QuIEFkZGVkIHN1cHBvcnQKCWZvciBMaW5lVG8sIE1vdmVUb0V4LCBQYXRCbHQgKHZlcnkgcHJlbGltaW5hcnkpLCBQb2x5Z29uIGFuZAoJUmVjdGFuZ2xlLiBUZXh0IGlzIGRyYXduIGluIHRoZSBjb3JyZWN0IHBsYWNlIG1vcmUgb2Z0ZW4uIFRoZXNlCgljaGFuZ2VzIG1heSBvbmx5IHdvcmsgd2l0aCB0aGUgV2luZG93cyBQb3N0c2NyaXB0IGRyaXZlciBzaW5jZQoJbWFueSBvdGhlciBkcml2ZXJzIG5vdyBuZWVkIG1vcmUgR0RJIHN1cHBvcnQuCgpUdWUgT2N0ICA3IDIxOjA2OjIzIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW2RlYnVnZ2VyL2V4cHIuY10KCUZpeGVkIHR5cG8gZm9yIHRoZSA+PiBvcGVyYXRvci4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgU3dpdGNoU3RhY2tUbygpOyBpdCB1c2VkIHRvIHJldHVybiB3aXRoIHRoZSBuZXcgc3RhY2sgcGxhY2VkCglmb3VyIGJ5dGVzIHRvbyBoaWdoIGluIG1lbW9yeS4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KCVJlbW92ZWQgcHJvYmxlbWF0aWMgbmFtZXRhYmxlIGNvZGUgaW50cm9kdWNlZCBpbiBXaW5lIDk3MDkxNC4KClR1ZSBPY3QgIDcgMDI6MjQ6MTIgMTk5NyAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAY3MudG9yb250by5lZHU+CgoJKiBbY29udHJvbHMvY29tbWN0cmwuY10KCUFkZGVkIHRoaXMgZmlsZXMgdG8gaG9sZCBmdW5jdGlvbnMgZnJvbSB0aGUgY29tY3RsMzIuZGxsCglBZGRlZCB0byB0aGlzIGZpbGVzIHNvbWUgZnVuY3Rpb25zIHNjYXR0ZXJlZCBpbiBkaWZmZXJlbnQgcGxhY2VzCgkoc3VjaCBhcyBJbml0Q29tbW9uQ29udHJvbHMpIGFuZCBhZGRlZCBzb21lIG5ldyBvbmVzIGFzIHdlbGwuCgoJKiBbaW5jbHVkZS9zeXNjb2xvci5oXSBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgcHJvcGVyIGVudHJpZXMgZm9yIGFsbCBwb3NzaWJsZSBDT0xPUl8qIHZhbHVlcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglNb2RpZmllZCBHZXRTeXNDb2xvckJydXNoIHRvIHJldHVybiB0aGUgY29ycmVjdCBicnVzaCBmb3IgCglhbGwgcG9zc2libGUgQ09MT1JfKiBjb25zdGFudHMuCgpTYXQgT2N0ICA0IDIzOjM1OjIwIDE5OTcgIFUuQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3dpbjMyL2Vudmlyb25tZW50LmNdCglBbm90aGVyIGFwcHJvYWNoIHRvIGdldCBhY2Nlc3MgdG8gYW4gdW5yZXN0cmljdGVkIGNvbW1hbmRsaW5lLgoKCSogW21pc2MvY3J0ZGxsLmNdCglNYWtlIGZjbG9zZSB3b3JrIGFnYWluLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10KCVVzZSBzcHJpbnRmIGZvciBjcnRkbGwtc3ByaW50ZiBhZ2FpbiBhcyBlLmcuICVnIGlzIG5vdCBhdmFpbGFibGUKCWZvciB3c3ByaW50Zi4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglNYWtlIFdQUl9TVFJJTkcgd29yayBpbiBtb3JlIHNpdHVhdGlvbnMuCglBZGRlZCBkZWJ1ZyBvdXRwdXQgZm9yIHRoZSB3c3ByaW50ZiBmdW5jdGlvbnMuCgoJKiBbbWlzYy9jcnRkbGwuY10gW21pc2MvbWFpbi5jXQoJVXNlIGFyZ3ZbMF0gYXMgY29tYW5kIHdpdGggQ1JURExMX3N5c3RlbS4KCkZyaSBPY3QgIDMgMTQ6MDA6MjkgTUVUIERTVCAxOTk3ICBKYW4gV2lsbGFtb3dpdXMgIDxqYW5AamFuaGguc2huZXQub3JnPgoKCSogWyovKl0KICAgICAgICBSZW1vdmVkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBbbXNkb3MvaW50MTUuY10KICAgICAgICBOZXcgSU5UIDE1IGhhbmRsZXIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBTZXAgMjcgMTI6MzY6NTYgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyL3JlbGF5LmNdCglNYWRlIENhdGNoIGFuZCBUaHJvdyBhbHNvIHNhdmUgJXNpIGFuZCAlZGkgKHVudGVzdGVkKS4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUFkZGVkIGNoZWNrIGZvciAlZnMgYW5kICVncyBpbiBTRUxFQ1RPUl9GcmVlQmxvY2suCgoJKiBbcmMvd2luZXJjLmNdCglHZW5lcmF0ZWQgZmlsZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiBXaW5lIGluY2x1ZGVzLgoJTWFkZSAuaCBnZW5lcmF0aW9uIG9wdGlvbmFsLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtsb2FkZXIvdGFzay5jXQoJQWRkZWQgQ0FMTDMyX0luaXQgZnVuY3Rpb24uCglBZGRlZCBwb3NzaWJpbGl0eSB0byBwYXNzIGFyZ3VtZW50cyB3aGVuIHVzaW5nIENBTExUTzE2X3JlZ3NfLgoJMzItYml0IHN0YWNrIHBvaW50ZXIgaXMgbm93IHNhdmVkIG9uIHRoZSAxNi1iaXQgc3RhY2ssIGluc3RlYWQgb2YKCXVzaW5nIElGMTYzMl9TYXZlZDMyX2VzcC4KCVJlbW92ZWQgQ2FsbFRvMzIgY2FsbGJhY2tzLgoKCSogW3Rvb2xzL21ha2VkZXAuY10gWyovTWFrZWZpbGUuaW5dCglBZGRlZCBzdXBwb3J0IGZvciBkaXJlY3RseSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBmb3IgLnksIC5sIGFuZAoJLnJjIGZpbGVzLiBNb2RpZmllZCB0aGUgbWFrZWZpbGVzIHRvIHVzZSB0aGlzIGZlYXR1cmUuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFtpZjE2MzIvdGh1bmsuY10KCVVzZSBDQUxMVE8xNl9yZWdzIHRvIGNhbGwgd2luZG93IHByb2NlZHVyZXMuCgpUaHUgU2VwIDI1IDEyOjE4OjU3IDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQ2hhbmdlZCBlbnRyeSBmb3IgU3dpdGNoU3RhY2tCYWNrIHRvIHJlbW92ZSBhcmd1bWVudHMgZnJvbSBzdGFjawoJdXBvbiByZXR1cm4gKGFyZ3VtZW50cyBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyBTd2l0Y2hTdGFja1RvKCkpLgoJQm9ybGFuZCBDKysgNC4wIG5vdyBjb21waWxlcyAiSGVsbG8gV29ybGQiIChidXQgY3Jhc2hlcyBhZnRlcgoJb3V0cHV0dGluZyB0aGUgLmV4ZSkuCgpXZWQgU2VwIDI0IDEzOjU0OjQ0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJU2VhcmNoUGF0aCBtaWdodCBnZXQgTlVMTCBidWZmZXIgKGVtcHR5IExSVSBsaXN0IGluIHdvcmRwYWQpLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQWRkZWQgU1VuTWFwTFMqLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJQmUgYWJsZSB0byBydW4gZXhlY3V0ZWFibGVzIGZyb20gbm9uIG1tYXAoKWJsZSBmaWxlc3lzdGVtcy4KCVBFX0xvYWRMaWJyYXJ5IGFkZHMgbGlicmFyeXMgbG9hZGVkIGJ5IGFub3RoZXIgcHJvY2VzcyB0bwoJaXRzIG93biBtb2RyZWYgbGlzdCB0b28uCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXVtpbmNsdWRlL2FjY2VsLmhdW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgYWNjZWxlcmF0b3IgbGVha2FnZSwgdXNlIFNESyBkZWZpbmVzL25hbWVzLgoKCSogW2dyYXBoaWNzL2Vudi5jXVttaXNjL21haW4uY10KCVNldC9HZXRFbnZpcm9uZW1udCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlbnZpcm9ubWVudCB2YXJzLAoJYnV0IHdpdGggUHJpbnRlciBFbnZpcm9ubWVudC4KCgkqIFtncmFwaGljcy9lc2NhcGUuY10KCUVzY2FwZTMyOiBtYXAgYXJncyBiYWNrIHRvIHNlZ21lbnRlZCBwb2ludGVycy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV1NfUE9QVVB8V1NfQ0hJTEQgd2luZG93cyBkb24ndCBuZWVkIGEgcGFyZW50IHdpbmRvdyAoU0RLKS4KClR1ZSBTZXAgMTYgMTQ6NDA6MTYgMTk5NyAgUm9iZXJ0IFdpbGhlbG0gIDxyb2JlcnRAcGh5c2lvbC5tZWQudHUtbXVlbmNoZW4uZGU+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCUFkZGVkIHNpZ25hbCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgU2VwIDExIDE4OjI0OjU2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9kYy5jXQoJSW4gRENfU2V0dXBHQ0ZvclBhdEJsdCwgcmVwbGFjZSBSMl9OT1QgYnkgR1h4b3Igd2l0aCAoYmxhY2sgeG9yIHdoaXRlKS4KClR1ZSBTZXAgIDkgMjM6MDQ6MDIgMTk5NyAgVS4gQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10gCglEbyBub3Qgd3JpdGUgZGVidWdnaW5nIGluZm8gdW5jb25kaXRpb25hbGx5IHRvIHN0ZGVyci4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglDYWxsIFBST0ZJTEVfR2V0U2VjdGlvbiBpbiBQUk9GSUxFX0dldFN0cmluZyBmb3Iga2V5X25hbWUgIiIgdG9vLgoKCSogW21pc2MvY3J0ZGxsLmNdCglNYW55IG5ldyBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ2xpZW50VG9TY3JlZW4xNiBkb2Vzbid0IGhhdmUgYSByZXR1cm4gdmFsdWUuCgpTdW4gU2VwICA3IDEwOjA2OjM5IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21pc2MvbWFpbi5jXSBbQVVUSE9SU10KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCgkqIFtpZjE2MzIvKi5zcGVjXSBbaWYxNjMyL2J1aWx0aW4uY10gW3Rvb2xzL2J1aWxkLmNdCglPcmRpbmFsIGJhc2UgZm9yIFdpbjMyIERMTHMgaXMgbm93IGNvbXB1dGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUKCWxvd2VzdCBvcmRpbmFsIGZvdW5kLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCVdJTkFQSSBpcyBub3cgZGVmaW5lZCBhcyBhdHRyaWJ1dGUoKHN0ZGNhbGwpKS4gVGhpcyB3aWxsIHJlcXVpcmUKCWdjYyB0byBjb21waWxlLgoKCSogW2lmMTYzMi90aHVuay5jXQoJUmVtb3ZlZCBXaW4zMiB0aHVua3MgKG5vIGxvbmdlciBuZWVkZWQgd2l0aCBzdGRjYWxsKS4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQoJTWFrZSBzdXJlIHdlIG9ubHkgcmVmZXJlbmNlIGNkZWNsIGZ1bmN0aW9ucyBpbiB0aGUgc3BlYyBmaWxlLgoKCSogW29iamVjdHMvZGMuY10KCVVzZSBDYXBOb3RMYXN0IGRyYXdpbmcgc3R5bGUgZm9yIDEtcGl4ZWwgd2lkZSBsaW5lcy4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgJ2RvdWJsZScgYXJndW1lbnQgdHlwZS4KCUFkZGVkICd2YXJhcmdzJyBmdW5jdGlvbiB0eXBlIGZvciBXaW4zMi4KCU1hZGUgQ2FsbFRvMTZfeHh4IGZ1bmN0aW9ucyBzdGRjYWxsLgoKRnJpIFNlcCAgNSAxNDo1MDo0OSAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3Rvb2xzL2J1aWxkLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglNb3JlIGZpeGVzIHRvIGdldCBtZXNzYWdlIGV4Y2hhbmdlIGNsb3NlciB0byB0aGUgb3JpZ2luYWwuCgoJKiBbbWlzYy9zcHkuY10KCU1lc3NhZ2UgbG9ncyBub3cgY29udGFpbiB3aW5kb3cgbmFtZXMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10gW2xvYWRlci90YXNrLmNdCgkgIFtvYmplY3RzL2N1cnNvcmljb24uY10gW3dpbmRvd3MvdXNlci5jXQoJQWRkZWQgc29tZSBvYnNjdXJlIGZlYXR1cmVzIHRvIGZpeCBtZW1vcnkgbGVha3MuCgpGcmkgU2VwICA1IDAwOjQ2OjI4IDE5OTcgIEphbiBXaWxsYW1vd2l1cyA8amFuQGphbmhoLnNobmV0Lm9yZz4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW3dpbjMyL25ld2Zucy5jXQoJQWRkZWQgc3R1YiBmb3IgVVRSZWdpc3RlcigpIGFuZCBVVFVuUmVnaXN0ZXIoKS4KClRodSBTZXAgIDQgMTI6MDM6MTIgMTk5NyAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+CgkqIFtjb250cm9scy9lZGl0LmNdCglBbGxvdyBBU0NJSSBjb2RlcyA+IDEyNyBpbiBXTV9DSEFSLgoKTW9uIFNlcCAgMSAxNzoyMzoyNCAxOTk3ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUluIEluaXRDb21tb25Db250cm9scywgcmVtZW1iZXIgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCgliZWNhdXNlIGxwc3pDbGFzc05hbWUgd2FzIG1hZGUgdG8gcG9pbnQgdG8gYSBsb2NhbCBhcnJheQoJQWRkZWQgdGhlIFByb2dyZXNzQmFyIHRvIHRoZSBsaXN0IG9mIGltcGxlbWVudGVkIGNvbnRyb2xzLgoJQ2FsbCBJbml0Q29tbW9uQ29udHJvbHMgZnJvbSBXSURHRVRTX0luaXQgdG8gcmVnaXN0ZXIgYWxsCglpbXBsZW1lbnRlZCBDb21tb24gQ29udHJvbHMuCgkKCSogW2luY2x1ZGUvY29tbWN0cmwuaF0KCUFkZGVkIG1pc2MgZGVjbCBmb3IgdGhlIFByb2dyZXNzIEJhci4KCgkqIFtjb250cm9scy9wcm9ncmVzcy5jXSBbaW5jbHVkZS9wcm9ncmVzcy5oXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbXBsZW1lbnRpb25nIHRoZSBQcm9ncmVzcyBCYXIgY2xhc3MuCgoJKiBbb2JqZWN0cy9icnVzaC5oXQoJSW1wbGVtZW50YXRpb24gZm9yIEdldFN5c0NvbG9yQnJ1c2hbMTZ8MzJdCgoJKiBbY29udHJvbHMvc3RhdHVzLmNdCglVc2UgRHJhd0VkZ2UgdG8gZHJhdyB0aGUgYm9yZGVycyBhbmQgZmlsbCB0aGUgYmFja2dyb3VuZAoKCSogW2NvbnRyb2xzL3VpdG9vbHMuY10KCUFkZGVkIERyYXdEaWFnRWRnZTMyIGFuZCBEcmF3UmVjdEVkZ2UzMgoKCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdCglJbXBsZW1lbnQgRHJhd0VkZ2VbMTZ8MzJdCglTdGFydGVkIERyYXdGcmFtZUNvbnRyb2wzMgoKTW9uIFNlcCAgMSAxMDowNzowOSAxOTk3ICBMYXdzb24gV2hpdG5leSA8bGF3c29uX3doaXRuZXlAanVuby5jb20+CgoJKiBbbWlzYy9jb21tLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVNldENvbW1FdmVudE1hc2sgcmV0dXJucyBhIFNFR1BUUi4KClN1biBBdWcgMzEgMjM6Mjg6MzIgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdW2xvYWRlci9tb2R1bGUuY11baW5jbHVkZS9wZV9pbWFnZS5oXQoJICBbaW5jbHVkZS9tb2R1bGUuaF0KCUNsZWFuZWQgdXAgdGhlIHdob2xlIFdpbjMyIGxpYnJhcnkgbWVzcyAoYSBiaXQpLgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCglJZiAnd2luZScgaGFzIG5vIGFic29sdXRlIHBhdGggYW5kIGlzbid0IGZvdW5kLCBjaGVjayAkUEFUSCB0b28uCgoJKiBbbWlzYy9vbGUybmxzLmNdCglTb21lIGZpeGVzLgoKCSogW21pc2MvdmVyLmNdCglBZGRlZCBzdXBwb3J0IGZvciBQRSBzdHlsZSB2ZXJzaW9uIHJlc291cmNlcy4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglDaGVjayBmb3IgTlVMTCBwb2ludGVycyB0byBfbHN0ciogZnVuY3Rpb25zLCBqdXN0IGFzIFdpbmRvd3M5NSBkb2VzLgoKCSogW211bHRpbWVkaWEvdGltZS5jXQoJTWFkZSBsaXN0IG9mIHRpbWVycyBhIHNpbXBsZSBsaW5rZWQgbGlzdC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCU5ldHNjYXBlIDMgc2VlbXMgdG8gcGFzcyBORUdBVElWRSByZXNvdXJjZSBJZHMgKGluIGFuCgl1bnNpZ25lZCBpbnQsIHllcykuIERvbid0IGtub3cgd2h5LCBmaXhlZCBpdCBhbnl3YXkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUxvYWRJbWFnZVcgYWRkZWQuCgoJKiBbaW5jbHVkZS93aW4uaF1bd2luZG93cy93aW4uY10KCUNoYW5nZSB3SURtZW51IGZyb20gVUlOVDE2IHRvIFVJTlQzMiBhbmQgY2hhbmdlZCB0aGUKCVNldFdpbmRvdyhMb25nfFdvcmQpIGFjY29yZGluZ2x5LgoKVGh1IEF1ZyAyOCAxOTozMDowOCAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkIGEgZmV3IG1vcmUgY29sb3JzIGRlZmluZWQgZm9yIFdpbjk1LgoJQWRkIGEgZmV3IG1vcmUgYnJ1c2ggc3R5bGVzLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KIAlBZGQgZXJyb3IgY2hlY2tzIGZvciBTWVNDT0xPUl9TZXRDb2xvciwgU1lTQ09MT1JfSW5pdCwKCUdldFN5c0NvbG9yMTYsIEdldFN5c0NvbG9yMzIuICBBZGQgc3VwcG9ydCBmb3IgYWJvdmUgY29sb3JzLgoKU3VuIEF1ZyAyNCAxNjoyMjo1NyAxOTk3ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hhbmdlZCBtbWlvRGVzY2VuZCB0byB1c2UgbW1pbyBmdW5jdGlvbnMgZm9yIGZpbGUgSS9PLCBuZWNjZXNzYXJ5Cglmb3IgbWVtb3J5IGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXVnIDIzIDAwOjA1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJQWRkZWQgc29tZSBzdHVicy4KCgkqIFtpbmNsdWRlL25lZXhlLmhdIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCB3YXJuaW5nIGZvciBPUy8yIGV4ZWN1dGFibGVzLgoKCSogW211bHRpbWVkaWEvbWlkaS5jXQoJU2hvcnRlbmVkIE1JRElPVVQgZHJpdmVyIHZlcnNpb24gc3RyaW5nIHRvIGJlIGxlc3MgdGhhbiAzMSBjaGFycy4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJRml4ZWQgRGVsZXRlT2JqZWN0MzIoKSB0byByZWFjdCBwcm9wZXJseSB3aGVuIGNhbGxlZCB3aXRoIHN0b2NrIG9iamVjdC4KCkZyaSBBdWcgMjIgMTg6MDM6MjYgMTk5NyAgRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCgkqIFtjb250cm9scy91cGRvd24uY10gW2luY2x1ZGUvdXBkb3duLmhdCglGaXJzdCBhdHRlbXB0IGF0IGltcGxlbWVudGlvbmcgdGhlIFVwRG93biBjbGFzcy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGRlZCB0aGUgVXBEb3duIGNsYXNzIHRvIGJlIGluaXRpYWxpemVkIGJ5IEluaXRDb21tb25Db250cm9scygpLgoKV2VkIEF1ZyAyMCAxODowMTozMyAxOTk3ICBEb3VnIFJpZGd3YXkgPHJpZGd3YXlAcm91dGguVUNTRC5FRFU+CgoJKiBbZ3JhcGhpY3MvKl0gW29iamVjdHMvKl0gW2luY2x1ZGUvZ2RpLmhdCglNYWRlIGFsbCBHREkgb2JqZWN0cyAoZXhjZXB0IERDcykgbW92ZWFibGUuCgpNb24gQXVnIDE4IDAzOjI1OjMwIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9ldmVudC5jXSBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfZG5zLmNdCglSZW1vdmVkIElQQyBjb21tdW5pY2F0aW9uIHRvIHNwZWVkIHVwIHdpbnNvY2sgc2VydmljZXMKCSh0ZXN0ZWQgb25seSB3aXRoIDE2LWJpdCBuZXRzY2FwZSAzLjAzKS4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10gW2RvY3VtZW50YXRpb24vZm9udHNdCglNaXNjZWxsYW5lb3VzIGltcHJvdmVtZW50cy4gVXBkYXRlZCBkb2NzLgoKU3VuIEF1ZyAxNyAyMDozOTo1NSAxOTk3ICBJbmdvIFNjaG5laWRlciA8c2NobmVpZGlAaW5mb3JtYXRpay50dS1tdWVuY2hlbi5kZT4KCgkqIFttaXNjL2NvbW0uY10KCUEgY291cGxlIG9mIGJ1ZyBmaXhlcy4KClN1biBBdWcgMTcgMTk6Mjk6MjIgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZGVidWdnZXIvZGJnLnldCglEaXNwbGF5IG5leHQgaW5zdHJ1Y3Rpb24gYWZ0ZXIgc3RlcGkvbmV4dGkuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFt0b29scy9idWlsZC5jXQoJUmVwbGFjZWQgQ2FsbFRvMzJfTGFyZ2VTdGFjayB3aXRoIHRoZSBDQUxMX0xBUkdFX1NUQUNLIG1hY3JvIGZvcgoJYmV0dGVyIFdpbmVsaWIgc3VwcG9ydC4KCgkqIFtpbmNsdWRlL3NpZ2NvbnRleHQuaF0KCVJlbmFtZWQgdG8gc2lnX2NvbnRleHQuaCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBsaWJjLgoKCSogWyovKl0KCUFsbCBBUEkgZnVuY3Rpb25zIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBXSU5BUEkgaW4gcHJldmlzaW9uIG9mCglmdXR1cmUgV2luZWxpYiBpbnRlZ3JhdGlvbi4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttZW1vcnkvbGR0LmNdCglGaXhlZCBhc3NlbWJseSBjb2RlIHRvIGJlIC1mUElDIGNvbXBhdGlibGUuCgpUaHUgQXVnIDE0IDE0OjM4OjE1IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bd2luMzIvZXhjZXB0LmNdCglfZ2xvYmFsX3Vud2luZCwgX2xvY2FsX3Vud2luZCBzdHViIGFkZGVkLgoKCSogW29iamVjdHMvZGliLmNdCQoJRG9uJ3QgcmVhZCBtZW1vcnkgeW91IGRvbid0IGV2ZW4gbmVlZCBmb3IgdGhlIHRhcmdldCBiaXRtYXAgKGZpeGVzCglvbmUgJ2xhenknIHByb2dyYW0pLgoKCSogW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvdGh1bmsuY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCgkgIFt3aW4zMi9vcmRpbmFscy5jXVttZW1vcnkvc2VsZWN0b3IuY11bbWVtb3J5L2dsb2JhbC5jXQoJICBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQvbW92ZWQgc29tZSBtb3JlIHdpbjk1IG9yZGluYWwgc3R1ZmYuIEltcGxlbWVudGVkIFFUX1RodW5rCgkobm90IDEwMCUgY29ycmVjdCB5ZXQpIGFuZCBzb21lIGZyaWVuZHMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglBZGQgcG9zc2liaWxpdHkgdG8gYnJlYWsgYXQgdGhlIERMTCBlbnRyeXBvaW50LgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXVttaXNjL2NvbW1kbGcuY11bc2NoZWR1bGVyL3RocmVhZC5jXQoJTWlzYyBidWdmaXhlcyBhbmQgYWRkaXRpb25zLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVRoZSByZWdpc3RyeSBzZWVtcyB0byBiZSBjYXNlLXByZXNlcnZpbmcgYnV0IGNhc2UtaW5zZW5zaXRpdmUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQkKCUFkYXB0ZWQgdG8gbmV3IC9wcm9jL21lbWluZm8gZm9ybWF0LgoKCSogW29iamVjdHMvZm9udC5jXVtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCUZPTlRfU2VsZWN0T2JqZWN0IGFuZCBHZXRUZXh0TWV0cmljcyogZ2V0IHBhc3NlZCByYW5nZXMgaW4gbG9naWNhbAogCWFuZCBub3QgZGV2aWNlIHBvaW50cyAodGhhbmtzIHRvIE1hcmlvbiBSZXl6bCBmb3IgcG9pbnRpbmcgdGhpcwogCW91dCkuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJVXNlIHRoZSB3aW5kb3dzIG93biBEQyBpZiBwcmVzZW50IChUaGUgY2FyZXQgY29vcmRpbmF0ZXMgYXJlCglsb2dpY2FsIGNvb3JkaW5hdGVzIGJhc2VkIG9uIGl0KS4gRml4ZXMgYW5vdGhlciBBTUlQUk8gcHJvYmxlbS4KCldlZCBBdWcgIDYgMTg6MjI6MjIgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb250cm9scy9tZW51LmNdCglHZW5lcmFsIGNsZWFuLXVwIGFuZCBXaW4zMiB3b3JrOiBzcGxpdCBpdGVtX2ZsYWdzIGludG8gZlR5cGUgYW5kCglmU3RhdGU7IHNwbGl0IGl0ZW1faWQgaW50byB3SUQgYW5kIGhTdWJNZW51LiAgSW1wcm92ZWQKCWRlYnVnLXByaW50aW5nLiAgSW1wbGVtZW50ZWQgSW5zZXJ0TWVudUl0ZW0zMltBV10sCglTZXRNZW51RGVmYXVsdEl0ZW0zMiwgYW5kIFNldE1lbnVJdGVtSW5mbzMyW0FXXS4gIEZpeGVkCglHZXRNZW51SXRlbUluZm8zMltBV10uCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJRGVmaW5lIGFib3ZlIG5ldyBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbmUgTUZfREVGQVVMVCBhbmQgTUZfUklHSFRKVVNUSUZZLiAgUHJvdG90eXBlIGFib3ZlIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL21lbnUuaF0KCURvbid0IHByb3RvdHlwZSBub3ctc3RhdGljIE1FTlVfSW5pdFN5c01lbnVQb3B1cC4KCgkqIFtpbmNsdWRlL2NvbW0uaF0KCVJlZHVjZSBNQVhfUE9SVFMgdG8gOSAod2hpY2ggdGhlIHByb2ZpbGUgY29kZSBjYW4gaGFuZGxlKS4KClR1ZSBBdWcgIDUgMjA6MTY6MjIgMTk5NyAgVmljdG9yIFNjaG5laWRlciA8dmlzY2huZUBpYm0ubmV0PgoKCSogW2xpYnJhcnkvd2luZXN0dWIuY10gW2xpYnRlc3QvZXhwYW5kLmNdCglUaGVzZSBwYXRjaGVzIGxldCBwZW9wbGUgcG9ydGluZyBXaW5kb3dzIGFwcHMgY29tcGlsZSB0aGVtIHVzaW5nCgl0aGUgc2FtZSBjb252ZW50aW9ucyByZWdhcmRpbmcgZ2xvYmFsIF9hcmdjIGFuZCBfYXJndiBhcyB0aG9zZSBvbgoJV2luZG93cyBDL0MrKyBjb21waWxlcnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgIDMgMTQ6MDM6NDMgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZG9jdW1lbnRhdGlvbi9NYWtlZmlsZS5pbl0KCUNyZWF0ZSBsaW5rcyBmb3IgZmlsZXMgaW5jbHVkZWQgZnJvbSB3aW5lLnRleGluZm8uCgoJKiBbd2luZS5tYW5dCglNb3ZlZCB0byBkb2N1bWVudGF0aW9uIGRpci4KCgkqIFtpZjE2MzIvYnVpbHRpbi5jXQoJTWFkZSBTWVNURU0uRExMIGFsd2F5cyBsb2FkZWQgYnkgZGVmYXVsdC4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFtpZjE2MzIvc2lnbmFsLmNdCglTcGxpdCBzaWduYWwuYyBpbiBnZW5lcmljL2VtdWxhdG9yLXNwZWNpZmljIHBhcnRzLgoKCSogW21pc2Mvc3lzdGVtLmNdIFtpZjE2MzIvdGh1bmsuY10KCUltcGxlbWVudGVkIHN5c3RlbSB0aW1lciBmdW5jdGlvbnMuCglGaXhlZCBJbnF1aXJlU3lzdGVtIHBhcmFtZXRlcnMuCgoJKiBbbXNkb3MvaW9wb3J0cy5jXQoJRGVmaW5lZCBpbmIvb3V0YiBmdW5jdGlvbnMgdG8gYXZvaWQgaW5jbHVkaW5nIGFzbS9pby5oLgoJVXNlIHRoZSByaWdodCBpbnN0cnVjdGlvbiBmb3Igd29yZCBhbmQgZHdvcmQgZGlyZWN0IGFjY2Vzcy4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglGaXhlZCBDYWxsVG8xNiB1c2FnZS4KClNhdCBBdWcgMiAxMzowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglXaGVuIHRleHQgaXMgaW5zZXJ0ZWQgaW50byBhIG5ld2x5IGNyZWF0ZWQgZWRpdGxpbmUsIHRoZSBjYXJldAoJaXMgcGxhY2VkIGFmdGVyIHRoZSB0ZXh0LiBTaG91bGQgYmUgcGxhY2VkIGJlZm9yZSB0aGUgdGV4dC4gRml4ZWQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJUmVtb3ZlZCBPX1RSVU5DIGZsYWcgZnJvbSBPRl9XUklURSBtb2RlIGluIF9sb3BlbjMyKCkuCglBY2NvcmRpbmcgdG8gZG9jIF9sb3BlbigpIG5ldmVyIHRydW5jYXRlcyBmaWxlcy4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbWlzYy9jb21tLmNdCglBZGRlZCBzdHViIGZvciBFbmFibGVDb21tTm90aWZpY2F0aW9uKCkuCgoJKiBbbWlzYy92ZXIuY10KCUZpeGVkIHByb2JsZW0gd2l0aCBWZXJRdWVyeVZhbHVlKigpIHJ1bm5pbmcgb3ZlciBlbmQgb2YgbmFtZSB0YWJsZQoJaW4gcmFyZSBjYXNlcy4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJRW5oYW5jZWQgaW9jdGxHZXREZXZpY2VJbmZvKCkgdG8gY29ycmVjdGx5IHJldHVybiB0aGUgY3VycmVudCBkcml2ZS4KCgkqIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGpveXN0aWNrIHN1cHBvcnQgISEhCglOZWVkcyBMaW51eCA+PSAyLjEuNDUgb3Igam95c3RpY2stMC44LjAudGFyLmd6LgoKRnJpIEF1ZyAgMSAxODowMjowOSAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCURlZmluZSBEcmF3QW5pbWF0ZWRSZWN0czMyLgoKCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdCgkoRHJhd0FuaW1hdGVkUmVjdHMzMik6IENyZWF0ZSBzdHViLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUNvcGUgd2l0aCBOVUxMIGNsYXNzIGluIFJlZ1F1ZXJ5SW5mb0tleTMyQS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGQgR2V0TWVudUl0ZW1JbmZvMzJbQVddLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCShJbnNlcnRNZW51MzJBKTogVXBncmFkZSBmbGFncyB0byA4IGhleC1kaWdpdHMuCgkoTUVOVUVYX1BhcnNlUmVzb3VyY2UpOiBGaXJzdCBzaG90IGF0IGltcGxlbWVudGF0aW9uLgoJKExvYWRNZW51SW5kaXJlY3QzMkEpOiBIYW5kbGUgZXh0ZW5kZWQgbWVudXMuCgkoR2V0TWVudUl0ZW1JbmZvMzJbQVddKTogRmlyc3Qgc2hvdCBhdCBpbXBsZW1lbnRhdGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluZSBNRlRfKiwgTUZTXyosIE1JSU1fKiBtYWNyb3MuICBEZWZpbmUgTUVOVUlURU1JTkZPW0FXXQogCXN0cnVjdHVyZXMgYW5kIHBvaW50ZXJzLgoKCSogW01ha2VmaWxlLmluXQoJKGV0YWdzKTogQWRkIFRBR1MgYXMgdGFyZ2V0LgoKCSogW2lmMTYzMi9jb21jdGwzMi5zcGVjXQoJVXNlIFdpbmRvd3MgOTUncyBvcmRpbmFscy4gIEFkZCBhIGZldyBtaXNzaW5nIHN0dWJzLgoKVGh1IEp1bCAzMSAxNDowMToxMyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXggZm9yIDE2IGNvbG9yIG1vZGUgb2YgWEZyZWUuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL29yZGluYWxzLmNdCglNb3ZlZC9hZGRlZCBzb21lIG9yZGluYWwgb25seSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBrZXJuZWwzMi5kbGwKCShtb3N0bHkgdGh1bmtpbmcgcHJlcGFyYXRpb24gc3R1ZmYpLgoKV2VkIEp1bCAzMCAwOToxNjozOCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCiAgICAgICAgRXNjYXBlKFNFVEFCT1JUUFJPQykgcmV0dXJucyBzdWNjZXNzIHRvIGtlZXAgcGJydXNoLmV4ZSBoYXBweS4KICAgICAgICBFc2NhcGUoTkVYVEJBTkQpIGltcGxlbWVudGVkIHRvIG1ha2UgSFAgUENMIHByaW50ZXIgZHJpdmVyIHdvcmsgaW4KIAl3b3JkLiAgU3R1YiBmb3IgUEFUQkxUIGFkZGVkIHRvIHN0YXJ0IHdvcmsgb24gcHJpbnRpbmcgbW9yZSB0aGFuCiAJdGV4dC4KCk1vbiBKdWwgMjggMTM6MTQ6MjggMTk5NyAgVmljdG9yIFNjaG5laWRlciA8dmlzY2huZUBpYm0ubmV0PgoKCSogW2xpYnRlc3QvZXhwYW5kLmNdCglOZXcgV2luZWxpYiB0ZXN0IHByb2dyYW0uCgpXZWQgSnVsIDIzIDA5OjM3OjEzIDE5OTcgIEFkcmlhbiBIYXJ2ZXkgPGFkcmlhbkBzZWxlY3QuY29tLmF1PgoKCSogW3Rvb2xzL2J1aWxkLmNdIFt0b29scy9idWlsZC1zcGVjLnR4dF0gW2lmMTYzMi9rZXJuZWwuc3BlY10KCSAgW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBhYmlsaXR5IHRvIHNldCBmaWxlbmFtZSB3aW5lIGNvbnNpZGVycyB0aGUgYnVpbHQtaW4gRExMcyAKCXRvIGJlIGluICB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBuYW1lLkRMTCB3aXRoIG5ldyAiZmlsZSIga2V5CglpbiAuc3BlYyBmaWxlcy4KCU1hZGUga2VybmVsIGZpbGVuYW1lIEtSTkwzODYuRVhFIChzb21lIHByb2dyYW1zIHVzZSB0aGlzIG5hbWUgCglleHBsaWNpdGx5IC0gQ2hlbU9mZmljZSBpbnN0YWxsIG5vdyBzdGFydHMgdXApLgoJTWFkZSB1c2VyIGZpbGVuYW1lIFVTRVIuRVhFIChqdXN0IHRvIGJlIHRpZHkpLgoKU3VuIEp1bCAyMCAyMzo1MTowMiAxOTk3ICBEYXZpZCBBLiBDdXRoYmVydCA8ZGFjdXRAaGVucnkuZWNlLmNtdS5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbbWlzYy90d2Vhay5jXSBbaW5jbHVkZS90d2Vhay5oXQoJRml4ZWQgTUVOVV9LZXlMZWZ0IGFuZCBNRU5VX0tleVJpZ2h0IHRvIGhhbmRsZSBtdWx0aXBsZS1jb2x1bW4KCW1lbnVzLiAgTWlzYyBtZW51IGRyYXdpbmcgaXNzdWVzIGZvciBXaW45NSB0d2Vha3MgZml4ZWQuICBNaXNjCgl3YXJuaW5ncyBmaXhlZC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglTcGFjZXMgYXJlIG5vdyBwZXJtaXR0ZWQgaW4gZmlsZS9wYXRoIG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUuCglJZiBtdWx0aXBsZSBtYXRjaGVzIGNhbiBiZSBtYWRlLCB0aGUgcHJlZmVycmVkIG1hdGNoIGlzIHRoZQoJcGF0aC9maWxlIHdpdGggZmV3ZXIgc3BhY2VzLgoKVHVlIEp1bCAyOSAwMjoyMToxNSAxOTk3ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFttaXNjL2NvbXBvYmouY10KCUFkZGVkIENMU0lERnJvbVN0cmluZyBhbmQgU3RyaW5nRnJvbUNMU0lELgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSnVsIDE5IDEzOjAzOjAxIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVNhdmUgdGhlIGNvbXBsZXRlICVlYnAgcmVnaXN0ZXIgaW4gQ2FsbEZyb20xNjsgZml4ZXMgYSBjcmFzaCB3aXRoCglMYWJWaWV3IHJlcG9ydGVkIGJ5IEFuZHJlYXMgTW9oci4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJQXZvaWQgZXhlY3V0aW5nIGEgYnVpbHQtaW4gRExMLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQ29udmVydGVkIHN0YXRpYyB3aW5kb3cgcHJvY2VkdXJlIHRvIFdpbjMyLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSBbaW5jbHVkZS9xdWV1ZS5oXQoJSGFja2VkIFNlbmRNZXNzYWdlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGludGVyLXRhc2sgbWVzc2FnZXMgd2l0aAoJU2VuZE1lc3NhZ2UzMkEvVy4KClN1biBKdWwgMTMgMTY6NTU6MzUgMTk5NyAgQmVybmhhcmQgUm9zZW5rcmFlbnplciA8YmVyb0BiZXJvLW9ubGluZS5tbC5vcmc+CgoJKiBbaXBjL2JpdF9hcnJheS5jXQoJRG9uJ3QgdXNlIGJpdG9wcy5oIGluIExpbnV4IDIuMS54ICh0aGVzZSB2ZXJzaW9ucyBkbyBub3QgcmV0dXJuCgl0aGUgcHJldmlvdXMgc3RhdGUgZm9yIGNsZWFyX2JpdCBhbmQgc2V0X2JpdCkKCgkqIFtpcGMvc2htX21haW5fYmxrLmNdCglBZGFwdCB0byBHTElCQydzIGlwY19wZXJtIHN0cnVjdHVyZS4KCgkqIFttZW1vcnkvbGR0LmNdCglJbmNsdWRlIDxhc20vdW5pc3RkLmg+IG9uIExpbnV4L0dMSUJDIHN5c3RlbXMgKHJlcXVpcmVkIGZvcgoJX3N5c2NhbGwzKS4KCldlZCBKdWwgOSAyMzo1MzoxOSAxOTk3ICBEYXZpZCBBLiBDdXRoYmVydCAgPGRhY3V0QGhlbnJ5LmVjZS5jbXUuZWR1PgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbZmlsZXMvcHJvZmlsZS5jXQoJQWRkZWQgUFJPRklMRV9HZXRXaW5lSW5pQm9vbCBhbmQgUFJPRklMRV9FbnVtZXJhdGVXaW5lSW5pU2VjdGlvbi4KCgkqIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0gW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy9zeXNtZXRyaWNzLmNdCglBbGwgc3lzbWV0cmljcyBtb3ZlZCB0byBhcnJheSAobm8gbW9yZSBjb25zdGFudCBtYWNyb3MpLiAgQWRkZWQKCU1PVVNFV0hFRUxQUkVTRU5UIG1ldHJpYy4KCgkqIFtpbmNsdWRlL2JpdG1hcC5oXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZGVkIE9CTV9Jbml0KCkgKHNlZSBhbHNvIGxvYWRlci9tYWluLmMpIGFuZCBtb3JlIHN1cHBvcnQgZm9yIFdpbjk1CgliaXRtYXBzOyBhZGRlZCBzaXplIGluZm8gdG8gT0VNIGJpdG1hcHMuCgoJKiBbaW5jbHVkZS9ncmFwaGljcy5oXSBbd2luZG93cy9ncmFwaGljcy5oXQoJQWRkZWQgR1JBUEhfRHJhd0dlbmVyaWNSZWxpZWZSZWN0LgoKCSogW2xvYWRlci9tYWluLmNdCglBZGRlZCBUV0VBS19Jbml0KCkgYW5kIFRXRUFLX0NoZWNrQ29uZmlndXJhdGlvbigpIGNhbGxzICh0aGUKCWxhdHRlciBjaGVja3MgZm9yIGludmFsaWQgZW50cmllcyBpbiB3aW5lLmNvbmYpLgoKCSogW2luY2x1ZGUvZGVidWcuaF0gW2luY2x1ZGUvc3RkZGVidWcuaF0gW2luY2x1ZGUvbm9uY2xpZW50LmhdCgkgIFtpbmNsdWRlL3R3ZWFrLmhdIFtjb250cm9scy9tZW51LmNdIFttaXNjL3R3ZWFrLmNdCgkgIFtvYmplY3RzL2dkaW9iai5jXSBbd2luZG93cy9zeXNjb2xvci5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCSAgW0JVR1NdIFtkb2N1bWVudGF0aW9uL3dpbjk1bG9va10KCUFkZGVkIHR3ZWFrcyBmb3IgV2luZG93cyA5NSBpbnRlcmZhY2Ugc3VwcG9ydC4gIFNlZQogCWRvY3VtZW50YXRpb24vd2luOTVsb29rIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIEVESVRfTW92ZUhvbWUgYnVnLgoKCSogW21pc2MvdmVyLmNdCglDaGFuZ2VkIG5hbWUgb2YgZHByaW50Zl92ZXJfc3RyaW5nIHRvIHZlcl9kc3RyaW5nIHRvIGZpeAoJcHJvYmxlbSB3aXRoIHRvb2xzL21ha2VfZGVidWcgdXRpbGl0eS4KCldlZCBKdWwgOSAyMTozMTo1NCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvYmplY3RzL2RpYi5jXQoJRG9uJ3QgdXNlIHBhbGV0dGVzIHdpdGggZGlicyB3aXRoIGJpQml0Q291bnQgPiA4LgoKCSogW21pc2Mvb2xlMm5scy5jXVttaXNjL3Zlci5jXQoJSXNWYWxpZExvY2FsZSwgRW51bVN5c3RlbUxvY2FsZXMgZml4ZWQgKHdpbmhscDMyLmV4ZSB3b3JrcykKCVNvbWUgVmVyTGFuZ3VhZ2UgY29kZWQgbW92ZWQgdG8gb2xlMm5scy5jLCBzb21lIGNsZWFudXBzLgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglGaXhlZCAiY2FwYWJpbGl0aWVzIDxkZXY+IGRldmljZSB0eXBlIiBjcmFzaCAoY29vbC5leGUpLgoKCSogW21pc2MvbWFpbi5jXQoJU3lzdGVtUGFyYW1ldGVyc0luZm8qOiBhZGRlZCBzdHViIG9wdGlvbiA0MQoJKEdFVE5PTkNMSUVOVE1FVFJJQ1MpLCBkdXBsaWNhdGVkIHNvbWUgc3R1ZmYgYXdheSBmcm9tIFNQSTE2Cgl0aGF0IHdyaXRlcyAzMmJpdCB2YXJzLihvbmUgQ09NQ1RMMzIuRExMIGNyYXNoLCBmcmVlY2VsbC5leGUpCgpUdWUgSnVsICA4IDIyOjQwOjUzIDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbaWYxNjMyL3NoZWxsMzIuc3BlY10KCVVzZSBXaW5kb3dzIDk1J3Mgb3JkaW5hbHMuIEhlbHAgd2FudGVkLCBpbnF1aXJlIHdpdGhpbi4KCk1vbiBKdWwgIDcgMTE6MjA6MzYgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdCgkgIFt0b29scy9idWlsZC1zcGVjLnR4dF0gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCB0eXBlICdzZWdzdHInIChzZWdtZW50ZWQgcG9pbnRlciB0byBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nKQoJdG8gLnNwZWMgZmlsZXMuCgoJKiBbd2luZG93cy91c2VyLmNdIFtpZjE2MzIvdXNlci5zcGVjXQoJRXhpdFdpbmRvd3NFeGVjIHN0dWIgZnVuY3Rpb24gYWRkZWQuCgpNb24gSnVsICA3IDAxOjE4OjI1IDE5OTcgIFUuIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10gW2luY2x1ZGUvd2luYmFzZS5oXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglJbXBsZW1lbnQgTW92ZUZpbGVFeDMyLCBzb21lIGVuaGFuY2VtZW50IGZvciBNb3ZlZmlsZTMyLgoKU2F0IEp1bCAgNSAxODoxMzo0OCAxOTk3ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdS4KCgkqIFtmaWxlcy9maWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZXJyb3IuaF0KICAgICAgICAgIFttc2Rvcy9pbnQyMS5jXSBbd2luMzIvZmlsZS5jXQoJQWRkIExvY2tGaWxlL1VubG9ja0ZpbGUgaW1wbGVtZW50YXRpb24uCglBZGQgYmFjayBpbiBpbnQyMSBmdW5jKDB4NWMpIFJlY29yZCBsb2NraW5nIGZ1bmN0aW9ucy4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCBidWcgd2l0aCBPRl9SRU9QRU4gaW4gRklMRV9Eb09wZW5GaWxlLgoKRnJpIEp1bCA0IDEyOjAwOjAwIDE5OTcgIEhlbnJpayBPbHNlbiA8SGVucmlrLk9sc2VuQGlhZXN0ZS5kaz4KCgkqIFttaXNjL29sZTJubHMuY10gW3Byb2dyYW1zL3Byb2dtYW4vRGEucmNdIFtwcm9ncmFtcy93aW5oZWxwL0RhLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19EYS5yY10KCUFkZGVkL3VwZGF0ZWQgRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQuCgpUaHUgSnVsICAzIDEzOjA0OjIwIDE5OTcgIENsYXVzIEZpc2NoZXIgIDxmaXNjaGVyQGl1ZS50dXdpZW4uYWMuYXQ+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglQcm9wZXJseSBpbXBsZW1lbnRlZCBET1NGU19Vbml4VGltZVRvRmlsZVRpbWUgYW5kCglET1NGU19GaWxlVGltZVRvVW5peFRpbWUuCgoJKiBbZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm9dCglGaXJzdCB2ZXJzaW9uIG9mIHRleGluZm8gZG9jdW1lbnRhdGlvbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEp1biAyNiAwMjoxNDowMyAxOTk3ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW01ha2VmaWxlLmluXQoJTmV3IHRhcmdldCBpbnN0YWxsX2luY2x1ZGVzLgoKCSogW3JjL3BhcnNlci5oXSBbcmMvcGFyc2VyLnldIFtyYy93aW5lcmMuY10KCVNvbWUgYnVnIGZpeGVzLgoKV2VkIEp1biAyNSAxNDo0Mzo0MSAxOTk3ICBWaWN0b3IgU2NobmVpZGVyIDx2aXNjaG5lQGlibS5uZXQ+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgV01fR0VUVEVYVCByZXR1cm4gdmFsdWUuCgpUdWUgSnVuIDI0IDIzOjQ2OjA0IDE5OTcgIE1pY2hpZWwgdmFuIExvb24gPG1mdmxAeHM0YWxsLm5sPgoKCSogW211bHRpbWVkaWEvKi5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJQWRkZWQgbW9yZSBjYWxsYmFjayBjb2RlLCBpbmNsdWRpbmcgKEkgaG9wZSkgZnVuY3Rpb24gY2FsbGJhY2suCglDaGFuZ2VkIHNvbWUgbGluZWFyIHBvaW50ZXJzIGludG8gc2VnbWVudGVkLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCVJlbW92ZWQgc29tZSBidWdzLgoKU2F0IEp1biAyOCAxMTozNzo1NiAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIvY29tZGxnMzIuc3BlY11bbWlzYy9jb21tZGxnLmNdCgkgIFtpbmNsdWRlL2NvbW1kbGcuaF0KCUltcGxlbWVudGVkIHBhcnRzIG9mIGNvbWRsZzMyOiBHZXRPcGVuRmlsZU5hbWUzMiosCglHZXRTYXZlRmlsZU5hbWUzMiosIEdldEZpbGVUaXRsZTMyKiB1c2luZyB0aGUgMTYgYml0IGVxdWl2YWxlbnRzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUVWRU5UX1F1ZXJ5Wk9yZGVyOiBjaGVjayBmb3IgY2hpbGRyZW4gIT1OVUxMIChoYXBwZW5zIHdoZW4KCXVzaW5nIC1tYW5hZ2VkKS4KCgkqIFtCVUdTXVtERVZFTE9QRVItSElOVFNdCglVcGRhdGVkLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgR2V0VGV4dENoYXJzZXQuLi4gKHN0dWIgbW9zdGx5KS4KClNhdCBKdW4gMjEgMDg6NDc6NTggMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCSAgW2xvYWRlci9yZXNvdXJjZS5jXSBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglTZXRSZXNvdXJjZUhhbmRsZXIgJiBSZW1vdmVGb250UmVzb3VyY2UgcHJvdG90eXBlcyBmaXhlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCgkgIFtpZjE2MzIvb2xlc3ZyLnNwZWNdIFtpZjE2MzIvY29tbWRsZy5zcGVjXSBbaWYxNjMyL2RkZW1sLnNwZWNdCgkgIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvbHpleHBhbmQuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaW5jbHVkZS93aW5kb3dzLmhdIFttZW1vcnkvc3RyaW5nLmNdIFt0b29scy9idWlsZC5jXQoJTmV3IHR5cGUgb2YgcGFyYW1ldGVyIGFsbG93ZWQgaW4gLnNwZWMgZmlsZXMgOiBzdHIsIHByaW50ZWQKCWFzIGEgc3RyaW5nIHdpdGggLWRlYnVnbXNnICtyZWxheS4gLnNwZWMgZmlsZXMgdXBkYXRlZC4KCgkqIFtvYmplY3RzL2RjLmNdCglJbiBEQ19TZXR1cEdDRm9yUGVuLCBjYWxsIEJsYWNrUGl4ZWxPZlNjcmVlbiwgbm90IEJsYWNrUGl4ZWwuCglMaWtld2lzZSBmb3IgV2hpdGVQaXhlbC4KCgkqIFtvYmplY3RzL2dkaW9iai5jXSBbZ3JhcGhpY3MveDExZHJ2L2JydXNoLmNdCglVc2UgQlNfSEFUQ0hFRCB3aXRoIGFuIGFkZGVkIGVudHJ5IGluIEhhdGNoQnJ1c2hlcyBmb3IgRGtHcmF5QnJ1c2gsCiAJaW5zdGVhZCBvZiBCU19TT0xJRC4KCkZyaSBNYXkgMzAgMTc6NTg6MDAgMTk5NyAgQ2hyaXMgRmFoZXJ0eSA8Y2hyaXNmQGFtZXJpY2EuY29tPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUFkZGVkIHZrZXkgdG8gc2NhbmNvZGUgdHJhbnNsYXRpb24gdGFibGUuCglUaGlzIHdhcyBwcmltYXJpbHkgdG8gZml4IENpdHJpeCBXaW5GcmFtZSBjbGllbnQgd2hpY2gKCWFsd2F5cyBuZWVkcyBzY2FuY29kZXMgaW4gV01fS0VZRE9XTi4KCVRlc3RlZCB3aXRoIEV4Y2VlZCA1LjEuMC4xICYgWEZyZWU4NiAzLjEuMi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEp1biAxNCAxMzowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtpbmNsdWRlL21tc3lzdGVtLmhdCglBdm9pZGVkIGluZmluaXRlIGxvb3AgaW4gYXVkaW8gY29kZSB3aGVuIGFjY2Vzc2luZwogCVdBVkVPVVRDQVBTL1dBVkVJTkNBUFMvTUlESU9VVENBUFMvQVVYQ0FQUyB3aXRoIHJpZ2lkIHZhcmlhYmxlCiAJb2Zmc2V0cyAoSSBhcHBsaWVkIFdJTkVfUEFDS0VEKS4KCgkqIFsqLypdCglBZGRlZCAiV0FSTklORzoiIGFuZCAiRVJST1I6IiB0byBzb21lIHByaW50ZidzLgoJSnVzdCBncmVwIGZvciB0aGVtIHdpdGggJy1kZWJ1Z21zZyArYWxsJy4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglJbXBsZW1lbnRlZCB3YXZlIGNhbGxiYWNrczogd2luZG93IGFuZCBmdW5jdGlvbiBjYWxsYmFjay4KCUZpeGVkIHByb2JsZW0gd2l0aCBXQVZFX05vdGlmeUNsaWVudCgpLgoJTWlzYyBmaXhlcy4KCgkqIFt3aW5kb3dzL3dpbmhlbHAuY10KCUZpeGVkIHByb2JsZW0gd2l0aCB3aW5kb3dzIGhlbHAgdGVsbGluZyAiSGVscCB0b3BpYyBkb2Vzbid0IGV4aXN0Ii4KCUJ1dCB0aGlzIHByb2JsZW0gc3RpbGwgcmVtYWlucyB3aGVuIHVzaW5nIFdpbndvcmQuCgpXZWQgSnVuIDExIDA5OjE0OjIwIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZS5pbmldCglOZXcgJ2ZvbnRzJyBzZWN0aW9uIGZvcm1hdC4gUmVhZCBkb2N1bWVudGF0aW9uL2ZvbnRzLgoKCSogW2NvbnRyb2xzL2ljb250aXRsZS5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCgkgIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW4uaF0KCUltcGxlbWVudGVkIGljb24gdGl0bGVzLgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXSBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL2RjLmNdCgkgIFtpbmNsdWRlL3gxMWRydi5oXSBbaW5jbHVkZS94MTFmb250LmhdIFtkb2N1bWVudGF0aW9uL2ZvbnRzXQoJUmV3cm90ZSBmb250IG1hcHBlciBmcm9tIHNjcmF0Y2guCgoJKiBbdG9vbHMvZm50MmJkZi5jXQoJQnVnIGZpeGVzLiBSRVBMQUNFIEZPTlRTIENSRUFURUQgQlkgVEhFIFBSRVZJT1VTIFZFUlNJT05TLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJV29yZCBkb2N1bWVudCB3aW5kb3cgYWN0aXZhdGlvbiBmaXguCgoJKiBbd2luZG93cy9tZGkuY10gW3dpbmRvd3Mvd2luLmNdCglSZXBsYWNlZCBXQ0wgbGlzdHMgd2l0aCBXSU5fQnVpbGRXaW5BcnJheSgpLgoKTW9uIEp1biAgOSAyMzo1MToxNiAxOTk3ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbbWlzYy9lcnJvci5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIva2VybmVsLnNwZWNdCglJbXBsZW1lbnRlZCBMb2dQYXJhbUVycm9yLCBMb2dFcnJvciBmdW5jdGlvbnMuCgpUdWUgSnVuICAzIDIzOjQ2OjA0IDE5OTcgIE1pY2hpZWwgdmFuIExvb24gPG1mdmxAeHM0YWxsLm5sPgoKCSogW2luY2x1ZGUvbW1zeXN0ZW0uaF0gW211bHRpbWVkaWEvYXVkaW8uY10KCUNvbnN0YW50cyBmb3IgYXN5bmNocm9ub3VzIHBsYXkgYW5kIHJlY29yZC4KCgkqIFttdWx0aW1lZGlhL3RpbWUuY10KCUZpbGxlZCBpbiBzb21lIGVtcHR5IGZ1bmN0aW9ucy4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglGaXhlZCBidWdzIGluIHdhdmVPdXRPcGVuLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvYXVkaW8uY10KCUltcGxlbWVudGVkIFdpbmRvdyBDYWxsYmFjayBmb3Igd2F2ZSBvdXRwdXQgYXQgbGVhc3QuCgoJKiBbZmlsZXMvZmlsZS5jXQoJQ29ycmVjdGVkIGJ1ZyBpbiBGaWxlRG9zU2V0RXJyb3IuCglOVUxMIHBvaW50ZXIgY2hlY2tpbmcgYWRkZWQuCgoJKiBbbWlzYy9zcHkuY10KCUFkZGVkIE11bHRpbWVkaWEgbWVzc2FnZXMgdG8gU1BZX0dldE1zZ05hbWUuCgpUdWUgSnVuIDMgMjI6MzQ6MzAgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZGVidWdnZXIvKi5jXVtpbmNsdWRlL3BlZXhlLmhdW2xvYWRlci8qLmNdW3Rvb2xzL2J1aWxkLmNdCgkgIFt0b29scy9mbnQyYmRmLmNdW2xpYnJhcnkvc3VwLmNdCglJTUFHRV8qIHN0cnVjdHMvZGVmaW5lcyBjaGFuZ2VkIGZpdCBiZXR0ZXIgdG8gU0RLIG5hbWluZwoJRG9uJ3QgbG9hZCBub24taTM4NiBQRSBleGVjdXRhYmxlcy4KCSVmcyBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXNlZCBmb3IgdGhlIEZJUlNUIGxvYWRlZCBQRSBtb2R1bGUuCgoJKiBbaWYxNjMyL2FkdmFwaS5zcGVjXVt3aW4zMi9hZHZhcGkuY10KCVNvbWUgc21hbGwgc3R1YnMgYWRkZWQgdG8gYnJpbmcgd2luMzIgc2V0dXAuZXhlIGEgYml0IGZhcnRoZXIuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3NjaGVkdWxlci9wcm9jZXNzLmNdCglBZGFwdGVkIHRvIG1hdGNoIHdpbjk1IGtlcm5lbDMyLmRsbCBvcmRpbmFscyAoTlQgZG9lc24ndCB1c2UKIAlvcmRpbmFsIGltcG9ydCksIHNvbWUgb3JkaW5hbCBvbmx5IGV4cG9ydGVkIGZ1bmN0aW9ucyBhZGRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUFkZGVkIENhbGxQcm9jMzJXLgoKCSogW21pc2MvbHpleHBhbmQuY10KCUZpeGVkIHJldHVybiB2YWx1ZXMgb2YgR2V0RXhwYW5kZWROYW1lKiAodGhhbmtzIHRvIEFuZHJlYXMgTW9ocikuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUV2ZXJ5dGhpbmcgd2l0aCBtb3JlIHRoYW4gOCBiaXQgb2YgY29sb3IgaXMgYSB0cnVlY29sb3IgbW9kZQoJYW5kIGRvZXNuJ3QgaGF2ZSBhIGNvbG9ybWFwLgoKVHVlIEp1biAgMyAwOToyNDo1MyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9mb250LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCgkgIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KCSAgW2luY2x1ZGUvd2luMTZkcnYuaF0KCUNoYW5nZWQgc29tZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZCB0byBhbmQgZnJvbSB0aGUgMTYgYml0CiAJZHJpdmVycyB0byBiZSBhbGxvY2F0ZWQgb24gdGhlIGdsb2JhbCBoZWFwLgoJSW1wbGVtZW50ZWQgRXNjYXBlKENvbnRyb2wpIDB4MTAwIEdldEV4dFRleHREYXRhIHByb3Blcmx5IHRvCglzdG9wIHdvcmQgZnJvbSBjcmFzaGluZy4KCVBvc3RzY3JpcHQgZHJpdmVyIG5vdyBwcmludHMgb24gY29tcGxldGUgcGFnZSBpbnN0ZWFkIG9mIHRvcAoJbGVmdCBjb3JuZXIuCglQcmludCBzcG9vbGluZyBpbXBsZW1lbnRlZC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglNT0RVTEVfR2V0T3JkaW5hbCBjaGFuZ2VkIGNoYXIgYnVmZmVyIHRvIHVuc2lnbmVkIGNoYXIgdG8gc3RvcAoJYSBsb29wIHRoYXQgd2FzIGhhcHBlbmluZyB3aGVuIHJ1bm5pbmcgdGhlIGZvbnQgY29udHJvbAoJcHJvZ3JhbSBmcm9tIHRoZSBjb250cm9sIHBhbmVsLgoKU3VuIEp1biAgMSAxOTowNTowMiAxOTk3ICBQZXRlciBTY2hsYWlsZSA8dXA5bkByei51bmkta2FybHNydWhlLmRlPgoKCSogW2luY2x1ZGUvbWlzY2VtdS5oXSBbbG9hZGVyL21haW4uY10gW21zZG9zL2lvcG9ydHMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRpcmVjdCBpbyBwb3J0IGFjY2Vzcy4KCkZyaSBNYXkgMzAgMTY6MTg6MzUgMTk5NyAgRGF2aWQgQS4gQ3V0aGJlcnQgPGRhY3V0QGRzc2MzMzUzLmVjZS5jbXUuZWR1PgoKCSogW21pc2MvdmVyLmNdCglJbXBsZW1lbnRlZCBWZXJGaW5kRmlsZTE2LgoKVHVlIE1heSAyNyAyMjowMDozOSAxOTk3ICBSaWNrIFJpY2hhcmRzb24gPHJpY2tAZGdpaS5jb20+CgoJKiBbbWlzYy9jb21tLmNdCglGaXhlZCBHZXRDb21tRXJyb3IgYW5kIEdldENvbW1FdmVudE1hc2suCgpUdWUgTWF5IDI3ICA5OjEwOjUzIDE5OTcgIEdlb3JnIEJleWVybGUgPGdiZXllcmxlQGF3aS1wb3RzZGFtLmRlPgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCU1pbm9yIGZpeCBpbiB0aHJlYWQgZGF0YWJhc2UgaW5pdGlhbGl6YXRpb24uCgpNb24gTWF5IDI2IDE5OjQ2OjM0IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9kYy5jXQoJSW4gRENfU2V0dXBHQ0ZvclBlbiwgYXZvaWQgdG8gZHJhdyBpbiBHWHhvciBtb2RlIHdpdGggYSAwIG1hc2suCgpNb24gTWF5IDI2IDE1OjIyOjQyIDE5OTcgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJQWRkIGNvZGUgZm9yIG1vZHVsZXMgdGhhdCBjby1yZWZlcmVuY2UgZWFjaCBvdGhlci4gUGhvdG9kZXgncwoJYWdkcy5leGUgKGNwaWMzMikgaGFzIHR3byBkbGwncyB0aGF0IG1ha2UgY2FsbHMgaW50byBlYWNoIG90aGVyLgoKTW9uIE1heSAyNiAxMzozODoxNiAxOTk3ICBKb2R5IEdvbGRiZXJnIDxqb2R5Z0BpZHQubmV0PgoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglEb250IHVzZSBzdGRpbyB3aGVuIHJlYWRpbmcgL3Byb2Mvc2VsZi9tYXBzLiAgSXQgY2F1c2VzIHByb2JsZW1zCgl3aXRoIGxpYmM2LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglUcmFuc2xhdGUgbWVzc2FnZXMgaW4gSXNEaWFsb2dNZXNzYWdlIHdoZW4gRExHQ19XQU5UTUVTU0FHRQoJaXMgdXNlZC4KClN1biBNYXkgMjUgMTc6MDI6MjEgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZXNvdXJjZSBjbGVhbnVwIGluIEVudW1NZXRhRmlsZSgpLiBUaGlzIHdhcyBvbmUgcmVhc29uIFdvcmQgd2FzCgljcmFzaGluZyBhZnRlciBsb25nIHBlcmlvZHMgb2YgdXNlLiAoVGhhbmtzIHRvIENocmlzIFVuZGVyaGlsbCBmb3IKCXRoZSBsb2dzKQoKU3VuIE1heSAyNSAxNDo1OTozMyAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BmbGV4LmNvbT4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJSW5pdGlhbCBzdXBwb3J0IGZvciBjb21wb3VuZCBNQ0kgY29tbWFuZHMuCglVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJlIGZvciAnYWxpYXMnIGFuZCAnZWxlbWVudCcga2V5d29yZHMuCglGaXhlZCBwb2ludGVyIGNvcHkgb2YgYXJncyBrZXl3b3JkcyBhcnJheS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAyMCAxOToyMDoyMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGxpbnV4LmNoYW5hZS5zdGJlbi5iZT4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0VzLnJjXQoJVXBkYXRlZCBDSE9PU0VfRk9OVCwgQ0hPT1NFX0NPTE9SLCBFRElUTUVOVSBmb3IgU3BhbmlzaC4KCk1vbiBNYXkgMTkgMjI6MDY6MDQgMTk5NyAgTWljaGllbCB2YW4gTG9vbiA8bWZ2bEB4czRhbGwubmw+CgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCUNvcnJlY3RlZCBidWcgZm9yIGRldmljZSFlbGVtZW50IGNvbW1hbmQuCgoJKiBbbXVsdGltZWRpYS9tbWF1eC5jXQoJUmVwbGFjZWQgcHJpbnRmIGFuZCBmcHJpbnRmIGNhbGxzIGJ5IGRwcmludGZfbW1hdXguCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJQ29ycmVjdGVkIGRlYnVnbWVzc2FnZSBpbiB3b2RHZXRWb2x1bWUuCglJbmNsdWRlIGNvZGUgZm9yIE1DSV9DVUUgY29tbWFuZC4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglBZGRlZCB0aGUgTUNJRVJSX1NFUSBlcnJvciBtZXNzYWdlcy4KCgkqIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10gW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoYW5nZWQgY2FsbCBzdHJ1Y3R1cmUgb2Ygd2F2ZUluT3BlbiBhbmQgd2F2ZU91dE9wZW4uCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS9hdWRpby5jXSBbbXVsdGltZWRpYS9taWRpLmNdCgkgIFttdWx0aW1lZGlhL21tYXV4LmNdIFttdWx0aW1lZGlhL21jaWNkYS5jXSBbbXVsdGltZWRpYS9tY2lhbmltLmNdCgkgIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJQ2hhbmdlZCB0aGUgZGV2aWNlSUQgc2NoZW1lLgoKCSogW2luY2x1ZGUvcXVldWUuaF0gW2luY2x1ZGUvd2luMTZkcnYuaF0gW21zZG9zL2RwbWkuY10KCSAgW3dpbmRvd3MvdXNlci5jXSBbd2luZG93cy9kcml2ZXIuY10gW2dyYXBoaWMvd2luZy5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jXSBbbWlzYy93c3ByaW50Zi5jXSBbbWlzYy9jcnRkbGwuY10KCVJlbW92ZWQgY29tcGlsZXIgd2FybmluZ3MuCgpNb24gTWF5IDE5IDAxOjMyOjI0IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVBvcHVwIG1lbnUgc2hhZGUsIG5ldyBzeXN0ZW0gbWVudSBpbXBsZW1lbnRhdGlvbiwgCglNb2RpZnlNZW51KCkgZml4ZXMsIGJldHRlciBjaGVjayBtYXJrIHBhaW50aW5nLgoKCSogW3dpbmRvd3MvbWRpLmNdCglNREkgY2xpZW50IGZpeCBmb3IgV2luMzIuCgpTYXQgTWF5IDE3IDEyOjAyOjExIDE5OTcgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgTUVUQV9ESUJCSVRCTFQsIE1FVEFfU0VUVEVYVEpVU1RJRklDQVRJT04KCXBsdXMgYnVnZml4IGluIE1FVEFfRVhUVEVYVE9VVCAoc3RhcnRfb2ZfdGV4dCBldGMuKQoKVGh1IE1heSAxNSAyMjo1MjowMCAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BmbGV4LmNvbT4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCU1ha2Ugc3VyZSBkZ3JvdXAgaXMgdmFsaWQgYnkgY2hlY2tpbmcgcE1vZHVsZS0+ZmxhZ3MgY29uc2lzdGVudGx5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5ICA2IDE5OjEyOjIwIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBjb21tYW5kIGxpbmUgaW4gTG9hZE1vZHVsZSB0byBhbHJlYWR5IGluY2x1ZGUgdGhlIGxlbmd0aAoJaW5kaWNhdG9yICh0aGFua3MgdG8gQW5kcmVhcyBNb2hyKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRGxnRGlyTGlzdDogZml4ZWQgYmVoYXZpb3Igd2l0aCBERExfRFJJVkVTIHwgRERMX0VYQ0xVU0lWRSAodGhhbmtzCgl0byBCcnVjZSBNaWxuZXIgZm9yIHRoaXMgb25lKTsgY29ycmVjdGx5IHVwZGF0ZSBmaWxlIHNwZWMgb24gZXhpdC4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJTW92ZWQgZW11bGF0b3Itc3BlY2lmaWMgY29kZSBmb3IgY2FsbGluZyB3aW5kb3cgcHJvY2VkdXJlIHRvCgl0aHVuay5jLgoKTW9uIEFwciAyOCAxMDoyMTo1OSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQmV0dGVyIGltcGxlbWVudGF0aW9uIG9mIG1vdmVhYmxlIGJsb2NrcyAoZmlyc3Qgd29yZCBpbiBibG9jayBpcwoJdGhlIGhhbmRsZSBpdHNlbGYpIGFuZCBkaXNjYXJkZWQgYmxvY2tzLiBMb2NhbChSZSlBbGxvYyBpcyBtdWNoCgltb3JlIGxpa2UgdGhlIHJlYWwgdGhpbmcuCgpUaHUgQXByIDI0IDE5OjUwOjE5IDE5OTcgIEFsYnJlY2h0IEtsZWluZSA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglBZGRlZCBoYW5kbGluZyBvZiBtZXRhIHJlY29yZCBNRVRBX0RJQkNSRUFURVBBVFRFUk5CUlVTSC4KCk1vbiBBcHIgMjEgMTQ6MDM6MzIgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglGaXhlZCBsZWZ0b3ZlciBwcm9ibGVtcyB3aXRoIG1hc2tlZCBkZXZpY2UgSURzLgoKCSogW21zZG9zL2ludDIxLmNdCglSZW1vdmVkIGNvZGUgZHVwbGljYXRpb25zLCBmaXhlZCBXcml0ZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCSAgW3dpbmRvd3Mvd2lucG9zLmNdCglZZXQgYW5vdGhlciBhdHRlbXB0IHRvIG1ha2UgLW1hbmFnZWQgd29yayBiZXR0ZXIuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCVVJIGZpeC4KCk1vbiBBcHIgMjEgMTM6MTA6MjQgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtkZWJ1Z2dlci8qXQoJQWxsICJMb2FkaW5nIGZyb20gLi4uIiBsaW5lcyBtZXJnZWQgaW50byBvbmUgc28gaW1wb3J0YW50CglpbmZvcm1hdGlvbiBiZWZvcmUgdGhlIGNyYXNoIGRvZXNuJ3Qgc2Nyb2xsIG91dC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGRlZCBzb21lIG9yZGluYWwgc3R1YnMgdXNlZCBieSB3aW45NSBPTEUgYW5kIGZyaWVuZHMuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQoJTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cyxHZXRQcm9jZXNzVGltZXMsUnRsSW1hZ2VOdEhlYWRlcnMsCiAJTG9hZExpYnJhcnlFeDMyVyBhbmQgR2V0UHJvY0FkZHJlc3MzMlcgYWRkZWQuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCVhJbWFnZXMgdXNlIGFub3RoZXIgbWVtb3J5IGxheW91dCBmb3IgZGVwdGggNCAoYW5kIHBvc3MuIG90aGVyCiAJZGVwdGhzKSB0aGVuIFdpbmRvd3MgYml0bWFwcy4gUmVwbGFjZWQgc3BlZWR1cCBoYWNrIGJ5IGdlbmVyaWMKIAkoYW5kIGJldHRlciB3b3JraW5nKSBjb2RlLgoKCSogW29iamVjdHMvZGliLmNdCglBbm90aGVyIHhpbWFnZSE9Yml0bWFwIG1lbW9yeSBsYXlvdXQgYnVnLiAKCUFsbCBfWGluaXRJbWFnZUZ1bmNQdHJzIGV4Y2VwdCBvbmUgcmVtb3ZlZC4KClN1biBBcHIgMjAgMTc6MTI6MzAgMTk5NyAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCUZpeGVkIHNvbWUgcmVncmVzc2lvbiBidWdzLgoKU3VuIEFwciAyMCAxMjoxNTowOSAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBNT0RVTEVfTG9hZEV4ZUhlYWRlcigpIHRvIHVzZSB0aGUgY29ycmVjdCBvZmZzZXQgZm9yCglmYXN0LWxvYWQgYXJlYS4KClNhdCBBcHIgMTkgMTY6NDA6MDAgMTk5NyAgQ2hhZCBGcmFsZWlnaCA8Y2hhZGZAYm9va2Nhc2UuY29tPgoKCSogW2NvbnRyb2xzLypdIFtkZWJ1Z2dlci8qXSBbZ3JhcGhpY3Mvd2luMTZkcnYvKl0gW2xvYWRlci8qXSBbbWlzYy8qXQoJICBbd2luMzIvKl0KCVJlbW92ZWQgPG1hbGxvYy5oPiBhbmQgYWRkZWQgPHN0ZGxpYi5oPiB3aGVyZSBuZWVkZWQuCglDaGFuZ2VkIHByaW50ZiBmb3JtYXRlcnMgdG8gbWF0Y2ggYXJndW1lbnQgdHlwZXMgKCVseCBpbnN0ZWFkIG9mICV4KS4KCUNhc3RlZCBzb21lIHR5cGVzIHRvIG1ha2UgdGhlIGNvbXBpbGVyIGhhcHB5LiBNb3N0bHkgcG9pbnRlcjwtPnVsb25nLgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCUZpeGVkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXQoJQWRkZWQgPHN5cy90eXBlcy5oPiBuZWVkZWQgZm9yIDxkaXJlbnQuaD4uCgoJKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdCglDb21iaW5lZCBhIGNvbW1vbiBOZXRCU0QgJiBGcmVlQlNEICNpZmRlZiwgYW5kIGFkZGVkIGluIE9wZW5CU0QuCglDYXN0ZWQgRUlQX3NpZy9FU1Bfc2lnIHRvIGJlIHVuc2lnbmVkIGxvbmcgKGRlY2xhcmVkIGFzICdpbnQnIGluICpCU0QpLgoKCSogW21pc2MvY3J0ZGxsLmNdIFttaXNjL2xzdHIuY10KCUNhc3RlZCBsYXN0IGFyZ3VtZW50IGluIHYqcHJpbnRmKCkgdG8gYmUgdmFfbGlzdC4gVGhpcyBjb2RlIHNlZW1zIHRvCgltYWtlIEJJRyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdmFfbGlzdC4KCgkqIFttaXNjL3Zlci5jXQoJRml4ZWQgaW1wb3NzaWJsZSBpZigpIGV4cHJlc3Npb24gKHVuc2lnbmVkIDwgMCkuCgoJKiBbbWlzYy93aW5zb2NrLmNdCglSZW1vdmVkIHNlbWljb2xvbiBvbiB0aGUgZW5kIG9mIGFuIGlmKCkgc3RhdGVtZW50LgoKCSogW3dpbmRvd3MvbWRpLmNdCglDaGFuZ2VkIGEgY291bnRlci9pbmRleCB0byB1bnNpZ25lZCBzaW5jZSBpdCB3YXMgY29tcGxhaW5pbmcgYWJvdXQKCXNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGFuZCBkaWRuJ3QgbmVlZCB0byBiZSBuZWdhdGl2ZS4KCldlZCBBcHIgMTYgMTc6NDM6MTkgMTk5NyBHZW9yZyBCZXllcmxlIDxnYmV5ZXJsZUBhd2ktcG90c2RhbS5kZT4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglNaW5vciBmaXggaW4gdGhyZWFkIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uLgoKV2VkIEFwciAxNiAxNzoyODowNSAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCBGSUxFX0ZpbGxJbmZvKCkgdG8gb21pdCB0aGUgYXJjaGl2ZSBmbGFnIHdoZW4gaGFuZGxpbmcgYSBET1MKCWRpcmVjdG9yeSBlbnRyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEFwciAxNCAxMToyMjo1NCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCglNaW5vciBjaGFuZ2VzIHRvIGhlbHAgZGVidWcgcHJvYmxlbXMuCgoJKiBbaWYxNjMyL2R1bW15LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglEdW1teSByb3V0aW5lcyBmb3IgU3RhcnRQYWdlLCBFbmRQYWdlLCBTZXRBYm9ydFByb2MsIEFib3J0UHJvYy4KCgkqIFttaXNjL3ByaW50ZHJ2LmNdIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVN0YXJ0RG9jMTYsIEVuZERvYzE2IG5ldyBmdW5jdGlvbnMuCgpTdW4gQXByIDEzIDExOjE4OjM1IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglJbXBsZW1lbnRlZCBNYXBWaWV3T2ZGaWxlLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQWRkZWQgJ2luZm8gbWFwcycgY29tbWFuZC4KCkZyaSBBcHIgMTEgMTY6MzQ6MDggMTk5NyAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRldmVsQHJ1bGhtcGM1OC5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCVN0YXJ0ZWQgcmVzdHJ1Y3R1cmluZy4gIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCUZpeGVkOgl3b3Jkd3JhcCwgc2Nyb2xsYmFyIGhhbmRsaW5nLCBzY3JvbGxpbmcsIHBhaW50aW5nLAoJCUVkaXRXbmRQcm9jKCkgaXMgbm93IHJlZW50cmFudCwgd29yZGJyZWFrIHByb2NzLAoJCWJldHRlciBjb21wbGlhbmNlIHRvIHNwZWNzLgoJTmV3OgltYXJnaW5zLCBmb3JtYXQgcmVjdGFuZ2xlLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUNoYW5nZWQgdGhlIGN1cnNvciBmb3IgdGhlIGVkaXQgY29udHJvbCBjbGFzcyB0byBhbiBJLWJlYW0uCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgMzIgYml0IHdvcmRicmVhayBjYWxsYmFjay4KCk1vbiBBcHIgIDcgMjA6NTM6MjggMTk5NyAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglBZGRlZCBoYW5kbGluZyBvZiBzb21lIG1vcmUgbWV0YWZpbGUgcmVjb3JkczogCglNRVRBX0NSRUFURVJFR0lPTiwgTUVUQV9JTlZFUlRSRUdJT04gZXRjLgoKU2F0IEFwciAgNSAwOToyMzowMiBNRVQgRFNUIDE5OTcgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AYnJldWdoZWwudWZzaWEuYWMuYmU+CgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJRGVmaW5lIGtlcm5lbCBzaWdhY3Rpb24gb3Vyc2VsdmVzIGluc3RlYWQgb2YgZ2V0dGluZyBpdAoJZnJvbSB0aGUga2VybmVsIHNvdXJjZS4KCldlZCBBcHIgIDIgMjE6MDU6MDAgMTk5NyAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2NvbnRyb2wvbWVudS5jXQoJRml4IHJldHVybiB2YWx1ZSByYW5nZSBmb3IgR2V0TWVudVN0YXRlLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUFsd2F5cyBmaWxsIG91dCBvZnMtPnN6UGF0aE5hbWUgaW4gRklMRV9Eb09wZW5GaWxlLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCUFkZCBkZWJ1ZyBvcHRpb24gc3RyaW5nLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJRml4IHJldHVybiB2YWx1ZSBmb3IgRGVzdHJveUljb24zMi4KCk1vbiBNYXIgMzEgMTc6MTY6MTIgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtERVZFTE9QRVJTLUhJTlRTXSBbbWlzYy8qXSBbd2luZG93cy8qXSBbZ3JhcGhpY3MvKl0KCUFkZGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzb3VyY2UgdHJlZS4gTW92ZWQgc2V2ZXJhbAoJZmlsZXMgdG8gZml0IGl0LgoKCSogW21pc2Mvc2hlbGwuY10KCVVzZSBXaW4zMiBoZWFwIGZ1bmN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIE1hciAyOCAxNDoxODozMiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXhlZCBidWcgaW4gQ0JfRElSMTYgaGFuZGxpbmcuCglVc2UgY29ycmVjdCB0ZXh0IGNvbG9yIGluIENCUGFpbnRUZXh0LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIFdNX0NUTENPTE9SIGhhbmRsaW5nLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgdHJhbnNsYXRpb24gZm9yIEVNXyozMiBtZXNzYWdlcy4KCk1vbiBNYXIgMjQgMDE6MzE6NTIgMTk5NyAgU3RlZmZlbiBNb2VsbGVyIDxtb2VsbGVyQG1waW1nLWJlcmxpbi1kYWhsZW0ubXBnLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCBpbmZvcm1hdGlvbiBvbiBkZXZpY2UgYW5kIGlub2RlIG51bWJlcnMgdG8gdGhlIERPU0RSSVZFCglzdHJ1Y3QsIHVzaW5nIGl0IHRvIGZpbmQgRE9TIGRyaXZlcyBpbiBhIHBhdGggZXZlbiBpZiBpdCBjb250YWlucwoJc3ltYm9saWMgbGlua3MsIGVsaW1pbmF0aW5nIGFubm95aW5nIG1lc3NhZ2VzIGF0IHN0YXJ0dXAuICAKCUVkaXRlZCBmdW5jdGlvbnMgRFJJVkVfSW5pdCBhbmQgcmV3cm90ZSBEUklWRV9GaW5kRHJpdmVSb290LgoKV2VkIE1hciAxOSAxNjozMToxOCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9mb250LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCgkgIFtncmFwaGljcy94MTFkcnYvZm9udC5jXSBbb2JqZWN0cy9mb250LmNdIFtpbmNsdWRlL2dkaS5oXQoJICBbaW5jbHVkZS93aW4xNmRydi5oXSBbaW5jbHVkZS94MTFkcnYuaF0KCUltcGxlbWVudGVkIEdldENoYXJXaWR0aCB2aWEgZ3JhcGhpY3MgZHJpdmVycy4KCgkqIFtncmFwaGljcy93aW4xNmRydi9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jXQoJTW92ZWQgcHJpbnRlciBkcml2ZXIgaW50ZXJmYWNlcyBpbnRvIGEgc2VwYXJhdGUgZmlsZS4KCgkqIFtncmFwaGljcy93aW4xNmRydi90ZXh0LmNdCglGaXhlZCBidWdzIHRoYXQgc2VnLWZhdWx0ZWQgd3JpdGUuCgpXZWQgTWFyIDE5IDEzOjUyOjQxIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbQlVHU10KCVVwZGF0ZS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglSZW1vdmVkIHVzZWxlc3MgcGFyYW1ldGVycyBmcm9tIGEgbG90IG9mIGZ1bmN0aW9ucy4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbXByb3ZlZCBrZXlib2FyZCBzaG9ydGN1dHMuIEFkZGVkIGNoZWNrIGZvciBlbnRyaWVzIHdpdGggcG9wdXAgCgltZW51IGluIEVuYWJsZU1lbnVJdGVtKCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglEbyBub3QgYWxsb2NhdGUgc2VwYXJhdGUgdGh1bmtzIGZvciBuZXcgd2luZG93cy4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZWQgcHJvYmxlbXMgd2l0aCBDbGlwQm9vay4KCiAgICAgICAgKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL2xpc3Rib3guY10KCSAgW2NvbnRyb2xzL3dpZGdldHMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3MvZGVmZGxnLmNdCiAgICAgICAgQ29tYm8gcmV3cml0ZS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJU2xpZ2h0IGltcHJvdmVtZW50cy4KCldlZCBNYXIgMTkgMTE6MjE6MTcgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9jcnRkbGwuY10KCUFkZGVkIGNoZGlyL21rZGlyLgoKCSogW21pc2MvbnRkbGwuY10KCUZpeGVkIHNvbWUgYnVncywgYWRkZWQgUnRsVW5pY29kZVN0cmluZ1RvQW5zaVN0cmluZy4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBpbml0aWFsaXNhdGlvbiBvZiBldmVudHMvc2VtYXBob3Jlcy9tdXRpY2VzLgoKV2VkIE1hciAxOSAwMTo1NTo0MCAxOTk3ICBSaWNhcmRvIFIuIE1hc3Nhcm8gPG1hc3Nhcm9AaW1lLnVzcC5icj4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX1BvLnJjXQoJQWRkZWQgc3VwcG9ydCBmb3IgUG9ydHVndWVzZSBsYW5ndWFnZS4KClNhdCBNYXIgMTggMTg6MDA6MTQgMTk5NyAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCUltcGxlbWVudGVkIFN3aXRjaFRvVGhpc1dpbmRvdygpLgoJCgkqIFttaXNjL3Zlci5jXQoJQ29ycmVjdGVkIGEgZmxhdyBpbiBWZXJJbnN0YWxsRmlsZTMyQS4KCQoJKiBbbXNkb3MvaW50MjEuY10KCUNvcnJlY3RlZCB3cm9uZyBudW1iZXIgaW4gSW50MjEgMzMwNQoJQ29ycmVjdGVkIEludDIxIDcxNGUsIGltcGxlbWVudGVkIEludDIxIDcxNjAsQ0w9MiwgNzE0MyBhbmQgNzE0NwoJClN1biBNYXIgMTYgMDk6NTM6MDQgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbG9hZGVyL25lX21vZHVsZS5jXQoJRml4ZWQgTkVfTG9hZFNlZ21lbnRzKCkgdG8gc2V0IHNpemUgdG8gcFNlZy0+bWluc2l6ZSByYXRoZXIgdGhhbgoJc2V0dGluZyBpdCB0byAweDEwMDAwIGlmIHBTZWctPnNpemUgaXMgMC4KClRodSBNYXIgMTMgMTI6MTU6MDAgMTk5NyAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW0FOTk9VTkNFXQoJQWRkZWQgZnRwLnByb2dzb2MudXRzLmVkdS5hdSBhcyBhIG1pcnJvciBvZiBXaW5lLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVJlbW92ZWQgTWVtTWFuSW5mbyBzaXplb2YgY2hlY2suCgpNb24gTWFyIDEwIDEwOjM1OjQ0IE1FVCAxOTk3IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGJyZXVnaGVsLnVmc2lhLmFjLmJlPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJUGljayB1cCBrZXJuZWwgZGlyZW50IG9uIGdsaWJjIHN5c3RlbXMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJUGljayB1cCBrZXJuZWwgc2lnYWN0aW9uIG9uIGdsaWJjIHN5c3RlbXMuCgpTYXQgTWFyICA4IDIxOjA1OjM3IDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGFsb2hhLmNvbT4KCgkqIFtkZWJ1Z2dlci9zdGFicy5jXSBbZGVidWdnZXIvbXNjLmNdCglDaGVjayByZXR1cm4gdmFsdWUgb2YgbW1hcC4KCkZyaSBNYXIgIDcgMDU6NDI6MDMgMTk5NyAgTGVlIEphZWtpbCA8anVyaWFAc2VvZHUuY28ua3I+CgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglBZGRlZCBJc1ZhbGlkQ29kZVBhZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgIDIgMTQ6NTc6MzcgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbKi8qXQoJQ29tcGxldGVkIHRyYW5zaXRpb24gdG8gbmV3IFdpbjMyIHR5cGVzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VkIENhbGxUbzE2X3JlZ3MgdG8gdGFrZSBhIENPTlRFWFQgYXJndW1lbnQuCgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10KCVJld3JvdGUgVmlydHVhbCogZnVuY3Rpb25zLiBJbXBsZW1lbnRlZCBDcmVhdGVGaWxlTWFwcGluZyBhbmQKCU9wZW5GaWxlTWFwcGluZy4gQnJva2UgTWFwVmlld09mRmlsZSA7LSkKCgkqIFt3aW4zMi9rMzJvYmouY10KCUltcGxlbWVudGVkIG5hbWVkIG9iamVjdHMuCgpTdW4gTWFyICAyIDAwOjMzOjIxIDE5OTcgIE1pa29sYWogWmFsZXdza2kgPHptaWtvbGFqQGZyZWUucG9sYm94LnBsPgoKCSogW21pc2Mvb2xlMm5scy5jXSBbcmVzb3VyY2VzL3N5c3Jlc19QbC5jXQoJQWRkZWQgUG9saXNoIGxhbmd1YWdlIHN1cHBvcnQuCgpTYXQgTWFyICAxIDEzOjMxOjI1IDE5OTcgIERhdmlkIEZhdXJlIDxkYXZpZC5mYXVyZUBpZmhhbXkuaW5zYS1seW9uLmZyPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVdyb3RlIFZrS2V5U2NhbiBhbmQgdGVzdGVkIHdpdGggV2lud29yZC4gV29ya3Mgb2sgZXhjZXB0IGZvciBkZWFkCgljaGFycy4KCkZyaSBGZWIgMjggMDk6MzQ6MDMgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvZm9udC5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvb2JlY3RzLmNdCglBZGRlZCBzdGFydCBvZiBTZWxlY3RPYmplY3QgY2FsbCBmb3IgcHJpbnRlciBkcml2ZXIuIFdyaXRlIHNob3VsZAoJbm93IHJ1biB3aXRoIHRoZSBwcmludGVyIGRyaXZlciBlbmFibGVkLgoKV2VkIEZlYiAyNiAyMDowMzozMiAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtkZWJ1Z2dlci8qLmNdCglSZS1hZGRlZCBhIGRpc2Fzc2VtYmx5IGNvbW1hbmQgKGxpc3Qgc2VydmVzIGFub3RoZXIgZnVuY3Rpb25hbGl0eQoJbm93KS4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KCUFkZGVkICMgc3VwcG9ydC4KCgkqIFttaXNjL29sZTJubHMuY10KCUdldFN0cmluZ1R5cGUqIGFkZGVkLgoKCSogW29iamVjdHMvY29sb3IuY10KCVZHQTE2IGZpeGVzLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUxvb2sgZm9yIGdsb2JhbCB3aWRnZXQgY2xhc3NlcyB0b28gaW4gR2V0Q2xhc3NJbmZvMzIuCgoJKiBbd2luZG93cy9zeXNtZXRyaWNzLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIFdpbjMyIHN5c21ldHJpY3MuCgpTYXQgRmViIDIyIDIzOjU2OjI5IDE5OTcgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXNdCglUaGUgZm91cnRoIGNhc2UgdXBkYXRlZC4KCgkqIFtpZjE2MzIvbnRkbGwuc3BlY10KCUFkZGVkIHNvbWUgaXMqIGFuZCB0byogZnVuY3Rpb25zLgoKU2F0IEZlYiAyMiAyMzowNTo0NyAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZCB0ZXN0cyBmb3Igd2FpdDQgYW5kIHdhaXRwaWQuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQ2xlYW4gdXAgT1MtZGVwZW5kZW50IGNvZGUuICBJIGhvcGUgSSBnb3QgaXQgcmlnaHQsIDotKQoKCSogW3Rvb2xzL3dpbmVjb25mXQoJUmVjb2duaXNlIHZmYXQgZmlsZSBzeXN0ZW1zLiAgSWdub3JlIGZsb3BweSBkcml2ZXMgc3BlY2lmaWVkIGluCgkvZXRjL2ZzdGFiLgoKCSogW2ZpbGVzLypdCglGaXggZnVuY3Rpb24gbmFtZXMgaW4gZXJyb3IgbWVzc2FnZXMuCgpTYXQgRmViIDIyIDA2OjE1OjEzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLnN0YmVuLmJlPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU3VwcG9ydCBmb3IgbW9yZSBsYXRpbiBhbHBoYWJldCBkZWFkIGtleXMgZm9yIGlzby04ODU5LXsxLDIsMyw0LDl9CgljaGFyYWN0ZXJzIHNldHMuCgpGcmkgRmViIDIxIDIwOjM3OjUwIDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4IGluY29ycmVjdCBhcmcgb3JkZXIgaW4gTE9DQUxfQWxsb2MoKSBjYWxsLgoKRnJpIEZlYiAyMSAxODoxOToxNyAxOTk3ICBBbmRyZXcgVGF5bG9yICA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglGaXhlZCBidWcgcmVsYXRlZCB0byBkZXZpY2UgSURzIHJldHVybmVkIGJ5IG11bHRpbWVkaWEKCXN5c3RlbS4gIEltcGxlbWVudGVkIG1jaUdldERldmljZUlELgoKU2F0IEZlYiAxNSAwMDo1ODoxOSAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BhbG9oYS5jb20+CgoJKiBbZGVidWdnZXIvZGJnLnldCglEbyBub3QgZGVyZWZlcmVuY2UgaW52YWxpZCBleHByZXNzaW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEZlYiAxNSAxMTo1OToxNyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqLypdCglDb252ZXJ0ZWQgYSBsb3Qgb2YgZnVuY3Rpb25zIHRvIFdpbjMyIHR5cGVzLgoJUmVtb3ZlZCBIV05EIHR5cGUuCgpGcmkgRmViIDE0IDE1OjA5OjE5IDE5OTcgIE9ubm8gSG92ZXJzIDxvbm5vQHN0YWNrLm5sPgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdNRU1fTU9WRUFCTEUgYmxvY2tzIGZvciBXaW4zMi4KCkZyaSBGZWIgMTQgMDA6MjQ6MzkgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9xdWV1ZS5jXQoJRG8gbm90IHJlYWQgWCBldmVudHMgd2hpbGUgaW4gdGhlIGludGVydGFzayBTZW5kTWVzc2FnZSgpLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgQ2hhclByZXYzMkEoKS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXQoJUmVzdG9yZWQgYnJva2VuIFdIX0NBTExXTkRQUk9DIGZ1bmN0aW9uYWxpdHkgZm9yIGRpYWxvZ3MsIGV0Yy4uLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9tZGkuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10gW2NvbnRyb2xzL2VkaXQuY10gCglBZGRlZCBXSU5fSVNXSU4zMiBmbGFnIHRvIHdpbmRvd3MgY3JlYXRlZCBieSBXaW4zMiBjYWxscy4gCglTZXZlcmFsIG5ldyBXaW4zMiBtZXNzYWdlcyBhcmUgc2VudCB3aGVuIHRoaXMgZmxhZyBpcyBvbi4KCQoJKiBbbXNkb3MvZG9zbWVtLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglTb21lIGNoYW5nZXMgaW4gRE9TIG1lbW9yeSBhbGxvY2F0aW9uLgoKRnJpIEZlYiAgNyAyMTo0NjowMyAxOTk3ICBBbmRyZXcgVGF5bG9yICA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW3dpbjMyL3NlY3VyaXR5LmNdCglBZGRlZCBTSUQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdCglBZGRlZCBkZWJ1Z2dpbmcgY2xhc3MgInNlY3VyaXR5Ii4KCkZyaSAgRmViIDcgMjA6NDY6MzMgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtkZWJ1Z2dlci9tc2MuY10gW2RlYnVnZ2VyL3NvdXJjZS5jXSAKCSAgW2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0XSBbbG9hZGVyL3NpZ25hbC5jXQoJU29tZSBtb3JlIGNoYW5nZXMgZm9yIE9TLzIuIERvZXNuJ3Qgd29yayB5ZXQuCgpGcmkgIEZlYiA3IDA5OjMxOjE3IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglBZGRlZCBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MqLgoKCSogW21pc2MvbnRkbGwuY10gW2luY2x1ZGUvbnRkbGwuaF0KCUFkZGVkIHNvbWUgbmV3IGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUNVUlNPUklDT05fTG9hZEhhbmRsZXI6IGNoZWNrIGFnYWluc3Qgc29tZSBiaXphcnJlIG91dCBvZiBtZW1vcnkKCWNvbmRpdGlvbnMuCgkKCSogW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBEZWZGcmFtZVByb2MzMiosIGFkZGVkIFRyYW5zbGF0ZU1ESVN5c0FjY2VsMzIuCgpXZWQgRmViICA1IDAxOjMxOjA1IDE5OTcgIEpvaG4gWmVybyA8am9obkBnbG9iZS5ncmFwaGlzb2Z0Lmh1PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfSHUucmNdIFttaXNjL29sZTJubHMuY10gW21pc2MvbWFpbi5jXQoJICBbcHJvZ3JhbXMvcHJvZ21hbi9IdS5yY10gW3Byb2dyYW1zL3dpbmhlbHAvSHUucmNdCglBZGRlZCBIdW5nYXJpYW4gbGFuZ3VhZ2Ugc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEZlYiAgMiAxMjozMTowMyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJRml4ZWQgU2V0Q3VycmVudERpcmVjdG9yeSgpIHRvIGFsc28gY2hhbmdlIHRoZSBjdXJyZW50IGRyaXZlLgoKCSogW3dpbjMyL2V4Y2VwdC5jXSBbdG9vbHMvYnVpbGQuY10KCVVzZSBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMgdG8gaW1wbGVtZW50IGV4Y2VwdGlvbiBoYW5kbGluZy4KCUZpeGVkIFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlci4KCkZyaSBKYW4gMzEgMTU6NDI6NDEgIDE5OTcgIERhdmlkIEZhdXJlICA8ZGF2aWQuZmF1cmVAaWhhbXkuaW5zYS1seW9uLmZyPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUFkZGVkIEtFWUJPQVJEX0dlbmVyYXRlTXNnIHRvIGdlbmVyYXRlIENhcHMgTG9jayBhbmQgTnVtTG9jayBldmVudHMKCUFkZGVkIGNhbGxzIHRvIEtFWUJPQVJEX0dlbmVyYXRlTXNnIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkL3JlbGVhc2VkCglvciB3aGVuIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZCwgb3V0IG9mIHdpbmUuCglDaGFuZ2VkIHR5cGUgMy1zdGF0ZSAnVG9nZ2xlS2V5U3RhdGUnIHRvIGJvb2xlYW4uIFRoZSBPbi9PZmYgaXMgZ2l2ZW4KCWJ5IElucHV0S2V5U3RhdGVUYWJsZS4KCldlZCBKYW4gMjkgMjE6NTM6MDQgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbG9hZGVyLypyZXNvdXJjZS5jXVtpZjE2MzIvdGh1bmsuY10KCUVudW1SZXNvdXJjZSogYWRkZWQuCgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLl0gW2xvYWRlci9yZXNvdXJjZS5jXQoJU2l6ZW9mUmVzb3VyY2UzMigpLCBMb2FkQWNjZWxlcmF0b3JzMzIoKSBhZGRlZC4KCgkqIFttaXNjL2xzdHIuY10KCUZvcm1hdE1lc3NhZ2UgJW4gYWRkZWQuCgoJKiBbbWlzYy9jcnRkbGwuY11baW5jbHVkZS9jdHJkbGwuaF1baWYxNjMyL2NydGRsbC5zcGVjXQoJX2NoZHJpdmUsX2Vycm5vLF9pc2N0eXBlIGFkZGVkLgoKCSogW21pc2MvY3B1LmNdCglSZXBsYWNlZCBydW50aW1lX2NwdSBieSBHZXRTeXN0ZW1JbmZvKCkuCgoJKiBbd2luZG93cy9ob29rLmNdW2luY2x1ZGUvaG9vay5oXQoJRml4ZWQgbWFwcGluZyBvZiBob29rcyB0byB3aW4zMi91bmljb2RlLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZGVmd25kLmNdCglVcGRhdGVkIHRvIHdpbjMyIHN0YW5kYXJkLgoJQUxULTxNZW51a2V5PiBmaXhlZC4KCgkqIFt3aW5kb3dzL3F1ZXVlLmNdCglHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQoKSBpbXBsZW1lbnRlZC4KCk1vbiBKYW4gMjcgMTY6NDI6NDkgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvKl0gW2dyYXBoaWNzL3gxMWRydi8qXQoJICBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvZm9udC5jXQoJICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvcGVuLmNdCglNb3ZlZCBTZWxlY3RPYmplY3QgdG8gZ3JhcGhpY3MgZHJpdmVycy4gUHJpbnRlciBzdXBwb3J0IG5vdyB3b3JrcwoJaW4gYSBmZXcgY2FzZXMgYnV0IGlzIGRlZmluaXRlbHkgbm90IGNvbXBsZXRlLiBHZW5lcmljL3RleHQgZHJpdmVyCgl3b3Jrcy4gVGhlIHBvc3RzY3JpcHQgZHJpdmVyIHdvcmtzIGlmIHRydWUgdHlwZSBmb250cyBhcmUgZGlzYWJsZWQKCWZyb20gdGhlIGNvbnRyb2wgcGFuZWwuIFRvIGVuYWJsZSBwcmludGVyIHN1cHBvcnQgYWRkIFByaW50ZXI9b24KCXRvIHRoZSB3aW5lIHNlY3Rpb24gb2YgeW91ciB3aW5lLmNvbmYgZmlsZS4gVGhpcyBjYXVzZXMgd3JpdGUgbm90Cgl0byB3b3JrIHByb3Blcmx5LiBJIGtub3cgdGhhdCBzZXZlcmFsIG90aGVyIHByaW50ZXIgZHJpdmVycyBkbyBub3QKCXdvcmsuCgoJKiBbdG9vbHMvYnVpbGQuY10KCU1ha2UgLnN0YWJzIG5vdCB1c2VkIGZvciBzdnI0IHNpbmNlIGl0IGRvZXNuJ3QgdXNlIEdOVSBhc3NlbWJsZXIuCgoJKiBbbWlzYy9mb250ZW5naW5lLmNdCglNYWtlIHN1cmUgYSBwcmludGYgZG9lc24ndCBjcmFzaCB0aGUgc3lzdGVtLgoKU2F0IEphbiAyNSAxNTo1MzozNSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBQbGF5TWV0YUZpbGVSZWNvcmQoKS4KCgkqIFtvYmplY3RzL2RjLmNdCgloQ2xpcFJnbiBnZXRzIGluaXRpYWxpemVkIGluIEdldERDU3RhdGUoKS4KCkZyaSBKYW4gMjQgMjE6MjI6MjYgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtkZWJ1Z2dlci9zdGFicy5jXQoJSGFuZGxlIGZpbGUgbmFtZXMgYmVnaW5uaW5nIHdpdGggJy8nLgoKRnJpIEphbiAyNCAxODozMzowNCAxOTk3ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogWyovKl0KCVNvbWUgbW9yZSBwYXRjaGVzIGZvciBPUy8yIHN1cHBvcnQuCgpGcmkgSmFuIDI0IDExOjMwOjQxIDE5OTcgIEJhbmcgSnVuLVlvdW5nICA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfS28ucmNdCglVcGRhdGVkIHN1cHBvcnQgZm9yIEtvcmVhbiAoS28pIGxhbmd1YWdlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDE5IDExOjQ2OjQ4IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIExvYWRNb2R1bGUoKSB0byBhbHdheXMgY2FsbCB0aGUgRExMIGluaXRpYWxpemF0aW9uIGNvZGUuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW92ZWQgYWxsIHRoZSBrZXlib2FyZCBzdHVmZiB0byB3aW5kb3dzL2tleWJvYXJkLmMKCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zLgoKU2F0IEphbiAxOCAyMjoyNDo0MSAxOTk3ICBEYXZpZCBNYWtlcGVhY2UgIDxELk1ha2VwZWFjZUBtYWlsYm94LnVxLm96LmF1PgoKICAgICAgICAqIFt0b29scy9tYWtlZGVwLmNdCiAgICAgICAgRml4ZWQgYnVnIHdoaWNoIGNhdXNlcyBTRUdWIG9uIFNvbGFyaXMgeDg2LgoKRnJpIEphbiAxNyAxODozMjoyNyAxOTk3ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobXBjNDkuTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBXTV9VTkRPLCBXTV9DT05URVhUTUVOVSAodGVtcG9yYXJ5IHVzaW5nIFdNX1JCVVRUT05VUCksCglXTV9DT01NQU5ELCBXTV9JTklUUE9QVVBNRU5VLCBXTV9TWVNLRVlET1dOLgoJRml4ZWQgRU1fU0VUU0VMIGFuZCBzb21lIG1pbm9yIGJ1Z3MgKGZlYXR1cmVzKS4KCUhlbmNlOiBmdWxseSBmdW5jdGlvbmFsIHVuZG8gYW5kIGEgd2luOTUgbWVudSB3aXRoIHRoZSByaWdodCBtb3VzZQoJCWJ1dHRvbi4KCgkqIFtpbmNsdWRlL3Jlc291cmNlcy5oXSBbcmVzb3VyY2VzL1RPRE9dIFtyZXNvdXJjZXMvc3lzcmVzXz8/LnJjXQoJQWRkZWQgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBlZGl0IGNvbnRyb2wuCglUcmFuc2xhdGlvbnMsIHBsZWFzZSAuLi4KCkZyaSBKYW4JMTcgMDg6Mjk6NTIgMTk5NyAgRGF2aWQgRmF1cmUgPGRhdmlkLmZhdXJlQGlmaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW92ZSBFVkVOVF9Ub0FzY2lpIHRvIHdpbmRvd3Mva2V5Ym9hcmQuYyAod2hlcmUgbmFtZSBUb0FzY2lpKQoJRml4ZWQgS2V5cGFkIGtleXMgMC05IGFuZCAuIGluIEVWRU5UX2V2ZW50X3RvX3ZrZXkuCglBZGRlZCAzLXN0YXRlIGhhbmRsaW5nIG9mIHRvZ2dsZSBrZXlzIChDYXBzTG9jaywgTnVtTG9jaykgaW4gb3JkZXIKCXRvIG1ha2UgdGhlbSB3b3JrIHdpdGggYW55IFggc2VydmVyLgoJVG9nZ2xlIGtleXMgbm93IGdlbmVyYXRlIFdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG9uIGVhY2ggcHJlc3NpbmcuCgoJKiBbaW5jbHVkZS9rZXlib2FyZC5oXQoJVG90YWxseSByZXBsYWNlZCB0aGUgZmlsZSAoZm9ybWVybHkgY29udGFpbmluZyB0aGUgdmtjYXNlIGRlZmluaXRpb25zKQoJYnkgdGhlIGRlY2xhcmF0aW9uIG9mICdleHRlcm4nIHZhcmlhYmxlcyBjb250YWluZWQgYnkgZXZlbnQuYyBhbmQgdXNlZAoJYnkga2V5Ym9hcmQuYwoJCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglTdGFydGVkIHRvIHJld3JpdGUgVmtLZXlTY2FuIGFuZCBNYXBWaXJ0dWFsS2V5LCB0byBtYWtlIHRoZW0gdXNlIHRoZSAKCXRhYmxlIGtleWMydmtleSBvciBYIGZ1bmN0aW9ucyBvbmx5LgoJVG9Bc2NpaSA6IGFkZGVkIGtleXBhZCAwLTkgYW5kIC4gc3BlY2lhbCBjYXNlLgoJQ2hhbmdlZCB0b2dnbGUga2V5cyBhY3RpdmUgbWFzayBmcm9tIDB4ODAgdG8gMHgxLgoKCSogW21pc2Mva2V5Ym9hcmQuY10KCUZpbGUgZGVsZXRlZC4gQ29udGVudHMgbW92ZWQgdG8gd2luZG93cy9rZXlib2FyZC5jLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgcHV0ZW52IFhLQl9ESVNBQkxFIHRvIGRpc2FibGUgWEtCIGV4dGVuc2lvbiAod2hpY2gsIHdoZW4KCXByZXNlbnQsIGNhdXNlcyBBbHRHciB0byBjaGFuZ2Uga2V5Ym9hcmQgZ3JvdXAgaW5zdGVhZCBvZiBiZWluZyBhCgltb2RpZmllcikuCgpUdWUgSmFuIDE0IDIyOjU2OjQzIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJRG8gbm90IGFzc3VtZSBOdW1Mb2NrTWFzayBpcyBNb2QyTWFzaywgYnV0IGNvbXB1dGUgaXQgYnkgc2Nhbm5pbmcKCW91dHB1dCBvZiBYR2V0TW9kaWZpZXJNYXBwaW5nIGZvciBYS19OdW1fTG9jay4KClR1ZSBKYW4gMTQgMTU6NDk6NDkgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlXyouY10gW2luY2x1ZGUvcGVleGUuaF0gW2luY2x1ZGUvcmVzb3VyY2UzMi5oXQoJICBbZGVidWdnZXIvKi5jXQoJR2VuZXJhbCBjbGVhbiB1cC4KCUNoYW5nZWQgZGVmaW5lcy9zdHJ1Y3R1cmVzIHRvIG1hdGNoIFdpbmRvd3MgTlQgU0RLLgoKCSogW2xvYWRlci9tYWluLmNdCglEb24ndCBjcmFzaCBvbiBlbXB0eSBjb21tYW5kLWxpbmUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCXdpbnBvcy5jIG1hZGUgd2luMzIgY2xlYW4uCgoJKiBbbWlzYy9udGRsbC5jXQoJU29tZSBzdHJpbmcgY29udmVyc2lvbiBhZGRpdGlvbnMuCgoJKiBbZmlsZXMvZmlsZS5jXQoJR2V0RmlsZUF0dHJpYnV0ZXMvR2V0VGVtcEZpbGVOYW1lIGZpeGVkLgoKCSogW21pc2MvdmVyLmNdCglWZXJJbnN0YWxsRmlsZSBpbXBsZW1lbnRlZC4KCk1vbiBKYW4gMTMgMTU6MDM6MTEgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFt0b29scy9idWlsZC5jXTogVXNlIFBSRUZJWCBhbHNvIGluIHN0YWJzIG1lc3NhZ2VzLgoKTW9uIEphbiAxMyAxMDo0MDozMyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi8qXSBbaW5jbHVkZS93aW4xNmRydi5oXQoJTWFueSBmaXhlcyBhbmQgc29tZSBuZXcgZmVhdHVyZXMuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3gxMWRydi9pbml0LmNdCgkgIFtpbmNsdWRlL3gxMWRydi5oXSBbb2JqZWN0cy9mb250LmNdCglHZXRUZXh0TWV0cmljcygpIG1vdmVkIHRvIGdyYXBoaWNzIGRyaXZlci4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFttaXNjL2ZvbnRlbmdpbmUuY10gW21pc2MvTWFrZWZpbGUuaW5dCglOZXcgZHVtbXkgRW5naW5lRW51bWVyYXRlRm9udCwgRW5naW5lUmVhbGl6ZUZvbnQgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJVEVYVEZPUk0xNiBhbmQgRk9OVElORk8xNiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgbW92ZWQgaGVyZSBmcm9tCglpbmNsdWRlL3dpbjE2ZHJ2LmgKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEphbiAxMSAxODoxNzo1OSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9tZW51LmNdCglVcGRhdGVkIHRvIG5ldyBXaW4zMiB0eXBlcy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBXaW5maWxlIGV4dGVuZGVkIHNlbGVjdGlvbiBidWcuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglDaGFuZ2VkIERJUl9TZWFyY2hQYXRoIHRvIHJldHVybiBib3RoIGxvbmcgYW5kIHNob3J0IGZpbGUgbmFtZXMuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglJbXBsZW1lbnRlZCBWRkFUIGlvY3RsIHRvIHJldHJpZXZlIHRoZSBvcmlnaW5hbCBzaG9ydCBmaWxlbmFtZXMKCWZyb20gYSBWRkFUIGZpbGVzeXN0ZW0gKExpbnV4IG9ubHkgZm9yIG5vdykuCglSZXBsYWNlZCBET1NGU19HZXRVbml4RmlsZU5hbWUoKS9ET1NGU19HZXREb3NUcnVlTmFtZSgpIGJ5CglET1NfR2V0RnVsbE5hbWUoKS4KCVByb3Blcmx5IGltcGxlbWVudGVkIEdldFNob3J0UGF0aE5hbWUoKSBhbmQgR2V0RnVsbFBhdGhOYW1lKCkuCglNYWRlIGFsbCBmdW5jdGlvbnMgcmUtZW50cmFudC4KCgkqIFtmaWxlcy9maWxlLmNdIFttaXNjL21haW4uY10KCVJlcGxhY2VkIC1hbGxvd3JlYWRvbmx5IG9wdGlvbiBieSAtZmFpbHJlYWRvbmx5LiBUaGUgZGVmYXVsdCBpcwoJbm93IHRvIHJlcG9ydCBzdWNjZXNzIHdoZW4gb3BlbmluZyBhIHJlYWQtb25seSBmaWxlIGZvciB3cml0aW5nLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUZpeGVkIGJ1ZyBpbiBESUIgYml0bWFwcyBwb2ludGVyIGNhbGN1bGF0aW9uLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglJbXBsZW1lbnRlZCBlbnZpcm9ubWVudCBzdHJpbmdzIGFuZCBHZXQvU2V0U3RkSGFuZGxlIHdpdGggcHJvY2VzcwogCWVudmlyb25tZW50IGJsb2NrLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglSZXdyb3RlIEJ1aWxkQ29udGV4dDMyKCkgdG8gYXZvaWQgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IG5vdCBiZQoJc3VwcG9ydGVkIGJ5IGFsbCBhc3NlbWJsZXJzLgoJCkZyaSBKYW4gMTAgMTc6MTE6MDkgMTk5NyAgRGF2aWQgRmF1cmUgIDxkYXZpZC5mYXVyZUBpZmhhbXkuaW5zYS1seW9uLmZyPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNyZWF0ZWQgdGFibGUga2V5YzJ2a2V5LCB3aGljaCBhc3NvY2lhdGUgYSB2a2V5KCtleHRlbmRlZCBiaXQpIHRvCglhbnkga2V5Y29kZS4gQ2hhbmdlZCBFVkVOVF9ldmVudF90b192a2V5IHRvIHVzZSB0aGlzIHRhYmxlIHRvCglyZXR1cm4gdGhlIGNvcnJlY3QgdmtleS4gQ2hhbmdlZCBFVkVOVF9Ub0FzY2lpIHRvIGdldCB0aGUga2V5Y29kZQoJZnJvbSB0aGlzIHRhYmxlIHRvby4gIEFzc2lnbmVkIE9FTSBzcGVjaWZpYyB2a2V5cyBhcmJpdHJhcmlseS4KCkZyaSBKYW4gMTAgMDk6MjY6MTcgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY19hc3luYy5jXQogICAgICAgIEZpeGVkIHN2cjQgaGVhZGVyIGZpbGVzLgogICAgICAgIENoYW5nZWQgYnplcm8oKSB0byBtZW1zZXQoKS4KCgkqIFt0b29scy9mbnQyYmRmLmNdCiAgICAgICAgUmVtb3ZlZCBiY29weSgpIGFuZCB1c2VkIG1lbWNweSgpIGluc3RlYWQuCgoJKiBbZGVidWdnZXIvbXNjLmNdCiAgICAgICAgSW5jbHVkZSBzdHJpbmcuaCBpbnN0ZWFkIG9mIHN0cmluZ3MuaAoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCiAgICAgICAgSW5jbHVkZSBzdHJpbmcuaCBpbnN0ZWFkIG9mIHN0cmluZ3MuaC4KICAgICAgICBEZWZpbmUgX19FTEZfXyBmb3Igc3ZyNCBzeXN0ZW1zLgoKCSogW2xvYWRlci9zaWduYWwuY10KICAgICAgICBVc2Ugd2FpdCgpIGluc3RlYWQgb2Ygd2FpdDQoKSB3aGljaCBkb2VzbnQgZXhpc3Qgb24gVW5peHdhcmUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQogICAgICAgIFVzZSBzeXNjb25mKCkgaW5zdGVhZCBvZiBnZXRwYWdlc2l6ZSgpIGZvciBzdnI0IHN5c3RlbXMuCgpUaHUgSmFuICA5IDIxOjA3OjIwIDE5OTcgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbTWFrZS5ydWxlcy5pbl0gW01ha2VmaWxlLmluXSBbbWFrZV9vczIuc2hdIFtyYy9NYWtlZmlsZS5pbl0KCSAgW3Rvb2xzL01ha2VmaWxlLmluXSBbZG9jdW1lbnRhdGlvbi93aW5lX29zMi50eHRdCglQYXRjaGVzIGZvciBPUy8yIHN1cHBvcnQuIE5vdGUgdGhhdCBpdCBkb2Vzbid0IGNvbXBpbGUgeWV0LgoKVHVlIEphbiAgNyAyMDowMzo1MyAxOTk3ICBFcmljIFlvdW5nZGFsZSA8ZXJpY0BzdWIyMzA0LmppYy5jb20+CgoJKiBbZGVidWdnZXIvKl0KCU1hbnkgbW9yZSBkZWJ1Z2dlciBpbXByb3ZlbWVudHMgKHNlZSBkZWJ1Z2dlci9SRUFETUUgZm9yIGRldGFpbHMpLgoKVHVlIEphbiAgNyAxNToxMjoyMSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL3RleHQuY10gW2dyYXBoaWNzL3gxMWRydi8qXQoJICBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvKl0KCU1vdmVkIHNvbWUgZGV2aWNlIGRlcGVuZGVudCBjb2RlIGludG8gdGhlIHJlc3AuIHN1YmRpcnMuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUvbWV0YWZpbGVkcnYuaF0gW2luY2x1ZGUveDExZHJ2LmhdCglQcm90b3R5cGVzIGFkZGVkLAoJRENfRlVOQ1RJT05TOiBHZXRQaXhlbCBhZGRlZCwgc29tZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbnMgcmVtb3ZlZC4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJQ3JlYXRlUG9seVBvbHlnb25SZ24zMiBhZGRlZC4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVF1ZXJ5RG9zRGV2aWNlIGFkZGVkLgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZTogYnJva2VuIGhlYXAgbWFuYWdlbWVudCBmaXhlZC4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXQoJR2V0L1NldFRocmVhZFByaW9yaXR5L1ByaW9yaXR5Q2xhc3MgYWRkZWQuCgpNb24gSmFuICA2IDIxOjU1OjMwIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJVG9Bc2NpaSA6IFVzZSBFVkVOVF9Ub0FzY2lpIGluc3RlYWQuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJa2V5cGFkX2tleSA6IERvIG5vdCBjb252ZXJ0IFhLX01vZGVfc3dpdGNoIHRvIFZLX01FTlU7IHJlY29nbml6ZQoJa2V5cGFkIGN1cnNvciBrZXlzLgoJRVZFTlRfZXZlbnRfdG9fdmtleSA6IE5ldyBmdW5jdGlvbiwgdG8gdHJhbnNmb3JtIGEgWCBrZXljb2RlCglpbnRvIGEgTVN3aW4gdmtleSArIGV4dGVuZGVkIGJpdC4KCUVWRU5UX1RvQXNjaWkgOiBOZXcgZnVuY3Rpb24sIHRvIHRyYW5zZm9ybSBhIHZrZXkgKyBleHRlbmRlZCBiaXQKCSgrIGtleSBzdGF0ZSB0YWJsZSkgaW50byBhc2NpaSBjaGFyKHMpLCB1c2luZyBYTG9va3VwU3RyaW5nLCBhbmQKCXJlY29nbml6aW5nIGRlYWQgY2hhcnMuCglFVkVOVF9rZXkgOiBUcmFuc2Zvcm0gQWx0R3IgaW50byBDdHJsK0FsdCBzZXF1ZW5jZTsgY2FsbAoJRVZFTlRfZXZlbnRfdG9fdmtleSBmb3Iga2V5Y29kZSB0byB2a2V5IGNvbnZlcnNpb247IGZpeGVkCglwcmV2aW91cywgY29udGV4dCBhbmQgZXh0ZW5kZWQgYml0cy4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglJbmNsdWRlIHN0ZGRlYnVnLmgsIHRvIGdldCAtZGVidWdtc2cgbWVzc2FnZXMuCglHZXRLZXlTdGF0ZSA6IEhhbmRsZSBWS19NQlVUVE9OIGNhc2UuCglHZXRLZXlib2FyZFN0YXRlLCBTZXRLZXlib2FyZFN0YXRlIDogRGVidWdnaW5nIG1lc3NhZ2VzIGFkZGVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJVHJhbnNsYXRlTWVzc2FnZSA6IEhhbmRsZSBkZWFkIGNoYXJzLgoKTW9uIEphbiAgNiAyMDoxMDoxMSAxOTk3ICBEb21pbmlrIFN0cmFzc2VyICA8Ym00MjQ5NTNAbXVlbmNoZW4ub3JnPgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10gW21pc2MvY3J0ZGxsLmNdCglDKysgZnVuY3Rpb25zIG5ldy9kZWxldGUvc2V0X25ld19oYW5kbGVyIGltcGxlbWVudGVkLgoKTW9uIEphbiAgNiAxNTo0ODoxNSAxOTk3IEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtcGM0OS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJTW92ZWQgdGhlIGVkaXQgY29udHJvbCB0byAzMiBiaXRzLgoJSW5jbHVkZWQgbmV3ICh3aW45NSkgbWVzc2FnZSBkZWZpbml0aW9ucyBpbiB3aW5kb3dzLmgKCUltcGxlbWVudGVkIEVNX1NDUk9MTENBUkVULCBFTV9TRVRNQVJHSU5TLCBFTV9HRVRNQVJHSU5TLAoJRU1fR0VUTElNSVRURVhULCBFTV9QT1NGUk9NQ0hBUiwgRU1fQ0hBUkZST01QT1MuCglCcm9rZSBFTV9TRVRXT1JEQlJFQUtQUk9DIChpbnRlcm5hbCB3b3Jkd3JhcCBzdGlsbCB3b3JrcykuCglGaXhlZCBzb21lIGJ1Z3MsIGludHJvZHVjZWQgYSBjb3VwbGUgb2Ygb3RoZXJzLgoJVGV4dCBidWZmZXIgaXMgbm93IGluaXRpYWxseSBpbiAzMi1iaXQgaGVhcC4KCgkqIFtjb250cm9scy9FRElULlRPRE9dIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvd2lkZ2V0cy5jXQoJICBbaWYxNjMyL3dwcm9jcy5zcGVjXSBbbGlicmFyeS9taXNjc3R1YnMuY10gW3dpbmRvd3MvZGVmZGxnLmNdCgkgIFttaXNjL2NvbW1kbGcuY10KCVVwZGF0ZWQgdG8gd29yayB3aXRoIDMyLWJpdCBlZGl0IGNvbnRyb2wuCgpTYXQgSmFuICA0IDIyOjA3OjI3IDE5OTcgIE8uRmxlYmJlICA8Ty5GbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVVzZSBtbWFwIHJhdGhlciB0aGVuIG1hbGxvYy4gQmV0dGVyIHdvcmthcm91bmQgZm9yIGNsZWFuCglzZWdtZW50cy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEphbiAgMSAxNTozNjoxNyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglVc2UgRmluZEZpcnN0RmlsZS9GaW5kTmV4dEZpbGUgaW4gTElTVEJPWF9EaXJlY3RvcnkuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglSZXdyb3RlIEZpbmRGaXJzdEZpbGUvRmluZE5leHRGaWxlIHRvIHVzZSBET1NGU19GaW5kTmV4dCgpLgoKCSogW2ZpbGVzL2ZpbGUuY10gW2ZpbGVzL2RpcmVjdG9yeS5jXQoJVXNlIFdpbjMyIGtlcm5lbCBvYmplY3RzIGFuZCBoYW5kbGVzIGZvciBmaWxlIGhhbmRsZXMuCglVbmlmaWVkIFNlYXJjaFBhdGgoKSBhbmQgT3BlbkZpbGUoKS4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXQoJTW92ZWQgdG8gaWYxNjMyLyBkaXJlY3RvcnkuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2RlYnVnZ2VyLypdIFttaXNjZW11LypdCglXaW4xNiByZWdpc3RlciBmdW5jdGlvbnMgbm93IHJlY2VpdmUgdGhlIHNhbWUgQ09OVEVYVCAqIHN0cnVjdHVyZQoJYXMgV2luMzIgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvc2lnY29udGV4dC5oXSBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgbmV3IG1hY3JvcyB0byBnZXQgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIFNJR0NPTlRFWFQKCXN0cnVjdHVyZSAob25seSB1c2VkIGZvciBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbm93KS4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXSAoTmV3IGZpbGVzKQoJQWxsb2NhdGUgcHJvY2VzcyBhbmQgdGhyZWFkIHN0cnVjdHVyZXMuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3dpbjMyL2szMm9iai5jXQoJQWRkZWQgV2luMzIga2VybmVsIG9iamVjdHMgYW5kIGhhbmRsZXMgbWFuYWdlbWVudC4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQ3JlYXRlIGEgV2luMzIgcHJvY2VzcyBhbmQgdGhyZWFkIGZvciBldmVyeSBXaW4xNiB0YXNrLgoKCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9zaGVsbC5jXSBbd2luZG93cy9tc2dib3guY10KCUJ1aWx0LWluIHJlc291cmNlcyBhcmUgbm93IGluIFdpbjMyIGZvcm1hdC4gVGhpcyBhbHNvIGF2b2lkcwoJMTYtYml0IGNhbGxiYWNrcyBmb3IgYnVpbHQtaW4gZGlhbG9ncy4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglEaWZmZXJlbnRpYXRlIGJldHdlZW4gMTYtYml0IGFuZCAzMi1iaXQgZmlsZSBoYW5kbGVzLgoKCSogW21pc2NlbXUvaW50Ki5jXQoJTW92ZWQgYWxsIGludCBlbXVsYXRpb24gdG8gbXNkb3MvIGRpcmVjdG9yeS4KCgkqIFttc2Rvcy8qXQoJTmV3IGRpcmVjdG9yeSBtc2Rvcy8gY29udGFpbnMgYWxsIE1TLURPUyBlbXVsYXRpb24gY29kZSB0aGF0IGNhbgoJYWxzbyBiZSB1c2VkIGZvciBXaW5lbGliOyB0aGlzIHNob3VsZCBlbmFibGUgV2luZWxpYiBhcHBzIHRvIHVzZQoJRE9TM0NhbGwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgoKCSogW3JjL3dpbmVyYy5jXQoJQSBmZXcgYnVnIGZpeGVzIGZvciBXaW4zMiByZXNvdXJjZSBmb3JtYXQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUhhY2sgaW4gV0lOUE9TX1Jlb3JkZXJPd25lclBvcHVwcygpIHRvIGF2b2lkIFggY3Jhc2hlZCAoc3RpbGwgbm90CglyaWdodCB0aG91Z2gpLgoKU3VuIERlYyAyOSAxNzo0Nzo1NSAxOTk2ICBPLiBGbGViYmUgPGZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJTWFrZSBzdXJlIEJTUyBvZiBhIFBFX0ltYWdlIGlzIHplcm8uCgpTYXQgRGVjIDI4IDIyOjE1OjM0IDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsV2luZG93RXgoKSByZXdyaXRlLCBTY3JvbGxEQygpIGZpeC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgQWx0LVNwYWNlIGNyYXNoZXMgaW4gZGlhbG9ncy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNvbWUgY2hhbmdlcyBpbiBtb3VzZSBtZXNzYWdlIGdlbmVyYXRpb24uCgpUaHUgRGVjIDI2IDA5OjI1OjI0IDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbZGVidWdnZXIvc3RhYnMuY10KCUR1bW15IERFQlVHX1JlYWRFeGVjdXRhYmxlRGJnSW5mbyBwcm92aWRlZCBmb3IgIV9fRUxGX18gY2FzZS4KClR1ZSBEZWMgMjQgMDA6NTk6MDUgTUVUIDE5OTYgIE1hcnRpbiBCdWNrIDxtYXJ0aW4tMi5idWNrQHN0dWRlbnQudW5pLXVsbS5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDaGFuZ2VkIFhLX1BhZ2Vfe1VwLERvd259IHRvIFhLX3tQcmlvcixOZXh0fSBmb3IgWDExUjUKCWNvbXBhdGliaWxpdHkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBEZWMgMjIgMTM6MzA6MTggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXSBbZ3JhcGhpc2MvbWV0YWZpbGVkcnYvbWFwcGluZy5jXQoJQWRkZWQgbWFwcGluZyBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy8qLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGEgbG90IG9mIFdpbjMyIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvaGVhcC5jXQoJQWRkZWQgSEVBUF9zdHJkdXBBdG9XIGFuZCBIRUFQX3N0cmR1cFd0b0EuCgoJKiBbbWlzYy9sc3RyLmNdIFttZW1vcnkvc3RyaW5nLmNdCglNb3ZlZCBPRU08LT5BbnNpIGNvbnZlcnNpb24gdG8gc3RyaW5nLmMuIEZpeGVkIGEgY291cGxlIG9mIGJ1Z3MuCgoJKiBbb2JqZWN0L2ZvbnQuY10KCUF2b2lkIHVwcGVyY2FzaW5nIGZvbnQgbmFtZXMuCgoJKiBbd2luZG93cy9ob29rLmNdCglTZXQgZHMgPSBzcyBiZWZvcmUgY2FsbGluZyBob29rIHByb2NlZHVyZS4KClNhdCBEZWMgMjEgMjE6NDQ6MTcgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2UgY29sb3JzIGFsbG9jYXRlZCBieSBvdGhlciBjbGllbnRzLiAKCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglTZXQgZGVmYXVsdCBibGluayB0aW1lIHRvIDUwMC4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ldmVudC5jXQoJRGVsZXRlIFggY29udGV4dCBiZWZvcmUgWERlc3Ryb3lXaW5kb3coKS4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglGaXhlZCBHZXRLZXlTdGF0ZSgpIG9uY2UgbW9yZS4KCkZyaSBEZWMgMjAgMDg6MjY6MzMgMTk5NiAgRXJpYyBZb3VuZ2RhbGUgPGVyaWNAc3ViMjMwNC5qaWMuY29tPgoKCSogW2RlYnVnZ2VyLyouY10KCUxvdHMgb2YgYnVpbHQtaW4gZGVidWdnZXIgaW1wcm92ZW1lbnRzOiBwYXJzZSBXaW4zMiBFWEVzIGRlYnVnCiAJaW5mb3JtYXRpb24sIGRpc3BsYXkgbG9jYWwgdmFyaWFibGVzLCBzb3VyY2UgZmlsZXMgYW5kIGxpbmUKIAludW1iZXJzLCBnZXQgc3ltYm9scyBkaXJlY3RseSBmcm9tIHRoZSBXaW5lIGV4ZWN1dGFibGUsIGV0Yy4KClR1ZSBEZWMgMTcgMjI6Mzk6NDIgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KIAlFeHRlcm4gZGVjbGFyYXRpb24gYWRkZWQgZm9yIGhfZXJybm8uCgpUdWUgRGVjIDE3IDIxOjI5OjM0IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCB0d28gbW9yZSBDQlQgaG9vayBjYWxsczogSENCVF9DTElDS1NLSVBQRUQvSENCVF9LRVlTS0lQUEVELgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRGVjIDE1IDE2OjE4OjE1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10KCUZpeGVkIEJJVEJMVF9TdHJldGNoSW1hZ2UgZm9yIHBhcnRpYWxseSBjb3ZlcmVkIG9yIGludmVydGVkCgliaXRtYXBzLgoKCSogW29iamVjdHMvZGliLmNdCglGaXhlZCB0aGUgdXBzaWRlLWRvd24gYml0bWFwIHByb2JsZW0uCgpTYXQgRGVjIDE0IDAyOjQ5OjU3IDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJSXNNZW51IGFuZCBSZW1vdmVNZW51IGFkZGVkICh1c2UgZXhpc3RpbmcgV2luMTYgZnVuY3Rpb25zKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNvcnJlY3Rpb25zIHRvIEJJVE1BUElORk9IRUFERVIgc3RydWN0dXJlLgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJTmV3IGZ1bmN0aW9uIEdldE1vZHVsZUZpbGVOYW1lMzJBIChoZWF2aWx5IGJhc2VkIG9uIG9yaWdpbmFsCglXaW4xNiB2ZXJzaW9uKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUhhY2sgdG8gYWxsb3cgZmlsZXMgd2l0aCBzaG9ydCBQRSBoZWFkZXIgdG8gYmUgbG9hZGVkIChlLmcuCglDT01ETEczMi5ETEwgZnJvbSBXaW4zMnMpLgoKCSogW21pc2Mvd2luc29ja19hc3luYy5jXQoJI2lmIG91dCBFSURSTSBjYXNlIChub3QgcHJlc2VudCBpbiBGcmVlQlNEKS4KCgkqIFt0b29scy9idWlsZC5jXQoJUmVtb3ZlIHRyYWlsaW5nIGNvbW1lbnRzIGZyb20gLnMgZmlsZXMgZ2VuZXJhdGVkIGJ5IGJ1aWxkCglhcyB0aGVzZSBicmVhayBhc3NlbWJseSB3aGVuIG5vdCBydW4gdGhyb3VnaCBwcmUtcHJvY2Vzc29yLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQoJTmV3IGZ1bmN0aW9uIFBvbHlsaW5lMzIgLSBiYXNlZCBvbiBvcmlnaW5hbCBQb2x5bGluZS4gTmVlZHMKCW1ldGFmaWxlIHN1cHBvcnQgYWRkaW5nIHN0aWxsLgoKRnJpIERlYyAxMyAxMzowNDowNiAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFt3aW4zMi9maW5kZmlsZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJRmluZEZpcnN0RmlsZTMyQSgpOiBVc2UgZG9zIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBkcml2ZSBwcmVmaXhlcy4KCUZpbmROZXh0RmlsZTMyQSgpOiBGaWxsIGluIGZpbGUgYXR0cmlidXRlIGluZm9ybWF0aW9uLgoJSW1wbGVtZW50IEZpbmRGaXJzdEZpbGUxNiwgRmluZE5leHRGaWxlMTYsIEZpbmRDbG9zZTE2LgoKCSogW2ZpbGVzL2RyaXZlLmNdCglHZXRDdXJyZW50RGlyZWN0b3J5MzJBIC0gRml4IHByb2JsZW0gd2l0aCBudWxsIDNyZCBjaGFyYWN0ZXIgaW4KCXN0cmluZy4KClR1ZSBEZWMgMTAgMTQ6NDk6MDcgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbd2luZG93cy9wYWludGluZy5jXVt3aW5kb3dzL21lc3NhZ2UuY10KCURvbid0IHVzZSBsaW5rZWQgbGlzdHMgdG8gY2FsbCBTZW5kTWVzc2FnZSgpLCBmb3IgaXQgbWlnaHQgZGVzdHJveQogCXRoZSBjdXJyZW50IGxpc3RlbnRyeS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXhlZCB0ZW1wb3JhcnkgZmlsZSBzYXZpbmcgKHJlbmFtZSBkb2Vzbid0IHdvcmsgYWNyb3NzCglwYXJ0aXRpb25zKS4KCgkqIFtmaWxlcy8qLmNdCglHZXRGdWxsUGF0aE5hbWUqLEdldERyaXZlVHlwZTMyQSBmaXhlZCwgQ3JlYXRlRGlyZWN0b3J5RXgqLAoJR2V0Vm9sdW1lSW5mb3JtYXRpb24zMlcgZml4ZWQuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJTG9hZExpYnJhcnkqIHVwZGF0ZWQgdG8gbmV3IG5hbWluZyBzdGQuLCAqMzJXIGFkZGVkLgoKCSogW3dpbjMyL2NvbnNvbGUuY10gW2luY2x1ZGUvd2luY29uLmhdCglBZGRpdGlvbnMgZm9yIE5UIGNvbW1hbmRsaW5lIGV4ZWN1dGFibGVzLgoKCSogW2lmMTYzMi9hZHZhcGkzMi5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvaW5pdC5jXQkKCUdldFVzZXJOYW1lMzJXIGFkZGVkLCBHZXRDb21wdXRlck5hbWUzMlcgYWRkZWQsCglHZXRTdGFydHVwSW5mbzMyVyBhZGRlZCwgR2V0U3lzdGVtSW5mbyB1cGRhdGVkIHRvIE5UIHN0YW5kYXJkLgoKCSogW3dpbmRvd3MvbXNnYm94LmNdW21pc2Mvc2hlbGwuY11bd2luZG93cy9ncmFwaGljcy5jXQoJTWVzc2FnZUJveDMyVywgU2hlbGxBYm91dDMyVywgQ29tbWFuZExpbmVUb0FyZ3ZXLCBQb2x5Z29uMzIgYWRkZWQuCgoJKiBbbWlzYy9jcnRkbGwuY11baW5jbHVkZS9jcnRkbGwuaF1baWYxNjMyL2NydGRsbC5zcGVjXVttaXNjL250ZGxsLmNdCgkgIFtpZjE2MzIvbnRkbGwuc3BlY10KCUxvdCBvZiBuZXcgdW5pY29kZSBmdW5jdGlvbnMgYWRkZWQgKG5lZWRlZCBmb3IgTlQpLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJTnRDdXJyZW50VGViIGFkZGVkLgoKVHVlIERlYyAxMCAyMjozOTozMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVJld3JvdGUgZnVuY3Rpb24gVHJhbnNsYXRlQWNjZWxlcmF0b3IoKS4KCk1vbiBEZWMgIDkgMTQ6NTI6MTMgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSAKCURFRldORF9TZXRUZXh0KCk6IFNldCBpY29uIG5hbWUuCgpTdW4gRGVjICA4IDIzOjMwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KCSAgW2lmMTYzMi93aW5zb2NrLnNwZWNdCglJUEMgcmVzb3VyY2UgY2xlYW51cCwgYnVnZml4ZXMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvZGVmZGxnLmNdCglNb3JlIERlZkRsZ1Byb2MoKSBmaXhlcy4KClN1biBEZWMgIDggMTQ6MDE6NDIgMTk5NiAgVmFkaW0gU3RyaXpoZXZza3kgIDxzdHJpdkBtcy5jb20+CgoJKiBbbWlzYy9jbGlwYm9hcmQuY10gW29iamVjdHMvZm9udC5jXSBbd2luMzIvaW5pdC5jXQogCSAgW3dpbjMyL25ld2Zucy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgYSBmZXcgV0lOMzIgZnVuY3Rpb25zIHdoaWNoIG5lZWRlZCB0byBydW4gc29tZSB3aW4zMgoJYWNjZXNzb3JpZXMuIENsb2NrIHNob3VsZCBub3cgd29yayBhbG1vc3QgYXMgd2VsbCBhcyAxNiBiaXQgdmVyc2lvbi4KCUFkZDogUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQzMlcgR2V0VGV4dEV4dGVudEV4UG9pbnQzMioKCSAgICAgR2V0TW9kdWxlSGFuZGxlVywgRGlzYWJsZVRocmVhZExpYnJhcnlDYWxscyAoZW1wdHkgc3R1YiksCgkgICAgIFBvbHlnb24zMgoJRml4OiBQb2x5Z29uMTYgcG9zc2libGUgbWVtb3J5IGxlYWsgb24gZXJyb3IgcmV0dXJuLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRGVjICA4IDE0OjUxOjU3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNoZWNrIHRvIHNlZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYnVpbGRpbmcgYSBETEwgd2hlbgoJdGhlIC0td2l0aC1kbGwgb3B0aW9uIGlzIHVzZWQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRG9uJ3Qgc2VuZCBMQk5fU0VMQ0hBTkdFIHRvbyBvZnRlbi4KCUFkZGVkIFdNX0NIQVJUT0lURU0gc3VwcG9ydC4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbbGlicmFyeS9NYWtlZmlsZS5pbl0KCUJ1aWxkIHdpbmVzdHViLm8gYW5kIGxpbmsgaXQgd2l0aCBXaW5lbGliIHByb2dyYW1zLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgJyYmJyBpbiBEcmF3VGV4dCgpLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCAtbyBvcHRpb24uCgpTYXQgRGVjIDcgMTI6MDc6MDcgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbd2luMzIvdGhyZWFkLmNdCglHZXRDdXJyZW50VGhyZWFkKCk6IHJldHVybiAtMiAoY3VycmVudCB0aHJlYWQgcHNldWRvLWhhbmRsZSkuCglHZXRDdXJyZW50VGhyZWFkSWQoKTogcmV0dXJuIEdldEN1cnJlbnRUYXNrKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUdldFRleHRFeHRlbnRQb2ludDMye0EsV31CdWdneSgpOiBmb3IgZnV0dXJlIGJ1Zy1jb21wYXRpYmlsaXR5LgoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdCglGaW5kQ2xvc2UoKTogaWdub3JlIElOVkFMSURfSEFORExFX1ZBTFVFIChsaWtlIFdpbjk1KS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXSBbaWYxNjMyL3VzZXIuc3BlY10KCSAgW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbmRvd3MvZm9jdXMuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJSG9va3MgcmV3cml0dGVuIHRvIHN1cHBvcnQgV2luMzIuCgoJKiBbbWlzYy93aW5zb2NrLmNdCglXSU5TT0NLX3NlbGVjdCgpOiBuZWVkIHRvIHB1dCBzb2NrZXRzIHdpdGggZXJyb3JzIGludG8gZXhjZXB0ZmRzLgoJV0lOU09DS19zb2NrZXQoKTogZml4IGVycm9yIHJldHVybi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0V2luZG93V29yZCgpOiBjYWxsIFNldFBhcmVudCBvbiBHV1dfSFdORFBBUkVOVC4KCldlZCBEZWMgIDQgMjI6MDM6MDUgMTk5NiAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJQ2hlY2sgaWYgYnVmIGlzIE5VTEwgYmVmb3JlIGNvcHlpbmcgc3RyaW5nIGluIEdldEZ1bGxQYXRoTmFtZTMyQSgpLgoKV2VkIERlYyAgNCAyMTo0MDo1OSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKICAgICAgICAqIFtncmFwaGljcy93aW5nLmNdIFtpZjE2MzIvd2luZy5zcGVjXQoJSW1wbGVtZW50ZWQgbWFueSBXaW5HIGZ1bmN0aW9ucywgYnV0IHNvbWUgZG9uJ3Qgc2VlbSB0bwoJd29yayBjb3JyZWN0bHkgKHByb2JhYmx5IGR1ZSB0byB0aGUgb25lIG5vdCBkb25lKS4KCQpXZWQgRGVjICA0IDAzOjM4OjI1IDE5OTYgIExlZSBKYWVraWwgPGp1cmlhQHB1bWEua2FpdGVjaC5yZS5rcj4KCgkqIFttaXNjL21haW4uY10KCUltcGxlbWVudGVkIGEgZmV3IG1vcmUgb2YgdGhlIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCkgY2FzZXMuCgpTdW4gRGVjICAxIDIyOjMwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+IAoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wcm92ZWQgZm9jdXMgcmVjdGFuZ2xlIHBhaW50aW5nLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4ZWQgSUUzLjAgcHJvYmxlbXMgd2l0aCBEV0xfTVNHUkVTVUxULgoKU3VuIERlYyAgMSAyMDo0OTozMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUNoYW5nZWQgZXJyb3IgaGFuZGxpbmcgaW4gUFJPRklMRV9TZXRTdHJpbmcoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE5vdiAzMCAxOToyMToxNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmVdCglSZS1nZW5lcmF0ZWQgd2l0aCBhdXRvY29uZiAyLjExLiBMZXQgbWUga25vdyBpZiB5b3UgaGF2ZQoJcHJvYmxlbXMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvb2xkbGJveC5jXQoJTGlzdGJveGVzIHJld3JpdHRlbiBmcm9tIHNjcmF0Y2guIE1vdmVkIG9sZCBjb2RlIHN0aWxsIHVzZWQgYnkKCWNvbWJvYm94ZXMgdG8gb2xkbGJveC5jCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJVXNlIHRlbXBvcmFyeSBmaWxlIHdoZW4gc2F2aW5nIHJlZ2lzdHJ5LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERsZ0Rpckxpc3QoKSBhbmQgRGxnRGlyTGlzdENvbWJvQm94KCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCB0cmFuc2xhdGlvbiBmb3IgbGlzdGJveCBXaW4zMiBtZXNzYWdlcy4KClNhdCBOb3YgMzAgMjE6MDA6MDAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIHNvbWUgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBDVEwzRCBETEwuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1hZGUgZGlhbG9nIHdpbmRvd3MgZml0IGludG8gdGhlIGRlc2t0b3AuCgoJKiBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KCU5ldyBXaW5zb2NrIGVuZ2luZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUdldE1lc3NhZ2UoKSBmaXhlcy4KCgkqIFt3aW5kb3dzL3F1ZXVlLmNdIFt3aW5kb3dzL2hvb2suY10gW3dpbmRvd3Mvd2luLmNdCglTZXRNZXNzYWdlUXVldWUoKSBmaXhlcy4KCkZyaSBOb3YgMjkgMTA6MjU6MTIgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFtvYmplY3RzL3RleHQuY10KCURyYXdUZXh0MTYoKTogRml4ZWQgcmV0dXJuIHZhbHVlLgoKVHVlIE5vdiAyNiAxNDo0NzowOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9wcm9maWxlLmNdIFsqLypdCglBZGRlZCBXaW4zMiBwcm9maWxlIGZ1bmN0aW9ucywgdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0YW5kYXJkLgoKCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIEVudW1Gb250czMyKiwgRW51bUZvbnRGYW1pbGllc0V4KiwgY2hhbmdlZCBwcm90b3R5cGVzIGFuZAoJc3RydWN0dXJlcy4KCgkqIFttaXNjL29sZTJubHMuY10gW2lmMTYzMi90aHVuay5jXQoJQWRkZWQgRW51bVN5c3RlbUxvY2FsZXMoKSAod2luaGVscC5leGUpLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUFkZGVkIFdpbmRvd3MgMy4xIHJlZ2lzdHJ5IGxvYWRlciBzdXBwbGllZCBieSBUb3IgU2p4d2FsbCwgdG9yQHNuLm5vCgoJKiBbd2luMzIvZmlsZS5jXQoJUGFydGlhbGx5IGZpeGVkIENyZWF0ZUZpbGVNYXBwaW5nKCksIGFkZGVkIFVubWFwVmlld09mRmlsZSgpLgoKU2F0IE5vdiAyMyAyMzozNjowNSAxOTk2ICBSb25hbiBXYWlkZSAgPHdhaWRlckB3YWlkZXIuaWU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgc29tZSBGSVhNRXMgcmVsYXRpbmcgdG8gU2hlbGxFeGVjKCkgYW5kIEZpbmRFeGVjdXRhYmxlKCkuCgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCBhIGZldyBtb3JlIG9mIHRoZSBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIGNhc2VzLgoKVHVlIE5vdiAxOSAwMToyNDozNCAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2luY2x1ZGUva2V5Ym9hcmQuaF0KCU5ldyBmaWxlLCBuZXcgbWFjcm8gV0lORV9WS0VZX01BUFBJTkdTICh1c2luZyBjb2RlIHRha2VuIGZyb20gZXZlbnQuYykuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglOZXcgW1ZLX0EsIFZLX1pdIGFuZCBbVktfMCwgVks5XSBtYWNyb3MuCgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJRml4ZXMgaW4gS2V5VGFibGUgYW5kIFRvQXNjaWkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX2luaXQgOiBHaXZlIGRlZmF1bHQgdmFsdWUgZm9yIE1TV0lOICJzeXN0ZW0iIGZvbnQuCglGT05UX01hdGNoRm9udCA6IERvIG5vdCB0cnkgZXZlcnkgc2l6ZSBvZiBhIGZvbnQgZmFtaWx5IGlmIHRoZQoJZmFtaWx5IGRvZXMgbm90IGV4aXN0LgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCWxhc3RFdmVudENoYXIgaGFjayByZW1vdmVkLgoJS2V5U3RhdGVUYWJsZSByZXBsYWNlZCBieSBJbnB1dEtleVN0YXRlVGFibGUgKG1haW50YWluZWQgaW4gZXZlbnQuYykKCWFuZCBRdWV1ZUtleVN0YXRlVGFibGUgKG1haW50YWluZWQgaW4gbWVzc2FnZS5jKS4KCUVWRU5UX2tleSA6IENvcnJlY3Rpb25zIHRvIHRoZSBleHRlbmRlZCBiaXQgc2V0dGluZy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUltcGxlbWVudGF0aW9uIG9mIGEgbmV3IFF1ZXVlS2V5U3RhdGVUYWJsZSA6IHRhYmxlIG9mIGtleSBzdGF0ZXMKCXZhbGlkIHdoZW4gbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBieSBHZXRNZXNzYWdlIG9yIFBlZWtNZXNzYWdlLAoJYW5kIHZhbGlkIGZvciBUcmFuc2xhdGVNZXNzYWdlLgoJVHJhbnNsYXRlTWVzc2FnZSA6IENvbnZlcnQgV00qS0VZIG1lc3NhZ2VzIHVzaW5nIFF1ZXVlS2V5U3RhdGVUYWJsZQoJYW5kIFRvQXNjaWkuCgkKTW9uIE5vdiAxOCAxNjo1OTowMSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW2dyYXBoaWNzL01ha2VmaWxlLmluXSBbZ3JhcGhpY3Mvd2luZy5jXQoJICBbaWYxNjMyL3dpbmcuc3BlY10KCVNvbWUgZnVuY3Rpb25zIGZvciBXaW5HIHN1cHBvcnQsIG1vc3RseSBlbXB0eSBzdHVicy4KCgkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJTWFueSBmdW5jdGlvbnMgYWRkZWQgdG8gQ1JURExMLCBtb3N0bHkgY2FsbHMgdG8gVW5peCBDIGxpYnJhcnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgMTcgMTU6MDE6NDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZ3JhcGhpY3MvYml0Ymx0LmNdIFtncmFwaGljcy94MTFkcnYvYml0Ymx0LmNdCglNb3ZlZCBCaXRCbHQgb3BlcmF0aW9ucyB0byB0aGUgbmV3IGdyYXBoaWNzIGRyaXZlcgoJaW50ZXJmYWNlLiBJbXBsZW1lbnRlZCBQYXRCbHQzMiwgQml0Qmx0MzIgYW5kIFN0cmV0Y2hCbHQzMi4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglVbmlmaWVkIE1lbU1hbkluZm8oKSBhbmQgR2xvYmFsTWVtb3J5U3RhdHVzKCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXhlZCBFeHRUZXh0T3V0KCkgdG8gYWx3YXlzIHVzZSBwaHlzaWNhbCBjb29yZHMgZm9yIGNsaXAgcmVjdC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgRGxnRGlyU2VsZWN0RXgoKSBhbmQgV2luMzIgdmVyc2lvbiBvZiBEbGdEaXJTZWxlY3QqLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUF2b2lkIGJ1c3ktbG9vcGluZyBpbiBFVkVOVF9XYWl0WEV2ZW50IHdoZW4gbm8gdGltZXIgaXMgcGVuZGluZwoJKHRoYW5rcyB0byBUaG9tYXMgS29lbmlnKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglNb3ZlZCB1cGRhdGUgcmVnaW9uIGNsaXBwaW5nIGZvciBDU19QQVJFTlREQyB3aW5kb3dzIHRvIEJlZ2luUGFpbnQoKS4KCQoJKiBbd2luZG93cy9zY3JvbGwuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgU2Nyb2xsV2luZG93KCkgYW5kIFNjcm9sbERDKCkuCgpUdWUgTm92IDEyIDA5OjUyOjE3IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzLyouY10gW3dpbjMyL2ZpbGUuY10KCVNvbWUgd2luMzIgZmlsZXRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgYWRkZWQuCglGaXhlZCBiZWhhdmlvdXIgd2l0aCBET1MgZHJpdmVzIHBvaW50aW5nIHRvIFVOSVggLwoJU2V0Q3VycmVudERpcmVjdG9yeSgpIG1heSBhbHNvIGdldCBYOlx4eHggcGF0aHMuCglGaXhlZCBGSUxFX09wZW4gd2hlbiBjYWxsZWQgZnJvbSBDcmVhdGVGaWxlKCkuCglBZGRlZCBHZXRGaWxlU2l6ZSgpLCBNYXBWaWV3T2ZGaWxlKCksIFNldEZpbGVUaW1lKCksIEdldEZpbGVUaW1lKCkuCgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIHNvbWUgbmV3IGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglTb21lIHRodW5rcyBpbnRvIHdpbjE2IGNvZGUgYWRkZWQuCgoJKiBbd2luMzIvaW5pdC5jXQoJQWRkZWQgR2V0U3lzdGVtSW5mbygpLCByZW1vdmVkIEdldE1vZHVsZUZpbGVOYW1lKCkgc3R1Yi4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10gW2lmMTYzMi90aHVuay5jXQoJQWRkZWQgRW51bVN5c3RlbUNvZGVQYWdlcyogKHVudGVzdGVkKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi90aHVuay5jXQoJQWRkZWQgRW51bUZvbnRGYW1pbGllczMyKi4KCQpNb24gTm92IDExIDE0OjUwOjI0IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL21kaS5jXQoJRG9uJ3QgZGVsZXRlIHRoZSBNREkgYHdpbmRvd3MnIG1lbnUgaWYgaXQncyBhbHJlYWR5IGJlZW4gZGVsZXRlZC4KCgkqIFttaXNjL2V4ZWMuY10KCU5vdGVwYWQgYWx3YXlzIGNhbGxzIFdpbkhlbHAoLi4sIEhFTFBfUVVJVCwgLi4uKSBhdCB0ZXJtaW5hdGlvbgogCWFuZCBjb21wbGFpbnMgaWYgaXQgcmV0dXJucyBGQUxTRS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJR2V0IG1heGltaXplZCBNREkgY2hpbGQncyBub25jbGllbnQgYXJlYSByZWRyYXduIGFmdGVyIHJlc2l6ZS4KClRodSBOb3YgIDcgMTM6MzI6MzQgMTk5NiAgTGVlIEphZWtpbCA8anVyaWFAc2VvZHUuY28ua3I+CgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJVXNlIC9wcm9jIGZpbGVzeXN0ZW0gZm9yIEdsb2JhbE1lbW9yeVN0YXR1cygpIG9uIExpbnV4LgoKTW9uIE5vdiAgNCAxODozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIE9mZmlYLXN0eWxlIGZpbGUgZHJvcCBoYW5kbGluZy4gRmlsZSBwYXRocyBtdXN0IGJlCglET1MtbWFwcGFibGUgYnkgV2luZSAodmlhIHdpbmUuY29uZikuCgoJKiBbY29udHJvbHMvY29tYm8uY10KICAgICAgICBBZGRlZCBXTV9HRVRURVhUIGhhbmRsZXIuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglBZGRlZCBSZXNpemVQYWxldHRlKCkgKHVudGVzdGVkKS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUltcGxlbWVudGVkIGljb24gdG8gY3Vyc29yIGNvbnZlcnNpb24uCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4ZWQgY3Jhc2ggb24gc3RhcnR1cCB3aGVuIG5vIGNvbG9yY2VsbHMgYXJlIHdyaXRlYWJsZS4KCk1vbiBOb3YgIDQgMDA6NDk6NDEgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtyYy93aW5lcmMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHdpbjMyIG91dHB1dC4KCgkqIFtsaWJyYXJ5L2xpYnJlcy5jXSBbaW5jbHVkZS9saWJyZXMuaF0gW2xvYWRlci9yZXNvdXJjZS5jXQoJUmVuYW1lZCBMSUJSRVNfRmluZFJlc291cmNlIHRvIExJQlJFU19GaW5kUmVzb3VyY2UxNi4KCUFkZGVkIExJQlJFU19GaW5kUmVzb3VyY2UzMi4KClN1biBOb3YgMyAyMToyMTo0NSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW2xvYWRlci9idWlsdGluLmNdIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvd2luZy5zcGVjXQoJQWRkZWQgdGhlIHNwZWMgZmlsZSBmb3IgV2luRywgaXQncyBvbmx5IHN0dWIgZm9yIG5vdywgYnV0IGl0CglzaG91bGQgYmUgZWFzeSB0byBkbyBieSBzb21lb25lIHdpdGggV2luZG93cyBwcm9ncmFtbWluZwoJa25vd2xlZGdlLiBTZWU6IGZ0cC5taWNyb3NvZnQuY29tL1NvZnRMaWIvTVNMRklMRVMvd2luZzEwLmV4ZS4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBzb21lIHN0cmluZyBhbmQgbWVtb3J5IGZ1bmN0aW9ucyB0byBtYWtlIHNmeGVkOTUuZXhlIChvZgogCVdhcmNyYWZ0IDIpIGFsbW9zdCB3b3JrLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTm92ICAyIDEyOjUwOjQwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJQWRkZWQgbG9uZyBmaWxlIG5hbWUgbWFzayBpbiBET1NGU19GaW5kTmV4dCgpLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXSBbbG9hZGVyL3Rhc2suY10KCU1vdmVkIFdpbjMyIHRhc2sgc3RhcnR1cCBpbnRvIFRBU0tfQ2FsbFRvU3RhcnQoKS4KCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBTZXREQ1N0YXRlKCkgZm9yIG1lbW9yeSBEQyAodGhhbmtzIHRvIENvbnN0YW50aW5lCglTYXB1bnR6YWtpcyBmb3Igc3BvdHRpbmcgdGhpcyBvbmUpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglGaXhlZCBXSU5QT1NfRm9yY2VYV2luZG93UmFpc2UoKSB0byBwcmVzZXJ2ZSBjb3JyZWN0IFotb3JkZXIuCgoJKiBbKi8qXQoJQWRkZWQgV2luMzIgdmVyc2lvbiBmb3IgbWFueSBncmFwaGljcyBmdW5jdGlvbnMuCgpUaHUgT2N0IDMxIDEwOjAwOjE4IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbigpIHVuY2hlY2tzIG9ubHkgYXV0byByYWRpbyBidXR0b25zLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVNX0dFVFNFTCByZXN1bHQgc2hvdWxkIGhhdmUgSElXT1JEKHJlc3VsdCkgPj0gTE9XT1JEKHJlc3VsdCk7IG9sZAoJRURJVF9FTV9HZXRTZWwoKSByZW5hbWVkIHRvIEVESVRfR2V0U2VsKCkuIAoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEU19MT0NBTEVESVQgaXMgYSBkaWFsb2cgc3R5bGUgbm90IGFuIGVkaXQgc3R5bGUuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglTdG9wIHN0YWNrIHRyYXNoaW5nIHdoZW4gd25kUHRyLT50ZXh0ID09IE5VTEwuCgpUdWUgT2N0IDI5IDIzOjM1OjA0IDE5OTYgICBDb25zdGFudGluZSBQIFNhcHVudHpha2lzIDxjc2FwdW50ekBtaXQuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdCglHZXREQ0V4MzIgLSBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRvIHVzZSB0aGUgREMgY2FjaGUgb3IKIAlub3Qgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIERDWF9VU0VTVFlMRS4KClNhdCBPY3QgMjYgMTc6MzE6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUFkZGVkIGVycm5vLmggdG8gI2luY2x1ZGVzCgoJKiBbdG9vbHMvbWFrZWRlcC5jXQoJQ2xvc2UgZmlsZXMgb25jZSB0aGV5IGhhdmUgYmVlbiBwcm9jZXNzZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBPY3QgMjIgMjA6MDk6NTIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbKi9NYWtlZmlsZS5pbl0gW3Rvb2xzL21ha2VkZXAuY10KCU5ldyBwcm9ncmFtIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llczsgc2hvdWxkIGJlIGZhc3RlciBhbmQgbW9yZQoJcG9ydGFibGUgdGhhbiAnZ2NjIC1NTScuCgoJKiBbKi8qXQoJUmVwbGFjZWQgV1BBUkFNIGFuZCBIREMgYnkgZXhwbGljaXRseS1zaXplZCB0eXBlcy4KCgkqIFt3aW5kb3dzL2hvb2suY10KCUZpeGVkIGJ1ZyBpbiBIT09LX0dldEhvb2sxNiBmdW5jdGlvbi4KClRodSBPY3QgMTcgMDk6MTM6NTAgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXSBbaW5jbHVkZS9zdGRkZWJ1Zy5oXQogICAgICAgIEFkZGVkIGRlYnVnIG9wdGlvbiBmb3Igd2luMTZkcnYgKC1kZWJ1Z21zZyArd2luMTZkcnYpCgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQogICAgICAgIE9ubHkgZW5hYmxlIENyZWF0ZURDIGlmIHByaW50ZXI9b24gc3BlY2lmaWVkIGluIHdpbmUgc2VjdGlvbiBvZgogCXdpbmUuY29uZi4KIAlwcmludGZzIGNoYW5nZWQgdG8gZHByaW50Zl93aW4xNmRydi4KCVNvbWUgdGlkeWluZyB1cC4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmNdCgkgIFtncmFwaGljcy94MTFkcnYvTWFrZWZpbGUuaW5dCiAgICAgICAgTW92ZWQgU2V0RGV2aWNlQ2xpcHBpbmcgaW50byBkcml2ZXJzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDEzIDE1OjMyOjMyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW01ha2UucnVsZXMuaW5dIFsqL01ha2VmaWxlLmluXQoJTWFkZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIGZyb20gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgc291cmNlCglkaXJlY3RvcnkuCgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXSBbaW5jbHVkZS9tZXRhZmlsZWRydi5oXQoJICBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy9kYy5jXQoJTmV3IGdyYXBoaWNzIGRyaXZlciBmb3IgbWV0YWZpbGVzLgoKCSogW2lmMTYzMi90aHVuay5jXQoJQWRkZWQgdGh1bmtzIGZvciBTZXRXaW5kb3dzSG9vayBhbmQgU2V0RENIb29rLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCBHZXROZXh0RGxnR3JvdXBJdGVtIGFuZCBHZXROZXh0RGxnVGFiSXRlbSB0byBza2lwIGRpc2FibGVkCglpdGVtcy4KCgkqIFsqLypdCglSZW1vdmVkIG5vbiBXaW4zMi1jbGVhbiB0eXBlcyBIQU5ETEUsIEhCSVRNQVAsIEhCUlVTSCwgSEZPTlQsCiAJSElOU1RBTkNFLCBITUVOVSwgSFJHTiBhbmQgSFRBU0suCgpXZWQgT2N0ICA5IDE0OjU5OjQ1IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEuTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCBFZGl0V25kUHJvYygpIHRvIGZhbGwgYmFjayB0byBEZWZXbmRQcm9jKCkgd2hlbiB0aGUKCWVkaXQgc3RhdGUgc3RydWN0dXJlIGlzIG5vdCBhdmFpbGFibGUuCgpXZWQgT2N0ICAyIDE0OjAwOjM0IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvbWRpLmNdCglBZGp1c3RXaW5kb3dSZWN0RXgxNigpIHNob3VsZCBvbmx5IHRha2Ugbm90aWNlIG9mIHRoZSBzdHlsZXMKIAlXU19ETEdGUkFNRSwgV1NfQk9SREVSLCBXU19USElDS0ZSQU1FIGFuZAogCVdTX0VYX0RMR01PREFMRlJBTUUuIFRoYW5rcyB0byBBbGV4IEtvcm9ia2EuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCB0eXBvIGluIFNob3dTY3JvbGxCYXIzMigpLgoKU3VuIEF1ZyAyNSAyMDoxODo1NiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW2lmMTYzMi93aW5tbS5zcGVjXQoJQWRkZWQgU2V0UGFyZW50IGFuZCBzbmRQbGF5U291bmRBLgoJCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIFNlcCAyNyAxNDoxODo0MiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIGZvY3VzIHJlY3RhbmdsZSBzaXplIGFuZCBjbGlwcGluZy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUNvbnZlcnRlZCB0byBXaW4zMiBhbmQgYWRkZWQgc3VwcG9ydCBmb3Igc2Nyb2xsIHBhZ2UuCglDb21wbGV0ZWQgU2V0U2Nyb2xsSW5mbygpIGFuZCBpbXBsZW1lbnRlZCBvdGhlciBXaW4zMiBmdW5jdGlvbnMuCgoJKiBbZmlsZXMvZmlsZS5jXQoJUmVtb3ZlZCBGSUxFX1JlYWQoKSAodXNlIF9scmVhZDMyIGluc3RlYWQpLgoKCSogW29iamVjdHMvZGNlLmNdIFtpbmNsdWRlL2RjZS5oXQoJQWxsb2NhdGUgRENFIG9uIHRoZSBXaW4zMiBoZWFwLCBhbmQgdXNlIHBvaW50ZXJzIGluc3RlYWQgb2YKCWhhbmRsZXMuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERDIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglBdHRlbXB0IHRvIG1ha2UgQ1NfUEFSRU5UREMgc3R5bGUgd29yayBhZ2Fpbi4KCldlZCBTZXAgMjUgMjM6NDA6NTIgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJT3ZlcnJpZGUgU2F2ZVVuZGVyIGF0dHJpYnV0ZSB3aGVuIHBhaW50aW5nIHRvb2sgcGxhY2UKCWluIGEgd2luZG93IGJlbG93LiBGb3JjZSBYIHRvIHJhaXNlIGFjdGl2YXRlZCB3aW5kb3cgCglpbiBzZWFtbGVzcyBtb2RlLgoKCSogW21pc2MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglUcmFuc2xhdGlvbiBiZXR3ZWVuIERPUyBhbmQgVW5peCB0ZXh0IGZvcm1hdHMgYW5kIHNldmVyYWwKCW90aGVyIGZpeGVzIGZvciB0aGUgc3VkZGVuIHNlbGVjdGlvbiBsb3NzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQXBwbHkgImZpcnN0IiBhbmQgImxhc3QiIHdoZW4gY2hlY2tpbmcgZm9yIFdNX1FVSVQgaW4gCiAgICAgICAgTVNHX1BlZWtNZXNzYWdlKCkuCgoJKiBbd2luZG93cy93aW4uY10KCVJlYXJyYW5nZWQgRGVzdHJveVdpbmRvdygpIHRvIGZpdCAiV2luZG93cyBJbnRlcm5hbHMiCglkZXNjcmlwdGlvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglNaXNjLiBmaXhlcyB0byBDQlQgaG9vayBjYWxscy4KCgkqIFtjb250cm9scy9tZW51LmNdIFttaXNjL3VzZXIuY10KCUZpeHVwIHJlc2lkZW50IHBvcHVwIG1lbnUgd2luZG93IHNvIHRoYXQgaXQgZG9lc24ndCBnZXQKCWRlc3Ryb3llZCBieSBVU0VSX0FwcEV4aXQoKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9ldmVudC5jXQoJUHJvY2VzcyAidW5zYWZlIiBYIGV2ZW50cyBvdXRzaWRlIHRoZSBzY2hlZHVsZXIgdG8gcHJldmVudAoJZGVhZGxvY2tzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSBbd2luZG93cy93aW5wb3MuY10KCUxvdHMgb2YgZml4ZXMgZm9yIGJldHRlciBXaW4xNiBtdWx0aXRhc2tpbmcuCgpXZWQgU2VwIDI1IDIwOjM2OjMwIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgc29tZSBtaXNzaW5nIEhPT0sgZGVmaW5lcy4KCgkqIFttaXNjL3NoZWxsLmNdW2lmMTYzMi9zaGVsbDMyLnNwZWNdW2luY2x1ZGUvc2hlbGwuaF0KCVNIR2V0RmlsZUluZm9BIHN0dWIgYWRkZWQgKHdpbjk1IG1wbGF5ZXIuZXhlIC9wbGF5IGJsYS5hdmkpLgoKCSogW3dpbjMyL2NvbnNvbGUuY11baW5jbHVkZS93aW5jb24uaF0KCUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvLCBHZXRMYXJnZXN0Q29uc29sZVdpbmRvd1NpemUgYWRkZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBudWxsIHB0ciBmaXhlcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGV4cG9ydGVkIGZ1bmN0aW9uIGxvb2t1cC4gKG1zdmNydDIwLmRsbCkKCUFkZCBkZWJ1Z3N5bXMgZm9yIGVudHJ5cG9pbnQsIGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgc2VjdGlvbnMuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJTUNJT3Blbjogc3VwcG9ydCBmb3IgZWxlbWVudCBvcGVucyAobXBsYXllci5leGUgL3BsYXkgYmxhLmF2aSkuCgoJKiBbc2V2ZXJhbF0KCUFkZGVkIHNldmVyYWwgbWlzc2luZyB0aGluZ3Mvc3R1YnMvc2ltcGxlIHRodW5rcyBmcm9tIHdpbjMyCgl0byB3aW4xNiBjb2RlLgoKU2F0IFNlcCAyMSAxNzoyNzo0NCAxOTk2ICBPLkZsZWJiZSAgPGZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW3dpbmRvd3MvcHJvcGVydHkuY10KCUZpeGVkIGRlYnVnZ2luZyBvZiAxNiBCaXQgUmVtb3ZlUHJvcCgpLgoKCSogW2RlYnVnZ2VyL21lbW9yeS5jXQoJQWRkZWQgREVCVUdfY2hlY2ttYXBfYmFkKCkgZm9yIGxpbnV4LgoKVGh1IFNlcCAxOSAyMDo0ODozMSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvaG9vay5jXQoJVXNlIEVuYWJsZUhhcmR3YXJlSW5wdXQoKSBmb3IgSm91cm5hbFBsYXliYWNrIGhvb2suCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ2hhbmdlZCBoYW5kbGluZyBvZiBMQl9HRVRJVEVNUkVDVCBpbiBlbXB0eSBsaXN0Ym94ZXMuCgpUaHUgU2VwIDE5IDEzOjM0OjM1IDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbbWlzYy9tYWluLmNdCglGaXhlcyB0byBYIHJlc291cmNlcyBoYW5kbGluZy4JCgpXZWQgU2VwIDE4IDAwOjMxOjE1IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9kYy5jXQoJSW5kaXZpZHVhbCBoYW5kbGUgdGFibGUgY3JlYXRlZCBmb3IgZWFjaCBtZXRhZmlsZS4gRml4ZWQKIAlHbG9iYWxSZUFsbG9jKCkgYnVnIGluIE1GX0FkZEhhbmRsZURDKCkgKHdhcyBNRl9BZGRIYW5kbGVJbnRlcm5hbCkuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbb2JqZWN0cy9kYy5jXQoJUmVjdGFuZ2xlKCkgY2hhbmdlZCB0byB3b3JrIGJldHRlciB3aXRoIHdpZGUgcGVucyBhbmQgUFNfTlVMTC4KCVVzZSBKb2luTWl0ZXIuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCU1ha2UgdGhlIHdob2xlIChub24gWCkgd2luZG93IGludmFsaWQgb24gcmVzaXplIGlmIENTX1tWSF1SRURSQVcKIAlpcyBzZXQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkanVzdFdpbmRvd1JlY3RFeCgpIHNob3VsZCBwZXJmb3JtIGNhbGN1bGF0aW9ucyBldmVuIGlmIHRoZQogCXdpbmRvdyBpcyBtaW5pbWl6ZWQuCgoJKiBbd2luZG93cy9tZGkuY10KCUJldHRlciBoYW5kbGluZyBvZiBzeXN0ZW0gYnV0dG9uIHBhaW50aW5nLiBNYXhpbWl6ZWQgd2luZG93cyBjYW4KIAljb250YWluIHNjcm9sbCBiYXJzLiBJY29ucyBub3cgbWF4aW1pemUgcHJvcGVybHkuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdCglJbXByb3ZlZCBncmV5aW5nIG9mIGl0ZW1zIGluIHN5c3RlbSBtZW51LiBXTV9JTklUTUVNVVBPUFVQIG5vCiAJbG9uZ2VyIGNhdWdodCBpbiBEZWZXbmRQcm9jLCBERUZXTkRfSW5pdFN5c01lbnVQb3B1cCBtb3ZlZCB0bwogCW1lbnUuYy4KCk1vbiBTZXAgMTYgMjE6MzA6MDAgMTk5NiAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW3NldmVyYWwgZmlsZXNdCglGaXggbWlzc2luZyBpbmNsdWRlcyBhbmQgd3JvbmcgcHJpbnRpbmcgYXJndW1lbnRzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCURvbid0IHNvcnQgZHJpdmVzIGluIExpc3RCb3hEaXJlY3RvcnkoKS4KCQpTYXQgU2VwIDE0IDA5OjA1OjQ3IDE5OTYgIFBldHJpIFR1b21vbGEgPHB0dW9tb2xhQHhzNGFsbC5ubD4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgaGFuZGxpbmcgb2YgU2hpZnQtVEFCIGluIGRpYWxvZ3MuCgpUaHUgU2VwIDEyIDE4OjMxOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBTZWxlY3RDbGlwUmduIC0gY2FsbCB3aW4xNiB2ZXJzaW9uLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEdldEFzeW5jS2V5U3RhdGUsIEdldE1lbnVJdGVtSUQgYW5kIEdldE1lbnVTdHJpbmdBLgoKCSogW2luY2x1ZGUvd2luY29uLmhdCglBZGRlZCBDT09SRCBhbmQgU01BTExfUkVDVCB0eXBlZGVmcywgbW92ZWQgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8KCW91dCBvZiAjaWYgMCBwcm90ZWN0ZWQgcG9ydGlvbiBvZiBmaWxlLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJUEVfSW5pdFRFQigpIC0gVGlkeSB1cCwgYnVnIGZpeCB0byBzdGFjayBwb2ludGVyIHZhbHVlIChCb3JsYW5kCglwcm9ncmFtcyBub3cgd29yayBiZXR0ZXIpCgoJKiBbd2luMzIvY29uc29sZS5jXQoJQWRkZWQgc3R1YiBmdW5jdGlvbnMgZm9yIEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIGFuZCAKCUdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZQoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdCglGaW5kRmlyc3RGaWxlMzJBKCkgLSByZW1vdmVkIGVycm9uZW91cyBzdHJjcHkKCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglHZXRBc3luY0tleVN0YXRlKCkgLSBidWcgZml4IC0gbm93IHJldHVybnMgdmFsdWUgYXMgcGVyIE1pY3Jvc29mdAoJc3BlY2lmaWNhdGlvbi4gTkIgLSBJIHN0aWxsIGhhdmUgZG91YnRzIGFib3V0IHNvbWUgb3RoZXIgZnVuY3Rpb25zCglpbiB0aGlzIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBTZXAgMTEgMTg6MDg6MzAgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNaW5vciBpbXByb3ZlbWVudHMgaW4gc2V0dGluZyBldmVudCB0aW1lIGluIE1TRyBzdHJ1Y3QuCgoJKiBbd2luZG93cy9ob29rLmNdCglSZW1vdmVkIGFuIHVzZWxlc3MgJ3VuaW1wbGVtZW50ZWQgaG9vaycgbWVzc2FnZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgYSBXSF9DQlQgaG9vayBjYWxsIGR1cmluZyB3aW5kb3cgY3JlYXRpb246IGdvb2QgZm9yIENUTDNELkRMTAoKV2VkIFNlcCAxMSAxMToxOTo1NiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgaW1wb3J0cyB3aXRoIG5vIG5hbWUvb3JkaW5hbCBsaXN0IChNRkMzMC5ETEwpLgoJQWRkZWQgYm9ybGFuZCBzdHlsZSAtIG9yZGluYWwgaW1wb3J0ICh3c29jazMyLmRsbCkuCgoJKiBbZmlsZXMvZmlsZS5jXSBbd2luMzIvZmlsZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJICBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVdpbjMyIGFuZCBXaW4xNiBjb2RlIHVzZSB0aGUgc2FtZSBmaWxlaGFuZGxlcy9IRklMRXMuCglBZGRlZCBTZXRFbmRPZkZpbGUsIE1vdmVGaWxlKiwgZGl2ZXJzZSAqVyBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBhcmd1bWVudCAyIHRvIERsbEVudHJ5LgoKCSogW21pc2MvY29tbS5jXQoJQWRhcHQgdG8gZmlsZWhhbmRsaW5nIGNoYW5nZXMsIHdpbjMyIGNvZGUgc3RpbGwgYnJva2VuLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVVzZSBXaW5lIGZpbGVoYW5kbGluZy4KCVN0YXJ0dXBSZWdpc3RyeSB0byBhZGQgc3RhcnR1cC1kZXRlY3RlZCByZWdpc3RyeSBlbnRyaWVzLgoKCSogW21pc2NlbXUvZHBtaS5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJU29tZSBtaXNzaW5nIGludGVycnVwdC1mdW5jdGlvbnMgYWRkZWQuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KCVNvbWUgdGh1bmtzIHRvIDE2IGJpdCBlcXVpdmFsZW50IGZ1bmN0aW9ucyBhZGRlZC4KClNhdCBTZXAgIDcgMTE6MzY6NTcgRURUIDE5OTYgIE1hdHRoZXcgR2hpbyA8Z2hpb0BuZXRjb20uY29tPgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglSZXdyb3RlIFdJTlNPQ0tfc2VsZWN0KCkgYW5kIFdTQUZESXNTZXQoKSB0byBwcm9wZXJseSBjb252ZXJ0CglXaW5kb3dzIGZkX3NldCBzdHJ1Y3RzLgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdCglDb3JyZWN0ZWQgYXJndW1lbnRzIHRvIHNlbGVjdCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gU2VwICAxIDE5OjIyOjQ2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21pc2MvY29tbWRsZy5jXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10KCUZpeGVkIHNvbWUgU0VHUFRSIHByb2JsZW1zLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgbWVzc2FnZSB0cmFuc2xhdGlvbiBmb3IgV01fQ09NUEFSRUlURU0sIFdNX0RFTEVURUlURU0KCWFuZCBXTV9NRUFTVVJFSVRFTQoJRml4ZWQgMTYtdG8tMzIgdHJhbnNsYXRpb24gZm9yIFdNX0hTQ1JPTEwvV01fVlNDUk9MTC4KCkZyaSBBdWcgMzAgMTM6Mzk6MDAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtmaWxlcy9kcml2ZS5jXQoJR2V0RHJpdmVUeXBlMTYgc2hvdWxkIHJlcG9ydCBDRFJPTXMgYXMgRFJJVkVfUkVNT1RFIChBQ01FIHNldHVwKS4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglUaGUgbWluaW11bSBhdWRpb2J1ZmZlciBzaXplIHNocnVuayBzb21ld2hlcmUgaW4gbGludXggMS4zLnh4CgliZWxvdyA0MDk2IGJ5dGVzLgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglTZWdwdHIgc3RyaW5nIGhhbmRsaW5nIGZpeGVkICYgZW5oYW5jZWQuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXVttaXNjL2NydGRsbC5jXQoJbWFsbG9jLGZyZWUsX3N0cnVwcixfc3RyaWNtcCxfc3RyY21waSBhZGRlZC4KCgkqIFtpZjE2MzIvd3NvY2szMi5zcGVjXVttaXNjL3dpbnNvY2suY10KCU1vcmUgZGlyZWN0IHRodW5rcyBpbnRvIHVuaXggbGliYyBhbmQgV3NDb250cm9sLXN0dWIgYWRkZWQuCgpUaHUgQXVnIDI5IDIzOjU0OjI1IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglCdWcgZml4ZXMgdG8gYm90aCByZWNvcmRpbmcgYW5kIHBsYXliYWNrIG9mIEV4dFRleHRPdXQoKS4KClR1ZSBBdWcgMjcgMTU6NDM6MjEgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21jaWFuaW0uY10KCSAgW211bHRpbWVkaWEvbWNpY2RhLmNdIFttdWx0aW1lZGlhL21pZGkuY10KCU1hZGUgY2RhdWRpbywgYXVkaW8gYW5kIG1pZGkgd29yayBmb3IgRnJlZUJTRC4KClN1biBBdWcgMjUgMjA6MTg6NTYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJQWRkZWQgSUQgdmFsdWVzIGZvciBhbGwgbGFuZ3VhZ2VzIGluIEdldFVzZXJEZWZhdWx0TENJRCgpLgoJCkZyaSBBdWcgMjQgMjE6MDI6MjggMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpcnN0IGF0dGVtcHQgYXQgaG9vayBXSF9KT1VSTkFMUExBWUJBQ0suCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBdWcgMjQgMTM6NTc6MDEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglSZW5hbWVkIFNDUk9MTElORk8gdG8gU0NST0xMQkFSX0lORk8gdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBXaW4zMi4KCgkqIFtncmFwaGljcy9kcml2ZXIuY10gW2luY2x1ZGUveDExZHJ2LmhdCglOZXcgZmlsZXMgZm9yIGdyYXBoaWNzIGRyaXZlciBoYW5kbGluZy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFt0b29scy9idWlsZC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zLiBOb3QgcmVhbGx5IHRlc3RlZCB5ZXQuCgoJKiBbaW5jbHVkZS9nZGkuaF0KCUFkZGVkIGEgbG90IG9mIGZ1bmN0aW9ucyB0byB0aGUgREMgZnVuYyB0YWJsZS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUluaXRpYWxpc2UgJWZzIGJlZm9yZSBjYWxsaW5nIG91dCB0byAzMi1iaXQgY29kZS4KCgkqIFt3aW5kb3dzL2hvb2suY10KCUZpeGVkIGJ1ZyBpbiBIT09LX0dldEhvb2soKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgRmluZFdpbmRvdyB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNsYXNzIG5hbWUgZG9lc24ndCBleGlzdC4KCldlZCBBdWcgMjEgMTU6MTU6NTMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbWlzYy9tcHIuY10gW2lmMTYzMi9tcHIuc3BlY10KCW1wci5kbGwgc3BlY3MgYWRkZWQuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10gW21lbW9yeS9nbG9iYWwuY10KCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCksIEdsb2JhbE1lbW9yeVN0YXR1cygpIGFkZGVkLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbjMyL2Vycm9yLmNdCglTZXRMYXN0RXJyb3JFeCgpIGFkZGVkLgoKCSogW21pc2MvY29tbWRsZy5jXQoJbHBzdHJGaWx0ZXIgbWlnaHQgYmUgTlVMTCBpbiBGSUxFX1dNSW5pdERpYWxvZyAoTlMgMy4wIHNldHVwKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIG1pc3NpbmcgTlVMTCBwdHIgY2hlY2tzIGFkZGVkLCBtaXNjIGNsZWFuIHVwLgoKVHVlIEF1ZyAyMCAyMTowMDowMCAxOTk2IEFsZXggS29yb2JrYSAgPGFsZXhAcGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdCglBZGp1c3QgcG9wdXAgbWVudSBjb29yZGluYXRlcyBzbyB0aGF0IGl0IGFsd2F5cyBzdGF5cyB3aXRoaW4gCgl0aGUgZGVza3RvcC4KCgkqIFttaXNjL21haW4uY10KCUZpeGVkIEdldEVudmlyb25tZW50KCkgcmV0dXJuIHZhbHVlIGZvciBscEVudiA9PSBOVUxMIGNhc2UuCgpNb24gQXVnIDE5IDIyOjQ4OjM2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIHNvbWUgaXMqIGZ1bmN0aW9ucywgc3RybGVuIGFuZCB0b2xvd2VyLgoJCk1vbiBBdWcgMTkgMTM6MzM6MTMgMTk5NiAgU3RlcGhlbiBTaW1tb25zICA8c3NpbW1vbnNAdml0c2VtaS5jb20+CgoJKiBbdG9vbHMvd2luZWNvbmZdCglOZXcgcGVybCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIHdpbmUuY29uZiBmaWxlLgoKRnJpIEF1ZyAxNiAxNTozMTo0NCAxOTk2ICAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaS5zcGVjXQogICAgICAgIExvdHMgb2YgcHJpbnRlciBmdW5jdGlvbnMuCgkKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KICAgICAgICBOZXcgZnVuY3Rpb25zIGZvciBwcmludGVyIGRyaXZlciBzdXBwb3J0LgoKCSogW2luY2x1ZGUvZ2RpLmhdCiAgICAgICAgTmV3L2NoYW5nZWQgc3RydWN0dXJlcyB0byBzdXBwb3J0IHByaW50ZXIgZHJpdmVyLgoKCSogW21pc2MvZXNjYXBlLmNdCiAgICAgICAgTmV3IHZlcnNpb24gdGhhdCB1c2VzIGZ1bmN0aW9uIHRhYmxlIGluIERDIHN0cnVjdHVyZS4KCgkqIFtvYmplY3RzL2RjLmNdCiAgICAgICAgQ3JlYXRlREMgY29wZXMgd2l0aCB0aGluZ3Mgb3RoZXIgdGhhbiBEaXNwbGF5LgoJWCBjb2RlIGZvciBDcmVhdGVEQyBtb3ZlZCB0byBncmFwaGljcy94MTFkcnYgZGlyZWN0b3J5LgoJQ3JlYXRlQ29tcGF0aWJsZURDIGNvcGllcyBmdW5jIHRhYmxlIGZyb20gb3JpZ2luYWwgREMuCgoJKiBbb2JqZWN0cy9mb250LmNdCiAgICAgICAgR2V0VGV4dEV4dGVudFBvaW50MzJBLEdldFRleHRNZXRyaWNzMTYgdXNlIGZ1bmN0aW9uIHRhYmxlIGluCiAgICAgICAgREMgYW5kIGNvZGUgbW92ZWQgdG8gZHJpdmVycyBkaXJlY3RvcnkuCgoJKiBbbWlzYy9wcmludGRydi5jXSBbZ3JhcGhpY3MvKi8qXSBbaW5jbHVkZS93aW4xNmRydi5oXQogICAgICAgIE5ldyBmaWxlcyBmb3IgcHJpbnRlciBzdXBwb3J0LiAKCkZyaSBBdWcgMTYgMTI6MzM6MDAgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglBZGRlZCBTZXRTY3JvbGxJbmZvMzIgYW5kIEdldFNjcm9sbEluZm8zMi4gIFRoZXNlIGp1c3QgY2FsbCBleGlzdGluZwoJY29kZS4gVGhlcmUgYXJlIGEgZmV3IG9wdGlvbnMgaW4gd2hpY2ggSSdtIHByb2JhYmx5IHRoZSB3cm9uZyBwZXJzb24KCWZvciB0aGUgam9iIChwYWdlIHNpemUgYW5kIGRpc2FibGUgYmFyKS4gVGhlcmUgYXJlIGNvbW1lbnRzIGluIHRoZQoJY29kZSBhcyB0byB3aGF0IHRoZXkgc2hvdWxkIGRvLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL2ZvbnQuY10gW2luY2x1ZGUvZm9udC5oXQoJQWRkZWQgMzIgYml0IHZlcnNpb24gb2YgRk9OVF9HZXRPYmplY3QuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgMTggMTI6MTc6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkICdGaWxlc3lzdGVtJyBvcHRpb24gaW4gZHJpdmVzIGNvbmZpZ3VyYXRpb24uCgoJKiBbZmlsZXMvZG9zX2ZzLmNdIAoJQWRkZWQgaGFuZGxpbmcgb2YgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJUmVtb3ZlZCBNQUtFX1NFR1BUUi4KCgkqIFttaXNjL2NvbW1kbGcuY10gW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglSZXBsYWNlZCBNQUtFX1NFR1BUUiBieSB0aGUgU0VHUFRSXyogbWFjcm9zLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglVc2UgYW4gaW50ZXJtZWRpYXJ5IHBpeG1hcCB0byBhdm9pZCBzb21lIEJhZE1hdGNoIGVycm9ycyBvbgoJWEdldEltYWdlKCkuCgpTdW4gQXVnIDE4IDA5OjIxOjI3IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9OQy4uLm1vdXNlIG1lc3NhZ2VzIGluIEpPVVJOQUxSRUNPUkQgaG9vay4KCgkqIFttaXNjL3Zlci5jXQoJRml4ZWQgYSBiYWQgc3RyaW5nIHJlc3VsdCBpbiBWZXJRdWVyeVZhbHVlWzE2fDMyQXwzMlddLgoKRnJpIEF1ZyAxNiAxOTo1NTowNCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQoJTW9yZSBhZGRpdGlvbnMgdG8gZ2V0IHdpbjk1IHByb2dyYW1zIGZ1cnRoZXIgZG93biB0aGUgcm9hZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvbW9kdWxlLmNdCglHZXRNb2R1bGVOYW1lKCkgYWRkZWQuCglMb2FkTW9kdWxlKCk6IHBhcmFtcy0+c2hvd0NtZCBjYW4gYmUgTlVMTC4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi90aHVuay5jXQoJVGh1bmtDb25uZWN0MzIoKSBzdHViIGFkZGVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRW50cmllcyBpbmNsdWRlIGxhc3RlbnRyeS4KCgkqIFttaXNjL3NoZWxsLmNdIFtmaWxlcy9maWxlLmNdCglNYWRlIHByb2dtYW4gd29yayBhZ2Fpbi4KCkZyaSBBdWcgMTYgMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgkKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJSWNvbiBwYWludGluZyBmaXhlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRW5mb3JjZSBhbmQgZm9sbG93IGhyZ25VcGRhdGUgbW9yZSBjbG9zZWx5IHRvIGN1dCBkb3duIG9uCglyZWR1bmRhbnQgUmVkcmF3V2luZG93KCkgY2FsbHMuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJvY2VzcyBDb25maWd1cmVOb3RpZnkgb25seSBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEbyBub3QgcmVkcmF3IHBhcmVudCBpZiB0aGUgd2luZG93IHdhcyBoaWRkZW4gYmVmb3JlIFNldFdpbmRvd1BvcygpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglPbWl0IHNvbWUgbm9uY2xpZW50IGRlY29yYXRpb24gcGFpbnRpbmcgZm9yIG1hbmFnZWQgd2luZG93cy4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUltcGxlbWVudGVkIFdNX05FWFRNRU5VLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU11bHRpY29sdW1uIGxpc3Rib3hlcyByZXR1cm4gV1ZSX1ZSRURSQVcgb24gV01fTkNDQUxDU0laRS4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCAuSUNPIGZpbGUgaGFuZGxpbmcgdG8gRXh0cmFjdEljb24oKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEF1ZyAxMSAxMzowMDoyMCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgY2hlY2sgZm9yIHVuZGVyc2NvcmUgb24gZXh0ZXJuYWwgc3ltYm9scy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIEZyZWVTZWxlY3RvcigpIHRvIGZyZWUgb25seSBvbmUgc2VsZWN0b3IuCglBZGRlZCBTRUxFQ1RPUl9GcmVlQmxvY2soKSB0byBmcmVlIGFuIGFycmF5IG9mIHNlbGVjdG9ycy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXhlZCBhIGJ1ZyBpbiBDT0xPUl9Ub0xvZ2ljYWwoKSB0aGF0IGNhdXNlZCBHZXRQaXhlbCgpIHRvIGZhaWwgb24KCWhpLWNvbG9yIGRpc3BsYXlzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCAnZXh0ZXJuJyB0eXBlLCB1c2VkIGZvciBleHRlcm5hbCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBbGxvdyBkZS1hY3RpdmF0aW5nIGEgd2luZG93IGluIFdJTlBPU19DaGFuZ2VBY3RpdmVXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIDMyLXRvLTE2IHRyYW5zbGF0aW9uIGZvciBidXR0b24gbWVzc2FnZXMuCglGaXhlZCBXSU5QUk9DX0dldFB0cigpIHRvIGF2b2lkIGNyYXNoZXMgb24gMzItYml0IHByb2NlZHVyZXMgdGhhdAoJaGFwcGVuIHRvIGJlIHZhbGlkIFNFR1BUUnMuCgpTYXQgQXVnIDEwIDE4OjIyOjI1IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGEgRklYTUUgaW4gTVNHX1BlZWtIYXJkd2FyZU1zZygpOiBwcm9kdWNlcyBjb3JyZWN0IAoJZGF0YSBmb3IgdGhlIEpPVVJOQUxSRUNPUkQtaG9vayAodXNpbmcgRVZFTlRNU0cxNiBzdHJ1Y3R1cmUpLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW50cm9kdWNlZCB1bmRvY3VtZW50ZWQgQVBJIGZ1bmN0aW9uIElzVmFsaWRNZXRhRmlsZSgpLCBwbHVzIGEKIAltaW5vciBmaXggaW4gbGFzdCBwYXRjaCBvZiBDb3B5TWV0YUZpbGUoKS4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmVtb3ZlZCBhIEZJWE1FIGluIElzR0RJT2JqZWN0KCk6IGFkZGVkIG1hZ2ljIHdvcmQgY2hlY2suCgpTdW4gQXVnIDEwIDE4OjEwOjEwIDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2NvbnRyb2xzL3N0YXR1c3dpbi5jXQoJRmlyc3QgcGFzcyBhdCBpbXBsZW1lbnRpbmcgdGhlIFN0YXR1c1dpbmRvdyBjbGFzcy4KCgkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCglIZWFkZXIgZmlsZSBmb3IgY29tbW9uIGNvbnRyb2xzLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkZGVkIEluaXRDb21tb25Db250cm9scygpLgoKCSogW2lmMTYzMi9jb21jdGwzMi5zcGVjXQoJQWRkIERyYXdTdGF0dXNUZXh0QSwgQ3JlYXRlU3RhdHVzV2luZG93QSwgSW5pdENvbW1vbkNvbnRyb2xzLgoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZCBGaW5kTmV4dEZpbGUzMkEsIEZpbmRDbG9zZS4KCU1vZGlmaWVkIEZpbmRGaXJzdEZpbGUzMkEgc28gaXQgd29ya3Mgd2l0aCBGaW5kTmV4dEZpbGUzMkEuCgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdCglGaXhlZCBXSU4zMl9GSU5EX0RBVEEgc3RydWN0dXJlIG1lbWJlciBuYW1lcy4KClNhdCBBdWcgMTAgMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCUNoYW5nZWQgc2Nyb2xsaW5nIHJvdXRpbmVzIHRvIGJlbmVmaXQgZnJvbSBEQ0UgY29kZSB1cGRhdGUuCgpUaHUgQXVnICA4IDE4OjA1OjA5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10KCVNlYXJjaFBhdGgqIGNvdWxkIGdldCBOVUxMIGZvciBsYXN0cGFydCBhcmd1bWVudC4KCgkqIFtpZjE2MzIvYnVpbGQtc3BlYy50eHRdIFtkb2N1bWVudGF0aW9uL2RlYnVnZ2luZ10KCVZhcmFyZ3MgZG9jdW1lbnRhdGlvbiBhZGRlZCwgZGVidWdnaW5nIGhpbnRzIHVwZGF0ZWQuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXVttaXNjL2NydGRsbC5jXVttaXNjL01ha2VmaWxlLmluXQoJU3RhcnRlZCB0byBpbXBsZW1lbnQgQ1JURExMLgoKCSogW2lmMTYzMi93c29jazMyLnNwZWNdCglTb21lIHRodW5rcyB0byBzdGFuZGFyZCBsaWJjIGZ1bmN0aW9ucyAoc3RydWN0dXJlcyBoYXZlIHRoZSBzYW1lCiAJZWxlbWVudHMsIGJ1dCBwZXJoYXBzIHdyb25nIG9mZnNldCBkdWUgdG8gcGFja2luZykuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXVtpbmNsdWRlL3dpbmRvd3MuaF1bd2luMzIvKi5jXVtsb2FkZXIvbWFpbi5jXQoJTWVyZ2VkIGtlcm5lbDMyLmggaW50byB3aW5kb3dzLmguCgoJKiBbbWlzYy9sc3RyLmNdCglFbmhhbmNlZCBGb3JtYXRNZXNzYWdlKCkuCgoJKiBbbWlzYy9tYWluLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldFZlcnNpb24oKSB1cGRhdGVkIHRvIG5ldyBuYW1pbmcgc3RhbmRhcmQuCglDaGFuZ2VkIGxhbmd1YWdlIGhhbmRsaW5nIHRvIHN1cHBvcnQgbGFuZ3VhZ2UgaWRzLgoKCSogW21pc2Mvc2hlbGwuY10KCUVuaGFuY2VkIEZpbmRFeGVjdXRhYmxlLCBzbyBpdCBmaW5kcyBmaWxlcyBpbiB0aGUgc2VhcmNoIHBhdGggdG9vLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglHZXRDb21tYW5kTGluZSogdXBkYXRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW2xvYWRlci9wZV9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlRXgzMiogYWRkZWQuCglMb2FkaW5nIG9mIG1lc3NhZ2V0YWJsZXMgYWRkZWQuCglMYW5ndWFnZSBoYW5kbGluZyBub3cgdXNlcyBXaW5lIGRlZmF1bHQgbGFuZ3VhZ2UgaWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgIDQgMTg6MTg6NDggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglBdHRlbXB0ZWQgdG8gaW1wbGVtZW50IHVuZG9jdW1lbnRlZCBzY3JvbGwtYmFyIG1lc3NhZ2VzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFt3aW5kb3dzL3dpbnByb2MuY10KCUNhbGxUbzE2XyogZnVuY3Rpb25zIG5vdyBnZXQgRFMgZnJvbSB0aGUgcHJldmlvdXMgMTYtYml0IHN0YWNrZnJhbWUuCgoJKiBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCB0aHVua3MgdG8gaW1wbGVtZW50IGNhbGxiYWNrcyBmb3IgdGhlIGVtdWxhdG9yLiBOb3cgYWxsIHRoZQoJRW51bSogZnVuY3Rpb25zIGFsd2F5cyB0YWtlIGEgcmVhbCBmdW5jdGlvbiBwb2ludGVyIGV2ZW4gaW4gdGhlCgllbXVsYXRvci4KCQoJKiBbbG9hZGVyL2J1aWx0aW4uY10KCVJlbW92ZWQgYmluYXJ5IHNlYXJjaCBpbiBCVUlMVElOX0dldEVudHJ5UG9pbnQzMigpLCBhcyBpdCBkaWRuJ3QKIAl3b3JrIHdpdGggTlVMTCBlbnRyeSBwb2ludHMuIFVzaW5nIGxpbmVhciBzZWFyY2ggbm93LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUltcGxlbWVudGVkIElzU2hhcmVkU2VsZWN0b3IoKS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQ2hhbmdlZCBTd2l0Y2hTdGFja1RvL0JhY2sgdG8gdXNlIHRoZSBpbnN0YW5jZSBkYXRhIHRvIHN0b3JlIHRoZQoJcHJldmlvdXMgc3RhY2sgaW5zdGVhZCBvZiB0aGUgVERCLiBBbHNvIGNvcHkgdGhlIGxvY2FsIHZhcmlhYmxlcwoJb250byB0aGUgbmV3IHN0YWNrLgoJQWRkZWQgR2V0RXhlVmVyc2lvbigpIGFuZCBTZXRUYWNrU2lnbmFsUHJvYygpLgoJSW1wbGVtZW50ZWQgU2V0U2lnSGFuZGxlcigpLgoKU2F0IEF1ZyAgMyAyMjoxOTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCSJGaXhlZCIgcHJvYmxlbSBpbiBkZWxldGluZyBtZW51cyB3aGVyZSB3aW4zMiBjb3VsZCBnZXQgaW50byBhbgoJZW5kbGVzcyBsb29wIHdoZW4gaXQgY3Jhc2hlZC4gSSB0aGluayBJJ3ZlIGZpeGVkIHRoZSBzeW1wdG9tcywgbm90Cgl0aGUgb3JpZ2luYWwgcHJvYmxlbSBzbyBpdCBtaWdodCBiZSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoJKiBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglBZGRlZCBtaXNzaW5nICNpZmRlZnMgb24gRlNfUkVHIGFuZCBHU19SRUcsIG5lZWRlZCBmb3IgRnJlZUJTRCB0bwoJY29tcGlsZSB3aW5lIHByb3Blcmx5LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJTWFkZSBET1NGU19IYXNoIGFuZCBET1NGU19NYXRjaCBub24tc3RhdGljIHNvIHRoZXkgY2FuIGJlIGNhbGxlZAoJZnJvbSB3aW4zMi9maW5kZmlsZS5jIChxLnYuKS4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFNldE1hcE1vZGUgKGNhbGwgZXhpc3RpbmcgZnVuY3Rpb24pCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBGaW5kRmlyc3RGaWxlQSBhbmQgU2V0RmlsZUF0dHJpYnV0ZXNBLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEJyaW5nV2luZG93VG9Ub3AsIENyZWF0ZVBvcHVwTWVudSwgR2V0S2V5U3RhdGUsIEdldFBhcmVudCwKCUlzRGxnQnV0dG9uQ2hlY2tlZCAoY2FsbCBleGlzdGluZyBmdW5jdGlvbnMpIGFuZCBJc0RpYWxvZ01lc3NhZ2VBLAoJVW5ob29rV2luZG93c0hvb2tFeC4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBzdHViIGZ1bmN0aW9uIFNldEZpbGVBdHRyaWJ1dGVzMzJBLiBJdCdzIGEgc3R1YiBiZWNhdXNlIEkKCWNhbid0IHJlYWxseSB3b3JrIG91dCB3aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvIHdpdGggbW9zdAoJYXR0cmlidXRlcyBpbiBhIFVuaXggZW52aXJvbm1lbnQuIEFueW9uZSBjYXJlIHRvIGV4cGFuZCBpdD8KCgkqIFt3aW4zMi9maW5kZmlsZS5jXQoJTmV3IGZpbGUuIEluaXRpYWwgc3RhYiBhdCBGaW5kRmlyc3RGaWxlLiBUaGlzIGRvZXNuJ3Qgd29yayBhcwoJc3BlY2lmaWVkIHlldCwgdGhvdWdoIGEgbG90IG9mIHRoZSBncm91bmR3b3JrIGlzIHRoZXJlLiBJIGhhdmVuJ3QKCXRpbWUgdG8gd29yayBvbiB0aGlzIGZvciB0aGUgbmV4dCBtb250aCwgc28gaWYgYW55b25lIHdhbnRzIHRvIHBpY2sKCWl0IHVwIGFuZCBydW4gd2l0aCBpdCBwbGVhc2UgZG8uCgoJKiBbd2luMzIvbWVtb3J5LmNdCglSZW1vdmVkIG1hbGxvYy5oIGZyb20gaW5jbHVkZXMgKGNvdmVyZWQgYnkgc3RkbGliLmggaW5jbHVkZSwgYW5kCglnZXRzIHJpZCBvZiBhIHdhcm5pbmcgaW4gRnJlZUJTRCkuCgoJKiBbd2luMzIvbmV3Zm5zLmNdCglVbmhvb2tXaW5kb3dzSG9va0V4MzJBIHN0dWIgYWRkZWQuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiBJc0RpYWxvZ01lc3NhZ2UzMkEuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUlzRGxnQnV0dG9uQ2hlY2tlZCBub3cgY2FsbHMgU2VuZERsZ0l0ZW1NZXNzYWdlMzJBIGluc3RlYWQgb2YKCVNlbmREbGdJdGVtTWVzc2FnZTE2LgoKU2F0IEF1ZyAgMyAxODowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJlbW92ZWQgcmVjdGFuZ2xlIGNoZWNraW5nIChjb25mbGljdGVkIHdpdGggbm9uc3RhbmRhcmQKCW1hcHBpbmcgbW9kZXMpLiAKCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQWRkZWQgY2hlY2sgZm9yIGNoaWxkLXN0eWxlIGRpYWxvZ3MgdG8gRFNfQUJTQUxJR04KCWNvb3JkaW5hdGUgY29udmVyc2lvbi4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglDbGVhbmVkIHVwIG1pc2MuIGJpdHMKClRodSBBdWcgIDEgMTA6NTE6NDUgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbd2luZG93cy9mb2N1cy5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10KCSAgW3dpbmRvd3MvZGVmZGxnLmNdCglGaXhlcyB0byBmb2N1c2luZyBhbmQgYWN0aXZhdGlvbi4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJUHJvcGVybHkoPykgaGFuZGxlIERNX0dFVERFRklELgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglIYW5kbGUgQ0JfRklORFNUUklOR0VYQUNULCBDQl9TRVRFRElUU0VMLCBDQl9HRVRFRElUU0VMLgoJQ0JDaGVja1NpemU6IEFkanVzdCBlZGl0IHBvc2l0aW9uLgoKVHVlIEp1bCAzMCAwOTo0NjozNiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL2ZpbGUuaF0gW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJUGFzcyBIRklMRXMgaW5zdGVhZCBvZiB1bml4LWZkcyB0byBzZWxmLWxvYWRlciBjb2RlLgoKTW9uIEp1bCAyOSAyMTo0ODoyNSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvbWV0YWZpbGUuaF0gW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgaGFuZGxpbmcgb2Ygc29tZSBuZXcgbWV0YWZpbGUgcmVjb3JkcyAoTUVUQV8uLi4pCglpbiBQbGF5TWV0YUZpbGVSZWNvcmQoKSwgcmV3cml0ZSBvZiAnY2FzZSBNRVRBX0VYVFRFWFRPVVQnLgoJQWRkZWQgZnVuY3Rpb25zIGxpa2UgTUZfU3RyZXRjaEJsdCgpIGZvciB1c2FnZSBpbiBtZXRhZmlsZXMuCglNaW5vciBidWdmaXggaW4gQ29weU1ldGFmaWxlKCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY11bb2JqZWN0cy9kaWIuY10KCUFkZGVkIGNoZWNrIGZvciBtZXRhZmlsZS1EQyBpbiBCaXRtYXAgYW5kIERJQiBmdW5jdGlvbnM6CglDcmVhdGVDb21wYXRpYmxlQml0bWFwKCkgZXRjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVsIDI4IDE3OjU3OjE5IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL3Rhc2suaF0KCUltcGxlbWVudGVkIFN3aXRjaFN0YWNrVG8oKS9Td2l0Y2hTdGFja0JhY2soKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFtsb2FkZXIvbWFpbi5jXQoJQWRkZWQgX193aW5lbGliIHZhcmlhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW11bGF0b3IgYW5kCiAJbGlicmFyeSBhdCBydW4tdGltZS4gTGF0ZXIgb24sIHRoaXMgc2hvdWxkIGF2b2lkIHNvbWUKIAlyZWNvbXBpbGF0aW9ucyB3aGVuIGJ1aWxkaW5nIFdpbmVsaWIuCgoJKiBbd2luZG93cy9wcm9wZXJ0eS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgZnVuY3Rpb25zIGZvciB3aW5kb3cgcHJvcGVydGllcy4KCkZyaSBKdWwgMjYgMTg6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJSW1wbGVtZW50ZWQgTEJTX1NPUlQgc3R5bGUsIFdNX0NPTVBBUkVJVEVNLCBhbmQgV01fREVMRVRFSVRFTQoJbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ2FsbCBUcmFuc2xhdGVNZXNzYWdlKCkgdG8gZW5hYmxlIHNob3J0Y3V0cyAob24gV01fQ0hBUikuCgoJKiBbaW5jbHVkZS9jdXJzb3JpY29uLmhdCglNb3ZlZCAjcHJhZ21hIHBhY2soMSkgYmFjayB0byB3aGVyZSBpdCBiZWxvbmdzLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkgbWFwcyB0byBzeXN0ZW0gY29sb3JzIG9ubHkuCglEbyBub3QgYnJvYWRjYXN0IHBhbGV0dGUgbm90aWZpY2F0aW9ucyB3aGVuIGluIFRydWVDb2xvci4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtpbmNsdWRlL3BhbGV0dGUuaF0KCU1pc2NlbGxhbmVvdXMgb3B0aW1pemF0aW9ucy4gSGFkIHRvIGZpeCBzZXZlcmFsCgkiaW1wcm92ZW1lbnRzIiBtYWRlIHRvIG15IHBhdGNoIGZvciBwcmV2aW91cyByZWxlYXNlLgoKCSogW29iamVjdHMvZGliLmNdCglSZXZlcnNlIGRpYiBiaXRzIG9yZGVyIGZvciAyNC1iaXQgU2V0RElCaXRzKCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJR2V0RGV2aWNlQ2FwcygpIGRvZXMgbm90IHJldHVybiBSQ19QQUxFVFRFIHdoZW4gaW4gVHJ1ZUNvbG9yLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGwgdXBkYXRlIHJlZ2lvbiB0b28uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbmNsdWRlIFFTX01PVVNFIGludG8gdGhlIGV2ZW50IG1hc2sgZm9yIG5vbmNsaWVudCBtb3VzZQoJbWVzc2FnZSBmaWx0ZXIuIEZpeGVzIHByb2JsZW1zIHdpdGggV29yZCA2IGZyZWV6aW5nIHdoZW4KCW1vdXNlIGhpdHMgbm9uY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy93aW4uY10gCglBbGxvdyB0b3AtbGV2ZWwgd2luZG93cyB0byBiZSBsaW5rZWQgYXMgSFdORF9UT1AgaW4gQ3JlYXRlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvbWRpLmNdCglBdHRlbXB0IHRvIGZpeCBjb250cm9sIG1lbnUgZHVwbGljYXRpb24uCgpGcmkgSnVsIDI2IDA5OjQ5OjM1IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglHZXREcml2ZVR5cGUzMkEoKTogcmV0dXJuIHZhbHVlIGZvciBDRFJPTSBmaXhlZC4KCgkqIFtmaWxlcy9maWxlLmNdCglTZWFyY2hQYXRoKiBhZGRlZC4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvYnJ1c2guY10KCVNldEJydXNoT3JnRXgoKSBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KCUlmIGV2ZW4gbG9hZGluZyB0aGUgZGVmYXVsdCBlbnRyeSBmYWlscywgd2UganVzdCB1c2UgdGhlIGZpcnN0CgllbnRyeSBmcm9tIHRoZSByZXNvdXJjZSBkaXJlY3RvcnkuCgoJW2xvYWRlci90YXNrLmNdCglTZXRTaWdIYW5kbGVyKCkgc3R1YiBhZGRlZCwgUGFyYWRveCA0LjUgbm93IHN0YXJ0cyB1cC4KCgkqIFttaXNjL2NvbW0uY10gW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglDT01NIGZ1bmN0aW9ucyB1cGRhdGVkIHRvIHdpbjMyLCBub3QgY29tcGxldGUuCgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgoJKiBbaW5jbHVkZS9taXNjZW11LmhdIFttZW1vcnkvc2VsZWN0b3IuY10KCSAgW21lbW9yeS9nbG9iYWwuY10gW21pc2NlbXUvZG9zbWVtLmNdCglET1MgbWVtb3J5IGhhbmRsaW5nIGNoYW5nZWQ6IDFNQiBwcmVhbGxvY2F0ZWQgYmxvY2ssIHJlYWwtbW9kZQoJc2VnbWVudCBoYW5kbGluZyBwb3NzaWJsZSwgU2V0U2VsZWN0b3JCYXNlIGludG8gbG93ZXIgcGh5c2ljYWwgMU1CCglwb3NzaWJsZS4KCgkqIFttaXNjZW11L2RwbWkuY10KCVJlYWwtbW9kZSBzZWdtZW50cyBjaGFuZ2VkLCByZWFsLW1vZGUgaW50IDIxLGF4PTY1MDYgYWRkZWQuCglBWD0weDAzMDMgYWRkZWQuCgoJKiBbbXVsdGltZWRpYS90aW1lLmNdCglGaXhlZCBidWcgaW4ga2lsbFRpbWVyLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglMb2FkSW1hZ2VBIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KCldlZCBKdWwgMjQgMTg6MjA6MjQgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL2RkZV9tZW0uaF1baW5jbHVkZS9kZGVfcHJvYy5oXQoJICBbaXBjL2RkZV9hdG9tLmNdW2lwYy9kZGVfcHJvYy5jXVt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW2lwYy9nZW5lcmljX2hhc2guaF1bbGlicmFyeS9taXNjc3R1YnMuY10KCUNoYW5nZXMgZm9yIGVycm9yIGZyZWUgY29tcGlsYXRpb24gdXNpbmcgIi0td2l0aC1pcGMiOgoJcmVwbGFjZWQgc29tZSBuYW1lcyB3aXRoICoxNi1lcXVpdmFsZW50IChlLmcuIE1TRyB0byBNU0cxNiksCgltb2RpZmllZCBwcm90b3R5cGUgb2YgZnVuY3Rpb24gRERFX0dsb2JhbEZyZWUoKSAuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglBZGRlZCBjaGVjayBmb3IgbWV0YWZpbGUtREMgaW4gR0RJU2VsZWN0UGFsZXR0ZSgpLAoJR0RJUmVhbGl6ZVBhbGV0dGUoKSxSZWFsaXplRGVmYXVsdFBhbGV0dGUoKSBhbmQKCUlzRENDdXJyZW50UGFsZXR0ZSgpLgoKVHVlIEp1bCAyMyAyMjo0Njo1MyAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dNX0NyZWF0ZTogRG9uJ3QgRURJVF9FTV9SZXBsYWNlU2VsIGlmIGNyZWF0ZWQgd2l0aCBsUGFyYW0gPSAiIiwKCWZpeGVzIFdpbmhlbHAuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURJQUxPR19DcmVhdGVJbmRpcmVjdDogSW5pdGlhbGlzZSBkbGdQcm9jIGJlZm9yZSBjcmVhdGluZyBjaGlsZHJlbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1bCAxNyAxNjoxMDoxNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dCglHZW5lcmF0ZSBpbmNsdWRlL2NvbmZpZy5oIGluc3RlYWQgb2YgcHV0dGluZyBldmVyeXRoaW5nIG9uIHRoZQoJY29tbWFuZC1saW5lLgoJUmVtb3ZlZCAtd2l0aC1tYWxsb2MtZGVidWcgb3B0aW9uIChub3QgdXNlZnVsIGZvciBlbmQgdXNlcnMKCWFueXdheSkuCglBZGRlZCBjaGVjayBmb3IgbWVtbW92ZSgpLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gWyovTWFrZWZpbGUuaW5dCglBZGRlZCBkZWZpbml0aW9uIG9mIF9fV0lORV9fIHN5bWJvbCB3aGVuIGNvbXBpbGluZyBXaW5lIGNvZGUKCShlbXVsYXRvciBvciBsaWJyYXJ5KSBhcyBvcHBvc2VkIHRvIHVzZXIgcHJvZ3JhbXMuCgoJKiBbZGVidWdnZXIvZWRpdGxpbmUuY10gW2RlYnVnZ2VyL3JlYWRsaW5lLypdCglNb3ZlZCBhbGwgdGhlIHJlYWRsaW5lIGNvZGUgaW50byBkZWJ1Z2dlci9lZGl0bGluZS5jLiBSZW1vdmVkIHRoZQoJcmVhZGxpbmUgc3ViZGlyZWN0b3J5LgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUFkZGVkIFBST0ZJTEVfR2V0V2luZUluaUludCgpLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbbG9hZGVyL3Rhc2suY10KCVRoZSAxNi1iaXQgc3RhY2tmcmFtZSBub3cgYWxzbyBleGlzdHMgZm9yIFdpbmVsaWIgKGV2ZW4gdGhvdWdoIGl0Cglvbmx5IGV2ZXIgY29udGFpbnMgb25lIGZyYW1lKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBmdW5jdGlvbiBNT0RVTEVfQ3JlYXRlRHVtbXlNb2R1bGUoKSB0byBjcmVhdGUgYSBkdW1teSBXaW4xNgoJbW9kdWxlIGZvciBXaW5lbGliIGFuZCBXaW4zMi4KCgkqIFttZW1vcnkvbGR0LmNdCglNYWtlIHN1cmUgdGhlIGxkdCBlbnRyeSBjb250ZW50cyB3aWxsIGJlIGFjY2VwdGFibGUgZm9yIHRoZSBMaW51eAoJa2VybmVsLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJRml4ZWQgU2V0U2VsZWN0b3JMaW1pdCgpIHdoZW4gdGhlIGxpbWl0IGlzIGluIHBhZ2VzLgoKCSogW21pc2MvcG9ydC5jXQoJQWRkZWQgbWVtbW92ZSgpLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJQ2xlYXIgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzIHRoYXQgY29udGFpbiB0aGUgc2VsZWN0b3IgYmVpbmcgZnJlZWQKCWluIGludDMxL2F4PTAwMDEuCglBZGRlZCBtaXNzaW5nIGJyZWFrIGFmdGVyIFNlbGVjdG9yQWNjZXNzUmlnaHRzIGNhbGwuCgoJKiBbd2luMzIvc3RydWN0MzIuY10KCUFkZGVkIGNvbnZlcnNpb25zIGZvciBNRElDUkVBVEVTVFJVQ1QuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCBtZXNzYWdlIGNvbnZlcnNpb25zIGZvciBXTV9NRElDUkVBVEUuCgpUdWUgSnVsIDE2IDE5OjQ2OjI0IDE5OTYgIFBhdmVsIEthbmtvdnNreSA8S0FOQGZyb2RlLmRjaXQuY3o+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgR2V0RXhlUHRyKCkgY2FsbCBpbiBDTEFTU19GaW5kQ2xhc3NCeUF0b20oKS4KCk1vbiBKdWwgMTUgMTc6NDk6MzggMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyLyouc3BlY10KCVNvbWUgbW9yZSB0cml2aWFsIHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9mb250LmNdW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVGb250MzIqIGFkZGVkLCBjaGFuZ2VkIHRvIG5ldyBuYW1pbmcgc3RkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS9tbXN5c3RlbS5oXSBbaW5jbHVkZS93aW50eXBlcy5oXQoJU29tZSBkZWZpbmVzL3R5cGVzIGFkZGVkLgoKCSogW3dpbjMyL3RocmVhZC5jXQoJVGxzU2V0VmFsdWUoKSByZXR1cm5zIGJvb2xlYW4uCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW2xvYWRlci9wZV9yZXNvdXJjZS5jXSBbbG9hZGVyL3Jlc291cmNlLmNdCiAJICBbY29udHJvbHMvbWVudS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCUNsZWFudXAgb2YgdGhlIHJlc291cmNlIGZ1bmN0aW9ucywgbW9zdGx5IGNoYW5nZXMgdG8gbmV3IG5hbWluZwogCXN0YW5kYXJkIGFuZCBmaXhpbmcgb2YgYXJndW1lbnQgdHlwZXMgc28gdGhhdCB0aGV5IGFncmVlIHdpdGggdGhlCiAJd2luMTYvd2luMzIgQVBJLgoKVGh1IEp1bCAxMSAxNTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2hvd1dpbmRvdygpIGZpeGVzLgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXggcmV2ZXJzZWQgTFBBUkFNIGluIFdNX01ESUFDVElWQVRFLgoKCSogW3dpbmUuaW5pXQoJTmV3IG9wdGlvbiBBbGxvY1N5c3RlbUNvbG9ycyB0ZWxscyBXaW5lIGhvdyBtYW55IGNvbG9ycyB0byBncmFiCglmcm9tIHRoZSBzeXN0ZW0gY29sb3JtYXAuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIHBpbmsgZ2FyYmFnZSBvdmVyIFdvcmQgYnV0dG9ucyBpbiBQc2V1ZG9Db2xvci4gQWRkZWQKCW9wdGlvbmFsIERTVElOVkVSVCBzaG9ydGN1dCBmb3IgZmFzdGVyIHRleHQgc2VsZWN0aW9uLgoKCSogW21pc2Mvd3NwcmludGYuY10KCVNraXAgYm9ndXMgc2VnbWVudGVkIHBvaW50ZXJzIGluIHdzdm5wcmludGYxNigpLiAKCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJQWRkZWQgcGFsZXR0ZSBoYW5kbGluZyB0byBVbnJlYWxpemVPYmplY3QoKS4gCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL2RjZS5jXQoJV2luZSBnZXRzIHBhbGV0dGUgbWFuYWdlciB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiAyMCBjb2xvcnMuIAoJT25seSBQc2V1ZG9Db2xvciBhbmQgVHJ1ZUNvbG9yIHZpc3VhbHMgdGVzdGVkIHNvIGZhci4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy93aW4uY10gCglTZXQgWCBzaXplIGhpbnRzIGZvciBXU19FWF9ETEdNT0RBTEZSQU1FIHdpbmRvd3MgKG5vIHJlc2l6ZSkgYW5kCgl1c2UgWFJlY29uZmlndXJlV01XaW5kb3dzKCkgaW5zdGVhZCBvZiBYQ29uZmlndXJlV2luZG93KCkgaW4KCW1hbmFnZWQgbW9kZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglEbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFuIDY0MEsgb2YgRE9TIG1lbW9yeS4KCgkqIFttaXNjL21haW4uY10KCURvIG5vdCBhbGxvdyAtZGVza3RvcCBhbmQgLW1hbmFnZWQgdG9nZXRoZXIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBKdWwgMTIgMTc6NDM6MDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglVc2UgV2luMzIgaGVhcCBmdW5jdGlvbnMgdG8gYWxsb2NhdGUgc2Nyb2xsLWJhciBpbmZvIHN0cnVjdHVyZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgRlMgYW5kIEdTIHNlZ21lbnQgcmVnaXN0ZXJzLgoJQ2hlY2sgdGhhdCBzZWdtZW50IHJlZ2lzdGVycyB2YWx1ZSBhcmUgT0sgYmVmb3JlIHJldHVybmluZyBmcm9tCgl0aGUgc2lnbmFsIGhhbmRsZXIuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9yZWxheS5jXSBbbG9hZGVyL2J1aWx0aW4uY10KCUNoYW5nZWQgcmVsYXkgZGVidWdnaW5nIGZvciBXaW4zMiBmdW5jdGlvbjogdGhlIHJlbGF5IGNvZGUgbm93CglwYXNzZXMgdGhlIGVudHJ5IHBvaW50IGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gbmFtZS4KCgkqIFt0b29scy9idWlsZC5jXSBbbWlzY2VtdS8qLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkYXRhIGVudHJ5IHBvaW50cyBpbiBXaW4zMiBETExzLgoJQWRkZWQgJ2NkZWNsJyBmdW5jdGlvbiB0eXBlIGZvciBXaW4zMi4KCUZvciAncmVnaXN0ZXInIGZ1bmN0aW9uLCB0aGUgcmVsYXkgY29kZSBub3cgcGFzc2VzIGEgcG9pbnRlciB0bwoJdGhlIFNJR0NPTlRFWFQgc3RydWN0dXJlLgoJCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbaW5jbHVkZS93aW5lLmhdCglNb3ZlZCBTSUdDT05URVhUIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIHJlZ2lzdGVycy5oLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRG9uJ3QgZGllIGF0IG9uY2UgaWYgc29tZSBXaW4zMiBlbnRyeSBwb2ludHMgY2Fubm90IGJlIGZvdW5kLCBidXQKCXNldCB0aGVtIHRvIE5VTEwsIGp1c3QgbGlrZSB3ZSBkbyBmb3IgV2luMTYuIFRoaXMgYWxsb3dzIHNvbWUKCXByb2dyYW1zIHRvIGdvIGZ1cnRoZXIgYmVmb3JlIGNyYXNoaW5nLgoKCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbWFpbi5jXQoJTW92ZWQgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBmcm9tIEluaXRUYXNrKCkgdG8gTUFJTl9Jbml0KCksIGFzCgl0aGV5IG5vIGxvbmdlciBuZWVkIGEgdGFzayBjb250ZXh0IHdpdGggdGhlIG5ldyBTRUdQVFIgaGVhcCBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJQWRkZWQgbHN0cmNweW5BdG9XIGFuZCBsc3RyY3B5bld0b0E7IG5vdCByZWFsIEFQSSBmdW5jdGlvbnMsIGJ1dAogCXZlcnkgY29udmVuaWVudC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgRHJhd0VkZ2UoKS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdIFt3aW5kb3dzL2NhcmV0LmNdCglJbXBsZW1lbnRlZCBXaW4zMiB0aW1lciBoYW5kbGluZy4gVXBkYXRlZCBjYXJldCBtYW5hZ2VtZW50IHRvIHVzZQoJV2luMzIgdGltZXJzIChhdm9pZHMgaGF2aW5nIHRvIHVzZSBhIFdpbjE2IGNhbGxiYWNrKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUHJldmVudCBwcm9ncmFtcyBmcm9tIHNldHRpbmcgc29tZSBzdHlsZSBiaXRzIHdpdGgKCVNldFdpbmRvd0xvbmcoKS4gVGhpcyBzaG91bGQgZml4IHNvbWUgQmFkTWF0Y2ggY3Jhc2hlcy4KCUxpbmsgbmV3IHdpbmRvd3MgYXQgdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURvbid0IHRyeSB0byBhY3RpdmF0ZSBhIGNoaWxkIHdpbmRvdyBpbiBTaG93V2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCBhIDMyLT4zMiB0aHVuayB0byBzdXBwb3J0IEFuc2ktVW5pY29kZSB0cmFuc2xhdGlvbi4KCldlZCBKdWwgMTAgMjI6MTE6MTIgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGRpdGlvbmFsICh1bmRvY3VtZW50ZWQpIHJldHVybiB2YWx1ZSBmb3IgR2V0VGVtcERyaXZlKCkgYWRkZWQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldFRlbXBGaWxlTmFtZTMyKiBhZGRlZC4KCUdldFNob3J0UGF0aE5hbWUqIGFkZGVkLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCVdpbjE2IGxzdHJjcHkoKSBjYW4gZ2V0IE5VTEwgcHRycyBhcyBhcmd1bWVudCBhbmQgc3Vydml2ZS4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglMWk9wZW5GaWxlKCk6IGFsc28gdHJ5IG9wZW5pbmcgd2l0aCBjb21wcmVzc2VkIGZpbGVuYW1lIGlmIG5vcm1hbAogCW9wZW4gZmFpbHMuCgoJKiBbbWlzYy9vbGUybmxzLmNdIFttaXNjL2xzdHIuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhciogYWRkZWQuCglDb21wYXJlU3RyaW5nKiBhZGRlZC4KClN1biBKdWwgIDcgMDE6MjI6MTQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQoJQ3JlYXRlRm9udEluZGlyZWN0MzJBIGFuZCBDcmVhdGVGb250SW5kaXJlY3QzMlcgYWRkZWQuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglHZXRVc2VyRGVmYXVsdExDSUQgcmV0dXJuIHZhbHVlcyB1cGRhdGVkIGZvciBuZXcgbGFuZ3VhZ2VzLgoJRmlubmlzaCBzdXBwb3J0IGFkZGVkIGZvciBHZXRMb2NhbGVJbmZvQS4KCgkqIFtvYmplY3QvcGFsZXR0ZV0gW2dkaTMyLnNwZWNdCglSZWFsaXplUGFsZXR0ZTMyIGFuZCBTZWxlY3RQYWxldHRlMzIgYWRkZWQuCgkKU2F0IEp1bCAgNiAxNzoyNzozMCAxOTk2ICBSb25hbiBXYWlkZSAgPHJvb3RAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCUZpeHVwIGZvciBTSEVMTF9GaW5kRXhlY3V0YWJsZSBzbyB0aGF0IEZpbGUtPlJ1biBmcm9tIHByb2dtYW4KCXdvcmtzIG9uY2UgbW9yZS4gU3RpbGwgbmVlZHMgc29tZSBtb3JlIGZpeHVwcyAtIGdyZXAgZm9yIEZJWE1FIGluCgl0aGlzIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBKdWwgIDUgMTY6Mjc6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJVXNlIFdpbmRvd3MgZmlsZSBJL08gcm91dGluZXMgdG8gbG9hZCB0aGUgZGVza3RvcCBiaXRtYXAuCgoJKiBbZmlsZXMvZmlsZS5jXQoJSW1wbGVtZW50ZWQgUmVtb3ZlRGlyZWN0b3J5KiBhbmQgRGVsZXRlRmlsZSouCgoJKiBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBTSUdDT05URVhUIHR5cGVkZWYgdG8gcmVwbGFjZSAjZGVmaW5lIHNpZ2NvbnRleHRfc3RydWN0LgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBpbml0aWFsIGJyZWFrcG9pbnQgc2V0dGluZyBmb3IgV2luMzIgdGFza3MuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJSWdub3JlIFVuaWNvZGUgZm9ybWF0cyBmb3Igd3NwcmludGYxNigpLgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBHZXRUZXh0TWV0cmljcy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCgkgIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgd2luZG93cyBwcm9jZWR1cmVzIHRvIHVzZSB0aHVua3MsIHRvIGVuc3VyZSB0aGF0IHRoZQoJcHJvY2VkdXJlIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgV2luZG93cyBwcm9ncmFtLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5fQnVpbGRXaW5BcnJheSgpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGVudW1lcmF0ZQoJd2luZG93cy4gSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBFbnVtV2luZG93cygpIGFuZCBmcmllbmRzLgoKRnJpIEp1bCAgNSAxMTo1NjoyMiAxOTk2ICBBbmRyZWFzIEtpcnNjaGJhdW0gPGFua0ByYmcuaW5mb3JtYXRpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFt3aW5kb3dzL3dpbi5jXQoJT3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19QQVNTV09SRCwgRVNfTE9XRVJDQVNFIGFuZCBFU19VUFBFUkNBU0Ugc3R5bGVzLgoJRml4ZWQgd29yZCB3cmFwIHdpdGggbG9uZyB3b3Jkcy4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJTmV3IGFsaWFzICJ3aGVyZSIgZm9yIGNvbW1hbmQgImJhY2t0cmFjZSIuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJQ29ycmVjdGVkIHBhcmFtZXRlciBvZiBFeHRUZXh0T3V0LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUNvcnJlY3RlZCBwcmludGluZyBvZiB0YWJsZSBvZiBtb2R1bGVzLgoKCSogW21pc2Mvc3B5LmNdCglSZW1vdmVkIHN1cGVyZmx1b3VzIFxuIGluIG1lc3NhZ2UgbmFtZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURlY2xhcmVkIE1TR19TZW5kTWVzc2FnZSBhcyBzdGF0aWMuCglDaGFuZ2VkIHBhcmFtZXRlciBvZiBEaXJlY3RlZFlpZWxkKCkgZnJvbSBxdWV1ZSBoYW5kbGUgdG8gdGFzayBoYW5kbGUuCglSZW1vdmVkIHdhcm5pbmcgbWVzYWdlcyBmb3IgYXJndW1lbnQgb2YgcHJpbnRmLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCB0aGUgZmxhZyBEVF9OT1BSRUZJWCB3aGVuIGRyYXdpbmcgd2luZG93IHRpdGxlcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV0lOX1dhbGtXaW5kb3dzIG5vdyBwcmludHMgdGhlIGludmFsaWQgd2luZG93IGhhbmRsZS4KCUFkZGVkIGEgd2FybmluZyBpZiBHZXQtL1NldFdpbmRvd1dvcmQvLUxvbmcgZ2V0cyBhbiBpbnZhbGlkIG9mZnNldC4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFsbG93cyBjcmVhdGluZyBkaWFsb2cgd2luZG93cyB3aXRoIE5VTEwgYXMgZGlhbG9nIGZ1bmN0aW9uLgoKV2VkIEp1bCAgMyAwOToyNjo0MSAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglFVkVOVF9rZXk6IEZpeGVzIHRvIFZLXyBjb2RlIGdlbmVyYXRpb24gZm9yIHNwYWNlIGJhciBhbmQKCXB1bmN0dWF0aW9uLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUdldFRlbXBGaWxlTmFtZTogZmlyc3QgY2hhcmFjdGVyIGluIHRlbXBvcmFyeSBuYW1lIGlzICJ+Ii4KCgkqIFttZW1vcnkvaGVhcC5jXQoJSEVBUF9NYWtlSW5Vc2VCbG9ja0ZyZWUgbm93IGZyZWVzIHRoZSB3aG9sZSBzdWJoZWFwIGlmIHBvc3NpYmxlLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRXh0VGV4dE91dDE2KCk6IGhhbmRsZSBOVUxMIGxwUmVjdCBhbmQgRVRPX09QQVFVRS4KCgkqIFttaXNjL2RyaXZlci5jXQoJUmVtb3ZlZCBzb21lIGJ1Z3MgYW5kIHJlZm9ybWF0dGVkLiBBY3R1YWxseSBsb2FkcyBkcml2ZXJzIG5vdy4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBDYWxsRHJpdmVyUHJvYygpIGFuZCBDYWxsV2luZG93c0V4aXRQcm9jKCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTU9EVUxFX0NhbGxXRVAoKTogbmV3IGZ1bmN0aW9uLgoKCSogW21pc2MvbHpleHBhbmQuY10KCUxaU2VlaygpOiByZXR1cm4gbmV3IHBvaW50ZXIsIG5vdCBvbGQgb25lLgoKCSogW21pc2MvdmVyLmNdCglmaW5kX25lX3Jlc291cmNlKCk6IGZpeGVkIGRlcGVuZGVuY2Ugb24gTFpTZWVrKCkgYnVnLgoJR2V0RmlsZVJlc291cmNlKCk6IGluaXRpYWxpemUgcmVzbGVuIGJlZm9yZSB1c2luZyBpdC4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglTZXRDbGFzc1dvcmQoKTogYWRkIG1pc3NpbmcgZWxzZS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCWxwRm9udExpc3QgaXMgbm93IE1BWF9GT05UUysxLiBJdCB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgYXJyYXkuCglJbml0Rm9udExpc3Q6IGFsbG9jYXRlIG9uZSBodWdlIGFycmF5IG9mIHN0cnVjdHVyZXMuCglGT05UX01hdGNoRm9udDogdXBwZXJjYXNlIHRoZSBmYWNlIG5hbWUuCgpUaHUgSnVuIDI3IDEyOjQxOjQwIDE5OTYgIEJydWNlIE1pbG5lciA8YnJ1Y2VAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbbWVtb3J5L2hlYXAuY10KCUZpeGVkIGEgdHlwbyBpbiBIZWFwUmVBbGxvYygpLgoKVHVlIEp1biAyNSAyMjoyMjowMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2ZpbGVzL2RyaXZlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCgkgIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRUZW1wUGF0aCogYWRkZWQKCUdldERyaXZlVHlwZSogZml4ZWQsIHVwZGF0ZWQgdG8gTmV3TmFtZVN0YW5kYXJkLgoJR2V0Q3VycmVudERpcmVjdG9yeSogZml4ZWQgKG5lZWRzIHRvIHByZXBlbmQgWDpcKS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaXNzaW5nIE5VTEwgY2hlY2sgYWRkZWQuCgoJKiBbaWYxNjMyL3dpbm1tLnNwZWNdIFtsb2FkZXIvYnVpbHRpbi5jXQoJd2lubW0uZGxsICgzMmJpdCBtbXN5c3RlbSBlcXVpdmFsZW50KSBzcGVjcyBhZGRlZC4KCgkqIFttZW1vcnkvc3RyaW5nLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJUnRse01vdmUsWmVybyxGaWxsfU1lbW9yeSBhZGRlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIE5VTEwgcHRyIGRlcmVmZXJlbmNlIGJ1Z3MgZml4ZWQuCgoJKiBbbXVsdGltZWRpYS9tY2ljZGEuY11bbXVsdGltZWRpYS9tY2lzdHJpbmcuY11bbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hlY2sgZm9yIE5VTEwgcHRyLgoJRmlsbCBtY2lPcGVuRHJ2IHdoZW4gbWl4aW5nIG1jaU9wZW4gYW5kIG1jaVNlbmRTdHJpbmcoIm9wZW4gLi4iKS4KCUFsaWFzaW5nIHNob3VsZCB3b3JrIGZvciBhbGwgTUNJIGRldmljZXMuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG93IHBhc3NpbmcgaW52YWxpZCB3aW5kb3cgaGFuZGxlcyB0byBDbG9zZVdpbmRvdygpLgoKVHVlIEp1biAyNSAyMDowMjoxNSAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglHZXRTeXN0ZW1EaXJlY3RvcnkzMkEgYW5kIEdldFN5c3RlbURpcmVjdG9yeTMyVyBhZGRlZC4KCgkqIFttaXNjL21haW4uY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQmVlcCBhbmQgU2V0RW52aXJvbm1lbnRWYXJpYWJsZTMyVyBhZGRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1biAxOSAxNDo0OToyNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGZhdWk0NS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXSAKCUdldEZyZWVEaXNrU3BhY2UqLCBHZXRWb2x1bWVJbmZvcm1hdGlvbiogYWRkZWQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRmx1c2hGaWxlQnVmZmVycywgQ3JlYXRlRGlyZWN0b3J5KiBhZGRlZC4KCgkqIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJUHJvdG90eXBlcywgZGVmaW5lcyBhZGRlZCBhbmQgZml4ZXMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KCSAgW3dpbjMyL2N1cnNvcmljb24zMi5jXSBbd2luMzIvcmVzb3VyY2UuY10gW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlcyB0byByZXNvdXJjZSBoYW5kbGluZy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCVNwZWNzIGZvciBpbXBsZW1lbnRlZCBmdW5jdGlvbnMgYWRkZWQKCVNvbWUgdGh1bmtzIHRvIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2FtZSBhcyB3aW4xNiBlcXVpdmFsZW50cy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJR2V0QXBwQ29tcGF0RmxhZ3MoKSBhZGRlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglPbmUgbWlzc2luZyBlbHNlIGFkZGVkLCBzbWFsbCBoYWNrIHRvIFJlZ1F1ZXJ5VmFsdWUxNigpLgoKCSogW3dpbjMyL2ZpbGUuY10KCUdldEZpbGVBdHRyaWJ1dGVzQSgpIGZpeGVkICh3YXMgdXNpbmcgRE9TIHBhdGggYXMgVU5JWCBwYXRoKS4KClR1ZSBKdW4gMTggMjE6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdCglGaXhlZCBGcmVlUmVzb3VyY2UoKSByZXR1cm4gdmFsdWUuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXhlZCBhIGJ1ZyBpbiBFeHRUZXh0T3V0KCkgdGhhdCB3YXMgY2F1c2luZyBvdmVybGFwcGVkIGNoYXJhY3RlcnMKCWluIFdpbldvcmQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNXUF9GUkFNRUNIQU5HRUQgZm9yIHRvcC1sZXZlbCB3aW5kb3dzIG5vdyBpbnZhbGlkYXRlcyBjbGllbnQKCWFyZWEgYXMgY2xvY2suZXhlIHdhbnRzLgoKVHVlIEp1biAxOCAxMTozMDoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1pbmkgYnVnZml4OiAncmV2aXZhbCcgb2YgbWlzc2luZyBzY3JvbGxiYXIgaW4gbGlzdGJveGVzLgoKTW9uIEp1biAxNyAyMDoyNzo0MSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCU1hZGUgY2hhbmdlcyBmb3IgQ2hvb3NlX0ZvbnQgZGlhbG9nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVuIDE2IDE2OjUxOjMxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBidWcgaW4gSGVhcFJlYWxsb2MgKHRoYW5rcyB0byBCcnVjZSBNaWxuZXIpLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUZpeGVkIGFyZ3VtZW50IHNpemUgZm9yICVjIGZvcm1hdCBpbiB3c3ByaW50ZjE2KCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRG9uJ3QgZnJlZSBoRmlyc3RCaXRtYXAgZm9yIHNhdmVkIERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCB0aW1lciBoYW5kbGluZyBpbiBFVkVOVF9XYWl0WEV2ZW50KCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbiBNU0dfVHJhbnNsYXRlTW91c2VNc2cgYW5kIE1TR19UcmFuc2xhdGVLYmRNc2csIGNoZWNrIGlmIHRoZQoJZXZlbnQgaXMgZm9yIHRoZSBjdXJyZW50IHRhc2s7IGlmIG5vdCwgd2FrZSB0aGUgb3RoZXIgdGFzay4KCgkqIFt3aW5kb3dzL3F1ZXVlLmNdIFtpbmNsdWRlL3F1ZXVlLmhdCglBZGRlZCAnc2VsZicgaGFuZGxlIGluIHF1ZXVlIHN0cnVjdHVyZS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglBZGRlZCBUSU1FUl9FeHBpcmVUaW1lcnMoKSBmdW5jdGlvbiB0byBtYXJrIGV4cGlyZWQgdGltZXJzIGFuZAoJd2FrZSB1cCB0aGUgY29ycmVzcG9uZGluZyB0YXNrcy4KClRodSBKdW4gMTMgMDE6NDY6MzMgRURUIDE5OTYgIFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUZpcnN0IHBvaW50IGluIGxpc3Qgd2FzIG1hcHBlZCBtdWx0aXBsZSB0aW1lcyBpbiBEUHRvTFAgYW5kCiAJTFB0b0RQLiAgT3RoZXIgcG9pbnRzIHdlcmUgbm90IG1hcHBlZC4KCldlZCBKdW4gMTIgMTg6MDg6NDUgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJU29tZSBmaXhlcyBmb3IgRXh0cmFjdEljb24gZnVuY3Rpb24gZmFtaWx5LgoKCSogW2RvY3VtZW50YXRpb24vdXNlcl9tb2R1bGVdCglDaGFwdGVyIGFib3V0IHdpbmRvd2luZyBhbmQgbWVzc2FnaW5nIHN1YnN5c3RlbXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gMTEgMTU6MjA6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZGVidWdnZXIvYnJlYWsuY10gW2xvYWRlci9zaWduYWwuY10KCUZpeGVkIGJyZWFrcG9pbnRzIGluIDMyLWJpdCBjb2RlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWFueSBtb3JlIFdpbjMyIHZlcnNpb25zIG9mIHN0YW5kYXJkIHN0cnVjdHVyZXMuCgoJKiBbaW5jbHVkZS93aW5yZWcuaF0gW21pc2MvcmVnaXN0cnkuY10KCU1vdmVkIHByaXZhdGUgdHlwZXMgaW50byByZWdpc3RyeS5jLgoKCSogW21lbW9yeS9zdHJpbmcuY10gKE5ldyBmaWxlKQoJTW92ZWQgbW9zdCBzdHJpbmcgZnVuY3Rpb25zIGZyb20gbWlzYy9sc3RyLmM7IGFkZGVkIFdpbjMyIHZlcnNpb24KCW9mIGFsbCBmdW5jdGlvbnMuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJSW1wbGVtZW50ZWQgV2luMzIgd3NwcmludGYgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBiaXRtYXAgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEb24ndCBzZXQgZGlhbG9nIHByb2NlZHVyZSBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkLiBUaGlzCglhdm9pZHMgYSBjcmFzaCBpbiBXaW5oZWxwLgoKVHVlIEp1biAxMSAxNDoxMDowNiAxOTk2IE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVwbGFjZSBQZWVrTWVzc2FnZSB3aXRoIFBlZWtNZXNzYWdlMTYuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQoJR2V0VmVyc2lvbjMyLEdldFZlcnNpb25FeDMyQSxHZXRWZXJzaW9uRXgzMlc6IG5ldyBmdW5jdGlvbnMuCglNQUlOX1BhcnNlVmVyc2lvbjogbmV3IGZ1bmN0aW9uLCBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiAtd2ludmVyLgoJR2V0VmVyc2lvbjogbW9kaWZpZWQgdG8gdGFrZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgaW50byBhY2NvdW50LgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvcHJvY2Vzcy5jXQoJRnJlZUxpYnJhcnkzMjogbmV3IGZ1bmN0aW9uLgoJVGxzQWxsb2M6IGluaXRpYWxpemUgVGxzIHRvIHplcm8uCglJbnRlcmxvY2tlZEluY3JlbWVudCxJbnRlcmxvY2tlZERlY3JlbWVudCxJbnRlcmxvY2tlZEV4Y2hhbmdlOiBuZXcKCWZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCVNldEVycm9yTW9kZSxHZXRBY3RpdmVXaW5kb3c6IG5ldyByZWxheXMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi91c2VyMzIuY10KCVBlZWtNZXNzYWdlMzJBLFBlZWtNZXNzYWdlMzJXOiBuZXcgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF1baW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCBNU0czMiB0byB3aW5kb3dzLmguCglSZW5hbWVkIE1TRyB0byBNU0cxNi4KCU1vZGlmaWVkIHByb3RvdHlwZXMgdG8gdXNlIE1TRzE2CgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdCglPU1ZFUlNJT05JTkZPMzJBLE9TVkVSU0lPTklORk8zMlc6IG5ldyBzdHJ1Y3R1cmVzLgoKU3VuIEp1biAgOSAyMDo1MzozMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtsb2FkZXIvYnVpbHRpbi5jXQoJdmVyc2lvbi5kbGwsbHozMi5kbGwgYWRkZWQuCgoJKiBbaW5jbHVkZS9semV4cGFuZC5oXSBbaWYxNjMyL2x6MzIuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXQoJICBbbWlzYy9semV4cGFuZC5jXQoJbHozMi5kbGwgYWRkZWQuCglNb2RpZmllZCB0byBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLgoKCSogW2luY2x1ZGUvdmVyLmhdIFtpZjE2MzIvdmVyLnNwZWNdIFtpZjE2MzIvdmVyc2lvbi5zcGVjXSBbbWlzYy92ZXIuY10KCXZlcnNpb24uZGxsIGFkZGVkICh3aW4zMiB2ZXJzaW9uIG9mIHZlci5kbGwpLgoJTW9kaWZpZWQgdG8gbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZC4KCVVzZSByZWdpc3RyeSB0byBsb29rIHVwIGEgTE9DQUxFIGxhbmdpZHMgdG9vLgoJKFZlckluc3RhbGxGaWxlLFZlckZpbmRGaWxlIHN0aWxsIHN0dWJzKQoKRnJpIEp1biAgNyAyMDo0MDoyMCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10KCUFkZGVkIGEgd2FybmluZyBpZiBHZXRUZW1wRmlsZU5hbWUoKSBnZXRzIGEgYmFkIGRyaXZlIHBhcmFtZXRlci4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNoYW5nZWQgZmlsZSBsaXN0Ym94IGNvbG9yIHRvIGdyYXkgaW4gU2F2ZUZpbGUgZGlhbG9nIAoJKGp1c3QgbGlrZSBXaW5kb3dzIGRvZXMgdGhpcykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdW4gIDUgMjA6MTM6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCB3UGFyYW0gb2YgV01fRFJBV0lURU0gbWVzc2FnZS4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtsb2FkZXIvYnVpbHRpbi5jXQoJUmVtb3ZlIFdQUk9DUzMyIERMTCwgYXMgdGhlIHJlbGF5IGNvZGUgY2FuIGNhbGwgV2luZSByb3V0aW5lcwoJZGlyZWN0bHkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCglGaXhlZCBpbml0aWFsIHN0YWNrIGxheW91dCBmb3Igc2VsZi1sb2FkaW5nIG1vZHVsZXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGRhdGEgc2VnbWVudCBidWlsZGluZyBmb3IgV2luMTYgbW9kdWxlcy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbnMgb2YgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNZXJnZWQgV2luMTYgYW5kIFdpbjMyIGRpYWxvZyBjb2RlLgoJQWRkZWQgc3VwcG9ydCBmb3IgY29udHJvbCBleHRyYSBkYXRhIGluIGRpYWxvZyBpdGVtIHRlbXBsYXRlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglVbmlmaWVkIFdpbjE2IGFuZCBXaW4zMiB2ZXJzaW9ucyBvZiBDcmVhdGVXaW5kb3coKS4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0V2luZG93TG9uZygpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygd2luZG93IHByb2NlZHVyZXMsIHNvIHRoYXQgMTYtYml0Cgl3aW5wcm9jcyBhcmUgdmFsaWQgc2VnbWVudGVkIHBvaW50ZXJzLgoKU3VuIEp1biAgMiAxNjozOTo0NiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXhlZCBhbm90aGVyIGJ1ZyBpbiB0aGUgdzk1IGxvYWRlci4gUXVpZXRlbmVkIHNvbWUgZGVidWcgb3V0cHV0LgoKU3VuIEp1biAgMiAxMDowMDoyMiAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQnVnIGZpeDogV01fUEFSRU5UTk9USUZZOiBkb24ndCBmYWxsIHRocm91Z2ggdG8gV01fU0VUVEVYVC4KClNhdCBKdW4gIDEgMTI6Mzc6MjIgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9UT0RPXSBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCVVwZGF0ZWQgZm9udCBkaWFsb2cgYm94LgoKVGh1IE1heSAzMCAyMTowNToxOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCglDaG9vc2VGb250KCkgYW5kIENob29zZUNvbG9yKCk6IAoJQnVnZml4ZXMgYW5kIGFkZGVkIG1vcmUgc3VwcG9ydCBmb3Igc29tZSBDRl8qIGFuZCBDQ18qIGZsYWdzOiAKCWRpYWxvZyB0ZW1wbGF0ZXMgYW5kIGZvbnQgc2l6ZSBjb250cm9sLgoJQnVnZml4IGluIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9mIENIT09TRUNPTE9SIGRlZmluaXRpb24uCgoJKiBbaXBjL2RkZV9wcm9jLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglSZXBsYWNlZCBTZW5kTWVzc2FnZSB3aXRoIFNlbmRNZXNzYWdlMTYgYW5kIGFkZGVkIGluY2x1c2lvbiBvZgogCWRkZV9wcm9jLmggZm9yIGVycm9yLWZyZWUgY29tcGlsYXRpb24gb2YgaXBjIG1vZHVsZS4KClRodSBNYXkgMzAgMTk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU1hZGUgU2Nyb2xsREMgdG8gc2F2ZS9yZXN0b3JlIGN1cnJlbnQgY2xpcHBpbmcgcmVnaW9uLgoKCSogW21pc2MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBtb3N0IG9mIHRoZSBwcmV2aW91c2x5IG1pc3NpbmcgZmVhdHVyZXMgKG5vdCB0ZXN0ZWQpLCAKCWltcHJvdmVkIHRleHQgcGFzdGluZyBmcm9tL3RvIFguIAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2RjLmNdCgkgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbd2luZG93cy9kY2UuY10KCSAgW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglVcGRhdGVkIERDRSBjb2RlLCBpbXBsZW1lbnRlZCBkeW5hbWljIGludmFsaWRhdGlvbiBvZiBvd25lZCBEQ3MuCglUaGlzIGZpeGVzIGEgbG90IG9mIHByb2JsZW1zIHdpdGggc2Nyb2xsaW5nIGluIFdpbldvcmQuIE5vdAoJc3VyZSBhYm91dCB0aGUgZWZmZWN0IG9uIC1kZXNrdG9wLgoKV2VkIE1heSAyOSAyMzozNTo0NCAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgU2V0U3lzdGVtVGltZSBhbmQgU2V0VGltZVpvbmVJbmZvcm1hdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIGxzdHJjYXQsIGxzdHJjYXRBLCBsc3RyY21wLCBsc3RyY21wQSwgbHN0cmNweSwgbHN0cmxlbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIFNZU1RFTV9QT1dFUl9TVEFUVVMgc3RydWN0dXJlIGFuZCBwcm90b3R5cGVzIGZvcgoJR2V0U3lzdGVtUG93ZXJTdGF0dXMsIFNldFN5c3RlbVBvd2VyU3RhdGUsIFNldFN5c3RlbVRpbWUuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQoJQWRkZWQgYSBwcm90b3R5cGUgZm9yIFNldFRpbWVab25lSW5mb3JtYXRpb24uCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2V0U3lzdGVtUG93ZXJTdGF0dXMgYW5kIFNldFN5c3RlbVBvd2VyU3RhdGUgc3R1YnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMjggMTk6MzY6MzYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCURlc3Ryb3kgdGhlIGxpc3Rib3ggYW5kIGVkaXQgY29udHJvbCB3aGVuIGRlc3Ryb3lpbmcgdGhlCgljb21iby4gVGhpcyBzaG91bGQgcHJldmVudCBjcmFzaGVzIG9uIGFwcGxpY2F0aW9uIGV4aXQuCgoJKiBbbWlzYy9zeXN0ZW0uY10gW2lmMTYzMi9zeXN0ZW0uc3BlY10KCUltcGxlbWVudGVkIElucXVpcmVTeXN0ZW0oKS4KCgkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdCglGaXJzdCBhdHRlbXB0IGF0IGludGVyLXRhc2sgU2VuZE1lc3NhZ2UoKS4gU3RpbGwgaGFzIGEgbG90IG9mCglwcm9ibGVtcy4KClR1ZSBNYXkgMjggMTQ6MjY6MDQgMTk5NiAgUGV0ZXIgQmFqdXN6ICA8aHlwLXhAaW5mLmJtZS5odT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgTURJVGlsZSB3aXRoIGljb25pYyBjaGlsZHJlbi4KCk1vbiBNYXkgMjcgMjA6Mjg6MTggMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNob29zZUZvbnQgZGlhbG9nOgoJLSBjb21wbGV0ZSByZXdyaXRlIG9mIEZvbnRGYW1pbHlFbnVtUHJvYygpIGFuZCBGb250U3R5bGVFbnVtUHJvYygpCgkgIG5vdCByZWFsIGF2YWlsYWJsZSBmb250IHR5cGVzIChlLmcuICJCb2xkIikgY2FuIG5vdCBzZWxlY3RlZAoJLSBzdXBwb3J0aW5nIG1vcmUgQ0ZfTElNSVRTSVpFLSBhbmQgQ0ZfLi4uT05MWS0gZmxhZ3MKCgkqIFtvYmplY3RzL2ZvbnQuY10KCUluIEZPTlRfTWF0Y2hGb250IHBlcmZvcm0gY2hlY2sgaWYgImxmRmFjZU5hbWUiIGlzIGZhbWlseSBmcm9tIFgxMQoJb25seSBpZiAibGZGYWNlTmFtZSIgaXMgYSB3aW5kb3dzIGZvbnQgZmFtaWx5IHRoZW4gZG8gYSBjYWxsIG9mCglGT05UX1RyYW5zbGF0ZU5hbWUoKSA6IHRoaXMgcmVzdWx0cyBpbiBiZXR0ZXIgZm9udCBzZWxlY3Rpb25zIGluIAoJQ2hvb3NlRm9udCgpIG9yIGFwcGxpY2F0aW9ucyBsaWtlIGNoYXJtYXAuZXhlIG9yIHdyaXRlLmV4ZS4KCUFkZGVkIGEgUGFyc2VGb250UGFybXMoKSBjYWxsIGlmIG5lY2Vzc2FyeSBpbiBmdW5jdGlvbiAKCUZPTlRfTWF0Y2hGb250KCk6IHdlIG5lZWQgYSBmb250IG5hbWUgYXMgYmFzaXMgZm9yIEdldFRleHRGYWNlKCkgCglldmVuIGlmIHRoZXJlIGlzbid0IG9uZS4uLgoKCSogW3Jlc291cmNlcy9UT0RPXQoJSW52ZW50b3J5IG9mIHJlc291cmNlIHRyYW5zbGF0aW9ucyBpbiBzeXNyZXNfPz8ucmMKCkZyaSBNYXkgMjQgMTY6MzM6MjggMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJX3c5NV9sb2FkcmVnOiB1c2Ugb2Zmc2V0IHRvIGRldGVybWluZSBuZXh0IFJHREIgcG9zaXRpb24gdG9vLgoKVGh1IE1heSAyMyAxOTozNTozOCAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXhlZCBzaXplIG9mIGNvbWJvLCBsYm94LCBhbmQgYnV0dG9uIChsYiBzb21ldGltZXMgb2ZmIGJ5IDIgcGl4ZWxzKS4KCgkqIFttaXNjL21haW4uY10KCVJlc3VsdCBvZiBvcHRpb24gIi1maXhlZG1hcCIgaXMgdG8gdHVybiBmbGFnIG9uLgoKVGh1IE1heSAyMyAxOToxNTo0MSAxOTk2ICBSb25hbiBXYWlkZSAgPHJvb3RAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsRXhlY3V0ZSBhbmQgRmluZEV4ZWN1dGFibGUgbm93IGJvdGggdXNlIGNvbW1vbiBjb2RlIHRvCglkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGV4ZWN1dGFibGUgZmlsZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAyMSAxNDowNjowNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10KCU1hZGUgQnV0dG9uV25kUHJvYyBhIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCU1hZGUgRGVza3RvcFduZFByb2MgYSAzMi1iaXQgd2luZG93IHByb2NlZHVyZS4KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX1NFVENVUlNPUi4KCgkqIFtjb250cm9scy9tZW51LmNdCglBbGxvY2F0ZSBtZW51IGl0ZW1zIGFuZCBzdHJpbmdzIG9uIHRoZSAzMi1iaXQgc3lzdGVtIGhlYXAuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9ucyBmb3IgQ2hhbmdlTWVudSwgSW5zZXJ0TWVudSwgTW9kaWZ5TWVudSwKCUFwcGVuZE1lbnUgYW5kIExvYWRNZW51SW5kaXJlY3QuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gaGF2ZSAzMi1iaXQgYnVpbHQtaW4gY2xhc3Nlcy4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJSW1wbGVtZW50ZWQgR2V0TG9naWNhbERyaXZlKCkgYW5kIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MoKS4KCgkqIFttaXNjL3NweS5jXSBbaW5jbHVkZS9zcHkuaF0KCUFkZGVkIHN1cHBvcnQgZm9yIHNweWluZyBXaW4zMiBtZXNzYWdlcy4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXQoJRml4ZWQgYnVnIGluIC1kbGwgb3B0aW9uIHBhcnNpbmcuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglBZGRlZCBiYWNrIHRoZSBjaGFuZ2UgYnkgSHV3IEQuIE0uIERhdmllcyB0byBmcmVlIHRoZSBibG9jayBpbgoJTG9jYWxSZWFsbG9jKCkgYmVmb3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBvbmUuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUZpeGVkIGJ1ZyBpbiBiaXRtYXAgc2l6ZSB0aGF0IGNhdXNlZCBtZW1vcnkgY29ycnVwdGlvbiBmb3IgMjRicHAuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRGVmV2luZG93UHJvYygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNlbmREbGdJdGVtTWVzc2FnZSwKCUdldC9TZXREbGdJdGVtVGV4dCBhbmQgR2V0L1NldERsZ0l0ZW1JbnQuCgoJKiBbd2luZG93cy9tZGkuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRGVmRnJhbWVQcm9jKCkgYW5kIERlZk1ESUNoaWxkUHJvYygpLgoJRG9uJ3QgbWFrZSBhIGNvcHkgb2YgdGhlIE9CTSBiaXRtYXBzIGZvciBldmVyeSBNREkgd2luZG93LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kTWVzc2FnZSgpLgoJCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3Mvd2luLmNdCglOZXcgc2NoZW1lIGZvciAzMi1iaXQgd2luZG93IHByb2NlZHVyZXMgdG8gcmVwbGFjZSBhbGlhc2VzLiBBbGwKCTMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlIGdldCBhIDE2LWJpdCBhZGRyZXNzIHBvaW50aW5nIHRvIGEKCVdJTkRPV1BST0Mgc3RydWN0dXJlLgoJSW1wbGVtZW50ZWQgQW5zaTwtPlVuaWNvZGUgdHJhbnNsYXRpb24gZm9yIENhbGxXaW5kb3dQcm9jKCkuCglBZGRlZCB0cmFuc2xhdGlvbiBvZiBXTV9EUkFXSVRFTSBiZXR3ZWVuIFdpbjE2IGFuZCBXaW4zMi4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgdWdseSBoYWNrIHRvIGJ1aWxkIENSRUFURVNUUlVDVCBvbiB0aGUgc3RhY2sgd2hlbiBzZW5kaW5nCglXTV9OQ0NSRUFURS4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0L1NldFdpbmRvd1dvcmQvTG9uZyBhbmQKCUdldC9TZXRXaW5kb3dUZXh0LgoJCkZyaSBNYXkgMTcgMTA6MjA6MTYgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUF2b2lkIGdyYXkgdGV4dCBvbiBncmF5IGJhY2tncm91bmQgaW4gZGlzYWJsZWQgcHVzaCBidXR0b25zCgl1c2luZyBhIGIvdyByYXN0ZXIgYW5kIHNvbWUgcmFzdGVyIG9wZXJhdGlvbnMgKFBhdEJsdCxCaXRCbHQpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRHJhd1RleHQoKTogZG9uJ3QgZHJhdyBhbiB1bmRlcmJhciBhbnltb3JlIGlmIERUX0NBTENSRUNUIGlzIHNldC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE1heSAxNiAxMzozNTozMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqLyouY10KCVJlbmFtZWQgUkVDVCwgUE9JTlQgYW5kIFNJWkUgc3RydWN0dXJlcyB0byBSRUNUMTYsIFBPSU5UMTYgYW5kCglTSVpFMTYuIEltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgbW9zdCBmdW5jdGlvbnMgdGhhdCB0YWtlCgl0aGVzZSB0eXBlcyBhcyBwYXJhbWV0ZXJzLgoKCSogW2NvbmZpZ3VyZV0KCVBhdGNoZWQgYXV0b2NvbmYgdG8gYXR0ZW1wdCB0byBjb3JyZWN0bHkgZGV0ZWN0IC1sbnNsIGFuZAoJLWxzb2NrZXQuIFBsZWFzZSBjaGVjayB0aGlzIG91dC4KCQoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGRlZCBzdXBwb3J0IGZvciBXaW4zMiBCTV8qIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUF2b2lkIHNlbmRpbmcgZXh0cmEgV01fTUVOVVNFTEVDVCBtZXNzYWdlcy4gVGhpcyBhdm9pZHMgY3Jhc2hlcwoJd2l0aCBFeGNlbC4KCgkqIFttZW1vcnkuaGVhcC5jXSBbaW5jbHVkZS9oZWFwLmhdCglBZGRlZCBzdXBwb3J0IGZvciBTRUdQVFJzIGluIFdpbjMyIGhlYXBzLiBBZGRlZCBhIGZldyBtYWNyb3MgdG8KIAltYWtlIHVzaW5nIFNFR1BUUnMgZWFzaWVyLiBUaGV5IGFyZSBhIGJpdCBzbG93ZXIgdGhhbiBNQUtFX1NFR1BUUiwKIAlidXQgdGhleSB3b3JrIHdpdGggV2luMzIuCgoJKiBbbWVtb3J5L2F0b20uY10KCUltcGxlbWVudGVkIFdpbjMyIGF0b20gZnVuY3Rpb25zLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgTG9jYWxSZUFsbG9jKCkgY2hhbmdlcyB0byBhdm9pZCBjb3B5aW5nIHRoZSB3aG9sZSBibG9jayB0d2ljZS4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVVzZSAvZGV2L3plcm8gaW5zdGVhZCBvZiBNQVBfQU5PTiBmb3IgVmlydHVhbEFsbG9jKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJUHJvcGVybHkgaW1wbGVtZW50ZWQgdGhlIFdpbjMyIGNsYXNzIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gKE5ldyBmaWxlKQoJTmV3IGZpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UgdHJhbnNsYXRpb24gYmV0d2VlbiBXaW4xNiBhbmQgV2luMzIuCgpNb24gTWF5IDEzIDE4OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9tZGkuY10gW3dpbmRvd3MvbWVudS5jXQoJSW1wcm92ZWQgV01fTURJQ1JFQVRFIGFuZCBXTV9NRElDQVNDQURFIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW29iamVjdHMvYml0Ymx0LmNdCglIYW5kbGUgR3JhcGhpY3NFeHBvc2UgZXZlbnQgZm9yIEJpdEJsdCBmcm9tIHNjcmVlbiB0byBzY3JlZW4uCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdW5jaCBvZiBmaXhlcyBmb3IgcHJvYmxlbXMgd2l0aCAtbWFuYWdlZC4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KCUNoYW5nZWQgY29uZGl0aW9ucyBmb3IgV01fU0laRSwgV01fTU9WRSwgYW5kIFdNX0dFVE1JTk1BWElORk8KCWluIENyZWF0ZVdpbmRvdy4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9xdWV1ZS5jXSBbbWlzYy91c2VyLmNdCglEbyBub3Qgc2VuZCBXTV9QQVJFTlROT1RJRlkgd2hlbiBpbiBBcHBFeGl0IGFuZCBjYWxsIFdIX1NIRUxMCglvbiB3aW5kb3cgY3JlYXRpb24vZGVzdHJ1Y3Rpb24uCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglDcnVkZSBSZWFsaXplUGFsZXR0ZSgpLiBBdCBsZWFzdCBzb21ldGhpbmcgaXMgdmlzaWJsZSBpbiBMdmlld1Byby4KClN1biBNYXkgMTIgMDI6MDU6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFJlY3RhbmdsZSAodXNlIHdpbjE2IHZlcnNpb24pLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2V0V2luZG93c0RpcmVjdG9yeUEgKHVzZSB3aW4xNiBHZXRXaW5kb3dzRGlyZWN0b3J5KS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBHZXRTdWJNZW51LCBNb3ZlV2luZG93LCBTZXRTY3JvbGxQb3MsIFNldFNjcm9sbFJhbmdlICh1c2Ugd2luMTYKCXZlcnNpb25zKS4KCUFkZGVkIFNldFdpbmRvd3NIb29rRXhBIChlbXB0eSBzdHViIGZvciBub3cpLgoKCSogW2luY2x1ZGUvaGFuZGxlMzIuaF0KCUNoYW5nZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiB0byAjaW5jbHVkZSA8c3RkbGliLmg+IHRvIHByZXZlbnQKCWhhdGUgbWVzc2FnZSBmcm9tIEZyZWVCU0QgY29tcGlsZXIuCgoJKiBbd2luMzIvbmV3Zm5zLmNdCglBZGRlZCBuZXcgZnVuY3Rpb24gU2V0V2luZG93c0hvb2tFeDMyQSAoZW1wdHkgc3R1YiBmb3Igbm93KS4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVJlbW92ZWQgcmVkdW5kYW50IGRlYnVnZ2luZyBwcmludGYgc3RhdGVtZW50LgoKU3VuIE1heSAxMiAwMToyNDo1NyAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglBdm9pZCBjcmVhdGluZyBhZGphY2VudCBmcmVlIGJsb2Nrcy4KCUZyZWUgdGhlIGJsb2NrIGluIExvY2FsUmVBbGxvYygpIGJlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KCUZpeGVkIExvY2FsUmVBbGxvYygpIGZvciBkaXNjYXJkZWQgYmxvY2tzLgoJCkZyaSBNYXkgMTAgMjM6MDU6MTIgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZpLnJjXQoJQ2hvb3NlRm9udCBhbmQgQ2hvb3NlQ29sb3IgZGlhbG9ncyB1cGRhdGVkLgoKRnJpIE1heSAxMCAxNzoxOTozMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jLGlmMTYzMi9rZXJuZWwuc3BlY10KCUdldEN1cnJlbnREaXJlY3RvcnkoKSxTZXRDdXJyZW50RGlyZWN0b3J5KCkgaW1wbGVtZW50ZWQuCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS93aW5yZWcuaF0gW2xvYWRlci9tYWluLmNdCgkgIFttaXNjL21haW4uY10gW21pc2Mvc2hlbGwuY10gW21pc2MvcmVnaXN0cnkuY10KCVJlZ2lzdHJ5IGZpeGVzOgoJLSBsb2FkcyB3aW45NSByZWdpc3RyeSBkYXRhYmFzZXMsCgktIHNhdmUgb25seSB1cGRhdGVkIGtleXMgb24gZGVmYXVsdCwKCS0gbm93IGFkaGVycyB0byB0aGUgbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZCwKCS0gbWlub3IgY2xlYW51cHMuCgpUdWUgTWF5IDcgMjI6MzY6MTMgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb21iby5jXQoJQWRkZWQgV01fQ09NTUFORC1oYW5kbGluZyBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbiBFRElUIGFuZCBDT01CT0xCT1gKICAgICAgICBhbmQgc3luY2hyb25pemVkIG1pbmUgd2l0aCBHcmVnIEtyZWlkZXIncyB3b3Jrcy4KCgkqIFtjb21tZGxnLmNdCglCdWdmaXggaW4gQ2hvb3NlRm9udDogZm9udCBzaXplIGhhbmRsaW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWF5ICA2IDEyOjU2OjI2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW0RFVkVMT1BFUlMtSElOVFNdCglBZGRlZCBwYXJhZ3JhcGggb24gbmFtaW5nIGNvbnZlbnRpb25zIGZvciBXaW4xNi9XaW4zMi9XaW5lbGliLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNyZWF0ZSBhIGRlZmF1bHQgc3lzdGVtIG1lbnUgdGhhdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHdpbmRvd3MKCWluc3RlYWQgb2YgbWFraW5nIGEgY29weSBldmVyeSB0aW1lLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkIFdJTkVMSUJfTkFNRSBhbmQgREVDTF9XSU5FTElCX1RZUEUgbWFjcm9zLgoJQWRkZWQgeHgxNiBhbmQgeHgzMiBkZWZpbml0aW9ucyBmb3IgbW9zdCB0eXBlcy4gR2VuZXJhbCBjbGVhbi11cC4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvbG9jYWwuY10gWyovKl0KCVJlbmFtZWQgR2xvYmFsIGFuZCBMb2NhbCBoZWFwIGZ1bmN0aW9ucyB0byB4eHgxNi4gQWRkZWQgYWxsIHh4eDMyCgl2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglNYXNrIG91dCBsb3dlciBiaXRzIG9mIHNlbGVjdG9yIGluIEZyZWVTZWxlY3RvcigpLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgd3ZzcHJpbnRmKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIG1ha2UgV2luMzIgc3VwcG9ydCBlYXNpZXIuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX0lOSVRNRU5VUE9QVVAgZm9yIHN5c3RlbSBtZW51IHRvIGdyYXkgb3V0CglpbnZhbGlkIG9wdGlvbnMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXg6IHRoZSBXSU5ET1NQT1Mgc3RydWN0dXJlIHBvaW50ZXIgaW4gV01fTkNDQUxDU0laRSBtdXN0IGJlCglhIFNFR1BUUi4KClN1biBNYXkgIDUgMDM6NTE6MjYgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW21lbW9yeS9sb2NhbC5jXQoJSW1wbGVtZW50YXRpb24gb2YgbW92ZWFibGUgYW5kIChydWRpbWVudGFyeSkgc3VwcG9ydCBmb3IKIAlkaXNjYXJkYWJsZSBsb2NhbCBtZW1vcnksIHBsdXMgc2V2ZXJhbCBidWcgZml4ZXMuCgpTYXQgTWF5ICA0IDE4OjMzOjM1IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy93aW4uY10gW2lmMTYzMi91c2VyLnNwZWNdIAoJRmluZFdpbmRvd0V4KCkgaW1wbGVtZW50ZWQgKHNvbWVvbmUgcmVwb3J0ZWQgaXQgd2FzIG1pc3NpbmcKCWZvciBGcmFtZU1ha2VyIDQuMSkuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW4zMi9tZW1vcnkuY10KCSAgW3dpbjMyL3Jlc291cmNlLmNdCglNaXNjIHNtYWxsIHN0dWJzL3NtYWxsIGZ1bmN0aW9ucyB3aGljaCBicmluZyB3aW45NSBiaW5hcmllcwoJZnVydGhlciBkb3duIHRoZSByb2FkLiAoSXNCYWRDb2RlUHRyLCBMb2NhbFJlQWxsb2MsR2V0Q3Vyc29yUG9zKQoJU21hbGwgZml4IGluIFdJTjMyX0xvYWRBY2NlbGVyYXRvcnNBLgoKRnJpIE1heSAgMyAxOTo0MzoxMiAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEuTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglDaGFuZ2VkIC8gZml4ZWQgc29tZSB0eXBlcyBhbmQgdHlwZWNhc3RzLgoJRml4ZWQgdGhlIHNjcm9sbGJhciByZXNldCBhZnRlciBXTV9TRVRIQU5ETEUgLyBXTV9TRVRURVhULgoJQWRkZWQgaGVhcCBpbml0aWFsaXphdGlvbiBpbiBXTV9DUkVBVEUuCgpGcmkgTWF5ICAzIDE5OjMwOjAyIDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2xpc3Rib3guY10KCVBhc3MgV01fW0hWXVNDUk9MTCB0byBsaXN0Ym94LCBidXQgbm90IGNvbWJvLgoJRG9uJ3QgdHJ5IHRvIHJlZHJhdyBub24tZXhpc3RhbnQgc2Nyb2xsIGJhcnMgKGNoYW5nZXMgZHdTdHlsZSBmbGFncykuCglDb21ibyBib3ggZ2V0cyBib3JkZXIuCglDb21ibyBib3ggaW5jbHVkZXMgYnV0dG9uIChvdGhlcndpc2UgYnV0dG9uIHdvbid0IHRyaWdnZXIgZHJvcGRvd24pLgoJUHJvcGVyIGJvcmRlciBhcm91bmQgUmVjdEJ1dHRvbi4KCUNoZWNrIHNpemUgY29uc2lzdGFuY3kgb2YgY29tYm8sIGxpc3Rib3gsIGFuZCBidXR0b24gYWZ0ZXIgcmVzaXppbmcgCglvciBiZWZvcmUgcGFpbnRpbmcuICBUaGVzZSByb3V0aW5lcyBzdGlsbCBhcmVuJ3QgY29tcGxldGVseSBjb3JyZWN0LgoJTG9jYWxpemUgc2l6ZSBjaGVja3MgaW4gc2VwYXJhdGUgcm91dGluZXMuCglMaXN0Ym94ZXMgYXJlIHdoaXRlLgoKVGh1IE1heSAgMiAxOToyMToyMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdW2luY2x1ZGUvY29tbWRsZy5oXVtpbmNsdWRlL2NvbW1kbGcuY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdW3Jlc291cmNlcy9zeXNyZXNfRW4ucmNdCglJbnRyb2R1Y2VkIENob29zZUZvbnQgZGlhbG9nLCBidXQgbmVlZGVkIHNvbWUgcGF0Y2hlcyBpbiAKCWhhbmRsaW5nIG9mIGNvbWJvYm94ZXMgd2l0aCBlZGl0IGNvbnRyb2xzLgoKVHVlIEFwciAzMCAwMDozMzoyNyAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3Byb2dyYW1zL3dpbmhlbHAvKl0KCUFkZGVkIGEgaGVscCB2aWV3ZXIgYW5kIGEgc2ltcGxlIGAuaGxwJyB0byBgLnNnbWwnIGNvbnZlcnRlci4KCk1vbiBBcHIgMjkgMTQ6MTc6NTcgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfKi5yY10gW21pc2Mvc2hlbGwuY10KCU1vZGlmaWVkIHNpemUgb2YgIkFib3V0IiBkaWFsb2cgYm94ZXMuCgpTYXQgQXByIDI3IDE4OjEwOjExIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtsb2FkZXIvYnVpbHRpbi5jXQoJY3J0ZGxsLnNwZWMsIG50ZGxsLnNwZWMsIHdzb2NrMzIuc3BlYzogbmV3IGZpbGVzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4IGVycm9yIG1lc3NhZ2UgaWYgaW1wb3J0IGJ5IG9yZGluYWwgZmFpbGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByIDI4IDE0OjMyOjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW01ha2VmaWxlLmluXQoJU3ViZGlyIG1lbW9yeSBpcyBub3cgYWxzbyBjb21waWxlZCBmb3IgV2luZWxpYiwgaW4gb3JkZXIgdG8gZ2V0Cgl0aGUgV2luMzIgaGVhcCBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXQoJUmVuYW1lZCB3aW5wcm9jcyBhbmQgd2lucHJvY3MzMiB0byB3cHJvY3MgYW5kIHdwcm9jczMyIHRvIGF2b2lkCglETEwgbmFtZXMgPiA4IGNoYXJhY3RlcnMuCgoJKiBbbG9hZGVyL2J1aWx0aW4uY10gKE5ldyBmaWxlKQoJR3JvdXBlZCBhbGwgYnVpbHQtaW4gRExMcyBjb2RlIGluIGEgc2luZ2xlIGZpbGUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJVXNlIHRoZSBXaW4zMiBoZWFwIGNvZGUgaW5zdGVhZCBvZiBtYWxsb2MoKSB0byBhbGxvY2F0ZSBsaW5lYXIKCW1lbW9yeS4gVGhpcyB3aWxsIGhlbHAgdGVzdCB0aGUgaGVhcCBjb2RlLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgRnJlZVNlbGVjdG9yKCkgdG8gY2xlYXIgRFMgYW5kIEVTIGNvcnJlY3RseSBmb3IgaHVnZSBibG9ja3MuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9yZWxheS5jXQoJUmVtb3ZlZCAnaWQnIGRpcmVjdGl2ZSBpbiBzcGVjIGZpbGVzLiBGb3IgcmVsYXkgZGVidWdnaW5nLCB0aGUgRExMCgllbnRyeSBwb2ludCBpcyBub3cgY29tcHV0ZWQgZnJvbSB0aGUgQ1M6SVAgZW50cnkgcG9pbnQgYWRkcmVzcy4KCUFkZGVkICdoZWFwJyBkaXJlY3RpdmUgdG8gc3BlY2lmaXkgYSBsb2NhbCBoZWFwIGZvciB0aGUgRExMLiBVU0VSCglhbmQgR0RJIGhlYXAgYXJlIG5vdyBjcmVhdGVkIHRoaXMgd2F5LgoKCSogW3dpbmRvd3MvY2xhc3MuY10gW2luY2x1ZGUvY2xhc3MuaF0KCUNoYW5nZWQgdGhlIGNsYXNzIHN0cnVjdHVyZSB0byB1c2UgcG9pbnRlcnMgaW5zdGVhZCBvZiBoYW5kbGVzLgoJQ2hhbmdlZCBHZXQvU2V0Q2xhc3NXb3JkL0xvbmcgdG8gdXNlIGEgc3dpdGNoIHN0YXRlbWVudDsgdGhpcwoJYWxsb3dzIGNoYW5naW5nIHRoZSBsYXlvdXQgb2YgdGhlIENMQVNTIHN0cnVjdHVyZS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW4uaF0KCVVzZSBhIENMQVNTICogaW5zdGVhZCBvZiBhIGhhbmRsZSBmb3IgdGhlIHdpbmRvdyBjbGFzcy4KClNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW21lbW9yeS9nbG9iYWwuY10KCSAgW3dpbjMyL21lbW9yeS5jXSBbd2luMzIvcHJvY2Vzcy5jXQoJR2V0UHJvY2Vzc0FmZmluaXR5TWFzayxHbG9iYWxMb2NrLElzQmFkUmVhZFB0cixJc0JhZFdyaXRlUHRyLAoJTG9jYWxMb2NrLFNldFRocmVhZEFmZmluaXR5TWFzazogbmV3IHJlbGF5cy4KCgkqIFt3aW4zMi9jdXJzb3JpY29uMzIuY10KCVJldHVybiBzYW1lIGhhbmRsZSBpZiBhIGN1cnNvciBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXMuCgpTYXQgQXByIDI3IDE1OjEzOjM3IDE5OTYgIEJhbmcgSnVuIFlvdW5nIDxiYW5nanlAbm93bnVyaS5ub3djb20uY28ua3I+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBLb3JlYW4gW0tvXSBsYW5ndWFnZS4KCkZyaSBBcHIgMjYgMDA6NDk6MDUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvZGMuY10gW29iamVjdHMvZm9udC5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIFNhdmVEQygpL1Jlc3RvcmVEQygpIGFuZCBmb250IGNhY2hlICd1c2VkJyBjb3VudC4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdCglGaXhlZCBicm9rZW4gU2V0VGV4dEFsaWduKCkgb24gbWV0YWZpbGVzLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCURlbGV0ZSBvYmplY3RzIGluIGhhbmRsZSB0YWJsZSBhdCBlbmQgb2YgUGxheU1ldGFGaWxlKCkuCgpXZWQgQXByIDI0IDE5OjIxOjAxICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvdmVyLnNwZWNdIFttaXNjL3Zlci5jXSBbaW5jbHVkZS92ZXIuaF0gKE5ldyBmaWxlcykKCVZFUi5ETEwgKHBhcnRpYWxseSkgaW1wbGVtZW50ZWQgKFZlckZpbmRGaWxlLFZlckluc3RhbGxGaWxlKQoJW0lmIGl0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB1c2UgLWRsbCAtdmVyIGFuZCByZXBvcnQgaXQgdG8gbWVdCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2lmMTYzMi9zaGVsbDMyLnNwZWNdIFttaXNjL29sZTJubHMuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbd2luZG93cy9ncmFwaGljcy5jXQoJU2ltcGxlIHdpbjMyIGZ1bmN0aW9ucywgd2hlcmUgd2UgY2FuIGp1c3QgdXNlIHRoZSB3aW4xNiBjb3VudGVycGFydC4KCU1pc2MuIHN0dWJzLiAKCgkqIFttaXNjL2xzdHIuY10KCVNvbWVvbmUgcmVwb3J0ZWQgYSBfbHN0cmxlbihOVUxMKS4gTlVMTCBpcyBhIHZhbGlkIGFyZ3VtZW50LiBGaXhlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIGFsbG9jbGVucyB3ZXJlIG9mZiBieSAxLCBvbmUgZG91YmxlIGZjbG9zZSgpIGZpeGVkLgoJUmVxdWVzdGluZyB2YWx1ZSAwIG9mIGEga2V5IHdpdGggbm8gdmFsdWVzIHJldHVybnMgYW4gZXJyb3IgCgkoc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gYSBtYWRlIHVwIHZhbHVlIE5VTEw/IHdoYXQgZG9lcyB3aW4zLjE/KQoKVHVlIEFwciAyMyAxNzowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvc2hlbGwuY10KCUltcGxlbWVudGVkIEZpbmRFbnZpcm9ubWVudFN0cmluZygpLCBEb0Vudmlyb25tZW50U3Vic3QoKSwKCUV4dHJhY3RJY29uKCksIEludGVybmFsRXh0cmFjdEljb24oKSBhbmQgRXh0cmFjdEFzc29jaWF0ZWRJY29uKCkuCgoJKiBbbWlzYy91c2VyLmNdCglEbyBleHRlbnNpdmUgY2xlYW51cCBvbiBhcHBsaWNhdGlvbiBleGl0LgoKCSogW3dpbmRvd3MvaG9vay5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIG1pc2NlbGxhbmVvdXMgY2xlYW51cCByb3V0aW5lcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglNb3JlIGVmZmljaWVudCBwb3B1cCBtZW51IHdpbmRvdyBoYW5kbGluZy4KCk1vbiBBcHIgMjIgMjE6MzU6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bb2JqZWN0cy9vZW1iaXRtYXAuY11baW5jbHVkZS9iaXRtYXBzL29ibV90cnR5cGVdCglBZGRlZCAiVFQtYml0bWFwIiBmb3IgbGF0ZXIgdXNhZ2UgaW4gYSBDaG9vc2VGb250KCkgb3duZXJkcmF3IGNvbWJvYm94LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXByIDIwIDIzOjIzOjE2IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCU1hZGUgY2hhbmdlcyBmb3IgQ2hvb3NlX0NvbG9yIGRpYWxvZy4KClNhdCBBcHIgMjAgMTU6NDM6NDkgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCB0ZXN0IHRoYXQgZ290IG1pc2NvbXBpbGVkIGJ5IHNvbWUgb2xkIGdjYyB2ZXJzaW9ucy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIHRoZSBsYXlvdXQgb2YgaGFuZGxlIHRhYmxlcyBzbyB0aGF0IG1vdmVhYmxlIGhhbmRsZSBlbnRyaWVzCgljYW4gYmUgZnJlZWQgb24gTG9jYWxGcmVlKCkuCglJbXBsZW1lbnRlZCBMb2NhbEZsYWdzKCksIExvY2FsQ291bnRGcmVlKCksIExvY2FsSGFuZGxlRGVsdGEoKSBhbmQKCUdldEhlYXBTcGFjZXMoKS4KCgkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKRnJpIEFwciAxOSAyMDowNzoyMCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJRml4ZWQgRU1fU0VUSEFORExFIC8gV01fQ1JFQVRFIC8gRURJVF9NYWtlRmlyKCkgYnVmZmVyIGFsbG9jYXRpb24uCglGaXhlZCBFU19OT0hJREVTRUwgLyBXTV9NT1VTRU1PVkUgLyBXTV9MQlVUVE9ORE9XTiBpbXBsZW1lbnRhdGlvbi4KCUFkZGVkIFdNX0VOQUJMRSBpbXBsZW1lbnRhdGlvbiAoZ3JheSB0ZXh0KS4KCUZpeGVkIGJ1ZmZlciA+IDMyNzY3IGJ1Zy4KCUZpeGVkIGFyZ3VtZW50IHR5cGVzIC8gdHlwZWNhc3RpbmcuCglGYXN0ZXIgc2VsZWN0aW9uIChyZSlkcmF3aW5nLgoKVGh1IEFwciAxOCAxMzozODoyNiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdIFtpbmNsdWRlL3dpbnJlZy5oXQoJQ2hhbmdlZCBzYXZlZmlsZSBmb3JtYXQgYWdhaW4gdG8gaHVtYW4gcmVhZGFibGUvZWRpdGFibGUKCShVTklDT0RFIGNoYXJzID4weGZmIGFyZSBzcGVjaWZpZWQgYnkgXHVYWFhYLCBkYXRhIGJ5IFhYKS4KCUhhcyBub3cgZ2xvYmFsIC8gbG9jYWwgcmVnaXN0cnkgZGF0YWJhc2VzIChpbmNsdWRpbmcgbWVyZ2luZyB0aGVtKS4KCUhLRVlfQ0xBU1NFU19ST09UID09IEhLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENsYXNzZXMuCglIS0VZX0NVUlJFTlRfVVNFUiA9PSBIS0VZX1VTRVJTXFw8bG9naW5uYW1lPi4KCgkqIFttaXNjL2NvbW0uY10KCUFsbG93ICIgIiBhcyBDT014OiAuLi4gc3BlYyBkZWxpbWl0ZXIgdG9vLgoJKEFPTC1DRCBzZXR1cC5leGUgdHJpZXMgdG8gaW5pdGlhbGl6ZSBtb2RlbTIgYXMgIjk2MDAseCx4IHgiIChjYW4ndCAKCXJlbWVtYmVyIHRoZSB4KS4KClRodSBBcHIgMTggMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9tZGkuY10KCU1pc2NlbGxhbmVvdXMgY2hhbmdlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAKCVVzZSBCaXRCbHQgd2hlbmV2ZXIgcG9zc2libGUgaW4gU2V0V2luZG93UG9zLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIGhyZ25VcGRhdGUgYmVpbmcgMS4KCldlZCBBcHIgMTcgMTk6MTk6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCU1hbnkgYnVnZml4ZXMgaW4gQ2hvb3NlQ29sb3IgZGlhbG9nLgoJQWRkZWQgYSB1c2VyIGRlZmluZWQgZGlhbG9nIHRpdGxlIGluIEZpbGVPcGVuLS9GaWxlU2F2ZS0gZGlhbG9nLgoKCSogW21pc2MvY29tbWRsZy5jXVtpbmNsdWRlL2NvbW1kbGcuaF0KCSAgW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJSW50cm9kdWNlZCBkaWFsb2ctLCBjYWxsYmFjay0gYW5kIGVudW0tIHN0dWIgZnVuY3Rpb25zCglmb3IgQ2hvb3NlRm9udCBkaWFsb2cKCldlZCBBcHIgMTcgMTk6MDg6MzggMTk5NiAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbaWYxNjMyL2dkaS5zcGVjXQoJSW1wbGVtZW50ZWQgRW51bU1ldGFGaWxlIGFuZCBDb3B5TWV0YUZpbGUuIFJlbW92ZWQgTUVUQUZJTEUgc3RydWN0LgoJSW1wbGVtZW50ZWQgTUVUQV9TVFJFVENIRElCIGluIFBsYXlNZXRhRmlsZVJlY29yZCwgc2V2ZXJhbCBidWcgCglmaXhlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRG9uJ3QgdHJ5IHRvIGhpZGUgdGhlIHdpbmRvdyBpZiBpdCdzIGFscmVhZHkgaGlkZGVuLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTGV0IE1TR19QZWVrSGFyZHdhcmVNc2cgZmlsbCB0aGUgbWVzc2FnZSBxdWV1ZSB3aXRoIGV2ZW50cyBpZgoJaXQncyBlbXB0eS4KCldlZCBBcHIgMTcgMTc6NTQ6MDQgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglVcGRhdGVkIHRvIHN1cHBvcnQgdGhlIG5ldyBDSE9PU0VfQ09MT1JfRElBTE9HLgoKVHVlIEFwciAxNiAxMTo1MDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbaWYxNjMyL01ha2VmaWxlXSBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzEvdzMyc3lzLnNwZWNdCgkgIFtpbmNsdWRlL3czMnN5cy5oXSBbaW5jbHVkZS9kbGxzLmhdCgkgIFttaXNjL01ha2VmaWxlXSBbbWlzYy93MzJzeXMuY10KCVczMlNZUy5ETEwgcGFydGlhbGx5IGltcGxlbWVudGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByIDE0IDEyOjUxOjI3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWFkZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBjb2RlIGFsd2F5cyB1c2UgdGhlIGNvcnJlY3QgV2luZG93cwoJbGF5b3V0IGZvciBXaW5lbGliIG9uIG90aGVyIENQVXMuCgoJKiBbaW5jbHVkZS9tb2R1bGUuaF0gW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHNlbGYgaGFuZGxlIGluIE5FX01PRFVMRSBzdHJ1Y3R1cmUsIHNvIHdlIGNhbiB1c2UgYSBwb2ludGVyCglpbnN0ZWFkIG9mIGEgaGFuZGxlLgoJQWRkZWQgZnVuY3Rpb24gTU9EVUxFX0dldFB0cigpIHRvIHZhbGlkYXRlIGEgSE1PRFVMRS4KCgkqIFttZW1vcnkvaGVhcC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgaGVhcCBtYW5hZ2VtZW50LgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJRml4IHNlbGVjdG9yIGxpbWl0IGZvciBodWdlIGJsb2Nrcy4KClNhdCBBcHIgMTMgMDA6MTk6MTIgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUZpeGVkIG1lbWNweSBidWcgdG8gYWxsb3cgbWVtb3J5IGJhc2VkIG1ldGFmaWxlcyB0byB3b3JrLgoKRnJpIEFwciAxMiAxOToyNTo0MSAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJQ29tcGxldGUgcmV3cml0ZS4gIEV2ZXJ5dGhpbmcgY2hhbmdlZDogbmV3IGZlYXR1cmVzLCBuZXcgYnVncy4KCU1haW4gYWRkaXRpb246IFdvcmRXcmFwLgoKRnJpIEFwciAxMiAyMDoyOTo1NSAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBkY3MuZWQuYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCUZpeGVkIGEgZmV3IG1pc3Rha2VzIGluIHRoZSBmaWxlIGFuZCByZXNpemVkIHNvbWUgb2YgdGhlIGNvbnRyb2xzLgoKRnJpIEFwciAxMiAwOTo1NToxMyAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgYnJva2VuICNpZiBkZWZpbmVkIHRoYXQgc3RvcHBlZCB1bml4d2FyZSBjb21waWxpbmcuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KICAgICAgICBBZGRlZCBtaXNzaW5nIHJldHVybiB0byBlbmQgb2YgRmluZFJlc291cmNlMzIuCgpUaHUgQXByIDExIDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCUZpeGVkIEdldEtleVN0YXRlIGZvciBtb3VzZSBidXR0b25zLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJV01fTU9VU0VBQ1RJVkFURSB3YXNuJ3Qgc2VudCBpbiBzb21lIGNhc2VzLgoKV2VkIEFwciAxMCAxODo1OTo1MyAxOTk2ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU1hdGNoIHNsaWdodGx5IGJpZ2dlciBmb250IGlmIGhlaWdodCBuZWdhdGl2ZS4KCk1vbiBBcHIgIDggMTM6NDY6MTUgMTk5NiAgRGVhbm8gQ2FsdmVyIDxkZWFub0ByYXR0aWUuZGVtb24uY28udWs+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hhbmdlZCByZWFkJ3MgdG8gRklMRV9yZWFkJ3MgaW4gbW1zeXN0ZW0gdG8gZml4IG1taW8gYnVnLgoKU3VuIEFwciAgNyAyMTo0MDoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXSBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdCglJbnRyb2R1Y2VkIENvbG9yRGxnUHJvYygpIGZvciBDaG9vc2VDb2xvcigpIGFuZCByZXBsYWNlZCBmaXR0aW5nCglFbi0sRGUtIHJlc291cmNlcy4gCglBcyB3cml0dGVuIGluIFRPRE86IHNvbWUgbmF0aW9uYWwgbGFuZ3VhZ2Ugc3VwcG9ydCBpcyBuZWVkZWQgaGVyZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIEFwciAgNSAxNToyMjo1NSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3N0YXRpYy5jXQoJQ2hhbmdlcyB0byB1c2UgV05EICogd2hlcmV2ZXIgcG9zc2libGUuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJQWRkZWQgJ2luZm8gbW9kdWxlJyBhbmQgJ3dhbGsgbW9kdWxlJyBjb21tYW5kcy4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvcmVsYXkuY10gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBhc3NlbWJseSBjb2RlIGdlbmVyYXRpb24gdG8gY2FsbCBmcm9tIFdpbmUgaW50byAzMi1iaXQgY29kZS4KCUNoYW5nZWQgYWxsICdjYWxsMzInIHJlZmVyZW5jZXMgaW4gJ2NhbGxmcm9tMTYnIHRvIGF2b2lkIGNvbmZ1c2lvbgoJd2l0aCBXaW4zMiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBwcm90b3R5cGVzIGZvciAzMi1iaXQgY2FsbGJhY2tzLgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9yZWxheTMyLmNdIFt0b29scy9idWlsZC5jXQoJVW5pZmllZCAxNi0gYW5kIDMyLWJpdCBtb2R1bGVzLiBUaGUgZmFrZSBtb2R1bGUgZm9yIDMyLWJpdCBETExzIGlzCglub3cgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBwcm9ncmFtLgoKCSogW2luY2x1ZGUvbW9kdWxlLmhdCglBZGRlZCBleHRyYSBpbmZvIHRvIE5FX01PRFVMRSBmb3IgV2luMzIgbW9kdWxlcyB0byBwb2ludCB0byB0aGUgUEUKCW1vZHVsZSBkYXRhLgoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF0gW2xvYWRlci9wZV9pbWFnZS5jXSBbd2luMzIvcmVzb3VyY2UuY10KCVJlbW92ZWQgdGhlIHdpbmVfZmlsZXMgbGlzdC4gVGhlIFBFIGRhdGEgZm9yIGEgbW9kdWxlIGNhbiBub3cgYmUKCWFjY2Vzc2VkIHdpdGggdGhlIE5FX1dJTjMyX01PRFVMRSBtYWNyby4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2luc3RyLmNdCglEb24ndCBzdGFydCB0aGUgQklPUyB0aW1lciBhdCBzdGFydHVwLCBidXQgb25seSBhZnRlciBhbiBhY2Nlc3MgdG8KCXRoZSAweDQwIHNlZ21lbnQuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglDaGFuZ2VkIExPQ0FMX0xvY2soKSB0byByZXR1cm4gYSAzMi1iaXQgcG9pbnRlci4KCgkqIFttaXNjL21haW4uY10gW2luY2x1ZGUvZGxscy5oXQoJU29tZSBidWlsdC1pbiBETExzIChsaWtlIEtFUk5FTCkgY2FuIG5vIGxvbmdlciBiZSBkaXNhYmxlZCBmcm9tCiAJdGhlIGNvbW1hbmQtbGluZS4KCQpUaHUgQXByICA0IDE5OjU0OjM5IDE5OTYgIEtlaXRoIFJleW5vbGRzIDxrZWl0aHJAc2NvLkNPTT4KCgkqIFsqLypdCglBIGxvdCBvZiBzbWFsbCBjaGFuZ2VzIHRvIHN1cHBvcnQgU0NPIE9wZW5TZXJ2ZXIgNS4KClRodSBBcHIgIDQgMTU6Mzg6MTMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgR2V0S2V5U3RhdGUoKSBjYWxsIHRvIHVzZSAweDgwMDAgY29udmVudGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIHVuZG9jdW1lbnRlZCBtZXNzYWdlcyBFTV9TQ1JPTEwgYW5kIEVNX0dFVFRIVU1CLgoKVGh1IEFwciAgNCAwOTo1Mjo1MiAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpZjE2MzIvZXhjZXB0LlNdCglNb2RpZmllZCBjb2RlIHRvIGFzc2VtYmxlIG9uIHVuaXh3YXJlLgoKV2VkIEFwciAgMyAwOTozODoyNiAxOTk2ICBKdWVyZ2VuIE1hcnF1YXJkdCA8bWFycXVAbHVuYXIuYWR2YW50ZXN0LmRlPgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50YXRpb24gb2YgYSBzZWNvbmQgZm9udCBjYWNoZSB3aGljaCB3aWxsIGJlIHVwZGF0ZWQKCWR5bmFtaWNhbGx5LgoKTW9uIEFwciAgMSAxNjo0Nzo0MCAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0N6LnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19EYS5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0VvLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10gW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX05vLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglVcGRhdGVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIHRvIHdvcmsgbGlrZSB0aGUgRW5nbGlzaCB2ZXJzaW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDMxIDEzOjU0OjQ2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VkIEJ1aWxkU3BlYzMyRmlsZXMoKSB0byBnZW5lcmF0ZSBhc3NlbWJseSBpbnN0ZWFkIG9mIEMgY29kZS4KCVVuaWZpZWQgLXNwZWMxNiBhbmQgLXNwZWMzMiBvcHRpb25zOyBETEwgdHlwZSBpcyBub3cgZGV0ZXJtaW5lZCBieQoJdGhlICd0eXBlJyBkZWNsYXJhdGlvbiBpbiB0aGUgLnNwZWMgZmlsZS4KCU5ldyAtc3RkY2FsbCBvcHRpb24gdG8gYnVpbGQgYWxsIHN0ZGNhbGwgYXNzZW1ibHkgcmVsYXlzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL3JlbGF5MzIuY10gW2luY2x1ZGUvZGxscy5oXQoJU3RhcnRlZCB0byB1bmlmeSAxNi0gYW5kIDMyLWJpdCBidWlsdGluIERMTHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgTU9EVUxFX0dldFduZFByb2NFbnRyeTMyKCkgdG8gbWlycm9yIE1PRFVMRV9HZXRXbmRQcm9jRW50cnkxNigpLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXSBbbG9hZGVyL3Jlc291cmNlLmNdCglBbGwgbW9kdWxlcyBub3cgaGF2ZSBhIE5FIHNpZ25hdHVyZSwgYW5kIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5Cgl0aGUgTkVfRkZMQUdTX1dJTjMyIGZsYWcuCgoJKiBbd2luZG93cy9hbGlhcy5jXQoJQWxpYXNlcyBmb3IgYnVpbHQtaW4gd2luZG93IHByb2NlZHVyZXMgYXJlIG5vdyBhbGwgY3JlYXRlZCBhdAoJc3RhcnR1cCBpbiBBTElBU19Jbml0KCkuCgpGcmkgTWFyIDI5IDE0OjU2OjM5IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUxpbWl0IHJlY3RhbmdsZSB0byBjbGVhciB0byBzaXplIG9mIGl0ZW0gd2hlbiBwYWludGluZyBjb21ibywgbm90CiAJZGVmYXVsdC4gIE9ubHkgZHJhdyBpdGVtcyBpbiBsaXN0IHdoZW4gdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZW0uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJR2V0IHRoZSBtZWFzdXJlIG9mIGV2ZXJ5IGl0ZW0gdGhhdCdzIGFkZGVkIGFuZCBzdG9yZSBpbiB0aGUgaXRlbSdzCiAJZGF0YSBzdHJ1Y3R1cmUuICBTY3JvbGwgbGlzdGJveCBpZiBtb3VzZSBuZWFyIGVkZ2Ugb2YgYm94LiAgT25seQogCWRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tLgoKRnJpIE1hciAyOSAxMjowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvbWRpLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvbWVudS5jXSAKCVZhcmlvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIGtleWJvYXJkIGhhbmRsaW5nLiAKCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW21pc2Mva2V5Ym9hcmQuY10KCVByb3BlciBrZXlib2FyZCBtZXNzYWdlIG9yZGVyaW5nLCB3b3JraW5nIEdldEtleVN0YXRlKCkgKGZpbmFsbHkhKSwgCglpbXByb3ZlbWVudHMgaW4gVG9Bc2NpaSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNtYWxsIGltcHJvdmVtZW50cyBpbiBXSU5fRmluZFdpblRvUmVwYWludC4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVB1dCB1cGRhdGUgcmVnaW9uIGluIFdNX05DUEFJTlQgd1BhcmFtLgoKCSogW2xvYWRlci90YXNrLmNdCglLaWxsIHRhc2sgdGltZXJzIHdoZW4gdGFzayBpcyBkZWxldGVkLCBzd2l0Y2ggdGltZXJzIHRvIHRoZQoJbmV3IHF1ZXVlIGluIFNldFRhc2tRdWV1ZSgpLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvZG9zbWVtLmNdCglBZGRlZCBTSUdBTFJNIHNpZ25hbCBoYW5kbGVyIHRvIGluY3JlbWVudCBCSU9TIGNsb2NrLiAKCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBDaGlsZFdpbmRvd0Zyb21Qb2ludCgpLCBXTV9QQVJFTlROT1RJRlkgYW5kIGl0cyBoYW5kbGluZyBieQoJTURJIGNsaWVudC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wcm92ZW1lbnRzIGluIGhhbmRsaW5nIG9mIG93bmVkIHBvcHVwcy4gIkZsb2F0aW5nIiB0b29sYm94ZXMgCgl3b3JrIGJldHRlciBub3cuIAoKVGh1IE1hciAyOCAxMjozODoyOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglOZXcgZmlsZSwgcmVnaXN0cnkgcmV3cml0ZSBpbmNsdWRpbmcgd2luMzIgZXh0ZW5zaW9ucwoJLSBVbmljb2RlCgktIG11bHRpcGxlIHZhbHVzIHBlciBrZXkKCS0gZGlmZmVyZW50IGRhdGF0eXBlcyBmb3IgdmFsdWVzCgktIG11bHRpcGxlIHJvb3RrZXlzCgktIHNhdmluZyBhbmQgbG9hZGluZyBpbiBkaWZmZXJlbnQgcmVnaXN0cmllcy4KCgkqIFtpbmNsdWRlL3dpbnJlZy5oXQoJTmV3IGZpbGUsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3RzIGZvciByZWdpc3RyeS4KCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglTb21lIG5ldyBlcnJvciBkZWZpbmVzIGFkZGVkLi4uIHRoZXJlIGFyZSBtb3JlLCBzb21lb25lIHBsZWFzZQogCWNoZWNrIGEgKHJlYWwtKXdpbmRvd3Mgd2luZXJyb3IuaC4KCQoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpZjE2MzIvYWR2YXBpMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCVJlZ2lzdHJ5IHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJU3dpdGNoIGludGVybmFsIFNIRUxMLkRMTCB0byBkZWZhdWx0ICd1c2VkJy4KCgkqIFt3aW4zMi9zdHJpbmczMi5jXSBbaW5jbHVkZS9zdHJpbmczMi5oXQoJU29tZSBuZXcgZnVuY3Rpb25zIGFkZGVkLgoJY2hhciBzaG91bGQgYmUgdW5zaWduZWQgY2hhciB3aGVuIGNvbnZlcnRpbmcgdG8gMTZiaXQgaW50cy4KCgkqIFttaXNjL3NoZWxsLmNdIFtpbmNsdWRlL3NoZWxsLmhdIFt3aW4zMi9hZHZhcGkuY10KCVJlbW92ZWQgb2xkIHJlZ2lzdHJ5IGZ1bmN0aW9ucy4KClR1ZSBNYXIgMjYgMTU6MDE6NDYgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcl9pYmVhbV0KCUZpeGVkIHRoZSBwb3NpdGlvbiBvZiB0aGUgaG90c3BvdC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gVEVYVF9UYWJiZWRUZXh0T3V0KCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJRml4ZWQgdGhlIG9yZGVyIG9mIHRoZSBiaXRzIGluIHRoZSBLZXlTdGF0ZVRhYmxlLgoJMHg4MCBpcyB0aGUgdXAvZG93bi1iaXQuICAweDAxIGlzIHRoZSB0b2dnbGUgYml0LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbd2luZG93cy9tZGkuY10gW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIHRoZSBjYWxscyB0byBHZXRLZXlTdGF0ZSgpLgoKVHVlIE1hciAyNiAwODo0MzoxNSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglVcGRhdGVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIHRvIHdvcmsgbGlrZSB0aGUgRW5nbGlzaCB2ZXJzaW9uLgoKTW9uIE1hciAyNSAxNzozODo1OSAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBkY3MuZWQuYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19pdC5yY10KCUFkZGVkIHN1cHBvcnQgZm9yIEl0YWxpYW4gW0l0XSBsYW5ndWFnZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAyNCAxMzoxMzoxMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpbmNsdWRlL3dpbi5oXSBbd2luZG93cy8qLmNdCglSZXBsYWNlZCBuZXh0LCBwYXJlbnQsIGNoaWxkIGFuZCBvd25lciBoYW5kbGVzIGJ5IHBvaW50ZXJzIGluIFdORAoJc3RydWN0dXJlLiBUaGlzIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBhbmQgc2hvdWxkIGJlCglyZWFzb25hYmx5IHNhZmUgc2luY2UgTWljcm9zb2Z0IGRpZCB0aGUgc2FtZSBpbiBXaW45NS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFsqLypdCglSZWRlZmluZWQgSEFORExFIHRvIGJlIFVJTlQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgZm9yIFdpbmVsaWIuIFRoaXMKCWFsbG93cyByZW1vdmluZyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBjYXN0cyBhbmQgTlBGTVRzLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNyZWF0ZSB0aGUgY2FyZXQgYnJ1c2ggdXBvbiBDcmVhdGVDYXJldCgpOyB1c2UgdGhlIGJpdG1hcAoJZGltZW5zaW9ucyBmb3IgdGhlIGNhcmV0LgoJRml4ZWQgQ0FSRVRfRGlzcGxheUNhcmV0KCkgdG8gdXNlIFBhdEJsdCgpLgoKRnJpIE1hciAyMiAxNjowMDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCU1vcmUgc2FuaXR5IGNoZWNrcywgZml4dXAgc29tZSBlcnJvbmVvdXMgcmV0dXJuIGNvZGVzLgoKCSogW2RvY3VtZW50YXRpb24vd2luc29ja10KCURlc2NyaXB0aW9uIG9mIGhvdyBjb21wYXRpYmxlIHRoZSB3aW5zb2NrIGlzIGN1cnJlbnRseS4KCkZyaSBNYXIgMjIgMTM6MDU6MzQgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtsaWJyYXJ5L3dpbm1haW4uY10KCVNldCBgbHBzekNtZFBhcmFtJyBieSBjb25jYXRlbmF0aW5nIGFyZ3VtZW50cy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglXaW5FeGVjOiBhY2NlcHQgVW5peCBjb21tYW5kcywgdXNlIFdpbmUgZW11bGF0b3IuCgpNb24gTWFyIDE4IDEyOjE2OjI3IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3RocmVhZC5jXVtpbmNsdWRlL2tlcm5lbDMyLmhdCglEZWxldGVDcml0aWNhbFNlY3Rpb24sIEVudGVyQ3JpdGljYWxTZWN0aW9uLAogCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24sIExlYXZlQ3JpdGljYWxTZWN0aW9uLCBUbHNBbGxvYywKIAlUbHNGcmVlLCBUbHNHZXRWYWx1ZSwgVGxzU2V0VmFsdWU6IG5ldyBmdW5jdGlvbnMuCglDUklUSUNBTF9TRUNUSU9OOiBuZXcgc3RydWN0dXJlLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9jb2RlX3BhZ2UuY10KCVdpZGVDaGFyVG9NdWx0aUJ5dGU6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvZmlsZS5jXQoJR2V0RmlsZUF0dHJpYnV0ZXNBOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQoJR2V0RW52aXJvbm1lbnRTdHJpbmdzVywgRnJlZUVudmlyb25tZW50U3RyaW5nc0EsCiAJRnJlZUVudmlyb25tZW50U3RyaW5nc1c6IG5ldyBmdW5jdGlvbnMuCgkKCSogW2lmMTYzMi91c2VyLnNwZWNdW3dpbjMyL2N1cnNvcmljb24zMi5jXVt3aW4zMi9NYWtlZmlsZS5pbl0KCWN1cnNvcmljb24zMi5jOiBuZXcgZmlsZS4KCUxvYWRDdXJzb3JBLCBMb2FkQ3Vyc29yVzogbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gZnJvbSBMb2FkQ3Vyc29yCiAJdG8gV0lOMzJfKi4KCUxvYWRJY29uQSwgTG9hZEljb25XOiBtb2RpZmllZCBpbXBsZW1lbnRhdGlvbiBmcm9tIExvYWRJY29uQTMyCgl0byBXSU4zMl8qLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCXByYWdtYSBwYWNrIGluc2VydGVkLgoJQ1VSU09SSUNPTjMyIHN0cnVjdHVyZXMgYWRkZWQuCgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUNvbnN0YW50cyBDUF8qIGFuZCBXQ18qIGFkZGVkLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJUEVfTG9hZE1vZHVsZTogY2FsbCBQRV9Jbml0RExMIHdpdGggaE1vZHVsZSByYXRoZXIgdGhhbiB3cG50LgoKU3VuIE1hciAxNyAxNjo1OToxMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJSW50cm9kdWNlZCBob29rIGZ1bmN0aW9uIGhhbmRsaW5nIGluIGZpbGUgZGlhbG9nLgoJUmVtb3ZlZCBhbiB1bm5lY2Vzc2FyeSBTaG93V2luZG93IGNhbGwgaW4gRklMRURMR19XTUNvbW1hbmQoKS4KClRodSBNYXIgMTQgMTA6NTA6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIEdldE5lYXJlc3RDb2xvci4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdsb2JhbEFkZEF0b21BLgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCUFkZGVkIHN0YWNrZnJhbWUuaCB0byBpbmNsdWRlcy4KCVdJTjMyX0dsb2JhbEFkZEF0b21BKCkgLSBuZXcgZnVuY3Rpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBNYXIgMTMgMTk6NDY6NTAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlIChub3QgcG9ydGFibGUpLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KCVByZWZpeGVkIGFsbCB0b2tlbiB3aXRoICd0JyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0eXBlCglkZWZpbml0aW9ucy4KCUFkZGVkICd3YWxrIHF1ZXVlJywgJ3dhbGsgY2xhc3MnIGFuZCAnaW5mbyBjbGFzcycgY29tbWFuZHMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJTW92ZWQgcXVldWUgYW5kIHdpbmRvdyBpbmZvcm1hdGlvbiBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jCglhbmQgd2luZG93cy93aW4uYyByZXNwZWN0aXZlbHkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgU0lHSFVQIGhhbmRsaW5nIHRvIGZvcmNlIGVudHJ5IGludG8gYnVpbHQtaW4gZGVidWdnZXIuCglDbGVhbmVkIHVwIGEgYml0LgoKCSogW21pc2Mvc3B5LmNdCglHZW5lcmFsIGNsZWFudXAgYW5kIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCBDTEFTU19EdW1wQ2xhc3MoKSBhbmQgQ0xBU1NfV2Fsa0NsYXNzZXMoKSBmdW5jdGlvbnMgZm9yCglkZWJ1Z2dlci4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglQcmVzc2luZyBDdHJsLUFsdC1SZXR1cm4gZm9yY2VzIGFuIGVudHJ5IGludG8gdGhlIGRlYnVnZ2VyLiBOb3QKCXN1cmUgaWYgdGhpcyBrZXkgY29tYmluYXRpb24gaXMgYSBnb29kIGNob2ljZS4uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSAoTmV3IGZpbGUpCglNb3ZlZCBtZXNzYWdlIHF1ZXVlIGhhbmRsaW5nIGZ1bmN0aW9ucyB0byB3aW5kb3dzL3F1ZXVlLmMuCgpUdWUgTWFyIDEyIDE0OjU1OjE2IDE5OTYgIE9ubm8gSG92ZXJzICA8b25ub0BzdGFjay51cmMudHVlLm5sPgoKCSogW2lmMTYzMi9leGNlcHQuU10gW2luY2x1ZGUvZXhjZXB0LmhdIFt3aW4zMi9leGNlcHQuY10gKE5ldyBmaWxlcykKCUltcGxlbWVudGVkIFdpbjMyIGV4Y2VwdGlvbiBmdW5jdGlvbnM6IFJhaXNlRXhjZXB0aW9uKCksCiAJUnRsVW53aW5kKCksIFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcigpIGFuZAoJVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKCkuCgpNb24gTWFyIDExIDE5OjIzOjI5IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCglTcGVjaWFsIGhhbmRsaW5nIGZvciBDT01CT0xCT1ggc3R5bGVzIGludHJvZHVjZWQgdmlhIGV4dGVuc2lvbiBvZgogCUhFQURMSVNUIHN0cnVjdHVyZTogbHBobC0+ZHdTdHlsZS4KCk1vbiBNYXIgMTEgMTM6MzE6MDYgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQW55IG1vdXNlIG1vdmVtZW50IHdpdGhpbiBhIHNtYWxsIGRpc3RhbmNlIChkZWZpbmVkIGJ5IENCTE1NX0VER0UpCglvZiB0aGUgdG9wIG9yIGJvdHRvbSBlZGdlIGNhdXNlcyB0aGUgd2luZG93IHRvIHNjcm9sbC4gIEFsc28gbW92ZWQgCglzb21lIGFzc2lnbm1lbnRzIHNvIHRoZSByb3V0aW5lIHdvcmtzIGNvcnJlY3RseS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDaGFuZ2luZyBzZWxlY3Rpb24gaW4gTGlzdEJveFNldEN1clNlbCBub3cgdXBkYXRlcyBQcmV2Rm9jdXNlZC4KCUFkZGVkIHRvIExCU2V0Rm9udCBhbmQgQ3JlYXRlTGlzdEJveFN0cnVjdCBhIGZha2UgaGRjIHRoYXQgdGVzdHMgCglhbmQgc2V0cyB0aGUgc3RhbmRhcmQgdGV4dCBoZWlnaHQuCgpTdW4gTWFyIDEwIDA4OjM5OjIzIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdCglGaXhlZCBtZW1vcnkgbGVhayBpbiBEQ0VfQ2xpcFdpbmRvd3MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIE1hciAgOCAxOTowNzoxOCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dCglRdW90ZSAnWycgYW5kICddJyBpbiB0aGUgdGVzdCBwcm9ncmFtIGZvciB0aGUgc3RyZW5ndGgtcmVkdWNlCglidWcuIFRoaXMgc2hvdWxkIHdvcmsgbXVjaCBiZXR0ZXIuLi4KCgkqIFtmaWxlcy9maWxlLmNdCglBdWdtZW50ZWQgRE9TX0ZJTEUgc3RydWN0dXJlLiBNb3N0IGludGVybmFsIGZ1bmN0aW9ucyBub3cgcmV0dXJuIGEKCURPU19GSUxFKiBpbnN0ZWFkIG9mIGEgVW5peCBoYW5kbGUuCglBZGRlZCBhIGxvY2FsIGZpbGUgYXJyYXkgdG8gcmVwbGFjZSB0aGUgUERCIGxpc3QgdXBvbiBzdGFydHVwLCB0bwoJYWxsb3cgdXNpbmcgZmlsZSBJL08gZnVuY3Rpb25zIGJlZm9yZSB0aGUgZmlyc3QgdGFzayBpcyBjcmVhdGVkLgoJQWRkZWQgRklMRV9TZXREYXRlVGltZSgpIGFuZCBGSUxFX1N5bmMoKSBmdW5jdGlvbnMuCgkKCSogW2xvYWRlci9tb2R1bGUuY10KCVVzZSB0aGUgRE9TIGZpbGUgSS9PIGZ1bmN0aW9ucyBpbiBNT0RVTEVfTG9hZEV4ZUhlYWRlcigpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglVc2UgdmlzaWJsZSByZWdpb24gaW5zdGVhZCBvZiBHQyBjbGlwIHJlZ2lvbiB0byBjbGlwIHNvdXJjZQoJYXJlYS4gVGhpcyBmaXhlcyB0aGUgY2FyZCBkcmF3aW5nIGJ1ZyBpbiBmcmVlY2VsbC4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4ZWQgQ29tYmluZVJnbigpIHRvIGFsbG93IHNyYyBhbmQgZGVzdCByZWdpb25zIHRvIGJlIHRoZSBzYW1lLgoKRnJpIE1hciAgOCAxNjozMjoyMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9FRElULlRPRE9dCglVcGRhdGVkIHNvIGl0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHN0YXR1cy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBpbnRlcm5hbCBFRElUX1dvcmRCcmVha1Byb2MoKS4KCUltcGxlbWVudGVkIEVTX1JFQURPTkxZLgoJSW1wbGVtZW50ZWQgV01fTEJVVFRPTkRCTENMSyB0byBzZWxlY3Qgd2hvbGUgd29yZHMuCglGaXhlZCBhIGxvdCBvZiB0eXBlcyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgpXZWQgTWFyICA2IDE5OjU1OjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUFkZGVkICJ3YWxrIHdpbmRvdyIgY29tbWFuZCB0byB3YWxrIHdpbmRvdyBsaXN0LiAKCgkqIFt3aW5kb3dzL21kaS5jXQoJQWRkZWQgcHJvcGVyKD8pIFdNX01ESVNFVE1FTlUgbWVzc2FnZSBoYW5kbGluZy4KCldlZCBNYXIgIDYgMDk6Mjc6MTIgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY11baWYxNjMyL3JlbGF5MzIuY10KCVJFTEFZMzJfQ2FsbFdpbmRvd1Byb2NDb252U3RydWN0OiBuZXcgZnVuY3Rpb24uCgoJKiBbd2luMzIvc3RydWN0MzIuY11bd2luMzIvTWFrZWZpbGUuaW5dW3dpbjMyL3BhcmFtLmNdW3dpbjMyL3VzZXIzMi5jXQoJc3RydWN0MzIuYzogbmV3IGZpbGUuIE1vdmVkIGFsbCBzdHJ1Y3R1cmUgY29udmVyc2lvbnMgaW50byB0aGF0IGZpbGUKCVBBUkFNMzJfUE9JTlQzMnRvMTYsTVNHMTZ0bzMyLFVTRVIzMl9SRUNUMzJ0bzE2OiAKCXJlbmFtZWQgdG8gU1RSVUNUMzJfUE9JTlQzMnRvMTYsIC4uLgoJV0lOMzJfUE9JTlQsV0lOMzJfTVNHLFdJTjMyX1JFQ1QsV0lOMzJfUEFJTlRTVFJVQ1Q6IHJlbmFtZWQgdG8KCVBPSU5UMzIsIC4uLgoJTmV3IGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBOQ0NBTENTSVpFX1BBUkFNUywgV0lORE9XUE9TLAogCUNSRUFURVNUUlVDVC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWlzYy9leGVjLmNdCglXSU5IRUxQLCBNVUxUSUtFWUhFTFAsIEhFTFBXSU5JTkZPOiBuZXcgc3RydWN0dXJlcwoJV2luSGVscDogUmVpbXBsZW1lbnRlZC4gVGhhbmtzIHRvIFBldGVyIEJhbGNoCiAJKDEwMDcxMC4yNTY2QGNvbXB1c2VydmUuY29tKSBmb3IgaGlzIHZhbHVhYmxlIHJlc2VhcmNoLgoKCSogW3dpbjMyL3dpbnByb2NzLmNdCglXSU4zMl9DYWxsV2luZG93UHJvY1RvMTY6IG5ldyBmdW5jdGlvbiwgY2FsbCBpbgogCVVTRVIzMl9EZWZXaW5kb3dQcm9jQSwuLi4KCk1vbiBNYXIgIDQgMjM6MjI6NDAgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAiI2RlZmluZSBfX2V4cG9ydCIuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVB1dCBpbiBhIGZldyBoYWNrcyB0byBtYWtlIGJpdGJsdC1pbmcgd29yayB3aGVuIHVwc2lkZS1kb3duIGFuZC9vcgoJbWlycm9yZWQuICBCSVRCTFRfU3RyZXRjaEltYWdlIHNob3VsZCByZWFsbHkgYmUgY2hlY2tlZCBvdmVyCgl0aG9yb3VnaGx5LgoKCSogW3Byb2dyYW1zL3Byb2dtYW4vbWFpbi5jXQoJQWRkZWQgIiNpbmNsdWRlIDxyZXNvdXJjZS5oPiIgZm9yIGRlZmluaXRpb24gb2YgSEFWRV9XSU5FX0NPTlNUUlVDVE9SLgoKCSogW3JjL3BhcnNlci5oXSBbcmMvcGFyc2VyLmxdIFtyYy9wYXJzZXIueV0gW3JjL3dpbmVyYy5jXQoJRWxpbWluYXRlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgaW4gc3R5bGUgZGVmaW5pdGlvbi4KCUFkZGVkIGNydWRlIGVycm9yIG1lc3NhZ2Ugc3VwcG9ydDogInN0ZGluOiVkOiBwYXJzZSBlcnJvciBiZWZvcmUgJyVzJyIuCglJbXBsZW1lbnRlZCBzdHJpbmcgdGFibGUgc3VwcG9ydCB0byB0aGUgYmVzdCBvZiBteSBhYmlsaXR5IChpdCB3b3JrcwoJd2l0aCBMb2FkU3RyaW5nKCkgY2FsbHMpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXhlZCBidWcgaW4gTkNfRG9TaXplTW92ZSgpIHRoYXQgbWFkZSBzeXN0ZW0gbWVudSBwb3AgdXAgd2hlbiB0aXRsZQoJYmFyIG9mIG5vbi1pY29uaXplZCB3aW5kb3cgd2FzIGNsaWNrZWQgKGNoZWNrZWQgZm9yIGljb25pemF0aW9uKS4KCk1vbiBNYXIgMDQgMjA6NTU6MTkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2x6ZXhwYW5kLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KCSAgW2luY2x1ZGUvbHpleHBhbmQuaF1bbWlzYy9semV4cGFuZC5jXQoJTFpFWFBBTkQuRExMIGFkZGVkLgoKU3VuIE1hciAwMyAxODoxMDoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3Mvd2luLmNdCglQcmV2ZW50IHVzYWdlIG9mIGludmFsaWQgSFdORHMgaW4gV0lOX0VudW1DaGlsZFdpbigpLAoJdGhpcyBwcmV2ZW50cyB0b28gZWFybHkgdGVybWluYXRpb24gb2YgRW51bUNoaWxkV2luZG93cygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWFyICAyIDE4OjE5OjA2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgU0NST0xMX1RIVU1CIHBhaW50aW5nIGZpeGVzIGZyb20gQWxleCBLb3JvYmthIHRvIHN0b3JlIHRoZQogCWN1cnJlbnQgdHJhY2tpbmcgd2luZG93LgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIHR3byBmaWxlIGRlc2NyaXB0b3IgbGVha3MgaW4gRklMRV9PcGVuRmlsZSgpLgoKCSogW2lmMTYzMi9yZWxheTMyLmNdIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCSAgW3Rvb2xzL2J1aWxkLmNdCglSZXBsYWNlZCBMT0FERURGSUxFSU5GTyBzdHJ1Y3R1cmUgYnkgT0ZTVFJVQ1QuCgoJKiBbbWVtb3J5L2F0b20uY10KCVJlbG9hZCB0aGUgcG9pbnRlciB0byB0aGUgYXRvbSB0YWJsZSBpbiBBVE9NX0dldFRhYmxlKCkgYW5kCiAJQVRPTV9BZGRBdG9tKCkgaW4gY2FzZSB0aGUgTE9DQUxfQWxsb2MoKSBjYWxscyBjYXVzZWQgdGhlIHRhYmxlIHRvCiAJbW92ZSBpbiBsaW5lYXIgbWVtb3J5LgoKRnJpIE1hciAgMSAxMTo1NzoxMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBzdXBwb3J0IGZvciBDYWxsV29yZEJyZWFrUHJvYygpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCU5ldyBjYXJldCBoYW5kbGluZyAocmVhbGx5IGVmZmljaWVudCAvIGZhc3QpLgoJSW1wbGVtZW50ZWQgRU1fU0VUV09SREJSRUFLUFJPQyBhbmQgRU1fR0VUV09SREJSRUFLUFJPQy4KCUZpeGVkIEVNX1NFVEZPTlQgc28gaXQgbm93IGFsc28gY3JlYXRlcyBhIHByb3BlciBuZXcgY2FyZXQuCgpXZWQgRmViIDI4IDIyOjAzOjM0IDE5OTYgIERhbmllbCBTY2hlcGxlciAgPGRhbmllbEBmcm9ibml0ei53dXN0bC5lZHU+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgV01fREVMRVRFIHByb3RvY29sIHRvIHRvcC1sZXZlbCB3aW5kb3dzLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgYSBwcm9ibGVtIHdoaWNoIGNhdXNlZCBzbG93IHNjcm9sbGluZyB0byBjb250aW51ZQl1bmNvbnRyb2xsYWJseS4KCgkqIFttaXNjL2V4ZWMuY10KCUltcGxlbWVudGVkIEV4aXRXaW5kb3dzKCkuCgoJKiBbd2luZG93cy93aW4uY10KCVNldCB0b3AtbGV2ZWwgb3duZWQgd2luZG93cyB0byBiZSB0cmFuc2llbnQuCgpXZWQgRmViIDI4IDE5OjEzOjIyIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcHJvZ3JhbXMvcHJvZ21hbi8qXQoJQWRkZWQgYSBwcm9ncmFtIG1hbmFnZXIuCgpXZWQgRmViIDI4IDE4OjM4OjAxIDE5OTYgIER1bmNhbiBDIFRob21zb24gPGR1bmNhbkBzcGQuZWVlLnN0cmF0aC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0VvLmNdCglBZGRlZCBzdXBwb3J0IGZvciBFc3BlcmFudG8gW0VvXSBsYW5ndWFnZS4KCldlZCBGZWIgMjggMDA6MjM6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBFbmREaWFsb2csIEdldERsZ0l0ZW0sIEdldERsZ0l0ZW1JbnQsIFNldERsZ0l0ZW1JbnQsCgoJKiBbd2luMzIvaW5pdC5jXQoJQWRkZWQgdGFzay5oIHRvIGluY2x1ZGVzLiBHZXRNb2R1bGVIYW5kbGVBKCkgLSByZXR1cm4gaEluc3RhbmNlCglpZiBjYWxsZWQgd2l0aCBOVUxMIHBhcmFtZXRlci4gRnJlZWNlbGwgbmVlZHMgdGhpcy4gTk9URSB0aGlzCgltYXkgaW5kaWNhdGUgYSBwcm9ibGVtIHdpdGggZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gaE1vZHVsZSBhbmQKCWhJbnN0YW5jZSB3aXRoaW4gV2luZS4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlMzIoKSBhbmQgTG9hZFJlc291cmNlMzIoKSAtIFJlbW92ZWQgI2lmIDAncyBhcm91bmQKCWNvbnZlcnNpb24gZnJvbSBoSW5zdGFuY2UgdG8gaE1vZHVsZS4gU2VlIHJlbWFya3MgYWJvdmUuCgoJKiBbd2luMzIvc3RyaW5nMzIuY10KCVdJTjMyX1VuaUxlbigpIC0gcmVtb3ZlZCBzdHJheSBzZW1pY29sb24uCgpUdWUgRmViIDI3IDIxOjA1OjE4IDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgkKCSogW3dpbmRvd3MvY2FyZXQuY10KCVNldCBibGluayByYXRlIHdpdGggY2FsbCB0byBHZXRQcm9maWxlSW50KCkuCgoJKiBbcmMvd2luZXJjLmNdCglJbiBuZXdfc3R5bGUoKSwgbWFkZSBpbml0aWFsIGZsYWcgc2V0dGluZ3MgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCiAJaW5zdGVhZCBvZiAwLiAgVGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIEJvcmxhbmQncyBkZWZhdWx0cywgYW5kCiAJdGhlIGZsYWdzIGNhbiBiZSB1bnNldCBieSB1c2luZyB0aGUgKHJhdGhlciBvYnR1c2UpICJ8IE5PVCBXU19DSElMRCIKCW9yICJ8IE5PVCBXU19WSVNJQkxFIiB0ZWNobmlxdWUgaW4gdGhlICoucmMgZmlsZS4KCgkqIFt3aW4zMi90aW1lLmNdCglJbiBHZXRMb2NhbFRpbWUoKSBhbmQgR2V0U3lzdGVtVGltZSgpLCB1c2VkIHR2X3NlYyBmaWVsZCBvZiByZXN1bHQKIAlyZXR1cm5lZCBieSBnZXR0aW1lb2ZkYXkoKSBpbnN0ZWFkIG9mIG1ha2luZyBzZWNvbmQgY2FsbCB0bwogCXRpbWUoKS4gIFRoaXMgZWxpbWluYXRlcyBjbG9jayBqaXR0ZXIgaWYgdGhlIHNlY29uZHMgY2hhbmdlCiAJYmV0d2VlbiB0aGUgdHdvIGNhbGxzIChyYXJlLCBidXQgcG9zc2libGUpLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICIjZGVmaW5lIF9mYXIiIGFuZCAiI2RlZmluZSBfcGFzY2FsIi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gR2V0RGVza3RvcEh3bmQoKS4KCgkqIFtpbmNsdWRlL3htYWxsb2MuaF0KCVJlbW92ZWQgdGhlICcjaWZkZWYgSEFWRV9TVERMSUJfSCcgc3RydWN0dXJlLCBzaW5jZSBpdCBzZWVtZWQgdG8KIAloYXZlIGJlZW4gcmVtb3ZlZCBmcm9tICdjb25maWd1cmUnLCBhbmQgd2FzIGNhdXNpbmcgcmVkZWZpbml0aW9uCiAJd2FybmluZ3MuCgpUdWUgRmViIDI3IDE5OjMxOjExIDE5OTYgIEFsYnJlY2h0IEtsZWluZSA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAKCUFkZGVkIFJEV19BTExDSElMRFJFTiBmbGFnIGluIFNldFdpbmRvd1BvcyAoaGFuZGxpbmcgU1dQX0ZSQU1FQ0hBTkdFRCkKCXRvIGZvcmNlIGEgcmVwYWludCB3aGVuIHNldHRpbmcgbWVudSBiYXJzIHdpdGggZGlmZmVyZW50IHJvd3MuCgpTdW4gRmViIDI1IDIxOjE1OjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zeXNjb2xvcnMuY10gW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgRHJhd0ZvY3VzUmVjdCBwZW4gYW5kIFNDUk9MTF9USFVNQiBwYWludGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEZlYiAyNCAxNjoxNzowNSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglBZGRlZCBcciB3aGVuIHdyaXRpbmcgcHJvZmlsZSBmaWxlcywgZm9yIERPUyBjb21wYXRpYmlsaXR5LgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIGJ1ZyBpbiBHbG9iYWxSZUFsbG9jKCkgdGhhdCBjYXVzZWQgYSBkaXNjYXJkZWQgYmxvY2sgbm90IHRvCiAJYmUgcmVhbGxvY2F0ZWQgaWYgaXRzIHNpemUgd2FzIG5vdCBjaGFuZ2VkLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQXZvaWQgc2V0dGluZyBhIHZhbGlkIExEVCBlbnRyeSB3aXRoIGJhc2UgYW5kIGxpbWl0IHNldCB0byAwLCBhcwogCXRoaXMgY2F1c2VzIHRoZSBrZXJuZWwgdG8gY2xlYXIgdGhlIGVudHJ5LiBUaGlzIGZpeGVzIGEgY3Jhc2ggd2hlbgogCWV4aXRpbmcgV2luZG93cyBwcm9ncmFtIG1hbmFnZXIuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUmVtb3ZlZCBjYWxsIHRvIGNyZWF0KCkgaW5zdGVhZCBvZiBfbGNyZWF0KCkgZm9yIFdJTkVMSUIuCgpGcmkgRmViIDIzIDAwOjM1OjU0IDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dGRnc2FuZGZAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglHZXRUZXh0RXh0ZW50UG9pbnRBIG5vdyBoYXMgd2luMzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJRGVmaW5lIG5ldyBzdHJ1Y3R1cmUgdGFnU0laRTMyIGFuZCB0eXBlZGVmIFNJWkUzMiB0byBpdC4KCURlZmluZSBwcm90b3R5cGUgZm9yIGZ1bmN0aW9uIFBBUkFNMzJfU0laRTE2dG8zMgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCU5ldyBmdW5jdGlvbnMgUEFSQU0zMl9TSVpFMTZ0bzMyIGFuZCBXSU4zMl9HZXRUZXh0RXh0ZW50UG9pbnRBCgoJKiBbd2luMzIvbWVtb3J5LmNdCglBZGRlZCBtaXNzaW5nIGZpbGUgcG9pbnRlciBwYXJhbWV0ZXIgdG8gZnByaW50Zi4KClRodSBGZWIgMjIgMDE6MTQ6MjEgMTk5NiAgRXJpYyBXYXJua2UgPGV3MjE5M0Bjc2MuYWxiYW55LmVkdT4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgbW9yZSBmYW1pbGlhciBpY29uIGFjdGl2aXR5LCBpZSBzaW5nbGUgY2xpY2sgYnJpbmdzIHVwCiAJc3lzdGVtIG1lbnUuCgpXZWQgRmViIDIxIDEzOjA3OjA0IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFkZGVkIGNhbGxzIHRvIEhpZGVDYXJldCgpIGFuZCBTaG93Q2FyZXQoKSBmcm9tIHdpdGhpbgogCVRyYWNrUG9wdXBNZW51KCksIE1FTlVfVHJhY2tNb3VzZU1lbnVCYXIoKSBhbmQKIAlNRU5VX1RyYWNrS2JkTWVudUJhcigpLiAgQXJlIHRoZXJlIGFueSBtb3JlIHBsYWNlcyB3aGVyZSB0aGlzCiAJc2hvdWxkIGJlIGRvbmU/CgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBhIEZJWE1FIGluIFNUQVRJQ19TZXRJY29uKCksIHdoaWNoIG5vdyByZXR1cm5zIGEgaGFuZGxlIHRvCiAJdGhlIHByZXZpb3VzIGljb24uICBBZGRlZCBhIG5ldyBGSVhNRSBhdCB0aGUgcG9pbnQgd2hlcmUKIAlXTV9TRVRURVhUIGlzIGhhbmRsZWQgZm9yIGEgU1NfSUNPTiBzdGF0aWMgY29udHJvbC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUltcGxlbWVudGVkIEZpbmRUZXh0KCkgYW5kIFJlcGxhY2VUZXh0KCkKCVN0aWxsIG1pc3NpbmcgOiBUZW1wbGF0ZXMgYW5kIEhvb2tzIGhhbmRsaW5nIC8gZXJyb3IgY2hlY2tpbmcKCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0VuLmNdCglSZWRlc2lnbmVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIGRpYWxvZ3MsIHNvIHRoZXkgbm93IHdvcmsuCglMYW5ndWFnZXMgb3RoZXIgdGhhbiBFbiBzaG91bGQgdXBkYXRlIHRoZXNlIHRvbywgdGhvdWdoLCBhcyB3ZWxsCiAJYXMgcmVkaW1lbnNpb24gdGhlIGNvbnRyb2xzIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGV4dCBkb2Vzbid0IGZpdC4KICAJQ3JlYXRlZCBmaWxlIHJlc291cmNlcy9UT0RPIHRvIGV4cGxhaW4gdGhpcy4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglSZS13cml0dGVuLiAgSXQgbm93IHVzZXMgdGhlIGNvcnJlY3QgUjJfWE9SUEVOLiAgSXQgcmVzZXRzIHRoZQogCWJsaW5rIHRpbWVyIG9uIFNldENhcmV0UG9zKCkuICBJdCBkb2VzIGl0cyBvd24gaGlkZS9zaG93IHNjaGVtZQogCXdoZW4gU2V0Q2FyZXRQb3MoKSBpcyBjYWxsZWQgKHNob3VsZCBiZSBmYXN0ZXIpLgoKTW9uIEZlYiAxOSAyMTo1MDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaXNjZWxsYW5lb3VzIGNoYW5nZXMgZm9yIGJldHRlciBMQlNfRVhURU5ERURTRUwgc3VwcG9ydC4KCVJlbW92ZWQgc2V2ZXJhbCBzdXBlcmZsdW91cyByZWRyYXdhbHMgb2YgaXRlbSBsaXN0LgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJV01fR0VURExHQ09ERSByZXR1cm4gdmFsdWUuCgoJKiBbd2luZG93cy93aW4uY10KCUZsYXNoV2luZG93IGZ1bmN0aW9uLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvc2Nyb2xsLmNdCglBZGRlZCBIaWRlQ2FyZXQvU2hvd0NhcmV0IGNhbGxzLgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkZWQgR2V0Q2hhckFCQ1dpZHRocyBzdHViLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJIiNkZWZpbmUicyBuZWVkZWQgZm9yIGNoYW5nZXMgbWVudGlvbmVkIGFib3ZlLgoKTW9uIEZlYiAxOSAyMDoxMjowMyAxOTk2ICBIYW5zIGRlIEdyYWFmZiAgPEhhbnMuZGVHcmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglDaGFuZ2Ugb3JkZXIgb2YgaW5jbHVkZXMgdG8gZ2V0IGluX2FkZHIgc3RydWN0IGRlZmluZWQgaW4gdGltZS4KCShOb3RlOiBMaW51eCAxLjMuNjYsIGxpYmMgNS4yLjE4KQoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjZW11L2ludDJmLmNdCglDaGFuZ2VkIHRoZSAtZW5oYW5jZWQgb3B0aW9uIGludG8gYSAtbW9kZSBvcHRpb24sIHdoaWNoIGNhbiBiZQoJZWl0aGVyICdzdGFuZGFyZCcgb3IgJ2VuaGFuY2VkJy4gJ2VuaGFuY2VkJyBpcyB0aGUgZGVmYXVsdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEZlYiAxOCAxNjozNTo1NCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglMb29rIGZvciB0aGUgd2FsbHBhcGVyIGZpbGUgaW4gdGhlIFdpbmRvd3MgZGlyZWN0b3J5LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIHN3YXBwZWQgcGFyYW1ldGVycyBpbiBTZXRNZW51SXRlbUJpdG1hcHMoKS4KCUNyZWF0ZSBhIHNlcGFyYXRvciBpbiBNRU5VX1NldEl0ZW1EYXRhKCkgd2hlbiB0aGUgc3RyaW5nIGlzIE5VTEwuCgoJKiBbZmlsZS9kb3Nmcy5jXQoJRE9TRlNfRmluZE5leHQ6IGRvbid0IHJldHVybiAnLicgYW5kICcuLicgaW4gYSBkcml2ZSByb290IGRpci4KCgkqIFtmaWxlcy9maWxlLmNdCglBZGRlZCBhIERPU19GSUxFIHN0cnVjdHVyZSB0byBzdG9yZSBwZXItZmlsZSBpbmZvcm1hdGlvbiAobm90CglyZWFsbHkgdXNlZCB5ZXQpLgoJRml4ZWQgX2xyZWFkIGFuZCBfaHJlYWQgdG8gY2hlY2sgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBiZWZvcmUKCWNhbGxpbmcgVW5peCByZWFkKCkgdG8gYXZvaWQgRUZBVUxUIGVycm9yLgoKCSogW21pc2MvZXhlYy5jXQoJUmV0dXJuIFRSVUUgaW4gV2luSGVscCgpIGZvciBIRUxQX1FVSVQgdG8gcXVpZXQgTm90ZXBhZCBvbiBleGl0LgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUNhbGwgRE9TTUVNX0FsYXJtKCkgaW4gSU5TVFJfUmVwbGFjZVNlbGVjdG9yKCkuIFRoaXMgc2hvdWxkIGZpeAogCXByb2dyYW1zIHRoYXQgcG9sbCB0aGUgQklPUyBjb3VudGVyLCBwcm92aWRlZCB0aGV5IHJlbG9hZCB0aGUKIAlzZWxlY3RvciBvbiBldmVyeSByZWFkLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVJlLWltcGxlbWVudGVkIEZpbmRGaXJzdC9GaW5kTmV4dCBmb3IgRkNCIGNhbGxzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW5wb3MuY10KCU1lcmdlZCBNU0dfR2V0V2luZG93Rm9yRXZlbnQoKSBhbmQgV0lOUE9TX1dpbmRvd0Zyb21Qb2ludCgpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIHBlci13aW5kb3cgV0lOX01BTkFHRUQgZmxhZzsgb25seSB3aW5kb3dzIHRoYXQgaGF2ZSBhCglkaWFsb2cgZnJhbWUgb3IgYSBzaXppbmcgYm9yZGVyIGFyZSBtYW5hZ2VkLgoKU2F0IEZlYiAxNyAxODoyNTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHRkZ3NhbmRmQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0KCUFkZGVkIC1nIGZsYWcgdG8gY29tcGlsYXRpb24gb2YgLmMgZmlsZXMgZ2VuZXJhdGVkIGZyb20gKjMyLnNwZWMuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglOdW1lcm91cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KCgkqIGlmMTYzMi91c2VyMzIuc3BlY10KCXdzcHJpbnRmQSBtYXBzIHRvIHZzcHJpbnRmIG5vdCB3c3ByaW50ZgoJTnVtZXJvdXMgYWRkaXRpb25hbCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZ2Rpb2JqLmNdCglOZXcgI2RlZmluZSBNQUdJQ19ET05UQ0FSRSBhZGRlZC4gVGhpcyBpcyB1c2VkIGluCglHRElfR2V0T2JqUHRyIHRvIGVuYWJsZSBnZXR0aW5nIGEgcG9pbnRlciB0byBhIEdESSBvYmplY3Qgb2YKCXVua25vdyB0eXBlLgoKCSogW3dpbjMyL2dkaTMyLmNdCglOZXcgZmlsZS4KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglXSU4zMl9Nb3ZlVG9FeCgpIC0gaGFuZGxlIE5VTEwgcG9pbnRlciBhcmd1bWVudC4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVVTRVIzMl9JbnZhbGlkYXRlUmVjdCAtIGhhbmRsZSBwYXNzaW5nIG9mIGEgTlVMTCBwb2ludGVyLgoJVVNFUjMyX1NldFRpbWVyIC0gTmV3IGZ1bmN0aW9uLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRml4ZWQgRElSX0luaXQoKSAob2ZmIGJ5IG9uZSBpbiBhbGxvY2F0aW9uIG9mIHNwYWNlIGZvcgoJZW52aXJvbm1lbnQgdmFyaWFibGVzKS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgPHN5cy90eXBlcy5oPiB0byAjaW5jbHVkZXMgKHByZXJlcXVpc2l0ZSBmb3IgPHN5cy9zdGF0Lmg+CglvbiBGcmVlQlNEKS4KCkZyaSBGZWIgMTYgMTA6MjY6NTYgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1lbW9yeSBsZWFrIHBsdWdnZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRXJhc2Ugc3BhY2Ugd2l0aCBmdW5jdGlvbiBFeHRUZXh0T3V0KCkuIFRoaXMgZWxpbWluYXRlcyB0aGUgdXNlIG9mCiAJeG1hbGxvYygpLiAgTWVtb3J5IGxlYWsgaW4gRURJVF9Xcml0ZVRleHQgcGx1Z2dlZC4KCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCU9wZXJhbmQgZm9yIHNjYXMgbm93IGlzIGRpLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCVBST0ZJTEVfR2V0U2VjdGlvbiB3YXMgY29weWluZyB0b28gbXVjaCBkYXRhLgoJUFJPRklMRV9HZXRTZWN0aW9uIG5vdyByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlLiBJdCB3YXMgcmV0dXJuaW5nCiAJdGhlIG51bWJlciBvZiB1bnVzZWQgaW5zdGVhZCBvZiB1c2VkIGJ5dGVzLgoKCSogW29iamVjdHMvZGMuY10KCUNvcnJlY3RlZCB0d28gdHlwb3MgaW4gY29tbWVudHMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udCBkaWRuJ3QgcmV0dXJuIGlmIGl0IGNvdWxkbid0IGZpbmQgYW55IGZvbnQuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUZyZWUgb2JqZWN0IG9ubHkgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglNZW1vcnkgbGVhayBpbiBTY3JvbGxEQyBwbHVnZ2VkLgoKVHVlIEZlYiAxMyAxMToxNzowMCAxOTk2IFdpbGxpYW0gTWFncm8gIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfTk9ISURFU0VMIHN0eWxlLCBzaGlmdCtjbGljayBzZWxlY3Rpb24sCiAJc2hpZnQre2Fycm93LGhvbWUsZW5kLHBndXAscGdkbn0gc2VsZWN0aW9uLiAgT3B0aW1pemVkCgkoZGUpc2VsZWN0aW9uIGRyYXdpbmcuICBDaGFuZ2VkIHNlbGVjdGlvbiBkcmF3aW5nIHRvIHVzZSBjb3JyZWN0CiAJc3lzdGVtIGNvbG9ycyBpbnN0ZWFkIG9mIGludmVydGluZy4gIEZpeGVkIGRlbGV0aW5nIG9yIGJhY2tzcGFjaW5nCiAJYWNyb3NzIGEgJ1xyXG4nIGVuZCBvZiBsaW5lIHBhaXIuICBTZWxlY3Rpb24gbm93IGFuY2hvcnMKIAljb3JyZWN0bHkuIEZpeGVkIHRleHQgbGVha2luZyBhbmQgZXh0cmEgZ2FyYmFnZSBwcm9ibGVtIGJ1ZwogCXVuY292ZXJlZCBieSBjaGFuZ2UgaW4gY2xhc3Mgc3R5bGUgaW4gd2luZTk2MDEzMS4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglDbGFzcyBmbGFncyBub3cgbWF0Y2ggdGhvc2Ugb2YgV2luZG93cy4KCk1vbiBGZWIgMTIgMjE6Mjg6MTkgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglXSURHRVRTX0luaXQ6IFJFTEFZMzJfR2V0RW50cnlQb2ludCBkb2VzIG5vdCB0YWtlIGEgc3RyaW5nIGFueW1vcmUuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvcmVsYXkzMi5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KCWNvbWN0bDMyLnNwZWMgb2xlMzIuc3BlYyB3aW5zcG9vbC5zcGVjOiBuZXcgZmlsZXMuCglSRUxBWTMyX0luaXQ6IGNhbGwgaW5pdGlhbGl6YXRpb24gb2YgbmV3IERMTHMuCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IGV4cGVjdHMgV0lOMzJfYnVpbHRpbiogbm93LgoJUkVMQVkzMl9NYWtlRmFrZU1vZHVsZTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgV2luOTUgZnVuY3Rpb25zLiBPcmRpbmFscyBub3cgZGlmZmVyIGZyb20gYm90aCBOVCBhbmQgV2luOTUKCUhlYXBDcmVhdGUsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1BLCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtVywKCUNyZWF0ZURpYWxvZ1BhcmFtQSwgQ3JlYXRlRGlhbG9nUGFyYW1XLCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQQoJRGlhbG9nQm94SW5kaXJlY3RQYXJhbVcsIERpYWxvZ0JveFBhcmFtQSwgRGlhbG9nQm94UGFyYW1XOgoJbmV3IHJlbGF5cy4KCgkqIFtpZjE2MzIvc2hlbGwzMi5zcGVjXQoJc2hlbGwzMi5zcGVjOiByZW51bWJlcmVkIGFsbCBmdW5jdGlvbnMgdG8gdGFrZSBpbnRvIGFjY291bnQgb3JkaW5hbHMuCglUaGVzZSBzZWVtIHRvIGJlIGlkZW50aWNhbCBiZXR3ZWVuIE5UIGFuZCBXaW45NS4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXVt3aW5kb3dzL2RpYWxvZy5jXQoJeEJhc2VVbml0LHlCYXNlVW5pdCxESUFMT0dfRG9EaWFsb2dCb3g6IG1hZGUgbm9uLXN0YXRpYy4KCgkqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCglOZXcgaGFuZGxlIHR5cGVzIFZSQU5HRSwgSEVBUCwgSEVBUElURU0uCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXVtsb2FkZXIvcGVfaW1hZ2UuY10KCXN0cnVjdCB3X2ZpbGVzOiBuZXcgZmllbGQgYnVpbHRpbi4KCVBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uOiBzdXBwb3J0IG9yZGluYWxzLgoJUEVfR2V0UHJvY0FkZHJlc3M6IGNhbGwgUkVMQVkzMl9HZXRFbnRyeVBvaW50IGZvciBidWlsdGlucy4KCWZpeHVwX2ltcG9ydHM6IHN1cHBvcnQgb3JkaW5hbHMuCglQRV9Mb2FkSW1hZ2U6IHByZWZlciBkaXJlY3RvcmllcyBvdmVyIHNlZ21lbnRzLgoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF1bd2luMzIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZTMyOiBjaGFuZ2VkIHBhcmFtZXRlciBmcm9tIExQQ1RTVFIgdG8gTFBDV1NUUgoJCWNoZWNrIExBTkdfTkVVVFJBTCBpZiBMQU5HX0VOR0xJU0ggZmFpbHMuCglMb2FkQWNjZWxlcmF0b3JzVyxTaXplb2ZSZXNvdXJjZTMyLEFjY2Vzc1Jlc291cmNlMzI6IAoJCWRpc2FibGVkIGJlY2F1c2UgaXQncyBicm9rZW4uCglDYXN0ZWQgdG8gYW5kIGZyb20gTFBXU1RSIGF0IHZhcmlvdXMgcGxhY2VzLgoKCSogW2luY2x1ZGUvc3RyaW5nMzIuaF1bd2luMzIvc3RyaW5nMzIuY10KCUNoYW5nZWQgcHJvdG90eXBlcyB0byB0YWtlIGNvbnN0IGFyZ3VtZW50cyB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglOZXcgc3RydWN0dXJlcyBETEdURU1QTEFURTMyLCBETEdJVEVNVEVNUExBVEUzMi4KCgkqIFt0b29scy9idWlsZC5jXQoJQnVpbGRTcGVjMzJGaWxlczogZ2VuZXJhdGUgQmFzZSB2YWx1ZSBpbnRvIGNvZGUsIGdlbmVyYXRlIGNhbGwgdG8KCVJFTEFZMzJfTWFrZUZha2VNb2R1bGUuCgkKCSogW3dpbjMyL2hlYXAuY10KCVRoaXMgaXMgc3RpbGwgbm90IGZpbmlzaGVkIGFuZCBuZWVkcyByZXdvcmsuCglIZWFwQWxsb2M6IHJlbmFtZWQgdG8gU0lNUExFX0hlYXBBbGxvYywgaW1wbGVtZW50ZWQgSGVhcEFsbG9jLgoJSGVhcENyZWF0ZTogaW1wbGVtZW50ZWQgb24gdG9wIG9mIFZpcnR1YWxBbGxvYywgd2hpY2ggZG9lcyBub3Qgd29yayB5ZXQKCUhlYXBEZXN0cm95LCBIRUFQX0dyb3dIZWFwLCBIZWFwRnJlZTogbmV3IGZ1bmN0aW9ucy4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVN1cHBvcnQgZm9yIFZSQU5HRV9PQkpFQ1QuIFRoaXMgaXMgbm90IHlldCBjYWxsZWQgZnJvbSBhbnkgcGxhY2UsCglhbmQgbmVlZHMgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBzdXBwb3J0CglNRU1PUllfRmluZFZyYW5nZSwgTUVNT1JZX0lzVnJhbmdlRnJlZSwgTUVNT1JZX0luc2VydFZyYW5nZSwKCU1FTU9SWV9BbGxvY1ZyYW5nZSwgTUVNT1JZX1JlbGVhc2VWcmFuZ2U6IG5ldyBmdW5jdGlvbnMuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglXSU4zMl9DcmVhdGVXaW5kb3dFeEE6IGRvbid0IEdsb2JhbEFsbG9jIGZvciBpbnRlZ2VyIGNsYXNzIGFuZCB3aW5kb3cKCW5hbWVzLCBhcyBpbiBkaWFsb2dzLgoJSW1wbGVtZW50ZWQgZGlhbG9nIGZ1bmN0aW9ucyAoc2VlIHVzZXIzMi5zcGVjKS4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDQVJFVF9Jbml0aWFsaXplOiBjYWxsIFJFTEFZMzJfR2V0QnVpbHRpbkRMTC4KCk1vbiBGZWIgMTIgMTg6NTI6NDAgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglSZW1vdmVkIGNvbW1lbnRlZCBvdXQgI2lmZGVmcyBmb3IgV0lORUxJQi4KCgkqIFt0b29scy9tYWtlaHRtbC5wbF0KCVB1dCBpbiBlcnJvciBjaGVja2luZyB3aGVuIHRyeWluZyB0byBvcGVuIGEgZmlsZS4KCgkqIFtsaWJ0ZXN0L01ha2VmaWxlLmluXSBbbGlidGVzdC9uZXcuY10gW2xpYnRlc3QvaGVsbG80LmNdCglBZGRlZCB0d28gbmV3IHRhcmdldHM6IGhlbGxvNCBhbmQgbmV3LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBERVZNT0RFIHN0cnVjdHVyZSwgYWx0aG91Z2ggaXQncyBub3QgeWV0IHVzZWQuCiAgCU1vZGlmaWVkIHZhcmlvdXMgQVBJIGZ1bmN0aW9ucyBmcm9tIENyZWF0ZURDKCkgdG8gRXNjYXBlKCksIGluCiAJb3JkZXIgdG8gbWFrZSB0aGVtIG1vcmUgY29tcGxpYW50IHdpdGggdGhlIHN0cmljdCBBUEkgZGVmaW5pdGlvbnMuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgJ3R5cGVkZWYgY2hhciBUQ0hBUicuICBJdCBwcm9iYWJseSBzaG91bGQgYmUgZGVmaW5lZCBhcwoJJ3Nob3J0JywgYnV0IHRoZW4gd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHN1Y2ggY2hhcmFjdGVycy4gIEFsc28gZGlkCgkndHlwZWRlZiBjb25zdCBUQ0hBUiogTFBDVFNUUicgYW5kICd0eXBlZGVmIFRDSEFSKiBMUFRTVFInLgoJQWxzbyBkZWZpbmVkIFdOREVOVU1QUk9DLCBGT05URU5VTVBST0MsIEdPQkpFTlVNUFJPQywgUFJPUEVOVU1QUk9DCglNRkVOVU1QUk9DLCBhbmQgSEdESU9CSi4KCk1vbiBGZWIgIDUgMTY6NDI6MDcgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglQYXRjaGVkIGEgYnVnIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGludGVybmFsIENPTU1ETEcgbW9kdWxlIGZvciB0aGUKIAlGaWxlT3BlbigpLCBGaWxlU2F2ZSgpIGFuZCBGaWxlU2F2ZUFzKCkgZnVuY3Rpb25zLiAgVGhlIGZpbGUtdHlwZQogCWNvbWJvYm94IGlzIG5vdyBoYW5kbGVkIGNvcnJlY3RseS4KCkZyaSBGZWIgIDIgMjI6NTI6NTggMTk5NiAgUm9tYW4gRG9sZWpzaSAgPHJvbWFuQHNvcnJ5LnZzZS5jej4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0N6LnJjXQoJQWRkZWQgc3VwcG9ydCBmb3IgQ3plY2ggW0N6XSBsYW5ndWFnZS4KClRodSBGZWIgIDEgMDA6MzU6MDQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfbWF0Y2hmb250IDogZm9yIGZpeGVkLXNwYWNpbmcgZm9udHMsIGFsbG93ICdjJyBpZiAnbScgZmFpbHM7Cglmb3IgdmFyaWFibGUtc3BhY2luZyBmb250cyA6IGFsbG93ICcqJyBpZiAncCcgZmFpbHM7IGlmIGFza2VkIGxmSGVpZ2h0CglpcyAtMSwgYXNzdW1lIDAuCglDcmVhdGVGb250SW5kaXJlY3QgOiBpZiBmb250IHBhcmFtZXRlciBpcyBOVUxMLCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlLgoJQ3JlYXRlRm9udCA6IG51bGwtdGVybWluYXRlIGxmRmFjZU5hbWUuCglQYXJzZUZvbnRQYXJtcyA6IGRlYnVnIGNvZGUgdHVybmVkIG9mZiA6IHRvbyB2ZXJib3NlLgoJSW5pdEZvbnRzTGlzdCA6IHJlY29nbml6ZSAqLWMtKiBmb250cyBhcyBmaXhlZC1zcGFjaW5nIGZvbnRzLgoKCSogW29iamVjdHMvY29sb3IuY10KCUNvbG9yVG9QaHlzaWNhbCA6IGFkbWl0IDB4ZmYuLi4uLi4gQ09MT1JSRUYncyBhcyAweDAwLi4uLi4uIG9uZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSmFuIDMxIDEwOjU4OjAwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCAtLXdpdGgtZGxsIG9wdGlvbiB0byBidWlsZCBsaWJ3aW5lLnNvLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIExpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCkgYW5kCglEbGdEaXJMaXN0KCkuIEhvcGVmdWxseSB0aGVpciBiZWhhdmlvciBpcyBjb3JyZWN0IG5vdy4KCgkqIFtjb250cm9scy9tZW51LmNdCglVc2UgU0VHUFRScyBpbiBDaGFuZ2VNZW51KCksIEluc2VydE1lbnUoKSwgQXBwZW5kTWVudSgpIGFuZAogCU1vZGlmeU1lbnUoKSBmb3IgdGhlIGl0ZW0gZGF0YSwgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgcG9pbnRlcgogCWZvciBvd25lci1kcmF3biBpdGVtcy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUF0dGVtcHQgdG8gbG9hZCBPRU0gaWNvbnMgZm9yIFNTX0lDT04gY29udHJvbHMuIFByb2JhYmx5IG5vdAoJZW50aXJlbHkgY29ycmVjdC4KCURvbid0IGNsaXAgdGhlIHRleHQgb3V0cHV0LgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQWRkIHRlbXAgZGlyIGFuZCBXaW5kb3dzIGRpciB0byBlbnZpcm9ubWVudC4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUZpeGVkIGEgZmV3IHBhdGggaGFuZGxpbmcgYnVncyBpbiBET1NGU19HZXRVbml4RmlsZU5hbWUoKS4KCUNhY2hlIGxhc3QgdXNlZCBkaXJlY3RvcnkgaW4gRE9TRlNfRmluZE5leHQoKSB0byBhdm9pZCBxdWFkcmF0aWMKCXNlYXJjaCB0aW1lLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglOZXcgZm9ybWF0IGZvciBkcml2ZXMgY29uZmlndXJhdGlvbiBpbiB3aW5lLmNvbmY7IGFsbG93cwoJc3BlY2lmeWluZyB0aGUgdHlwZSwgbGFiZWwgYW5kIHNlcmlhbCBudW1iZXIgb2YgYSBkcml2ZS4KCgkqIFtmaWxlcy9maWxlLmNdCglOZXcgZnVuY3Rpb24gRklMRV9PcGVuVW5peEZpbGUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG9wZW4gYQoJZGlyZWN0b3J5IGluc3RlYWQgb2YgYSBmaWxlLgoJRml4ZWQgRE9TRlNfR2V0VW5peEZpbGVOYW1lKCkgY2hlY2tfbGFzdCBmbGFnIGluIEZJTEVfTWFrZURpcigpLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCVJld3JvdGUgcHJvZmlsZSBoYW5kbGluZy4gU2hvdWxkIGJlIGNsb3NlciB0byBXaW5kb3dzIGJlaGF2aW9yIG5vdy4KCU5ldyBmdW5jdGlvbiBQUk9GSUxFX0dldFdpbmVJbmlTdHJpbmcoKSB0byBnZXQgYSBzdHJpbmcgZnJvbSB3aW5lLmNvbmYuCglTdXBwb3J0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB3aW5lLmNvbmYuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIHRoZSBvcmRlciBvZiBkZWxldGlvbiBpbiBUQVNLX0RlbGV0ZVRhc2soKSB0byBhdm9pZCBtZW1vcnkKCWNvcnJ1cHRpb24uCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQ3JlYXRlIGEgZGlzY2FyZGVkIGJsb2NrIG9uIEdsb2JhbEFsbG9jKCkgaWYgdGhlIHNpemUgaXMgMDsgdGhhbmtzCgl0byBKb2huIEhhcnZleSBmb3Igbm90aWNpbmcgdGhpcy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUxPQ0FMX0dldEhlYXA6IG1ha2Ugc3VyZSB0aGUgcG9pbnRlciBpcyB2YWxpZCBiZWZvcmUgY2hlY2tpbmcKCW1hZ2ljIG51bWJlci4KCgkqIFttaXNjL21haW4uY10KCU1vdmVkIHByb2ZpbGUgYW5kIHJlZ2lzdHJ5IHNhdmluZyB0byBFeGl0V2luZG93cygpLCBzbyB3ZSBkb24ndAoJdHJ5IHRvIHNhdmUgdGhlbSBpbiBjYXNlIG9mIGEgY3Jhc2guCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJSU5UMjFfR2V0RnJlZURpc2tTcGFjZTogdHJ5IHRvIGNvbXB1dGUgdGhlIGNsdXN0ZXIgc2l6ZSBmcm9tIHRoZQoJZmlsZXN5c3RlbSBzaXplIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgaXQgdG8gNjQuCglGaXhlZCBmdW5jdGlvbnMgMHgzZiBhbmQgMHg0MCB0byB1c2UgX2hyZWFkIGFuZCBfaHdyaXRlIHRvIGFsbG93CglyZWFkaW5nIG9yIHdyaXRpbmcgNjU1MzUgYnl0ZXMgKHRoYW5rcyB0byBCcnVjZSBNaWxuZXIgZm9yIHRoaXMJb25lKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBsaW5rZWQtbGlzdCBoYW5kbGluZyBpbiBNU0dfRGVsZXRlUXVldWUoKS4KCVNpbXBsaWZpZWQgU2V0TWVzc2FnZVF1ZXVlKCkuCgoJKiBbd2luZS5pbmldIFt3aW5lLm1hbl0KCVVwZGF0ZWQgZm9yIG5ldyBkcml2ZXMgY29uZmlndXJhdGlvbiBmb3JtYXQuCgpUdWUgSmFuIDMwIDExOjI0OjQ2IDE5OTYgIFdpbGxpYW0gTWFncm8gIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfUEFTU1dPUkQgc3R5bGUsIEVNX1NFVFBBU1NXT1JEQ0hBUiBhbmQKIAlFTV9HRVRQQVNTV09SRENIQVIgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRqdXN0ZWQgY2xhc3MgY3JlYXRpb24gZmxhZ3MgdG8gYmV0dGVyIG1hdGNoIHZhbHVlcyBXaW5kb3dzIHVzZXMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBFU19OT0hJREVTRUwgdHlwby4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIGRldGVjdGlvbiBmb3IgemVybyBvZmZzZXQgaW4gUkFERFIgZml4dXBzLiBRdWlja2VuCgl3YXMgaW4gYW4gaW5maW5pdGUgbG9vcCBoZXJlLgoKTW9uIEphbiAyOSAyMDoxMjoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJQnVnZml4OiByYW5nZSBlcnJvciBpbiBtb250aCB2YWx1ZSAoMC4uMTEgc2V0IHRvIDEuLjEyKS4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDaGFuZ2VkIFJPUDItbW9kZSB0byBSMl9OT1RYT1JQRU4gaW4gQ0FSRVRfQ2FsbGJhY2sgZm9yIHB1bHNlZAogCWFwcGVhcmFuY2Ugb2YgdGhlIGNhcmV0LgoKCSogW3dpbmRvd3MvbWRpLmNdIFtpbmNsdWRlL21kaS5oXQoJQ2hhbmdlZCBNRElUaWxlKCk6IGFkZGVkIGEgbmV3IHBhcmFtZXRlciBXT1JEIHdQYXJhbSBmb3IKIAlXTV9NRElUSUxFIHNlY29uZCB0aWxpbmcgbWV0aG9kIChNRElUSUxFX0hPUklaT05UQUwgaW4gd1BhcmFtKSBhcwogCXVzZWQgaW4gV2luMy4xCgpTdW4gSmFuIDI4IDE0OjIwOjAwIDE5OTYgIENhbWVyb24gSGVpZGUgIDxoZWlkZUBlZS51YWxiZXJ0YS5jYT4KCgkqIFttaXNjZW11L2ludDJmLmNdCglBZGRlZCBhIHNtYWxsIGJpdCBvZiBNU0NERVggZW11bGF0aW9uLgoKCSogW3dpbmRvd3MvYWxpYXMuY10KCUFMSUFTX1JlZ2lzdGVyQWxpYXMgd2FzIHJldHVybmluZyB0aGUgaGFzaCB2YWx1ZSB3aGVuIGl0IHNob3VsZAogCWhhdmUgYmVlbiByZXR1cm5pbmcgdGhlIHJlY29yZCBudW1iZXIuCgkKU2F0IEphbiAyNyAxMDo1Mzo1MSAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvc2hlbGwuaF0gW2luY2x1ZGUvd2ludHlwZXMuaF0KCU1vdmVkIGRlZmluaXRpb24gb2YgSEtFWSBhbmQgTFBIS0VZIHR5cGVzIHRvIGluY2x1ZGUvd2ludHlwZXMuaC4KCURlY2xhcmVkIEZPTlRFTlVNUFJPQyBpbiB3aW50eXBlcy5oLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBLRVJOSU5HUEFJUiBhbmQgTFBLRVJOSU5HUEFJUiB0eXBlcy4gIEFkZGVkCglkZWNsYXJhdGlvbnMgZm9yIENvcHlDdXJzb3IoKSwgQ29weUljb24oKSwgRW51bUZvbnRGYW1pbGllcygpLAoJRXh0cmFjdEljb24oKSwgRmF0YWxBcHBFeGl0KCksIEZpbmRFeGVjdXRhYmxlKCksIEdldENsaXBDdXJzb3IoKSwKCUdldEtlcm5pbmdQYWlycygpLCBHZXRRdWV1ZVN0YXR1cygpLCBHZXRSYXN0ZXJpemVyQ2FwcygpLAoJSXNHRElPYmplY3QoKSwgSXNNZW51KCksIElzVGFzaygpLCBSZWdDbG9zZUtleSgpLCBSZWdDcmVhdGVLZXkoKSwKCVJlZ0RlbGV0ZUtleSgpLCBSZWdFbnVtS2V5KCksIFJlZ09wZW5LZXkoKSwgUmVnUXVlcnlWYWx1ZSgpLAoJUmVnU2V0VmFsdWUoKSwgUmVzZXREQygpLCBTaGVsbEV4ZWN1dGUoKSwgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSwKCWFuZCB3c3ByaW50ZigpLgoKCSogW3Rvb2xzL21ha2VodG1sLnBsXSBbZG9jdW1lbnRhdGlvbi9hcGl3LmluZGV4XQoJTmV3IGZpbGVzIHRoYXQgc2NhbiB3aW5kb3dzLmgsIGNvbW1kbGcuaCwgYW5kIHRvb2xoZWxwLmggYW5kIG91dHB1dAoJYW4gSFRNTCBzb3J0ZWQgbGlzdCB3aXRoIG9wdGlvbmFsIGxpbmtzIHRvIHd3dy53aWxsb3dzLmNvbSBhbmQgYQoJdGFsbHkgb2YgdW5pbXBsZW1lbnRlZCBBUElXIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUFkZGVkIFdpbjMyIHZlcnNpb25zIG9mIENvcHlJY29uKCkgYW5kIENvcHlDdXJzb3IoKSBmb3IgdXNlIGluCglsaWJ3aW5lLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFt3aW4zMi93aW5wcm9jcy5jXQoJQWRkZWQgJyNpbmNsdWRlICJsaWJyZXMuaCInIGFuZCBleHBsaWNpdCBkZWNsYXJhdGlvbnMgb2Ygd2luZG93cwoJcHJvY3MgaW4gb3JkZXIgdG8gYXZvaWQgd2FybmluZ3MuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglBZGRlZCBXaW4zMiB2ZXJzaW9uIG9mIE11bERpdigpIGZvciBsaWJ3aW5lLgoKCSogWyovKl0gW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhbmdlZCBzZXZlcmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0byBjb21wbHkgbW9yZSBzdHJpY3RseSB0bwoJdGhlIHdpbmRvd3MgQVBJICh3aXRob3V0LCBob3BlZnVsbHksIGFsdGVyaW5nIHRoZWlyIGZ1bmN0aW9uYWxpdHkpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1hZGUgdGhlIHJldHVybiB2YWx1ZSBvZiBDaGVja01lbnVJdGVtIGJlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZgogCXRoZSBtZW51IGl0ZW0gaWYgaXQgd2FzIGZvdW5kLCBvdGhlcndpc2UgLTEgYXMgc3BlY2lmaWVkIGluIHRoZQogCVNESy4gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgQVBJVyBzcGVjaWZpY2F0aW9uLCB3aGljaCBzYXlzIGl0CiAJc2hvdWxkIHJldHVybiBUUlVFIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBGQUxTRS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG9ic29sZXRlIFdNX1NJWkUgbWVzc2FnZSB3UGFyYW0gbmFtZXMgZm9yIGNvbXBhdGliaWxpdHkuCiAgCUFkZGVkIFdpbkhlbHAoKSBjb21tYW5kIGNvbnN0YW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHlldAogCXN1cHBvcnRlZC4KCgkqIFtyYy93aW5lcmMuY10KCVRpZGllZCB1cCB0cmFuc2Zvcm1fYmluYXJ5X2ZpbGUoKS4gIEluIGFyZ3VtZW50IGNoZWNraW5nLCBmbGF0dGVuZWQKCWFueSBpbnZhbGlkIGNoYXJhY3RlcnMgc3BlY2lmaWVkIHdpdGggdGhlIHByZWZpeCBhcmd1bWVudC4KCgkqIFtsaWJyYXJ5L2xpYnJlcy5jXQoJTWFkZSBGaW5kUmVzb3VyY2UoKSBjYXNlLWluc2Vuc2l0aXZlIHdoZW4gcGFyYW1ldGVyICduYW1lJyBpcyBhIHN0cmluZy4KClNhdCBKYW4gMjcgMDI6MzAgMTk5NiAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlCgoJKiBbZmlsZXMvZHJpdmUuY10KCUlmIHJvb3QgIi8iIGlzIGdpdmVuIGluIHdpbmUuY29uZiwgdXNlIGl0IGFzIGxhc3QgcmVzb3J0LgoKCSogW2ZpbGVzL2ZpbGUuY10KCVJlcG9ydCBFUl9BY2Nlc3NEZW5pZWQgaXQgZGlzayBpc3Qgbm90IHdyaXRhYmxlCglNb3JlIERlYnVnIE91dHB1dAoKCSogW21pc2NlbXUvaW50MjEuY10KCVNxdWVlemVkIHNvbWUgYnVncyBpbiBFeHRlbmRlZE9wZW5DcmVhdGVGaWxlCgkKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTb21lIHdpbmRvd3MgbWF5IG5vdCBiZSBtb3ZlZCBvciByZXNpemVkLiBXZSBhcmUgbWlzc2luZyBzb21lCglzdHJ1Y3R1cmVzIHRvIGJlIGV4YWN0LCBidXQgdGhlIGFwcHJvYWNoIHNob3VsZCBoZWxwIGluIHNvbWUgY2FzZXMKCWFuZCBtYWtlIHRoaW5ncyB3b3JzZSBpbiBtdWNoIGZld2VyLgoKRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJZml4dXBfaW1wb3J0czogRmluZCBidWlsdGlucyBmb3IgQm9ybGFuZCBzdHlsZSBlbnRyaWVzLCB0b28KCkZyaSBKYW4gMjYgMTA6MjQ6MDAgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglMb2FkTWVudTogYnJhbmNoIHRvIFdpbjMyIGZvciBQRSBtb2R1bGVzCgoJKiBbaWYxNjMyL2dkaS5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQoJRGVsZXRlT2JqZWN0LCBHZXRQaXhlbCwgU2V0UGl4ZWwsV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZ0EsCglXcml0ZVByb2ZpbGVTdHJpbmdBLCBFbXB0eUNsaXBib2FyZCwgRW5hYmxlTWVudUl0ZW0sIEVuYWJsZVNjcm9sbEJhciwKCUVuYWJsZVdpbmRvdywgSW52YWxpZGF0ZVJlY3QsIFNldFdpbmRvd1RleHRBLCBXaW5IZWxwQTogbmV3IHJlbGF5cwoJRHJhd1RleHRBLCBNb3ZlVG9FeCwgR2V0Q2xpZW50UmVjdCwgSW52YWxpZGF0ZVJlY3QsIExvYWRCaXRtYXBBL1csCglMb2FkQWNjZWxlcmF0b3JzQS9XLCBMb2FkTWVudVtJbmRpcmVjdF1BL1csIExvYWRTdHJpbmdBL1c6IGNoYW5nZWQKCXRvIGNvbnZlcnQgcGFyYW1ldGVycyBvciBuYW1pbmcgY29udmVudGlvbgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF1baW5jbHVkZS93aW50eXBlcy5oXQoJbW92ZWQgV0NIQVIsIGRlZmluZWQgTFBXU1RSCgoJKiBbaW5jbHVkZS9zdHJpbmczMi5oXVt3aW4zMi9zdHJpbmczMi5jXVtpbmNsdWRlL3N0cnVjdDMyLmhdCglOZXcgZmlsZXMKCgkqIFtsb2FkZXIvbW9kdWxlLmhdCglMb2FkTW9kdWxlOiBleGl0IGFmdGVyIHJldHVybmluZyBmcm9tIFBFX0xvYWRNb2R1bGUKCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCW15X3djc3RvbWJzOiBpc2FzY2lpIGRvZXMgbm90IHdvcmsgb24gTGludXggZm9yIFVuaWNvZGUKCVBFX0xvYWRJbWFnZTogSGFuZGxlIGRpcmVjdG9yaWVzCgoJKiBbbWlzYy91c2VyMzIuY10KCVVTRVIzMl9SRUNUMzJ0bzE2LCBVU0VSMzJfUkVDVDE2dG8zMjogbmV3IGZ1bmN0aW9ucwoJaW1wbGVtZW50ZWQgbmV3IHVzZXIzMiByZWxheXMKCgkqIFttaXNjL25ld2Zucy5jXQoJV0lOMzJfV2luSGVscEE6IG5ldyBmdW5jdGlvbgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCU5ldyBmaWxlCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KCUdldFJlc0RpckVudHJ5OiBhZGRlZCBzdXBwb3J0IGZvciBuYW1lZCBlbnRyaWVzCglXSU4zMl9Mb2FkQWNjZWxlcmF0b3JzVzogaW52b2tlICozMiByZXNvdXJjZSBmdW5jdGlvbnMKCVdJTjMyX0xvYWRCaXRtYXBBOiBjb252ZXJ0IG5hbWUgdG8gdW5pY29kZSBpZiBhcHByb3ByaWF0ZQoJV0lOMzJfUGFyc2VNZW51OiBuZXcgZnVuY3Rpb24KCWltcGxlbWVudGVkIG5ldyByZXNvdXJjZSBmdW5jdGlvbnMgZnJvbSB1c2VyMzIuc3BlYwoKV2VkIEphbiAyNCAxODowOTowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJR2V0SWNvbklkKCkgYW5kIExvYWRJY29uSGFuZGxlcigpIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQmV0dGVyIG1heGltaXphdGlvbiBzdXBwb3J0LCBUcmFuc2xhdGVNRElTeXNBY2NlbCgpIGZ1bmN0aW9uLCAKCW1pc2MgaW1wcm92ZW1lbnRzLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglGaXggZm9yIFdNX1dJTkRPV1BPU0NIQU5HRUQgbWVzc2FnZSBoYW5kbGVyLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXdyb3RlIFdpbmRvd0Zyb21Qb2ludCgpIGZ1bmN0aW9uLgoKU3VuIEphbiAyMSAxOTk2IDE3OjA1OjA5ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFttaXNjL3Rvb2xoZWxwLmNdCglBZGRlZCBOb3RpZnkoVW4pUmVnaXN0ZXIsIGJ1dCBubyBjYWxsYmFja3MgeWV0LgoKRnJpIEphbiAxOSAwMTo0MzozNyAxOTk2IFZpY3RvciBTY2huZWlkZXIgPHJvb3RAdGFpbG9yLnJvbWFuLm9yZz4KCgkqIFtNYWtlZmlsZS5pbl0KCUFkZGVkIHRhcmdldCBmb3IgbGlid2luZS5zby4xLjAuCgoJKiBbbGlicmFyeS93aW5tYWluLmNdCglGb3IgV0lORUxJQkRMTCwgX1dpbk1haW4ganVzdCByZXR1cm5zIGhJbnN0YW5jZSBpbnN0ZWFkIG9mIGNhbGxpbmcKCVdpbk1haW4oKS4KCgkqIFttaXNjL21haW4uY10KCUZvciBXSU5FTElCRExMLCByZW5hbWVkIG1haW4oKSB0byBfd2luZV9tYWluKCkgZm9yIGNhbGxpbmcgZnJvbSB0aGUKCXN0dWIgbWFpbiBmdW5jdGlvbi4KCgkqIFtsaWJyYXJ5L3dpbmVzdHViLmNdIChuZXcgZmlsZSkKCVByb3ZpZGVzIGEgc3R1YiBtYWluKCkgZnVuY3Rpb24gZm9yIHVzaW5nIGxpYndpbmUuc28uCgpUdWUgSmFuIDE2IDExOjA0OjM0IDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFt3aW5zb2NrZXQuY10KCUZpeCBFUEVSTSBwcm9ibGVtLgoKCSogW2dsb2JhbC5jXQoJQXR0ZW1wdCB0byBkbyBzb21lIHNhbml0eSBjaGVja2luZyBpbiBNZW1NYW5JbmZvKCkuCgoJKiBbQ2hhbmdlbG9nXQoJRml4IGNoYW5nZWxvZyBvdmVyc2lnaHQgZm9yIHByZXZpb3VzIGVudHJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTQgMTM6NDU6MjIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNoZWNrIGZvciBnY2Mgc3RyZW5ndGgtcmVkdWNlIGJ1Zy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDaGFuZ2VkIExpc3RCb3hEaXJlY3RvcnkoKSB0byB1c2UgdGhlIG5ldyBET1MgZmlsZSBmdW5jdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgcGFyYW1ldGVycyBmb3IgRGVsZXRlTWVudSgpIGNhbGwgaW4gQ2hhbmdlTWVudSgpLgoKCSogW2RlYnVnZ2VyL3N0YWNrLmNdCglBbHNvIGRpc3BsYXkgY3VycmVudCBmcmFtZSBpbiBiYWNrLXRyYWNlLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9kcml2ZS5jXSBbZmlsZXMvZmlsZS5jXQoJQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgRE9TIGZpbGUgaGFuZGxpbmcuCglJbXBsZW1lbnRlZCBwZXItdGFzayBmaWxlIGhhbmRsZXMuCglSZW1vdmVkIGRlZmF1bHQgWjogZHJpdmU7IG5lZWRzIHRvIGJlIHB1dCBleHBsaWNpdGVseSBpbiB3aW5lLmluaQoJaWYgZGVzaXJlZC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBMb2FkTW9kdWxlKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUluaXRpYWxpc2UgUERCIGZpbGUgaGFuZGxlIHRhYmxlIGluIFRBU0tfQ3JlYXRlVGFzaygpLgoJQ2xvc2UgZmlsZSBoYW5kbGVzIG9uIHRhc2sgdGVybWluYXRpb24uCglJbXBsZW1lbnRlZCBTZXRFcnJvck1vZGUoKS4KCgkqIFttaXNjL25ldHdvcmsuY10KCUZpeGVkIFdOZXRHZXRDb25uZWN0aW9uKCkgdG8gdXNlIEdldERyaXZlVHlwZSgpLgoKCSogW21pc2MveG1hbGxvYy5jXQoJQWRkZWQgZnVuY3Rpb24geHN0cmR1cCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCU1hbnkgY2hhbmdlcyBmb3IgbmV3IERPUyBmaWxlIGZ1bmN0aW9ucy4KCgkqIFttaXNjZW11L2ludGVycnVwdHMuY10KCU1vdmVkIERPU19HZXRFcXVpcG1lbnQoKSBmdW5jdGlvbiBpbnRvIElOVF9JbnQxMUhhbmRsZXIoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeDogY3JlYXRlIHN5c3RlbSBtZW51IGJlZm9yZSBzZW5kaW5nIFdNX05DQ1JFQVRFLgoKCSogWyovKi5jXQoJUmVwbGFjZWQgc3RyY2FzZWNtcCBhbmQgc3RybmNhc2VjbXAgYnkgbHN0cmNtcGkgYW5kIGxzdHJuY21waSBmb3IKCWJldHRlciBwb3J0YWJpbGl0eS4KClNhdCBKYW4gMTMgMTY6MTM6MDIgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAndHlwZWRlZiBIR0xPQkFMIEdPQkFMSEFORExFOycuICBUaGlzIGlzIG5vdCBwcmVjaXNlbHkgaW4gbGluZQoJd2l0aCB0aGUgdHJ1ZSB3aW5kb3dzICd0eXBlZGVmIEhBTkRMRSBHTE9CQUxIQU5ETEU7JywgYnV0IEkgYmVsaWV2ZQoJaXQgc2hvdWxkIHN1ZmZpY2UuCgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglBZGRlZCAnI2luY2x1ZGUgPGFycGEvaW5ldC5oPicgZm9yIHZhcmlvdXMgZGVjbGFyYXRpb25zLiAgJyNpZmRlZictZWQKCW91dCBzb21lIG9sZCBzdHlsZSBpbnRlcm5ldCBhZGRyZXNzICNkZWZpbmUncy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJTWFkZSBNYWtlUHJvY0luc3RhbmNlKCkgcmV0dXJuIGZpcnN0IHBhcmFtZXRlciAjaWZkZWYgV0lORUxJQjMyLgoJTWFkZSBGcmVlUHJvY0luc3RhbmNlKCkgZG8gbm90aGluZyAjaWZkZWYgV0lORUxJQjMyLgoJJyNpZmRlZictZWQgb3V0IFRBU0tfQWxsb2NUaHVuaygpLCBhcyBpdCB3YXMgdW51c2VkIGluIFdJTkVMSUIzMi4KCgkqIFtsaWJyYXJ5L21pc2NzdHVicy5jXQoJTWFkZSBHZXRXbmRQcm9jRW50cnkxNigpIHJldHVybiBBQ1RJVkFURUFQUF9jYWxsYmFjaygpIHdoZW4gY2FsbGVkCgl3aXRoIG5hbWU9IkFjdGl2YXRlQXBwUHJvYyIuICBUaGlzIGhhcmRseSBzZWVtcyBjb3JyZWN0LCBidXQgaXQncyBteQoJYmVzdCBndWVzcyBhcyB0byBob3cgdGhlIGVtdWxhdG9yIHJlc3BvbmRzLgoKU2F0IEphbiAgNiAxNzo1Nzo0NSAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9wcm9jZXNzLmNdCglXSU4zMl9HZXRQcm9jQWRkcmVzcywgTG9hZExpYnJhcnlBOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10KCVJFTEFZMzJfR2V0RW50cnlQb2ludDogUmVtb3ZlZCBjb2RlIHRvIGxvYWQgUEUgRExMcwoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF1baW5jbHVkZS9wZV9leGUuaF0KCXN0cnVjdCBwZV9kYXRhOiBuZXcgZmllbGRzIGJhc2VfYWRkcixsb2FkX2FkZHIsdm1hX3NpemUscGVfcmVsb2MKCXN0cnVjdCBQRV9SZWxvY19CbG9jazogbmV3IHN0cnVjdHVyZQoKCSogW2xvYWRlci9tb2R1bGUuY10KCU1PRFVMRV9SZWdpc3Rlck1vZHVsZTogbmV3IGZ1bmN0aW9uCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbixQRV9HZXRQcm9jQWRkcmVzczogbmV3IGZ1bmN0aW9ucwoJZml4dXBfaW1wb3J0czogZXhwZWN0IHN0cnVjdCB3X2ZpbGVzKiBub3csIGZpbGwgZGxsc190b19pbml0LAoJICAgICAgICAgICAgICAgbG9hZCBQRSBETExzCglkb19yZWxvY2F0aW9uczogbmV3IGZ1bmN0aW9ucwoJY2FsY192bWFfc2l6ZTogcmVuYW1lZCBmcm9tIGR1bXBfdGFibGUKCVBFX0xvYWRJbWFnZTogdXNlIG1hbGxvYyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGltYWdlCglQRV9Jbml0RExMOiBleHBlY3QgSE1PRFVMRQoJUEVfSW5pdGlhbGl6ZURMTHM6IG5ldyBmdW5jdGlvbgoKCSogW2xvYWRlci90YXNrLmNdCglORV9Jbml0aWFsaXplRExMczogYnJhbmNoIHRvIFBFX0luaXRpYWxpemVETExzIGZvciBQRSBtb2R1bGVzCglHZXRFeGVQdHI6IEFjY2VwdCBQRSBtb2R1bGVzCgoJKiBbbWlzYy9jb21tZGxnLmNdCglGSUxFRExHX1dNQ29tbWFuZDogdW5wYWNrIFdJTjMyIFdNX0NPTU1BTkQgYXBwcm9wcmlhdGVseSBmb3IgV2luZUxpYgoKVGh1IEphbiAgNCAxMTozNjoyMSAxOTk2ICBNYW5mcmVkIFdlaWNoZWwgPE1hbmZyZWQuV2VpY2hlbEBtY2guc25pLmRlPgoKCSogW21pc2MvcG9ydC5jXQoJTmV3IGZpbGUgd2l0aCB1c2xlZXAoKSBmdW5jdGlvbiBmb3IgU1ZSNC4KCgkqIFtjb25maWd1cmUuaW5dCglDaGVjayBmb3IgdXNsZWVwKCkgZnVuY3Rpb24uCgpUdWUgSmFuIDAyIDE0OjAwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0KCSAgW21pc2MvdXNlci5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnQgVE9PTEhFTFAuODAgVGltZXJDb3VudC4gRml4IEdldFRpY2tDb3VudC4KCgkqIFt3aW5zb2NrZXQuY10KCUZpeGVkIEVOT0VOVCBlcnJvci4KCgkqIFttaXNjZW11L2RwbWkuY10KCUltcGxlbWVudCBEUE1JIEdldCBQYWdlIFNpemUgKEFYPTA2MDQsIElOVCAzMSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnQgVE9PTEhFTFAuNzIgR2V0TWVtTWFuSW5mby4KCk1vbiBKYW4gIDIgMTA6MzM6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxXaW5kb3dQcm9jKCkgLSBXaGVuIGNhbGxpbmcgUkVMQVkzMl9DYWxsV2luZG93UHJvYywgY2hlY2sKCXdoZXRoZXIgbFBhcmFtIHNob3VsZCBiZSBhIFNFR1BUUiwgYW5kIGlmIHNvIGNvbnZlcnQgaXQgdG8gb25lLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJTnVtZXJvdXMgZnVuY3Rpb25zIGFkZGVkLCBtb3N0bHkgY2FsbHMgdG8gb3JpZ2luYWwgKHdpbjE2KQogCWZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBzb21lIChtYW55KSBvZiB0aGVzZSBhcmUgcHJvYmFibHkgbm90CiAJc3RyaWN0bHkgY29ycmVjdCwgYnV0IHdpdGggdGhlc2UgYWRkaXRpb25zIGZyZWVjZWxsIHdpbGwgYXQgbGVhc3QKIAlkaXNwbGF5IGl0cyBtYWluIHdpbmRvdyB0aG91Z2ggaXQgaXMgZ2FyYmxlZC4KCgkqIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUNvbXBsZXRlbHkgcmV3cml0dGVuIC0gYWxsIFduZFByb2NzIG5vdyBoYXZlIHdpbjMyIHZlcnNpb25zIHRvCgloZWxwIHdpdGggdGhlIGxwYXJhbSBTRUdQVFIgZml4IGluIGNhbGxiYWNrLmMKCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdCglMUFRDU1RSIGRlZmluZWQuCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJRGVmaW5pdGlvbiBvZiBQRV9FeHBvcnRfRGlyZWN0b3J5IGFtZW5kZWQuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCglOZXcgZmlsZS4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCURlZmluaXRpb24gb2YgTUFLRV9TRUdQVFIgbWFjcm8gI2lmZGVmJ2Qgb3V0IGFuZCByZXBsYWNlZCB3aXRoCglwcm90b3R5cGUgZm9yIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGluIG1lbW9yeS9zZWxlY3Rvci5jIHdoaWNoCgljYW4gb3BlcmF0ZSBvbiBhbnkgZ2l2ZW4gbWVtb3J5IGFkZHJlc3MuIFRoaXMgaXMgY3VycmVudGx5CglyZXF1aXJlZCBmb3Igd2luMzIgc3VwcG9ydC4gSXQgaXMgYSBkcmVhZGZ1bCBjbHVkZ2UsIGFuZCB3aWxsCgljZXJ0YWlubHkgc2xvdyBkb3duIG90aGVyIHByb2dyYW1zLiBJZiB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkCglpbiB3aW4zMiBkZXZlbG9wbWVudCB5b3UgbWF5IHdpc2ggdG8gcmV2ZXJzZSB0aGlzIHBhdGNoLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5pdGlvbiBvZiBTV19TSE9XREVGQVVMVCBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUV4dGVuc2l2ZSByZXdyaXRlcyBvZiB4bW1hcCgpIGZpeHVwX2ltcG9ydHMoKS4KCVBFX0xvYWRJbWFnZSgpIC0gaW5pdGlhbGlzYXRpb24gb2YgYnNzIGFkZGVkLCBleHRyYWN0aW9uIG9mCgltb2R1bGUgbmFtZSBmaXhlZCwgaW5pdGlhbGlzYXRpb24gb2YgRExMIGFkZGVkLgoJUEVfSW5pdERMTCgpIC0gbm93IGRvZXMgc29tZXRoaW5nLgoJUEVfV2luMzJDYWxsVG9TdGFydCgpIC0gaW5pdGlhbGlzYXRpb24gb2YgVEVCIHBvaW50ZWQgdG8gYnkKCWZzIGFkZGVkLgoJUEVfSW5pdFRFQigpIGNyZWF0ZWQgdG8gcGVyZm9ybSBURUIgaW5pdGlhbGlzYXRpb24uCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIAoJTmV3IGZ1bmN0aW9uIE1BS0VfU0VHUFRSKCkgLSBzZWUgaW5jbHVkZS9zdGFja2ZyYW1lLmggYWJvdmUuCgoJKiBbbWlzYy91c2VyMzIuY10KCVVTRVIzMl9SZWdpc3RlckNsYXNzQSgpLCBDcmVhdGVXaW5kb3dFeEEoKSBtZW1vcnkgYWxsb2NhdGlvbgoJbWV0aG9kIGNoYW5nZWQuIFRoaXMgaXMgcHJvYmFibHkgbm93IHVubmVjZXNzYXJ5IHdpdGggdGhlCgluZXcgTUFLRV9TRUdQVFIgaGFuZGxpbmcgY29kZS4KCVVTRVIzMl9EZWZXbmRQcm9jQSgpIHJlbW92ZWQgdG8gd2luMzIvd2lucHJvY3MuYwoJVVNFUjMyX1RyYW5zbGF0ZU1lc3NhZ2UgYWRkZWQuCgoJKiBbdG9vbHMvYnVpbGQuY10KCWhhbmRsaW5nIG9mIHdpbjMyIHNwZWMgZmlsZXMgY2hhbmdlZCB0byBzdXBwb3J0IGdjYzIuNi5YCgl0aGlzIHJlcXVpcmVzIG9wdGltaXNhdGlvbnMgdG8gYmUgZGlzYWJsZWQuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW3dpbjMyL25ld2Zucy5jXSBbd2luMzIvaGVhcC5jXSBbd2luMzIvd2lucHJvY3MuY10KCU5ldyBmaWxlcy4KCgkqIFt3aW4zMi9NYWtlZmlsZS5pbl0KCU5ldyBmaWxlcyBoZWFwLmMsIG5ld2Zucy5jLCByZXNvdXJjZS5jIGFuZCB3aW5wcm9jcy5jIGFkZGVkIHRvIGJ1aWxkLgoKCSogW3dpbjMyL2ZpbGUuY10KCU5ldyBmdW5jdGlvbiBXMzJfU2V0SGFuZGxlQ291bnQuCgoJKiBbd2luMzIvaW5pdC5jXQoJV0lOMzJfR2V0TW9kdWxlSGFuZGxlKCkgLSBub3cgcmV0dXJucyBoYW5kbGUgb2YgcnVubmluZyBwcm9jZXNzCglpZiBjYWxsZWQgd2l0aCBOVUxMLgoJR2V0U3RhcnR1cEluZm9BKCkgLSBzZXQgY2JSZXNlcnZlZDIgdG8gMC4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVZpcnR1YWxBbGxvYygpIC0gc2V0IG1tYXAoKSBmaWxlIHBhcmFtZXRlciB0byAtMSBpbnN0ZWFkIG9mIDAgdG8gbWFrZQoJaXQgd29yayB3aXRoIEZyZWVCU0QuIEFsc28gY2hlY2sgZm9yIHJldHVybiB2YWx1ZS4gUmVtb3ZlZCBleHRyYQoJcmV0dXJuLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTaG93V2luZG93KCkgLSBTV19TSE9XREVGQVVMVCBoYW5kbGluZyBrbHVkZ2VkIGluLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgRGVjIDIzIDE4OjE1OjU5IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZS5pbl0gW3Rvb2xzL2luc3RhbGwtc2hdCglOZXcgJ2luc3RhbGwnIHRhcmdldCBpbnN0YWxscyBXaW5lIGJpbmFyeSwgbGlicmFyeSBhbmQgbWFuIHBhZ2UuCglMaWJyYXJ5IGlzIG5vdyBtb3JlIGxvZ2ljYWxseSBuYW1lZCBsaWJ3aW5lLmEuCglTcGxpdCB0b29sa2l0LyBkaXJlY3RvcnkgaW50byBsaWJyYXJ5IChmb3IgbGlicmFyeSBjb2RlKSBhbmQKCWxpYnRlc3QgKGZvciB0ZXN0IHByb2dyYW1zKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglRdWljayBoYWNrIHRvIHBhcnRpYWxseSBzdXBwb3J0IEVNX1BBU1NXT1JEIHN0eWxlIChhdm9pZHMKCWRpc3BsYXlpbmcgeW91ciBwYXNzd29yZHMgb24gdGhlIHNjcmVlbiB3aGVuIHRlc3RpbmcgcHJvZ3JhbXMuLi4pCgoJKiBbY29uZmlndXJlLmluXSBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJICBbbWlzYy9jb21tZGxnLmNdIFttaXNjL29sZTJubHMuY10gW21pc2Mvc2hlbGwuY10gW3dpbmRvd3MvbXNnYm94LmNdCglMYW5ndWFnZSBpcyBub3cgYSBydW4tdGltZSBvcHRpb24gKHdpbmUgLWxhbmd1YWdlIHh4KS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUR1bXAgc29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvIG9uIGNyYXNoLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJT25seSBjb25zaWRlciAnOycgYXMgYSBjb21tZW50IGlmIGl0J3MgdGhlIGZpcnN0IG5vbi1ibGFuawoJY2hhcmFjdGVyIG9uIHRoZSBsaW5lLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJTW9yZSBkZWJ1Z2dpbmcgaW5mbyBmb3IgcmVhbC1tb2RlIGNhbGxiYWNrLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZXdyb3RlIEVudW1PYmplY3RzKCkgdG8gZG8gdGhlIFJpZ2h0IFRoaW5nLgoKCSogW3Jlc291cmNlcy9zeXNyZXMqXQoJTmV3IGRpcmVjdG9yeSBjb250YWluaW5nIHN5c3RlbSByZXNvdXJjZXMuCgpGcmkgRGVjIDIyIDExOjI0OjM5IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFt3aW4zMi9maWxlLmNdIFt3aW4zMi9tZW1vcnkuY10KICAgICAgICBVbml4d2FyZSBkb2Vzbid0IGhhdmUgTUFQX0FOT04gaWZkZWZlZCBvdXQgZm9yIG5vdy4KCgkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIERPU19HZXREb3NGaWxlTmFtZSBkaWRuJ3QgdHJ1bmNhdGUgcGF0aHMgc3RhcnRpbmcgLi8gcHJvcGVybHkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVByb2R1Y2VzIGFzc2VtYmx5IGNvZGUgdGhhdCB3b3JrcyB3aXRoIHRoZSB1bml4d2FyZSBhc3NlbWJsZXIuCgpXZWQgRGVjIDIwIDIyOjIyOjI5ICswMTAwIDE5OTUgIE1vcnRlbiBXZWxpbmRlciA8dGVycmFAZGlrdS5kaz4KCgkqIFttaXNjZW11L2luc3RyLmNdCglJTlNUUl9HZXRPcGVyYW5kQWRkcjogMTYtYml0IGFkZHJlc3NlcyBzaG91bGQgYmUgbWFza2VkIHRvIDE2IGJpdHMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19yZWFkZGlyIHNob3VsZCBhbHdheXMgcmV0dXJuIGRpcmVjdG9yaWVzLCBldmVuIGlmIHRoZXkgZG9uJ3QKIAltYXRjaCB0aGUgZmlsZSBuYW1lIG1hc2suCgpUdWUgRGVjIDE5IDE4OjAwOjAwIDE5OTUgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCQoJKiBbbWlzYy9leGVjLmNdCglHaXZlIGFyZ3VtZW50cyB0byB3aW5oZWxwLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUltcGxlbWVudGVkIEludGVycnVwdCAyMSBBWD02QzAwIEVYVEVOREVEIE9QRU4vQ1JFQVRFLgoJQ3JlYXRlZCBmdW5jdGlvbiBFeHRlbmRlZE9wZW5DcmVhdGVGaWxlLgoJR2l2ZSBmb3Igc29tZSBXaW5kb3dzOTUgaW50ZXJydXB0cyB0aGUgcmV0dXJuIHZhbHVlICdub3QKCWltcGxlbWVudGVkJy4KClN1biBEZWMgMTcgMTY6NTE6NTYgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCB0aGUgdHlwZWRlZnMgZm9yIFNZU1RFTVRJTUUgYW5kIExQU1lTVEVNVElNRSBmcm9tCiAJaW5jbHVkZS9rZXJuZWwzMi5oIHRvIGluY2x1ZGUvd2luZG93cy5oIGFuZCBkZWNsYXJlZCB0aGUgbmV3IFdpbjMyCiAJQVBJIGZ1bmN0aW9ucyBTbGVlcCgpLCBHZXRMb2NhbFRpbWUoKSwgYW5kIEdldFN5c3RlbVRpbWUoKS4KICAJUmVkZWZpbmVkIElORklOSVRFIGFzIDB4RkZGRkZGRkYgaWYgV0lORUxJQjMyLgoKCSogW3JjL3JjIChuZXcgZmlsZSldCglDcmVhdGVkIHRoZSBzaGVsbCBzY3JpcHQgJ3JjJywgd2hpY2ggc2hvdWxkIHNpbXBsaWZ5IHJlc291cmNlCiAJY29tcGlsYXRpb24uCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10KCUtsdWRnZWQgYXJvdW5kIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gd2luZV9maWxlcy4gIFRoaXMgY2hhbmdlCiAJc2hvdWxkIGJlIGZpeGVkIHNvbWUgdGltZS4KCgkqIFt3aW4zMi90aW1lLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIHRoZSBmdW5jdGlvbnMgR2V0U3lzdGVtVGltZSgpLCBhbmQgU2xlZXAoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglSZW5hbWVkIHN0YXRpYyBmdW5jdGlvbiBHZXRTeXN0ZW1UaW1lIHRvIElOVDIxX0dldFN5c3RlbVRpbWUgdG8KIAlhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgQVBJIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgdGhlIFNQRk1UIGRlZmluaXRpb24gZm9yIHByaW50ZiBzdGF0ZW1lbnRzLgoKCSogW21pc2Mvc2hlbGwuY10gW2luY2x1ZGUvc2hlbGwuaF0KCUNoYW5nZWQgRVJST1JfKiBkZWZpbmVzIHRvIFNIRUxMX0VSUk9SXyosIGFzIHRoZXkgd2VyZSBjb25mbGljdGluZwogCXdpdGggdGhlIG9uZXMgaW4gaW5jbHVkZS93aW5lcnJvci5oLiAgVGhleSBzaG91bGQgcHJvYmFibHkgdXNlIHRoZQogCXZlcnNpb25zIGluIHdpbmVycm9yLmgsIGJ1dCBJJ20gbm90IGNlcnRhaW4sIGFuZCB0aGF0IGNhbiBiZSBkb25lCiAJbGF0ZXIuCgoJKiBbd2luZG93cy9tZGkuY10KCVRyYW5zbGF0ZWQgV01fTURJQUNUSVZBVEUoPywoTE9od25kLEhJaHduZCkpIG1lc3NhZ2VzIHRvCiAJV01fTURJQUNUSVZBVEUoSElod25kLExPaHduZCkgZm9yIFdJTkVMSUIzMi4gIFRoZSA/IHBhcmFtZXRlcgogCShib29sZWFuKSB3YXMgZGlzY2FyZGVkIHdpdGggdGhpcyB0cmFuc2xhdGlvbi4gIFRyYW5zbGF0ZWQgaGFuZGxlcgogCW9mIFdNX01ESVNFVE1FTlUocmVmLChsb0hNRU5VLGhpSE1FTlUpKSB0byBoYW5kbGUKIAlXTV9NRElTRVRNRU5VKGxvSE1FTlUsIGhpSE1FTlUpIG1lc3NhZ2VzIGluIFdJTkVMSUIzMiAocmVmIGFzc3VtZWQKIAlmYWxzZSwgY2FsbCBEcmF3TWVudUJhcigpIGlmIGRlc2lyZWQpLgoKCSogWyovKl0KCUdlbmVyYWwgZXhwbGljaXQgY2FzdHMgYW5kIG1vcmUgcmlnaWQgdHlwaW5nIHRvIHJlbW92ZSB3YXJuaW5ncy4KCgkqIFtpbmNsdWRlL3dpbnBvcy5oXSBbd2luZG93cy93aW5wb3MuY10KCUNoYW5nZWQgcmV0dXJuIHR5cGUgb2YgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyB0byBCT09MLgoKCSogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCglBZGRlZCBwcm90b3R5cGVzIGZvciBDaG9vc2VDb2xvcigpLCBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLAogCUZpbmRUZXh0KCkgR2V0RmlsZVRpdGxlKCksIEdldE9wZW5GaWxlTmFtZSgpLCBHZXRTYXZlRmlsZU5hbWUoKSwKIAlQcmludERsZywgYW5kIFJlcGxhY2VUZXh0KCkuCglSZW5hbWVkIHRoZSBDb21tRGxnRXh0ZW5kRXJyb3IoKSBmdW5jdGlvbiB0byBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLgoJTWFkZSBHZXRGaWxlVGl0bGUgcmV0dXJuIGEgc2hvcnQsIGFzIHBlciB0aGUgQVBJIGRlZmluaXRpb24uCgoJKiBbTWFrZWZpbGUuaW5dCglBZGRlZCBsaW5lIHRvIGNsZWFuIGFuZCBkaXN0Y2xlYW4gdGhhdCByZW1vdmVzIHRlbXBvcmFyaWVzIGZyb20KIAl0aGUgaW5jbHVkZSBkaXJlY3RvcnkuCgpTYXQgRGVjIDE2IDE5OjM5OjE0IE1FVCAxOTk1ICBTdGVmZmVuIE1vZWxsZXIgPHNtb2UwMDI0QHJ6LnVuaS1oaWxkZXNoZWltLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUFsbW9zdCByZXdyb3RlIEVESVRfR2V0TGluZU1zZy4KClNhdCBEZWMgMTYgMTM6NTE6NDggTVNUIDE5OTUgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgTURJVGlsZSgpIGJ1ZyB0aGF0IG9jY3VycyB3aGVuIDAgd2luZG93cyBhcmUgcHJlc2VudCBvciBhbGwKCXdpbmRvd3MgYXJlIG1pbmltaXplZC4KCldlZCBEZWMgMTIgMjM6MzA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW21pc2MvcHJvZmlsZS5jXQogICAgICAgIFRyeSBoYXJkZXIgdG8gZmluZCBmaWxlcywgZXNwZWNpYWxseSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCglMb29rIGluICRIT01FLy53aW5lIHRvbyBhbmQgY3JlYXRlIGl0IHRoZXJlIGlmIGl0IGlzbid0IGZvdW5kLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gRGVjIDExIDE5OjA4OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFttaXNjL2xzdHIuY10KCVJlcGxhY2VkIHdpbmVfc3RybmNweSgpIGJ5IGEgMzItYml0IHZlcnNpb24gb2YgbHN0cmNweW4oKSwgc2luY2UKIAl0aGV5IGRvIHRoZSBzYW1lIGpvYi4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGdjYwoJdmVyc2lvbnMgdW5kZXIgMi43LiBEb2Vzbid0IG1lYW4gaXQgd2lsbCBydW4gT0sgdGhvdWdoLi4uCgpTYXQgRGVjIDA5IDEzOjIyOjU4IDE5OTUgIENhbWVyb24gSGVpZGUgIDxoZWlkZUBlZS51YWxiZXJ0YS5jYT4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdIFtpbmNsdWRlL3dpbmVycm9yLmhdCglBZGRlZCBmaWxlIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBhbmQgbW9yZSBlcnJvciBjb2Rlcy4KCgkqIFt3aW4zMi9lcnJvci5jXQoJQWRkZWQgc29tZSBydWRpbWVudGFyeSBlcnJuby10by1XaW4zMiBlcnJvciBjb252ZXJzaW9uCgljb2RlLgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIHRvIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlLCBmaWxsZWQgaW4gc29tZSBrbm93bgoJZXJyb3IgY29kZXMsIGFuZCBzd2l0Y2hlZCB0byBkcHJpbnRmX3dpbjMyLgoKCSogW3dpbjMyL3RpbWUuY10KCUFkZGVkIEdldExvY2FsVGltZS4KCkZyaSBEZWMgIDggMTQ6Mzc6MzkgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29udmVydGVkIGZ1bmN0aW9ucyBvZiB0aGUgdHlwZSBMT05HIF8oSFdORCxXT1JELExPTkcpIHRvIHRoZSB0eXBlCglMUkVTVUxUIF8oSFdORCxXUEFSQU0sTFBBUkFNKSB3aGVyZSBuZWVkZWQuCgoJKiBbaW5jbHVkZS9saWJyZXMuaF0KCVJlc3RydWN0dXJlZCBsaWJyZXMgcHJvdG90eXBlcyB0byBjbG9zZXIgbWF0Y2ggdGhlIHdpbmRvd3MgQVBJLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhbmdlZCBzZXZlcmFsIEFQSSBwcm90b3R5cGVzJyBwYXJhbWV0ZXIgdHlwZXMgZnJvbSAnc2hvcnQnIHRvIElOVCwKCXdoaWNoIGlzICNkZWZpbmVkIGFzIHNob3J0IGluIHRoZSBlbXVsYXRvciwgYnV0IGlzIGEgbm9ybWFsIGludCBpbgoJV0lORUxJQjMyLiAgQWxzbyBjaGFuZ2VkIFNFR1BUUiBmcm9tIERXT1JEIHRvIHZvaWQqIHdoZW4gV0lORUxJQjMyLgoJKFRoaXMgY3JlYXRlcyBhIGxvdCBvZiB3YXJuaW5ncyBhdCBsaWJyYXJ5LWNvbXBpbGUgdGltZSwgYnV0IGxlc3MKCXdhcm5pbmdzIGF0IGFwcC1jb21waWxlIHRpbWUuICBJJ2xsIHJlbW92ZSB0aGUgd2FybmluZ3Mgc29vbi4pCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBwYXJhbWV0ZXIgbWlzbWF0Y2ggaW4gY2FsbCB0byBMSUJSRVNfRmluZFJlc291cmNlKCkuICBDaGFuZ2VkCgl2YXJpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTElCUkVTXyogQVBJIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglEZWxldGVkIGxvY2FsICdpJyBmcm9tIHdpbl9mYXVsdCgpLCBzaW5jZSBpdCB3YXMgdW51c2VkLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglNaXJyb3JlZCBjaGFuZ2VzIHRvIGluY2x1ZGUvd2luZG93cy5oIG1lbnRpb25lZCBhYm92ZS4KCgkqIFt0b29sa2l0L2hlbGxvMy5jXQoJQ2hhbmdlZCBMb2FkTWVudUluZGlyZWN0KCkgY2FsbCB0byBMb2FkTWVudSgpIHRvIHRlc3QgdGhlIG5ldwoJcmVzb3VyY2UgcmVnaXN0cmF0aW9uIHRlY2huaXF1ZS4KCgkqIFt0b29sa2l0L2xpYnJlcy5jXQoJUmVtb3ZlZCBkZWZpbml0aW9uIG9mICdzdHJ1Y3QgcmVzb3VyY2UnIGFuZCBmaXhlZCBidWdzIGluIHRoZSByZXNvdXJjZQoJaW1wbGVtZW50YXRpb24uICBJbXBsZW1lbnRlZCBMSUJSRVNfRmluZFJlc291cmNlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1pcnJvcmVkIGNoYW5nZXMgdG8gaW5jbHVkZS93aW5kb3dzLmggbWVudGlvbmVkIGFib3ZlLgoKVGh1IERlYyAgNyAyMzoxNTo1NiAxOTk1ICAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUxPQ0FMX0hlYXBFeGlzdHM6IENoYW5nZWQgcGFyYW1ldGVyIHRvIEhBTkRMRS4gRm9yIFdpbmVMaWIsIHJldHVybiB0cnVlCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ3JlYXRlTGlzdEJveFN0cnVjdDogSW5pdGlhbGl6ZSBIZWFwU2VsIHRvIDAgZm9yIFdpbmVMaWIKCgkqIFtpbmNsdWRlL2xpc3Rib3guaF0KCWNoYW5nZSBIZWFwU2VsIGZyb20gV09SRCB0byBIQU5ETEUKCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdW3JjL3dpbmVyYy5jXQoJc3RydWN0IFJlc291cmNlVGFibGU6IHJlbW92ZWQKCXN0cnVjdCByZXNvdXJjZTogbW92ZWQgdG8gaGVhZGVyIGZpbGUKCWF1dG9yZWdpc3RlciByZXNvdXJjZXMgaWYgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyCgoJKiBbbWVtb3J5L2xvY2FsLmhdCglMT0NBTF9HZXRIZWFwOiBleHBlY3QgSEFORExFIHJhdGhlciB0aGFuIFdPUkQKCQoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl0KCUFkZCBBTExDRkxBR1MgdG8gbWFrZSBoZWxsbzMKCgkqIFt0b29sa2l0L2hlYXAuY10KCUxvY2FsRnJlZSwgSEVBUF9GcmVlOiBoYW5kbGUgMCBwYXJhbWV0ZXIgZ3JhY2VmdWxseQoKV2VkIERlYyAwNiAxNTozNDoyMyAxOTk1ICBHcmVnIENvb3BlciA8Y29vcGVyQGltYS1pbmMuY29tPgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCB0aGUgbXNnc25kIGFuZCBtc2dyY3YgZXJyb3JzIHRoYXQgd2luc29jayBwcm9ncmFtcyBnZXQuCgpXZWQgRGVjIDA2IDEyOjQ3OjIzIE1FVCAxOTk1IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGRucy51ZnNpYS5hYy5iZT4KCQoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJRml4ZWQgX2hyZWFkIGFuZCBfaHdyaXRlIHJldHVybiB0eXBlCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJSGFja2VkIGxvYWRpbmcgb2YgUEUtZGxsJ3MgaW4KCgkqIFt3aW4zMi9hZHZhcGkuY10KCUFkZGVkIHN0dWJzIGZvciBSZWdDcmVhdGVLZXlFeCwgUmVnU2V0VmFsdWVFeCwgUmVnUXVlcnlWYWx1ZUV4CgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgc3R1YnMgZm9yIE9wZW5GaWxlTWFwcGluZywgQ3JlYXRlRmlsZU1hcHBpbmcsIE1hcFZpZXdPZkZpbGVFeAoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIHN0dWJzIGZvciBDcmVhdGVNdXRleEEsIFJlbGVhc2VNdXRleCwgQ3JlYXRlRXZlbnRBLAoJV2FpdEZvclNpbmdsZU9iamVjdCwgRHVwbGljYXRlSGFuZGxlLCBHZXRDdXJyZW50UHJvY2VzcwoJCk1vbiBEZWMgMDQgMTM6MDY6MzcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvd2luZS5oXSBbbWlzYy9sc3RyLmNdCglEZWZpbmUgd2luZV9zdHJuY3B5KCkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFkIHRoZSBidWZmZXIgd2l0aCAKCXplcm9lcyBsaWtlIEdOVSBzdHJuY3B5KCksIHdoaWNoIG1pZ2h0IGJyZWFrIHNvbWUgV2luZG93cyBwcm9ncmFtcwoJdGhhdCBwYXNzIGJvZ3VzIHNpemUgYXJndW1lbnRzLgoKCSogW2xvYWRlci9tb2R1bGUuY106IEdldE1vZHVsZUZpbGVOYW1lKCksCglbbWlzYy9jb21tZGxnLmNdOiBHZXRGaWxlVGl0bGUoKSwKCVttaXNjL2tleWJvYXJkLmNdLCBbbWlzYy9sc3RyLmNdOiBsc3RyY3B5bigpLAoJW21pc2Mvb2xlMm5scy5jXSwgW21pc2MvcHJvZmlsZS5jXSwgW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdLAoJW211bHRpbWVkaWEvbW1zeXN0ZW0uY10sIFtvYmplY3RzL2ZvbnQuY106CglVc2Ugd2luZV9zdHJuY3B5KCkgd2hlcmUgc3RyaW5ncyBhcmUgcmV0dXJuZWQgdG8gV2luZG93cyBwcm9ncmFtcy4KCQoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUGxheU1ldGFmaWxlKCk6IENsZWFyIHRoZSBoYW5kbGUgdGFibGUgYmVmb3JlIHVzaW5nIGl0LgoKCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQoJUmVuYW1lIFNIRUxMX1JlZ0NoZWNrRm9yUm9vdCgpIHRvIFNIRUxMX0luaXQoKSBhbmQgY2FsbCBpdCBmcm9tIG1haW4oKS4KCQoJKiBbbWlzYy9wcm9maWxlLmNdCglsb2FkKCk6IE5lZWQgdG8gaGFuZGxlIGNvbW1lbnRzLgoJCgkqIFt0b29sa2l0L2xpYnJlcy5jXQoJTWFrZSBpdCBjb21waWxlLgoJCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIE1BS0VfU0VHUFRSIG1hY3JvIGluIHR3byBwbGFjZXMgd2hlcmUgYSB1c2VyIGhlYXAgYmxvY2sgdXNlZAoJdG8gYmUgYWxsb2NhdGVkIGluc3RlYWQuCgpTYXQgRGVjIDAyIDE2OjQzOjQzIDE5OTUgUmFtb24gR2FyY2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbiBmdW5jdGlvbiBTZXRXaW5kb3dQb3M6IGRvIG5vdCByZWRyYXcgdGhlIHBhcmVudCBvZgoJYSB3aW5kb3cgaWYgdGhlIHNwZWNpZmllZCB3aW5kb3cgaXMgcGxhY2VkIG9uIHRoZSB0b3AuCglUaGlzIGF2b2lkcyB0aGF0IFNob3dXaW5kb3coaHduZCwxKSBoaWRlcyBod25kIGluc3RlYWQKCW9mIHNob3dpbmcgaXQuCgpTYXQgRGVjIDAyIDExOjAwOjAwIDE5OTUgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU5vdyBpdCBjYW4gc2Nyb2xsIGNoaWxkcmVuIGFsb25nIHdpdGggdGhlIGNsaWVudCByZWdpb24gb2YgcGFyZW50IAogICAgICAgIHdpbmRvdy4gVHJpZWQgdG8gb3B0aW1pemUgdXBkYXRlIHJlZ2lvbiBjYWxjdWxhdGlvbi4gCgoJKiBbd2luZG93cy9tZGkuY10KCVNjcm9sbENoaWxkcmVuIGZ1bmN0aW9uLCBtb3JlIG90aGVyIGZlYXR1cmVzIGFkZGVkLiBCYXNpY2FsbHkKCWEgcmV3cml0ZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9mb2N1cy5jXQoJUmVpbXBsZW1lbnRlZCB3aW5kb3cgYWN0aXZhdGlvbiBhbmQgZm9jdXMgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIG5ldyBmbGFnIFdJTl9OQ0FDVElWQVRFRC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2xvYWRlci90YXNrLmNdCglTbWFsbCBjaGFuZ2VzICh0byBtYWludGFpbiBsaW5rZWQgbGlzdCBvZiBtZXNzYWdlIHF1ZXVlcykuCgpXZWQgTm92IDI5IDE1OjUxOjQ4IDE5OTUgIERhbmllbCBTY2hlcGxlciAgPGRhbmllbEBzaGVwMTMud3VzdGwuZWR1PgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJICBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdIFtXaW5lLm1hbl0KCUltcGxlbWVudGVkIGEgLW1hbmFnZWQgb3B0aW9uIHRvIHJlcGxhY2UgdGhlIHN0YW5kYXJkIFdpbmRvd3MKCWZyYW1lIG9mIHRvcC1sZXZlbCB3aW5kb3dzIHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyJ3MgZGVjb3JhdGlvbnMuCglJZiBhIHRvcC1sZXZlbCB3aW5kb3cgbWFrZXMgaXRzIG93biBmcmFtZSwgdGhpcyB3aWxsIHN0aWxsIHNob3cKCXVwLCBpbnNpZGUgdGhlIHdpbmRvdyBtYW5hZ2VyIGRlY29yYXRpb25zIChJIGJlbGlldmUgY3RsM2R2Mi5kbGwKCXdvdWxkIGRvIHRoaXMsIGFsdGhvdWdoIEkgY2FuJ3QgdGVzdCB0aGlzKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE5vdiAyMSAxODo0OToxMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGVdIFttaXNjL2Rvc19mcy5jXQoJR290IHJpZCBvZiBhdXRvY29uZi5oIGZpbGUuCgoJKiBbZGVidWdnZXIvZGJnLnldCglNb3JlIGxvZ2ljYWwgYmVoYXZpb3IgdXBvbiBzeW50YXggZXJyb3JzLgoKCSogW2luY2x1ZGUvaG9vay5oXSBbd2luZG93cy9ob29rLmNdCglDaGFuZ2VkIGhvb2sgc3RydWN0dXJlIGFuZCByZXdyb3RlIG1vc3Qgb2YgdGhlIGhvb2sgZnVuY3Rpb25zIGZvcgoJYmV0dGVyIGNvbXBhdGliaWxpdHksIGJhc2VkIG9uIGludmVzdGlnYXRpb25zIGJ5IEFsZXggS29yb2JrYS4KCgkqIFtpbmNsdWRlL21lc3NhZ2UuaF0gW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgaG9va3MgdG8gbWVzc2FnZSBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIG1hZGUgdGhlIHN0cnVjdHVyZQoJbGF5b3V0IFdpbmRvd3MtY29tcGF0aWJsZS4KCUFkZGVkIHN1cHBvcnQgZm9yIFdIX01PVVNFLCBXSF9LRVlCT0FSRCwgV0hfSEFSRFdBUkUgYW5kCglXSF9KT1VSTkFMUkVDT1JEIGhvb2tzLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiBmb3IgY2hhbmdpbmcgdGhlIGxhbmd1YWdlIGF0IHJ1bi10aW1lCiAJKG5vdCBpbXBsZW1lbnRlZCB5ZXQpLCBiYXNlZCBvbiBhIHN1Z2dlc3Rpb24gZnJvbSBNaWNoYWVsIFBhdHJhLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJRml4ZWQgc2lsbHkgU0VHUFRSIGJ1ZyBpbiBEdW1wSWNvbigpLgoKTW9uIE5vdiAyMCAyMjoyMjoyMiAxOTk1ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCglQYXJ0aWFsIGltcGxlbWVudGFpb24gb2YgTEJTX0VYVEVOREVEU0VMIHN0eWxlLAoJeWV0IG1vcmUgdXBkYXRlcyBmb3IgZHJhZyAmIGRyb3Agc3VwcG9ydC4gTm93IHdvcmtzLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglNb3JlIG1lc3NhZ2UgaGFuZGxlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCURyYWdPYmplY3QsIERyYWdEZXRlY3QsIEFueVBvcHVwIGZ1bmN0aW9ucy4gCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBrbHVkZ3kgZml4ZXMgKFdNXy4uLlRPSVRFTSwgZXRjLikuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJSWNvblRvQ3Vyc29yIHNrZWxldG9uLCBwYXRjaCBmb3IgT0JNX0xvYWRDdXJzb3JJY29uIHRvIGhhbmRsZSBuZXcKCWN1cnNvci4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyKl0KCU5ldyBPRU0gY3Vyc29ycy4KCk1vbiBOb3YgMjAgMTE6MDU6MjAgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbdG9vbGtpdC9oZWFwLmNdCglTd2FwcGVkIGZsYWdzIGFuZCBzaXplIGFyZ3VtZW50cyB0byBMb2NhbFJlYWxsb2MgYXMgcGVyIGNoYW5nZXMgaW4KCW1lbW9yeS9sb2NhbC5jIGJ5IFdpbGxpYW0gTWFncm8gaW4gcHJldmlvdXMgcmVsZWFzZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglSZWluc3RhdGVkIHRoZSAjZGVmaW5lJ3MgZm9yICdtaW4nIGFuZCAnbWF4Jywgc2luY2UgdGhleSdyZSBwYXJ0IG9mCgl0aGUgV2luZG93cyBBUEkuICBJIHJlYWxseSBkb24ndCB0aGluayBpdCdzIGEgd2lzZSBpZGVhLCBzbyBJIHB1dAoJYSAnI2lmbmRlZiBET05UX0RFRklORV9taW5fQU5EX21heCcgYXJvdW5kIHRoZW0uICBJIHRoaW5rIHRoZSBhY3R1YWwKCVdJTkUgY29kZSBzaG91bGQgbmV2ZXIgdXNlIHRoZXNlIChpdCBzaG91bGQgdXNlICdNSU4nIGFuZCAnTUFYJwoJaW5zdGVhZCkuCgoJKiBbbG9hZGVyLypdCglQdXQgJyNpZm5kZWYgV0lORUxJQicgYXJvdW5kIG1hbnkgdGhpbmdzIHRoYXQgV0lORWxpYiBzaG91bGQgbm90IG5lZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJVG9vayBvdXQgbWFueSAnI2lmIGRlZmluZWQoV0lORUxJQiknIHNlY3Rpb25zIHdpdGggdGhlIGFzc29jaWF0ZWQKCWNvbW1lbnQgJ3RlbXBvcmFyeSBmaXgsIHVudGlsIExvY2FsIG1lbW9yeSBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4KCVdJTkVMSUInLCBzaW5jZSB0aGUgZWZmZWN0aXZlIHRyYW5zbGF0aW9ucyBhcmUgbm93IGluIAoJdG9vbGtpdC9taXNjc3R1YnMuYy4KCVRvb2sgb3V0IHRoZSAjaWZuZGVmJ3MgSSBwdXQgaW4gRURJVF9DbGVhclRleHQuICBXaG9ldmVyIG1vZGlmaWVkIHRoaXMKCWZpbGUgZml4ZWQgKG9yIGF0IGxlYXN0IHBvc3Rwb25lZCkgdGhlIGJ1ZyBJIGhhZCBlbmNvdW50ZXJlZC4KCgkqIFtsb2FkZXIvdGFzay5jXQoJUHV0IGFuICNpZmRlZiBpbiBUQVNLX0NyZWF0ZVRhc2soKSB0aGF0IGhhcmR3aXJlcyB0aGUgY3VycmVudCBkcml2ZSB0bwoJQzogIFRoaXMgd2lsbCBwcm9iYWJseSBjYXVzZSBhIGxvdCBvZiB0cm91YmxlIGlmIHRoaXMgY2hhbmdlIGlzCglmb3Jnb3R0ZW4gaW4gdGhlIGZ1dHVyZSwgYnV0IGl0IHdpbGwgbGV0IHRoaW5ncyBsaWtlIHRoZSBPcGVuRmlsZU5hbWUKCWRpYWxvZyB3b3JrIGZvciBub3cuCgoJKiBbdG9vbGtpdC9saWJyZXMuY10gW3Rvb2xraXQvTWFrZWZpbGUuaW5dIFt0b29sa2l0L01ha2VmaWxlXQoJICBbaW5jbHVkZS9saWJyZXMuaF0KCU1hZGUgbmV3IGxpYnJlcy5jIGZpbGUsIHdoaWNoIHdpbGwgY29udGFpbiBmdW5jdGlvbnMgZm9yIHN1cHBvcnRpbmcKCWFjY2Vzc2luZyByZXNvdXJjZXMgYnkgbmFtZSBpbiBXSU5FbGliLiAgJ3dpbmVyYycgd2lsbCBuZWVkIHRvIGJlCgljaGFuZ2VkLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJUmVmaW5lZCBtZW1vcnkgcm91dGluZXMgdG8gYWxsb3cgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gTG9jYWxBbGxvYwoJYW5kIEdsb2JhbEFsbG9jIGFuZCBiZXR3ZWVuIExvY2FsU2l6ZSBhbmQgR2xvYmFsU2l6ZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5lZCB0aGUgR2V0Q3VycmVudFRpbWUgcm91dGluZSBpbiB3aW5kb3dzL21lc3NhZ2UuYywgYW5kIHJlbW92ZWQKCXRoZSAjZGVmaW5lIGluIHdpbmRvd3MuaC4KCk1vbiBOb3YgMjAgMDA6MzY6NDIgTUVUIDE5OTUgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AZG5zLnVmc2lhLmFjLmJlPgoKCSogWyovKl0KCUFkZGVkIG5ldyBkZWJ1Z2dpbmcgdHlwZSBERUJVR19XSU4zMiBhbmQgREVCVUdfRU5WLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHVuZG9jdW1lbnRlZCBHZXRFeHBXaW5WZXIuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVByZXZpb3VzIGNvZGUgZGlkbid0IHBvcCBwb3NzaWJseSBjaGFuZ2VkICVlc2ksICVlZGkgYW5kICVlZHgKCWZyb20gdGhlIHN0YWNrLgoJCgkqIFt3aW4zMi9hZHZhcGkuY10KCUFkZGVkIEdldFVzZXJOYW1lQS4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCUFkZGVkIHN0dWIgZm9yIE11bHRpQnl0ZVRvV2lkZUNoYXIuCgoJKiBbd2luMzIvY29uc29sZS5jXQoJQWRkZWQgU2V0Q29uc29sZUN0cmxIYW5kbGVyIHN0dWIuCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgUmVhZEZpbGUgQ3JlYXRlRmlsZUEgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUgc3R1YnMuCglBZGRlZCBDbG9zZUhhbmRsZS4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCUNoYW5nZWQgVmlydHVhbEFsbG9jIGFuZCBWaXJ0dWFsRnJlZS4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBFeGl0UHJvY2Vzcy4KClN1biBOb3YgMTkgMTc6NTQ6NDIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBmZXcgYnJva2VuIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZSgpOiBOZWVkIHRvIGNoZWNrIGZvciAnI3h4eCcgc3RyaW5ncyBoZXJlLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpbmROZXh0KCk6IFJldHVybiBNUy1ET1MgZmlsZW5hbWVzIHVwcGVyY2FzZS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUNyZWF0ZUljb24oKSwgQ3JlYXRlQ3Vyc29yKCk6IEFkZGVkIG1pc3NpbmcgZWxlbWVudCB0byBDVVJTT1JJQ09OSU5GTwoJaW5pdGlhbGl6ZXJzLgoJCgkqIFttaXNjL2ZpbGUuY10KCV9sb3BlbigpOiBGaWxlcyBvcGVuZWQgaW4gT0ZfV1JJVEUgbW9kZSBhcmUgdHJ1bmNhdGVkLgoJT3BlbkZpbGUoKTogSWdub3JlIE9GX1JFQUQvT0ZfV1JJVEUvT0ZfUkVBRFdSSVRFIHdoZW4gZmlsZXMgYXJlCgljcmVhdGVkOyB1c2UgcmVhZC93cml0ZSBtb2RlLgoJCgkqIFttaXNjL3Byb2ZpbGUuY10KCWxvYWQoKTogUmV3cml0dGVuLgoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUZpeGVkIGJhZCBjYWxsIHRvIHN0cm5jcHkoKSB0aGF0IHNtYXNoZWQgdGhlIHN0YWNrLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglPcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLiBQZW9wbGUgd2hvIHVzZSBnY2MgMi43LjEgZG9uJ3QgbmVlZCBhCglkZWJ1Z2dlciA6LSkKCQoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9wYWxldHRlLmNdCglBZGQgUmVzaXplUGFsZXR0ZSgpIGFuZCBBbmltYXRlUGFsZXR0ZSgpIHN0dWJzLiBUaGV5IGRvbid0IGRvIGFueXRoaW5nLAoJYnV0IHNvbWV0aW1lcyB0aGF0J3MgZ29vZCBlbm91Z2guCgpGcmkgTm92IDE3IDA5OjEwOjM1IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpbmNsdWRlL3dpbmUuaF0gW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFtpbmNsdWRlL3dpbnNvY2suaF0KICAgICAgICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVW5peHdhcmUuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzYy9jb21tLmNdIFttaXNjL3dpbnNvY2tldC5jXQoJTWlzYy4gZml4ZXMgZm9yIFVuaXh3YXJlLgoKCSogW2xvYWRlci90YXNrLmNdCiAgICAgICAgTWFkZSBhc3NpZ25lbXRzIHRvIGNvbnRleHQgaW4gSW5pdFRhc2sgZm9yIHJlZ2lzdGVycyB1c2UgdGhlIG1hY3JvcwogICAgICAgIGZyb20gcmVnaXN0ZXJzLmggdG8gbWFrZSB0aGVtIG1vcmUgcG9ydGFibGUuIChOZWVkZWQgZm9yIFVuaXh3YXJlKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCByZWdpc3RlciBhY2NlcyByb3V0aW5lcyB0byB3b3JrIG9uIFVuaXh3YXJlLiBCaXQgZ3J1YmJ5IGJ1dAogCWl0IHNlZW1zIHRvIHdvcmsuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9XTV9OQ0NyZWF0ZSBhbGxvY2F0ZXMgbG9jYWwgaGVhcCBpZiBoYXNuJ3QgYmVlbiBwcmV2aW91c2x5CglhbGxvY2F0ZWQuCgkKCSogW21pc2NlbXUvaW50MjEuY10KCW1rZGlyIG5vdyBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LgoKCSogW21pc2MvZG9zX2ZzLmNdCglta2RpciBub3cgY3JlYXRlcyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4KCURPU19vcGVuZGlyIG5vdyB1c2VzIGxpbmtlZCBsaXN0IG9mIGRpcmVudHMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAKCXJlYWxsb2MgY2hhbmdpbmcgYWRkcmVzcyBvZiBtYWxsb2NlZCBtZW1vcnkuCgpUaHUgTm92IDE2IDEyOjQ3OjEzIDE5OTUgIE1pY2hhZWwgUGF0cmEgIDxwYXRyYUBpdHAxLlBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUVOVV9DYWxjSXRlbVNpemUoKTogRml4ZWQgaGFuZGxpbmcgb2YgZW1wdHkgbWVudSBpdGVtcy4KClNhdCBOb3YgMTEgMjE6NDY6NTQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbbWlzYy9maWxlLmNdCglJbiBPcGVuRmlsZSwgdW5saW5rIHNob3VsZCBiZSBkb25lIG9uIHRoZSB1bml4IGZpbGVuYW1lLgoKU2F0IE5vdiAxMSAxNjo0MzoyOSAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW2luY2x1ZGUvaGFuZGxlMzIuaF0KICAgICAgICBOZXcgaGVhZGVyIGZpbGUgY29udGFpbmluZyBpbnRlcm5hbCBXaW4zMiBrZXJuZWwgaGFuZGxlCiAgICAgICAgaW5mb3JtYXRpb24uCgogICAgICAgICogW3dpbjMyL2ZpbGUuY10KICAgICAgICBBZGRlZCBSZWFkRmlsZSwgQ3JlYXRlRmlsZSwgYW5kIENsb3NlRmlsZUhhbmRsZSwgYW5kIGRpZAogICAgICAgIHNvbWUgcmVvcmdhbml6aW5nIHRvIG1hdGNoIHRoZSBuZXcgaGFuZGxlIGFsbG9jYXRpb24gc2NoZW1lLgoKICAgICAgICAqIFt3aW4zMi9pbml0LmNdCiAgICAgICAgQWRkZWQgQ2xvc2VIYW5kbGUgYW5kIHRoZSBjcmVhdGlvbiBvZiBzdGFuZGFyZCBJL08gaGFuZGxlcy4KCiAgICAgICAgKiBbd2luMzIvb2JqZWN0X21ndC5jXQogICAgICAgIE5ldyBtb2R1bGUgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgV2luMzIga2VybmVsIGhhbmRsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBOb3YgIDMgMjA6MDg6MTcgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUF0dGVtcHQgdG8gY2hlY2sgZm9yIC1saTM4NiBvbiBOZXRCU0QuIFBsZWFzZSB0ZXN0IHRoaXMuCgpNb24gT2N0IDMwIDEyOjQwOjMyIEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogWyovKl0KCUVsaW1pbmF0ZWQgdmFyaW91cyB3YXJuaW5ncyB3aXRoIGVpdGhlciBleHBsaWNpdCBjYXN0cyBvciBtb3JlCglhY2N1cmF0ZSB2YXJpYWJsZS9wYXJhbWV0ZXIgZGVjbGFyYXRpb25zIChlLmcuIElOVCBpbnN0ZWFkIG9mIHNob3J0CglvciBXT1JEKS4KCUNoYW5nZWQgbWFjcm9zICdtaW4nIGFuZCAnbWF4JyB0byAnTUlOJyBhbmQgJ01BWCcsIHNpbmNlIHRoZXkncmUKCW1hY3Jvcy4KCgkqIFtjb250cm9scy9lZGl0LmNdIFt3aW5kb3dzL2RlZmRsZy5jXQoJQWRkZWQgJyNpZmRlZiBTVVBFUkZMVU9VU19GVU5DVElPTlMnIHdyYXBwZXJzIGFyb3VuZCBmdW5jdGlvbgoJZGVmaW5pdGlvbiBvZiBFRElUX0tleVZTY3JvbGxEb2MsIEVESVRfVGV4dExpbmVOdW1iZXIsIGFuZAoJREVGRExHX0ZpbmREZWZCdXR0b24gdG8gYXZvaWQgd2FybmluZ3MuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zY3JvbGwuY10gW3dpbmRvd3MvZGVmd25kLmNdCgkgIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDb252ZXJ0ZWQgTUFLRVBPSU5UIG1hY3JvIGNhbGwgdG8gbWFudWFsIGNvbnZlcnNpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGb3IgV0lORUxJQjMyLCBzdHJ1Y3R1cmVzIFBPSU5ULCBTSVpFLCBhbmQgUkVDVCBoYXZlIExPTkcgbWVtYmVycwoJaW5zdGVhZCBvZiBJTlQuICBUaGlzIGFsc28gaW52YWxpZGF0ZXMgdGhlIG1hY3JvIE1BS0VQT0lOVCgpLCB3aGljaAoJaXMgbm90IHN1cHBvcnRlZCBpbiBXaW4zMi4gIEFsc28gZGVmaW5lZCB0aGUgUE9JTlRTIHN0cnVjdHVyZSAoU0hPUlQKCW1lbWJlcnMpIGFuZCB0aGUgTUFLRVBPSU5UUyBtYWNyby4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNoYW5nZWQgYSBsb3Qgb2YgJ3N0cmNweScgY2FsbHMgdG8gJ3N0cm5jcHknIGNhbGxzLiAgSSdtIGRlc3BlcmF0ZSB0bwoJZmluZCB0aGlzIG1lbW9yeSBidWcsIGFuZCB0aGlzIHNob3VsZCBiZSBkb25lIGFueXdheS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglXZWxsLCB0aGUgYWx0ZXJhdGlvbiBtZW50aW9uZWQgYWJvdmUgZGlkbid0IGRvIGl0LCBidXQgI2lmZGVmJ2luZyBvdXQKCWEgZmV3IGxpbmVzIGluIEVESVRfQ2xlYXJUZXh0IGRpZC4gIFRoaXMgbGVhZHMgdG8gYnVncywgYnV0IGZvciBub3csCglpdCdzIGJldHRlciB0aGFuIGJpenphcmUgbWVtb3J5IHRyb3VibGVzLgoKCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglSZW1vdmVkIHdhcm5pbmcgbWVzc2FnZXMgaW4gR0xPQkFMX0NyZWF0ZUJsb2NrKCksIEdMT0JBTF9GcmVlQmxvY2soKSwKCWFuZCBSRUxBWTMyX0dldEVudHJ5UG9pbnQoKS4gIFRoZXNlIGFyZSB0aGUgbW9zdCBwb3B1bGFyIHdhcm5pbmdzLCBhbmQKCXRoZWlyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2VlbXMgZmluZS4KClNhdCBPY3QgMjggMDk6Mzk6MTggMTk5NSAgSm9jaGVuIEthcnJlciA8Y2lwMzA3QHdwYXgwMS5QaHlzaWsuVW5pLVd1ZXJ6YnVyZy5ERT4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUZpeCBmb3IgImJyb2tlbiIgWCBzZXJ2ZXJzIHRoYXQgaW52ZXJ0IG1hc2tlZCBjdXJzb3IgY29sb3JzLgoKRnJpIE9jdCAyNyAxOToyNzoyMSAxOTk1ICBBbGV4IEtvcm9ia2EgIDxhbGV4QHBobTYucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVJlbW92ZSB1bm5lY2Vzc2FyeSBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gbWVudS4KClRodSBPY3QgMjYgMDU6MDM6MDMgTUVUIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10KCU1ha2UgR2V0TmVhcmVzdENvbG9yIHJldHVybiBhIFJHQiB2YWx1ZSBpbnN0ZWFkIG9mIGEgcGl4ZWwgdmFsdWUuCgpXZWQgT2N0IDI1IDIzOjMzOjM5IDE5OTUgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdW2NvbnRyb2xzL21lbnUuY11baW5jbHVkZS9tZW51LmhdCglDaGFuZ2VkIFdPUkQgcGFyYW1ldGVycyB0byBVSU5UIHBhcmFtZXRlcnMuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJTWFkZSBVSU5UIDMyYml0IGZvciBXSU5FTElCLgoKCSogW2xvYWRlci9tYWluLmNdCglEaXNhYmxlZCBSRUxBWTMyX0luaXQgYW5kIE1PRFVMRV9Jbml0IGZvciBXSU5FTElCLgoKCSogW21pc2MvbWFpbi5jXQoJQXNzdW1lIENQVTM4NiBmb3IgV0lORUxJQi4KCgkqIFtyYy93aW5lcmNdCglhZGRfcG9wdXA6IHNldCBNRl9QT1BVUCBmbGFnIG9uIG1lbnUgaXRlbS4KCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXVt0b29sa2l0L2hlbGxvMy5jXVt0b29sa2l0L2hlbGxvM3Jlcy5jXQoJQWRkIHJlc291cmNlIGRlbW8gaGVsbG8zIGZvciBXSU5FTElCLgoJTmV3IGZpbGUgUkVBRE1FLnJlc291cmNlcy4KCgkqIFt0b29sa2l0L21pc2NzdHVicy5jXQoJQWRkIGEgY2FzZSBmb3IgMTcuCgpUdWUgT2N0IDE3IDE1OjEzOjEwIElTVCAxOTk1ICBJdGFpIE5haHNob24gPG5haHNob25Adm5ldC5pYm0uY29tPgoKCSogW2xvYWRlci9tb2R1bGUuY10KCURvIG5vdCBhcHBlbmQgLmV4ZSBpZiB0aGUgZmlsZSBuYW1lIGFscmVhZHkgaGFzIGFuIGV4dGVuc2lvbi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUF2b2lkIGNyZWF0aW5nIGEgZmlsZSB3aXRoIGEganVuayBuYW1lIGlmIGEgLmluaSBmaWxlIGRvZXMgbm90CglleGlzdC4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL2R1bW15LmNdCglBZGRlZCBhIGxvdCBvZiBkdW1teSBzdHVicyBmb3IgV2luZG93cyBIZWJyZXcgdmVyc2lvbi4KClR1ZSBPY3QgMTcgMDE6MDM6MjQgMTk5NSBXaWxsaWFtIE1hZ3JvIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXggZm9yIGJ1dHRvbnMgd2l0aCBubyBsYWJlbC4KCgkqIFtjb250cm9scy9jb21iby5jXVtjb250cm9scy9saXN0Ym94LmNdCglGaXhlcyBmb3Igc2Nyb2xsYmFyIHBvc2l0aW9uaW5nLiAgTm93IGRpc2FwcGVhcnMgY29ycmVjdGx5Cglmb3Igc2hvcnQgbGlzdHMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGRpZmZlcmVudGx5IHdoZW4gYnVpbGRpbmcgYXMgbGlicmFyeS4KCgkqIFtjb250cm9scy9zdGF0aWNdCglEb24ndCBkZXN0cm95IG9sZCBpY29uIGJlZm9yZSBkcmF3aW5nIG5ldyBpY29uLiAoRml4ZXMgbGFuZHNjYXBlLwoJcG9ydHJhaXQgdG9nZ2xlIGljb24gaW4gcHJpbnQgZGlhbG9nLikKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglOZXcgZnVuY3Rpb25zIFNldE1ldGFGaWxlQml0cyBhbmQgR2V0TWV0YUZpbGVCaXRzCgoJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KCUFkZCBzdXBwb3J0IGZvciBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NNRVRSSUNTKSA9PSBTTV9DTUVUUklDUwoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTUVUQV9FWFRURVhUT1VULCBub3QgTUVUQV9TRVRURVhUT1VUCglkZWZpbmUgR2V0Q3VycmVudFRpbWUgYXMgR2V0VGlja0NvdW50IChmb3Igd2luZSBsaWJyYXJ5KQoKCSogW2xvYWRlci9tYWluLmNdCglEb24ndCBpbml0aWFsaXplIGJ1aWx0LWluIG1vZHVsZXMgaW4gd2luZSBsaWJyYXJ5CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglMb2NhbFJlQWxsb2Mgd2FzIGRlZmluZWQgaW5jb3JyZWN0bHkuIFN3YXAgZmxhZ3MgYW5kIHNpemUgYXJndW1lbnRzLgoKCSogW21pc2MvbWFpbi5jXQoJQWx3YXlzIHJlcG9ydCBDUFVUWVBFPTQgdG8gd2luZSBsaWJyYXJ5LgoKCSogW29iamVjdHMvZGliLmNdCglSTEU4IGltYWdlcyB3ZXJlIG1pc3NpbmcgdG9wIGxpbmUgd2hlbiBkZWNvbXByZXNzZWQuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJU2V0TWV0YUZpbGVCaXRzIGFuZCBHZXRNZXRhRmlsZUJpdHMgaW1wbGVtZW50ZWQuICBXb3JrcyB3aGVuIGNhbGxlZAoJZnJvbSB3aW5oZWxwLiAgTW9yZSB0ZXN0aW5nIG5lZWRlZC4gIFZhcmlvdXMgbWVtb3J5IGxlYWtzIHBsdWdnZWQuCglWYXJpb3VzIG90aGVyIGJ1ZyBmaXhlcy4gIE5ldyBtZXRhZmlsZSBvcGVyYXRpb25zIGFkZGVkIGluCglQbGF5TWV0YUZpbGVSZWNvcmQ6IENyZWF0ZVBhbGV0dGUsIFNldFRleHRBbGlnbiwgU2VsZWN0UGFsZXR0ZSwKCVNldE1hcHBlckZsYWdzLCBSZWFsaXplUGFsZXR0ZSwgRXh0VGV4dE91dCwgRXNjYXBlLiAgVGVzdGluZyBuZWVkZWQuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglMb2NhbFVuTG9jayBjaGFuZ2VkIHRvIExvY2FsVW5sb2NrCgpTdW4gT2N0IDE1IDIxOjU1OjMzIDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCQoJKiBbbWlzYy93aW5zb2NrLmNdIAoJUmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yIG51bWJlciwgZm9yIGhvc3QgbG9va3VwIG9wZXJhdGlvbnMuCglBbHNvLCBjb3JyZWN0IHRoZSBwcm9ibGVtIHdpdGggc2VuZF9tZXNzYWdlLgoKRnJpIE9jdCAxMyAxOTowNDozNSAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW01ha2VmaWxlLmluXQoJVXNpbmcgbm0ncyBidWlsdC1pbiBzb3J0aW5nLgoKCSogWyovKi5jXQoJVXNlIHhtYWxsb2MgZm9yIG1hbGxvYyBhbmQgeHJlYWxsb2MgZm9yIHJlYWxsb2MgaW4gYWxsIHVuZ2FyZGVkCgljYXNlcy4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUhhbmRsZSBDLWxpa2UgZXhwcmVzc2lvbnMuICBDbGVhbi11cC4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJTG90cyBvZiBuZXcgdG9rZW5zIGZvciBleHByZXNzaW9ucy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglJbXBsZW1lbnQgImxpc3QiIGNvbW1hbmQgZm9yIGRpc2Fzc2VtYmxpbmcuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglJbXBsZW1lbnQgbW9yZSBEYW5pc2ggc3R1ZmYuCgpGcmkgT2N0ICA2IDEwOjM5OjM5IDE5OTUgUmFtJ29uIEdhcmMnaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJVXBkYXRlZCBzZWxmLWxvYWRpbmcgbW9kdWxlcyB0byBzdXBwb3J0IGZvciBuZXcgMzIgYml0IAoJc3RhY2sgZnJhbWVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0ICAxIDE1OjQ4OjM0IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIEdldE1lbnVTdHJpbmcoKSBmb3Igbm9uLXN0cmluZyBpdGVtcy4KCgkqIFtkZWJ1Z2dlci8qLmNdCglGaXJzdCBhdHRlbXB0IHRvIGNoZWNrIHZhbGlkaXR5IG9mIHBvaW50ZXJzIGJlZm9yZSBtZW1vcnkKCWFjY2Vzc2VzLiBGb3Igbm93IG9ubHkgc2VnbWVudGVkIHBvaW50ZXJzIGFyZSBjaGVja2VkLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbbWVtb3J5L2xkdC5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gZHVtcCBvbmx5IG9uZSBzZWdtZW50IHdpdGggJ2luZm8gc2VnbWVudCcuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcl8qXQoJQWRkZWQgYWxsIE9FTSBjdXJzb3JzIGFzIFhQTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXSBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglSZXdyb3RlIGFsbCBjdXJzb3IgYW5kIGljb24gbWFuYWdlbWVudCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5CiAJbGF5b3V0IGFzIFdpbmRvd3MsIGFuZCB0byBmYWN0b3IgY29tbW9uIGNvZGUgYmV0d2VlbiBpY29ucyBhbmQKCWN1cnNvcnMuIEltcGxlbWVudGVkIGljb24gZGlyZWN0b3J5IGxvb2t1cCB0byBmaW5kIHRoZSBiZXN0CgltYXRjaGluZyBpY29uIChpLmUuIHRoZSBjb2xvciBvbmUpLgogIAlJbXBsZW1lbnRlZCBDb3B5Q3Vyc29yKCkgYW5kIER1bXBJY29uKCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRm9yIGRpc2FibGVkIGJ1aWx0LWluIG1vZHVsZXMsIHdlIG5vdyB0cnkgdG8gbG9hZCB0aGUgV2luZG93cyBETEwKCWZpcnN0LCBhbmQgaWYgdGhpcyBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGJ1aWx0LWluIG1vZHVsZQoJYW55d2F5LgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIEdsb2JhbEhhbmRsZSgpIHRvIHJldHVybiB0aGUgY29ycmVjdCBzZWxlY3RvciBpbiB0aGUgaGlnaAoJd29yZCBldmVuIGlmIHdlIGFyZSBwYXNzZWQgYSBoYW5kbGUgaW4gdGhlIGZpcnN0IHBsYWNlLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCVRha2UgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIHRoZSBvcGVyYW5kIGFuZCBvZiB0aGUgc3RhY2sgc2VnbWVudAoJd2hlbiBpbmNyZW1lbnRpbmcgdGhlIHN0YWNrIHBvaW50ZXIuCglBdm9pZCByZWZlcmVuY2luZyBGU19yZWcgYW5kIEdTX3JlZyBvbiAqQlNELgoKCSogW29iamVjdHMvZGliLmNdCglBbGwgRElCIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgQklUTUFQQ09SRUhFQURFUiBmb3JtYXQgYml0bWFwLgoJTW9ub2Nocm9tZSBESUJzIGFyZSBjcmVhdGVkIGFzIG1vbm9jaHJvbWUgYml0bWFwIGlmZiB0aGV5IGFyZQoJYmxhY2sgYW5kIHdoaXRlLgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGRlZCBzdXBwb3J0IGZvciBPRU0gY3Vyc29ycywgY2hhbmdlZCBPQk1fTG9hZEljb24gdG8gdXNlIHRoZSBuZXcKCWljb24gbWVtb3J5IGxheW91dC4KCgkqIFtyYy9zeXNyZXNfRnIucmNdCglBZGRlZCBGcmVuY2ggW0ZyXSBsYW5ndWFnZSBzdXBwb3J0LgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglGaXhlZCBHZXRDb21tYW5kTGluZUEoKSB0byB1c2UgY3VycmVudCBQREIuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCVNpbXVsYXRlIGEgbW91c2UgbW90aW9uIGV2ZW50IHVwb24gU2V0V2luZG93UG9zKCkgdG8gZm9yY2UgdGhlCgljdXJzb3IgdG8gYmUgc2V0IGNvcnJlY3RseS4KClNhdCBTZXAgMzAgMTc6NDk6MzIgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCgkqIFt3aW4zMi8qXQogICAgICAgIE5ldyBXaW4zMiBrZXJuZWwgZnVuY3Rpb25zOiBHZXRBQ1AsIEdldENQSW5mbywKIAlHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSwgR2V0RmlsZVR5cGUsIEdldExhc3RFcnJvciwgR2V0T0VNQ1AsCiAJR2V0U3RhcnR1cEluZm9BLCBHZXRUaW1lWm9uZUluZm9ybWF0aW9uLCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlLAogCVNldEZpbGVQb2ludGVyLCBTZXRMYXN0RXJyb3IsIFZpcnR1YWxBbGxvYywgVmlydHVhbEZyZWUsCiAJV3JpdGVGaWxlLiAgQ29tcGxldGVkIGltcGxlbWVudGF0aW9ucyBvZiBHZXRDb21tYW5kTGluZUEuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQogICAgICAgIE5ldyBmaWxlLgoKCSogW2xvYWRlci9tYWluLmNdCiAgICAgICAgQ2FsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgV2luMzIgZGF0YSAoZG9lc24ndCBjdXJyZW50bHkgZG8KIAlhbnl0aGluZykuCgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCBHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSwgU2V0RW52aXJvbm1lbnRWYXJpYWJsZUEuCgpTYXQgU2VwIDMwIDAwOjI2OjU2IDE5OTUgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdW21pc2NlbXUvZW11bGF0ZS5jXVtsb2FkZXIvbW9kdWxlLmNdCgkgIFttaXNjL2NvbW1kbGcuY10KCU1pc2MuIGJ1ZyBmaXhlcwoKRnJpIFNlcCAyOSAxNjoxNjoxMyAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogWyovKl0KCUZvciBXaW5lbGliLCBleHBsaWNpdCBjYXN0cyBoYXZlIGJlZW4gcGxhY2VkIHdoZXJlIHdhcm5pbmdzIHdlcmUKIAl1c3VhbGx5IGdlbmVyYXRlZC4KCXByaW50ZiBmb3JtYXRzIHdoaWNoIGdpdmUgdGhlIGZvcm1hdCBmb3IgcHJpbnRpbmcgYSBoYW5kbGUgYXMKIAkiJTA0eCIgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBOUEZNVAogCW1hY3JvIGRlZmluZWQgaW4gaW5jbHVkZS93aW50eXBlcy5oLiAgU29tZSB0aW1lcywgZXhwbGljaXQgY2FzdHMKIAl3ZXJlIGFsc28gbmVjZXNzYXJ5LgogICAgIAlQYXJhbWV0ZXIsIGZpZWxkLCBhbmQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiBtYWRlIG1vcmUKIAlleGFjdCwgc3VjaCBhcyBjb252ZXJ0aW5nICdXT1JEIHdQYXJhbScgdG8gJ1dQQVJBTSB3UGFyYW0nIG9yCiAJJ1dPUkQgaEZvbnQnIHRvICdIRk9OVCBoRm9udCcuCiAgICAgCUFueSBjYWxsIG9mIHRoZSBmb3JtIEdldFdpbmRvd1dvcmQoaHduZCxHV1dfSElOU1RBTkNFKSBoYXMgYmVlbgogCXJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIFdJTl9HZXRXaW5kb3dJbnN0YW5jZShod25kKS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkZWQgV0lORUxJQjMyIHN1cHBvcnQgaW4gQ0xCb3hHZXRDb21ibygpLgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdCglDb21tZW50ZWQgb3V0IHRoZSAnI2lmbmRlZiBXSU5FTElCJyBhcm91bmQgdGhlICcjcHJhZ21hIHBhY2soMSknLgoJd2luZWxpYiBuZWVkcyB0aGUgcGFja2luZyBhcyB3ZWxsIChlLmcuIHdoZW4gYWNjZXNzaW5nIHJlc291cmNlcwoJbGlrZSBzeXNyZXNfRElBTE9HX1NIRUxMX0FCT1VUX01TR0JPWCkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglHb3QgcmlkIG9mIHRoZSBGW2Eta10gbWFjcm9zLCB3aGljaCB3ZXJlIGNsdXR0ZXJpbmcgdXAgdGhlIGdsb2JhbAoJbmFtZXNwYWNlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIFdpbjMyIG1lc3NhZ2VzIFdNX0NUTENPTE9SKi4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglQdXQgaW4gcHJlcHJvY2Vzc29yICcjZGVmaW5lIFdJTkVMSUIzMicgaWYgYXBwcm9wcmlhdGUgYW5kIGNoYW5nZWQKCXRoZSB0eXBlcyBvZiBzb21lIHR5cGVkZWZzIChXUEFSQU0sIEhBTkRMRSkgYmFzZWQgb24gdGhpcy4KCQoJKiBbbG9hZGVyL21vZHVsZS5jXSBbdG9vbGtpdC9taXNjc3R1YnMuY10KCUFkZGVkICNpZmRlZidkIHBvcnRpb24gaW4gTG9hZE1vZHVsZSB0byBoYW5kbGUgbG9hZGluZyBhIFdJTkVsaWIKCW1vZHVsZSAoYWxyZWFkeSBsb2FkZWQsIGp1c3QgaW5pdCB2YWx1ZXMpLiAgJyNpZmRlZidlZCBvdXQgdGhlCglkZWZpbml0aW9uIGZvciBHZXRXbmRQcm9jRW50cnkxNiBhbmQgYWRkZWQgYSBuZXcgdmVyc2lvbiB0bwoJdG9vbGtpdC9taXNjc3R1YnMuYy4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGp1c3RlZCB0aGUgbGVuZ3RocyBvZiBBcHBOYW1lIGFuZCBBcHBNaXNjIGZyb20gNTEyLDUxMiB0byAxMjgsOTA2LgoJU2FtZSBhbW91bnQgb2YgdG90YWwgc3RvcmFnZSwgYnV0IG11Y2ggbW9yZSByZWFzb25hYmxlLiAgQWxzbywgY2hhbmdlZAoJY2FsbHMgdG8gc3RyY3B5KCkgaW4gU2hlbGxBYm91dCgpIHRvIGNhbGxzIHRvIHN0cm5jcHkoKSBpbnN0ZWFkLgoJVGhpcyB3YXMgYSBkaWZmaWN1bHQgYnVnIHRvIHRyYWNrIGRvd24sIGJ1dCB0aGUgQXBwTWlzYyBmaWVsZCB3YXMKCWJlaW5nIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRyaWJ1dGVycyB0ZXh0LCB3aGljaCB3YXMgbXVjaCBsYXJnZXIKCXRoYW4gNTEyIGNoYXJhY3RlcnMuCgoJKiBbdG9vbGtpdC9hdG9tLmNdCglOZXcgZmlsZSBmb3IgYXRvbS1oYW5kbGluZyBmdW5jdGlvbnMuICBDb3BpZWQgZnJvbSBtZW1vcnkvYXRvbS5jIGFuZAoJdGhlbiBoZWF2aWx5IG1vZGlmaWVkLiAgUmlnaHQgbm93LCBpdCdzIGp1c3QgYSBsaW5rZWQgbGlzdCBvZiBhdG9tcy4KCUNvbnNpZGVyIGl0IGFzIGEgaGFzaCB0YWJsZSB3aXRoIGp1c3Qgb25lIGVudHJ5LiAgSXQncyBlYXNpbHkgY2hhbmdlZAoJbGF0ZXIuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglDb21tZW50ZWQgb3V0IHRoZSBoZWFwIGZ1bmN0aW9ucyB3aXRoIGEgIiNpZmRlZiBXSU5FTElCMTYiIGFuZCBwdXQgaW4KCWEgV2luMzIgdmVyc2lvbiAod2hpY2ggaXMgYmFzaWNhbGx5IGEgbW9kaWZpZWQgY29weSkuCgoJKiBbdG9vbGtpdC9zdXAuY10gW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglNb3ZlZCB0aGUgc3R1ZmYgSSBwdXQgaW4gdG9vbGtpdC9zdXAuYyBpbnRvIHRvb2xraXQvbWlzY3N0dWJzLmMgYW5kCglhZGRlZCBxdWl0ZSBhIGZldyBtb3JlIHN0dWJzLgoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJUmVhcnJhbmdlZCBzdGFydHVwIGNvZGUgaW4gX1dpbk1haW4uICBJIHRoaW5rIHRoaXMgd2lsbCB3b3JrLgoKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dCglBZGRlZCB0YXJnZXRzIGZvciAnaGVsbG8nIGFuZCAnaGVsbG8yJyBpbiBjYXNlIGFueW9uZSBjYXJlcyB0byB0cnkKCW91dCB0aGUgc2FtcGxlIHByb2dyYW1zLgoKV2VkIFNlcCAyNyAyMzoxMzo0MyAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgkKCSogW21pc2NlbXUvaW50MmYuY10gW21pc2NlbXUvdnhkLmNdIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUZpcnN0IGF0dGVtcHQgYXQgc3VwcG9ydCBmb3Igc29tZSBWeERzLiBDb21tLCBTaGVsbCBhbmQgUGFnZWZpbGUuCgpUdWUgU2VwIDI2IDIxOjM0OjQ1IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfU2ltcGxpZnlQYXRoOiBBbHNvIHJlbW92ZSAiLy4vIiBmcm9tIHBhdGguIChIYXBwZW5zIHdoZW4KIAlzdGFydGluZyBhcHBsaWNhdGlvbnMgbGlrZSAnd2luZSAuL2V4Y2VsLmV4ZScpCgpTYXQgU2VwIDIzIDIzOjMyOjQwIDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbY29uZmlndXJlLmluXQoJQXZvaWQgcmVsYXRpdmUgcGF0aCBmb3Igd2luZS5pbmkuCgoJKiBbcmMvc3lzcmVzX0RhLnJjXQoJU3VwcG9ydCBmb3IgRGFuaXNoIFtEYV0gbGFuZ3VhZ2UuCgoJKiBbbWlzYy9tYWluLmNdIFttaXNjZW11L2NwdS5jXQoJUmV0dXJuIHRoZSBwcm9jZXNzb3Igd2UncmUgcnVubmluZyBvbiBjb3JyZWN0bHkuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJTWlub3Igc3R1ZmYgaW4gaW50IDB4MmYsIGZ1bmN0aW9uIDB4MTYuCgpTYXQgU2VwIDIzIDE5OTUgMTc6NTg6MDQgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3NoZWxsLmNdIFttaXNjL21haW4uY10KCUltcGxlbWVudCBzYXZpbmcgYW5kIGxvYWRpbmcgb2YgdGhlIHJlZ2lzdHJ5IGRhdGFiYXNlIChuZWVkZWQgZm9yCglPTEUpLiBWZXJ5IGV4cGVyaW1lbnRhbC4gRml4ZWQgU2hlbGxFeGVjdXRlKCkuCgkKCSogW21pc2NlbXUvaW50MjEuY10KCUVFWElTVCBpcyBub3QgYSBjcml0aWNhbCBlcnJvciBjb25kaXRpb24gZm9yIG1rZGlyKCkuCgpGcmkgU2VwIDIyIDAxOjMzOjM0IDE5OTUgIEFsZXggS29yb2JrYSAgPGFsZXhAcGhtNi5waGFybS5zdW55c2IuZWR1PgoKCSogW2luY2x1ZGUvc2hlbGwuaF0gW21pc2Mvc2hlbGwuY10KCUltcGxlbWVudGVkIDQgZHJhZy9kcm9wIGZ1bmN0aW9ucyB3aXRoIGRvY3VtZW50ZWQgZnVuY3Rpb25hbGl0eS4KCiAgICAgICAgKiBbbXVsdGltZWRpYS90aW1lLmNdCiAgICAgICAgIkZpeGVkIiBNTVN5c1RpbWVDYWxsYmFjayBrbHVkZ2Ugc28gRXhjZWw1IGxvYWRzIHVwIHdpdGhvdXQgY3Jhc2hpbmcuCgoJKiBbKi8qXSAKICAgICAgICBBZGRlZCBuZXcgZmlsZXMsIG1vcmUgbWVzc2FnZSBkZWZpbml0aW9ucywgc3RydWN0dXJlcywgZGVidWcgaW5mbywKIAlldGMuICBSZXdyb3RlIG1lc3NhZ2UgbG9nZ2luZyBmdW5jdGlvbnMgdG8gcHJvZHVjZSBvdXRwdXQgc2ltaWxhcgogCXRvIFdpblNpZ2h0LiAgQ2hlY2sgb3V0IC1kZWJ1Z21zZyArbWVzc2FnZSBvcHRpb24uCgoJKiBbbWlzYy9maWxlLmNdCiAgICAgICAgRml4ZWQgR2V0RHJpdmVUeXBlIHJldHVybiB2YWx1ZS4gIAoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10gCiAgICAgICAgSG9va3MgYXJlIGludm9rZWQgaW4gbm9ybWFsIG9yZGVyLgoKICAgICAgICAqIFttaXNjZW11LypdCiAgICAgICAgQWRkZWQgc29tZSBmdW5jdGlvbnMgYW5kIGludGVycnVwdHMuCgogICAgICAgICogW21pc2Mvc2hlbGwuY10KICAgICAgICBJbXBsZW1lbnRlZCBEcmFnLi4uIGZ1bmN0aW9ucy4KClRodSBTZXAgMjEgMjM6NTA6MTIgMTk5NSAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtyYy9zeXNyZXNfRmkucmNdIFtyYy9zeXNyZXMucmNdCglGaXJzdCBhdHRlbXB0IGF0IEZpbm5pc2ggW0ZpXSBsYW5ndWFnZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gU2VwIDE3IDE2OjQ3OjQ5IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFsqL01ha2VmaWxlLmluXSBbTWFrZS5ydWxlcy5pbl0KCUNsZWFuZWQgdXAgbWFrZWZpbGVzLCBhZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgV2luZWxpYiwKCWdyb3VwZWQgY29tbW9uIG1ha2UgcnVsZXMgaW4gTWFrZS5ydWxlcy5pbi4KCgkqIFtDb25maWd1cmVdCglSZW5hbWVkIHRvICdDb25maWd1cmUub2xkJzsgcGxlYXNlIHVzZSAnY29uZmlndXJlJyBpbnN0ZWFkLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIERlc3Ryb3lNZW51KCkgdG8gYXZvaWQgZGVsZXRpbmcgdGhlIHNhbWUgbWVudSB0d2ljZS4KCU1vcmUgZml4ZXMgdG8gV01fTUVOVVNFTEVDVCwgYW5kIGFkZGVkIFdNX0lOSVRNRU5VLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRml4ZWQgd3JvbmcgcmVnaXN0ZXIgdmFsdWVzIGRpc3BsYXllZCBieSBSRUxBWV9EZWJ1Z0NhbGwzMigpLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgTG9jYWxMb2NrKCkgYW5kIExvY2FsVW5sb2NrKCkgdG8gaW5jcmVtZW50L2RlY3JlbWVudCB0aGUKCWxvY2sgY291bnQgZm9yIG1vdmVhYmxlIGJsb2Nrcy4KCgkqIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvc2hlbGwuY10gW3JjL3dpbmVyYy5jXQoJTW9kaWZpZWQgdGhlIGdlbmVyYXRlZCBDIGZpbGUgc28gdGhhdCB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24KCShzaXplLCBldGMuKSBpcyBhbHNvIGV4cG9ydGVkLgoJTW9kaWZpZWQgY29tbW9uIGRpYWxvZ3MgdG8gdXNlIHRoZSBuZXcgaW5mb3JtYXRpb25zLgoKCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgoJKiBbcmMvc3lzcmVzLnJjXSBbcmMvc3lzcmVzX0VuLnJjXQoJTW92ZWQgRW5nbGlzaCByZXNvdXJjZXMgdG8gc3lzcmVzX0VuLnJjLgoJQ2hhbmdlZCBpZHMgZnJvbSBudW1lcmljIHRvIHN5bWJvbGljIGZvciBkaWFsb2dzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCB0ZW1wbGF0ZSBwYXJzaW5nIHRvIGJlIGFibGUgdG8gcGFzcyBzZWdtZW50ZWQgcG9pbnRlcnMgdG8KCUNyZWF0ZVdpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3coKSBub3cgdGFrZXMgc2VnbWVudGVkIHBvaW50ZXJzIGZvciBjbGFzcyBhbmQgd2luZG93CgluYW1lcy4KCU1heG1pbWl6ZSBvciBtaW5pbWl6ZSB0aGUgd2luZG93IHVwb24gY3JlYXRpb24gaWYgdGhlIFdTX01BWElNSVpFCglvciBXU19NSU5JTUlaRSBiaXRzIGFyZSBzZXQuCgpUaHUgU2VwIDE0IDE3OjE5OjU3IDE5OTUgIFBhdWwgV2lsaGVsbSAgPHBhdWxAcGF1bC5hY2Nlc3NvbmUuY29tPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgc2Nyb2xsLWJhciBidWdzIGZvciBub24tY2xpZW50IHdpbmRvd3MuCgpUaHUgU2VwIDE0IDE0OjA0OjE0IE1FVCBEU1QgMTk5NSBKb2NoZW4gSG9lbmlja2UgPEpvY2hlbi5Ib2VuaWNrZUBhcmJpLkluZm9ybWF0aWsuVW5pLU9sZGVuYnVyZy5kZT4KCgkqIFtpbmNsdWRlL2N1cnNvci5oXSBbd2luZG93cy9jdXJzb3IuY10KCUN1cnNvciBpcyBub3QgbWlycm9yZWQgYW55IG1vcmUgYW5kIHRoZSBob3RzcG90IGlzIHNldCByaWdodC4KCldlZCBTZXAgMTMgMTQ6MjI6MzEgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW29sZS5oXQoJTWlzYyBzbWFsbCBmaXhlcy4KCk1vbiBTZXAgIDQgMDA6MDE6MjMgMTk5NSAgSm9uIFRvbWJzIDxqb25AZ3RlLmVzaS51cy5lcz4KCgkqIFtyYy9zeXNyZXNfRXMucmNdCglGaXJzdCBhdHRlbXB0IGF0IFNwYW5pc2ggW0VzXSBsYW5ndWFnZSBzdXBwb3J0LgoKU3VuIFNlcCAgMyAxMzoyMjozMyAxOTk1ICAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2luY2x1ZGUvYWxpYXMuaF1bd2luZG93cy9hbGlhcy5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KCU5ldyBmaWxlcwoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVdJREdFVFNfSW5pdDogcmVnaXN0ZXIgYWxpYXMgd2luZG93IHByb2NlZHVyZXMKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxXbmRQcm9jOiBDYWxsIGFsaWFzIGZ1bmN0aW9ucyBpZiBuZWNlc3NhcnkKCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUdldFN0b2NrT2JqZWN0LCBUZXh0T3V0QTogbmV3IHJlbGF5cwoKCSogW21pc2MvdXNlcjMyLmNdW2lmMTYzMi91c2VyMzIuc3BlY11bbWlzYy9NYWtlZmlsZS5pbl1bbWlzYy9JbWFrZWZpbGVdCgl1c2VyMzIuYzogbmV3IGZpbGUKCUJlZ2luUGFpbnQsQ3JlYXRlV2luZG93RXhBLERlZldpbmRvd1Byb2NBLERpc3BhdGNoTWVzc2FnZSxFbmRQYWludCwKCUdldE1lc3NhZ2VBLFJlZ2lzdGVyQ2xhc3NBLFNob3dXaW5kb3csVXBkYXRlV2luZG93OiBuZXcgcmVsYXlzCgoJKiBbaWYxNjMyL3dpbnByb2NzMzIuc3BlY11bbG9hZGVyL3BlX2ltYWdlLmNdW2xvYWRlci9tb2R1bGUuY10KCVBFX1dpbjMyQ2FsbFRvU3RhcnQ6IG5ldyBmdW5jdGlvbgoJTU9EVUxFX0NyZWF0ZUluc3RhbmNlOiByZW1vdmVkIHN0YXRpYyBhdHRyaWJ1dGUKCUxvYWRNb2R1bGU6IFRyeSBsb2FkaW5nIFBFIGltYWdlIG9uIGVycm9yIDIxCglQRV9Mb2FkTW9kdWxlOiBuZXcgZnVuY3Rpb24KCVBFX0xvYWRJbWFnZTogaW5pdGlhbGl6ZSBwZV9kYXRhIHdpdGggMAoJCgkqIFtpbmNsdWRlL2RsbHMuaF1baW5jbHVkZS9wZWV4ZS5oXQoJbW92ZWQgcGVfZGF0YSBhbmQgd19maWxlcyB0byBwZWV4ZS5oCgkKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsQWJvdXQ6IFJlZ2lzdGVyIEFib3V0V25kUHJvYyBhbGlhc2VzCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJaGFuZGxlIDB4NDQwQSBhbmQgMHhEQwoKCSogW21pc2NlbXUvaW50MmYuY10KCWhhbmRsZSAweDg0CgoJKiBbb2JqZWN0cy9kaWIuY10KCUNyZWF0ZURJQml0bWFwOiBjb21wbGFpbiBpZiBCSVRNQVBJTkZPSEVBREVSIGlzIG9mIHdyb25nIHNpemUKCgkqIFt0b29scy9idWlsZC5jXQoJaW5jbHVkZSB3aW5kb3dzLmggYW5kIHJlbGF5MzIuaCBpbnRvIGdlbmVyYXRlZCBXaW4zMiByZWxheXMsCglkb24ndCBkZWNsYXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBpbnQgKCopKCk7CglsaW1pdCBpbiBXSU4zMl9idWlsdGluIHdhcyBvZmYgYnkgb25lCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ0FSRVRfSW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9uLCBjYWxsIG9uIHN0cmF0ZWdpYyBwbGFjZXMKCgkqIFt3aW5kb3dzL21lc3NhZ2Vib3guY10KCU1lc3NhZ2VCb3g6IHJlZ2lzdGVyIG1lc3NhZ2UgYm94IHByb2MgYWxpYXNlcwoKCSogW2lmMTYzMi9hZHZhcGkzMi5zcGVjXVtpZjE2MzIvY29tZGxnMzIuc3BlY10KCU5ldyBmaWxlcwoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1baWYxNjMyL0ltYWtlZmlsZV1baWYxNjMyL3JlbGF5MzIuY10KCWFkZGVkIG5ldyBzcGVjIGZpbGVzCglSRUxBWTMyX0dldEJ1aWx0aW5ETEw6IHBlcmZvcm0gbG9va3VwIGNhc2UgaW5zZW5zaXRpdmUKCVJFTEFZMzJfR2V0RW50cnlQb2ludDogc3RhcnQgbmFtZSBzZWFyY2ggYXQgMAoKCSogW2lmMTYzMi91c2VyLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL2dkaS5zcGVjXQoJQWRkZWQgc3R1YnMgZm9yIG5ldyBXaW45NSBBUEkKClNhdCBTZXAgMiAxOTk1ICBNYXJ0aW4gUm95CgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbiBXTV9JTklURElBTE9HLCBjdXJyZW50IGZpbHRlciBtdXN0IHJlZmxlY3QgbHBvZm4tPm5GaWx0ZXJJbmRleC4KICAJV2hlbiBwcm9jZXNzIElET0sgYnV0dG9uIGluIEZJTEVETEdfV01Db21tYW5kKCksCiAJbHBvZm4tPm5GaWx0ZXJJbmRleCBzaG91bGQgYmUgdXBkYXRlZCB0byBjdXJyZW50IHNlbGVjdGlvbi4KClRodSBBdWcgMzEgMTU6MDA6MDAgMTk5NSBSYW0nb24gR2FyYydpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIHN1cHBvcnQgb2Ygc2VsZi1sb2FkaW5nIG1vZHVsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAzMSAxNzoxOTo1NyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgY29tcGlsZS10aW1lIG9wdGlvbiBmb3IgSVBDLgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBsYW5ndWFnZSwgSVBDIGFuZCBtYWxsb2MKCWRlYnVnZ2luZy4KCgkqIFtjb250cm9scy9tZW51LmNdCglXTV9NRU5VU0VMRUNUIHdhcyBzb21ldGltZXMgc2VudCB0byB0aGUgd3Jvbmcgd2luZG93LgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCglGb3IgdGhlICduZXh0JyBjb21tYW5kLCBvbmx5IHN0ZXAgb3ZlciBpbnN0cnVjdGlvbiB0aGF0IHJlcXVpcmUKCWl0LiBUaGlzIGFsbG93cyAnbmV4dCcgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggam1wIGFuZCByZXQKCWluc3RydWN0aW9ucy4KCgkqIFtpcGMvKi5jXSBbbWVtb3J5L2F0b20uY10gW21lbW9yeS9nbG9iYWwuY10KCUlQQyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgb3V0IGF0IGNvbXBpbGUtdGltZS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQnVnIGZpeCBpbiBUQVNLX1Jlc2NoZWR1bGUoKSB0aGF0IGNvdWxkIGNhdXNlIGEgdGFzayB0byBiZSBkZWxldGVkCgl0d2ljZS4KCgkqIFttaXNjZW11L2Rvc21lbS5jXSAoTmV3IGZpbGUpCglQYXJ0aWFsIGVtdWxhdGlvbiBvZiB0aGUgQklPUyBkYXRhIHNlZ21lbnQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJVHJhcCBhdHRlbXB0cyB0byBhY2Nlc3Mgc2VsZWN0b3IgMHg0MCBhbmQgcmVtYXAgdGhlIGFjY2VzcyB0bwoJc2VnbWVudCBfXzAwNDBILgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBidWcgaW4gQ2FsbFRvMzJfTGFyZ2VTdGFjaygpIHRoYXQgY2F1c2VkIHByb2JsZW1zIHdoZW4KCWNvbXBpbGluZyBXaW5lIHdpdGggdGhlIC1mb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBoYXJkd2FyZSBldmVudCBoYW5kbGluZyB0aGF0IGNvdWxkIGNhdXNlIHNvbWUgZXZlbnRzCgl0byBnZXQgaWdub3JlZC4KClNhdCBBdWcgMjYgMTM6MTI6NTkgSVNUIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB2bmV0LmlibS5jb20+CgoJKiBbaXBjL1JFQURNRV0gW2lwYy9kZGUudGV4XQoJTGFUZVggZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGlwYyBhbmQgRERFIHN0dWZmLgoKV2VkIEF1ZyAyMyAyMjowMToyMyBHTVQgMTk5NSBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHZuZXQuaWJtLmNvbT4KCgkqIFtpcGMvSW1ha2VmaWxlXSBbaXBjL3dpbmVfdGVzdF9zdHViLmNdCglGaXhlZCBJUEMgdGVzdGluZy4gTm93IGl0IGNhbiBiZSBjb21waWxlZCB3aXRoICJtYWtlIHRlc3RzIgoKV2VkIEF1ZyAyMyAyMTowNDoxNCAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkB3YWItdGlzLnJhYm9iYW5rLm5sPgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbbWlzYy9tYWluLmNdCglBZGRlZCBHZXRXaW5EZWJ1Z0luZm8vU2V0V2luRGVidWdJbmZvIHN0dWIgZm9yIHBsYXllci5leGUKClN1biBBdWcgIDIwIDEzOjQ5OjQyIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjZW11L2ludDIxLmNdCglNaXNjIGZpeCB0byBpbnQyMSxhaD00MCAod3JpdGUpIHRvIG1hdGNoIF9sd3JpdGUoKS4KCUFYPTB4NDQwQSAoY2hlY2sgaWYgaGFuZGxlIGlzIHJlbW90ZSkgYWRkZWQuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJTW92ZWQgbWNpU2VuZFN0cmluZyB0byBtY2lzdHJpbmcuYy4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJTmV3IGZpbGUsIHN0cmluZyBpbnRlcmZhY2UgZm9yIE1DSSAobm90IGNvbXBsZXRlLCBub3QgdGhvcm91Z2hseQoJdGVzdGVkKS4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglJT0NUTCBwcmludHMgZXJyb3JzOyBvbmUgcGFyYW5vaWQgY2hlY2sgZGlzYWJsZWQuCgoJKiBbbWlzYy9maWxlLmNdCglNaXNjIG9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9iaXRibHQuY10KCVN0dWIgZm9yIEZhc3RXaW5kb3dGcmFtZSAocGFyYW1ldGVycyBub3QgY29ycmVjdCkuCgpTYXQgQXVnIDE5IDAxOjMxOjIzIDE5OTUgIEdyYWhhbSBNZW5oZW5uaXR0IDxnZm1Ad2VycGxlLm1pcmEubmV0LmF1PgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgaXRlcmF0ZWQgc2VnbWVudHMuCgpTYXQgQXVnIDE5IDAwOjQzOjA0IDE5OTUgIEFuZHJldyBUYXlsb3IgIChhdGF5bG9yQGNhZHZpc2lvbi5jb20pCgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglJbiBmdW5jdGlvbiBNQVBQSU5HX0ZpeElzb3Ryb3BpYygpLCBWcG9ydEV4dFtYWV0gaXMgbXVsdGlwbGllZCBieQogCXRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAoeWRpbSAvIHhkaW0pIG9yICh4ZGltIC8geWRpbSkuCgpUaHUgQXVnIDE1IDIzOjAwOjE2ICBHcmVnb3J5IFRydWJldHNrb3kgIDxncmlzaGFAbWlyYS5jb20+CgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZGVkIHNvbWUgaW5jbHVkZXMgZm9yIFdpbmRvd3MgOTUuCgoJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdCglBZGRlZCBzb21lIHN5c21ldHJpY3MgZm9yIFdpbmRvd3MgOTUuCgoJKiBbaW5jbHVkZS9iaXRtYXBzLyo5NV0KCU5ldyBmaWxlczogb2JtX2Nsb3NlXzk1LCBvYm1fY2xvc2VkXzk1LCBvYm1fcmVkdWNlXzk1LCBvYm1fcmVkdWNlZF85NQoJb2JtX3pvb21fOTUsIG9ibV96b29tZF85NSAtIHRoZXNlIGFyZSBzb21lIHBpeG1hcHMgZm9yIFdpbmRvd3MgOTUuCgpUaHUgQXVnIDEwIDEyOjAwOjAwIDE5OTUgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaG5ldC5vcmcpCgoJKiBbbWlzYy9zaGVsbC5jXSBbcmMvc3lzcmVzKi5yY10KCVRoZSBjYXB0aW9uIG9mIHRoZSBTaGVsbEFib3V0IGRpYWxvZyBib3ggaXMgbGFuZ3VhZ2Ugc3BlY2lmaWMgYW5kCiAJc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlIHJlc291cmNlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAxNyAxOTozMDoxNCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbKi9NYWtlZmlsZS5pbl0KCVJlbW92ZWQgd2luZWxpYmNsZWFuIHRhcmdldCwgYXMgaXQgZG9lc24ndCB3b3JrIGFueXdheS4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUF2b2lkIGRyYXdpbmcgdGhlIGZvY3VzIHJlY3RhbmdsZSBvdXRzaWRlIG9mIHRoZSBidXR0b24uCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRml4ZWQgYnVnIHdpdGggdGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIGJ5dGVzIGZvciB0aGUgRWRpdAoJY29udHJvbCAoY2F1c2VkIEV1ZG9yYSB0byBjcmFzaCkuCgoJKiBbZGVidWdnZXIvKl0gW2luY2x1ZGUvZGVidWdnZXIuaF0KCVVuaWZpZWQgZGVidWdnZXIgYWRkcmVzcyBoYW5kbGluZy4gU2VnbWVudGVkIGFuZCBsaW5lYXIgYWRkcmVzc2VzCglhcmUgbm8gZ3JvdXBlZCBpbiBhIHNpbmdsZSB0eXBlIERCR19BRERSLgoJQWxsIGNvbW1hbmRzIG5vdyBhY2NlcHQgc2VnOm9mZiBhZGRyZXNzZXMuCglNb2R1bGUgZW50cnkgcG9pbnRzIGFyZSBub3cgbG9hZGVkIHVwb24gZmlyc3QgZW50cnkgdG8gdGhlCglkZWJ1Z2dlciwgc28gdGhhdCBlbnRyeSBwb2ludHMgb2YgdGhlIGxvYWRlZCBleGVjdXRhYmxlIGFsc28KCWFwcGVhciBpbiB0aGUgc3ltYm9sIHRhYmxlLgoKCSogW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFttaXNjZW11LyouY10KCVJlZ2lzdGVyIG1hY3JvcyBhcmUgbm93IG9mIHRoZSBmb3JtICdBWF9yZWcoY29udGV4dCknIGluc3RlYWQgb2YgJ0FYJy4KCVRoaXMgbWFrZXMgY29kZSBsZXNzIHJlYWRhYmxlLCBidXQgd2lsbCBwcmV2ZW50IGEgbG90IG9mIG5hbWUKCWNsYXNoZXMgd2l0aCBvdGhlciBkZWZpbml0aW9ucy4gSXQgYWxzbyBhdm9pZHMgYSBoaWRkZW4gcmVmZXJlbmNlCgl0byB0aGUgJ2NvbnRleHQnIHZhcmlhYmxlLgoKCSogW2lwYy9kZGVfYXRvbS5jXSBbbWlzYy9hdG9tLmNdCglBbGwgKkFkZEF0b20gYW5kICpGaW5kQXRvbSBmdW5jdGlvbnMgbm93IHRha2UgYSBTRUdQVFIgcGFyYW1ldGVyLAoJdG8gYWxsb3cgc3VwcG9ydGluZyBpbnRlZ2VyIGF0b21zLgoJTW92ZWQgYXRvbS5jIHRvIG1lbW9yeS8gZGlyZWN0b3J5LgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBlbnZpcm9ubWVudCBhbGxvY2F0aW9uIHRvIGNvbXB1dGUgdGhlIHNpemUgZHluYW1pY2FsbHkuCglBZGRlZCAnd2luZGlyJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCUZpeGVkIEdldERPU0Vudmlyb25tZW50KCkgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHRhc2sgZW52aXJvbm1lbnQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gTVNHX0dldFdpbmRvd0ZvckV2ZW50KCkuCgpXZWQgQXVnICA5IDExOjQwOjQzIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL29sZS5oXQoJQWRkZWQgYSBsb3Qgb2Ygc3RydWN0dXJlcyAgZnJvbSBteSBCb3JsYW5kIE1hbnVhbC4gTmVpdGhlciBjb21wbGV0ZSwKCW5vciAxMDAlIHJpZ2h0IChjaGVjayBwbGVhc2UpCgkKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIHNvbWUgb2YgdGhlIFJlZyogZnVuY3Rpb25zLgoJRW5oYW5jZWQgU2hlbGxFeGVjdXRlLgoJUGxlYXNlIHRlc3Q6IHdpbmUgInJlZ2VkaXQuZXhlIC92IiBtcGxheWVyLmV4ZSBzb3VuZHJlYy5leGUKCURvIFlPVSBrbm93IHRoZSBmb3JtYXQgb2YgXFdJTkRPV1NcUkVHLkRBVD8gTWFpbCBtZSBwbGVhc2UgOikKCgkqIFttaXNjL2Rvc19mcy5jXQoJTWFrZSB1bXNkb3MgbW91bnRlZCB3aW5kb3dzIGRpcnMgd29yayBhZ2Fpbi4KCgkqIFttaXNjZW11L2VtdWxhdGUuY10KCUFkZGVkIHNvbWUgY29tbWVudHMsIHByZWltcGxlbWVudGF0aW9uIG9mIHN1YmZ1bmN0aW9uIDcuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJSW1wbGVtZW50ZWQgbWNpU2VuZFN0cmluZy4gbm90IGNvbXBsZXRlLCBub3QgY2xlYW4sIG5vdAoJbmVjZXNzYXJpbHkgd29ya2luZyAob25seSBjaGVja2VkIHdpdGggYSBwcm9ncmFtIHdoaWNoIHVzZXMKIAknY2RhdWRpbycgKG9uZSB3b3JraW5nIHByb2dyYW0gaXMgY29vbC5leGUsIGEgc2hhcmV3YXJlIHdhdmVkaXRvcgogCXdpdGggY2RhdWRpbyBwbGF5IGZhY2lsaXRpZXMuKQoKCSogW211bHRpbWVkaWEvbWNpY2RhLmNdCglTZWdwdHIgZml4ZXMgaW4gRHJpdmVyUHJvYwoJRGVmYXVsdCBjZHJvbSBkcml2ZSBpbiBMaW51eCBpcyAvZGV2L2Nkcm9tIC4uLiB1c3VhbGx5IGEgc3ltYm9saWMKIAlsaW5rIHRvIHlvdXIgcmVhbCBjZHJvbSBkZXZpY2UuCgpUdWUgQXVnICA4IDE5OjQxOjUwIENEVCAxOTk1IERhbmllbCBTY2hlcGxlciA8ZGtzMkBjZWMud3VzdGwuZWR1PgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRG9uJ3QgY3Jhc2ggaW4gYSBMb2FkU3RyaW5nIHRvIE5VTEwKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIGFjY2VsZXJhdG9ycyB0byB3b3JrIHdpdGggbW9kaWZpZXJzLiAgKEFMVC14IG1vZGlmaWVycyBzdGlsbAogCXdvbid0IHdvcmsgdW5sZXNzIHRoZSBBTFQga2V5cHJlc3MgZXhpdGVkIHRoZSBtZW51LikKCgkqIFttaXNjL2ZpbGUuY10KCUV4cGFuZCBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0IHdpdGggYW4gX2x3cml0ZSBvZiBzaXplIHplcm8uCgoJKiBbbWlzYy9maWxlLmNdCglTZXQgYSBuZXdseSBjcmVhdGVkIGZpbGUgdG8gcmVhZC13cml0ZSBpbnN0ZWFkIG9mIHdyaXRlLW9ubHkuCgkKU3VuIEF1ZyAgNiAyMDoyODozNSAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL21zZG9zLmhdCglGaXhlZCB0byByZXR1cm4gRE9TIHZlcnNpb24gNi4yMiwgYW5kIHRoZSBjb3JyZWN0IGJ5dGUgb3JkZXIKCWZvciBXaW5kb3dzIHByb2dyYW1zLgoKV2VkIEF1ZyAgMiAxMjozNjozMyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjL21haW4uY10KCU1ha2UgdGhlIG5ldyBJUEMgcnVuLXRpbWUgc2VsZWN0aWJsZSwgZGlzYWJsaW5nIGl0IGJ5IGRlZmF1bHQuCgkoSSB0aGluayBpdCdzIG9ubHkgdXNlZnVsIGZvciBsaWJ3aW5lLCBhbnl3YXkuKQoKCSogW2xvYWRlci90YXNrLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCUluIEZyZWVTZWxlY3RvcigpLCB3YWxrIHVwIHRoZSBzdGFjayBhbmQgZml4IHRoZSBmcmFtZXMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCU1pc3NpbmcgYnJlYWsgc3RhdGVtZW50IGluIERJQl9TZXRJbWFnZUJpdHNfUkxFOCgpLgoJSW4gR2V0RElCaXRzKCksIHNldCB0aGUgY29tcHJlc3Npb24gZmxhZyBpbiB0aGUgYml0bWFwIGluZm8gdG8gemVyby4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJR2V0TmV4dERsZ0dyb3VwSXRlbSgpIG5lZWRzIHRvIHRyZWF0IHRoZSBmaXJzdCBjaGlsZCBhcyBpZiBpdCBoYWQKCWFuIGltcGxpY2l0IFdTX0dST1VQIGJpdCBzZXQuCgpNb24gSnVsIDMxIDE1OjQ0OjQ3IEVEVCAxOTk1IExvdWlzLUQuIER1YmVhdSA8bGRkQHN0ZXAucG9seW10bC5jYT4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUXVpY2snbiBkaXJ0eSBmaXggZm9yIHRoZSBpbml0aWFsaXNhdGlvbiBvZiB0aGUgWjogaW5mb3JtYXRpb24KCXN0cnVjdHVyZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEp1bCAyMiAyMjozOTowOSBJRFQgMTk5NSBNaWNoYWVsIFZla3NsZXIgPGUxNjc4MjIzQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbD4KCgkqIFtpcGMvKl0KCU5ldyBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBuZXcgaW50ZXItd2luZQogCWNvbW11bmljYXRpb25zIHN1cHBvcnQuIEl0IGVuYWJsZXMgRERFIHByb3RvY29scyBiZXR3ZWVuIHR3byB3aW5lCiAJaW5zdGFuY2VzLiAgQ3VycmVudGx5IGl0IGlzIGxpbWl0ZWQgdG8gRERFLCBidXQgY2FuIGJlIGVuaGFuY2VkIHRvCiAJc3VwcG9ydCBPTEUgYmV0d2VlbiAyIGRpZmZlcmVudCB3aW5lIGluc3RhbmNlcy4gIFRoaXMgaXMgdmVyeQogCWltcG9ydGFudCBmb3IgbGlid2luZS5hIERERS9PTEUgc3VwcG9ydC4KCgkqIFt0b29scy9pcGNsXQogICAgCUEgc2NyaXB0IHRvIGRlbGV0ZSBnYXJiYWdlIElQQyBoYW5kbGVzIChzaGFyZWQgbWVtb3J5LCBzZW1hcGhvcmVzCiAJYW5kIG1lc3NhZ2UgcXVldWVzKS4gIFRoZSBjdXJyZW50IGludGVyLXdpbmUgY29tbXVuaWNhdGlvbiBpcyBub3QKIAlwZXJmZWN0LCBhbmQgc29tZXRpbWVzIGxlYXZlcyBnYXJiYWdlIGJlaGluZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvYXRvbS5oXSBbaW5jbHVkZS9nbG9iYWwuaF0KIAlbbG9hZGVyL3NlbGVjdG9yLmNdIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21vZHVsZS5jXQogCVtsb2FkZXIvc2lnbmFsLmNdIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjL2F0b20uY10KIAlbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbi5jXQoJW0ltYWtlZmlsZV0KICAgIAlIb29rcyBmb3IgaW50ZXItd2luZSBEREUgc3VwcG9ydCwgY3VycmVudCBHbG9iYWwuKkF0b20gZnVuY3Rpb25zCiAJcmVuYW1lZCB0byBMb2NhbC4qQXRvbSBzaW5jZSBHbG9iYWwuKkF0b20gYXJlIHVzZWQgZm9yIEludGVyLVdpbmUKIAlEREUgY29tbXVuaWNhdGlvbi4gKFRoZSBmaXJzdCBjYWxsIHRvIHRoZXNlIGZ1bmN0aW9ucyBzZXRzIHVwIHRoZQogCUlQQyBzdHJ1Y3R1cmVzIC0gd2hpY2ggb3RoZXJ3aXNlIGNhdXNlIHVubmVlZGVkIG92ZXJoZWFkLgoKTW9uIEp1bCAxNyAxOTo1NToyMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJRG9uJ3QgY3Jhc2ggaWYgYSBOVUxMIHN0cmluZyBpcyBwYXNzZWQgdG8gbWVudSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglXZSBub3cgdXNlIGEgYml0IGluIGxkdF9mbGFnc19jb3B5IHRvIGluZGljYXRlIGZyZWUgTERUIGVudHJpZXMuCglGaXhlZCBhIGJ1ZyBpbiBTRUxFQ1RPUl9SZWFsbG9jQmxvY2sgdGhhdCBjb3VsZCBjYXVzZSBpdCB0bwoJb3ZlcndyaXRlIHZhbGlkIExEVCBlbnRyaWVzIHdoZW4gZ3Jvd2luZyBhIGJsb2NrLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUVtdWxhdGUgaW50IHh4IGluc3RydWN0aW9uIGJ5IHN0b3JpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IgaW4KCUNTOklQIGFuZCByZXR1cm5pbmcgZGlyZWN0bHkuIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbSB0byBpbnN0YWxsIGFuCglpbnRlcnJ1cHQgdmVjdG9yLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5fR2V0VG9wUGFyZW50IHRvIGdldCB0aGUgdG9wLWxldmVsIHBhcmVudCBvZiBhCgl3aW5kb3cuCgpTdW4gSnVsICAxNiAxODoxNzoxNyAxOTk1ICBHcmVnb3J5IFRydWJldHNrb3kgPGdyaXNoYUBtaXJhLmNvbT4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgQWRkZWQgTG9hZEljb25IYW5kbGVyLiBJdCBkb2Vzbid0IGRvIGFueXRoaW5nIHlldCwgYnV0IG5vdyB5b3UKICAgICAgICBjYW4gdXNlIGJvcmxhbmQgaGVscCBmaWxlcyB3aXRoIHdpbmhlbHAuZXhlLgoKU3VuIEp1bCAxNiAxMTo1ODo0NSAxOTk1IEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFttaXNjL21haW4uY10KCUZpeGVkIHRvIHJldHVybiAzODYgRW5oYW5jZWQgbW9kZSBjb3JyZWN0bHkuIEFsc28gcmV0dXJuIHRoZSBzYW1lCiAJdHlwZSBvZiBDUFUsIGZvciBib3RoIEVuaGFuY2VkIGFuZCBTdGFuZGFyZCBtb2RlLCBuYW1lbHkgYSAzODYuCgpTdW4gSnVsIDE2IDAwOjAyOjA0IDE5OTUgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtDb25maWd1cmVdIFtpbmNsdWRlL29wdGlvbnMuaF0gW2luY2x1ZGUvd2luZW9wdHMuaF0KCSAgW21pc2MvbWFpbi5jXVttaXNjL3NweS5jXQoJICBSZW1vdmVkIHN1cHBvcnQgb2Ygc3B5IGZpbGUuIFJlZGlyZWN0ZWQgc3B5IG1lc3NhZ2VzIHRvIHN0ZGRlYi4KCSAgUmVtb3ZlZCAtc3B5IG9wdGlvbi4gQWRkZWQgLWRlYnVnbXNnICtzcHkgb3B0aW9uLgoKCSogW2RlYnVnZ2VyL2RiZy55XVtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRW5hYmxlZCBzZWdtZW50ZWQgYWRkcmVzc2VzIChzZWc6b2ZmcykgZm9yIGJyZWFrIGFuZCB4IGNvbW1hbmRzLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcmVnaW9uLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCgkgIFtpbmNsdWRlL3JlZ2lvbi5oXQoJRnJhbWVSZ24sIFJFR0lPTl9GcmFtZVJnbjogTmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUlzV2luT2xkQXBUYXNrOiBSZXR1cm4gZmFsc2UKCgkqIFtpZjE2MzIvbW91c2Uuc3BlY10KCUNwbEFwcGxldDogUmVtb3ZlZAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL3dpbi5jXQoJU2hvd093bmVkUG9wdXBzOiBOZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KCWluZXRfYWRkciwgc2VsZWN0OiBOZXcgcHJvdG90eXBlcyBpbiByZWxheSBjb2RlCglGaXhlZCBtZW1vcnkgbGF5b3V0IGZvciBuZXRkYiBmdW5jdGlvbnMgKGdldFhieVkpLgoJV0lOU09DS19pb2N0bHNvY2tldDogVHJhbnNsYXRlZCBGSU9OUkVBRCwgRklPTkJJTywgYW5kIEZJT0FTWU5DCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJUmVjdFZpc2libGU6IEZpeGVkIGNhbGwgdG8gTFBUb0RQCgoJKiBbcmMvd2luZXJjLmNdCgltYWluOiBSZW1vdmVkIGV4dHJhIGFyZ3VtZW50IHRvIGdldG9wdCBmb3IgTGludXguCgpUdWUgSnVsIDExIDAwOjE0OjQxIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJWWV0IGFub3RoZXIgZml4IGZvciBMaXN0Qm94RGlyZWN0b3J5KCkuCgkKCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCU1ha2UgR2V0TW9kdWxlSGFuZGxlKCkgYWNjZXB0IGluc3RhbmNlIGhhbmRsZXMgYXMgcGFyYW1ldGVyLgoKICAgICAgICAqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci90YXNrLmNdCglQdXQgYSBtYWdpYyBjb29raWUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgMzIgYml0IHN0YWNrLCBhbmQgY2hlY2sgb24KCWVhY2ggcmV0dXJuIGZyb20gYSAzMiBiaXQgZnVuY3Rpb24gd2hldGhlciBpdCdzIHN0aWxsIHRoZXJlLiBDb21wbGFpbgoJaWYgaXQncyBub3QuCgogICAgICAgICogW2lmMTYzMi91c2VyLnNwZWNdCglXcm9uZyBlbnRyeSBmb3IgQ2xvc2VEcml2ZXIoKS4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvZG9zX2ZzLmhdIFttaXNjL2ZpbGUuY10KCVttaXNjZW11L2ludDIxLmNdCglMYXJnZSBwYXJ0cyBvZiBkb3NfZnMuYyBzaW1wbGlmaWVkLiBDaGFuZ2VkIGl0IHRvIHVzZSBvbmUKCWN1cnJlbnQgZHJpdmUvZGlyZWN0b3J5IHBlciB0YXNrLCB3aGljaCBpcyBzZXQgdG8gdGhlIG1vZHVsZSBwYXRoIG9uCgl0YXNrIGNyZWF0aW9uLgoJUHJldmVudCBDb3JlbFBhaW50IGZyb20gY2xvc2luZyBzdGRpbi4KCW9wZW4oKSB3aXRoIE9fQ1JFQVQgc2V0IG11c3QgYmUgcGFzc2VkIHRocmVlIHBhcmFtZXRlcnMuCglET1MgRmluZEZpcnN0KCkvRmluZE5leHQoKSBjb3VsZCBjcmFzaCB3aGVuIEZBX0xBQkVMIHdhcyBzZXQuIEZpeGVkLAoJaXQncyBpbiBET1NfcmVhZGRpcigpIG5vdy4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCVNvbWUgYmFkbHkgd3JpdHRlbiBzb2Z0d2FyZSAoTG90dXMgRnJlZWxhbmNlIEdyYXBoaWNzKSBwYXNzZXMgYSBib2d1cwoJc2l6ZSBwYXJhbWV0ZXIgdGhhdCBjYXVzZWQgV2luZSB0byB3cml0ZSBvZmYgdGhlIGVuZCBvZiBhIHNlZ21lbnQuCglGaXhlZC4gKEl0J3MgcHJvYmFibHkgdG9vIHBhcmFub2lkIG5vdy4pCgkKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvdGltZS5jXSBbbXVsdGltZWRpYS9qb3lzdGljay5jXQoJW211bHRpbWVkaWEvSW1ha2VmaWxlXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCgkxNiBiaXQgZW50cnkgcG9pbnQgZm9yIE1NU3lzVGltZUNhbGxiYWNrLgoJU3BsaXQgb2ZmIHRpbWUuYyBhbmQgam95c3RpY2suYyBmcm9tIG1tc3lzdGVtLmMuCgkKCSogW29iamVjdHMvZGliLmNdCglHZXRESUJpdHMoKTogY2FsbCBYR2V0SW1hZ2UoKSB2aWEgQ2FsbFRvMzJfTGFyZ2VTdGFjay4KCiAgICAgICAgKiBbd2luZG93cy9jdXJzb3IuY10KCURlc3Ryb3lDdXJzb3IoKTogZG8gbm90aGluZyBmb3IgYnVpbHRpbiBjdXJzb3JzLgoJCgkqIFt3aW5kb3dzL21kaS5jXQoJSGFsZiBvZiBXTV9NRElTRVRNRU5VIGltcGxlbWVudGVkLgoJCgkqIFt3aW5kb3dzL3dpbi5jXQoJRW51bVdpbmRvd3MoKSBhbmQgRW51bVRhc2tXaW5kb3dzKCkgbmV2ZXIgZW51bWVyYXRlZCBhbnkgd2luZG93cy4KCUZpeGVkLgoKCSogW3dpbmRvd3MvKi5jXQoJRml4ZWQgR2V0UGFyZW50KCkgdG8gcmV0dXJuIGNvcnJlY3QgdmFsdWVzIGZvciBvd25lZCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGRpc2FibGVkIHRvcC1sZXZlbCB3aW5kb3dzLgoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJV29yayBhcm91bmQgYSBidWcgaW4gZ2NjLTIuNy4wLgoJCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFttZW1vcnkvZ2xvYmFsLmNdIAoJW2xvYWRlci90YXNrLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCVNvbWUgVmlzdWFsIEJhc2ljIHByb2dyYW1zIChhbmQgcG9zc2libHkgb3RoZXJzLCB0b28pIGV4cGVjdCBFUyB0byBiZSAKCXByZXNlcnZlZCBieSBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvIHNhdmUgaXQuCglJbiBHbG9iYWxGcmVlKCkgYW5kIEZyZWVTZWxlY3RvcigpLCB3ZSBtdXN0IGNsZWFyIENVUlJFTlRfU1RBQ0sxNi0+ZXMgCgl0byBwcmV2ZW50IHNlZ2ZhdWx0cyBpZiBFUyBjb250YWluZWQgdGhlIHNlbGVjdG9yIHRvIGJlIGZyZWVkLgoKU3VuIEp1bCAgOSAyMDoyMToyMCAxOTk1ICBKb24gVG9tYnMgIDxqb25AZ3RleDAyLnVzLmVzPgoKCSogWyovKl0KCUFkZGVkIG1pc3NpbmcgcHJvdG90eXBlcyB0byBoZWFkZXIgZmlsZXMgYW5kIHJlbGV2YW50IGluY2x1ZGVzCgl0byByZWR1Y2UgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoKU3VuIEp1bCAgOSAxODozMjo1NiAxOTk1ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2NvbmZpZy5oXSBbKi9NYWtlZmlsZS5pbl0KCU5ldyBjb25maWd1cmF0aW9uIHNjaGVtZSBiYXNlZCBvbiBhdXRvY29uZi4KClNhdCBKdWwgIDggMTQ6MTI6NDUgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmErQGNzLmNtdS5lZHU+CgoJKiBbbWlzY2VtdS9pb3BvcnRzLmNdCglSZXZhbXAgdG8gaGF2ZSBvbmx5IG9uZSBpbi0gYW5kIG9uZSBvdXQtIHZhcmlhbnQsIGJvdGggcmVhbGx5CiAJaW1wbGVtZW50ZWQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uOiBVc2UgbmV3IGlvcG9ydCBpbnRlcmZhY2UuICBJbXBsZW1lbnQKIAlzdHJpbmcgaW8uICBDb3JyZWN0IGluc3RydWN0aW9uIHBvaW50ZXIgZm9yIDMyLWJpdCBjb2RlLgoKCSogW2luY2x1ZGUvbWlzY2VtdS5oXQoJVXBkYXRlIHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcy4KCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXQoJRGVmaW5lZCBGUyBhbmQgR1MuCgpTYXQgSnVsICA4IDEzOjM4OjU0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZG9zX2ZzLmNdCglDaG9wT2ZmU2xhc2goKTogQSBwYXRoIGNvbnNpc3Rpbmcgb2ZmIGEgc2luZ2xlIHNsYXNoIGlzIGxlZnQKIAlpbnRhY3QsIGFuZCBtdWx0aXBsZSBzbGFzaGVzIGFyZSBhbGwgcmVtb3ZlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1bCAgNSAxOTowNjozNSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBkcmF3aW5nIGJ1ZyB0aGF0IGNhdXNlZCBwYXJ0IG9mIGEgbm9uLWNsaWVudCBzY3JvbGwgYmFyCgl0byBiZSBwYWludGVkIGV2ZW4gd2hlbiB0aGUgc2Nyb2xsLWJhciB3YXMgaGlkZGVuLgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtkZWJ1Z2dlci9kYmcueV0KCVJld3JvdGUgYnJlYWtwb2ludCBoYW5kbGluZyB0byB3b3JrIGluIDE2LWJpdCBtb2RlLgoJSW1wbGVtZW50ZWQgc2luZ2xlLXN0ZXBwaW5nICgnc3RlcCcgYW5kICduZXh0JyBpbnN0cnVjdGlvbnMpLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglGb3JtYXQgc3BlY2lmaWVyIGlzIG5vdyBhIHNlcGFyYXRlIHRva2VuLgoJRW50ZXJpbmcgYW4gZW1wdHkgbGluZSBhdCB0aGUgZGVidWdnZXIgcHJvbXB0IGNhdXNlcyB0aGUgcHJldmlvdXMKCWNvbW1hbmQgdG8gYmUgcmVwZWF0ZWQsIGxpa2UgdW5kZXIgZ2RiLgoJCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXSBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglEaWZmZXJlbnRpYXRlIDE2LWJpdCBhbmQgMzItYml0IHJlZ2lzdGVycyB3aXRob3V0IHRha2luZyBjdXJyZW50Cgltb2RlIGludG8gYWNjb3VudCAoJGVheCBpcyBhbHdheXMgMzItYml0LCAkYXggYWx3YXlzIDE2LWJpdCkuCgoJKiBbZGVidWdnZXIvc3RhY2suY10KCUZpeGVkIHN0YWNrIGluZm9ybWF0aW9uIHJvdXRpbmVzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQKCWFuZCAzMi1iaXQgc3RhY2tzLgoKCSogW2xvYWRlci90YXNrLmNdCglPcHRpb24gLWRlYnVnIG5vdyBzZXRzIGEgYnJlYWtwb2ludCBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YKCWV2ZXJ5IGxvYWRlZCB0YXNrLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIGhhbmRsaW5nIG9mIGxvY2ssIHJlcGUgYW5kIHJlcG5lIHByZWZpeGVzLgoKCSogW29iamVjdHMvZGliLmNdCglDaGFuZ2VkIFN0cmV0Y2hESUJpdHMoKSB0byBkbyB0aGUgY29ycmVjdCB0aGluZywgZXZlbiBpZiBpdCdzIHN0aWxsCglub3QgcmVhbGx5IG9wdGltYWwuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZXMgaW4gUm91bmRSZWN0KCksIHRoYW5rcyB0byBCYWJhayBNYXNhbGVoZGFuLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJVHJpZWQgdG8gZml4IG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdpdGggcmVzcGVjdCB0byBkaXNhYmxlZAoJd2luZG93cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglDbGVhciBXSU5fTkVFRFNfTkNQQUlOVCBmbGFnIGJlZm9yZSBzZW5kaW5nIFdNX05DUEFJTlQgdG8gYXZvaWQKCWluZmluaXRlIGxvb3BzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBJc1dpbmRvd1Zpc2libGUoKSB0byByZXR1cm4gRkFMU0Ugd2hlbiBvbmUgb2YgdGhlIHBhcmVudAoJd2luZG93cyBpcyBoaWRkZW4uCgpTYXQgSnVsICAxIDIyOjA4OjIxIDE5OTUgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdW21pc2MvY29tcG9iai5jXQoJQ29HZXRNYWxsb2M6IE5ldyBmdW5jdGlvbgoJQWRkZWQgcmVsYXkgZW50cmllcyBmb3IgQ09NUE9CSiBvcmRpbmFscyBhYm92ZSAxMDAKCUNvSW5pdGlhbGl6ZTogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gRFdPUkQKCgkqIFtpZjE2MzIvb2xlMi5zcGVjXQoJRXhwb3J0ZWQgaW1wbGVtZW50YXRpb24gb2YgT2xlQnVpbGRWZXJzaW9uCgoJKiBbaWYxNjMyL29sZTJkaXNwLnNwZWNdW21pc2Mvb2xlMmRpc3AuY11bbWlzYy9JbWFrZWZpbGVdCglvbGUyZGlzcC5jOiBOZXcgZmlsZQoJU3lzQWxsb2NTdHJpbmcsIFN5c1JlYWxsb2NTdHJpbmcsIFN5c0FsbG9jU3RyaW5nTGVuLAoJU3lzUmVBbGxvY1N0cmluZ0xlbiwgU3lzRnJlZVN0cmluZywgU3lzU3RyaW5nTGVuOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL29sZTJubHMuc3BlY11baW5jbHVkZS93aW5ubHMuaF1bbWlzYy9vbGUybmxzLmNdCglDb21wYXJlU3RyaW5nQTogTmV3IGZ1bmN0aW9uCgpUaHUgSnVuIDI5IDE5OjQyOjAyIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJTmV3IHN0dWJzIGZvciBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZSwgR2V0R2x5cGhPdXRsaW5lLgoKVGh1IEp1biAyOSAxMzo0NzowOCBHTVQgMTk5NSAgR/ZyYW4gVGh5bmkgIChnb3JhbkBub3Jyc2tlbi5iaWxkYmFzZW4uc2UpCgoJKiBbbWlzYy9jb21tZGxnLmNdCglFeHRlbnNpdmUgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIHRvIEZpbGVEaWFsb2cgaGFuZGxpbmcsCiAgICAgICAgYmVoYXZlcyBtb3JlIGxpa2UgbmF0aXZlIFdpbmRvd3MuCgpXZWQgSnVuIDI4IDEzOjA0OjQ0IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10KCVNvbWUgbWlub3Igb3B0aW1pemF0aW9ucy4KCQoJKiBbbWVtb3J5L2xvY2FsLmNdCglMT0NBTF9GaW5kRnJlZUJsb2NrKCk6IE5ldmVyIHVzZSB0aGUgbGFzdCBvbmUuCgkKCSogW21lbW9yeS9nbG9iYWwuY10KCUdsb2JhbFJlQWxsb2MoKTogR01FTV9NT0RJRlkgbXVzdCBub3QgYmUgaWdub3JlZCB3aGVuIHNpemU9PTAuCgkKCSogW21pc2MvZmlsZS5jXQoJcmVhZCgpIHJldHVybnMgYW4gZXJyb3Igd2hlbiBsZW5ndGg9PTAuIFRoaXMgaXMgbm90IHdoYXQgV2luZG93cwoJcHJvZ3JhbXMgZXhwZWN0LCBzbyBwYXkgYXR0ZW50aW9uIHRvIHRoaXMgaW4gX2xyZWFkKCkuIENoYW5nZWQgdGhpcwoJaW4gX2x3cml0ZSgpLCBfaHJlYWQoKSwgX2h3cml0ZSgpLCB0b28uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglMb2FkSWNvbigpOiBJZ25vcmUgYmloLT5iaVNpemVJbWFnZSwgc29tZSBpY29ucyBoYXZlIHdyb25nIHZhbHVlcyBpbgoJdGhlcmUuCgkKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJV3Jvbmcgc3BlYyBmaWxlIGVudHJpZXMgY2F1c2VkIGhhdm9jOiBIS0VZIGhhcyAzMiBiaXQsIG5vdCAxNi4KCUFjY2VwdCBzb21lIG1vcmUgY29tYmluYXRpb25zIG9mIHBhcmFtZXRlcnMgaW4gdGhlIFJlZy4uKCkgZnVuY3Rpb25zLgoJCgkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KCU1ha2UgSW50ZXJydXB0UmVnaXN0ZXIoKSBhbmQgSW50ZXJydXB0VW5yZWdpc3RlcigpIHJldHVybiBmYWxzZS4KCgkqIFt3aW5kb3dzL2hvb2suY10KCUNhbGxOZXh0SG9va0V4KCkgdXNlZCB0byBjcmFzaCB3aGVuIGNhbGxlZCB3aXRoIGEgbnVsbCBoaG9vay4gRml4ZWQuCgpXZWQgSnVuIDI4IDEwOjE0OjM0IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2luY2x1ZGUvbmVleGUuaF1bbG9hZGVyL25lX2ltYWdlLmNdCglORV9Mb2FkU2VnbWVudDogRGV0ZWN0IGl0ZXJhdGVkIHNlZ21lbnRzCgoJKiBbbWlzYy9vbGUybmxzLmNdCglMT0NBTEVfU0xPTkdEQVRFOiBmaXhlZCB0eXBvCgoJKiBbbWlzY2VtdS9pbnQ1Yy5jXQoJUmVvcmRlcmVkIGluY2x1ZGUgZmlsZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggTGludXggbGliYy41LjEKCgkqIFtyYy93aW5lcmMuY10KCUFkZGVkIC1iIG9wdGlvbiB0byBwcm9jZXNzIGJpbmFyeSByZXNvdXJjZSBmaWxlcyBpbnRvIEMgYXJyYXlzCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQ2FsbFduZFByb2M6IEFkZGVkIGR1bW15IGRzIHBhcmFtZXRlciBmb3IgbGlid2luZQoKCSogW2luY2x1ZGUvZ2RpLmhdW2luY2x1ZGUvdXNlci5oXQoJVVNFUl9IRUFQX0FMTE9DLCBHRElfSEVBUF9BTExPQzogZHJvcHBlZCBmbGFncyBwYXJhbWV0ZXIKCgkqIFtpbmNsdWRlL2xkdC5oXVtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCWRlZmluZWQgc2VnbWVudCBjb252ZXJzaW9uIG1hY3JvcyBmb3IgbGlid2luZQoKCSogW21pc2MvYXRvbS5jXQoJRGVmaW5lZCBVU0VSX0hlYXBTZWwgZm9yIGxpYndpbmUKCgkqIFttaXNjL21haW4uY10KCURpc2FibGUgLWRsbCBvcHRpb24gZm9yIGxpYndpbmUKCgkqIFttaXNjL3VzZXIuY10KCXJlbW92ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcywgU3lzdGVtSGVhcEluZm8gZnJvbSBsaWJ3aW5lIGZvciBub3cKCgkqIFt0b29sa2l0L2hlYXAuY10KCWZpeGVkIExvY2FsTG9jayBwcm90b3R5cGUKCgkqIFt0b29sa2l0L3N1cC5jXQoJc3luYydlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIgd2l0aCBzdHJ1Y3R1cmVzCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglEaXNhYmxlZCByZXNvdXJjZSBETExzIGZvciBsaWJ3aW5lIGZvciBub3cKCk1vbiBKdW4gMjYgMTk6MzA6MjQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIChncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmwpCgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCAtZW5oYW5jZWQgb3B0aW9uIHRvIHJlcG9ydCBhIDM4NiBDUFUgaW5zdGVhZCBvZiBhIDI4Ni4KCkZyaSBKdW4gMjMgMjM6MTg6MjUgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvZG9zX2ZzLmNdCglSZW1vdmUgbWF4aW11bSBvcGVuIGRvc2RpcmVudCBsaW1pdCAoZml4aW5nIHRoZSB3aW5maWxlLmV4ZQogCXByb2JsZW0pIGJ5IHVzaW5nIHRlbGxkaXIoKS9zZWVrZGlyKCkuCgkKRnJpIEp1biAyMyAxMzo0MjoyNSAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgKGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubCkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUZpeGVkIHByb2JsZW0gcGFyc2luZyBlbXB0eSBsaW5lcyB3aXRoaW4gc2VjdGlvbnMgaW4gLmluaSBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1biAxOSAyMDoyOTo1MCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbZGVidWdnZXIvKi5jXQoJTW9kaWZpZWQgZGVidWdnZXIgdG8gdXNlIHNlZ21lbnRlZCBwb2ludGVycyBldmVyeXdoZXJlLgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL3NvdW5kLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJRGVjbGFyZWQgYWxsIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBvbmx5IDE2LWJpdCBhcyAncGFzY2FsMTYnLgoKCSogW2luY2x1ZGUvbGR0LmhdIFttZW1vcnkvbGR0LmNdCglFeHBvcnQgTERUX0VudHJ5VG9CeXRlcyAobmV3KSBhbmQgTERUX0J5dGVzVG9FbnRyeSBmb3IgRFBNSS4KCU1haW50YWluIGEgY29weSBvZiB0aGUgc2VsZWN0b3IgZmxhZ3MsIHJlbW92aW5nIHRoZSBuZWVkIHRvIG1ha2UgYQoJc3lzdGVtIGNhbGwgdG8gcmV0cmlldmUgYW4gTERUIGVudHJ5LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIGJ1ZyB3aXRoIG1vZHVsZSBmaWxlIGhhbmRsZSBjYWNoZS4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KCUZpeGVkIGZpbGUgbmFtZSBidWcgaW4gTkVfQWNjZXNzUmVzb3VyY2UoKS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIGJ1ZyBpbiBMb2FkSWNvbigpIHRoYXQgY2F1c2VkIHdyb25nIGNvbG9ycyB0byBiZSB1c2VkIGZvcgoJdGhlIGljb24gbWFzay4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglNb3ZlZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gdG8gbWlzY2VtdS9pbnN0ci5jLgoKCSogW21pc2MvZG9zX2ZzLmNdIFttaXNjZW11L2ludDIxLmNdCglMb3RzIG9mIHNtYWxsIGZpeGVzLCB0aGFua3MgdG8gTW9ydGVuIFdlbGluZGVyLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJTW9yZSBjb21wbGV0ZSBEUE1JIGVtdWxhdGlvbi4KCgkqIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBzdXBwb3J0IGZvciBwcmVmaXhlcyBpbiBpbnN0cnVjdGlvbnMgdG8gZW11bGF0ZS4KCgkqIFttaXNjZW11L2ludDJmLmNdCglVc2UgcmVnaXN0ZXIgbWFjcm9zIGluc3RlYWQgb2YgZGVzdHJveWluZyB0aGUgaGlnaCBwYXJ0IG9mIDMyLWJpdAoJcmVnaXN0ZXJzLgoKCSogW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyBpbiBHZXREQ1N0YXRlKCkgdGhhdCBmYWlsZWQgdG8gY2xlYXIgdGhlIG5ldyBEQy4KCgkqIFtyYy9zeXNyZXMucmNdCglSZW1vdmVkIGRpYWxvZ3MgMTEgYW5kIDEyIHRoYXQgd2VyZSBuZXZlciB1c2VkLgoKCSogW3Rvb2xzL2J1aWxkLmNdCgkncGFzY2FsMTYnIGdlbmVyYXRlZCBmdW5jdGlvbnMgZGlkIG5vdCBzYXZlICVkeC4KCVJlbW92ZWQgdXNlIG9mICVmcyB0byBhY2Nlc3MgdGhlIHN0YWNrLgoJJWRzIGlzIG5vIGxvbmdlciBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyBhIDE2LWJpdCByb3V0aW5lLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBY2NlcHQgYSBOVUxMIHBvaW50ZXIgYXMgd2luZG93IHRpdGxlLgoKCSogW3dpbmRvd3MvbWRpLmNdCglNRElDYXNjYWRlOiBza2lwIGljb25pYyB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgQ2FsY0NoaWxkU2Nyb2xsKCkuCgkKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJRml4ZWQgTXVsRGl2KCkgZm9yIGlsbGVnYWwgdmFsdWVzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBYIGVycm9yIGluIENyZWF0ZVdpbmRvd0V4KCkgd2hlbiBXTV9OQ0NBTENTSVpFIHJldHVybmVkCglhIHplcm8gd2lkdGggb3IgaGVpZ2h0LgoKU3VuIEp1biAxOCAyMjoyMjozMCBNRVQgRFNUIDE5OTUgIEZvbnMgQm90bWFuICAoYm90bWFuQGludGVyLm5sLm5ldCkKCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCAidW5pbml0YWxpemVkIiBtZXNzYWdlIHdoaWNoIC1XYWxsIGNvdWxkbnQgc2VlIHRvIGJlIG9rCglpbiBFRElUX1dyaXRlVGV4dC4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdCglBZGRlZCBkZWZpbmUgZm9yIGV4dHJhIGNoZWNrcyBpbiBBUEkgZGVmaW5pdGlvbnMgZHVyaW5nIGRlYnVnZ2luZy4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIG5ld2xpbmUgaW4gTkVfRml4dXBQcm9sb2dzIHRvIGF2b2lkIGxvbmcgbGluZXMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUFkZGVkIGV4dHJhIHNhZmV0eSBjaGVjayBpbiBET1NfVmFsaWREcml2ZS4KCgkqIFttaXNjL2V4ZWMuY10KCUZpeGVkIGRlZmluaXRpb24gb2YgRXhpdFdpbmRvd3MuCgkKU3VuIEp1biAxOCAyMToxNjowOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJU29tZSBmaXhlcywgbW9zdGx5IGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IGFsc28gZm9yIHRleHQgc2VsZWN0aW9uCglhbmQgdGFiIHBvc3RpdGlvbnMuIEdlbmVyYWwgY2xlYW51cC4gTm90ZXBhZC5leGUgbm93IHdvcmtzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXg6IHRoZSBod25kIGZpZWxkIG9mIHRoZSBEUkFXSVRFTVNUUlVDVCBzaG91bGQgYWx3YXlzIGJlIHRoYXQgb2YKCXRoZSBjb21ibyBib3gsIG5vdCB0aGUgQ29tYm9MQm94IHRoYXQgYmVsb25ncyB0byBpdC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglIYW5kbGUgaXRlbUlEIGZpZWxkIGNvcnJlY3RseSB0aHJvdWdob3V0LgoKCSogW21lbW9yeS9sb2NhbC5jXQoJSW1wbGVtZW50ZWQgZmxhZyBMTUVNX1pFUk9JTklULgoJTG9jYWxSZUFsbG9jKCkgY291bGQgdHJhc2ggdGhlIGhlYXAuIEZpeGVkLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQoKTogZG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IG5lZ2F0aXZlIHdpZHRocy4KCUZpeGVkIGEgc2VnZmF1bHQgaW4gRW51bUZvbnRzKCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dCgpOiBEVF9DQUxDUkVDVCBpbXBsaWVzIERUX05PQ0xJUC4KCgkqIFtvYmplY3RzL2RjdmFsdWVzLmNdCglNQUtFTE9ORyB3YXMgdXNlZCB3aXRoIGJhZCBwYXJhbWV0ZXJzIGluIERDX0dFVF9YX1kuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURvbid0IHNob3cgdGhlIGRpYWxvZyBpZiBXU19WSVNJQkxFIGlzbid0IHNldCBpbiB0aGUgdGVtcGxhdGUuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglVVElMSVRZX2NvbnZlcnRBcmdzKCk6IE5ldmVyIHBhc3MgYW4gZXhwcmVzc2lvbiBjb250YWluaW5nICsrIGludG8gYQoJbWFjcm8uLi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0UGFyZW50KCkgc2hvdWxkIHVubGluayB0aGUgd2luZG93IGJlZm9yZSBjaGFuZ2luZyB0aGUgcGFyZW50LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgY2FsbCB0aW1lciBmdW5jdGlvbnMgdmlhIENhbGxXaW5kb3dQcm9jKCksIHNpbmNlIGl0IGNoZWNrcwoJd2hldGhlciBod25kPT0wIGFuZCBkb2VzIG5vdCBjYWxsIHRoZSBmdW5jdGlvbiBpbiB0aGF0IGNhc2UuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSWdub3JlIGludGVycnVwdCAweDNELCBmb3IgVkJSVU4zMDAuRExMLgoKCSogW21pc2MvY29tbWRsZy5jXQoJRG9uJ3QgcmVseSBvbiB0aGUgaXRlbURhdGEgZmllbGQgb2YgdGhlIERSQVdJVEVNU1RSVUNUIHRvIGNvbnRhaW4gYQoJcG9pbnRlciB0byB0aGUgaXRlbSB0ZXh0LgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRGlzYWJsZSBPTEUgYW5kIERERU1MIERMTHMgYnkgZGVmYXVsdCwgc2luY2UgdGhleSBjb250YWluIG5vdGhpbmcgYnV0CglzdHVicyBhbnl3YXkuIFNIRUxMLCBDT01NRExHIGFuZCBXSU44N0VNIGFyZSBsZWZ0IGVuYWJsZWQsIGFsdGhvdWdoCglzb21lIHByb2dyYW1zIG1heSB3b3JrIGJldHRlciB3aXRob3V0IHRoZW0uCgkKCSogW211bHRpbWVkaWEvKi5jXSBbaW5jbHVkZS9tdWx0aW1lZGlhLmhdIFtpbmNsdWRlL2RyaXZlci5oXQoJQmVndW4gY2xlYW5pbmcgdGhpbmdzIHVwIGEgbGl0dGxlLiBSZXBsYWNlZCBwcmludGZzIHdpdGggZHByaW50Zl8KCW1hY3JvcywgbWFkZSBmdW5jdGlvbnMgc3RhdGljIHdoZXJlIHBvc3NpYmxlLCBhbmQgc29tZSBvdGhlciBtaW5vcgoJY2hhbmdlcy4KClN1biBKdW4gMTEgMjM6MTk6MTAgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbZGVidWdnZXIvZGJnLnldW2RlYnVnZ2VyL2RiZy5sXQoJUmVtb3ZlZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGSUxFX0lERU5USUZFUiwgYmVjYXVzZSBpdCBjYXVzZWQKCXByb2JsZW1zIHdpdGggeC88Zm9ybWF0PiBzdGF0ZW1lbnRzLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCVVzZSBTQ19FU1AgaW5zdGVhZCBvZiBTQ19FSVAgZm9yIHN0YWNrIGR1bXAuCgoJKiBbbWlzYy9jb21wb2JqLmNdW2lmMTYzMi9jb21wb2JqLnNwZWNdCglDb0J1aWxkVmVyc2lvbiwgQ29Jbml0aWFsaXplLCBDb1VuaW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9ucwoKCSogW21pc2Mvb2xlMi5jXVtpZjE2MzIvb2xlMi5zcGVjXVttaXNjL0ltYWtlZmlsZV1baW5jbHVkZS9vbGUyLmhdCglOZXcgZmlsZXMgb2xlMi5jLCBvbGUyLmgKCU9sZUJ1aWxkVmVyc2lvbiwgT2xlSW5pdGlhbGl6ZSwgT2xlVW5pbml0aWFsaXplOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL29sZTJkaXNwLnNwZWNdCglBZGRlZCBtaXNzaW5nIG9yZGluYWxzIGFib3ZlIDEwOQoKCSogW21pc2Mvb2xlMm5scy5jXVtpZjE2MzIvb2xlMm5scy5zcGVjXVtpbmNsdWRlL3dpbm5scy5oXQoJTmV3IGZpbGUgd2lubmxzLmgKCUdldExvY2FsZUluZm9BOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10KCUFkZGVkIEZpbmRFbnZpcm9ubWVudFN0cmluZyBhcyBzdHViCgoJKiBbbWlzYy9vbGVjbGkuY11baWYxNjMyL29sZWNsaS5zcGVjXQoJT2xlSXNEY01ldGE6IE5ldyBmdW5jdGlvbgoKCSogW29iamVjdHMvZm9udF1bbWlzYy9nZGkuc3BlY10KCUdldEtlcm5pbmdQYWlyczogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxFeGVjdXRlOiBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBzdGFydGluZyBwcm9ncmFtcwoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglJbnNlcnRlZCBtaXNzaW5nIHJlbGF5IHRvIEdldENsaXBDdXJzb3IKClN1biBKdW4gMTEgMjA6MzQ6NDcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4IGEgcHJvYmxlbSB3aXRoIHRoZSBsb2NhbCBoZWFwLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUZpeGVkIHdyb25nIGRlY2xhcmF0aW9ucyBvZiBDQVRDSEJVRiBhbmQgTFBDQVRDSEJVRi4KCQoJKiBbaW5jbHVkZS9tZGkuaF0gW3dpbmRvd3MvbWRpLmNdCglUaGlzIGNvZGUgc3RpbGwgYXNzdW1lZCBzZWdtZW50ZWQgYWRkcmVzcz09bGluZWFyIGFkZHJlc3MuIEZpeGVkLgoKCSogW2luY2x1ZGUvbXNkb3MuaF0gW21pc2MvZG9zX2ZzLmNdCglUaGUgZmlsZW1hc2sgZmllbGQgb2YgdGhlIGRvc2RpcmVudCBzdHJ1Y3R1cmUgY291bGQgYmUgb3ZlcnJ1bi4gRml4ZWQuCglJZiB5b3UgaGFkIGEgZmlsZSBjYWxsZWQgZm9vYmFyIGFuZCBhIGZpbGUgY2FsbGVkIGZvbywgdHJ5aW5nIHRvIAoJRmluZEZpbGUoZm9vKSBjb3VsZCBhY2NpZGVudGFsbHkgZmluZCBmaWxlIGZvb2JhciBpbnN0ZWFkLiBGaXhlZC4KCQoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBBbHdheXMgcmV0dXJuIHRoZSBmdWxsIHBhdGhuYW1lIGluIG9mcy0+c3pQYXRoTmFtZS4gVGhpcyAKCWFsc28gZml4ZXMgR2V0TW9kdWxlRmlsZW5hbWUoKS4KCVByZXZlbnQgX2xjbG9zZSgpIGZyb20gY2xvc2luZyBzdGRlcnIgb3Igc3Rkb3V0LgoKCSogW21pc2MvcHJvZmlsZS5jXQoJU2VhcmNoIGZvciAuaW5pIGZpbGVzIGluIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IG1vZHVsZSBhcyB3ZWxsLgoJKE5lZWRlZCBieSBMb3R1cyBPcmdhbml6ZXIuKQoKCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KCVttZW1vcnkvbG9jYWwuY10KCUxvY2FsIGhlYXBzIGFyZSBub3cgaW5pdGlhbGl6ZWQgYnkgSW5pdFRhc2soKSBmb3IgZXhlY3V0YWJsZXMuIERMTHMKCWhhdmUgdG8gY2FsbCBMb2NhbEluaXQoKSB0aGVtc2VsdmVzLCBMb2NhbEluaXQoKSBoYXMgdG8gcHV0IHRoZQoJaGVhcCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50IHdoZW4gY2FsbGVkIHdpdGggc3RhcnQ9PTAuIFdlIG5vIGxvbmdlcgoJYWxsb2NhdGUgdGhlIERHUk9VUCB3aXRoIDY0ayBvbiBzdGFydHVwLCBidXQgZ3JvdyB0aGUgbG9jYWwgaGVhcAoJaW4gTE9DQUxfR2V0QmxvY2soKSB3aGVuIG5lY2Vzc2FyeS4KCiAgICAgICAgKiBbbG9hZGVyL21vZHVsZS5jXQoJTG9hZExpYnJhcnkoKSBzaG91bGQgY2FsbCBMb2FkTW9kdWxlKCkgaW4gYWxsIGNhc2VzLCBldmVuIGlmIHRoZQoJRExMIGlzIGFscmVhZHkgbG9hZGVkLCB0byBlbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGNvcnJlY3QuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglTb21lIGNoYW5nZXMgdG8gZnVuY3Rpb24gcHJvbG9nIGZpeHVwLiBEb2VzIGFueW9uZSBrbm93IGV4YWN0bHkgaG93Cgl0aGlzIGlzIHN1cHBvc2VkIHRvIHdvcms/IEkgYW0gb25seSBndWVzc2luZyBoZXJlLgoJSW4gTkVfSW5pdGlhbGl6ZURMTHMoKSwgaW5pdGlhbGl6ZSB0aGUgRExMcyBhIG1vZHVsZSByZWZlcnMgdG8gYmVmb3JlCgl0aGUgbW9kdWxlIGl0c2VsZi4KCQogICAgICAgICogW2xvYWRlci90YXNrLmNdCglJbml0aWFsaXplIGluc3RhbmNlIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgREdST1VQIGluIEluaXRUYXNrKCkuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglTb21lIGZpeGVzIGZvciBtb3ZlYWJsZSBibG9ja3MuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBbGwgdGhlIElzQmFkKlBvaW50ZXIoKSBmdW5jdGlvbnMgcmV0dXJuZWQgZXhhY3RseSB0aGUgd3JvbmcgYm9vbGVhbgoJdmFsdWUgaW4gYWxsIGNhc2VzIQoJCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYW5vdGhlciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZGVidWdnaW5nIG91dHB1dC4KCQoJKiBbb2JqZWN0cy9mb250LmNdCglTb21lIG1vcmUgcmVjb3ZlcnkgcG9zc2liaWxpdGllcyBmb3IgRk9OVF9NYXRjaEZvbnQoKSBpZiBhIHNwZWNpZmllZAoJZm9udCBkb2VzIG5vdCBleGlzdC4KCQoJKiBbd2luZG93cy93aW4uY10KCVRoZSBkaWFsb2cgY29kZSBtYXkgY2FsbCBDcmVhdGVXaW5kb3dFeCB3aXRoIGFuIGludGVnZXIgaW4gd2luZG93TmFtZS4KCVRoaXMgaGFwcGVucyBmb3Igc3RhdGljIGljb24gY29udHJvbHMgdGhhdCBleHBlY3QgYSByZXNvdXJjZSBJRCBhcwoJdGhlIHdpbmRvdyBuYW1lLiBDcmVhdGVXaW5kb3dFeCgpIHVzZWQgdG8gY3Jhc2guIEZpeGVkLgoJCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL3dpbi5jXQoJV2luZG93IGNsYXNzZXMgYXJlIG93bmVkIGJ5IG1vZHVsZXMsIG5vdCBpbnN0YW5jZXMuIENoYW5nZWQKCVJlZ2lzdGVyQ2xhc3MoKSwgVW5yZWdpc3RlckNsYXNzKCksIEdldENsYXNzSW5mbygpIGFuZCBDcmVhdGVXaW5kb3dFeCgpCglhY2NvcmRpbmdseS4KClNhdCBKdW4gMTAgMTY6MTA6NTMgMTk5NSAgT2xhZiBGbGViYmUgPG8uZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJICBjbG9jay5leGUgd2FzIGRpc3BsYXlpbmcgaW5jb3JyZWN0IHllYXIuCgpGcmkgSnVuIDkgMjA6MzY6NTYgMTk5NSAgVmljdG9yIFNjaG5laWRlciA8dGFpbG9yQGNybC5jb20+CgoJKiBbaW5jbHVkZS9jdXJzb3IuaF0gW3dpbmRvd3MvY3Vyc29yLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAgNiAxMjoxMTo0MSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgYnVnIHdpdGggZHJhd2luZyBtdWx0aS1jb2x1bW4gbWVudXMgd2l0aCB2ZXJ0aWNhbCBzZXBhcmF0b3IuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUZpeGVkIE5VTEwtcG9pbnRlciByZWZlcmVuY2UgYWZ0ZXIgcmVhZGxpbmUoKS4KCgkqIFtpZjE2MzIvd2lucHJvY3Muc3BlY10gW21pc2NlbXUvaW50MjEuY10gW21pc2NlbXUvaW50ZXJydXB0cy5jXQoJQWRkZWQgaW50ZXJydXB0IHZlY3RvciBlbXVsYXRpb24uIEFsbG93cyB0byByZXRyaWV2ZSBhbiBpbnRlcnJ1cHQKCXZlY3RvciBhbmQganVtcCB0byBpdCB3aXRob3V0IGNyYXNoaW5nLgoKCSogW2xvYWRlci9sZHQuY10KCU1vdmVkIGxkdC5jIHRvIG1lbW9yeSBkaXJlY3RvcnkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUltcGxlbWVudGVkIExvY2tDdXJyZW50VGFzaygpIGFuZCBHZXRJbnN0YW5jZURhdGEoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgU3RyZXRjaEJsdCgpIHRvIHVzZSB3cm9uZyBjb2xvcnMgd2hlbgoJc3RyZXRjaGluZyBhIG1vbm9jaHJvbWUgYml0bWFwIHRvIGEgY29sb3IgZGlzcGxheS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJRml4ZWQgYSBzZWdtZW50ZWQgcG9pbnRlciBidWcgaW4gQ3JlYXRlQml0bWFwSW5kaXJlY3QoKS4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gaGF2ZSBhcmd1bWVudHMgZm9yIHJlZ2lzdGVyIGZ1bmN0aW9uczsgdXNlZAoJYnkgaW50ZXJydXB0IHZlY3RvcnMgdG8gcmVtb3ZlIHRoZSBmbGFncyBmcm9tIHRoZSBzdGFjay4KCUdlbmVyYXRlIGEgbmV3IGZ1bmN0aW9uIENhbGxUbzMyX0xhcmdlU3RhY2soKSwgdGhhdCBhbGxvd3MgY2FsbGluZwoJYSAzMi1iaXQgZnVuY3Rpb24gdXNpbmcgdGhlIG9yaWdpbmFsIDMyLWJpdCBzdGFjaywgZm9yIGZ1bmN0aW9ucwoJdGhhdCBuZWVkIG1vcmUgdGhhdCA2NGsgb2Ygc3RhY2suCgpUdWUgTWF5IDMwIDEwOjI5OjU2IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJRG9FbnZpcm9ubWVudFN1YnN0OiBmaXhlZCBwcm90b3R5cGUKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KCVNldFN5c3RlbVBhbGV0dGVVc2U6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJRGlyZWN0UmVzQWxsb2M6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglTZXRLZXlib2FyZFN0YXRlOiBuZXcgZnVuY3Rpb24KCk1vbiBNYXkgMjkgMTI6NTg6MjggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbdG9vbHMvYnVpbGQuY10KICAgICAgICBQcmV2ZW50IGludGVycnVwdHMgZnJvbSBkZXN0cm95aW5nIHRoZSBhcmdzIGZvciBhIDMyIGJpdCBmdW5jdGlvbgogICAgICAgIGJ5IGxvYWRpbmcgdGhlIGNvcnJlY3QgdmFsdWUgaW50byAlZXNwIGRpcmVjdGx5IGFmdGVyICVzcy4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KCVRoZSBuZXcgaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGVhcmxpZXIgaW4gTG9hZE1vZHVsZSgpLCBzbyB0aGF0CglmaXh1cHMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBoYW5kbGVkIGNvcnJlY3RseS4KICAgICAgICBJbml0aWFsaXplIHRoZSBsb2NhbCBoZWFwIGZvciBhIERHUk9VUCBpbiBORV9Mb2FkU2VnbWVudCgpLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJTGlrZSBSTEU4IGJpdG1hcHMsIFJMRTQgYml0bWFwcyBkb24ndCBhbHdheXMgZW5kIHdpdGggYSBwcm9wZXIgY29kZS4KCVRoaXMgdXNlZCB0byBjcmFzaCBXaW5lLiBGaXhlZC4KCiAgICAgICAgKiBbb2JqZWN0cy90ZXh0LmNdCglGaXggcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGRlYnVnZ2luZyBvdXRwdXQuCgkKCSogW21pc2MvY29tbWRsZy5jXQoJSGFuZGxlIHVzZXIgaW5wdXQgaW4gdGhlIGVkaXQgY29udHJvbCBiZXR0ZXIuIFNvbWUgYnVncyBmaXhlZC4KCQoJKiBbbWVtb3J5L2xvY2FsLmNdCglTdGFydGVkIGltcGxlbWVudGluZyBtb3ZlYWJsZSBibG9ja3MuIFRoaXMgaXMgdW5maW5pc2hlZCAoISksIGJ1dAoJYXQgbGVhc3QgaXQgZG9lcyBub3Qgc2VlbSB0byBicmVhayB0aGluZ3MuCgpXZWQgTWF5IDI0IDEzOjI2OjM2IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2xvYWRlci9tb2R1bGUuY10KCUxvYWRNb2R1bGUoKTogRExMcyBvY2Nhc2lvbmFsbHkgaGF2ZSBhIGRhdGEgc2VnbWVudCwgYW5kIHRoZXkgd29yawoJbXVjaCBiZXR0ZXIgaWYgaXQgaXMgbG9hZGVkIDotKQoJTG9hZExpYnJhcnkoKTogcGFzcyBITU9EVUxFIGluc3RlYWQgb2YgSElOU1RBTkNFIHRvIE5FX0luaXRpYWxpemVETExzLgoJRmluZE1vZHVsZSgpOiBhbHNvIHN0cmlwIG9mZiB0aGUgbGFzdCBiYWNrc2xhc2ggb2YgdGhlIHBhdGhuYW1lcwoJKFdpbmhlbHAgdHJpZWQgdG8gbG9hZCBDOlxXSU5ET1dTXFNZU1RFTVxDT01NRExHLkRMTCkuCglHZXRNb2R1bGVIYW5kbGUoKToganVzdCBjYWxsIE1PRFVMRV9GaW5kTW9kdWxlLCBpdCBkb2VzIHRoZSBzYW1lIGpvYiwKCW9ubHkgYmV0dGVyLgoJCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUxvY2FsSW5pdCgpIHRoZSBoZWFwIG9mIGEgRExMIGluIE5FX0luaXRETEwuIChUaGlzIGlzIHByb2JhYmx5Cglub3QgcmVhbGx5IGNvcnJlY3QsIGl0IHNlZW1zIHRoYXQgYWxsIHByb2dyYW1zIGFuZCBETExzIHRyeSB0byBkbwoJdGhpcyB0aGVtc2VsdmVzLiBCdXQgdGhleSBwYXNzIHdlaXJkIHBhcmFtZXRlcnMuKQoJTkVfSW5pdGlhbGl6ZURMTHMgc2hvdWxkIGFsc28gY2FsbCBORV9Jbml0RExMIGZvciB0aGUgcGFzc2VkIGhNb2R1bGUuCgkKCSogW2xvYWRlci90YXNrLmNdIFttaXNjL3VzZXIuY10KCUZpbmlzaCBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIGluIEluaXRUYXNrIGluc3RlYWQgb2YgSW5pdEFwcCwgb3IKCWFsbCB0aGUgRExMcyB3aWxsIGJlIGluaXRpYWxpemVkIGluIEluaXRUYXNrIHdpdGhvdXQgYW55IGF2YWlsYWJsZQoJd2luZG93IGNsYXNzZXMhCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXkgMjEgMTI6MzA6MzAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2RlYnVnZ2VyL2hhc2guY10gW2RlYnVnZ2VyL2luZm8uY10KCUFkZGVkIHN1cHBvcnQgZm9yIHN5bWJvbGljIHNlZ21lbnRlZCBhZGRyZXNzZXMuIEFkZCBzeW1ib2xzIGZvciBhbGwKCWJ1aWx0LWluIEFQSSBlbnRyeSBwb2ludHMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0KCVJlbW92ZWQgZGxsX3RhYmxlIHN0cnVjdHVyZSwgYXMgd2Ugbm93IHVzZSB0aGUgYnVpbHQtaW4gbW9kdWxlCglzdHJ1Y3R1cmVzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbbG9hZGVyL21haW4uY10KCVJlbW92ZWQgd2luZXN0YXQgb3B0aW9uLCBhcyBpdCB3YXMgbm8gbG9uZ2VyIHZlcnkgbWVhbmluZ2Z1bC4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCU5ldyBtYWNybyBNQUtFX1NFR1BUUiB0aGF0IGNyZWF0ZXMgYSBzZWdtZW50ZWQgcG9pbnRlciB0byBhIGxvY2FsCgl2YXJpYWJsZSBvbiB0aGUgMzItYml0IHN0YWNrLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhbiBhcHBsaWNhdGlvbi4KCUltcGxlbWVudGVkIExvYWRNb2R1bGUoKSBhbmQgRnJlZU1vZHVsZSgpLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL3Rhc2suY10KCU1vdmVkIGluaXRpYWxpc2F0aW9uIG9mIGJ1aWx0LWluIERMTHMgdG8gSW5pdFRhc2soKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBkaXNjYXJkYWJsZSBibG9ja3MuCgoJKiBbbWlzYy9maWxlLmNdCglTZWFyY2ggcGF0aCBvZiBjdXJyZW50IGV4ZWN1dGFibGUgaW4gT3BlbkZpbGUoKS4KCUZpeGVkIGJ1ZyB3aXRoIHNlYXJjaGluZyBpbiBXaW5kb3dzIHBhdGguCgoJKiBbbWlzYy9sc3RyLmNdCglIYXJkLWNvZGVkIHRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgQW5zaTwtPk9lbS4KCgkqIFttaXNjL3VzZXIuY10KCU1vdmVkIHNvbWUgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyB0byBJbml0QXBwKCksIGJlY2F1c2UgdGhleSBuZWVkCglhIHRhc2sgY29udGV4dCB0byBiZSBwZXJmb3JtZWQuCgoJKiBbb2JqZWN0cy9kYy5jXQoJSGFuZGxlIFIyX0JMQUNLIGFuZCBSMl9XSElURSBzcGVjaWFsbHkgc28gdGhhdCB0aGV5IHdvcmsgY29ycmVjdGx5Cgl3aXRoIHBhbGV0dGUgZGlzcGxheXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVN1cHByZXNzZWQgZ2VuZXJhdGlvbiBvZiB0aGUgQyBmaWxlIGZvciBETEwgc3BlY3MsIGJlY2F1c2UgaXQncyBubwoJbG9uZ2VyIG5lZWRlZC4gT3V0cHV0IGFsbCB0aGUgYXNzZW1ibHkgY29kZSBkaXJlY3RseSB0byBzdGRvdXQuCglTb21lIGNoYW5nZXMgdG8gaW50ZWdyYXRlIFdpbjMyIHN1cHBvcnQgZnJvbSBNYXJ0aW4gdm9uCUxvZXdpcy4gCgoJKiBbd2luZG93cy9tc2dib3guY10KCU1vdmVkIG1lc3NhZ2UgYm94IGNvZGUgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KCk1vbiBNYXkgMTUgMjM6NDA6MDQgMTk5NSAgTWFydGluIEF5b3R0ZSAod2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EpCgoJKiBbbWlzYy9hdWRpby5jXSBbbWlzYy9tY2ljZGEuY10gW21pc2MvbWNpYW5pbS5jXSBbbWlzYy9taWRpLmNdCgkgIFttaXNjL21tYXV4LmNdIFttaXNjL21tc3lzdGVtLmNdCglNb2RpZnkgY29kZSAmIHVzZSBwb2ludGVycyBjb252ZXJzaW9uIG1hY3Jvcy4KCU1ha2UgY2RhdWRpbyAmIHdhdmUgZGV2aWNlcyB3b3JrIGFnYWluIChvbmx5IHVzaW5nIHNvbWUgYXBwbGV0cykuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglDaGFuZ2UgZ2V0YygpIHRvIGZnZXRjKCkgd2hlcmUgbmVlZGVkLgoKTW9uIE1heSAxNSAyMjoxMDo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXQoJYWRkZWQgZW50cmllcyBmb3IgdGhlIG5ldyBmaWxlcyBnZGkzMi5zcGVjLCBrZXJuZWwzMi5zcGVjLAoJdXNlcjMyLnNwZWMsIHNoZWxsMzIuc3BlYyBhbmQgd2lucHJvY3MzMi5zcGVjLgoKCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpZjE2MzIvc3RvcmFnZS5zcGVjXVtpZjE2MzIvc3lzdGVtLnNwZWNdW2lmMTYzMi91c2VyLnNwZWNdCglDaG9vc2VGb250LCBSRVNFUlZFRDUsIEludGVybmFsRXh0cmFjdEljb246IE1hcmtlZCBhcyBzdHVicwoJRXh0cmFjdEFzc29jaWF0ZWRJY29uLCBEb0Vudmlyb25tZW50U3Vic3QsIER1bXBJY29uOgoJCXN0dWIgaW1wbGVtZW50YXRpb25zIHByb3ZpZGVkIAoJbWFya2VkIHN0b3JhZ2UuZGxsLHN0b3JlZ2Uuc3lzIGZ1bmN0aW9ucyBhcyBzdHVicwoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF0KCUFkZGVkIHN0cnVjdHVyZXMgV0lOMzJfYnVpbHRpbiBhbmQgIFdJTjMyX2Z1bmN0aW9uCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJUEVfSW1wb3J0X0RpcmVjdG9yeTogcmVuYW1lZCByZXNlcnZlZCBmaWVsZHMgdG8gCgkJVGltZURhdGUsIEZvcndhcmRlciwgVGh1bmtfTGlzdAoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCU5ldyBmaWxlLgoKCSogW2xvYWRlci9tYWluLmNdCgljYWxsZWQgUkVMQVkzMl9Jbml0CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCgl4bW1hcDogbWFwIEJTUyBhbm9ueW1vdXMKCWR1bXBfaW1wb3J0czogcmVuYW1lZCB0byBmaXh1cF9pbXBvcnRzLCBkbyB0aGUgZml4dXAgb2YgaW1wb3J0ZWQKCSAgICAgICAgICAgICAgc3ltYm9scwoJUEVfTG9hZEltYWdlOiBwYXNzIHJhdyBkYXRhIHNpemUgdG8geG1tYXAKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUR1bXBJY29uOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL2tlcm5lbDMyLmNdCglOZXcgZmlsZS4KCgkqIFttaXNjL21haW4uY10KCW1ha2Ugc3Rkb3V0IGFuZCBzdGRlcnIgdW5idWZmZXJlZAoKCSogW21pc2Mvc2hlbGwuY10KCURvRW52aXJvbm1lbnRTdWJzdDogbmV3IGZ1bmN0aW9uCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udDogdHJ5IG9ibGlxdWUgaWYgdGhlcmUgaXMgbm8gaXRhbGljCgoJKiBbcmMvSW1ha2VmaWxlXVtyYy9wYXJzZXIubF0KCXl5d3JhcDogbmV3IGZ1bmN0aW9uCglEb24ndCBsaW5rIHdpdGggbGliZmwuYSBvbiBMaW51eAoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBrZXl3b3JkcyBzdGRjYWxsLCBzdWJzeXN0ZW0sIGJhc2UKCUdlbmVyYXRlRm9yV2luMzI6IG5ldyBmdW5jdGlvbgoJQnVpbGRTcGVjRmlsZXM6IGNhbGwgR2VuZXJhdGVGb3JXaW4zMiBpZiBzdWJzeXN0ZW0gaXMgd2luMzIKCk1vbiBNYXkgMTUgMTA6Mzg6MTQgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJTWlub3IgZml4ZXMuCgkKCSogW21pc2MvbWVzc2FnZS5jXSBbbWlzYy9tYWluLmNdIFtyYy9zeXNyZXMqLnJjXSBbaW5jbHVkZS90ZXh0cy5oXQoJUmV3cm90ZSBtZXNzYWdlIGJveCBoYW5kbGluZy4KCQoJKiBbd2luZG93cy9kaWFsb2cuY10KCURpYWxvZ3Mgc2hvdWxkIGJlIGludmlzaWJsZSB1bnRpbCBhZnRlciBXTV9JTklURElBTE9HIGlzIHNlZW50LgoJRG9uJ3Qgc3dpdGNoIHRvIGludmlzaWJsZSBkaWFsb2cgaXRlbXMgb24gYSBUQUIga2V5cHJlc3MuCgkKCSogW3dpbmRvd3MvbWRpLmNdCglTZW5kIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBNRElSZXN0b3JlQ2hpbGQoKS4KCQoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZWQgdHlwbyAoJiYgLT4gJikuCgkKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbaWYxNjMyL3VzZXIuc3BlY10KCUltcGxlbWVudGVkIFBvc3RBcHBNZXNzYWdlKCkuCgkKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNldENhcHR1cmUoMCkgc2hvdWxkIGFjdCBsaWtlIFJlbGVhc2VDYXB0dXJlKCkuCgpUdWUgTWF5ICA5IDExOjU1OjUyIDE5OTUgICAgIEVkZGllIEMuIERvc3QgICAgICAgICAgICAgKGVjZEBkcmVzc2xlci5kZSkKCgkqIFtJbWFrZWZpbGVdCglDaGFuZ2VkIENERUJVR0ZMQUdTIGZvciBzeXN0ZW1zIHJ1bm5pbmcgX19FTEZfXyAodGVtcG9yYXJpbHkpCglBZGRlZCBBU0ZMQUdTIHRvIGV4cG9ydGVkIHZhcmlhYmxlcy4KCgkqIFtkZWJ1Z2dlci9yZWFkbGluZS9JbWFrZWZpbGVdCglNb3ZlZCBkZWZpbmVzIGZvciBsaWJyZWFkbGluZSBmcm9tIERFRklORVMgdG8gRVhUUkFfREVGSU5FUwoKCSogW21lbW9yeS9sb2NhbC5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZyBvdXRwdXRzLgoKTW9uIE1heSAgOCAwMDo1NToyNyBNRVQgRFNUIDE5OTUJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglGaXhlZCBhICJGSVhNRSIgY29uY2VybmluZyBub3J3ZWdpYW4gdHJhbnNsYXRpb24uCgpTdW4gTWF5ICA3IDIzOjI1OjIzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogWyovKl0KICAgICAgICBSZW1vdmVkIHdhcm5pbmdzIGluIGEgY291cGxlIG9mIGZpbGVzIGFuZCBkZWxldGVkIHNvbWUgb2Jzb2xldGUgY29kZS4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQogICAgICAgIENsZWFudXAsIHNwZWVkIGltcHJvdmVtZW50cyAmIGxvdHMgb2YgYnVnIGZpeGVzLgoKICAgICAgICAqIFtjb250cm9scy9jb21iby5jXQoJTW9zdGx5IHJld3JpdHRlbi4gVGhpcyBpcyBzdGlsbCB2ZXJ5IGJ1Z2d5LCBidXQgbm90IHF1aXRlIGFzIGJhZCBhcyAKCWJlZm9yZS4KCiAgICAgICAgKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KICAgICAgICBSZW1vdmVkIHRoZSBuZWVkIGZvciBzeXNyZXMuZGxsLiBTbWFsbCBidWcgZml4ZXMuCgkKICAgICAgICAqIFtvYmplY3RzL29lbWJpdG1hcC5jXSBbaW5jbHVkZS9iaXRtYXBzLzxtYW55Pl0gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgICAgW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbcmMvc3lzcmVzKi5yY10KICAgICAgICBSZW1vdmVkIHN5c3Jlcy5kbGwgYW5kIHJlcGxhY2VkIHRoZSByZW1haW5pbmcgYml0bWFwcy9pY29ucyB3aXRoCiAgICAgICAgWFBNIGVxdWl2YWxlbnRzLgoKICAgICAgICAqIFttaXNjL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21haW4uY10KICAgICAgICAgIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KICAgICAgICAiQWJvdXQgV2luZS4uLiIgbm93IGJyaW5ncyB1cCBhIHN0YW5kYXJkIFNoZWxsQWJvdXQoKSB3aW5kb3cgd2l0aAogICAgICAgIHRoZSBXaW5lIGljb24gYW5kIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4KCQoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgU2hlbGxBYm91dCgpL0Fib3V0RGlhbG9nUHJvYygpIHRvIHNob3cgdGhlIHJpZ2h0IGljb24uCgoJKiBbd2luZG93cy9ldmVudC5jXQoJU21hbGwgaGFjayBmb3Igbm9uLWFscGhhbnVtZXJpYyBrZXlzOiBEb250J3Qgc2VuZCB0aGUgYXNjaWkgdmFsdWUgaW4KCXRoZSBXTV9LRVlET1dOIG1lc3NhZ2UsIGJ1dCBzb21lIHVudXNlZCBjb2RlIGluc3RlYWQuIFNob3VsZCBiZSBkb25lCglwcm9wZXJseSBieSBzZW5kaW5nIGRpZmZlcmVudCBjb2RlcyBmb3IgZWFjaCBrZXkuIFRoZSBlZGl0IGNvbnRyb2wKCXVzZWQgdG8gZ2V0IGEgVktfREVMRVRFIG1lc3NhZ2UgZWFjaCB0aW1lIHRoZSB1c2VyIHR5cGVkICcuJy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglSZW1vdmVkIGEgY2hlY2sgZm9yIENTX0dMT0JBTENMQVNTIGluIENMQVNTX0ZpbmRDbGFzc0J5TmFtZSgpLgoJVGhpcyB1c2VkIHRvIGJlIG5vIHByb2JsZW0sIGJ1dCBicmVha3MgUmVzb3VyY2UgV29ya3Nob3AgaW4gOTUwNDAzLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJTmV3IGRpYWdub3N0aWMgZm9yIGEgYnVnIEkndmUgYmVlbiBlbmNvdW50ZXJpbmcuIElmIGl0IHNob3dzIHVwLAoJcGxlYXNlIHJlcG9ydCBpdC4KClN1biBNYXkgIDcgMjM6MTE6MTggRURUIDE5OTUgIFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFtvYmplY3RzL2NvbG9yLmNdCglIYW5kbGUgc2l0dWF0aW9uIHdoZW4gJ2RjJyBleGlzdHMsIGJ1dCBwYWxldHRlIG1hcHBpbmcKCWRvZXMgbm90LiAgKEZpeGVzIGtpZHBpeDIgZGVtby4pCgpTdW4gTWF5ICA3IDAzOjMyOjAwIDE5OTUgIENoYXJsZXMgTS4gSGFubnVtICAobXljcm9mdEBtaXQuZWR1KQoKCSogW2xvYWRlci9sZHQuY10KCUxEVF9QcmludDogT25seSBzaG93IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IHRoZSBrZXJuZWwKCXJldHVybmVkLiBNYWtlIHRoaXMgd29yayBmb3IgTmV0QlNELgoKRnJpIE1heSAgNSAwMjo1MzoyNiAxOTk1ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAbWl0LmVkdSkKCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2luY2x1ZGUvd2luZS5oXSBbbG9hZGVyL3NpZ25hbC5jXQoJTW9kaWZ5IGNzIGFuZCBkcyBzZWxlY3RvciB2YWx1ZXMgZm9yIE5ldEJTRC1jdXJyZW50LgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCgkkc3AsICRlc3A6IFVzZSBSTl9FU1BfQVRfU0lHTkFMIHJhdGhlciB0aGFuIFJOX0VTUC4KCgkqIFtkZWJ1Z2dlci9yZWdwb3MuaF0KCU1vZGlmeSBzaWdjb250ZXh0IGZvcm1hdCBmb3IgTmV0QlNELWN1cnJlbnQuCglTQ19FU1A6IFVzZSBSTl9FU1BfQVRfU0lHTkFMIHJhdGhlciB0aGFuIFJOX0VTUC4KCgkqIFtpbmNsdWRlL2xkdC5oXQoJU0VMRUNUT1JfVE9fRU5UUlk6IEV4cGxpY2l0bHkgY2xlYXIgdGhlIHRvcCBoYWxmIG9mIHRoZSBzZWxlY3RvcgoJdmFsdWUsIHNpbmNlIG9ubHkgMTYgYml0cyBvZiBpdCBtYXkgaGF2ZSBiZWVuIHNhdmVkLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglTZXQgc3RydWN0dXJlIHBhY2tpbmcgd2l0aCBgI3ByYWdtYSBwYWNrJyB0byBhY2NvbW9kYXRlCglvdGhlci9vbGRlciBjb21waWxlcnMuCgpUdWUgTWF5ICAyIDE4OjE1OjAxIDE5OTUgUGFhbCBCZXllciAoYmV5ZXJAaWR0LnVuaXQubm8pCgkKCSogW21pc2MvY29tbWRsZy5jXQoJRml4ZWQgcGF0aC1uYW1lcyBzbyB3aGVuIGNoYW5naW5nIGRpcmVjdG9yeSB0aGUgbGlzdGJveGVzCgljaGFuZ2VzIHRvby4KCQoJKiBbZGVidWdnZXIvZGJnLnkgZGVidWdnZXIvZGVidWcubCB3aW5lLmluaV0KCUFkZGVkIFN5bWJvbFRhYmxlRmlsZSB0byB3aW5lLmluaSBzbyBzeW1ib2xzIGNhbiBiZSByZWFkCgl3aXRob3V0IHN0YW5kaW5nIGluIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB3aW5lLnN5bS4KCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBzcGVjaWZ5IGZ1bGwgbmFtZSBvZiB3aW5lLnN5bSBmcm9tCgl0aGUgZGVidWdnZXIgcHJvbXB0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXByIDI5IDIwOjQyOjAxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIHBhaW50aW5nIG9mIFNTXypGUkFNRSBjb250cm9scy4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVBhc3MgdGhlIHdpbmRvdyBpbnN0YW5jZSBhcyBEUyB0byB0aGUgMTYtYml0IHdpbmRvdyBwcm9jZWR1cmUuCglSZXdyb3RlIENhdGNoKCkgYW5kIFRocm93KCkgdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBtdWx0aXBsZSB0YXNrcy4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJTmV3IGZ1bmN0aW9uIE1BSU5fSW5pdCgpIHRvIHBlcmZvcm0gaW5pdGlhbGl6YXRpb25zIGJlZm9yZSB0aGUKCWZpcnN0IHRhc2sgaXMgc3RhcnRlZCBpbnN0ZWFkIG9mIGRvaW5nIHRoZW0gaW4gSW5pdEFwcCgpLgoJVGVtcG9yYXJ5IGhhY2sgdG8gY29tbWFuZC1saW5lIHBhcnNpbmcgdG8gbG9hZCBvbmUgcHJvZ3JhbSBwZXIKCWNvbW1hbmQtbGluZSBhcmd1bWVudCwgdG8gbWFrZSB0ZXN0aW5nIHRhc2stc3dpdGNoaW5nIGVhc2llci4KCgkqIFtsb2FkZXIvKi5jXQoJUmVpbXBsZW1lbnRlZCBtb2R1bGVzIHRvIHVzZSBhIFdpbmRvd3MtY29tcGF0aWJsZSBsYXlvdXQgYW5kIHRvCglhbGxvdyBtdWx0aXBsZSB0YXNrcyBhbmQgbXVsdGlwbGUgbW9kdWxlIGluc3RhbmNlcy4gTm90IHJlYWxseQoJZmluaXNoZWQgeWV0LgoKCSogW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KCVJlaW1wbGVtZW50ZWQgdGFza3MgdG8gdXNlIGEgY29tbW9uIGFkZHJlc3Mgc3BhY2UsIGFuZCBpbXBsZW1lbnRlZAoJcHJlbGltaW5hcnkgdGFzay1zd2l0Y2hpbmcgY2FwYWJpbGl0aWVzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIGJ1ZyBpbiBHbG9iYWxOZXh0KCkuCgoJKiBbbWlzYy9tYWluLmNdCglVcGRhdGVkIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gTGV0IG1lIGtub3cgaWYgSSBmb3Jnb3Qgc29tZW9uZS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglVc2Ugb25lIERUQSBwZXIgdGFzayBpbnN0ZWFkIG9mIGEgZ2xvYmFsIG9uZS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYnVnIGluIEJpdEJsdCgpIHRoYXQgY291bGQgY2F1c2UgQmFkTWF0Y2ggZXJyb3JzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBuZXcgZnVuY3Rpb24gdHlwZSAnc3R1YicsIHRoYXQgbWFrZXMgcG9zc2libGUgdG8gZXhwb3J0IGFuCgl1bmltcGxlbWVudGVkIGZ1bmN0aW9uIGJ5IG5hbWUgYXMgd2VsbCBhcyBieSBvcmRpbmFsLiBUaGlzIHdpbGwKCWF2b2lkIGxvYWRpbmcgZXJyb3JzIGZvciB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucy4KCUdlbmVyYXRlIGFuIGluLW1lbW9yeSBtb2R1bGUgbGF5b3V0IGZvciBidWlsdC1pbiBETExzIHNvIHRoYXQgdGhlCglzYW1lIGNvZGUgY2FuIGJlIHVzZWQgZm9yIGJ1aWx0LWluIGFuZCBsb2FkZWQgbW9kdWxlcy4KCUNoYW5nZWQgcmVsYXkgY29kZSB0byBtYWtlIGl0IHVubmVjZXNzYXJ5IHRvIHNhdmUgdGhlIHZhbHVlIG9mIHRoZQoJQlAgcmVnaXN0ZXIuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBtdWx0aXBsZSBtZXNzYWdlIHF1ZXVlcyBhbmQgcHJlbGltaW5hcnkgdGFzay1zd2l0Y2hpbmcKCWNhcGFiaWxpdGllcy4gSW50ZXItdGFzayBTZW5kTWVzc2FnZSgpIGNhbGxzIGFyZSBub3QgaW1wbGVtZW50ZWQKCXlldCBhbmQgd2lsbCBwcm9iYWJseSBjYXVzZSBjcmFzaGVzIGlmIHVzZWQuCgoJKiBbd2luZG93cy9wcm9wZXJ0eS5jXQoJUmVpbXBsZW1lbnRlZCBwcm9wZXJ0aWVzIGFuZCBhbGxvY2F0ZSB0aGVtIG9uIHRoZSBVU0VSIGhlYXAuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIGJ1ZyBpbiBTZXRXaW5kb3dXb3JkKCkuCglSZWltcGxlbWVudGVkIEVudW1XaW5kb3dzKCkgYW5kIEVudW1UYXNrV2luZG93cygpLgoKVHVlIEFwciAxOCAwOTo0ODozOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFttaXNjL21haW4uY10KCUdldFN5c3RlbVBhcmFtZXRlcnNJbmZvKCk6IEFkZGl0aW9uYWwgYWN0aW9uIFNQSV9HRVRJQ09OVElUTEVGT05ULgoJCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJlbW92ZWQgdGhlIGNoZWNrIGZvciBORV9TRUdGTEFHU19FWEVDVVRFT05MWSwgc2luY2UgaXQgYnJva2UKCWNvbnRyb2wuZXhlLgoJRml4ZWQgaWNvbiBsb2FkaW5nLgoJCgkqIFtvYmplY3RzL2ZvbnQuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBidWcgaW4gSW5pdEZvbnRzTGlzdCgpIGFuZCB3b3JrZWQgb24gdGhlIEVudW1Gb250cygpCglmdW5jdGlvbnMgdG8gbWFrZSB0aGVtIGNvbXByZWhlbnNpYmxlLgoKICAgICAgICAqIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIG15IHByZXZpb3VzIHBhdGNoIHRvIGhhbmRsZSBMQlVUVE9OVVAgbWVzc2FnZXMuCgpGcmkgQXByIDE0IDExOjQxOjI4IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzYy9uZXR3b3JrLmMsIG1pc2MvZG9zX2ZzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgV05ldEdldENvbm5lY3Rpb24uICBBbGwgdGhhdCBpcyBjdXJyZW50bHkKICAgICAgICBzdXBwb3J0ZWQgYXJlIGRyaXZlcywgZm9yIHdoaWNoIHRoZSByZW1vdGUgbmFtZSBpcyBzaW1wbHkKICAgICAgICB0aGUgcmVkaXJlY3RlZCBVTklYIGRpcmVjdG9yeSBuYW1lLgoKICAgICAgICAqIFttaXNjZW11L2ludDI/LmNdCiAgICAgICAgTW9yZSBkcml2ZSBudW1iZXIgdmFsaWRpdHkgY2hlY2tpbmcuCgpXZWQgQXByIDEyIDExOjI4OjM3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCglPb3BzLCBteSBwcmV2aW91cyBjaGFuZ2UgdG8gTGlzdEJveERpcmVjdG9yeSBicm9rZSB0aGUgQm9ybGFuZAoJZmlsZSBvcGVuIGRpYWxvZy4gRml4ZWQuCgpNb24gQXByIDEwIDIzOjE3OjEyIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9vbGUybmxzLnNwZWNdIFttaXNjL29sZTJubHMuY10gW21pc2MvSW1ha2VmaWxlXQoJTmV3IGZpbGUgb2xlMm5scy5jLiBBZGRlZCBzdHVicyBmb3IgR2V0VXNlckRlZmF1bHRMQ0lELCAKCUdldFN5c3RlbURlZmF1bHRMQ0lELCBHZXRVc2VyRGVmYXVsdExhbmdJRCwgR2V0U3lzdGVtRGVmYXVsdExhbmdJRC4KCk1vbiBBcHIgMTAgMTA6MDU6MTggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdsb2JhbFJlQWxsb2MoKTogSWYgR01FTV9NT0RJRlkgaXMgc2V0LCBkb24ndCByZXNpemUgdGhlIGJsb2NrLgoJTG9jYWxSZUFsbG9jKCk6IFNhbWUgZm9yIExNRU1fTU9ESUZZLgoJCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgYSBidWcgaW4gTGlzdEJveERpcmVjdG9yeSB0aGF0IHByZXZlbnRlZCBjb21tZGxnIGZyb20gd29ya2luZy4KCUNoZWNrIGZvciBlcnJvcnMgaW4gc29tZSBtb3JlIHBsYWNlcy4KCiAgICAgICAgKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCTE2IGJpdCBjYWxsYmFjayBmdW5jdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBhcyBzZWdwdHJzLgoJCgkqIFtpbmNsdWRlL2RsbHMuaF0gW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL3NlbGVjdG9yLmNdCglbbG9hZGVyL2xpYnJhcnkuY10KCVByZXZlbnQgYSBETEwgZnJvbSBiZWluZyBpbml0aWFsaXplZCB0d2ljZSAoQm9ybGFuZHMgUmVzb3VyY2UKCVdvcmtzaG9wIHVzZWQgdG8gZG8gdGhpcykuCglQcm92aWRlIGFuIGFkZGl0aW9uYWwgZmxhZyBmb3IgZWFjaCB3X2ZpbGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlcgoJaXQncyBhbiBFWEUgb3IgYSBETEwsIGZvciBjb21iaW5hdGlvbnMgbGlrZSBwYnJ1c2guZXhlLy5kbGwuCgkKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSGFuZGxlIExCVVRUT05VUCBtZXNzYWdlcyBldmVuIGlmIHRoZSBidXR0b24gbm8gbG9uZ2VyIGhhcyB0aGUKCWNhcHR1cmUgKGZvciBXaW5IZWxwKS4KCQoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJRkFSUFJPQyBpcyBub3cgYSBzZWdwdHIgZm9yIHRoZSBlbXVsYXRvciBhbmQgYSBmdW5jdGlvbgoJcG9pbnRlciBmb3IgdGhlIGxpYnJhcnkuCgkKCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9jb21tZGxnLmhdCglDbGVhbmVkIHRoZSBmaWxlIGRpYWxvZ3MgdXAgYSBsaXR0bGUuIFRoZXkgbm93IHdvcmsgcmVhc29uYWJseSB3ZWxsLAoJYWx0aG91Z2ggdGhlcmUgYXJlIHN0aWxsIHNvbWUgcHJvYmxlbXMgKGUuZy4gZmlsZXMgYXJlIGluaXRpYWxseQogICAgICAgIGludmlzaWJsZSkuCgoJKiBbd2luZG93cy9jbGFzcy5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0Q2xhc3NJbmZvKCkgbXVzdCB0YWtlIGEgc2VncHRyLCBhcyBpdCBjaGVja3Mgd2hldGhlciB0aGUKCWhpZ2h3b3JkIGlzIHplcm8uCglHZXRDbGFzc05hbWUoKSBjYWxsZWQgdGhlIHdyb25nIGF0b20gZnVuY3Rpb24uIE5vIHN1cnByaXNlIGl0IGRpZG4ndAogICAgICAgIGZpbmQgYW55dGhpbmcuCgoJKiBbbWlzYy9sc3RyLmNdCglBbnNpVG9PZW0oKSBhbmQgT2VtVG9BbnNpKCkgZGlkbid0IHRlcm1pbmF0ZSB0aGUgc3RyaW5ncy4gRml4ZWQuCiAgICAgICAgUmVtb3ZlZCBzb21lIHdhcm5pbmdzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2RkZW1sLnNwZWNdIFtpbmNsdWRlL2RsbHMuaF0KCU5ldyBzcGVjIGZpbGUgZm9yIHRoZSAzLjEgRERFTUwgRERMLiAKCgkqIFtjb250cm9scy9tZW51LmNdCglTbWFsbCBmaXggdG8gQ2hhbmdlTWVudSAtIG1hc2sgb3V0IHRoZSBvYnNvbGV0ZSBmbGFncwoJKE1GX0FQUEVORCA9PSBNRl9PV05FUkRSQVcsIHRoaXMgbGVkIHRvIHByb2JsZW1zKS4gSXQgYWxzbyBoYWQKCXByb2JsZW1zIHdpdGggdGhlIE1GX0JZUE9TSVRJT04gZmxhZy4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgU2VuZE1lc3NhZ2UoKTogY2FsbCB0aGUgV0hfQ0FMTFdORFBST0MgaG9vayBmdW5jdGlvbi4gVGhpcyBpcyByYXRoZXIKICAgICAgICB1Z2x5LCBJJ20gYWZyYWlkLiBXaW5kb3dzIHByb2JhYmx5IHBhc3NlcyBhIHBvaW50ZXIgdG8gdGhlIDE2IGJpdAogICAgICAgIHN0YWNrIGZvciBzcGVlZCByZWFzb25zLgoJCiAgICAgICAgKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICBTZXQvSG9va1dpbmRvd3NIb29rKCkgc2hvdWxkbid0IGp1c3QgY2FsbCB0aGVpciAqRXggY291bnRlcnBhcnRzLCBhcwogICAgICAgIHRoZXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNzLgogICAgICAgIE1TIEhlYXJ0cyBub3cgd29ya3Mgc29tZXdoYXQsIGlmIHlvdSBkaXNhYmxlIHRoZSBuZXcgYnVpbHRpbiBEREVNTC4KICAgICAgICBUaGUgZ3JhcGhpY3MgYXJlIGNvbXBsZXRlbHkgbWVzc2VkIHVwLCB0aG91Z2guCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgIDIgMTg6MzE6MTIgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW0NvbmZpZ3VyZV0gW2lmMTYzMi9JbWFrZWZpbGVdCglSZW1vdmVkIG5ldyBidWlsZCBhbmQgc2hvcnQgbmFtZXMgb3B0aW9ucy4KCgkqIFtpZjE2MzIvKi5jXSBbdG9vbHMvYnVpbGQuY10KCUltcGxlbWVudGVkIGNvbXBpbGVkIGNhbGwtYmFjayBmdW5jdGlvbnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZTsKCWFsbCB0aGUgcmVsYXkgY29kZSBpcyBub3cgZG9uZSBpbiBhc3NlbWJseSBjb2RlIGdlbmVyYXRlZCBieSB0aGUKCWJ1aWxkIHByb2dyYW0uCglSZWxheSBjb2RlIGlzIG5vIGxvbmdlciBkZXBlbmRlbnQgb24gYmVpbmcgbG9hZGVkIGJlbG93IDY0Sy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIG1lbW9yeSBsZWFrIGluIExvYWRTdHJpbmcoKS4gQSBmaXggd2lsbCBhbHNvIGJlIG5lZWRlZCBmb3IKCW90aGVyIHJlc291cmNlcy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBnbG9iYWwgaGVhcCBhcmVuYXMsIHNvIHdlIGNhbiBzdG9yZSBpbmZvcm1hdGlvbnMgYWJvdXQKCWdsb2JhbCBibG9ja3MsIGxpa2UgbG9jayBjb3VudHMgb3Igb3duZXIgaGFuZGxlLgoJSW1wbGVtZW50ZWQgRmFyR2V0T3duZXIoKSBhbmQgRmFyU2V0T3duZXIoKS4KCUltcGxlbWVudGVkIGdsb2JhbCBoZWFwIFRPT0xIRUxQIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUJ1ZyBmaXg6IGl0IHdhcyBub3QgcG9zc2libGUgdG8gcmUtdXNlIGEgZnJlZSBzZWxlY3Rvci4KClN1biBBcHIgMiAwMTozNDo1MiAxOTk1IENvbnN0YW50aW5lIFNhcHVudHpha2lzICAoY3NhcHVudHpAbWl0LmVkdSkKCgkqICBbY29udHJvbHMvbGlzdGJveC5jXQoJTWFqb3Igd29yayBvbiBsaXN0Ym94IGNvZGUKICAgICAgICAgLSBNYW55IGJ1Z3MgZml4ZWQgKHN0aWxsIG1hbnkgYnVncykKICAgICAgICAgLSBNb3JlIG1lc3NhZ2VzIHN1cHBvcnRlZAogICAgICAgICAtIENvZGUgc2ltcGxpZmllZAoKRnJpIE1hciAzMSAwMzoyNzoxNiBFU1QgMTk5NSBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTG90cyBvZiBidWcgZml4ZXMgcmVsYXRlZCB0byBkaWFwcGVhcmluZyB0ZXh0LCBsb3N0IGNhcmV0cywKCWhpZ2hsaWdodGluZywgc2VnbWVudGF0aW9uIGZhdWx0cywgb2NjdXJhbmNlIG9mIHJhbmRvbQoJY2hhcmFjdGVycywgaW5zZXJ0aW9uIG9mIGNoYXJhY3RlcnMgb3ZlciBzZWxlY3Rpb24sIG1pc3BsYWNlZAoJY2FyZXQgbG9jYXRpb24sIGRpc3BsYXkgY29ycnVwdGlvbiwgZW5kIG9mIGxpbmUgYmVoYXZpb3IsIGV0Yy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglFRElUIGNsYXNzIGRvZXNuJ3Qgd2FudCB0byB1c2UgQ1NfUEFSRU5UREMgZmxhZy4KClRodSBNYXIgMzAgMjA6NTg6MjUgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCgkgIEZpeHVwRnVuY3Rpb25Qcm9sb2dzKCkgc2hvdWxkIGFsc28gaGFuZGxlIG11bHRpcGxlIGRhdGEgbW9kdWxlcy4KCSAgKHRoaXMgYnVnIG9ubHkgYmVjYW1lIHZpc2libGUgYmVjYXVzZSBNYWtlUHJvY0luc3RhbmNlKCkgd2FzIGZpeGVkCgkgIGluIDk1MDMxOSkKCQoJKiBbbWlzYy9kb3Nmcy5jXQoJICBTaW1wbGlmaWVkIERPU19TaW1wbGlmeVBhdGguCgkgIFNtYWxsIGZpeCB0byBET1Nfb3BlbmRpciB0byByZXVzZSBhbiBlbnRyeSBpZiBhbiBvcGVuIGRpcmVjdG9yeQoJICBpcyBvcGVuZWQgYWdhaW4sIHRvIHByZXZlbnQgInRvbyBtYW55IG9wZW4gZGlyZWN0b3JpZXMiIG1lc3NhZ2VzLgoKVGh1IE1hciAzMCAxMjowNTowNSAxOTk1IE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdW2luY2x1ZGUvY29tcG9iai5oXVttaXNjL2NvbXBvYmouY10KCUNvRGlzY29ubmVjdE9iamVjdDogbmV3IHN0dWIgZnVuY3Rpb24KCgkqIFtpbmNsdWRlL21zZG9zLmhdCglmaXggRE9TVkVSU0lPTgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTkVfRml4dXBTZWdtZW50OiBCZSBtb3JlIGdlbmVyb3VzIG9uIGFkZGl0aXZlIGZpeHVwcwoKCSogW2lmMTYzMi91c2VyLnNwZWNdW21pc2MvbmV0d29yay5jXQoJQWRkIG1vcmUgV05ldCogc3R1YnMKCldlZCBNYXIgMjkgMTE6NDc6MjIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCgkgIERsZ0Rpckxpc3QoKTogc2VuZCBzZWdwdHIgaW5zdGVhZCBvZiBsaW5lYXIgcG9pbnRlciAKCSAgaW4gbWVzc2FnZSB0byBzdGF0aWMgY29udHJvbAoJKiBbY29udHJvbHMvbWVudS5jXQoJICBUcmllZCB0byBpbXBsZW1lbnQgb3duZXJkcmF3biBtZW51aXRlbXMuIERvZXNuJ3Qgd29yay4KCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9mb250LmNdCgkgIFByb3ZpZGUgYSBzdHViIGZvciBHZXRSYXN0ZXJpemVyQ2FwcygpCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCSAgUGFzcyBlbmQgYWRkcmVzcyBpbnN0ZWFkIG9mIGxlbmd0aCB0byBMb2NhbEluaXQoKSBpbiAKCSAgQ3JlYXRlU2VsZWN0b3JzKCkKCSogW21lbW9yeS9sb2NhbC5jXQoJICBMb2NhbEluaXQoKTogSWYgdGhlcmUncyBhbHJlYWR5IGEgbG9jYWwgaGVhcCBpbiB0aGUgc2VnbWVudCwgZG8KCSAgbm90aGluZyBhbmQgcmV0dXJuIFRSVUUKCSogW29iamVjdHMvbGluZWRkYS5jXQoJICBSZXBsYWNlZCBidWdneSBMaW5lRERBKCkgd2l0aCBhIEJyZXNlbmhhbSBhbGdvcml0aG0uIFNob3VsZCB3b3JrCgkgIG5vdy4KCSogW3dpbmRvd3MvY3Vyc29yLmNdCgkgIExvYWRDdXJzb3IoKS9DcmVhdGVDdXJzb3IoKTogQ2xlYW5lZCB1cCB0aGUgbWVzcy4gTmVlZHMgc29tZQoJICBtb3JlIHdvcmsgc3RpbGwuCgpUdWUgTWFyIDIxIDE3OjU0OjQzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvY2FsbGJhY2suY10gW2luY2x1ZGUvZGxscy5oXQoJICBbaWYxNjMyL3dpbnByb2NzLnNwZWNdIFtpZjE2MzIvd2lucHJvY3MuY10gW2luY2x1ZGUvd2lucHJvY3MuaF0KCSAgW2NvbnRyb2xzL3dpZGdldHMuY10gW21pc2Mvc2hlbGwuY10gW21pc2MvY29tbWRsZy5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW21pc2MvbWVzc2FnZS5jXQoJICBBZGRlZCBhIG5ldyBidWlsdGluIERMTCB0aGF0IHByb3ZpZGVzIDE2IGJpdCBlbnRyeSBwb2ludHMgZm9yIGFsbAoJICB0aGUgRGVmKlByb2NzIChEZWZEbGdQcm9jLCBCdXR0b25Qcm9jIGV0Yy4pLiBPV0wgcHJvZ3JhbXMgd29yawoJICBhZ2Fpbi4KCSogW21pc2Mvc2hlbGwuY10KCSAgUmVnT3BlbktleSgpL1JlZ0NyZWF0ZUtleSgpIGJ1Z3MgZml4ZWQuCiAgICAgICAgKiBbbG9hZGVyL25lX2ltYWdlLmNdCgkgIFNraXBwaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIERMTCB3aGVuIENTID09IDAgd2FzIGJyb2tlbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAxOSAxNjozMDoyMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbKi8qXQoJSW1wbGVtZW50ZWQgYSBuZXcgbWVtb3J5IG1hcHBpbmcgc2NoZW1lLiBUaGVyZSdzIG5vIGxvbmdlciBhCglvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBwb2ludGVycy4gUGxlYXNlIHNlZQoJZmlsZSBERVZFTE9QRVJTLUhJTlRTIGZvciB0ZWNobmljYWwgZGV0YWlscy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGJ1ZyB3aGVuIGRyYWdnaW5nIG1vdXNlIGluIGhvcml6b250YWwgc2Nyb2xsYmFycy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyLyouc3BlY10KCVJlbW92ZWQgc3VwcG9ydCBmb3IgQyBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIGZvciByZS1vcmRlcmluZwoJb2YgdGhlIDMyLWJpdCBhcmd1bWVudHMsIGFzIHRoZXNlIHdlcmUgbmV2ZXIgdXNlZC4gVGhpcyBzaG91bGQKCWFsbG93IGEgbW9yZSBlZmZpY2llbnQgY2FsbGJhY2sgc2NoZW1lIHRvIGJlIGltcGxlbWVudGVkLgoKCSogW2lmMTYzMi9vbGVjbGkuc3BlY10KCVJlZHVjZWQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIG1ha2UgdGhlIDE2LWJpdCBjb2RlIGZpdCBpbiA2NGsuCglUaGlzIGxpbWl0YXRpb24gd2lsbCBzb29uIGJlIHJlbW92ZWQuCgoJKiBbbG9hZGVyL2xkdC5jXQoJUmV3cm90ZSBMRFQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhbmQgaW1wbGVtZW50ZWQgTERUX0dldEVudHJ5KCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJUmV3cm90ZSBHbG9iYWwqKCkgcm91dGluZXMgdG8gdXNlIHRoZSBuZXcgc2VsZWN0b3IgYWxsb2NhdGlvbgoJbWVjaGFuaXNtLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJUmV3cm90ZSBsb2NhbCBoZWFwIGhhbmRsaW5nIHRvIHVzZSBhIFdpbmRvd3MtY29tcGF0aWJsZSBsYXlvdXQKCShub3QgcmVhbGx5IGZpbmlzaGVkIHlldCkuCglJbXBsZW1lbnRlZCBUT09MSEVMUCBoZWFwLXdhbGtpbmcgcm91dGluZXMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbXBsZW1lbnRlZCBMRFQgbWFuaXB1bGF0aW9uIEFQSSBmdW5jdGlvbnMuCgpUdWUgTWFyIDE0IDE5OjUwOjI4IEVTVCAxOTk1IFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4ZWQgcHJvYmxlbSB3aGVyZSBkaWFsb2dzIGNsb3NlZCB1c2luZyB0aGUgU3lzdGVtIG1lbnUgCiAgICAgICAgKCdDbG9zZScgaXRlbSBvciBkb3VibGUgY2xpY2sgb24gY2xvc2UgYm94KSB3b3VsZAoJaGFuZyBXaW5lLgoKU3VuIE1hciAxMiAxNDoyODoxMyAxOTk1ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJlbW92ZWQgbW9zdCBvZiB0aGUgc3RhdGVtZW50cyBmb3Igc2VuZGluZyBhIG5vdGlmaWNhdGlvbiBtZXNzYWdlCglMaXN0Qm94RGlyZWN0b3J5KCksIERsZ0RpclNlbGVjdCgpLCBEbGdEaXJMaXN0KCk6IEltcHJvdmVkIHRoZQoJY29kZTsgQm9ybGFuZCdzIHN0YW5kYXJkIGZpbGUgb3BlbiBkaWFsb2cgd2lsbCB3b3JrIG5vdy4KCQoJKiBbbWlzYy9tYWluLmNdLCBbbWlzYy9maWxlLmNdLCBbbWlzY2VtdS9pbnQyMS5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gIi1hbGxvd3JlYWRvbmx5Ii4gSWYgc2V0CglhbiBhdHRlbXB0IHRvIG9wZW4gYSByZWFkIG9ubHkgZmlsZSBpbiB3cml0ZSBtb2RlIHdpbGwgYmUgY29udmVydGVkIAoJdG8gb3BlbmluZyBpdCByZWFkIG9ubHkgKG1hbnkgcHJvZ3JhbXMgdHJ5IHRvIG9wZW4gYWxsIGZpbGVzIGluIAoJcmVhZC93cml0ZSBtb2RlIGV2ZW4gaWYgdGhleSBvbmx5IGludGVuZCB0byByZWFkIGl0IC0gdGhpcyBtaWdodCAKCWNhdXNlIGEgZmV3IHVuZGVyIHByb2JsZW1zIHVuZGVyIGFuIHVuaXgtbGlrZSBlbnZpcm9ubWVudCB3aGVyZSBtb3N0IAoJZmlsZXMgYXJlIHJlYWQgb25seSBmb3IgYSAibm9ybWFsIiB1c2VyKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0TWVtb3J5UmVmZXJlbmNlKCk6IEFkZGVkIHN1cHBvcnQgZm9yIF9fQUhJbmNyIGFuZCBfX0FIU2hpZnQKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX1NpbXBsaWZ5UGF0aCgpOiBUaGlzIHJvdXRpbmUgc2ltcGxpZmllcyBwYXRoIG5hbWVzICggZS5nLiwgaXQKCXdpbGwgY2hhbmdlICIvdXNyLy8vbG9jYWwvYmluLy4uL2xpYi8vYSIgdG8gIi91c3IvbG9jYWwvbGliL2EiICkKCW1hdGNoKCk6IHJld3JpdHRlbgoJCgkqIFtvYmplY3RzL3RleHQuY10KCVRFWFRfTmV4dExpbmUoKTogUmVtb3ZlZCBhIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTEYncwoKCSogW21pc2NlbXUvaW50MjEuY10KCUdldEZpbGVEYXRlVGltZSgpOiBGaXhlZC4gU2V0RmlsZURhdGVUaW1lKCkgaXMgc3RpbGwgYnJva2VuLgoKU2F0IE1hciAxMSAxOTo0NjoxOSAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglDaGFuZ2VNZW51OiBkZWZhdWx0cyB0byBNRl9JTlNFUlQKCUluc2VydE1lbnU6IGFsbG93IGluc2VydGlvbiBldmVuIGlmIHBvc2l0aW9uIGlzIG9uZSBhZnRlciBsYXN0IGl0ZW0KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXSBbaWYxNjMyL2NvbXBvYmouc3BlY10gW2lmMTYzMi9yZWxheS5jXQoJICBbaWYxNjMyL3N0b3JhZ2Uuc3BlY10gW2luY2x1ZGUvZGxscy5oXQoJQWRkZWQgc3R1YnMgZm9yIFNUT1JBR0UuRExMIGFuZCBDT01QT0JKLkRMTAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUluU2VuZE1lc3NhZ2U6IG5ldyBmdW5jdGlvbgoKCSogW2luY2x1ZGUvbmVleGUuaF1baW5jbHVkZS9uZV9pbWFnZS5jXQoJTkVfRml4dXBTZWdtZW50OiBmaXhlZCBoYW5kbGluZyBvZiBhZGRpdGl2ZSByZWNvcmRzCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRFbnRyeURMTE5hbWU6IHJldHVybiBOVUxMIGluc3RlYWQgb2YgcG9pbnRlciB0byBETEwuMCBpZiBub3QgZm91bmQKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCgl3aW5fZmF1bHQ6IEVudGVyIGRlYnVnZ2VyIG9uIFNJR0ZQRSwgdG9vCgpXZWQgTWFyICAxIDIxOjQ3OjQyIDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQqLmNdCiAgICAgICAgVmFyaW91cyBtaW5vciBtb2RpZmljYXRpb25zIHRvIHRoZSBjbG9jayB0aWNrIGNvdW50ZXIsCiAgICAgICAgRmluZEZpcnN0L0ZpbmROZXh0IGZ1bmNzLCBhbmQgRFBCIGhhbmRsaW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgTWFyICAyIDE3OjQ0OjMyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglSZW1vdmVkIHN5c3JlcyBiaXRtYXAgY29kZTsgeW91IG5lZWQgbGliWHBtIHRvIGNvbXBpbGUgbm93LgoJSW1wbGVtZW50ZWQgTG9hZEljb24oKSBmb3IgT0VNIGljb25zLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vaWNfKl0KCUFkZGVkIE9FTSBpY29ucyBpbiBYUE0gZm9ybWF0LgoKCSogW29iamVjdHMvZGliLmNdCglCdWcgZml4IGluIERyYXdJY29uKCkuCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglSZW1vdmVkOyBhbGwgYml0bWFwcyBhcmUgc3RvcmVkIGluIFhQTSBmb3JtYXQgbm93LgoKVHVlIEZlYiAyOCAxODo1NDoyOCAxOTk1ICBUb21pIExlcHBpa2FuZ2FzICAodG9taWxlcHBAcGFqdS5vdWx1LmZpKQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVNtYWxsIHBhdGNoIHRvIGZpeCBlZGl0LWNvbnRyb2wgd2hlbiBpdCdzIGNyZWF0ZWQgd2l0aCB0ZXh0LgoKU3VuIEZlYiAyNiAyMDoyMjoxNSAxOTk1ICBNaWNoYWVsIFZla3NsZXIgIChlMTY3ODIyM0B0b2NobmFwYzIudGVjaG5pb24uYWMuaWwpCgoJKiBbdG9vbHMvbWFrZV9kZWJ1Z10KCVRoZSBjcmVhdGVkIG1hY3JvcyB3b24ndCBoYXZlIHNpZGUgZWZmZWN0cyBhbnltb3JlIHdoZW4gdXNlZCBpbgoJYW4gImlmLWVsc2UiIHN0cnVjdHVyZS4gTm8gbW9yZSB3YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlciB3aGVuCgljb21waWxlZCB3aXRob3V0IGRlZmluaW5nIERFQlVHX1JVTlRJTUUuCiAKU3VuIEZlYiAyNiAyMDoyMDo0OSAxOTk1ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEZWxldGVTdHJpbmcoKTogRml4ZWQKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldE1lbW9yeVJlZmVyZW5jZSgpOiBXaGVuIHNwZWNpYWwgc2VnbWVudHMgYXJlIHJlZmVyZW5jZWQgYnkKCXBzZXVkby1mdW5jdGlvbnMgbGlrZSBfXzAwNDBILCBhIHJlZmVyZW5jZSB0byBhICJub3JtYWwiIHNlZ21lbnQKCXdpbGwgYmUgcmV0dXJuZWQgcHJldmVudGluZyB0aGUgcHJvZ3JhbSBmcm9tIGNyYXNoaW5nIGFzIHNvb24KCWFzIHRoZSByZWZlcmVuY2VkIHNlZ21lbnQgaXMgYWN0dWFsbHkgYWNjZXNzZWQuCgpTdW4gRmViIDI2IDE1OjU1OjE0IE1FVCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAobG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlKQoKCSogW0NvbmZpZ3VyZV0KCUFzayBmb3IgT0xFIHN0dWJzIGFuZCBtYWxsb2MgZGVidWdnaW5nCgoJKiBbSW1ha2VmaWxlXQoJbGluayB3aXRoIGxpYm1jaGVjay5hIGlmIG5lY2Vzc2FyeQoKCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL2RsbC5oXVtpZjE2MzIvSW1ha2VmaWxlXQoJQWRkIE9MRSBzdHVicywgaW5jcmVhc2UgbnVtYmVyIG9mIGJ1aWx0aW5zCglkbGxfbmFtZV90YWJsZV9lbnRyeV9zOiBuZXcgZmllbGQgZGxsX2lzX3VzZWQKCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJR2V0TW9kdWxlSGFuZGxlLE1vZHVsZU5leHQ6IENoZWNrIGRsbF9pc191c2VkCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglCYXJrIG9uIHVuc3VwcG9ydGVkIE5FX1JBRERSX0xPV0JZVEUgZmxhZyAod2hhdCBpcyBpdCBzdXBwb3NlZAoJdG8gbWVhbiwgYW55d2F5PykKCgkqIFttaXNjL29sZWNsaS5jXVttaXNjL29sZXN2ci5jXQoJTmV3IGZpbGVzLiBBZGQgdG8gbWlzYy9JbWFrZWZpbGUKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX0dldFVuaXhGaWxlTmFtZTogbWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IHBhcmFtZXRlciB0byAKCXByZXZlbnQgb3ZlcndyaXRpbmcKCgkqIFttaXNjL21haW4uY10KCU1BSU5fUGFyc2VETExPcHRpb25zOiBuZXcgZnVuY3Rpb24KCU1BSU5fUGFyc2VPcHRpb25zOiB0cmVhdCAtZGxsIGNvbW1hbmQgbGluZSBmbGFnCgltYWluOiBhZGQgc3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZwoKRnJpIEZlYiAyNCAxMjo0MzoyNyAxOTk1ICBFcmlrIFN2ZW5kc2VuICA8ejNlc3ZAa21kLWFjLmRrPgoKCSogW2xvYWRlci9zaWduYWwuY10KCVNtYWxsIHBhdGNoIGZvciBwZW9wbGUgdXNpbmcgRnJlZUJTRC0yLjEuMC4KCkZyaSBGZWIgMTcgMjI6NDk6MTggMTk5NSAgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIHJldHVybiB2YWx1ZXMgdG8gdGhlIENhbGwqIHJvdXRpbmVzCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglMb2FkIHRoZSByZXNvdXJjZSBmaWxlIHByb3Blcmx5IGZvciBXaW5lTGliIGFwcGxpY2F0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEZlYiAxNiAxODo1NzozMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbaWYxNjMyL2NhbGwuU10KCU9ubHkgc2F2ZSB0aGUgbG93ZXIgMTYtYml0cyBvZiBTUCBhbmQgQlAuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglXaGVuIGNhbGxpbmcgdG8gMTYtYml0IGNvZGUsIHJlc3RvcmUgRFMgZnJvbSBpdHMgcHJldmlvdXMgdmFsdWUgb24KCWVudHJ5IHRvIHRoZSAzMi1iaXQgY29kZSwgaW5zdGVhZCBvZiBmcm9tIHRoZSBjb2RlIHNlZ21lbnQgb3duZXIuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVVzZSBhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIDE2LWJpdCBzdGFjayBmcmFtZSBsYXlvdXQKCWluc3RlYWQgb2YgaGFyZC1jb2RlZCBvZmZzZXRzLgoJCgkqIFtyYy9JbWFrZWZpbGVdCglVc2UgeS50YWIuYyBmb3IgYmlzb24gb3V0cHV0IGZpbGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB5YWNjLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglTbWFsbCBvcHRpbWl6YXRpb24gZm9yIGNhbGxzIHRvIDMyLWJpdCBjb2RlLgoKU3VuIEZlYiAxMiAwMzoxOTo0NyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBidWcgKGluZmxpY3RlZCBieSBwcmV2aW91cyBjaGFuZ2UpIC0gU0VHViBvbiBaTUFHSUMgZmlsZSBmb3JtYXQuCgpTdW4gRmViIDExIDIwOjAwOjAwIDE5OTUgIEf2cmFuIFRoeW5pICAoZ29yYW5Abm9ycnNrZW4uYmlsZGJhc2VuLnNlKQoKCSogW2RlYnVnZ2VyL2RiZy55XQoJUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bS10YWJsZSBsb2FkaW5nIHdoZW4gc3RvcHBlZCBpbiAxNi1iaXQgbW9kZS4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAgQWRkZWQgZHluYW1pYyBhbGxvY3Rpb24gb2Ygc2VsZWN0b3JzLgogICAgICAgIEZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBsYXJnZSBwcm9ncmFtcyBTSUdTRUdWLWluZyB3aGlsZQogICAgICAgIHJ1bm5pbmcgb3V0IG9mIHNlbGVjdG9ycy4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdIFtpZjE2MzIvY2FsbGJhY2suY10gCiAgICAgICAgICBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2hlYXAuY10gW21lbW9yeS9saW5lYXIuY10KCVVzZSBfX0FIU0hJRlQgYW5kIF9fQUhJTkNSIGluc3RlYWQgb2YgMyBhbmQgOC4KCk1vbiBGZWIgIDYgMTg6MDc6MzggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEJldHRlciByZWxhdGl2ZSBwYXRoIGhhbmRsaW5nIHdoZW4gY29udmVydGluZyBmaWxlbmFtZXMgYmV0d2VlbgogICAgICAgIGRvcyBhbmQgdW5peCwgYWxsb3dpbmcgJy4nIHRvIGJlIHVzZWQgaW4gdGhlIFdpbmRvd3MgcGF0aC4KICAgICAgICBTdGFydHVwIHdvcmtpbmcgZGlyIGlzIG5vdyBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyLgoKU2F0IEZlYiAgNCAyMToyMToxMyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFt0b29scy9idWlsZC5jXQoJU3F1ZWV6ZWQgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZWZlcmVuY2VzIGludGVybmFsIGRsbCdzIChtb3N0bHkKCSJzdHJ1Y3QgZGxsX3RhYmxlX2VudHJ5X3MiKS4gQ2F1c2VkIDIwJSByZWR1Y3Rpb24gaW4gZXhlY3V0YWJsZQoJY29kZSBzaXplLgoKRnJpIEZlYiAgMyAxODo1MzoxNSAxOTk1ICBNYXJ0aW4gdi4gTG9ld2lzICAobG9ld2lzQG1hcmllKQoKCSogW0ltYWtlZmlsZV0KCW1ha2Ugd2luZS5zeW0gb25seSB3aGVuIG1ha2luZyBlbXVsYXRvcgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogcmVwb3J0IGFzIG5vdCBpbXBsZW1lbnRlZCBmb3IgV0lORUxJQgoKCSogW21pc2Mvd2luc29jay5jXQoJRml4IENPTlZFUlRfSE9TVEVOVCBhbmQgZnJpZW5kcyBmb3IgdXNlIHdpdGggV0lORUxJQgoKCSogW3JjL0ltYWtlZmlsZV1bcmMvcmMueV1bcmMvcGFyc2VyLmNdCglSZW5hbWUgcmMueSB0byBwYXJzZXIueQoJVXNlIGZsZXggYW5kIGJpc29uIG9uIFN1bgoKCSogW3Rvb2xraXQvc3VwLmNdCglDYWxsV2luZG93UHJvYzogZml4IHBhcmFtZXRlciB0eXBlCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ29tbWVudGVkICNpZmRlZiBzcGFyYwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgRmViICAxIDE5OjI3OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIG1heGltaXplZCB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgaWNvbiBwb3NpdGlvbmluZyBhbmQgQXJyYW5nZUljb25pY1dpbmRvd3MoKS4KCUJ1ZyBmaXhlcyBpbiBTZXRXaW5kb3dQb3MoKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBHZXRDb250cm9sQnJ1c2goKS4KCVdpbmRvdyBmcmFtZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSB1cGRhdGUgcmVnaW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglEZXN0cm95IG93bmVkIHdpbmRvd3MgdXBvbiBEZXN0cm95V2luZG93KCkuCgpTdW4gSmFuIDI5IDE2OjE3OjIyIDE5OTUgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglDaGFuZ2VkIGxpbmUgdGVybWluYXRvciB0byBcclxuIHRvIGJlIGNvbXBhdGlibGUgd2l0aAoJV2luZG93cy4gIEZpeGVkIGJ1ZyBpbiB0ZXh0IHNlbGVjdGlvbi4KClN1biBKYW4gMjkgMTQ6MTA6MjIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICogW21pc2Mvc2hlbGwuY10KICAgICAgIFJld3JvdGUgUmVnQ3JlYXRlS2V5IGFuZCBSZWdPcGVuS2V5LCBzaW5jZSB0aGV5IHdlcmUgY29tcGxldGVseSBicm9rZW4uCiAgICAgICBGaXhlZCBhIGJ1ZyBpbiBSZWdRdWVyeUtleVZhbHVlLiBJbXBsZW1lbnRlZCBSZWdFbnVtS2V5CiAgICAgICBUaGVzZSBmdW5jdGlvbnMgbm93IHdvcmsgc29tZXdoYXQgbW9yZSB0aGUgd2F5IFdpbmRvd3MgcHJvZ3JhbXMgZXhwZWN0CiAgICAgICB0aGVtIHRvIHdvcmsuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMjIgMTg6NTU6MzMgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9kaWIuY10KCUZpeGVkIGljb24gbG9hZGluZyBhbmQgZHJhd2luZywgbm93IHRoYXQgQml0Qmx0KCkgd29ya3MgY29ycmVjdGx5LgoJCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgZWxsaXB0aWMgcmVnaW9ucyB3aXRoIGEgc2V0IG9mIHJlY3RhbmdsZS4gVGhpcyBncmVhdGx5CglzaW1wbGlmaWVzIHRoZSByZWdpb24gY29kZSBhbmQgc2hvdWxkIGJvb3N0IGNsaXBwaW5nIHBlcmZvcm1hbmNlLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzZWctZmF1bHQgb24gMjRicHAgZGlzcGxheXMuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGJ1ZyB3aGVuIHNocmlua2luZyBhIGJpdG1hcCB0byBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBidWdzIGluIFBhaW50UmduKCkgYW5kIFBvbHlsaW5lKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggd2luZG93IGJhY2tncm91bmQgcGFpbnRpbmcuCgpUaHUgSmFuIDEyIDEyOjIwOjI1IFBTVCAxOTk1IFJvc3MgQmlybyAoYmlyb0B5Z2dkcmFzaWwuY29tKQoKICAgICAgICogW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAqIFt0b29scy9uZXdidWlsZC5jXQogICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgKiBbaW5jbHVkZS93aW5lLmhdCiAgICAgICAqIFtsb2FkZXIvY2FsbC5TXQogICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAqIFtpbmNsdWRlL3NlZ21lbS5oXQogICAgICAgKiBbbWlzYy9tYWluLmNdCiAgICAgICBDaGFuZ2VkIHNlbGVjdG9yIGNvZGUgYW5kIDE2LzMyIGJpdCB4ZmVyIGNvZGUgc28gdGhhdCB3aW5lCiAgICAgICBubyBsb25nZXIgaGFzIHRvIGJlIGxvYWRlZCBsb3cgaW4gbWVtb3J5LiAgQ2hhbmdlZCB3aW5lCiAgICAgICB0byB3b3JrIHdpdGggRUxGIGJpbmFyeSBmb3JtYXRzIHVuZGVyIExpbnV4LgogICAgICAgClNhdCBTZXAgMTcgMTE6MDg6NDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJTmV3IGluc3RydWN0aW9uIGRpc2Fzc2VtYmxlciAtIGJvcnJvd2VkIGZyb20gTWFjaCBrZXJuZWwuICBIYXMgYQoJQlNEIHN0eWxlIG9mIGxpY2Vuc2UgYXMgb3Bwb3NlZCB0byB0aGUgZ2RiIGNvZGUgd2Ugd2VyZSBwcmV2aW91c2x5Cgl1c2luZyB3aGljaCB3YXMgdW5kZXIgdGhlIEdQTC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEphbiAgOSAxODoyNzoxMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbSW1ha2VmaWxlXQoJQ29tcGlsaW5nIHdpdGggLVdhbGwgZmxhZy4KCgkqIFsqLypdCglGaXhlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBCaXRCbHQoKSBhbmQgdXNlZCB0aGUgc2FtZSBjb2RlIHRvIHJld3JpdGUgUGF0Qmx0KCkgYW5kCglTdHJldGNoQmx0KCkuIFRoZSB0aHJlZSAqQmx0KCkgZnVuY3Rpb25zIHNob3VsZCBub3cgYmUgY29ycmVjdCBpbgoJZXZlcnkgY2FzZSAoZmFtb3VzIGxhc3Qgd29yZHMpLgoKCSogW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvZGl0aGVyLmNdCglNZXJnZWQgdGhlIHR3byBmaWxlcyBpbnRvIGJydXNoLmMKCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgd2hlbiB0aGUgV2luZG93cyBwcm9ncmFtcyBmb3JnZXQgdG8gcmUtc2VsZWN0IHRoZQoJb3JpZ2luYWwgYml0bWFwIGluIGEgbWVtb3J5IERDLgoKCSogW29iamVjdHMvZm9udC5jXQoJVHR5IHRvIHVzZSAnZml4ZWQnIGZvbnQgd2hlbiB0aGUgc3lzdGVtIGZvbnQgY2FuJ3QgYmUgZm91bmQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVRlbnRhdGl2ZSBmaXggdG8gbWFrZSBkaWFsb2dzIGxvb2sgYmV0dGVyIHdoZW4gdXNpbmcgZml4ZWQtd2lkdGgKCWZvbnRzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVBhcnRpYWxseSBpbXBsZW1lbnRlZCB0aGUgUFNfSU5TSURFRlJBTUUgcGVuIHN0eWxlLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXggZm9yIHdpbmRvd3MgdGhhdCBoYXZlIHRoZSBXU19FWF9ETEdNT0RBTEZSQU1FIHN0eWxlIGJpdAoJd2l0aG91dCB0aGUgV1NfRExHRlJBTUUgc3R5bGUuCgpUaHUgSmFuICA1IDEzOjM3OjQyIDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglHbG9iYWxDb21wYWN0IHNob3VsZCBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gdGhlCglsYXJnZXN0IHJ1biBvZiBmcmVlIGJsb2NrcyBpbmNsdWRlcyB0aGUgbGFzdCBibG9jay4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVGlsaW5nIGFuZCBjYXNjYWRpbmcgd2luZG93cyB3aXRob3V0IGFueSBNREkgY2hpbGRyZW4gc2hvdWxkCglubyBsb25nZXIgY3Jhc2ggKGFzc3VtaW5nIG5vLW9wIGlzIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvKS4KClN1biBKYW4gIDEgMjM6MzA6MjUgMTk5NSAgRm9ucyBCb3RtYW4gIDxib3RtYW5AcmFiby5ubD4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUdldFRleHRFeHRlbnRQb2ludDogZml4ZWQgZGVidWcgb3V0cHV0LCBzdHIgaXMgY291bnRlZCBzdHJpbmcsIG5vdAogICAgICAgIHplcm8gdGVybWluYXRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCURMTFJlbGF5OiB3aGVuIGRlYnVnZ2luZ19zdGFjayBnb3Qgc2VndiwgYWRkZWQgdXBwZXIgYm91bmQgZm9yCiAgICAgICAgc3RhY2sgZHVtcC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIERlYyAyNyAxMzozNToxNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbKi9JbWFrZWZpbGVdCglBbGwgb2JqZWN0cyBmaWxlcyBhcmUgbm93IGtlcHQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3RvcnkuCgoJKiBbUkVBRE1FXQoJUmV3cm90ZSBtb3N0IG9mIGl0LgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglSZXdyb3RlIEJpdEJsdCgpIHRvIGxvb2sgcmlnaHQgaW4gZXZlcnkgY2FzZSwgd2hpbGUgbWluaW1pemluZwoJdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gTm90IHJlYWxseSBmaW5pc2hlZCB5ZXQuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyB3aXRoIHBhdHRlcm4gYnJ1c2hlcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlcyBmb3IgbG9naWNhbCBjb29yZGluYXRlcy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBHZXRQaXhlbCgpIHRvIHJldHVybiB0aGUgY29ycmVjdCBjb2xvciwgYW5kIG1hZGUgaXQgZmFzdGVyLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBidWcgaW4gQ29tYmluZVJnbigpIHdoZW4gb25lIG9mIHRoZSByZWdpb24gaXMgZW1wdHkuCgpGcmkgRGVjIDIyIDAxOjQyOjU3IE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglEb24ndCBhc3N1bWUgdGhhdCBleHByIGhhbmRsZXMgJz09JywgdXNlICc9JyBpbnN0ZWFkLgoJR2l2ZSBhIChob3BlZnVsbHkgaW5mb3JtYXRpdmUpIG1lc3NhZ2UgaWYgaW1ha2UgZmFpbHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBEZWMgIDcgMTQ6NTI6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIHByb2JsZW1zIGR1ZSB0byBuZXcgc2Nyb2xsLWJhciBjb2RlLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW9wb3J0cy5jXQoJSGFuZGxlIEkvTyBvcGNvZGVzIHRoYXQgdXNlIGFuIGFic29sdXRlIGFkZHJlc3MuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBUYWJiZWRUZXh0T3V0KCkuCgpTYXQgRGVjICAzIDE4OjUzOjA4IDE5OTQgIEtlbm5ldGggTWFjRG9uYWxkICA8Sy5NYWNEb25hbGRAZWQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW1wbGVtZW50ZWQgR2V0TWV0YWZpbGUoKS4KCUZpeGVkIGJ1ZyBpbiBQbGF5TWV0YUZpbGUoKSB3aGVuIHJlYWRpbmcgZGlzYyBiYXNlZCBtZXRhZmlsZSByZWNvcmRzLgoJQWRkZWQgTUVUQV9QT0xZUE9MWUdPTiwgTUVUQV9ERUxFVEVPQkpFQ1QgYW5kIE1FVEFfRU9GIHRvIAoJUGxheU1ldGFGaWxlUmVjb3JkKCkuCgkKV2VkIE5vdiAzMCAwNjozMjoyNSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW0ltYWtlZmlsZV0KCXdpbmUuc3ltOiBSZW1vdmUgZ2NjMl9jb21waWxlZCBhbmQgZnJpZW5kcwoKCSogW2NvbnRyb2xzL2xpc3Rib3guY11baWYxNjMyL3JlbGF5LmNdW2lmMTYzMi9yZWxheS5jXQoJICBbbG9hZGVyL3Jlc291cmNlLmNdW21lbW9yeS9oZWFwLmNdW29iamVjdHMvZGliLmNdW3dpbmRvd3MvZGlhbG9nLmNdCglSZXBsYWNlICNpZmRlZiBERUJVR19YWFggd2l0aCBpZihkZWJ1Z2dpbmdfeHh4KXsKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvTGliTWFpbjogTmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvb3B0aW9ucy5oXVttaXNjL21haW4uY10KCSAgW21pc2NlbXUvaW50MWEuY11bbWlzY2VtdS9pbnQyMS5jXVttaXNjZW11L2tlcm5lbC5jXQoJcmVtb3ZlZCBPcHRpb25zLnJlbGF5X2RlYnVnCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglIRUFQX09XTkVSOiBVc2UgZHMgaW5zdGVhZCBvZiBjczppcAoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTG9hZE5FSW1hZ2U6IFJlbWVtYmVyIGN1cnJlbnQgZXhlLCBoYW5kbGUgbm9kYXRhIGRsbHMKCUluaXRORURMTDogaGFuZGxlIG5vZGF0YSBkbGxzLCBjYWxsIENhbGxUb0xpYk1haW4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNyZWF0ZVNlbGVjdG9yczogSW5pdGlhbGl6ZSBhdXRvX2RhdGFfc2VsIHdpdGggMAoKCSogW21lbW9yeS9oZWFwLmNdCglIRUFQX0NoZWNrSGVhcDogQ2hlY2sgcHJldgoJSEVBUF9DaGVja0xvY2FsSGVhcHM6IG5ldyBmdW5jdGlvbgoKCSogW21pc2MvcHJvZmlsZV0KCVJlbWVtYmVyIGFuZCBkdW1wIG9ubHkgY2hhbmdlZCBwcm9maWxlcwoKCSogW3Rvb2xzL21ha2VkZWJ1Z10KCUludHJvZHVjZSBkZWJ1Z2dpbmdfeHh4IGZsYWdzCgpTdW4gTm92IDI3IDIzOjEzOjIyIE1FVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtjbGlwYm9hcmQuaCBjb2xvci5oIGRjLmggZG9zX2ZzLmggZXZlbnQuaCBmb250LmggZ3JhcGhpY3MuaAoJaWYxNjMyLmgga2VybmVsLmggbGlicmFyeS5oIG1pc2NlbXUuaCBuZV9pbWFnZS5oIG5vbmNsaWVudC5oIAoJcGVfaW1hZ2UuaCBzZWxlY3RvcnMuaCB3aW50eXBlcy5oXQoJQWRkZWQuCgoJKiBbKi8qXQoJLSBDb21tZW50ZWQgYWxsICdzdGF0aWMgY2hhciBjb3B5cmlnaHQgc3RhdGVtZW50cycsIHNlZSBtaXNjL21haW4uYwoJLSBtb3ZlZCBwcm90b3R5cGVzIHRvIGhlYWRlcnMgZmlsZXMsIGZpeGVkIHdyb25nIHByb3RvdHlwZXMuCgktICpwbGVhc2UqIGFkZCBhIGhlYWRlciBmaWxlIGZvciBlYWNoIC5jIGlmIHlvdSBuZWVkIHRvIGV4cG9ydAoJICB0aGluZ3MuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBvbmUgc3RhdGljIHN0cmluZyB3aGljaCBsaXN0IHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzLgoKRnJpIE5vdiAyNSAxNjoyNDoyNyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJTWFkZSB0aGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzIG1vcmUgYXV0b21hdGljLiAgQWRkZWQKCWEgW2ZvbnRzXSBzZWN0aW9uIHRvIHRoZSB3aW5lLmNvbmYgZmlsZS4gIE1hZGUgdGhlIGRlZmF1bHRzCgliZXR0ZXIuICBHZW5lcmFsbHkgY2xlYW5lZCBpdCB1cC4KCgkqIFtyYy9zeXNyZXNfTm8ucmNdIFtyYy9zeXNyZXNfRGUucmNdIFtyYy9zeXNyZXMuY10KCU5vcndlZ2lhbiByZXNvdXJjZXMgYW5kIHNtYWxsIGZpeGVzIHRvIHRoZSBnZXJtYW4gcmVzb3VyY2VzLgoKV2VkIE5vdiAyMyAyMDoyODo1OSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCgliYXJrKCksIHRvZ2dsZV9uZXh0KCksIHNob3VsZF9jb250aW51ZSgpOiBOZXcgZnVuY3Rpb25zCglpbnNlcnRfYnJlYWsoKTogRml4ZWQsIGFkZHMgd3JpdGUgYWNjZXNzIHRvIHBhZ2UgYmVmb3JlIHdyaXRpbmcKCXdpbmVfYnAubmV4dF9hZGRyOiBuZXcgc3RydWN0dXJlIGZpZWxkCgoJKiBbZGVidWdnZXIvZGJnLnldCglDaGFuZ2VkIHN5bWJvbCdzIHZhbHVlIHRvIGJlIGl0J3MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUKCXBvaW50ZWQgdG8gYnkgdGhlIHN5bWJvbC4KCUNoYW5nZWQgU0lHVFJBUCBoYW5kbGluZyB0byBhbGxvdyBjb250aW51YXRpb24gYWZ0ZXIgYnJlYWsgcG9pbnQKCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEFib3V0KCk6IExvYWQgcmVzb3VyY2UgZnJvbSBtZW1vcnkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAyMCAxODozMDowNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFtpbmNsdWRlL3Njcm9sbC5oXQoJUmV3cml0dGVuIG1vc3Qgb2Ygc2Nyb2xsLWJhciBjb2RlIGZvciBiZXR0ZXIgV2luZG93cyBsb29rICYgZmVlbC4KCUltcGxlbWVudGVkIEVuYWJsZVNjcm9sbEJhcigpLgoJUHJlbGltaW5hcnkga2V5Ym9hcmQgc3VwcG9ydC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgQmFkTWF0Y2ggZXJyb3IgZm9yIEJpdEJsdCgpIGFuZCBTdHJldGNoQmx0KCkgd2hlbiByZWFkaW5nCgliaXRzIGZyb20gb3V0c2lkZSB0aGUgdmlzaWJsZSByZWdpb24uCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy9vYm1fKl0KCVVzZSBYUE0gc3ltYm9saWMgY29sb3JzIHRvIGxvYWQgYml0bWFwcy4gVGhpcyBhbGxvd3MgdGhlIGNvbG9ycwoJb2YgdGhlIGJpdG1hcHMgdG8gZGVwZW5kIG9uIHRoZSBzeXN0ZW0gY29sb3JzLgoKCSogW3Rvb2xzL21ha2VfZGVidWddCglNYWRlIHRoZSBtYWtlX2RlYnVnIHNjcmlwdCBtb3JlIHJvYnVzdC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgQ2hlY2tSYWRpb0J1dHRvbigpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGZldyBjaGFuZ2VzIHRvIHNjcm9sbC1iYXIgZHJhd2luZyBhbmQgdHJhY2tpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJlbmFtZWQgTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvIFdJTlBPU19OZXh0V2luZG93RnJvbVBvaW50KCkgdG8KCWF2b2lkIGNvbmZ1c2lvbiwgYW5kIG9wdGltaXplZCBpdCBzb21ld2hhdC4KCk5vdiAxOSwgOTQgTWFydGluIEF5b3R0ZSAod2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EpCgoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tY2lhbmltLmNdCgltb3JlIGNvZGluZyBidXQgbm90aGluZyBzcGVjdGFjdWxhci4KCgkqIFttaXNjL21tYXV4LmNdCglzb21lIGNvZGluZyB0byBhY2Nlc3MgJy9kZXYvbWl4ZXInLgoKCSogW21pc2MvbWlkaS5jXQoJc29tZSBjb2RpbmcgdG8gcmVhZCAuTUlEIGZpbGVzLCBidXQgaXQncyBub3QgcGxheWluZyB5ZXQuCgpTdW4gTm92IDEzIDE5OjMxOjAzIDE5OTQgICAgSmFtZXMgWW91bmdtYW4gKG1iY3N0anlAYWZzLm1hbi5hYy51aykKCgkqIFtvYmplY3RzL2RpYi5jXQoJUmVpbXBsZW1lbnRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoKSBzbyB0aGF0IGl0IHdvdWxkIGNvcGUgd2l0aAoJYml0bWFwcyB3aGljaCBkb24ndCBlbmQgMHgwMCwgMHgwMiAocHJldmlvdXNseSBpdCBibGV3IHVwKS4gIFRoaXMKCWluY2x1ZGVzIHNvbWUgYml0bWFwcyBvdXRwdXQgYnkgUGFpbnQgU2hvcCBQcm8uICBJbXBsZW1lbnRhdGlvbiBpcwoJcG9zc2libHkgbm93IHRvbyBsYXguICBQbGVhc2Ugc2VlIHRoZSBub3RlcyBvbiB0aGUgZnVuY3Rpb24gYWJvdXQKCXdoeS4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglUaGUgZGVza3RvcCBwYXR0ZXJuIHNob3VsZCBiZSBwYWludGVkIGlmIHRoZSB3YWxscGFwZXIgZG9lc24ndAoJY292ZXIgdGhlIHdob2xlIHNjcmVlbiB3aWR0aCBPUiB0aGUgd2hvbGUgc2NyZWVuIGhlaWdodC4KClN1biBOb3YgMTMgMDA6MDc6MTEgTUVUIDE5OTQJRXJpayBCb3MJPGVyaWtAeHM0YWxsLm5sPgoKCSogW29iamVjdHMvZGliLmNdCglTbWFsbCBidWcgaW4gRElCX1NldEltYWdlQml0cygpIGZpeGVkLCBiaXRtYXBzIGluIDE2LDI0IGJwcAoJbm93IHdvcmsuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdIFtpbmNsdWRlL3Jlc291cmNlLmhdCglTb21lIGNsZWFudXAuCgpUaHUgTm92IDEwIDIwOjQ0OjU4IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbQ29uZmlndXJlXQoJICBbcmMvc3lzcmVzLnJjXQoJUHJpbWl0aXZlIGNvbXBpbGUtdGltZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKCgkqIFtyYy9zeXNyZXNfRGUucmNdCglOZXcgZmlsZQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTG9hZEJpdG1hcDogUmVjb2duaXplIGVuZCBvZiBzeXNyZXNibSBwcm9wZXJseQoKCSogW3JjL0ltYWtlZmlsZV0KCVJ1bGVzIHRvIGNvbXBpbGUgcmVzb3VyY2VzIHNpbXBsaWZpZWQsIGRlcGVuZGVuY2llcyBjaGFuZ2VkCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglEb24ndCB1c2Ugc3lzcmVzYm0gaWYgdXNpbmcgWFBNCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW06IFJldmVyc2UgWi1vcmRlciBvZiBjb250cm9scwoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTVNHX1RyYW5zbGF0ZU1vdXNlTXNnOiBGaXggSFRUUkFOU1BBUkVOVCBoYW5kbGluZwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglOZXh0V2luZG93RnJvbVBvaW50OiBOZXcgZnVuY3Rpb24KCgkqIFtjb250cm9scy9idXR0b24uY10KCVdNX05DSElUVEVTVDogR3JvdXAgQm94IGlzIEhUVFJBTlNQQVJFTlQKCUJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbjogTmV3IGZ1bmN0aW9uCglCTV9TRVRDSEVDSzogQWRkZWQgY2FsbCB0byBCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24KCk1vbiBOb3YgIDcgMTE6MjA6MjYgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4IGhhbmcgd2hlbiB1c2luZyBEcmF3VGV4dCguLi4sIERUX1dPUkRCUkVBSykgd2l0aCBhIHdvcmQgdGhhdAoJaXMgdG9vIGxvbmcgdG8gYnJlYWsuCgoJKiBbb2JqZWN0cy9mb250LmNdCglEb24ndCBhc3N1bWUgaGVsdmV0aWNhIGlmIHRoZXJlIGlzIG5vIGZvbnQgZmFtaWx5OyBsZXQgdGhlIG90aGVyCglmb250IGF0dHJpYnV0ZXMgZGVjaWRlIHdoYXQgZm9udCB0byB1c2UuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJTGlzdGJveGVzIGFuZCBjb21ibyBib3hlcyBuZWVkIHRvIGJlIG5vdGlmaWVkIG9mIGRvdWJsZS1jbGlja3MuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJICBbaW5jbHVkZS9saXN0Ym94LmhdCgoJc2Nyb2xsaW5nIHRvIGJvdHRvbSBvZiBsaXN0IGJveCBzaG91bGQgZGlzcGxheSBsYXN0IGl0ZW0gYXQgdGhlCglib3R0b20sIG5vdCBhdCB0aGUgdG9wLgoJCglsaXN0IGJveGVzIG5lZWQgdG8gYWxsb2NhdGUgYSBzZXBhcmF0ZSBoZWFwIGZvciB0aGVpciBpdGVtIGRhdGEsCglyYXRoZXIgdGhhbiB1c2luZyB0aGUgdXNlciBoZWFwLiAgT3RoZXJ3aXNlLCBpdCdzIHZlcnkgZWFzeSB0byBydW4KCW91dCBvZiBtZW1vcnkgZm9yIGxpc3QgYm94IGl0ZW1zLgoKCXJlbW92ZWQgcmVkdW5kYW50IGNvZGUgaW4gTGlzdEJveEFkZFN0cmluZygpLiAgSW1wbGVtZW50ZWQgc2ltcGxlCgl2ZXJzaW9uIG9mIExCU19TT1JULgoKCURvbid0IHB1dCBbLl0gaW4gdGhlIGxpc3QgYm94IHdoZW4gdXNpbmcgRERMX0RJUkVDVE9SWS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm9zIHNob3VsZCBwYXNzIENCU19TT1JUIG9udG8gdGhlaXIgbGlzdCBib3guCgoJKiBbd2luZG93cy93aW4uY10KCUlmIHdpbmRvdyBjcmVhdGlvbiBpcyBhYm9ydGVkLCByZW1vdmUgdGhlIHdpbmRvdyBmcm9tIHRoZQoJbGlua2VkIGxpc3RzLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJc3RhdGljIGNvbnRyb2xzIHdpdGggU1NfSUNPTiB3ZXJlIGFsd2F5cyByZXR1cm5pbmcgMCBmcm9tCglXTV9OQ0NSRUFURS4KCglNYWtlIHN1cmUgc3RhdGljIGNvbnRyb2xzIGhhdmUgdGV4dCB0byBkcmF3IGJlZm9yZSBkcmF3aW5nIGl0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92ICA2IDE4OjUyOjA0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSAgKE5ldyBmaWxlKQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gdXNlIC54cG0gZmlsZXMgZm9yIE9FTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vYm0qXSAgKE5ldyBmaWxlcykKCVJlZHJhd24gYWxsIE9FTSBiaXRtYXBzIGluIHhwbSBmb3JtYXQuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGQgc3BhY2UgZm9yIGludGVybmFsIGxlYWRpbmcgd2hlbiB1c2luZyBhIG5lZ2F0aXZlIGZvbnQgaGVpZ2h0LgoJU3R1YnMgZm9yIEFkZEZvbnRSZXNvdXJjZSgpIGFuZCBSZW1vdmVGb250UmVzb3VyY2UoKS4KCUZpeCBpbiBGT05UX0luaXQoKSBmb3IgdW5pbml0aWFsaXNlZCBkZWZhdWx0IGZvbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1ha2UgZm9udCBoZWlnaHQgbmVnYXRpdmUgYXMgaXQgaXMgcmVhbGx5IGEgcG9pbnQgc2l6ZSBhbmQgbm90IGEKCXBpeGVsIHNpemU7IGRpYWxvZ3MgdXNpbmcgOC1wb2ludCBmb250cyBsb29rIGJldHRlciBub3cuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgdGhlIGZpeCA6LSkgZm9yIFBpZSgpIHRvIG1ha2UgaXQgd29yayBmb3IgQXJjKCkgYW5kIENob3JkKCkgYWxzby4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBmZXcgY2hhbmdlcyBmb3IgbmV3IE9FTSBiaXRtYXBzLgoKU3VuIE5vdiAgNiAxODoyMjoxOCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglUaGUgbmFtZXMgb2YgbG9jYWwgY2xhc3NlcyBoYXZlIHRvIGJlIHN0b3JlZCB1c2luZyBHbG9iYWxBdG9tKi4KCU90aGVyd2lzZSB0aGV5IGNvdWxkbid0IGJlIGFjY2Vzc2VkIGZyb20gb3RoZXIgbW9kdWxlcyAoZS5nLiBCV0NDKSAKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoY3gpOiBJdCdzIHBvc3NpYmxlIHRvIHNldCB0aGUgY29udGVudHMgb2YgdGhlIGN4LXJlZ2lzdGVyLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJSW5pdE5FRExMKCk6IFRoZSBzaXplIG9mIHRoZSBsb2NhbCBoZWFwIGlzIG5vdyBwYXNzZWQgaW4gdGhlIGN4LQoJcmVnaXN0ZXIgd2hlbiBpbml0aWFsaXppbmcgYSBETEwuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUxvY2FsSW5pdCgpOiBUaGUgY2FzZSBzdGFydD09MCBpcyBub3cgaGFuZGxlZCBpbiB0aGUgd2F5IGl0IHNob3VsZC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0V2luZG93TG9uZygpOiBJZiB0aGUgYWRyZXNzIG9mIHRoZSB3aW5kb3dzIGZ1bmN0aW9uIGlzIHJlcXVlc3RlZAoJaXQncyBubyBsb25nZXIgcmV0dXJuZWQgaWYgaXQncyB3aXRoaW4gdGhlIFdpbmUgY29kZSAoYW5kIHRoZXJlZm9yZQoJdW5yZWFjaGFibGUgYnkgYSB3aW5kb3dzIHByb2dyYW0pLiBUaGlzIG1ha2VzIEJvcmxhbmQncyBPV0wgaGFwcHkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9HZXRTdHIoKTogQWRkZWQgaGFuZGxpbmcgZm9yIG9mZjwwLgoKU3VuIE5vdiAgNiAxNzozNzoxNCAxOTk0ICBDaHJpcyBKb25lcyAgPGNocmlzakBpY2hpcHMuaW50ZWwuY29tPgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglGaXhlZCBpbmZpbml0ZSBsb29wIGJ1ZyB3aGVuIHR3byBETExzIHJlZmVyIHRvIGVhY2ggb3RoZXIgKGZpeGVzCgloYW5ndXAgb2YgUXVpY2tlbiBkdXJpbmcgbG9hZGluZykuCgpUaHUgTm92IDA0IDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbbWlzYy9kb3NfZnMuY10KCUJ1ZyBmaXg6IFRoZSBzaXplIG9mIGEgZGlzayBhbiB0aGUgYXZhaWxhYmxlIHNwYWNlCglpcyBub3cgcmV0dXJuZWQgaW4gYnl0ZXMgaW5zdGVhZCBvZiAoaW5jb3JyZWN0bHkpCglLQnl0ZXMuCgpUaHUgTm92IDAzIDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeDogUGllIHNlZ21lbnRzIGFyZSBub3cgZmlsbGVkIHdpdGggY29ycmVjdCBicnVzaC4KClRodSBOb3YgIDMgMTA6NDA6MDkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCiAgICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gYmVmb3JlIGxvYWRlci5vCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBDb3B5U3lzTWVudTogZ2VuZXJhdGUgU1lTTUVOVSBvbiB0aGUgZmx5LCBlbGltaW5hdGUgaFN5c01lbnUKCiAgICAgICAgKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQogICAgICAgIEFkZCBzdHJ1Y3QgUmVzb3VyY2VUYWJsZQoKICAgICAgICAqIFtsb2FkZXIvYml0bWFwLmhdCiAgICAgICAgTG9hZCBzeXN0ZW0gYml0bWFwcyBmcm9tIHN5c3Jlc2JtVGFibGUKCiAgICAgICAgKiBbbWlzYy9jbGlwYm9hcmQuY10KICAgICAgICAgIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUsRVZFTlRfU2VsZWN0aW9uUmVxdWVzdDogYnVnIGZpeGVzCiAgICAgICAgCiAgICAgICAgKiBbcmMvSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gZnJvbSBzeXNyZXMubyBhbmQgc3lzcmVzYm0uby4gQWRkZWQgLWxmbAoKICAgICAgICAqIFtyYy9yYy55XQogICAgICAgIGNoYW5nZSBzdHlsZSBoYW5kbGluZyB0byBhbGxvdyAoIFMxIHwgUzIgKSB8IFMzCgogICAgICAgICogW3JjL3N5c3Jlcy5yY10KICAgICAgICAgIFtyYy9zeXNyZXNibS5yY10KICAgICAgICBQdXQgYml0bWFwcyBhbmQgaWNvbnMgdG8gc3lzcmVzYm0sIGV2ZXJ5dGhpbmcgZWxzZSB0byBzeXNyZXMKCiAgICAgICAgKiBbcmMvd2luZXJjLmNdCiAgICAgICAgICBbcmMvd2luZXJjLmhdCiAgICAgICAgQWRkZWQgLW8sIC1jIGZsYWdzLiBOZXcgZnVuY3Rpb24gc2V0X291dF9maWxlLiBPdXRwdXQgdG8gZmlsZXMuCgogICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCiAgICAgICAgRGlhbG9nQm94SW5kaXJlY3RQdHIsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHI6IE5ldyBmdW5jdGlvbnMgCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCiAgICAgICAgQ3JlYXRlIEFib3V0V2luZSBkaWFsb2cgZnJvbSB0ZW1wbGF0ZSBwb2ludGVyCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMzAgMTM6MDE6MTggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQnVnIGZpeCBmb3IgU1NfSUNPTiBjb250cm9scy4KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXQoJRml4ZWQgY2FsbC5vIGRlcGVuZGVuY2llcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCB2aXNpYmxlIHJlZ2lvbiBoYW5kbGluZy4gaFZpc1JnbiBpcyBhbHdheXMgbm9uLW51bGwgbm93LgoKCSogW3dpbmRvd3MvZGNlLmNdCglCdWcgZml4IGluIEdldERDRXggZm9yIENTX09XTkRDIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVzIHRvIGljb24gd2luZG93IGRyYXdpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUEgZmV3IGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgoKU3VuIE9jdCAzMCAxMjo1MDoyNCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJQml0Qmx0KCk6IEJpdEJsdCBpcyBub3cgYWJsZSB0byBoYW5kbGUgYW55IHJhc3RlciBvcGVyYXRpb24uIElmCgl0aGUgcmVxdWVzdCBjYW4ndCBiZSBwYXNzZWQgdG8gWFdpbmRvd3MgZGlyZWN0bHksIGl0J3MgcXVpdGUKCXNsb3csIHRob3VnaC4KCgkqIFsqLyouY10KCSAgW21pc2MvbWFpbi5jXQoJSW1wcm92ZW1lbnRzIG9mIHRoZSBzeXN0ZW0gZm9yIGhhbmRsaW5nIGRlYnVnIG1lc3NhZ2VzLiBPcHRpb25zIGFyZQoJbm93IGFsc28gbG9hZGVkIGZyb20gL3Vzci9saWIvWDExL2FwcC1kZWZhdWx0cy9XaW5lIChpbnNlcnQKCSpkZWJ1Z29wdGlvbnM6ICt4eHggdGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSB0dXJuIG1lc3NhZ2VzIHh4eCBvbikuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRGVzdHJveU1lbnUoKTogVGhlIHdob2xlIHdpbmRvdyB3b24ndCBiZSBkZXN0cm95ZWQgYXMgYSBzaWRlZWZmZWN0CglhbnkgbG9uZ2VyLgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4ZWQgYnVnIGluIHNlYXJjaGluZyBpbiBzeXN0ZW0vd2luZG93LWRpcmVjdG9yeS4KClN1biBPY3QgMzAgMTI6MjU6NTMgMTk5NCAgSmltbXkgVGlydGF3YW5nc2EgPGowdDI1MjdAdGFtMjAwMC50YW11LmVkdT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUJ1ZyBmaXggZm9yIHdpbmRvdyByZWxhdGVkIHN0cnVjdHVyZXMuCglEQ0IgYW5kIENPTVNUQVQgYXJlIGFmZmVjdGVkLiBUaGV5IG11c3QgYmUgcGFja2VkLgoKCSogW21pc2MvY29tbS5jXQoJQnVnIGZpeCBmb3IgQ09NIHBvcnRzOgoJRGlhbCBhbmQgZGlhbG9nIHdpbmRvdyBpbiB0ZXJtaW5hbC5leGUgbm93IHdvcmtzLgoJTm9uIHNlcXVlbnRpYWwgQ09NIGFzc2lnbm1lbnRzIGluIHdpbmUuY29uZiBzaG91bGQgbm90IGJyZWFrIG5vdy4KCUJhdWRyYXRlIGNhbiBiZSBzcGVjaWZpZWQgaW4gd2luZS5jb25mIHRvIG92ZXJjb21lIGJhdWRyYXRlIGxpbWl0YXRpb24KCWluIG1zd2luZG93LiBTZWUgc2FtcGxlIHdpbmUuaW5pCgoJKiBbaW5jbHVkZS9jb21tLmhdCglhZGQgYmF1ZHJhdGUgZmllbGQgdG8gRG9zRGV2aWNlU3RydWN0cmUKCgkqIFtvYmplY3QvZm9udC5jXQoJQnVnIGZpeCBmb3IgZm9udCBhc3NpZ25tZW50LgoJVXNlIHBhaXJzIG9mIGZvdW5kcnkgYW5kIGZhbWlseSBmb250bmFtZXMgaW4gWDExIHRvIGNvcnJlc3BvbmQgd2l0aAoJd2luZG93J3MgZm9udHMuCglQdXQgZm9udCBhc3NpZ25tZW50IGluaSB3aW5lLmluaS4KCgkqIFt3aW5lLmluaV0KCUFkZGluZyBvcHRpb25hbCBiYXVkcmF0ZSBhZnRlciBwb3J0IG5hbWUgaW4gInNlcmlhbHBvcnRzIiBzZWN0aW9uCglBZGQgbmV3IHNlY3Rpb24sICJmb250cyIuCgkiZGVmYXVsdCIgaXMgc3BlY2lhbCBrZXkgaW4gImZvbnRzIiB0byBtYXRjaCBhbnkgdW5tYXRjaCB3aW5kb3cgZm9udC4KCk9jdCAyOSwgOTQgKG5ldyBhZGRyZXNzKSB3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtpZjE2MzIvcmVsYXkuY10KCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdIAlOZXcgZmlsZS4KCSogW21pc2MvY29tbWRsZy5jXSAJCQlOZXcgZmlsZS4KCSogW2luY2x1ZGUvY29tbWRsZy5oXSAJCU5ldyBmaWxlLgoJQmVnaW4gb2YgYW4gZW11bGF0ZWQgQ09NTURMRyBETEwsIGJ1aWx0LWluIGZvciBub3cuCgkoQlRXLCBpZiB5b3Ugd2FudCB0byBzd2l0Y2ggYmV0d2VlbiBidWlsdC1pbiAmIDE2Yml0cyBDb21tRGxnLCBvbmx5IAoJdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gcHV0IHRoZSByZWFsL2R1bW15IG5hbWUgaW4gZmlsZSByZWxheS5jKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZldyBidWcgZml4ZXMgYW5kL29yIGNvc21ldGljLgoKCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbW1hdXguY10KCWJ1ZyBmaXhlcyBhbmQgZmxhZ3MgcmV0dXJuZWQgdG8gZW11bGF0ZSBTQjE2LgoKCSogW21pc2MvbWlkaS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnTWlkaScgTU1TWVNURU0gJiBNQ0kgZHJpdmVyLgoKCSogW21pc2MvbWNpYW5pbS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnQW5pbWF0aW9uMScgTUNJIGRyaXZlci4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkIG5ldyBzdHViIGZvciBHZXRMYXN0QWN0aXZlV2luZG93KCkuCgpUdWUgT2N0IDI1IDA5OjE3OjI1IDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtpZjE2MzIvY2FsbC5TXSBbdG9vbHMvYnVpbGQuY10KICAgICAgICAgICBTdXBwb3J0IGZvciBFTEYgZm9ybWF0LiAoTm90IGNvbXBsZXRlKQoKU3VuIE9jdCAyMyAwMDo1MTo1MCAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGQgc3R1YnMgZm9yIEFycmFuZ2VJY29uaWNXaW5kb3dzKCksIGV0Yy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGQgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCB0ZXN0X21lbW9yeSgpLCBmb3IgdXNlIHdpdGggSXNCYWQqUHRyKCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZCBzdHVicyBmb3IgVGlsZUNoaWxkV2luZG93cygpLCBldGMuCgoJKiBbd2luZG93cy93aW4uY10KCUlzV2luZG93KCkgc2hvdWxkbid0IGNyYXNoIGlmIGl0J3MgZ2l2ZW4gYSBiYWQgaGFuZGxlLgoJQWRkIHN0dWIgZm9yIEdldExhc3RBY3RpdmVQb3B1cCgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudCB0aGUgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJldHVybiB0aGUgZnVsbCBsb25nd29yZCBvZiB0aGUgaXRlbSBkYXRhIGluIExCX0dFVElURU1EQVRBLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCURvbid0IGxldCB0aGUgdXNlciBzZWxlY3QgYW4gYXJlYSBwYXN0IHRoZSBlbmQgb2YgdGhlIHRleHQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbiBEcmF3VGV4dCgpLCB0aGUgY29kZSB0byBkZWxldGUgY3JsZnMgYWxzbyByZW1vdmVkIG11bHRpcGxlCgljb25zZWN1dGl2ZSBuZXdsaW5lcy4gIEFsc28sIHVzaW5nIERUX0NBTENSRUNUIGRpZG4ndCByZXR1cm4KCXRoZSByaWdodCBoZWlnaHQsIGFuZCB0aGUgd2lkdGggd2Fzbid0IHJldHVybmVkIGF0IGFsbC4KCVRoaXMgY2F1c2VkIE1lc3NhZ2VCb3hlcyB0byBiZSBtaXNzaW5nIG11Y2ggb2YgdGhlaXIgdGV4dC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsV2luZG93W0V4XSBkaWRuJ3Qgd29yayByaWdodCB3aXRoIG51bGwgTFBSRUNUIGFyZ3VtZW50cy4KCkZyaSBPY3QgMjEgMjE6NDc6MTkgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpeGVkIGludDIxIDB4NDIgaGFuZGxlciB0byBwcm9wZXJseSBhc3NlbWJsZSAzMi1iaXQgc2VlayBwdHIuCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJRml4ZWQgaW52ZXJ0ZWQgbG9naWMgaW4gRW51bVByb3BzKCksIGFuZCBjaGFuZ2VkIENhbGxCYWNrMTYoKQoJY2FsbCB0byB1c2UgbmV3IGFyZyBmb3JtYXQuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIENhbGxCYWNrMTYoKSBjYWxsIGluIEVudW1bQ2hpbGRdV2luZG93cyB0byB1c2UgbmV3IGFyZwoJZm9ybWF0OyB0aGlzIGZpeGVzIGNyYXNoZXMgaW4gZW51bSBwcm9jZWR1cmVzLgoKV2VkIE9jdCAxOSAyMTozMDowMCBQRFQgMTk5NAkJbWFydGluQGNzLmNzdWZyZXNuby5lZHUKCgkqIFttaXNjL2NsaXBib2FyZC5jXQoJICBbd2luZG93cy9ldmVudC5jXQoJICBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBjdXQgYW5kIHBhc3RlIGJldHdlZW4gV2luZSBhbmQgb3RoZXIgWCBjbGllbnRzIHZpYQoJdGhlIFBSSU1BUlkgc2VsZWN0aW9uLiBUZXh0IG9ubHkgdGhpcyB0aW1lLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfTGluZUxlbmd0aCwgRURJVF9UZXh0TGluZSByZXR1cm4gMCBmb3IgbGluZXMgYWZ0ZXIgbGFzdCBvbmUuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVNlbmQgV01fU1lTQ09NTUFORCB0byBvdmVybGFwcGVkIGFuY2VzdG9yIHdpbmRvdywgCglub3QgdGhlIHJlY2VpdmVyIG9mIFdNX1NZU0tFWURPV04KClNhdCBPY3QgMjIgMTU6MDE6MDIgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQoJQ2xpZW50V2lkdGgoKS9DbGllbnRIZWlnaHQoKSBtYWNyb3M6IHJldHVybiAwIGlmIHNpemUgd291bGQKCWJlIG5lZ2F0aXZlCglFRElUX1N0ckxlbmd0aCgpOiB0YWtlcyB1bnNpZ25lZCBjaGFyKiBpbnN0ZWFkIG9mIGNoYXIqCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveFduZFByb2MoKTogaW4gImNhc2UgV01fTU9VU0VNT1ZFIiAtIHNldCBscGhsIGF0IHN0YXJ0IG9mCgljYXNlIGluc3RlYWQgb2YgaW4gZWFjaCBwbGFjZSByZXF1aXJlZCAoaXQgd2FzIG9taXR0ZWQgaW4KCXNvbWUgcGxhY2VzIGNhdXNpbmcgcHJvYmxlbXMhKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IGRvbid0IHRyeSB0byBmaW5kIHNpemUgb2YgYSB0ZXh0IGl0ZW0KCWlmIHRoZSBwb2ludGVyIGlzIE5VTEwKCgkqIFtpbmNsdWRlL2hlYXAuaF0KCWFkZGVkIGRlZmluaXRpb24gb2YgSEVBUF9Mb2NhbEluaXQoKQoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCXJlbW92ZWQgYnVnZ3kgcG9pbnRlcigpIG1hY3JvICh1c2UgU0FGRU1BS0VQVFIoKSBmcm9tIHNlZ21lbS5oCglpbnN0ZWFkKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSVBDQ29weVNlbGVjdG9yKCk6IGFkZGVkIG1pc3NpbmcgZmxhZ3MgdG8gc2htZ2V0KCkgY2FsbAoJPyBkb2VzIHRoaXMgYnJlYWsgbGludXggLSBJIGFkZGVkIHRoZXNlIGZsYWdzIGluIGEgcHJldmlvdXMKCXBhdGNoIGJ1dCB0aGV5IHdlcmUgbWlzc2luZyBpbiB0aGUgY29ycmVzcG9uZGluZyByZWxlYXNlID8KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCgl3aW5fZmF1bHQoKTogYWRkZWQgbWlzc2luZyBkZWZpbml0aW9ucyBvZiBpLCBkdW1wIGZvciB0aG9zZQoJbm90IHJ1bm5pbmcgTmV0QlNEIG9yIGxpbnV4CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19HZXRDdXJyZW50RGlyKCk6IG1hZGUgdGVtcFtdIHN0YXRpYyBzbyBpdCBjYW4gYmUgc2FmZWx5CglyZXR1cm5lZAoKCSogW21pc2NlbXUvaW50MjEuYyxpbnQyNS5jLGludDI2LmNdCglDaGFuZ2VkIGFsbCBpbnZvY2F0aW9ucyBvZiBwb2ludGVyKCkgdG8gU0FGRU1BS0VQVFIoKS4gSW5jbHVkZWQKCXNlZ21lbS5oIHdoZXJlIG5lY2Vzc2FyeS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSgpOiBDaGFuZ2VkIEhFQVBfSW5pdCgpIGNhbGwgdG8gCglIRUFQX0xvY2FsSW5pdCgpLCByZW1vdmVkIHJlZHVuZGFudCB2YXJpYWJsZXMKClNhdCBPY3QgMjIgMDA6Mjk6NDEgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCgkgIFttaXNjL2V4ZWMuY10gW21pc2NlbXUvaW50MTAuY10gW21pc2NlbXUvaW50MjEuY10KCSAgW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZXdyaXR0ZW4gbW9yZSBwcmludGYncyB0byB1c2UgdGhlIG5ldyBkZWJ1Z2dpbmcgc3lzdGVtLCBhbmQKCW1hZGUgd2luZSBsZXNzIHZlcmJvc2UgcGVyIGRlZmF1bHQuIFVzZSAiLWRlYnVnbXNnICttb2R1bGUiCgl0byBnZXQgKGFsbW9zdCkgdGhlIHNhbWUgYmVoYXZpb3IgYXMgYmVmb3JlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDE2IDEzOjI5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcGxlbWVudGVkIFdNX0dFVERMR0NPREUsIFdNX1NFVEZPTlQsIEJNX1NFVFNUWUxFLCBCTV9TRVRDSEVDSywKCUJNX1NFVFNUQVRFLgoJSW1wbGVtZW50ZWQgZGVmYXVsdCBidXR0b24gcGFpbnRpbmcuCglPcHRpbWlzZWQgcmVkcmF3aW5nLgoJRml4ZWQgb3duZXItZHJhdyBidXR0b25zLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJSW1wbGVtZW50ZWQgV01fU0VURk9OVC4KCUEgZmV3IG9wdGltaXNhdGlvbnMgaW4gcGFpbnRpbmcgY29kZS4KCUJ1ZyBmaXggZm9yIFNTX1NJTVBMRSBjb250cm9scy4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVByZWxpbWluYXJ5IEdldENvZGVIYW5kbGUoKS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglDaGFuZ2VkICdwYXNjYWwnIHRvICdwYXNjYWwxNicgZXZlcnl3aGVyZSBpdCdzIG5lZWRlZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgZmV3IGRhdGEgc3RydWN0dXJlcy4KCgkqIFttZW1vcnkvaGVhcC5jXQoJQnVnIGZpeCBpbiBIRUFQX1JlQWxsb2MoKS4KCgkqIFttaXNjL2N1cnNvci5jXQoJRml4ZWQgU2V0Q3Vyc29yKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIFBhdEJsdCgpIHdoZW4gdXNpbmcgQkxBQ0tORVNTIG9yIFdISVRFTkVTUyBjb2Rlcy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUJldHRlciBmb250IG1hcHBpbmcgY29kZS4KCUltcGxlbWVudGVkIEdldFRleHRGYWNlKCkuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXggaW4gUkVHSU9OX01ha2VQaXhtYXAoKS4KCUZhc3RlciByZWdpb24gY29weWluZy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIEV4dFRleHRPdXQoKS4KCUltcGxlbWVudGVkIERUX05PQ0xJUCBzdHlsZSBmb3IgRHJhd1RleHQoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglGcmVlIHRoZSBiaXRtYXAgd2hlbiBkZWxldGluZyBhIG1lbW9yeSBEQy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbm8gYXNzb2NpYXRlZCBYIHdpbmRvdy4KCUltcGxlbWVudGVkIERDWF9DTElQU0lCTElOR1MgYW5kIERDWF9QQVJFTlRDTElQIGluIEdldERDRXgoKS4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZyBhbmQgRE1fU0VUREVGSUQuCglJbXBsZW1lbnRlZCBXTV9ORVhURExHQ1RMLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkZWZhdWx0IHB1c2ggYnV0dG9uIGhhbmRsaW5nLgoJQmVnaW5uaW5nIG9mIGEga2V5Ym9hcmQgaW50ZXJmYWNlIGluIGRpYWxvZ3MKCShkb2VzIG5vdCByZWFsbHkgd29yayB5ZXQpLgoJRml4ZWQgZGlhbG9ncyB0aGF0IHVzZSBhIHNwZWNpYWwgZm9udC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2ZvY3VzLmNdCglBZGRlZCBzdXBwb3J0IGZvciBub24tWCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBGbG9vZEZpbGwoKSBhbmQgaW1wbGVtZW50ZWQgRXh0Rmxvb2RGaWxsKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglDbGVhbmVyIGhhcmR3YXJlIG1lc3NhZ2VzIGFuZCBYIGV2ZW50cyBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgV01fU0VUUkVEUkFXLgoKCSogW3dpbmRvd3Mvd2luLmNdCglPbmx5IGNyZWF0ZSBhbiBYIHdpbmRvdyBmb3IgdG9wLWxldmVsIHdpbmRvd3MsIG9yIGZvciB0aGUgZGVza3RvcC4KCUNoaWxkIHdpbmRvd3Mgbm93IHVzZSB0aGVpciBwYXJlbnQncyBkcmF3YWJsZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIG5vbi1YIHdpbmRvd3MgKHN0aWxsIHNvbWV3aGF0IGJyb2tlbikuCglJbXBsZW1lbnRlZCAqRGVmZXJXaW5kb3dQb3MoKS4KCgkqIFsqL0ltYWtlZmlsZV0KCUNsZWFuZWQgdXAgc29tZSBJbWFrZWZpbGVzLgoJTW92ZWQgZGMuYyBmcm9tIHdpbmRvd3MvIHRvIG9iamVjdHMvLgoJTW92ZWQgY3Vyc29yLmMgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KClN1biBPY3QgMTYgMTI6MjE6NTIgMTk5NCAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kNDAwLmRlPgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCSAgW2luY2x1ZGUvc3RkZGVidWcuaF0KCSAgWyovKi5jXQogICAgICAgIFJld3JpdHRlbiBhbGwgdGhlIGNhbGxzIHRvIHByaW50ZiBmb3IgZGlzcGxheWluZyBkZWJ1Zy1pbmZvcm1hdGlvbgogICAgICAgIChtZXNzYWdlcyBsaWtlICJMb2FkSW1hZ2U6IGxvYWRpbmcgU09MIChTT0wuRVhFKSIgZXRjLikgCiAgICAgICAgQWRkZWQgb3B0aW9uICItZGVidWdtc2ciIHRvIFdpbmUuIEV4YW1wbGU6ICItZGVidWdtc2cgK2FsbCIgd2lsbCB0dXJuCiAgICAgICAgYWxsIHRoZXNlIG1lc3NhZ2VzIG9uLCAiLWRlYnVnbXNnIC1kbGwiIHdpbGwgdHVybiBhbGwgbWVzc2FnZXMgCgljb25jZXJuaW5nIERMTHMgb2ZmLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGRlZCBzb21lIGhhbmRsaW5nIGZvciBjb21ibyBjb250cm9scyB3aXRoIG93bmVyZHJhdy1zdHlsZXMKICAgICAgICAoanVzdCBjcmVhdGluZyBhbmQgcGFzc2luZyB0aGUgbmVjZXNzYXJ5IG1lc3NhZ2VzIHRvIHRoZSAKCWNvcnJlc3BvbmRpbmcgbGlzdGJveCBjb250cm9sOyB0aGUgZWRpdC1jb250cm9sIG5lZWRzIHRvIGJlCglyZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBlbHNlKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCgkgIFt3aW5kb3dzL2RpYWxvZy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgdXNlIG9mIGdsb2JhbCBoZWFwIG1lbW9yeSBpbiBkaWFsb2dzIHdpdGggCgllZGl0IGNvbnRyb2xzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGl0ZW0gZGF0YS4KCUxpc3RCb3hJbnNlcnRTdHJpbmcoKTogRml4ZWQgYnVnIGZvciBlbGVtZW50cyB3aGljaCBhcmUgbm90IGluc2VydGVkCglhZnRlciB0aGUgY3VycmVudGx5IGxhc3QgZWxlbWVudC4KCQoJKiBbbWlzYy9kb3NfZnMuY10KCSAgW21pc2NlbXUvaW50MjEuY10KCURPU19WYWxpZERpcmVjdG9yeSgpOiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBpbiBmYWN0IHRoZQoJdmFsaWQgbmFtZSBvZiBhIGRpcmVjdG9yeS4KClNhdCBPY3QgMTUgMTc6MzU6MDAgUERUIDE5OTQJCTxtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdT4KCgkqIFtJbWFrZWZpbGVdCglnZW5lcmF0ZSB3aW5lLnN5bSBhZnRlciBjcmVhdGluZyB3aW5lCgoJKiBbZGVidWdnZXIvZGJnLnldCglsb2FkICJ3aW5lLnN5bSIgd2hlbiBlbnRlcmluZyBkZWJ1Z2dlcgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCXN5bWJvbGljIGJhY2t0cmFjZSBmb3IgMzItYml0IHN0YWNrLiBCcmVha3MgMTYtYml0IGJ0LgoKU3VuIFNlcCAgMjUgMTI6MDA6MDAgUERUIDE5OTQgICA8bWFydGluQG9zaXJpcy5jcy5jc3VmcmVzbm8uZWR1PgoKCSogW3JjL3JjLnldIFtyYy9yYy5oXSBbcmMvcmMubF0gW3JjL3dpbmVyYy5jXQoJRmlsZXMgY3JlYXRlZAoKU3VuIFNlcCAxOCAxMTowNDo0NSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW21pc2Mvc3B5LmNdCglFeGNsdWRlIGFuZCBJbmNsdWRlIG5vIGxvbmdlciByZXF1aXJlcyBhIHRlcm1pbmF0aW5nICc7JyB0bwoJcmVnaXN0ZXIgdGhlIGxhc3QgY29tcG9uZW50LgoKVGh1IFNlcCAxNSAyMzoxMDowOSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCVJld3JvdGUgbXVjaCBvZiBpdC4gIEFkZGVkIGNhcGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSB3aW5lLmluaQoJZmlsZS4gIENvbW1lbnRlZCBvdXQgdGhlIHByb2Nlc3NvciBlbXVsYXRvciBvcHRpb25zIHVudGlsIHRoYXQKCWJlY29tZXMgaW50ZXJlc3RpbmcuICBHaXZlcyBhIHdhcm5pbmcgaWYgaXQgc2VlcyBhbnkgKi5yZWoKCWZpbGVzLiAgSSBob3BlIEkgaGF2ZW4ndCBhc3N1bWVkIHRvIG11Y2ggYWJvdXQgdGhlIHNoZWxsL09TIHNvCgl0aGF0IGl0IGJyZWFrcyB1bmRlciAqQlNELgoKCSogW21pc2MvZG9zX2ZzLmNdCglSZW1vdmVkL2NoYW5nZWQgY2FsbHMgdG8gVG9Vbml4KCkgKHdoaWNoIGNhbGxzIHRvbG93ZXIoKSkgc28KCXRoYXQgdGhlIHBhcnQgb2YgdGhlIHBhdGhuYW1lIHdoaWNoIGNvcnJlc3BvbmQgd2l0aCB0aGUgZHJpdmUKCWxldHRlciBvbiBET1Mgbm8gbG9uZ2VyIHdpbGwgYmUgbWFwcGVkIHRvIGxvd2VyY2FzZS4gIFRoaXMKCW1lYW5zIHRoYXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUgdXBwZXJjYXNlIGxldHRlcnMgaW4KCXRoZSBbZHJpdmVzXSBzZWN0aW9uIG9mIHdpbmUuaW5pLgoKCSogW0xJQ0VOU0VdCglDb3NtZXRpYyBjaGFuZ2VzIHNvIHRoYXQgaXQgZGlzcGxheXMgYmV0dGVyIGluIHRoZSB3aW5kb3cgeW91CglnZXQgZnJvbSBwcmVzc2luZyAiQ3JlZGl0X0xpY2Vuc2UiIGluIHRoZSAiQWJvdXQgV0lORSIgd2luZG93LgoKU3VuIEF1ZyAyMSAyMToxMjowNiBNRVQgRFNUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUxvYWRNZW51KCkgbW92ZWQgdG8gbG9hZGVyL3Jlc291cmNlLmMuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBzdHViIGZvciBGaWxlQ0RSKCkuCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJQWRkZWQsIGZyb20gRXJpYydzIHBlLXRlc3QuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJQWRkZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlcy5jXQoJUmVtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW4gKlJlc291cmNlKCkgZnVuY3Rpb25zLgoJTW92ZWQgTkUtcHJvZ3JhbSBzcGVjaWZpYyBmdW5jdGlvbnMgaW50byBuZV9pbWFnZS5jLgoJTW92ZWQgTkUtZmlsZWZvcm1hdCBmdW5jdGlvbnMgdG8gbmVfcmVzb3VyY2UuYy4KCgkqIFtwZV9pbWFnZS5jXSBbcGVfcmVzb3VyY2UuY10KCUFkZGVkLiBOb3RoaW5nIGltcGxlbWVudGVkIHRvIHJ1biBQRS1leGVjdXRhYmxlcywgcmVzb3VyY2UKCWxvYWRpbmcgb25seS4KCgkqIFttaXNjL2ZpbGUuY10KCUNoYW5nZWQgT3BlbkZpbGUoKSB0byB1c2UgbWFjcm9zLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkZGVkIE5VTEwtcHRyIGNoZWNrcyB0byBTaGVsbEFib3V0KCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRml4ZWQgYSBmZXcgdHlwb3MuCgoJKiBbbWlzY2VtdS9rZXJuZWwuY10KCUFkZGVkIF9ESSA9IF9EUywgdG8gcHV0IHRoZSBjYWxsZXIncyBpbnN0YW5jZSBpbiBESS4gRG9lc24ndAoJd29yayBwcm9wZXJseSBpZiBjYWxsZXIgY2hhbmdlZCBEUyA6LSgKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAyNSAxNToyNDozNiBFRFQgMTk5NCAgICAgICAgICAgIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKICAgICAgICAqIFtpbmNsdWRlL3dpbi5oXQogICAgICAgIFJlbW92ZWQgc2VwZXJhdGUgWCB3aW5kb3cgZm9yIGljb24sIGFkZGVkIGljb24gd2lkdGgsaGVpZ2h0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ29tbWVudGVkIG91dCB0aGUgb2xkIFNXX3h4eCBlbXVtIGFuZCBhZGRlZCBkZWZpbmVzIHNpbmNlCgl0aGV5IGFyZW4ndCBlbnVtZXJhdGVkLgoKCSogW3dpbmRvd3MvZGNlLmNdCiAgICAgICAgUmVtb3ZlZCBzb21lIG9sZGVyIElzSWNvbmljIGNoZWNrcyBmcm9tIEdldERDRXgoKSwgZnVuY3Rpb25hbGl0eQogICAgICAgIGlzIG5vdyBpbiBub25jbGllbnQgYW5kIGdlbmVyaWMgd2luZSB3aW5kb3cgaGFuZGxpbmcgY29kZS4KICAgICAgICBMb3RzIG9mIHRoYW5rcyB0byBBbGV4YW5kcmUgSnVsbGlhcmQgYWxsIHRoZSBoaW50cyBhbmQKICAgICAgICBoZWxwLi4uCgogICAgICAgICogW3dpbmRvd3MvZGVmd25kLmNdCiAgICAgICAgUmVtb3ZlZCBjYWxsIHRvIE5DX0hhbmRsZU5DUGFpbnRJY29uKCkgdW5kZXIgY2FzZSBXTV9QQUlOVElDT04sCiAgICAgICAgV01fUEFJTlRJQ09OIG5vdyBjYWxscyBOQ19IYW5kbGVOQ1BhaW50LiAgCgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KCiAgICAgICAgKiBbd2luZG93cy9pY29uLmNdCiAgICAgICAgUmVtb3ZlZCBldmVyeXRoaW5nIGluIHRoaXMgZmlsZSBmb3Igbm93Li4uIGNvdWxkIGJlIHVzZWQgbGF0ZXIuCiAgICAgICAgSWNvbiBmdW5jdGlvbmFsaXR5IGlzIG5vdyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIHdpbmUgd2luZG93cwogICAgICAgIGhhbmRsaW5nIGZ1bmN0aW9ucy4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL21kaS5jXQogICAgICAgIEFkZGVkIGEgU2hvd1dpbmRvdyBpbiBNRElSZXN0b3JlQ2hpbGQoKS4gIE1ESSBjaGlsZCB3aW5kb3dzIG5vdwogICAgICAgIHNob3cgdXAgd2hlbiBkZWljb25pZmllZC4gIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBSZW1vdmVkIG9sZCBpY29uIHJvdXRpbmVzIGZyb20gaGFyZHdhcmVfZXZlbnQoKS4KCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KICAgICAgICBDaGFuZ2VkIE5DX0hhbmRsZU5DQ2FsY1NpemUoKSBzbyBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc2l6ZQogICAgICAgIG9mIGFuIGljb24gd2luZG93LiAgTWFkZSBOQ19JbnRlcm5hbE5DSGl0VGVzdCgpIG9uIGFuIEljb25pYwogICAgICAgIHdpbmRvdyBhbHdheXMgcmV0dXJuIEhUQ0FQVElPTi4gIE1hZGUgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrKCkKICAgICAgICBvbiBhbiBJY29uaWMgd2luZG93IGFsd2F5cyBzZW5kIGEgU0NfUkVTVE9SRSBtZXNzYWdlLgoKICAgICAgICAqIFt3aW5kb3dzL3BhaW50aW5nLmNdCiAgICAgICAgQ2hhbmdlZCBSZWRyYXdXaW5kb3coKSBzbyBpdCBkb2Vzbid0IHJlZHJhdyBhbiBpY29uaWMgd2luZG93CiAgICAgICAgdW5sZXNzIGl0IGhhcyB0byAobm8gaWNvbiBmb3IgdGhpcyBjbGFzcykuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy93aW4uY10KICAgICAgICBSZW1vdmVkIGNyZWF0aW9uIG9mIHNlcGVyYXRlIGljb24gd2luZG93IGZyb20gQ3JlYXRlV2luZG93RXgoKS4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL3dpbnBvcy5jXQogICAgICAgIEFkZGVkIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9mIHdpbmRvdyByZWN0YW5nbGUgZHVyaW5nCiAgICAgICAgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24gdG8gU2hvd1dpbmRvdygpLiAgQWRkZWQKCWZ1bmN0aW9ucyB0byByZWN1cnNpdmVseSBoaWRlIGFuZCBzaG93IGNoaWxkcmVuLi4uIGNhbGxlZAoJYnkgU2hvd1dpbmRvdyBkdXJpbmcgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24uCgpTYXQsIDI3IEF1ZyAxOTk0IDE4OjQ3OjM0ICswMTAwIChNRVQgRFNUKSAgbWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZSAoTWljaGFlbCBQYXRyYSkKCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgV2FpdE1lc3NhZ2UoKTogRml4ZWQgaGFuZGxpbmcgb2Ygd21fdGltZXItbWVzc2FnZXMKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpbmROZXh0RkNCKCk6IFJld3JpdHRlbiB0byBzdXBwb3J0IG90aGVyIGZ1bmN0aW9ucyB0aGFuIGp1c3QKICAgICAgICByZXR1cm5pbmcgdGhlIHZvbHVtZSBsYWJlbAoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4IGluIGhhbmRsaW5nIG9mIE9GX0NSRUFURQoKV2VkIEF1ZyAyNCAxOTo0MDo0MiBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIFNldFBhcmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgU2V0UGFyZW50LgoKRnJpIEF1ZyAxOSAxNjozNzowMCAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJTWFueSBjaGFuZ2VzIHRocm91Z2hvdXQgZmlsZSB0byBjb3JyZWN0IGhhbmRsaW5nIG9mIHNoYXJlZCBtZW1vcnkKCWZ1bmN0aW9uIHJldHVybiBjb2Rlcy4gRnJlZUJTRCBhbmQgU3VuT1Mgc2htIGZ1bmN0aW9ucyByZXR1cm4KCS0xIG5vdCAwIG9uIGVycm9yLiBJZiBMaW51eCBpcyBkaWZmZXJlbnQsIHRoZXNlIGNoYW5nZXMKCXdpbGwgaGF2ZSB0byBiZSBiYWNrZWQgb3V0LgoJQ2xlYW51cFNlbGVjdG9ycygpOiB0aGlzIGlzIGEgbmV3IChpbnRlcm5hbCkgY2FsbCB0byBmcmVlCgl1cCBhbGwgc2VsZWN0b3JzIChhbmQgc2htIGhhbmRsZXMvbWVtb3J5KSBmb3IgdXNlIG9uIGV4aXQuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0KCUNoYW5nZSBjb21tZW50IHRvIHJlZmxlY3QgbmV3IHVzZSBvZiBzaG1fa2V5CgoJKiBbbWlzYy9tYWluLmNdCgljYWxsZWRfYXRfZXhpdCgpOiBhZGQgY2FsbCB0byBDbGVhbnVwU2VsZWN0b3JzKCkKCk1vbiBBdWcgMjIgMTg6MTk6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJVXNlIE9CTV9DSEVDS0JPWEVTIHRvIGRyYXcgY2hlY2sgYm94ZXMgd2l0aCBjb3JyZWN0IGNvbG9ycy4KCUZpeGVkIGJ1ZyB3aXRoIFdNX1NFVFRFWFQgaGFuZGxpbmcuCglBIGZldyBkcmF3aW5nIG9wdGltaXNhdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW1wbGVtZW50ZWQgY29ycmVjdCBcdCBhbmQgXGEgaGFuZGxpbmcgaW4gbWVudSBpdGVtcy4KCUltcGxlbWVudGVkIGhlbHAgaXRlbXMgKGZsdXNoIHJpZ2h0KSBvbiBtZW51IGJhci4KCUFkZGVkIFdNX0VOVEVSTUVOVUxPT1AgYW5kIFdNX0VYSVRNRU5VTE9PUCBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIFNTX0lDT04gY29udHJvbHMgYW5kIGltcGxlbWVudGVkIFNUTV9TRVRJQ09OIG1lc3NhZ2UKCWhhbmRsaW5nLgoKCSogW2NvbnRyb2xzL3dpZGdldC5jXQoJU2V0IGN1cnNvciB0byBJRENfQVJST1cgZm9yIGJ1aWx0LWluIGNsYXNzZXMuCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10KCUJhY2tpbmcgc3RvcmUgaXMgbm93IG9mZiBieSBkZWZhdWx0LgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglVc2UgWCByZWdpb25zIGZvciByZWN0YW5nbGUgYW5kIHBvbHlnb24gcmVnaW9uczogKm1ham9yKiBzcGVlZAoJaW1wcm92ZW1lbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIHRoZSBmaXggZm9yIGludGVnZXIgaWRzIGluIGNvbnRyb2xzLiBTU19JQ09OIGNvbnRyb2xzIGluCglkaWFsb2dzIHNob3VsZCB3b3JrIG5vdy4KCUltcGxlbWVudGVkIERTX0FCU0FMSUdOIHN0eWxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJnbigpLgoJTmV3IGludGVybmFsIGZ1bmN0aW9uIEdSQVBIX0RyYXdCaXRtYXAoKSB0byBkcmF3IGJpdG1hcHMgZmFzdGVyCgl0aGFuIHdpdGggQ3JlYXRlQ29tcGF0aWJsZURDKCkgKyBCaXRCbHQoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURldGVybWluaW5nIHRoZSB3aW5kb3cgZm9yIGEgbW91c2UgbWVzc2FnZSBpcyBub3cgZG9uZSBhdAoJR2V0TWVzc2FnZSgpIHRpbWUuCglNb2RpZmllZCBQZWVrTWVzc2FnZSgpIGhhbmRsaW5nIHRvIGF2b2lkIG5lZWRsZXNzbHkgZmx1c2hpbmcgdGhlCglvdXRwdXQgcXVldWUuCgoJKiBbd2luZG93cy90aW1lci5jXQoJQ2hlY2sgZm9yIHJlc3RhcnQgb2YgYSB0aW1lciAoU2V0VGltZXIgY2FsbCB3aXRoIHRoZSBzYW1lIGh3bmQgYW5kCglpZCB0aGFuIGFuIGV4aXN0aW5nIHRpbWVyKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEF1ZyAgOSAyMzo1ODoyOSBNRVQgRFNUIDE5OTQJPGVyaWtAaGFja3RpYy5ubD4KCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IENvbXBsZXRseSByZXdyaXR0ZW4uCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJQ3JlYXRlRmlsZSgpOiBGaXhlZCB3cm9uZyBtb2RlIGluIGNhbGwgdG8gb3Blbi4KCU9wZW5FeGlzdGluZ0ZpbGUoKTogSW1wbGVtZW50ZWQgZmlsZSBzaGFyaW5nLgoJRmluZE5leHQoKTogRml4ZWQuCglDcmVhdGVOZXdGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgoJZkxvY2soKTogQWRkZWQgdG8gaGFuZGxlIHJlY29yZCBsb2NraW5nLgoJR2V0RmlsZUF0dHJpYnV0ZSgpOiBBZGRlZC4KCUFzIGEgcmVzdWx0LCBBSCA9IDB4NWMsIDB4MDksIGFuZCAweDBiIHdlcmUgY2hhbmdlZC4KCgkqIFttaXNjZW11L2ludDJmLmNdCglBSCA9IDB4MTA6IFNIQVJFIGluc3RhbGxhdGlvbiBjaGVjawogCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFjY2Vzc1Jlc291cmNlKCk6IEZpeGVkLiBBIG5ldyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZXR1cm5lZCBieQoJZXZlcnkgY2FsbCB0byBBY2Nlc3NSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJd3ZzcHJpbnRmKCk6IEZpeGVkLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpbmRNZW51SXRlbSgpOiBGaXhlZCAoaGFuZGxpbmcgZm9yIG5Qb3MgPT0gLTEgYWRkZWQpLgkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93RXgoKTogQWRkZWQgY2FsbCB0byBXSU5QT1NfR2V0TWluTWF4SW5mby4KCgkqIFtDb25maWd1cmVdCglBZGRlZCB0d28gb3B0aW9ucyBmb3IgYSBwcm9jZXNzb3IgZW11bGF0b3IgdGhhdCBtaWdodCBiZQoJcGx1Z2dlZCBpbiBsYXRlci4uCgoJKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0gW2lmMTYzMi90b29saGVscC5zcGVjXQoJQ3JlYXRlTmV3VGFzaygpIHN0b3JlcyByZWFsIG1vZHVsZW5hbWUgaW5zdGVhZCBvZiAnVEFTS3h4eHgnLgoJQWRkZWQgVGFza0ZpcnN0KCksIFRhc2tOZXh0KCksIFRhc2tGaW5kSGFuZGxlKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQWRkZWQgc3R1YiBmb3IgTWVtTWFuSW5mbygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgc3R1YiBmb3IgR2V0VGFiYmVkVGV4dEV4dCgpLgoKCSogW21pc2NlbXUvKl0KCUNoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXJzLiBQbGVhc2UgZG9uJ3QgYWNjZXNzCiAJdGhlIGNvbnRleHQgc3RydWN0dXJlLgoJZml4IGZvciBHZXRTeXN0ZW1UaW1lKCkgYnkgPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PiBhZGRlZC4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIGJ1ZyBpbiBBbnNpVXBwZXIoKSAmIEFuc2lMb3dlcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglidWdmaXggaW4gZ2V0c29ja29wdCgpL3NldHNvY2tvcHQoKTogd2luc29jayB1c2VzIGRpZmZlcmVudCB2YWx1ZXMKCXRoYW4gdW5peC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgRElCX1NldEltYWdlQml0c19STEVbNDhdIHRvIHN1cHBvcnQgY29tcHJlc3NlZCBiaXRtYXBzLgoKTW9uIEF1ZyAgOCAyMToxMjozMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgV01fQ09QWSwgV01fQ1VUIGFuZCBXTV9QQVNURSBtZXNzYWdlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10gW2luY2x1ZGUvZGlhbG9nLmhdCglNb2RpZmllZCBkaWFsb2cgY29kZSB0byBjcmVhdGUgbmV3IGhlYXAgZm9yIGVkaXQgY29udHJvbHMKCXVubGVzcyBEU19MT0NBTEVESVQgc3R5bGUgaXMgc2V0LgoKVGh1IEF1ZyAgNCAxODo1MDo1NiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9zdGF0aWMuY10KCVJlbW92ZWQgdW5uZWVkZWQgR2xvYmFsVW5sb2NrKCkgY2FsbHMuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9tZW51LmhdCglMb3RzIG9mIGNoYW5nZXMsIGZpeGVkIGEgbG90IG9mIG9sZCBidWdzIGFuZCBpbnRyb2R1Y2VkIGEgbG90IG9mCgluZXcgb25lcyA6LSkKCS0gQ2hhbmdlZCBtZXNzYWdlIGxvb3AgdG8gdXNlIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKS4KCS0gRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIG1haW4gd2luZG93IHRvIGxvc2UgYWN0aXZhdGlvbiB3aGVuCgkgIGRpc3BsYXlpbmcgYSBtZW51LgoJLSBDb3JyZWN0bHkgc2VuZCBpbml0aWFsaXNhdGlvbiBtZXNzYWdlcyAoV01fSU5JVE1FTlVQT1BVUCkuCgktIEltcGxlbWVudGVkIEVuZE1lbnUoKSBhbmQgTG9va3VwTWVudUhhbmRsZSgpLgoJLSBDaGFuZ2VkIGludGVybmFsIHN0cnVjdHVyZXMgdG8gYmUgYXMgY29tcGF0aWJsZSBhcyBwb3NzaWJsZSB3aXRoCgkgIE1TLVdpbmRvd3MuCgktIEFsbG9jYXRlZCBldmVyeXRoaW5nIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGhlYXAuCgktIFByZWZpeGVkIGFsbCBpbnRlcm5hbCBmdW5jdGlvbiBuYW1lcyB3aXRoIE1FTlVfIGFuZCBkZWNsYXJlZAoJICB0aGVtIHN0YXRpYy4KCS0gTW92ZWQgIkFib3V0IFdpbmUuLi4iIGhhbmRsaW5nIHRvIE5DX0hhbmRsZVN5c0NvbW1hbmQoKS4KCS0gTXVsdGktbGluZSBtZW51cyBzaG91bGQgbm93IHdvcmsgY29ycmVjdGx5LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgT0VNIGJpdG1hcHMgZGlyZWN0bHkgYXMgWCBiaXRtYXBzLgoKCSogW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUZpeGVkIEdldERDT3JnKCkgdG8gcmV0dXJuIHNjcmVlbiBjb29yZGluYXRlcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGRvdWJsZS1jbGljayBjaGVja3Mgd2hlbiB0aGUgbWVzc2FnZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZQoJcXVldWUuCglGaXhlZCBNU0dfR2V0SW50ZXJuYWxNZXNzYWdlKCkgdG8gc2VuZCBXTV9FTlRFUklETEUgbWVzc2FnZXMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXggaW4gc3lzdGVtIG1lbnUgaGl0LXRlc3QgY2FsY3VsYXRpb24uCglBIGZldyBjaGFuZ2VzIGZvciBuZXcgbWVudSBmdW5jdGlvbnMuCgpUaHUgQXVnIDExIDE3OjUxOjAyIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBCdWcgZml4IGluIEVkaXRfTkNDcmVhdGVNZXNzYWdlCiAgICAgICAgZXMtPnRleHRsZW4gd2FzIGJlaW5nIHVzZWQgYmVmb3JlIGJlaW5nIHNldAoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgQnVnIGZpeCBpbiBNRU5VX0RyYXdNZW51SXRlbQogICAgICAgIGRvbid0IHRyeSB0byB3cml0ZSB0ZXh0IGlmIE5VTEwgcG9pbnRlciBwYXNzZWQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAgNCAwNzoxODowMiAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXYWl0TWVzc2FnZSgpIChVU0VSLjExMikuCgogICAgICAgICogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBXYWl0TWVzc2FnZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJV01fRVJBU0VCS0dORDogQWRkZWQgc3VwcG9ydCBmb3IgaGJyQmFja2dyb3VuZD1DT0xPUl94eHguCgogICAJKiBbbWlzY2VtdS9pbnR7MTMsMjEsMmF9LmNdCiAgICAgICAgKiBbbWlzY2VtdS9JbWFrZWZpbGVdCgkqIFtzaWduYWwvbG9hZGVyLmNdCglBZGRlZCBhIGZldyBiYXNpYyBkaXNrIGluZm9ybWF0aW9uIGFuZCBkaWFnbm9zdGljIGZ1bmN0aW9ucyB0bwoJcHJldmVudCBwcm9ncmFtcyB1c2luZyB0aGlzIGZ1bmN0aW9uIGZyb20gY3Jhc2hpbmcuIEFsbCBkcml2ZXMKCWFyZSBjbGFpbWVkIHRvIGJlIHJlbW90ZSBvbmVzLCBzbyBkaXJlY3QgSS9PIGlzbid0IGFsbG93ZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9Xcml0ZVRleHQoKTogQWRkZWQgY29kZSB0byBjb3JyZWN0bHkgZXJhc2UgdGhlIHJlbWFpbmluZyBzcGFjZQoJb2YgdGhlIGVkaXQtY29udHJvbCBpZiB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCBoYXMgY2hhbmdlZCBzaW5jZWQgaXQncwoJY3JlYXRpb24uCgpUdWUgSnVsIDI2IDIyOjA1OjU0IE1FVCBEU1QgMTk5NCBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9tb3VzZS5zcGVjXQoJQWRkZWQgbW91c2UuZGxsIGVudHJ5LCBubyBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIEFjY2Vzc1Jlc291cmNlKCkuIAoKCSogW21pc2Mva2V5Ym9hcmQuY10sIGFkZGVkIFtpbmNsdWRlL2tleWJvYXJkLmhdCglDaGFuZ2VkIGZ1bmN0aW9ucyB0byByZXR1cm4gbW9yZSB1c2VmdWwgdmFsdWVzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglIYWNrZWQgRElBTE9HX0dldENvbnRyb2woKSB0byBzdXBwb3J0IHJlc291cmNlcyB3aGljaAoJaGF2ZSAweGZmMDAgLSAweGZmZmYgYXMgaWQuICoqIE5lZWRzIHRvIGJlIGRvbmUgcHJvcGVybHkgYnkKCXNvbWVvbmUgd2hvIGtub3dzIHRoZSBORSBmaWxlZm9ybWF0ICoqCgpKdWwgMjksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGQgbmV3IHN0dWIgZm9yIEVuYWJsZUhHYXJkd2FyZUlucHV0KCkgZnVuY3Rpb24uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGQgY29kaW5nIGZvciBIV05EX0JST0FEQ0FTVCBpbiBQb3N0TWVzc2FnZSgpLgoKCSogW21pc2MvZmlsZS5jXQoJQWRkIGNvZGluZyBmb3IgT3BlbkZpbGUoKSBhbHNvIHNlYXJjaCBpbiBXaW5kb3dQYXRocy4KCgkqIFttaXNjL21tc3lzdGVtLmNdCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21tYXV4LmNdCgkqIFttaXNjL21jaWNkYS5jXQoJQ2hhbmdlICNpbmNsdWRlICJsaW51eC9zb3VuZGNhcmQuaCIgYnkgI2luY2x1ZGUgInN5cy9zb3VuZGNhcmQuaCIKCUFkZCBjb2RpbmcgaW4gTU1JTyBmdW5jdGlvbnMuIE5vdywgbW1pb0Rlc2NlbmQoKSBjYW4gZmluZCBXQVYgY2h1bmtzLgoJU25kUGxheVNvdW5kICYgTUNJX0VMRU1FTlQgbm93IHVzZSBNTUlPIGFuZCBhZGp1c3QgdG8gcHJvcGVyIGZvcm1hdHMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1bCAxOCAyMzo1NToxMyBNRVQgRFNUIDE5OTQKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoKTogYWRkZWQgYG1vdiAlZWF4LCVlZHgnIGp1c3QgYmVmb3JlIGxjYWxsLAoJdG8gbWFrZSBzdXJlIHRoYXQgRFggY29udGFpbiB0aGUgRExMJ3MgaGluc3RhbmNlIHdoZW4KCWluaXRpYWxpc2VkLgoKCUNhbGxUbzMyXzE2KCkgYWRkZWQsIGVxdWFsIHRvIENhbGxUbzMyKCkgZXhjZXB0IGZvcgoJb25lIHRoaW5nOiBpdCBzYXZlcyBEWCBhbmQgCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHNvbWUgY29kZSB0byBzdXBwb3J0IDE2IGFuZCAzMiBiaXQgcmV0dXJuIHZhbHVlcy4KCgkqIFsxNjMyL3trZXJuZWwsdXNlcn0uc3BlY10KCUNoYW5nZWQgbW9zdCBvZiB0aGUgYHBhc2NhbCcgc3R5bGUgdG8gcGFzY2FsXzE2IHdoZW4KCWZ1bmN0aW9uIHJldHVybmVkIGEgMTZiaXQgdmFsdWUuCgpUdWUgSnVsIDE5IDE4OjQwOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9tZW51LmNdCglSZW9yZ2FuaXplZCBzaXppbmcgYW5kIGRyYXdpbmcgY29kZSB0byBpbXBsZW1lbnQgbXVsdGktbGluZSBtZW51cy4KCUltcGxlbWVudGVkIE1FTlVCUkVBSyBzdHlsZS4KCVVzZSBzeXN0ZW0gY29sb3JzIHRvIGRyYXcgbWVudXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQnVnIGZpeCBpbiBDT0xPUl9Jc1NvbGlkKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglCdWcgZml4IGluIEZPTlRfR2V0TWV0cmljcygpOiBjYWxjdWxhdGUgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGgKCW9ubHkgb24gZXhpc3RpbmcgY2hhcnMgKGRpYWxvZ3MgbG9vayBtdWNoIGJldHRlcikuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4IGluIERyYXdUZXh0KCk6IHVzZSB0ZXh0IGNvbG9yIHRvIHVuZGVybGluZSBtbmVtb25pYy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBXTV9OQ0hJVFRFU1QgaGFuZGxpbmcgdG8gY29wZSB3aXRoIG11bHRpLWxpbmUgbWVudSBiYXJzLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHN5c3RlbSBvYmplY3RzIGZvciBtZW51IGNvbG9ycy4KCk1vbiBKdWwgMTggMTk6MzI6MDggUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgRml4ZWQgYnVnIGluIFNlbGVjdFByZXZJdGVtIHRoYXQgY2F1c2VkIHNlcGVyYXRvcnMgdG8gbm90IGJlCglza2lwcGVkIHdoZW4gdXNpbmcgdGhlIHVwIGFycm93IGtleS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEp1bCAxNCAxNzo1MDo0NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0KCUF1dG9kZXRlY3RzIExpbnV4IHZlcnNpb24gKGlmIHJ1bm5pbmcgTGludXgpLgoKCSogW2xvYWRlci9zaWduYWwuY10KCU5ldyBzaWduYWxzIGZvciBMaW51eC4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglOZXcgc3RydWN0dXJlIGZpZWxkIGluIHN5cyBjYWxsLgoKU3VuIEp1bCAxMCAxOTozMTozNCAxOTk0ICBPbGFmIEZsZWJiZSAgKG9sYWZAZHJhZ29uKQoKICAgICAgICAqIFtsb2FkL3Jlc291cmNlLmNdIAogICAgICAgICAgZml4ZWQgTWVtb3J5IChSZXNvdXJjZSkgTGVhay4KCiAgICAgICAgKiBbbG9hZC9tYWluLmNdIAogICAgICAgICAgZml4ZWQgYSBwcmludGYuCgpUdWUgSnVsIDEyIDE4OjUwOjM0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdhbGxwYXBlciAob25seSAxNiBjb2xvcnMgZm9yIG5vdykuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVByZWxpbWluYXJ5IHdvcmsgdG8gYWxsb3cgbXVsdGktbGluZSBtZW51cy4KCgkqIFttaXNjL21haW4uY10KCU5vIGJhY2tpbmcgc3RvcmUgb24gZGVza3RvcCB3aW5kb3cgKG5vdCB1c2VmdWwpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQSBmZXcgZml4ZXMgdG8gRHJhd1RleHQoKSB0byBtYWtlIHVuZGVybGluZXMgdW5kZXIgbW5lbW9uaWMKCWxldHRlcnMgdG8gbG9vayBiZXR0ZXIuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTW9yZSBmaXhlcyB0byBHUkFQSF9EcmF3QXJjKCksIGFuZCBzb21lIGZpeGVzIHRvIFBvbHlnb24oKS4KCUltcGxlbWVudGVkIFBvbHlQb2x5Z29uKCkgKHBhcnRpYWxseSB3b3JraW5nKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTmV3IGZ1bmN0aW9uIFdJTlBPU19TZW5kTkNDYWxjU2l6ZSgpLgoJQ2xlYW5lZCB1cCBTZXRXaW5kb3dQb3MoKSBhbmQgYWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IKCW11bHRpLWxpbmUgbWVudXMuCgpNb24gSnVsIDExIDE5OjE1OjUxIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQ2hhbmdlcyB0byB3b3JrIGFzIGEgbGlicmFyeS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10gCglJZmRlZmVkIG1vZHVsZS4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUNoYW5nZXMgdG8gYWxsb3cgbGlua2luZyB3aXRoIFdpbmVMaWIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtYWNybyBXSU5FTElCX1VOSU1QCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIsIEdldFByb2NBZGRyZXNzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCgoJKiBbbG9hZGVyL21haW4uY10KCUFkZGVkIGVtcHR5IEluaXRETEwgd2hlbiB1c2luZyBXaW5lTGliLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJU29tZSBwYXJ0cyBvZiB0aGUgbG9hZGVyIGFyZSBuZWVkZWQgZm9yIFdpbmVMaWIsIGlmZGVmZWQgY29ycmVjdGx5CgoJKiBbbWlzYy97YXVkaW8uYyxtY2ljZGEuYyxtbWF1eC5jLG1tc3lzdGVtLmNdCglEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIG1vZHVsZSB3aGVuIGNvbXBpbGluZyBXaW5lTGliLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJRml4ZWQgc21hbGwgYnVnLiAgV2hlbiBwYXNzZWQgYW4gaW52YWxpZCBoYW5kbGUgV2luZUxpYiB3b3VsZAoJY3Jhc2gsIG5vdyByZXR1cm4gTlVMTC4KCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUNhbGwgQ3JlYXRlTmV3VGFzayBpbiBfV2luTWFpbi4KClN1biBKdWwgMTAgMDk6MDg6MDIgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldC5jXQoJTW9yZSBjaGFuZ2VzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIFdpbmRvd3MnIGVkaXQKCWNvbnRyb2wuICBGaW5pc2hlZCBvZmYgdGFiIHN0b3Agc3VwcG9ydC4KCk1vbiBKdWwgMTEgMjE6MDU6MDIgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9yZWxheS5jXQoJIyBvZiBvcmRpbmFscyBpbiBzaGVsbC5kbGwgY2hhbmdlZCB0byAxMDMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJc3RpLCBjbGkgd2lsbCBub3cgYmUgaWdub3JlZC4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglBZGRlZCBzdHViIGZvciBHZXRTeXNDb2xvckJydXNoKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biwgMyBKdWwgMTk5NCAyMDoxNTo1NiArMDEwMCAoQlNUKSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUJ1ZyBmaXhlcyBhbmQgdGlkeWluZyB1cC4gIFByZWxpbWluYXJ5IHRhYiBzdG9wIHN1cHBvcnQKCShkb2Vzbid0IHdvcmsgeWV0KS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJUmV2ZXJzZWQgb3JkZXIgb2YgYnV0dG9ucyBpbiBDaGVja1JhZGlvQnV0dG9ucyBzbyB0aGF0IGFsbAoJYnV0dG9ucyBhcmUgbm93IGRpc3BsYXllZC4KClR1ZSBKdWwgIDUgMTg6MzA6MjQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBub3NhdmV1bmRlcnMgb3B0aW9uLCByZXBsYWNlZCBieSBoYW5kbGluZwoJdGhlIENTX1NBVkVCSVRTIGZsYWcuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgdGhlIGZpeCBmb3IgbmVnYXRpdmUgc2l6ZSBpbiBjbGFzcyBleHRyYSBieXRlcyB0bwoJYXZvaWQgbW9kaWZ5aW5nIHRoZSBjYWxsZXIncyBkYXRhLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXg6IHN5c3RlbSBmb250IG11c3QgYmUgYSBwcm9wb3J0aW9uYWwgZm9udC4KCUZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBkZWZhdWx0IHBlbiB0byBub3QgYmUgc2VsZWN0ZWQKCWNvcnJlY3RseSBpbiBhIERDLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gR1JBUEhfRHJhd0FyYygpLiBUaGFua3MgdG8gQWRyaWFubyBBemV2ZWRvIGZvcgoJbm90aWNpbmcgaXQuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJUmVtb3ZlZCBpbmNvcnJlY3Qgc2VsZWN0aW5nIG9mIGRlZmF1bHQgb2JqZWN0cyBpbiBCZWdpblBhaW50KCkKCShubyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIGZpeCBpbiBkYy5jKS4KCkp1bCA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJKiBbbWlzYy9hdWRpby5jXQoJQWRkIG1vcmUgY29kZSB0byBpbnRlcmZhY2UgJy9kZXYvZHNwJy4KCgkqIE5ldyBmaWxlIFttaXNjL21jaWNkYS5jXQoJQ3JlYXRlIGFuIE1DSV9ERVZUWVBFX0NEX0FVRElPIGRyaXZlciBjb25uZWN0ZWQgdG8gJy9kZXYvc2JwY2QnLgoKCSogTmV3IGZpbGUgW21pc2MvbW1hdXguY10KCVN0dWJzIHRvIG1ha2UgYSBmdXR1cmUgZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9taXhlcicuCgoJKiBbd2luZG93cy93aW4uY10KCVRlbXBvcmFyeSBwYXRjaCB0byBDcmVhdGVXaW5kb3dFeCgpIGZvciByZXNldGluZyBuZWdhdGl2ZQoJY29vcmRpbmF0ZXMgdG8gMCwwIDsgYmVjYXVzZSAnc291bmRyZWMuZXhlJyBnaXZlIG5lZ2F0aXZlIHZhbHVlcwoJYW5kIEkgbmVlZCBpdCB0byB3b3JrIG9uIE1NU1lTVEVNIC4uLiA6LSkKCgkqIFttaXNjZW11L2ludDJmLmNdCglhZGQgYSBzdHViICdkb19pbnQyZl8xNicgKGZ1bmN0aW9uIDB4MTYpIGZvciBETVBJIHNlcnZlci4KCk1vbiBKdW4gMjAgMTA6MDg6NDAgQlNUIDE5OTQgIFdpbGxpYW0gU21pdGggKHdvc0BkY3Mud2Fyd2ljay5hYy51aykKCgkqIGluY2x1ZGUvY29tbS5oCglOZXcgZmlsZSAtLSBzb21lIGRlZmluaXRpb25zIHRoYXQgd2VyZSBpbiBjb21tLmMgbm93IG5lZWQgdG8KCWJlIHNoYXJlZCB3aXRoIG1pc2MvZG9zX2ZzLmMKCgkqIG1pc2MvY29tbS5jCglTb21lIGRlZmluaXRpb25zIG1vdmVkIGludG8gaW5jbHVkZS9jb21tLmgKCgkqIG1pc2MvZG9zX2ZzLmMgKERPU19HZXRFcXVpcG1lbnQpOgoJRml4ZWQgZXJyb3IgaW4gZXF1aXBtZW50IC0tIGJpdHdpc2Ugb3Igb2YgdHdvIHZhbHVlcyBzaG91bGQKCWJlIHVzZWQgaW5zdGVhZCBvZiBsb2dpY2FsIG9yLiAgQWxzbyBhZGRlZCBjb2RlIHRvIGNvcnJlY3RseQoJcmVwb3J0IHRoZSBudW1iZXIgb2Ygc2VyaWFsIGFuZCBwYXJhbGxlbCBkZXZpY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVuIDIwIDE0OjI2OjQxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUFsbG93IG5lZ2F0aXZlIGJpdG1hcCBzaXplcy4KClN1biBKdW4gMTkgMTI6MDA6MDQgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgSW1wcm92ZWQgc2VsZWN0aW9uIGRpc3BsYXkuICBBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05ULAogICAgICAgIEVNX1JFUExBQ0VTRUwsIEVNX0xJTkVMRU5HVEgsIEVNX1VORE8sIEVNX0VNUFRZVU5ET0JVRkZFUiwKICAgICAgICBFTV9HRVRIQU5ETEUsIEVNX1NFVEhBTkRMRSBtZXNzYWdlcy4gIFRleHQgYnVmZmVyIG5vdyBzdG9yZWQgb24gCiAgICAgICAgYXBwbGljYXRpb24ncyBsb2NhbCBoZWFwLgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQ29ycmVjdGVkIGJ1ZyBpbiBSZWN0YW5nbGUoKS4gIFhGaWxsUmVjdGFuZ2xlIGhhcyB0aGUgc2FtZQogICAgICAgIHdpZHRoIGFzIFJlY3RhbmdsZSwgYnV0IFhEcmF3UmVjdGFuZ2xlIGlzIG9uZSBwaXhlbCB3aWRlcgogICAgICAgIGZvciB0aGUgc2FtZSBjby1vcmRpbmF0ZXMuCgogICAgICAgICogW21lbW9yeS9oZWFwLmNdIFtpbmNsdWRlL2hlYXAuaF0KICAgICAgICBBZGRlZCBIRUFQX0xvY2FsU2l6ZSBmdW5jdGlvbi4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9rZXlib2FyZC5jXQogICAgICAgIEltcHJvdmVtZW50cyB0byBLZXlTdGF0ZVRhYmxlIGFuZCBhZGRpdGlvbiBvZiBBc3luY0tleVN0YXRlVGFibGUuCiAgICAgICAgQWRkZWQgc3VwcG9ydGluZyBjb2RlIHRvIEdldEtleVN0YXRlIGFuZCBHZXRBc3luY0tleVN0YXRlIGFuZAogICAgICAgIG1lcmdlZCBtb3VzZSBidXR0b24gc3RhdGVzIGludG8gR2V0S2V5Ym9hcmRTdGF0ZS4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtpbmNsdWRlL2FjY2VsLmhdCiAgICAgICAgQWRkZWQgcmVjb2duaXRpb24gb2YgU0hJRlQsIENPTlRST0wgYW5kIEFMVCBrZXlzIHRvCiAgICAgICAgVHJhbnNsYXRlQWNjZWxlcmF0b3IuCgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBBIGJpdCBtb3JlIG1ldGFmaWxlIHN1cHBvcnQuCgpTdW4gSnVuIDE5IDE3OjI5OjAwIE1FVCBEU1QgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgU2l6ZW9mUmVzb3VyY2UoKSBhbmQgQWxsb2NSZXNvdXJjZSgpIGFkZGVkLCBBY2Nlc3NSZXNvdXJjZSgpIHVwZGF0ZWQuCgogICAgICAgICogW2lmMTYzMi9rZXJuZWwuc3BlY10KICAgICAgICBGcmVlTGlicmFyeSgpIHVzZWQgZm9yIEZyZWVNb2R1bGUoKS4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIFJlY3RhbmdsZSgpOiBzd2FwIGxlZnQgJiByaWdodCBjb3JuZXJzIHdoZW4gcmlnaHQgPCBsZWZ0LAogICAgICAgIHN3YXAgdG9wICYgYm90dG9tIHdoZW4gYm90dG9uIDwgdG9wLgoKSnVuIDE5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeCBidWcgaW4gd2luZG93IHN0eWxlIG9mIHRoZSBhc3NvY2lhdGVkIGxpc3Rib3guCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2tpcCBzZXBhcmF0b3JzIGluIGtleWJvYXJkIG5hdmlnYXRpb24gYnkgdXNpbmcgbmV3IGludGVybmFsIAoJCWZ1bmN0aW9ucyBTZWxlY3RQcmV2SXRlbSgpICYgU2VsZWN0TmV4dEl0ZW0oKSwKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUJ1ZyBmaXggaW4gR2V0UHJpdmF0ZVByb2ZpbGVJbnQoKSwgd2FzIGxpbWl0ZWQgdG8gNCBkaWdpdCwKCQlJbnRCdWYgbXVzdCBiZSBhbGxvYyB0byAoNSsxKT02LiBjaGFyIGluc3RlYWQgb2YgNS4KCgkqIFttaXNjL21haW4uY10KCVB1dCBjb2RlIGluIGZ1bmN0aW9ucyBTZXRFbnZpcm9ubWVudCgpICYgR2V0RW52aXJvbm1lbnQoKS4KCgkqIFttaXNjL3NoZWxsLmNdCglTdGFydCBwdXR0aW5nIHNvbWUgY29kZSBpbiBFeHRyYWN0SWNvbigpIGZ1bmN0aW9uLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCVNvbWUgY29kZSBmb3IgTU1UaW1lciBmdW5jdGlvbnMgJiB0aW1lcnMgbGlzdC4KCgkqIFttaXNjZW11L2ludDMxLmNdCglGZXcgc3R1YnMgZm9yIERQTUkgaW50ZXJydXB0IGNhbGxzLiBOb3RoaW5nIHdvcmsgeWV0LgoKTW9uIEp1biAyMCAwNzozNzo0MyBFRFQgMTk5NAlKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCgoJKiBpbmNsdWRlL3dpbi5oICh0YWdXTkQpOgoJQWRkZWQgaWNvbiBmaWVsZHMgaWNvbiwgaEljb24gYW5kIHJlY3RDbGllbnRTYXZlIHRvIAoJdGhlIHRhZ1dORCBzdHJ1Y3QuCgoJKiB3aW5kb3dzL0ltYWtlZmlsZQoJQWRkZWQgaWNvbi5jIHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGNvbXBpbGUKCgkqIHdpbmRvd3MvZGNlLmMgKEdldERDRXgpOgoJQWRkZWQgc29tZSBjaGVja3MgZm9yIGljb25pYyBtb2RlIGFuZCBwYXNzIGljb24gd2luZG93IGFzIGRyYXdhYmxlLAoJbm90IHRoZSByZWFsIHdpbmRvdy4KCgkqIHdpbmRvd3MvZGVmd25kLmMgKERlZldpbmRvd1Byb2MpCglBZGRlZCBQQUlOVElDT04gZGVmYXVsdCB3aW5kb3dzIHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZXZlbnQuYyAoRVZFTlRfRXhwb3NlKQoJQWRkZWQgY2hlY2sgZm9yIGljb25pYyB3aW5kb3cgZXhwb3NlLiBJZiBpY29uaWMgd2luZG93IGlzIGV4cG9zZWQKCXNlbmQgYSBXTV9QQUlOVElDT04gbWVzc2FnZQoKCSogd2luZG93cy9pY29uLmMgCglOZXcgZmlsZS4gIElDT05fSWNvbmlmeSwgSUNPTl9maW5kSWNvbkZyb21Qb2ludCwgSUNPTl9EZWljb25pZnkuCgoJKiB3aW5kb3dzL21kaS5jIChEZWZNRElDaGlsZFByb2MpCglUZXN0IGZvciBJc0ljb25pYyBkdXJpbmcgYSBTQ19SRVNUT1JFLCB0aGlzIGRvZXNuJ3Qgd29yayB5ZXQuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYyAoaGFyZHdhcmVfZXZlbnQpCglMb29rcyBmb3IgaWNvbiBhcyB3ZWxsIGFzIHdpbmRvdyBub3cuCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jIChOQ19IYW5kbGVTeXNDb21tYW5kLCBOQ19Eb05DUGFpbnRJY29uKQoJQWRkZWQgaWNvbmlmeS9kZWljb25pZnkgaW4gTkNfSGFuZGxlU3lzQ29tbWFuZCwgbmV3IGZ1bmN0aW9uCglOQ19Eb05DUGFpbnRJY29uIHdoaWNoIHBhaW50cyBhbiBpY29uLgoKCSogd2luZG93cy9wYWludGluZy5jIChCZWdpblBhaW50KQoJTWFkZSBhIEJlZ2luUGFpbnQgc2VsZWN0IHRoZSBTVE9DS19CTEFDS19QRU4sIFNUT0NLX1dISVRFX0JSVVNILAoJYW5kIFNUT0NLX1NZU1RFTV9GT05UIG9iamVjdHMgc2luY2UgdGhpcyBpcyAoaG9wZWZ1bGx5KSBkZWZhdWx0Cgl3aW5kb3dzIGJlaGF2aW9yLgoKCSogd2luZG93cy93aW4uaCAoQ3JlYXRlV2luZG93RXgpCglTZXQgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhIHdpbmRvdyB0byBiZSB3aGl0ZS4KCUNyZWF0ZSBpY29uIHdpbmRvdywgdHVybiBvZmYgTUlOSU1JWkUgaWYgaXQgaXMgb24sIHNpbmNlCglJIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0IGFzIG9mIHlldC4uLiByZWdpc3RlcgoJdGhlIGljb24gd2l0aCB0aGUgaHduZCBvZiBpdHMgd2luZG93IHNvIHdlIGNhbiBpZGVudGlmeSB3aGVyZQoJaWNvbiBtZXNzYWdlcyBhcmUgY29taW5nIGZyb20uCgpNb24gSnVuIDIwIDEwOjE1OjU5IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiB3aW5kb3dzL2V2ZW50LmM6IEFkZGVkIGEgaGFjayB0byBkZWZpbmUgWFBvaW50ZXIgd2hlbiB1c2luZwoJWDExUjQuIAoKCSogdG9vbGtpdC9oZWxsby5jOiBUZXN0IGFwcGxpY2F0aW9uIGZvciBXaW5lTGliLiBUbyBjb21waWxlIHlvdSdsbAoJbmVlZDogZ2NjIC1JaW5jbHVkZSAtRFdJTkVMSUIgLWcgaGVsbG8uYyAtYywgYW5kIHRvIGxpbmsgeW91J2xsCgluZWVkOiBnY2MgaGVsbG8ubyBsaWJ3aW5lLmEgLWxYMTEgLUwvdXNyL29wZW53aW4vbGliIC1sbSAKCgkqIHRvb2xraXQvaGVhcC5jOiBFeHRlbmRlZCB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgc2l6ZSBwZXIgY2h1bmsuCgoJKiBtaXNjL3N0cmVzcy5jIChHZXRGcmVlRmlsZUhhbmRsZXMpOiBGaXhlZCB0eXBvLgoKCSogbWlzYy9tYWluLmMgKG1haW4pOiBDaGFuZ2VzIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLiAKCgkqIGxvYWRlci9saWJyYXJ5LmM6IENoYW5nZWQgc29tZSBpZmRlZnMgdG8gY29tcGlsZSBXaW5lTGliLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuIDE0IDA4OjA5OjE0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvc2VsZWN0b3IuYyAoR2V0Q3VycmVudFBEQik6IAoJQWRkZWQgdHJpdmlhbCBmdW5jdGlvbiBHZXRDdXJyZW50UERCKCkgd2hpY2ggcmV0dXJucyB0aGUgcHJvZ3JhbQoJc2VnbWVudCBwcmVmaXggc2VsZWN0b3IuCgoJKiBtZW1vcnkvaGVhcC5jIChIRUFQX0ZyZWUpOiAKCUlmIGZyZWUgbGlzdCBpcyBlbXB0eSwgbWFrZSB0aGUgZnJlZWQgYmxvY2sgdGhlIGZyZWUgbGlzdC4KCkZyaSBKdW4gMTAgMDc6NTY6NDkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL2VkaXQuYyAoRURJVF9TZXRUZXh0TXNnKTogCglEbyBub3QgYXBwZW5kIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUuCgoJKiB3aW5kb3dzL2V2ZW50LmMgKFNldENhcHR1cmUpOiAKCVNldCB3aW5IYXNDdXJzb3IgaWYgbW91c2UgY2FwdHVyZSBzdWNjZWVkcy4KCkp1biAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCBidWcgaW4gbGlzdGJveCA6IEluc2VydFN0cmluZyBzaG91bGQgY2FsbCBBZGRTdHJpbmcgaWYgLTEuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uIEdldE1lbnVTdGF0ZSgpLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVRyeSB0byBtYWtlIFNob3dTY3JvbGxCYXIoKSByZWNhbGMgTkNfIHJlZ2lvbnMuIE5vdCBmaW5pc2hlZCAhCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGQgU3R1YiBmb3IgVGFiYmVkVGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gR2V0S2V5Qm9hcmRTdGF0ZSgpIHdpdGggYW4gS2V5U3RhdGVUYWJsZSBhcnJheQoJCSYgYXNzb2NpYXRlZCBoYW5kbGluZyBpbiBmdW5jdGlvbiBFVkVOVF9rZXkoKS4KCk1vbiBKdW4gMTMgMTY6NDU6MjQgTUVUIERTVCAxOTk0IChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBJc01lbnUoKSBhZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2xpYnJhcnkuY10KICAgICAgICBNb2R1bGVGaXJzdCgpLCBNb2R1bGVOZXh0KCksIE1vZHVsZUZpbmROYW1lKCksIE1vZHVsZUZpbmRIYW5kbGUoKQogICAgICAgIGFkZGVkLgoKICAgICAgICAqIFtvYmplY3QvZ2Rpb2JqLmNdCiAgICAgICAgSXNHRElPYmplY3QoKSBhZGRlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyWzU2XS5jXQogICAgICAgIGJ1Z2ZpeDogYm90aCBkaWRuJ3QgbGVhdmUgZmxhZ3MgcHVzaGVkIG9uIDE2Yml0LXN0YWNrLgogICAgICAgICh3aW5maWxlIGdldHMgYSBiaXQgZnVydGhlcikKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQxNi5jXQogICAgICAgIEFkZGVkIChlbXB0eSkuCgpTYXQgSnVuIDExIDIyOjU2OjQ4IDE5OTQgSm9uIFRvbWJzIChqb25AZXNpeDIudXMuZXMpCgkqIHdpbmRvd3MvZXZlbnQuYzoKCUFkZGVkIGNvZGUgdG8gZHJvcCByZWR1bmRhbnQgbW90aW9uIEV2ZW50cyBpbiB0aGUgWEV2ZW50IHF1ZXVlLgoKVGh1IEp1biAgOSAxMDo1NTo1NSBNRVQgRFNUIDE5OTQgIEpvY2hlbiBIZWluICggSGVpbkBTdHVkZW50LlRVLUNsYXVzdGhhbC5kZSApCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmMgaW5jbHVkZS90ZXh0cy5oXQoJUmVtb3ZlZCB0aGUgdGV4dC1jb25zdGFudHMgZnJvbSBtZXNzYWdlLmMgaW50byB2YXJpYWJsZXMKCXdoaWNoIG1heSBiZSBjaGFuZ2VkIGZyb20gWC1yZXNvdXJjZXMuCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmNdCglhZGRlZCA8bG9jYWxlLmg+IGFuZCBzZXRsb2NhbGUoKSB0byBtYWluLmMsIHVzZWQgdG91cHBlcigpIGluIG1lc3NhZ2UuYwoKTW9uLCAxMyBKdW4gOTQgMDk6NDE6MTYgLTA1MDAgUGF1bCBCcmFtZWwgPHBhdWxickBjb21tLm1vdC5jb20+CgogICAgICAgICogY29udHJvbHMvYnV0dG9uLmMgKCBbQ1JdQl9MQnV0dG9uKiApIAogICAgICAgIGxlZnQgcmMucmlnaHQgYXQgZnVsbCB3aW5kb3cgd2lkdGggc28gY2xpY2sgb24gbGFiZWwgYWxzbyAKICAgICAgICBhY3RpdmF0ZXMgdGhlIGNvbnRyb2wgKE1TV2luIGJlaGF2aW9yKQoKU2F0IEp1biAxMSAxOTowNTo0MCAxOTk0ICBPbGFmIEZsZWJiZSAgKGZsZWJiZUB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgogICAgICAgICogaW5jbHVkZS93aW5kb3dzLmg6CiAgICAgICAgICBmdW5jdGlvbnMgcG9pbnRlcnMgY2FuIG5vdCBiZSBwYWNrZWQuCiAgICAgICAgICAoYW5ub3lpbmcgd2FybmluZ3Mgd2l0aCBmb3J0aGNvbW1pbmcgZ2NjLTIuNi54KQogICAgICAgIAogICAgICAgICogbG9hZGVyL21haW4uYyAoSW5pdERMTCk6IAogICAgICAgICAgRml4ZWQgYSBwcmludGYgc3RhdGVtZW50LiAoZm9yIGNvbnRyb2wuZXhlKSAKCiAgICAgICAgICAoSW5pdGlhbGl6ZUxvYWRlZERMTHMpOiAKICAgICAgICAgIGRlbGV0ZWQgc2hhZG93IGRlZmluaXRpb24gb2YgICp3cG50LgogICAgICAgICAgKEJyZWFrcyBtYW55IHByb2dyYW1zLCBiZWNhdXNlIG5vdyBDT01NRExHIHdpbGwgYmUKICAgICAgICAgICBpbml0aWFsaXplZCA6LSgKCiAgICAgICAgKiB3aW5kb3dzL3dpbi5jIChTZXRXaW5kb3dUZXh0KTogCiAgICAgICAgICBhZGRlZCBtaXNzaW5nIGJyZWFrczsgKFBFTlNBVEUgc3RhcnRzKSAKCiAgICAgICAgKiB3aW5kb3dzL2dyYXBoaWNzLmMgKEZsb29kRmlsbCk6IAogICAgICAgICAgUHJvcGVyIGJvdW5kYXJ5cy4gKEJBTkdCQU5HIHN0YXJ0cykgRmxvb2RGaWxlX3JlYyBzaG91bGQKICAgICAgICAgIGJlIHJld3JpdHRlbi4KCiAgICAgICAgKiBvYmplY3RzL2ZvbnQuYyAoRk9OVF9HZXRNZXRyaWNzKTogCiAgICAgICAgICBUWVBPOiB1c2UgZm9udC0+cGVyY2hhciBvbmx5IGlmIGl0IGlzIGRlZmluZWQuIChXUklURSBzdGFydHMpCgpTdW4gSnVuZSAxMiwgUGV0ZXIgQnJvYWRodXJzdCAocGJyQHVhLm53bC5hYy51aykKICAgICAgICBjb250cm9scy9zY3JvbGwuYzoKICAgICAgICBGaXhlcyBmb3IgaW1wcm92ZWQgYmVoYXZpb3VyIHdoZW4gZHJhZ2dpbmcgdGh1bWI7CiAgICAgICAgQWRkZWQgU0JfVEhVTUJQT1NJVElPTiBtZXNzYWdlIHdoZW4gdGh1bWIgaXMgcmVsZWFzZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gIDcgMDg6NDE6MjcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci9zZWxlY3Rvci5jIChGaXh1cEZ1bmN0aW9uUHJvbG9ncyk6IAoJTmV3IGZ1bmN0aW9uIHRvIGZpeHVwIGxvYWRlZCBETEwgZnVuY3Rpb24gcHJvbG9ncy4gIEl0IHJlcGxhY2VzIHRoZQoJZG8gbm90aGluZyBjb2RlIHdpdGggY29kZSB0aGF0IGxvYWRzIERTIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGEKCXNlZ21lbnQgZm9yIHRoZSBETEwuCgoJKiBtaXNjL2N1cnNvci5jIChMb2FkQ3Vyc29yKTogCglEaXNhYmxlZCBjdXJzb3IgbG9hZGluZyBmcm9tIC5FWEUgb3IgLkRMTC4gIFRoZSBjb2RlIG5lZWRzIHRvIGhhbmRsZQoJdGhlIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIGN1cnNvcnMgaW4gYSBzaW5nbGUgZGlyZWN0b3J5LiAgQWxzbywKCWl0IHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIGN1cnNvciBpcyB0aGUgcmlnaHQgc2l6ZS4KCgkqIG9iamVjdHMvZm9udC5jIChFbnVtRm9udHMpOiAKCUNoZWNrZWQgZm9yIGxwTG9nRm9udExpc3RbaV0gPT0gTlVMTAoKCSogb2JqZWN0cy9nZGlvYmouYyAoU2V0T2JqZWN0T3duZXIpOiAKCVJlbW92ZWQgc3R1Yi4gIFJlcGxhY2VkIHdpdGggc2ltcGxlIHJldHVybiBpbiBnZGkuc3BlYy4gIFRoaXMKCWZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgcmV0YWlsIHZlcnNpb24gb2YgV2luZG93cy4KCgkqIG1lbW9yeS9oZWFwLmMgKFdJTjE2X0xvY2FsSGFuZGxlRGVsdGEpOiAKCU5ldyBmdW5jdGlvbi4gIFRoaXMgaXMgcmVhbGx5IGEgZHVtbXkgdGhhdCBpbWl0YXRlcyB0aGUgcHJvcGVyCglyZXR1cm4gdmFsdWVzLgoKCSogbG9hZGVyL2xpYnJhcnkuYyAoR2V0UHJvY0FkZHJlc3MpOiAKCUZpeGVkIGRlZmluaXRpb24gb2YgSVNfQlVJTFRJTl9ETEwoKSBtYWNyby4KCk1vbiBKdW4gIDYgMTg6MTU6NDAgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2NlbXUvaW50MjEuYyAoU2Vla0ZpbGUpOiAKCU5lZWRlZCB0byByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpbiBEWDpBWC4KCgkqIHdpbmRvd3MvdXRpbGl0eS5jICh3aW5kb3dzX3dzcHJpbnRmKTogCglBZGRlZCBzdXBwb3J0IGZvciAnIycgaW4gZm9ybWF0LCBhbmQgZml4ZWQgYnVnIHdpdGggInB0ciIgYmVpbmcKCWluY3JlbWVudGVkIHRvbyBtYW55IHRpbWVzLgoKCSogbWlzY2VtdS9pbnQyMS5jIChPcGVuRXhpc3RpbmdGaWxlKTogCglBZGQgY29kZSB0byBoYW5kbGUgb3BlbmluZyBmaWxlcyByZWFkLW9ubHkgYW5kIHdyaXRlLW9ubHkuCgoJKiBsb2FkZXIvd2luZS5jOgoJU2VnbWVudCBmaXh1cHMgbm93IGRvbmUgaW4gTG9hZEltYWdlIGluc3RlYWQgb2YgX1dpbk1haW4uICBUaGlzCglpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBMb2FkTGlicmFyeSgpLgoKU3VuIEp1biAgNSAxNzozNDoyNCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKCSogW2xvYWRlci8qXQoJCS0gZml4ZWQ6IEdldE1vZHVsZUhhbmRsZSgpIHNvbWV0aW1lcyByZXR1cm5lZAoJCSAgYSB3cm9uZyBoYW5kbGUuCgkJLSBkb24ndCBpbml0IGRsbHMgd2hlbiBjcyA9PSAwIChsemV4cGFuZCwgZG9lc24ndAoJCSAgc2VlbSB0byBoYXZlIGEgaW5pdCBmdW5jdGlvbikKCQktIExvYWRMaWJyYXJ5ICYgTG9hZEltYWdlIG5vdyByZXR1cm4gZXJyb3IgaW5zdGVhZAoJCSAgb2Ygc3RvcHBpbmcgd2luZS4KCQktIG1vdmVkIG1vc3Qgb2YgTkUtZnVuY3Rpb25zIGludG8gb25lIGZpbGUuCgkJLSBMb2FkTGlicmFyeSgpIHVzZXMgd19maWxlcyBsaXN0IGluc3RlYWQgb2YgaXRzCgkJICBvd24gbGlzdC4KCQktIE5FIGV4ZWN0YWJsZXMgYXJlIG5vdyBmaXhlZC11cCBhbmQgaW5pdGlhbGlzZWQgd2hlbgoJCSAgbG9hZGVkIGluc3RlYWQgb2Ygb25seSBvbmNlIGJlZm9yZSBjYWxsaW5nIEluaXRUYXNrLgoKCSogW21pc2NlbXUvaW50MTUuY10gW21pc2NlbXUvaW50MzEuY10KCUFkZGVkLgkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVN0dWJzIGFkZGVkIGZvciB7R2V0fFNldH1TZWxlY3RvckxpbWl0KCksIHtHZXR8U2V0fVNlbGVjdG9yQmFzZSgpLgoKCSogW21pc2MvbWFpbi5jXQoJU3R1YiBhZGRlZCBmb3IgSXNSb21Nb2R1bGUoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglTb21lIGNsZWFudXAsIGFkZGVkIGhlYXAgZm9yIHJldHVybmluZyBkYXRhLgoKSnVuIDYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlIE1BWF9PUkRJTkFMUwlkZWZpbmUgdG8gaGlnaGVyIHZhbHVlLCAxMjk5IGVudHJpZXMuCgkoTU1TWVNURU0gZG9lc24ndCBoYXZlIHN1Y2Nlc2l2ZSBudW1iZXJzLCBzb21lIGFyZSBhcm91bmQgMTIwMCkuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglCdWcgZml4IGluIHdpbmRvd3Nfd3NwcmludGYoKSwgKHR3aWNlIGluY3JlbWVudHMgLi4uKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgcmVkcmF3IHdhcyBkb25lIGlmIGZsYWcKCQl3YXMgc2V0IHRvIFNXUF9OT1JFRFJBVyB3aGlsZSBTV1BfU0hPV1dJTkRPVykuCgoJKiBbbWlzYy9tZXNzYWdlLmNdIFtjb250cm9scy9jb21iby5jXQoJQWRkIGFuIEludmFsaWRhdGVSZWN0KCkgaW4gV01fU0hPV1dJTkRPVyB0byBzdGF0aXNmeSB0aGUgbmV3ICdzYXZldW5kZXInLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBkbyBTZXRNZW51KCkgY2FsbHMgYWZ0ZXIgd2luZG93IGNyZWF0aW9uLAoJCWp1c3QgYmVmb3JlIHNlbmRpbmcgdG8gV01fTkNDQUxDU0laRS4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbiBmdW5jdGlvbiBTZXRNZW51KCksIG5vdyB1c2UgU2V0V2luZG93UG9zKCkgd2l0aCAKCQlmbGFncyBTV1BfRlJBTUVDSEFOR0VEIHRvIHJlYWRqdXN0IG1lbnUgYXJlYS4KCUZ1bmN0aW9uIE1lbnVCYXJDYWxjU2l6ZSgpIHJlZG9uZS4KClN1biBNYXkgMjkgMTE6MDg6MjQgMTk5NCAgRGF2aWQgQi4gVGhvbWFzICAoZHRAeWVudGEuYWJxLm5tLnVzKQoKICAgICAgICAqIFtvYmplY3RzL3RleHQuY10KICAgICAgICBGaXhlZCBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggRFRfV09SREJSRUFLIGZsYWcuICBTdHJpbmcgbGVuZ3RoCiAgICAgICAgd2FzIG5vdCBiZWluZyBwcm9wZXJseSBkZWNyZW1lbnRlZCB3aGVuIGxpbmVzIHdlcmUgZm9sZGVkLCBhbmQKICAgICAgICB3cmFwcGluZyB3YXMgbm90IHBlcmZvcm1lZCB3aGVuIERUX05PQ0xJUCBhbmQgRFRfTk9QUkVGSVggd2VyZQogICAgICAgIGJvdGggb24gaW4gYWRkaXRpb24gdG8gRFRfV09SREJSRUFLLiAgV2luZG93cyBkb2VzIHdyYXBwaW5nIGluCiAgICAgICAgdGhpcyBjYXNlLCBhbmQgbm93IHNvIGRvZXMgd2luZS4KClN1biBKdW4gIDUgMTk6MTc6NDkgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKCiAgICAgICAgKiBbZWRpdC5jXQogICAgICAgIGNwMSB3YXMgdW5pbml0aWFsaXplZCBpZmYgbGluZW5vID09IDAKCiAgICAgICAgKiAgRmluZEZpbGUgdGVzdHMgZm9yIGV4aXN0YW5jZSBvZiBmaWxlIGV2ZW4gaWYgYSBmdWxsCiAgICAgICAgICAgZmlsZW5hbWUgd2FzIHN1cHBsaWVkLiBXaGF0IGFib3V0IHVuaXggZmlsZSBuYW1lcz8KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveCBdCiAgICAgICAgd25kUHRyIHdhcyB1bmluaXRpYWxpemVkIGZvciBMQl9TRVRUT1BJTkRFWAoKICAgICAgICAqIFttaXNjL3Byb3BlcnR5LmNdICAgICAKICAgICAgICBEbyBub3QgZnJlZSBscFByb3AuIElzIGl0IHJlYWxseSBhbGxvY2F0ZWQgYnkgbWFsbG9jPwoJe2VkaXRlZCBieSBCb2IgQW1zdGFkdDogY2hhbmdlZCBmcmVlKCkgdG8gR2xvYmFsRnJlZSgpfQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWF5IDI4IDEyOjAzOjIzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKCU9wZW5FeGlzdGluZ0ZpbGUgbmVlZGVkIHRvIHJldHVybiBoYW5kbGUgaW4gQVggcmVnaXN0ZXIgaW5zdGVhZAoJb2YgdGhlIEJYIHJlZ2lzdGVyLgoKCSogbWlzY2VtdS9pbnQyMS5jIChpb2N0bEdldERldmljZUluZm8pOiAKCUFkZGVkIGEgbGl0dGxlIGNvZGUgdG8gZ2l2ZSBhIGZha2UgcmVzdWx0IGZvciBub3JtYWwgZmlsZXMuCgpXZWQgTWF5IDI1IDIxOjU1OjM4IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJcmV0dXJuIHZhbHVlIGZyb20gR2xvYmFsU2l6ZSB3YXMgY29tcGxldGVseSB3cm9uZy4KCgkqIFttaXNjZW11L2ludDIxLmhdCglmaXhlZCBidWcgaW4gRmluZEZpcnN0LiAgRGlyZWN0b3J5IHBvaW50ZXIgKGRwKSB3YXMgbm90IHBsYWNlZCBpbgoJZHRhIGNvcnJlY3RseS4KCgkqIFt0b29scy9idWlsZC5jXQoJZml4ZWQgY3JlYXRpb24gb2YgcG9wLmggdG8gZ3VhcmFudGVlIHRoYXQgZmxhZ3MgYXJlIHJlc3RvcmVkIGNvcnJlY3RseS4KCgkqIFttaXNjL2NvbW0uY10KCWNoYW5nZWQgYWxsIG9jY3VyYW5jZSBvZiBzdHJuY21wKCkgdG8gc3RybmNhc2VjbXAoKS4KCUJ1aWxkQ29tbURDQigpIHNob3VsZCBub3QgcmVxdWlyZSB0aGF0IE9wZW5Db21tKCkgYmUgY2FsbGVkIGZpcnN0LgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSGVhcCBpbml0aWFsaXplZCB0byBzaXplIG9mIGZ1bGwgc2VnbWVudCBsZXNzIHN0YWNrIHNpemUgYW5kIAoJYXV0b21hdGljIGRhdGEgc2l6ZS4KClNhdCBNYXkgMjggMDk6MTQ6MzMgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ29ycmVjdCB0eXBvcyBpbiBMaXN0Qm94UmVzZXRDb250ZW50IHdoZXJlIGxwbHMgdmFyaWFibGUgaXMKCXVzZWQgd2hlcmUgbHNsczIgdmFyaWFibGUgaXMgbWVhbnQuICBEb24ndCBjYWxsIFVTRVJfSEVBUF9GUkVFCgl0d2ljZSBvbiB0aGUgc2FtZSBoYW5kbGUgaWYgaERhdGEgYW5kIGhNZW0gYXJlIHRoZSBzYW1lLgoKCSogW2RlYnVnZ2VyL29wY29kZXMvaTM4Ni1kaXMuY10KCUFkZCBuZXcgbmFtZSBhcnJheSBuYW1lc19ybXcgZm9yIHRhYmxlIGRyaXZlbiBkZWNvZGluZyBvZiB0aGUKCTE2LWJpdCBtb2Qvcm0gZmllbGQuICBPbWl0IGxhcmdlIGNhc2Ugc3RhdGVtZW50IGluIE9QX0UgYW5kCglyZXBsYWNlIHdpdGggYXJyYXkgcmVmZXJlbmNlIHRvIG1hdGNoIGV4aXN0aW5nIGNvZGluZyBzdHlsZS4KCUFkZCBuZXcgc3RhdGljIHZhcmlhYmxlIG1hY2hpbmUgd2l0aCB2YWx1ZSAyODYgb3IgMzg2IHRvCgljb3JyZWN0bHkgZGVjb2RlIG1vZC9ybSBmaWVsZCBpbiBlaXRoZXIgMTYgb3IgMzIgYml0IG1vZGVzLgoJU2V0IGl0IGluIHByaW50X2luc25faXsyLDN9ODYuICBJbiBPUF9FIHVzZSBpdCB0byBkZWNpZGUgaG93Cgl0byBkZWNvZGUgbW9kL3JtLiAgV2hpbGUgdGhlIGNvZGUgd2FzIGNvcnJlY3QgZm9yIDE2IGJpdCBjb2RlLAoJaXQgd2FzIGltcHJvcGVybHkgZGVjb2RpbmcgbW9kL3JtIGZpZWxkcyBvbiB3b3JkIHByZWZpeGVkCgkzMiBiaXQgaW5zdHJ1Y3Rpb25zLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglSZWNvZ25pemUgbmV3IHRva2VuIEFCT1JULiAgIFJlY29nbml6ZSBzaW5nbGUgbGV0dGVycyAncCcKCWFuZCAncScgYXMgdG9rZW5zLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQWRkIG5ldyB0b2tlbiBBQk9SVC4gIEFsbG93IHByaW50IGNvbW1hbmQgdG8gYmUgaW52b2tlZCBieQoJJ3AnIGFuZCBxdWl0IGNvbW1hbmQgYnkgJ3EnLCBhbGEgR0RCLiAgQ2hhbmdlIGxvdHMgb2YgJ307JwoJdG8ganVzdCAnfScuICBBZGQgc3RhdGljIGR1bW15X3JlZ3MgdG8gd2luZV9kZWJ1ZyBzbyB0aGF0Cgl3aW5lX2RlYnVnKDAsIE5VTEwpIGRvZXNuJ3QgY29yZSBkdW1wIHdpdGggcW1hZ2ljLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUNvcnJlY3Qgc3ludGF4IG9mIGJyZWFrIGNvbW1hbmQgaW4gaGVscHRleHQgYW5kIG9taXQgZm9ybWVyCgljb21tZW50IGFib3V0IHByb2JhYmxlIGJ1Z2dpbmVzcyBvZiB0aGUgZGlzYXNzZW1ibHkgc2luY2UgaXQKCWlzIG5vdyBjb3JyZWN0LiAgQ2hhbmdlIGZwcmludGYgb2YgZmlyc3QgYmFja3RyYWNlIHN0YWNrCglmcmFtZSB0byBtYXRjaCB0aGF0IG9mIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgZnJhbWVzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ2hhbmdlIGNvbnN0cnVjdGlvbiBvZiBjb21tYW5kIGxpbmUgaW4gQ3JlYXRlUFNQIGZyb20gY3JlYXRpbmcKCWEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSAiYXJnMSBhcmcyIFxyIiB0byAiYXJnMSBhcmcyIi4gIEEgRE9TCglQU1AgY29tbWFuZCBsaW5lIGxvb2tzIGxpa2UgIiBhcmcxIGFyZzJcciIgd2l0aCB0aGUgbGVuZ3RoIG5vdAoJaW5jbHVkaW5nIHRoZSB0cmFpbGluZyAiXHIiIGJ1dCB0aGF0IGlzIG5vdCBob3cgV2luZG93cyBkb2VzIGl0LgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglDaGFuZ2UgdXNlcyBvZiAlcyB0byBwcmludCBzdHJpbmdzIGluIEdldE1vZHVsZUhhbmRsZSB0byAleCBzbwoJdGhhdCBzdHJpbmcgSURzIGRvbid0IGNhdXNlIGEgY29yZSBkdW1wIHdpdGggcW1hZ2ljLiAgSGFuZGxlCgljb252ZXJ0aW5nIGEgc3RyaW5nIGlkIHRvIGEgbGl0ZXJhbCBtb2R1bGUgaGFuZGxlLiAgRm9yCglleGFtcGxlLCBHZXRNb2R1bGVIYW5kbGUoKExQU1RSKSAweDU3KSBub3cgcmV0dXJucyAweDU3IGlmCglpdCBpcyBhIHJlYWwgbW9kdWxlIGhhbmRsZS4KCgkqIFttaXNjL21lc3NhZ2UuY10KCUluIE1lc3NhZ2VCb3gsIHRyYW5zbGF0ZSBhIE5VTEwgdGl0bGUgYXJndW1lbnQgdG8gdGhlIHN0cmluZyAiRXJyb3IiLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJSW4gR2V0U2V0UHJvZmlsZSB0cmFuc2xhdGUgYSBOVUxMIERlZmF1bHQgYXJndW1lbnQgdG8gIiIuICBBbnkKCWNhbGxlciB3aG9zZSBEZWZhdWx0IGFyZ3VtZW50IGlzIE5VTEwgaXMgYnVnZ3ksIGJ1dCBDSEFSTUFQIGRvZXMgaXQKCWFueXdheS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZCBOVUxMIHBvaW50ZXIgY2hlY2tzIGluIEVudW1Gb250RmFtaWxpZXMgdG8gcHJldmVudCBjb3JlIGR1bXBzLgoKU2F0IE1heSAyOCAyMDowMTo1MSAxOTk0IEpvbiBUb21icyAoam9uQGd0ZXgwMi51cy5lcykgCgoJKiBOZXcgb3B0aW9ucy9yZXNvdXJzZXMgbm9zYXZldW5kZXJzIGFuZCBub2JhY2tpbmdzdG9yZS4gIEJ5IAoJZGVmYXVsdCBiYWNraW5nc3RvcmUgYW5kIHNhdmV1bmRlcnMgYXJlIG5vdyBlbmFibGVkLCB0aGVzZSB1c2UgCgltb3JlIG1lbW9yeSBidXQgYXZvaWRzIHRob3NlIHNsb3cgKHNvbWV0aW1lcyBtdWx0aXBsZSkgcmVkcmF3cyAKCWNhdXNlZCBiZSBleHBvc3VyZSBldmVudHMuCgpNYXkgMzAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL2RyaXZlci5jXSBOZXcgZmlsZQoJU2tlbGV0b24gZm9yICdJbnN0YWxsYWJsZSBXaW5lIERyaXZlcnMnIGZ1bmN0aW9ucy4gOi0pCgkqIFttaXNjL2F1ZGlvLmNdIE5ldyBmaWxlCglTa2VsZXRvbiBmb3IgYmFzaWMgJ0F1ZGlvIERyaXZlcicgZnVuY3Rpb25zLgoJKiBbbWlzYy9uZXR3b3JrLmNdIE5ldyBmaWxlCglTdHVicyBmb3IgZmV3IG5ldHdvcmtpbmcgZnVuY3Rpb25zLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCU1vcmUgY29kaW5nIC4uLiBhIGR1c3QgaW4gYSBnYWxheHkgLi4uCgkqIFttaXNjL3NoZWxsLmNdCglTb21lIGNvZGluZyBmb3IgJ1JlZ1hYWCcgZnVuY3Rpb25zIC4uLiBhIGR1c3QgaW4gdGhlIHdpbmQgLi4uCgoJKiBbbWlzYy9wcm9maWxlLmNdCglCdWcgZml4IGluIEdldFNldFByb2ZpbGUoKSwgYmFkIGVudW1lcmF0aW9uIGlmIEtleU5hbWUgPT0gTlVMTC4KCgkqIFtvYmplY3RzL2dkaS5jXQoJTmV3IGZ1bmN0aW9uIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwKCksIGl0IGp1c3QgY2FsbGluZyAKCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoKSBmb3Igbm93LiBJdCdzIGdldCAnY2xvY2suZXhlJyBydW5uaW5nICEgOi0pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCU5ldyBmb250IG1lbWJlciBhc3NpZ25lZCB0byBTWVNURU1fRk9OVCBhcyBkZWZhdWx0LgoJQWRkZWQgcHJvY2Vzc2luZyBmb3IgV01fU0VURk9OVCBtZXNzYWdlOwoKClR1ZSBNYXkgMzEgMjA6MzQ6MjUgRURUIDE5OTQgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQogICAgICAgIEFkZGVkIEFzeW5jTW91c2VCdXR0b25zU3RhdGVzIGFycmF5IGZvciBHZXRBc3luY0tleVN0YXRlLgoKICAgICAgICAqIFt3aW5kb3dzL2tleWJvYXJkLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgYmVnaW5uaW5nIG9mIEdldEFzeW5jS2V5U3RhdGUuCgpXZWQgTWF5IDI1IDIzOjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXQogICAgICAgICAgW3dpbmRvd3MvbWFwcGluZy5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdCiAgICAgICAgRnVydGhlciBtZXRhZmlsZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWF5IDIzIDE1OjA3OjM2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBbGxvY2F0ZSBoZWFwIGFuZCBzdGFjayBzZWdtZW50cyBhcyA2NGsuCgpTYXQgTWF5IDIxIDAxOjE1OjQ5IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICBDb3JyZWN0IHR5cG9zIHdoZXJlIG1lbWNweSBpcyB1c2VkIGluc3RlYWQgb2YgbWVtc2V0LgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBBbGxvdyBmb3IgbGVnaXRpbWF0ZSBjYXNlcyB3aGVyZSBiaVNpemVJbWFnZSBpcyAwIGluIExvYWRJY29uCiAgICAgICAgYnkgY2FsY3VsYXRpbmcgdGhlIHZhbHVlIHdoZW4gdGhlIGJpdG1hcCBpcyBub3QgY29tcHJlc3NlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpeCBOVUxMIGRlcmVmZXJlbmNlIGNhdXNlZCBieSBzdXBlcmZsdW91cyBET1NfY2xvc2VkaXIgaW4gRmluZE5leHQuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIE5ldyBmdW5jdGlvbiB0eXBlX21hdGNoIHRvIGhhbmRsZSBzdHJpbmcgcmVzb3VyY2UgdHlwZXMgYXMKICAgICAgICB3ZWxsIGFzIElEcy4gIEluIGFkZGl0aW9uLCBjb21wYXJlIG9ubHkgbG93IDQgYml0cyBvZiB0eXBlX2lkCiAgICAgICAgd2hlbiBib3RoIG51bWJlcnMgYXJlIElEcyBzbyB0aGF0IDB4MDAwMiBtYXRjaGVzIDB4ODAwMi4KICAgICAgICBJbiBGaW5kUmVzb3VyY2VCeU51bWJlciBhbmQgRmluZFJlc291cmNlQnlOYW1lIHVzZSB0eXBlX21hdGNoCiAgICAgICAgaW5zdGVhZCBvZiBjb21wYXJpbmcgbnVtYmVycy4gIEluIEZpbmRSZXNvdXJjZSBoYW5kbGUgdGhlCiAgICAgICAgIiNudW1iZXIiIHN5bnRheCBhbmQgZW1wdHkgc3RyaW5ncyBpbiBib3RoIHRoZSByZXNvdXJjZSBhbmQKICAgICAgICB0eXBlIG5hbWVzLgoKTW9uIE1heSAyMyAwMDo0ODoyNSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KICAgICAgICBGaXggaW5hZHZlcnRlbnQgcHJpbnRpbmcgb2Ygc3RyaW5nIElEcyBhcyBzdHJpbmdzLgoKTWF5IDIzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9ucyBHZXRNZW51SXRlbUNvdW50KCksIEdldE1lbnVJdGVtSUQoKS4KCQlHZXRNZW51U3RyaW5nKCkgJiBIaWxpdGVNZW51SXRlbSgpLgoJQnVnIGZpeCBpbiBDaGVja01lbnVJdGVtKCkuCglGdW5jdGlvbiBTZXRNZW51KCkgbm93IG1ha2UgY2xpZW50IGFyZWEgcmVjYWxjIGlmIG1lbnUgcmVtb3ZlZC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgbm8gbW9yZSBYTWFwcGluZyBvciBYQ29uZmlndXJpbmcJb2YKCQl3aW5kb3dzIHdpdGggaW5pdGlhbCB3aWR0aCBvciBoZWlnaHQgZXF1YWwgemVyby4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJTmV3IGZ1bmN0aW9uIEVudW1PYmplY3RzKCksIHVzaW5nIG5ldyBscFBlbkJydXNoTGlzdCBidWlsZHVwCgkJZnJvbSBjYWxscyB0byBuZXcgZnVuY3Rpb24gR0RJX0FwcGVuZFRvUGVuQnJ1c2hMaXN0KCkuCgkJKCdwYnJ1c2guZXhlJyBkb24ndCBzaG93IGl0cyBmYWNlIHlldCAhIC4uLiA6LSggKQoJTmV3IEVNUFRZIFNUVUIgZm9yIGZ1bmN0aW9uIFNldE9iamVjdE93bmVyKCksCgkJKCdtcGxheWVyLmV4ZScgY2FsbCBpdCB2aWEgR2V0UHJvY0FkZHJlc3MoKSAuLi4pCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgaW50ZXJuYWwgZnVuY3Rpb25zIFBhcnNlRm9udFBhcm1zKCkgJiBJbml0Rm9udHNMaXN0KCkuCglFbnVtRm9udHMoKSAmIEVudW1Gb250RmFtaWxpZXMoKSBlbnVtZXJhdGVzIGZvbnRzIChubyBtb3JlIGR1bW1pZXMpLgoJRk9OVF9NYXRjaEZvbnQgbm93IG1ha2UgcmV0cmllcyB0byBmaW5kIGNsb3Nlc3Qtc21hbGxlc3QgZm9udC4KCQkoJ2NoYXJtYXAuZXhlJyBjYW4gbm93IHNob3cgdGhlIGRpZmZlcmVudHMgZm9udHMgYXZhaWxhYmxlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2Ugc21hbGwgZG9zIE9CTV9PTERfQ0xPU0UgYnV0dG9uIGZvciBNREkgd2luZG93cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJU3RhcnQgdG8gcmVtb3ZlIG9ic29sZXRlIGdsb2JhbHMgc3VjaCBYVF9zY3JlZW4gLi4uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU1ha2UgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSB3b3JraW5nIGFsc28gd2l0aCBidWlsdGluIERMTHMuCgpUdWUgTWF5IDI0IDIwOjE4OjAyIDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2lmMTYzMi9zeXN0ZW0uc3BlY10gW2lmMTYzMi90b29saGVscC5zcGVjXQogICAgICAgIHN5c3RlbS5kbGwgJiB0b29saGVscC5kbGwgYWRkZWQuCgogICAgICAgICogW2xvYWRlci9saWJyYXJ5LmNdCiAgICAgICAgTW9kaWZpZWQgR2V0TW9kdWxlRmlsZU5hbWUoKSB0byByZXR1cm4gdGhlIGZ1bGwKICAgICAgICBmaWxlbmFtZS4KICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIExvYWRMaWJyYXJ5KCkgdG8gcHJldmVudCBsb2FkaW5nCiAgICAgICAgYnVpbHQgaW4gZGxscy4gKGVnLiB1c2VyLmV4ZSkKICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIEZyZWVMaWJyYXJ5KCkgdG8gcHJldmVudCBidWlsdC1pbgogICAgICAgIGRsbHMgZnJvbSBiZWluZyBmcmVlZC4KICAgICAgICBNb2RpZmllZCBHZXRQcm9jQWRkcmVzcygpIHRvIHN1cHBvcnQgYnVpbHRpbiBkbGxzLgoKICAgICAgICAqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2ludDJmLmNdCiAgICAgICAgQWRkZWQgPT4gcGlmZWRpdCBydW5zLgoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEFkZGVkIGEgTlVMTC1wdHIgY2hlY2sgdG8gRE9TX2Nsb3NlZGlyKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMTcgMjM6MDM6MTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL2RjZS5jXQoJRml4ZWQgYnVnIHdpdGggZGNlIGluaXRpYWxpemF0aW9uIHRoYXQgd2FzIGNhdXNpbmcgZGlhbG9nIGJveGVzIHRvIG5vdAoJYmUgZGlzcGxheWVkLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQmV0dGVyIGZpeCBmb3IgYnVnIGZvdW5kIGJ5IE1hcnRpbi4KClNhdCBNYXkgMTQgMTk6NDg6MzkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogWyBtZW1vcnkvaGVhcC5jIF0KICAgICAgICBSZWRpcmVjdCBIRUFQX1JlQWxsb2MgY2FsbHMgd2l0aCBOVUxMIGFyZ3VtZW50IHRvIEhFQVBfQWxsb2MuCgpNYXkgMTYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCU1ha2UgRW51bUZvbnRzKCkgY2FsbGluZyBhIGNhbGxiYWNrIHdpdGggZHVtbXkgZm9udHMgLi4uIDotKQoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkIEVtcHR5IFN0dWIgZm9yIEV4dFRleHRPdXQoKSwgd2hpY2ggdGVtcG9yYXJlbHkgY2FsbCBUZXh0b3V0KCkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglUZW1wb3JhcmVseSBnbyBhcm91bmQgYnVnIGluIENhbGxXaW5kb3dQcm9jKCksIHlvdSB3aWxsIHNlZSBwcmludGZzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCU1ha2UgRURJVCBjb250cm9scyBmb2N1c2VkIGJ5IGEgbW91c2UgY2xpY2suCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJQnVnIEZpeCBpbiBmdW5jdGlvbiBFbnVtUHJvcHMoKSwgYmV0dGVyIHVzZSBvZiBDYWxsQmFjazE2KCkuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJQmFzaWMgU2tlbHRvbidzIGZvciBNQ0kgbWVzc2FnZXMgZGlzcGF0Y2hpbmcgZnVuY3Rpb24uCgpTdW4gTWF5IDE1IDE2OjE1OjE3IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW3dpbmRvd3MvdXRpbGl0eS5jXQogICAgICAgIEFkZGVkIHdpbmRvd3Nfd3NwcmludGYoKSBmb3IgdGhlIGVtdWxhdG9yLCB3c3ByaW50ZigpIGlzCiAgICAgICAgZm9yIGxpYndpbmUuCgpTYXQgTWF5IDE0IDIyOjE2OjQwIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFttaXNjL2N1cnNvci5jXQogICAgICAgIEZpeCBwb2ludGVyIHByb2JsZW1zIGluIExvYWRDdXJzb3IgbGVhZGluZyB0byBoZWFwIGNvcnJ1cHRpb24uCgogICAgICAgICogIFsgY29udHJvbHMvbWVudS5jIF0KICAgICAgICBGaXggdHdvIE5VTEwgZGVyZWZlcmVuY2luZyBidWdzLgoKU3VuIE1heSAxNSAyMDowNzo0OCAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbb2JqZWN0cy9mb250LmNdCiAgICAgICAgRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jaW5nIGJ1ZyBpbiBHZXRDaGFyV2lkdGguCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEZpeCB1bmRlci1hbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBMb2FkQWNjZWxlcmF0b3JzLgoKICAgICAgICAqIFt3aW5kb3dzL2NsYXNzLmNdCiAgICAgICAgSWdub3JlIG5lZ2F0aXZlIHNpemVzIGZvciBleHRyYSBmaWVsZHMgaW4gUmVnaXN0ZXJDbGFzcy4KClN1biBNYXkgMTUgMDY6MzU6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICAgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9wZW4uY10KICAgICAgICAgIFtvYmplY3RzL3RleHQuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL21hcHBpbmcuY10KICAgICAgICBCZWdpbm5pbmdzIG9mIG1ldGFmaWxlIHN1cHBvcnQuCgogICAgICAgICogW21pc2MvZmlsZS5jXQogICAgICAgIENvcnJlY3RlZCBzcGVsbGluZyBvZiBfbGNyZWF0LgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgTWlub3IgYnVnIGZpeGVzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1heSA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglNYWtlIHRodW1idHJhY2sgYnV0dG9uIGRpc2FwcGVhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMzoxLgoJTWFrZSBhcnJvdyBidXR0b25zIHJlY3Rhbmd1bGFyIGlmIHNjcm9sbCBib3ggcmF0aW8gPCAyOjEuCglBZGQgY29kZSBmb3IgU0JTX1RPUEFMSUdOLCBTQlNfQk9UVE9NQUxJR04sIAoJCQkJU0JTX0xFRlRBTElHTiAmIFNCU19SSUdIVEFMSUdOLgoJQnVnIGZpeCBpbiBOQ19DcmVhdGVTY3JvbGxCYXJzKCksIG5vIG1vcmUgYmlnYnV0dCBpbiBjYWxlbmRhci5leGUuLi4gOi0pCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KCUNvbnRpbnVlIHBsYXlpbmcgYXJvdW5kIHRyeWluZyB0byBnZXQgYSBzZWNvbmQgdGFzayBydW5uaW5nLgoKCSogW3dpbmRvd3MvbWRpLmNdCglDaGFuZ2UgT0JNX0NMT1NFIGZvciBPQk1fT0xEX0NMT1NFLCBhIHNtYWxsZXIgZG90IGJ1dHRvbiB3aGVuIG1heGltaXplZC4KCgkqIFtldmVyeXdoZXJlXQoJQWRkaW5nIHByZXZpb3VzIHdvcmtzIG9mIHRoZSBBcHIgMjUsIDk0LgoKVHVlIE1heSAxMCAxODowOToxNCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbaWYxNjMyL21tc3lzdGVtLnNwZWNdIFttaXNjL21tc3lzdGVtLmNdIFtpbmNsdWRlL21tc3lzdGVtLmhdCglBZGRlZCBNYXJ0aW4ncyBtbXN5c3RlbS5kbGwgc3R1YnMuCgoJKiBbbWlzYy9zb3VuZC5jXQoJQWRkZWQgcmVtYWluaW5nIHN0dWJzIGZvciBzb3VuZC5kbGwuCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglGaXhlZCBwcm90b3R5cGVzIChJIGZvdW5kIHRoZW0gaW4gQkMgNCkgYW5kIGFkZGVkIFNoZWxsQWJvdXQoKQoJYW5kIEFib3V0RGxnUHJvYygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNYXkgMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCBYVW5ncmFiUG9pbnRlcigpICYgWFVuZ3JhYlNlcnZlcigpIGluIHdpbmVfZmF1bHQoKS4KCkZyaSBBcHIgMjIgMTk6MzA6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJY29sb3Jfc3RyZXRjaCgpIHJld3JpdHRlbiB0byB1c2UgaW50cyBvbmx5LiAqZmFzdCEqCglCTEFDS09OV0hJVEUgJiBXSElURU9OQkxBQ0sgc3RyZXRjaG1vZGVzIHJlZGlyZWN0ZWQgdG8KCXVzZSBjb2xvcl9zdHJldGNoKCkuCgpNb24gTWF5ICAyIDIxOjM5OjQzIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2V0U3lzTWVudSgpIGFkZGVkLgoKCSogW21pc2MvY3Vyc29yLmNdCglHZXRDdXJzb3IoKSBhZGRlZC4KCgkqIFttaXNjL21haW4uY10KCVN3YXBNb3VzZUJ1dHRvbigpIGFkZGVkLCAoTk9QKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0RGVza3RvcEh3bmQoKSBhZGRlZC4KCgkqIFtpZjE2MzIvKnNwZWNdCglBZGRlZCBub3QgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGRlZnMgYXMgY29tbWVudC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQ2hhbmdlIFdTQUdldFhieVkoKSBmdW5jdGlvbnMgdG8gbm9uLWJsb2NraW5nIG9uZXMsCglBZGRlZCBXU0FBc3luY1NlbGVjdCgpLiAKCShXU0EgZnVuY3Rpb25zIGNhbid0IGJlIGNhbmNlbGVkIHlldCkuCgpXZWQgQXByIDIwIDIzOjU4OjU4IDE5OTQgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBtaXNjL3Byb2ZpbGUuYzogRml4ZWQgYnVnIHdpdGggR2V0SW5pRmlsZU5hbWUgcmV0dXJuaW5nIHdyb25nCglwYXRoIHdoZW4gZ2l2ZW4gYSBzaW1wbGUgZmlsZSBuYW1lLiAgRml4ZWQgR2V0U2V0UHJvZmlsZSB0byBhbGxvdwoJZW51bWVyYXRpbmcgYWxsIGtleSBuYW1lcyB3aGVuIEtleU5hbWUgaXMgbnVsbC4KCkFwciAyNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW29iamVjdHMvYml0Ymx0LmNdCglBZGQgcHJvdGVjdGlvbiB0byBCaXRCbHQoKSAmIFN0cmV0Y2hCbHQoKSBmb3Igd2lkdGggb3IgaGVpZ2h0ID0gMC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQXZvaWQgcGFpbnRpbmcgaW4gTkNfRG9OQ1BhaW50KCkgaWYgSXNXaW5kb3dWaXNpYmxlKCkuCglTaW1wbGlmeSBOQ19UcmFja01vdXNlTWVudUJhcigpIGJlY2F1c2UgY29kZSBtb3ZlZCB0byBNZW51Rm9jdXNMb29wKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvd0V4KCkgJiBEZXN0cm95V2luZG93KCkgbm93IGNhbGwgcmVzcGVjdGl2ZWx5CgkJQWRkV2luZG93VG9UYXNrKCkgJiBSZW1vdmVXaW5kb3dGcm9tVGFzaygpLgoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEFueVBvcHVwKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUJ1ZyBGaXggOiBHZXRNb2R1bGVGaWxlTmFtZSgpIG5vdyByZXR1cm4gZnVsbCBwYXRoIGZpbGVuYW1lLgoKCSogW2luY2x1ZGUvbWVudS5oXSBbY29udHJvbHMvbWVudS5jXQoJQWRkIGhUZXh0IGhhbmRsZSBhbmQgcmVtb3ZlIG9ic29sZXRlIE1FTlVJVEVNIHN0cnVjdCBtZW1iZXJzLgoJQWRkIGEgUmVsZWFzZUNhcHR1cmUoKSBpbiBTZXRNZW51KCkgd2hlbiBtZW51YmFyIGNoYW5nZWQgd2hpbGUgY2FwdHVyZWQuCglBZGQgTWVudU1vdXNlTW92ZSgpIE1lbnVCdXR0b25VcCgpIGluIGZ1bmN0aW9uIE1lbnVGb2N1c0xvb3AoKS4KCgkqIFttaXNjL2ZpbGUuY10KCUdldFRlbXBGaWxlbmFtZSgpIG5vdyBjcmVhdGUgYSBmaWxlLgoJX2xjcmVhdGUoKSB1c2UgdW5peCBvcGVuIChuYW1lLCBtb2RlLCBwZXJtKSwgd2l0aCBwZXJtPU82NjYuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglSZW1vdmUgdGVtcG9yYXJseSBidWlsdGluIFNIRUxMLkRMTCwgQWRkIE1NU1lTVEVNLkRMTCBpbiBidWlsdGluIGxpc3QuCgoJKiBOZXcgZmlsZSBbbWlzYy9tbXN5c3RlbS5jXQoJKiBOZXcgZmlsZSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJKiBOZXcgZmlsZSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglNYW55LCBtYW55IGVtcHR5IHN0dWJzIC4uLiA6LSkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldlZCBBcHIgMjAgMTQ6NTM6MzUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2lmMTYzMi9JbWFrZWZpbGVdCglGaXhlZCBidWcgZm9yIG5vbi1MaW51eCBzeXN0ZW1zLgoKQXByIDE4LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXhlZCBpbiBDcmVhdGVXaW5kb3dFeCgpIDogTm93IHVzZSBTZXRNZW51KCkgZm9yIG1lbnViYXIgc2V0dXAuCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gU2V0U3lzTW9kYWxXaW5kb3coKS4KCgkqIFttaXNjL2V4ZWMuY10KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBFeGl0V2luZG93cygpLgoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEVudW1Gb250cygpLgoKCSogTmV3IGZpbGUgW21pc2MvcHJvcGVydHkuY10KCU5ldyBmdW5jdGlvbnMgUmVtb3ZlUHJvcCgpLCBHZXRQcm9wKCksIFNldFByb3AoKSAmIEVudW1Qcm9wcygpLgoKCSogTmV3IGZpbGUgW21pc2Mvc2hlbGwuY10KCU5ldyBlbXB0eSBzdHVicyBmb3IgZnVuY3Rpb24gUmVnaXN0ZXJTaGVsbFByb2MoKSwgCgkJCVNoZWxsRXhlY3V0ZSgpICYgU2hlbGxQcm9jKCkuCgoJKiBOZXcgZmlsZXMgW2xvYWRlci90YXNrLmNdICYgW2luY2x1ZGUvdGFzay5oXQoJTW92ZSBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpCgkJZnJvbSAnbG9hZGVyL2xpYnJhcnkuYycuCgoJKiBbaWYxNjMyL3VzZXIuY10gW2lmMTYzMi9rZXJuZWwuY10KCVB1dCBBdG9tcyBmdW5jdGlvbnMgZW50cmllcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3RDb21ib0JveCgpICYgRGlyRGxnTGlzdENvbWJvQm94KCkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3QoKSAmIERpckRsZ0xpc3QoKS4KClN1biBBcHIgMTcgMjA6NTc6NTkgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL3Rlc3QuY10KCUdyYXlTdHJpbmcoKSBhZGRlZC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxHcmF5U3RyaW5nUHJvYygpIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglBZGRlZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgZm9yZ290dGVuIHNwZWNzIGZvciBhdG9tIGZ1bmN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAxMiAwMDowNTozMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzYy9zcHkuYyAoU3B5SW5pdCk6IEFkZGVkIG1vcmUgbWVzc2FnZSB0eXBlcwoKCSogW3dpbmRvd3MvbWRpLmNdIFtpbmNsdWRlL21kaS5oXQoJTWF4aW1pemluZyBhbmQgcmVzdG9yaW5nIGNoaWxkIHdpbmRvd3MuCglUaWxpbmcgb2YgY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgMTEgMjA6NDg6MjggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXZlcnQgZm9jdXMgYW5kIGFjdGl2YXRpb24gdG8gcHJldmlvdXMgd2luZG93IHdoZW4gaGlkaW5nIGEgd2luZG93LgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUltcGxlbWVudGVkIHN5c3RlbSBjb2xvciBvYmplY3RzIChicnVzaGVzIGFuZCBwZW5zIGNyZWF0ZWQgYXQKCVNldFN5c0NvbG9yKCkgdGltZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvYnV0dG9uLmNdCglDaGFuZ2VkIHBhaW50aW5nIGNvZGUgdG8gdXNlIHN5c3RlbSBjb2xvciBvYmplY3RzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBmb3IgaW50ZXJuYWwgbWVzc2FnZXMKCWxvb3BzIChlLmcuIGZvciBkaWFsb2dzIG9yIG1lbnVzKS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXSAgKE5ldyBmaWxlcykKCUJlZ2lubmluZyBvZiB0aGUgd2luZG93IGhvb2tzIGltcGxlbWVudGF0aW9uLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglVc2UgbmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBpbiBEaWFsb2dCb3goKS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUFkZGVkIGZ1bmN0aW9uIENhbGxIb29rUHJvYygpLgoKQXByIDExLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQnVnIGZpeCA6IFdNX0NIQVJzIGFyZSBzZW50IHRvIGZvY3VzZWQgd2luZG93IGxpa2UgV01fS0VZPz8/LgoKCSogW21pc2MvZXhlYy5jXQoJTm90aGluZyBtdWNoIG1vcmUgdGhhbiBhIHN0dWIgZm9yIExvYWRNb2R1bGUoKSwgSSBzYXcgdGhlcmUgYSBsb3QKCQl0byBiZSBkb25lIGluIHRoYXQgY29ybmVyLCBJIHdpbGwgY29tZSBiYWNrIGxhdGVyIC4uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgZnVuY3Rpb25zIEdldFdpbmRvd1Rhc2soKSwgR2V0TnVtVGFzaygpLCBFbnVtVGFza1dpbmRvd3MoKSAKCQkJYW5kIGFzc29jaWF0ZWQgbW9kdWxlcyAmIHRhc2tzIGxpbmtlZC1saXN0cy4KCShpdCdzIG9ubHkgYW4gJ2VtZXJnaW5nIGJ1ZCcsIG1vcmUgdG8gY29tZSBuZXh0IHdlZWtzKS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJVXNlIExvYWRMaWJyYXJ5KCkgaW5zdGVhZCBvZiBMb2FkSW1hZ2UoKSBmb3IgJ3N5c3Jlcy5kbGwnLgoKCSogW2NvbnRyb2wvbWVudS5jXQoJWW91IGNhbiBub3cgY2xpY2sgb3V0c2lkZSBtZW51IHJlZ2lvbiB3aXRob3V0IHByb2JsZW0uCglLZXlib2FyZCBuYXZpZyBtb3JlIHNtb290bHksIGV2ZW4gaWYgYSBjaGlsZCBoYXMgdGhlIGZvY3VzLgoJQnVnIGZpeCBpbiBJbnNlcnRJdGVtKCksIChiYWQgbGlua2xpc3Qgd2hlbiBpbnNlcnQgcG9pbnQgbm90IGZvdW5kKS4KCWNoYW5nZSBSZWFsbG9jIGZvciBGcmVlICYgQWxsb2MgaW4gTW9kaWZ5SXRlbSgpLgoJTUZfU1RSSU5HIG5vdyBzZXQgQkxBQ0tfUEVOIHRvIGZpeCBidWcgb2YgYmFkIGNvbG9yIG9mIHRoZSB1bmRlcnNjb3JlcyAKCQlkb25lIGJ5IERyYXdUZXh0KCksIChtYXliZSBpdCBzaG91bGQgZG9uZSBpbiBEcmF3VGV4dCgpIGl0c2VsZiA/KS4KClN1biBBcHIgMTAgMTQ6MDY6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCS5JTkkgZmlsZXMgd2lsbCBub3cgYmUgc3RvcmVkIGluIC8gbG9hZGVkIGZyb20gdGhlIHdpbmRvd3MgZGlyCglpZiBubyBwYXRoIGlzIHN1cHBsaWVkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpeGVkIEdldERyaXZlVHlwZSdzIHByb3RvdHlwZS4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbaW5jbHVkZS93aW5zb2NrLmhdIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgcHJvdG90eXBlczogd2luc29jayB1c2VzIGEgd29yZCBhcyBzb2NrZXQgaGFuZGxlIG5vdCBhbiBpbnQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIGhlYXAgYWxsb2NhdGlvbiBmb3IgcmV0dXJuZWQgc3RydWN0dXJlcy4KCUFkZGVkIG5vbi1ibG9ja2luZyBXU0FBc3luY0dldFhieVkoKSBmdW5jdGlvbnMgYXMgYmxvY2tpbmcgb25lcy4KCgkqIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgSXNETExMb2FkZWQoKSwgdXNlZCBpbiBMb2FkSW1hZ2UoKSB0byBwcmV2ZW50IGxvYWRpbmcKCWEgZGxsIG11bHRpcGxlIHRpbWVzLgoJRGlyZWN0b3J5IGlzIGFkZGVkIHRvIHdpbmUncyBwYXRoIHdoZW4gYSBmdWxscGF0aCBpcyBzdXBwbGllZCB3aGVuCglzdGFydGluZyB3aW5lLgoJTG9hZEltYWdlKCk6IERMTCBmaWxlbmFtZSB1c2VkIGluc3RlYWQgRExMJ3Mgb3duIGludGVybmFsIG5hbWUsCglmaXhlcyAnQmFkIERMTCBuYW1lJyBlcnJvcnMuCgpTYXQgQXByICA5IDA4OjI2OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXRzLmNdCglGaXJzdCByZWxlYXNlIG9mIGVkaXQgY29udHJvbC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAgNSAxNDozNjo1OSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQoJVXNlIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlcyB0byBhY3RpdmF0ZSBjaGlsZHJlbi4KCUdlbmVyYXRlIFdNX0NISUxEQUNUSVZBVEUgbWVzc2FnZXMuCglCZWdpbm5pbmdzIGhhbmRsZXIgZm9yIG1heG1pemVkIGNoaWxkIHdpbmRvdy4KCUNsZWFuIHVwIHdoZW4gY2hpbGRyZW4gYXJlIGRlc3Ryb3llZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmVtb3ZlZCBjb2RlIGFkZCA5NC8wMy8yNi4KCkFwciA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCglNYWtlIG1vdXNlIG1lbnUgbmF2aWdhdGlvbiB3b3JraW5nIGFnYWluLiA6LSkpCgkoYmUgY2FyZWZ1bGwsIGNsaWNraW5nIG91dHNpZGUgbWVudXMgKGllLjogY2xpZW50cmVjdCkgCglub3QgcmVzb2x2ZWQgeWV0KQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdICBbY29udHJvbHMvc2Nyb2xsLmNdCglCdWdzIGZpeCBpbiBOQ1RyYWNrU2Nyb2xsQmFycygpLgoKCSogW21pc2MvZG9zX2ZzLmNdCglCdWcgZml4IGluICdUb0RvcygpJyBpbiBjb252ZXJzaW9uIGZvciAnLycsCgkJKGV4YW1wbGU6ICcvd2luZG93Lycgd2FzIHRyYW5zbGF0ZWQgdG8gJ1dJTkRPV3MnKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGdW5jdGlvbiBDaGFuZ2VEaXIoKSBleHRyYWN0IHBvc3NpYmxlIGRyaXZlIGJlZm9yZSBET1NfQ2hhbmdlRGlyKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gIFtsb2FkZXIvd2luZS5jXQoJUGxheWluZyBhcm91bmQgbW92aW5nIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgYW5kIHB1dCBzb21lIGNvZGUgaW4uCgpNb24gQXByICA0IDIxOjM5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW21pc2MvbWFpbi5jXQoJQmV0dGVyIGV4cGxhbmF0aW9uIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLgoKCSogW29iamVjdHMvZGliLmNdCglJbXBsZW1lbnRlZCBTZXRESUJpdHNUb0RldmljZSgpLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXggaW4gU2V0RENTdGF0ZSgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVJlbW92ZWQgV1NfRElTQUJMRUQgaGFuZGxpbmcgKG5vdyBkb25lIGluIG1lc3NhZ2UuYykuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBzZW5kaW5nIGEgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UgaW4gTVNHX1RyYW5zbGF0ZU1vdXNlTXNnKCkuCglVc2UgV2luZG93RnJvbVBvaW50KCkgdG8gZmluZCB0aGUgd2luZG93IGZvciBtb3VzZSBldmVudHMsIHRha2luZwoJaW50byBhY2NvdW50IGRpc2FibGVkIHdpbmRvd3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBCZWdpblBhaW50KCkgdG8gYWxsb3cgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB0aGFuCglvbiBXTV9QQUlOVCAoU29saXRhaXJlIG5lZWRzIGl0Li4uKQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBGaW5kV2luZG93KCkuCglSZXdyaXR0ZW4gRW5hYmxlV2luZG93KCkgdG8gYmVoYXZlIG1vcmUgbGlrZSBXaW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXdyaXR0ZW4gV2luZG93RnJvbVBvaW50KCkgdG8gYWxzbyBzZWFyY2ggY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgIDQgMTc6MzY6MzIgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtpbmNsdWRlL2ludDIxLmhdIC0+IFttc2Rvcy5oXQoJcmVuYW1lZC4KCgkqIFttaXNjZW11L2ludDEwLmhdIFttaXNjZW11L2ludDI1LmhdIFttaXNjZW11L2ludDI2LmhdIAoJbmV3LCBhZGRlZCBmb3IgaW50IDEwLCAyNSBhbmQgMjYuCgoJKiBbbWlzY2VtdS9pb3BvcnRzLmNdCgluZXcsIGFkZGVkIHRvIGFsbG93IHdpbiBhcHBzIHRvIHVzZSBpb3BvcnRzLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGluLCBpbmIsIG91dCwgb3V0YiBpbnN0cnVjdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjcgMTM6NDA6MjUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoSW5zZXJ0TWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbSgpLgoKU2F0IE1hciAyNiAyMToyMzo1NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3MvbWRpLmNdCglXaW5kb3cgbGlzdCBwcm9wZXJseSB1cGRhdGVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQ2FsbCBXSU5QT1NfQ2hpbGRBY3RpdmF0ZSgpIHdoZW4gbW91c2UgcHJlc3NlZC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgaW5zdGVhZCBvZiBHZXRBY3RpdmVXaW5kb3coKSBpbgoJTkNfSGFuZGxlTkNQYWludCgpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglDcmVhdGVkIGZ1bmN0aW9ucyBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdygpIGFuZCBXSU5QT1NfQWN0aXZhdGVDaGlsZCgpCgpUaHUgTWFyIDI0IDE0OjQ5OjE3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKERlbGV0ZU1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0KCShEZWxldGVNZW51KTogTWFueSBidWcgZml4ZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ3JlYXRlZCBmdW5jdGlvbiBGaW5kTWVudUl0ZW0oKS4KClRodSBNYXIgMjQgMTQ6MTc6MjQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBpbmNvcnJlY3QgTURJIGhhbmRsaW5nIGNvZGUgZnJvbSBDcmVhdGVXaW5kb3dFeCgpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1GX1NUUklORyBpdGVtcyBuZWVkZWQgdG8gYWxsb2NhdGUgYSBwcml2YXRlIGNvcHkgb2Ygc3RyaW5nLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGJ1Z2d5IGNhbGxzIHRvIEdsb2JhbEZyZWUoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglFbGltaW5hdGVkIHNvbWUgcmVkdW5kYW50IGNvZGUgd2l0aCBmdW5jdGlvbiBjYWxsLgoKV2VkIE1hciAyMyAxOTk0IFBlbnR0aSBNb2lsYW5lbiAocGVudHRpLm1vaWxhbmVuQG50Yy5ub2tpYS5jb20pCgoJKiBbd2luZG93cy90aW1lci5jXQoJdGltZXIgbGlzdCBwb2ludGVycyBsb29wZWQgaW4gSW5zZXJ0VGltZXIKClR1ZSBNYXIgMjkgMTM6MzI6MDggTUVUIERTVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbWlzYy9jdXJzb3IuY10KCUEgZmV3IGNoYW5nZXMgZm9yIGRlc2t0b3Agd2luZG93IHN1cHBvcnQuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVwdGggb3B0aW9uLgoKCSogW21pc2MvcmVjdC5jXQoJWWV0IGFub3RoZXIgYnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJQ2hhbmdlcyB0byB1c2Ugb25seSBvbmUgZGVwdGggKHNwZWNpZmllZCB3aXRoIC1kZXB0aCkKCWZvciBjb2xvciBiaXRtYXBzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRpdGhlcmVkIHNvbGlkIGJydXNoZXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIHRoZSBzYW1lIDIwIHN5c3RlbSBjb2xvcnMgYXMgaW4gV2luZG93cy4KCVN5c3RlbSBwYWxldHRlIGluaXRpYWxpc2F0aW9uIG5vdyBkb25lIGluIENPTE9SX0luaXRQYWxldHRlKCkuCglBZGRlZCBzdXBwb3J0IGZvciBhIGNvbG9yIG1hcHBpbmcgdGFibGUgdG8gbWFwIGxvZ2ljYWwgY29sb3IKCWluZGV4ZXMgdG8gWCBjb2xvcm1hcCBlbnRyaWVzLgoJSW1wbGVtZW50ZWQgR2V0TmVhcmVzdENvbG9yKCkgYW5kIFJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpLgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBzdXBwb3J0IGZvciBjb2xvciBtYXBwaW5nIHRhYmxlLgoKCSogW29iamVjdHMvZGl0aGVyLmNdICAoTmV3IGZpbGUpCglJbXBsZW1lbnRlZCBzb2xpZCBjb2xvciBkaXRoZXJpbmcuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglJbXBsZW1lbnRlZCBHZXRTeXN0ZW1QYWxldHRlRW50cmllcygpIGFuZCBTZWxlY3RQYWxldHRlKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTWFrZSBhIGNvcHkgb2YgdGhlIG1lbnUgbmFtZSBpbiBSZWdpc3RlckNsYXNzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJRml4ZWQgZGV2aWNlIGNhcHMgd2hlbiB1c2luZyBhIGRlc2t0b3Agd2luZG93LgoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgaW4gRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIENvbmZpZ3VyZU5vdGlmeSBoYW5kbGVyIG9uIGRlc2t0b3Agd2luZG93LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxsIHRvIFhUcmFuc2xhdGVDb29yZGluYXRlcygpIG9uIGV2ZXJ5IG1vdXNlIG1vdGlvbgoJTmV3IGZ1bmN0aW9uIE1TR19TeW5jaHJvbml6ZSgpIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIFggc2VydmVyLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCVJld3JpdHRlbiBTWVNDT0xPUl9Jbml0KCkgdG8gcmVhZCB0aGUgc3lzdGVtIGNvbG9ycyBmcm9tIFdJTi5JTkkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHN5bmNocm9uaXphdGlvbiBvbiB3aW5kb3cgbWFwcGluZy4gU29sdmVzIHRoZSBkb3VibGUgcmVkcmF3Cglwcm9ibGVtIHdoZW4gc3RhcnRpbmcgU29saXRhaXJlLgoKTWFyIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCSogW3dpbmRvd3MvZGVmd25kLmNdCglNYWtlIGtleWJvYXJkIG5hdmlnYXRpb24gd29ya2luZyB3aXRoIG1lbnViYXIsCglidXQgdGVtcG9yYXJlbHkgaW5zZXJ0ZWQgYSBidWcgaW4gbWVudWJhciBtb3VzZSBoYW5kbGluZyAuLi4gOi0oKAoJKGl0IHdpbGwgYmUgZml4IG5leHQgd2VlayAhKQoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglDb25uZWN0IFZLX01FTlUgdG8gbWVudWJhciBuYXZpZ2F0aW9uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglHZXRNb2R1bGVIYW5kbGUoKSByZXR1cm4gJ2ZpY3RpdmUgMHhGMDAwKyBoYW5kbGVzJyBmb3IgYnVpbHQtaW4gRExMcy4KClN1biBNYXIgMjAgMjI6MzI6MTMgMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgQ29weSgpLiBBZGRlZCBhIGNoZWNrIGZvciBgLWgnIHRvIHNob3cgdXNhZ2UuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIGJ1ZyBpbiBGaW5kRmlsZSgpLCB0byBsb2FkIGRpcmVjdG9yaWVzIGFzIGRsbHMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIFRvVW5peCgpIGFuZCBUb0RvcygpIGFnYWluLCBhcyBteSBwcmV2aW91cyBwYXRjaAoJZGlkbid0IG1ha2UgaXQuCgoJKiBbbWlzYy9kb3NfZnMuY10gW21pc2NlbXUvaW50MjEuY10KCUJ1ZyBmaXhlcywgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFsbCB3aW5maWxlIGFuZCBwcm9nbWFuIGludDIxCglyZXF1ZXN0cyBub3cgZXhjZXB0IGZvciBhIGZldyBzbWFsbCB0aGluZ3MuCgpUdWUgTWFyIDI5IDA2OjI1OjU0IDE5OTQgIGNyd0BoYXJyaXMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKCgkqIFttZW1vcnkvaGVhcC5jXQoJSW1wbGVtZW50ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWFyIDIxIDE3OjMyOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKEdldFN1Yk1lbnUpOiBGdW5jdGlvbiBkaWQgbm90IHJldHVybiBjb3JyZWN0IHZhbHVlCgoJKiBbd2luZG93cy9tZGkuY10KCUJlZ2lubmluZ3Mgb2YgbWVudSBoYW5kbGluZy4KClRodSBNYXIgMTAgMTE6MzI6MDYgMTk5NCAgU3RlZmFuIChTQU0pIE11ZW56ZWwgIChtdWVuemVsQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCWlmIGZvbnQud2lkdGggZXF1YWxzIHplcm8gdXNlIGFzdGVyaXggaW5zdGVhZC4KCk1vbiBNYXIgMjEgMTc6MjM6MzcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJUmV3cml0dGVuIGJpdG1hcCBjb2RlIHRvIHVzZSBleGNsdXNpdmVseSBYIHBpeG1hcHM7ICptdWNoKiBmYXN0ZXIuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJU29tZSBjaGFuZ2VzIHdpdGggcGF0dGVybiBicnVzaGVzIGJlY2F1c2Ugb2YgdGhlIG5ldyBiaXRtYXAgY29kZS4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglBZGRlZCBmdW5jdGlvbiBDT0xPUl9Ub1BoeXNpY2FsIGZvciBiZXR0ZXIgY29sb3IgbWFwcGluZy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJSGVhdmlseSBvcHRpbWl6ZWQgU2V0RElCaXRzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJT3BpbWl6ZWQgU2V0RENTdGF0ZSgpIGFuZCBEQ19TZXR1cEdDKigpIGZ1bmN0aW9ucy4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUlDKCkuCgpNYXIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCUNhbGwgU2V0Rm9jdXMoKSBhZnRlciBjbG9zaW5nIGJveCB0byBnaXZlIGJhY2sgZm9jdXMgdG8gcHJldmlvdXMgb3duZXIuCgoJKiBbbWlzYy9maWxlcy5jXQoJU21hbGwgYnVnIGZpeCBpbiBHZXRUZW1wRmlsZW5hbWUoKSA6IHJlcGxhY2UgYSAnXCcgdG8gJ1xcJy4KCgkqIFtjb250cm9sL3Njcm9sbC5jXQoJQ2FsbHMgdG8gQml0Qmx0KCkgcmVwbGFjZSBieSBTdHJldGNoQmx0KCkuCgoJKiBbY29udHJvbC9tZW51LmNdCglDYWxsIFNldEZvY3VzKCkgdG8gcHJldmlvdXMgb3duZXIgYWZ0ZXIgY2xvc2luZyBQb3B1cHMuCQoJRmlsbCBzdHViIERlbGV0ZU1lbnUoKS4KCgkqIFtjb250cm9sL2xpc3Rib3guY10KCSogW2NvbnRyb2wvY29tYm8uY10KCVVzZSBTZXRGb2N1cygpIGluIFdNX0xCVVRUT05ET1dOLgoJQ2xvc2UgQ29tYm9Cb3ggTGlzdCB1cG9uIFdNX0tJTExGT0NVUy4KCUVhcmx5IGRldmVsb3BtZW50IG9mIFdNX01FQVNVUkVJVEVNIG1lY2FuaXNtLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KClR1ZSBNYXIgMjIgMTA6NDQ6NTcgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwpCgoJKiBbbWlzYy9hdG9tLmNdCglGaXhlZCBzaW50YXhpcyBwcm9ibGVtIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgMTUgMTM6MTE6NTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1lc3NhZ2UgdHlwZXMgYW5kIHN0cnVjdHVyZXMgZm9yIE1ESQoKCSogW2luY2x1ZGUvbWRpLmhdCglDcmVhdGVkIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIE1ESQoKCSogW3dpbmRvd3MvbWRpLmNdCglCZWdhbiBjcmVhdGluZyBNREkgc3VwcG9ydAoKVGh1IE1hciAxMCAxNjo1MTo0NiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci93aW5lLmNdIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIG5ldyBmaWVsZCB0byAic3RydWN0IHdfZmlsZXMiIHRvIGhvbGQgdGhlICJuYW1lIHRhYmxlIgoJcmVzb3VyY2UgZm9yIFdpbmRvd3MgMy4wIHByb2dyYW1zCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBjb2RlIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGEgIm5hbWUgdGFibGUiIHJlc291cmNlLgoJTG9hZFJlc291cmNlQnlOYW1lKCkgbW9kaWZpZWQgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YKCXRoaXMgcmVzb3VyY2UuCgpNb24gTWFyIDE0IDIyOjMxOjQyIE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQWRkZWQgaW5zdGFsbGluZyB0aGUgcHJpdmF0ZSBjb2xvcm1hcCBvbiB0aGUgZGVza3RvcCB3aW5kb3cuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2xlYW5lZCB1cCBmb2N1cyBldmVudCBoYW5kbGluZyAoc2VlIGZvY3VzLmMpLgoJVXNlIEdldEZvY3VzKCkgdG8gZGlyZWN0IGtleSBldmVudHMgdG8gdGhlIGNvcnJlY3Qgd2luZG93LgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCVJld3JpdHRlbiBTZXRGb2N1cygpIHRvOgoJLSBvbmx5IHNldCBYIGZvY3VzIG9uIHRvcC1sZXZlbCB3aW5kb3dzCgktIHNlbmQgV01fU0VURk9DVVMgYW5kIFdNX0tJTExGT0NVUyBtZXNzYWdlcyAod2FzIGRvbmUgaW4gZXZlbnQuYykKCS0gcHJldmVudCBzZXR0aW5nIGZvY3VzIHRvIGRpc2FibGVkIHdpbmRvd3MKCS0gaW5zdGFsbCBwcml2YXRlIGNvbG9ybWFwIHNvIC1wcml2YXRlbWFwIG9wdGlvbiB3b3JrcyBhZ2FpbgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy90aW1lci5jXQoJQ2hhbmdlZCB0aW1lciBtYW5hZ2VtZW50IHRvIG5vIGxvbmdlciB1c2UgUG9zdE1lc3NhZ2UoKSwgYnV0Cgl0byBnZW5lcmF0ZSB0aW1lciBtZXNzYWdlcyBvbiB0aGUgZmx5LiBBbHNvIGZpeGVkIGEgcmVsYXRlZCBidWcKCWluIEdldE1lc3NhZ2UoKSB3aGljaCBjb3VsZCBjYXVzZSBidXN5LXdhaXRpbmcuCgoJKiBbd2luZG93cy93aW4uY10KCU9ubHkgc2VsZWN0IGZvY3VzIGV2ZW50cyBvbiB0b3AtbGV2ZWwgd2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc29tZSBzYW5pdHkgY2hlY2tzIGZvciBkZXNrdG9wIHdpbmRvdy4KCkZyaSBNYXIgIDQgMjA6NDI6MDEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2Rvc19mcy5jXQoJYnVnIGZpeGVzIGluIFRvVW5peCgpLCBXaW5JbmlGaWxlTmFtZSgpLCBHZXRVbml4RmlsZU5hbWUoKS4gCglTdXBwb3J0IGZvciB0aWxkZSBzeW1ib2wgYWRkZWQgZm9yIHJvb3RkaXJlY3RvcmllcyBpbiBbZHJpdmVzXQoJc2VjdGlvbiBvZiB3aW5lJ3MgY29uZmlnZmlsZS4KCgkqIFttaXNjL2ZpbGUuY10KCWhyZWFkKCksIGh3cml0ZSgpIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXQoJaG1lbWNweSgpIGFkZGVkLgoKCSogW2lmMTYzMi9zdHJlc3Muc3BlY10gW2luY2x1ZGUvc3RyZXNzLmhdIFttaXNjL3N0cmVzcy5jXQoJQWRkZWQgU1RSRVNTLkRMTCwgYW4gdXNlbGVzcyBkbGwgdXNlZCB0byBzdHJlc3MgYSB3aW5kb3dzIHN5c3RlbS4KCgkqIFsqLypdCglBZGRlZCBtaXNzaW5nICNpbmNsdWRlcywgZml4ZWQgcHJvdG90eXBlcyBmb3IgcHJvdG90eXBlIGNoZWNraW5nLgoKCSogW2luY2x1ZGUvcHJvdG90eXBlcy5oXQoKCUFkZGVkIHByb3RvdHlwZXMgZm9yIGxvYWRlci8qYywgaWYxNjMyLypjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyICA4IDA5OjU0OjM0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgcmVtaW5kZXIgdG8gc2V0IFdJTkVQQVRILCBpZiBpdCBpcyBub3Qgc2V0LgoKCSogW0ltYWtlZmlsZV0KCVJlbW92ZWQgI2VsaWYncwoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkZWQgQk5fQ0xJQ0tFRCBub3RpZmljYXRpb24gZm9yIG93bmVyLWRyYXcgYnV0dG9ucy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvaGVhcC5jXQoJQ2hhbmdlZCBMb2NhbCogZnVuY3Rpb25zIHRvIFdJTjE2X0xvY2FsKiB0byBwcmV2ZW50IHVuY29uY2lvdXMgdXNlCglvZiB0aGVzZSBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglQdXNoIG9sZCBTdGFjazE2RnJhbWUgb24gc3RhY2sgYmVmb3JlIHNldHRpbmcuCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttaXNjL2F0b20uY10gW2luY2x1ZGUvaGVhcC5oXSBbbWVtb3J5L2xvY2FsLmNdCglBZGRlZCBtdWx0aXBsZSBsb2NhbCBoZWFwIGhhbmRsaW5nIGluIEF0b20qIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3JlZ2Z1bmMuaF0gW21pc2NlbXUvaW50MjEuY10KCVJld3JvdGUgRE9TM0NhbGwoKSB1c2UgY29udGV4dCBmcmFtZSB0aGF0IGlzIGFscmVhZHkgb24gdGhlIHN0YWNrLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJRml4ZWQgdG8gYWxsb3cgbGVhZGluZyAiOyIgdG8gbWFyayBjb21tZW50cy4KCgkqIFttaXNjL3NweS5jXQoJRml4ZWQgYnVncyBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgImluY2x1ZGUiIGFuZCAiZXhjbHVkZSIgZmlsdGVycy4KCgkqIFttaXNjL3VzZXIuY10KCVJlYXJyYW5nZWQgY2FsbHMgaW4gSW5pdEFwcCgpLgoKCSogW21pc2MvZm9udC5jXQoJRml4ZWQgZm9udCBoYW5kbGluZyB0byBjcmVhdGUgc3lzdGVtIGZvbnRzLCBpZiB0aGV5IGFyZSB1c2VkLgoKCSogW3dpbmRvd3MvZGMuY10KCUlmIHRleHQgZHJhd24gb24gd2luZG93IHdpdGggbm8gZm9udCBzcGVjaWZpZWQsIHRoZW4gZGVmYXVsdCB0aGUKCWZvbnQgdG8gdGhlIHN5c3RlbSBmb250LgoKTW9uIE1hciAgNyAyMDozMjowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX05DQ1JFQVRFIGFuZCBXTV9FUkFTRUJLR05EIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldERlc2tQYXR0ZXJuKCkuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVza3RvcCBvcHRpb24gdG8gZ2V0IGEgbGFyZ2UgZGVza3RvcCB3aW5kb3cgd2l0aAoJZXZlcnl0aGluZyBpbnNpZGUgaXQuCglBZGRlZCAtbmFtZSBvcHRpb24uCgoJKiBbbWlzYy9yZWN0LmNdCglCdWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvKi5jXQoJUmVwbGFjZWQgdGhlIERlZmF1bHRSb290V2luZG93KCkgbWFjcm8gYnkgdGhlIHJvb3RXaW5kb3cgdmFyaWFibGUuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10KCUEgZmV3IGNoYW5nZXMgdG8gYWNjb21vZGF0ZSB0aGUgbmV3IGRlc2t0b3Agd2luZG93LgoKIFR1ZSBNYXIgIDggMTE6MTM6MDMgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQogCiAJKiBbdG9vbGtpdC9hcmNoLmNdIC0tTmV3IGZpbGUtLSAKIAlSb3V0aW5lcyBmb3IgY29udmVydGluZyBsaXR0bGUgZW5kaWFuIGRhdGEgc3RydWN0dXJlcyB0bwogCWJpZy1lbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzLCBjdXJyZW50bHkgb25seSBCSVRNQVAgc3RydWN0dXJlcyBhcmUgCiAJY29udmVydGVkLgogCiAJKiBbbWlzYy9hdG9tLmNdCiAJV2hlbiB1c2VkIGFzIHBhcnQgb2YgdGhlIFdpbmVMaWIsIHRoZSBjb2RlIGlzIG11Y2ggc2ltcGxlci4KIAlEb2Vzbid0IGRlcGVuZCBvbiBhbGlnbmVtZW50LgogCiAJKiBbbG9hZGVyL3dpbmUuY10KIAlJZmRlZmVkIEVtdWxhdG9yIGRlcGVuZGVudCBjb2RlIGlmIGNvbXBpbGluZyBXaW5lTGliLgogCiAJKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAJTW92ZWQgbWlzYy9yZXNvdXJjZS5jIHRvIGxvYWRlci9yZXNvdXJjZS5jLgogCiAJKiBbbG9hZGVyL2R1bXAuYyxsZHQuYyxsZHRsaWIuYyxsaWJyYXJ5LGMsc2VsZWN0b3IuYyxzaWduYWwuY10KIAlJZmRlZmVkIHdob2xlIGNvZGUgaWYgY29tcGlsaW5nIFdJTkVMSUIuCiAKIAkqIFtpbmNsdWRlL3dpbnNvY2suaF0KIAlBZGRlZCBjb21waWxhdGlvbiBkZWZpbmUgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gU3VuT1MuCiAKIAkqIFtpbmNsdWRlL3dpbmUuaF0KIAlSZW1vdmVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gcHJvdG90eXBlcywgdGhleSBiZWxvbmcKIAl0byBuZWV4ZS5oCiAKIAkqIFtpbmNsdWRlL25lZXhlLmhdCiAJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLgogCiAJKiBbaW5jbHVkZS9hcmNoLmhdCiAJRml4ZWQgc29tZSBidWdzIGluIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzLgogCUFkZGVkIG1hY3JvcyBmb3IgQml0bWFwIGxvYWRpbmcuCgpUdWUgTWFyICA4IDEyOjUyOjA1IDE5OTQgIGNyd0BtYW5pYWMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKIAkKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdldEZyZWVTcGFjZSgpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlSWNvbigpCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgIDEgMTE6MzA6MjEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdIFsqL0ltYWtlZmlsZV0KCUNyZWF0ZWQgY29uZmlndXJlIHNjcmlwdCB0byBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFdpbmUgYnVpbGRzLgoKCSogW0NvbmZpZ3VyZV0gW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvSW1ha2VmaWxlXSBbV2luZS50bXBsXQoJQWRkZWQgYWJpbGl0eSB0byBjb21waWxlIFdpbmUgb24gc3lzdGVtcyB3aXRoIDE0LWNoYXIgZmlsZW5hbWUgbGltaXQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXQoJQWRkZWQgLXJlbGF5ZGJnIG9wdGlvbiB0byBjb21tYW5kIGxpbmUgaWYgREVCVUdfUkVMQVkgaXMgZGVmaW5lZC4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUZpeGVkIGJ1ZyBpbiBHZXRFbnRyeURMTE5hbWUoKSB0aGF0IGNhdXNlZCBXaW5lIHRvIHNlZyBmYXVsdC4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgTG9jYWxJbml0KCkgdG8gd29yayBjb3JyZWN0bHkuCgoJKiBbbWlzYy91c2VyLmNdCglBZGRlZCBjb2RlIHRvIGNhbGwgbG9hZGVkIERMTHMnIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgoKVHVlIE1hciAgMSAwMTowMToxNyBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvZGNlLmNdCglBZGRlZCBjbGlwcGluZyBvZiBjaGlsZCB3aW5kb3dzIGJ5IHRoZWlyIHBhcmVudCdzIGNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4IGluIE5DX0RvTkNQYWludCgpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCgpGZWIgMjcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW0vYXRvbS5jXQoJQnVnIGZpeCBhZ2FpbiBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAoJCWNoYW5nZSBMb2NhbEZyZWUoKSBieSBVU0VSX0hFQVBfRlJFRSgpLgoJKFByZXZpb3VzIHBhdGNoIGRvbmUgRmViIDEzdGggaGFkIGJlZW4gbG9zdCkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU1vdmUgYml0bWFwcyBsb2FkaW5nIGluIEFsbG9jU2Nyb2xsQmFyKCkgaW5zdGVhZCBvZiBpbiBXTV9DUkVBVEUuCgoJKiBbd2luZG93cy9jbGFzcy5jXSAoc29ycnkgQWxleCAuLi4pCglUaGVyZSB3YXMgbm8gYnVnIHRoZXJlICJpbiBSZWdpc3RlckNsYXNzKCkgOiAKICAgICAgICAgICAgICAgIFdORENMQVNTLT5scHN6Q2xhc3NOYW1lIHdhcyByZXNldCB0byBOVUxMLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4KCgkqIFttaXNjL2NsaXBib2FyZC5jXQktLS0gTmV3IEZpbGUgLS0tCglOZXcgZnVuY3Rpb24gRW51bUNsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gQ2xvc2VDbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBFbXB0eUNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZE93bmVyKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkVmlld2VyKCkuCglOZXcgZnVuY3Rpb24gQ291bnRDbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRGF0YSgpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZFZpZXdlcigpLgoJTmV3IGZ1bmN0aW9uIEVudW1DbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBDaGFuZ2VDbGlwYm9hcmRDaGFpbigpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZERhdGEoKS4KCU5ldyBmdW5jdGlvbiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkuCglOZXcgZnVuY3Rpb24gR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRGb3JtYXROYW1lKCkuCgpUdWUgTWFyICAxIDIwOjE1OjQ1IDE5OTQgIEVyaWsgQm9zIDxlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmw+CgoJKiBbbWlzYy9jb21tLmNdCglidWdmaXggaW4gT3BlbkNvbW0oKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAyMiAxODowNDowMiAxOTk0ICBKZWZmcmV5IEhzdSA8aHN1QGZyZWVmYWxsLmNkcm9tLmNvbT4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCVRoZSBzb2NrcHJvdG8gc3RydWN0IGlzIGFscmVhZHkgZGVmaW5lZCBpbiA8c3lzL3NvY2tldC5oPgoKCSogW21pc2Mvd2luc29jay5jXQoJTmVlZCB0byBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBzdHJ1Y3QgaW4tYWRkci4KCVVzZSBzeXNfZXJybGlzdFtdIGluc3RlYWQgb2Ygc3RyZXJyb3JbXS4KCgkqW3Rvb2xraXQvaGVhcC5jXQoJQU5TSSBDIHNwZWNpZmllcyB0aGF0IHRoZSBtYWxsb2MgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHN0ZGxpYi5oLAoJICBzbyB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgbWFsbG9jLmguCgoJKltsb2FkZXIvbGR0bGliLmNdCglQcmludCBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGFib3V0IHByb2JhYmxlIGNhdXNlIG9mIGkzODZfc2V0X2xkdCgpCgkgIGZhaWx1cmUgYW5kIHRoZW4gZXhpdC4KCgkqW0ltYWtlZmlsZV0KCUZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgdXNlIGdtYWtlIGJ5IGRlZmF1bHQsIHNldCB0aGUgTUFLRSB2YXJpYWJsZQoJICB0byBnbWFrZSBhbmQgcHJvcGFnYXRlIGl0IG9uIHJlY3Vyc2l2ZSBtYWtlcy4KCVRha2Ugb3V0IC1saTM4NiBmb3IgRnJlZUJTRCBzeXN0ZW1zIGFuZCBkZWZpbmUgX19GcmVlQlNEX18gc28gV2luZQoJICBjYW4gYmUgYnVpbHQgd2l0aCB0aGUgRnJlZUJTRCAxLjAuMiBjb21waWxlci4KClR1ZSBGZWIgMjIgMDI6NTI6MTkgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEFkZGVkIGluIHRocmVlIGZ1bmN0aW9ucyB0byBkbyBzdHJldGNoaW5nIGFuZCBjb21wcmVzc2lvbgogICAgICAgIGZvciBXSElURU9OQkxBQ0ssIEJMQUNLT05XSElURSwgYW5kIGNvbG9yIGNvcGllcy4KClR1ZSBGZWIgMjIgMTU6MDE6MzEgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQWRkZWQgRmxvb2RGaWxsIGFuZCBGbG9vZEZpbGxfcmVjLiAgRmxvb2RGaWxsX3JlYyBpcyBwcmV0dHkKICAgICAgICBpbmVmZmljZW50LCBidXQgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KCiAgICAgICAgKiBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgQ2hhbmdlZCB0aGUgeCx5IHBhcmFtYXRlcnMgZm9yIHRoZSBGbG9vZEZpbGwgcHJvdG90eXBlIAogICAgICAgIGZyb20gaW50cyB0byBzaG9ydHMKClR1ZSBGZWIgMjIgMDA6NTg6MjggTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL3dpZGdldHMuY10KCUFkZGVkIGRlc2t0b3Agd2luZG93IGNsYXNzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCglJbXBsZW1lbnRlZCBFeGNsdWRlVXBkYXRlUmduKCkuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdpbmRvdy4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglQcmVsaW1pbmFyeSBkZXNrdG9wIHdpbmRvdyBwcm9jZWR1cmUuCgpGZWIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb24gTG9hZE1lbnVJbmRpcmVjdCgpLgoJTmV3IGZ1bmN0aW9uIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKCkuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUVudHJ5IGZvciBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJRml4IGJ1ZyBpbiBSZWdpc3RlckNsYXNzKCkgOiAKCQlXTkRDTEFTUy0+bHBzek1lbnVOYW1lIHdhcyByZXNldCB0byBOVUxMLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBpZiBoTWVudSA9PSAwIHRoZW4gdXNlIAoJCXduZGNsYXNzLT5scHN6TWVudU5hbWUgdG8gbG9hZCBNZW51IGZyb20gcmVzb3VyY2U7CgpNb24gRmViIDIxIDIyOjM4OjI4IDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIHJ1bmluZyBETEwncyBhcyBtYWluIGV4ZWN1dGFibGUgcHJvYmxlbS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQWRkZWQgd2lsZGNhcmQgc3VwcG9ydCBpbiBET1NfcmVhZGRpcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgb2YgQlNEIHdpbnNvY2tldCBmdW5jdGlvbnMuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJS0VSTkVMX0RPUzNDYWxsIHJlbmFtZWQgdG8gRE9TM0NhbGwgYW5kIG1vZGlmaWVkIHRvIHVzZSBkb19pbnQyMSgpLgoKCSogW21haW4vbWFpbi5jXQoJQWRkZWQgZnVuY3Rpb25zIGZvciBHZXRWZXJzaW9uLCBHZXRXaW5GbGFncyBhbmQgR2V0VGltZXJSZXNvbHV0aW9uCglmb3IgbGlid2luZS5hLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIHBhcnRseSBpbXBsZW1lbnRlZC4KClR1ZSBGZWIgMjIgMTk6MDA6MDIgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJQWRkZWQgX1dpbk1haW4gZnVuY3Rpb24uIFNldHVwcyB0aGUgbGlicmFyeSAoY2FsbHMgVVNFUl9Jbml0QXBwKS4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgbG9hZF9tel9oZWFkZXIsIGxvYWRfbmVfaGVhZGVyLCBsb2FkX3R5cGVfaW5mbyBhbmQKCWxvYWRfbmFtZV9pbmZvIGZ1bmN0aW9ucy4KCgkqIFt0b29sa2l0L2hlYXAuY10gCglDb2RlIGNsZWFudXAuIAoKCSogW21pc2MvdXNlci5jXQoJTW92ZWQgZnJvbSBsb2FkZXIvbWlzYy5jLiBJIGhvcGUgdG8gcHV0IGJhY2sgYWxsIHRoZSBsb2FkZXIKCWZ1bmN0aW9ucyBpbiB0aGUgfmxvYWRlciBzdWJkaXJlY3RvcnkgaW4gdGhlIGZ1dHVyZS4gQ1VycmVudGx5IGlzCgluZWVkZWQgc2luY2UgaXQgaGFzIFVTRVJfSW5pdEFwcC4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglTaW5jZSBXaW5lTGliIHdpbGwgcHJvYmFibHkgbmVlZCBETExzIChjdXJyZW50bHkgaXQgbmVlZHMKCVN5c3Jlcy5kbGwpLiBXaW5lTGliIHdpbGwgYmUgdXNpbmcgbXVjaCBjb2RlIG9mIHRoZSBsb2FkZXIgYWdhaW4uCglTbyBJIHJlbW92ZWQgc29tZSBpZmRlZnMgdGhhdCB3ZXJlIHVzZWQgYnkgV2luZUxpYi4KCglBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKCWZ1bmN0aW9ucyBpbiBbdG9vbGtpdC9zdXAuY10KCglBZGRlZCBpbnRlZ2VyIGNvbnZlcnRpb24gZnVuY3Rpb25zIGluIHRoZSBuZWVkZWQgcGxhY2VzLgoKCUFkZGVkIHZlcnkgdWdseSBwYXRjaCAoaW5jbHVkZXMgd2luZS5jKS4gSW4gdGhlIG5leHQgcmVsZWFzZSBJCglwbGFuIHRvIG1vdmUgYmFjayBhbGwgdGhlIGxvYWRlciByb3V0aW5lcyB0byB+L2xvYWRlci4gSW4gdGhlCgltZWFudGltZSBJIG5lZWRlZCB0aGlzIHBhdGNoLiBJdCBkb2Vzbid0IGFmZmVjdCBhbnkgb2YgdGhlCgllbXVsYXRvciBjb2RlIChpdHMgaWZkZWZlZCBmb3IgV2luZUxpYikuCgoJKiBbbWlzYy9tYWluLmNdCglDbGVhbmVkIHVwIGNhbGwgdG8gV2luTWFpbiAobm93IHVzZXMgW3Rvb2xraXQvd2lubWFpbi5jXQoJSWZkZWZlZCBhcmd1bWVudCBudW1iZXIgY2hlY2tpbmcgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vZGlmaWVkIHRvIHVzZSBsb2FkXyhtenxuZSlfaGVhZGVyIGluc3RlYWQgb2YgZG9pbmcgYSBkaXJlY3QKCXJlYWQuICBXaGVuIGNvbXBpbGluZyB0aGUgZW11bGF0b3IgaXQgc3RpbGwgdXNlcyB0aGUgZGlyZWN0IHJlYWQKCWZvciBwZXJmb3JtYW5jZS4gCgoJKiBbaW5jbHVkZS93aW5lLmhdCglQcm90b3R5cGVzIGZvciBsb2FkaW5nIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvY2xhc3MuaF0KCUFkZGVkIFdJTkVfUEFDS0VEIG1hY3JvIGluc3RlYWQgb2YgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCgoJKiBbaW5jbHVkZS9hcmNoLmhdCglNYWNyb3MgZm9yIGNvbnZlcnRpbmcgaW50ZWdlcnMgKExpdHRsZSBlbmRpYW4gdG8gYmlnLWVuZGlhbikuCglOZWVkZWQgaW4gdGhlIFN1biB0byBhbGxvdyBsb2FkaW5nIG9mIERMTCBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEZlYiAxNCAyMzo0ODowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCU1vdmVkIGV2ZXJ5dGhpbmcgaW50byB3aW5kb3dzL3BhaW50aW5nLmMgYW5kIHJlbW92ZWQgdGhpcyBmaWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlKCkgaW4gTVNHX1JlbW92ZU1zZygpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBXTV9HRVRNSU5NQVhJTkZPIHN1cHBvcnQgZm9yIHdpbmRvdyByZXNpemluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBSZWRyYXdXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJQnVnIGZpeCBpbiBTY3JvbGxXaW5kb3dFeCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBVcGRhdGVXaW5kb3coKSB0byB3aW5kb3dzL3BhaW50aW5nLmMuCgpGcmkgRmViIDExIDEyOjQxOjI4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgkKCSogW2xvYWRlci93aW5lLmNdIFttaXNjL2Rvc19mcy5jXQoJZ2V0ZW52KCkgZXEgTlVMTCBidWdmaXhlcy4KCgkqIFttaXNjL2NvbW0uY10KCWNmbWFrZXJhdyBjaGFuZ2VkIGZvciBTdW5PUy4KCkZlYiAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbS9hdG9tLmNdCglCdWcgZml4IGluIEFUT01fRGVsZXRlQXRvbSgpIDogCgkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gRmF0YWxBcHBFeGl0KCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgZW1wdHkgc3R1YiBTZXRNYXBwZXJGbGFncygpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUJldHRlciBDaGVja01hcmsgJiBvdGhlciBiaXRtYXBzIHBsYWNlbWVudC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglOZXcgZnVuY3Rpb24gUm91bmRSZWN0KCkgOiBjYWxjLmV4ZSBub3cgd29ya2luZy4uLgoKVHVlIEZlYiAxNSAxNDoyOTozNyAxOTk0ICBKb2huIFJpY2hhcmRzb24KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBGaXhlZCBTdHJldGNoQmx0IHNvIGl0IHdvcmtzIHF1aWNrZXIgYW5kIGZhc3Rlci4gIEl0IHN0aWxsIGRvZXNuJ3QKICAgICAgICB1c2UgdGhlIFN0cmV0Y2hNb2RlIGJpdHMgZm9yIGJpdG1hcCBjb21wcmVzc2lvbiwgYnV0IHRoYXQgd2lsbAogICAgICAgIGNvbWUgc29vbi4KCk1vbiBGZWIgMTQgMTM6MjE6MDQgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKCSogW2luY2x1ZGUvd2luZG93cy5oLGRpYWxvZy5oLGdkaS5oXQoJQ2hhbmdlZCBfX2F0cmlidXRlX18gKChwYWNrZWQpKSBmb3IgV0lORV9QQUNLRUQuIAoJV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgdGhpcyBpcyBkZWZpbmVkIGFzIG5vdGhpbmcuIFRoaXMgZ2V0cwoJcmlkIHdpdGggYWxsIHRoZSBwcm9ibGVtcyBjb21waWxpbmcgdW5kZXIgU3VuT1MuIEFsc28gCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglBZGRlZCBEZWJ1Z1ByaW50U3RyaW5nLgoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCBoU3lzUmVzID0gMSBkZWZpbml0aW9uIHRvIHJlc29sdmUgZXh0ZXJuYWxzLgoJQWRkZWQgQ2FsbExpbmVEREFQcm9jIGZ1bmN0aW9uICh0b29sa2l0IHZlcnNpb24pLgoJQWRkZWQgdG95LCBhbmQgaGkgaW5lZmljaWVudCBtZW1tb3ZlIHVudGlsIGNvZGUgaW4gbWVzc2FnZS5jIGdldAoJcmV3cml0dGVuLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglJZmRlZmVkIGxpbnV4L2VtdWxhdG9yLWRlcGVuZGVudCBjb2RlIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9mCglXaW5lTGliLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBpZmRlZiB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUy4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglXaGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSwgdGhlIHJlc291cmNlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgaW4KCWEgZmlsZSBjYWxsZWQgJGFyZ3ZbMF0uUmVzLiBBbHNvIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcmVzb3VyY2UKCWlzIGV4cGVjdGVkIHRvIGJlIGF0IG9mZnNldCAwIG9mIHRoZSAuUmVzIGZpbGUuCgoJKiBbbWlzYy9tYWluLmNdCglDYWxsIFdpbk1haW4gd2l0aCBhcmd1bWVudHMgaWYgY29tcGlsaW5nIFdpbmVMaWIuCglDYWxsIHNodXRkb3duIGZ1bmN0aW9ucyAoQ29tbV9EZUluaXQsIERPU19EZUluaXRGUykuCglDYWxsIHN5bmNfcHJvZmlsZXMgdG8gcHJlc2VydmUgY2hhbmdlcyB0byAuSU5JIGZpbGVzLgoKCSogW21pc2MvY29tbS5jLGRvc19mcy5jXQoJcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChDb21tX0RlSW5pdCkKCXJlbW92ZWQgY2FsbCB0byBhdGV4aXQoRE9TX0RlSW5pdEZTKQoJU2h1dGRvd24gZnVuY3Rpb25zIGFyZSBub3cgY2FsbGVkIGZyb20gdGhlIHJldHVybiBvZiBXaW5NYWluCgoJKiByZW1vdmVkIG1lbW9yeWxpYiBzdWJkaXJlY3RvcnkKCgkqIG1vdmVkIG1lbW9yeS9hdG9tLmMgICAgdG8gbWlzYy9hdG9tLmMKCSAgbW92ZWQgbWVtb3J5bGliL2hlYXAuYyB0byB0b29sa2l0L2hlYXAuYwoKCSogW2xvYWRlci93aW5lLmNdCglNb3ZlZCBEZWJ1Z1ByaW50U3RyaW5nIHRvIHdpbmRvd3MvdXRpbGl0eS5jCgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglEZWZpbmUgU09fRE9OVExJTkdFUiBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRlZmluZWQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglhZGRlZCBkZWZpbml0aW9uIGZvciBETEdQUk9DLgoJYWRkZWQgZGVmaW5pdGlvbiBmb3IgTE1FTV9XSU5FX0FMSUdOIGFuZCBvdGhlciBMTUVNXyogY29uc3RhbnRzLgoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBXTkRQUk9DIGlzIGRlZmluZWQgd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMKCXRvIGF2b2lkIGNvbXBpbGF0aW9uIHByb2JsZW1zLgoKCSogW2luY2x1ZGUvdXNlci5oXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBVU0VSX0hFQVBfKEFMTE9DfFJFQUxMT0N8QUREUnxGUkVFKSB0aGUKCWNhbGxzIGFyZSB0cmFuc2xhdGVkIHRvIHRoZSBsaWJyYXJ5IGFsbG9jYXRpb24gcm91dGluZXMuCgoJKiBbaW5jbHVkZS9nZGkuaCx1c2VyLmhdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIEdESV9IRUFQXyhBTExPQ3xBRERSfEZSRUUpIHRoZSBjYWxscyBhcmUKCXRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2F0b20uaF0KCURlZmluZWQgTG9jYWxBbGlnbi4gV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0J3MgdHJhbnNsYXRlZCBhcwoJYSBjYWxsIHRvIExvY2FsQWxsb2MgKHRoZSBvcmlnaW5hbCBjb2RlKSwgd2hlbiBjb21waWxpbmcgV2luZUxpYgoJYXMgYSBjYWxsIHRvIExvY2FsQWxsb2Mgd2l0aCBhIFdJTkUtZmxhZyBjYWxsZWQgTE1FTV9XSU5FX0FMSUdOCgkoYXRvbS5jIG5lZWRzIGFsaWduZWQgZGF0YSBvbiBhIDQgYnl0ZSBib3VuZGFyeSkuCgoJKiBbbWlzYy9maWxlLmNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBhbmQgZml4ZWQgcHJvdG90eXBlcy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucwoJdXNpbmcgV2luZSBhcyBhIGxpYnJhcnkgKE9wZUZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xjcmVhdGUsCglfbGxzZWVrLCBfbG9wZW4sIF9sd3JpdGUpLgoKCSogW01ha2VmaWxlXQoJQ3JlYXRlIGxpYnJhcnkgaW5zdGVhZCBvZiBleGVjdXRhYmxlIHdoZW4gYnVpbGRpbmcgdGFyZ2V0CglsaWJ3aW5lLmEgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDggMTM6NTI6MTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUpCgoJKiBbTWFrZWZpbGVzXQoJVXNlICQoQ0MpIGluc3RlYWQgb2YgY2MuCglBZGRlZCBsaWJ3aW5lIHRhcmdldC4KCgkqIFtpbmNsdWRlL3Byb3RvdHlwZXNdCgkjaWZkZWZlZCBzZWN0aW9uIGZvciBXaW5lTGliCgoJKiBtb3ZlZCBsb2FkZXIvY3Vyc29yLmMgICB0byBtaXNjL2N1cnNvci5jCgkgIG1vdmVkIGxvYWRlci9yZXNvdXJjZS5jIHRvIG1pc2MvcmVzb3VyY2UuYwoJICBtb3ZlZCBtaXNjL2VtdWxhdGUuYyAgICB0byBtaXNjZW11L2VtdWxhdGUuYwoJICBtb3ZlZCBtaXNjL2ludDFhLmMgICAgICB0byBtaXNjZW11L2ludDFhLmMKCSAgbW92ZWQgbWlzYy9pbnQyMS5jCSAgdG8gbWlzY2VtdS9pbnQyMS5jCgkgIG1vdmVkCW1pc2Mva2VybmVsLmMJICB0byBtaXNjZW11L2tlcm5lbC5jCgkgIG1vdmVkIG1pc2MvdXNlci5jICAgICAgIHRvIG1pc2NlbXUvdXNlci5jCgoJKiBbbWVtb3J5bGliL2hlYXAuY10KCUhlYXAgbWFuYWdlbWVudCBmb3IgV2luZUxpYgoKCSogW21pc2MvY29tbS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGVycm5vLCBTdW5PUwoJZG9lc24ndCBoYXZlIGF0ZXhpdCAoKSkuCgoJKiBbbWlzYy9kb3NfZnMuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSB2ZnMuaCkKCgkqIFttaXNjL2ZpbGUuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TIChPUEVOX01BWCBjb25zdGFudCwKCSNpbmNsdWRlIHVuaXN0ZC5oKQoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGxpbWl0cykKCgkqIFt0b29sa2l0L3N1cC5jXQoJV2luZUxpYiB2ZXJzaW9uIG9mIENhbGxXaW5kb3dQcm9jLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVR5cGVkZWYgWFBvaW50ZXIgdW5kZXIgWDExUjQgKE9wZW5XaW5kb3dzKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiwgdXNlIGRpcmVjdCBjYWxsYmFja3MgaW5zdGVhZCBvZiB0aGUKCXdpbmRvd3Mgc3VwcGxpZWQgY2FsbGJhY2tzLgoKTW9uIEZlYiAgNyAyMjozNzozNCBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCU5ldyBmdW5jdGlvbiBDVVJTT1JfU2V0V2luQ3Vyc29yKCksIGZvciBpbnRlcm5hbCB1c2UsIHRvIHNldAoJdGhlIGN1cnNvciBvZiBhIHNwZWNpZmljIHdpbmRvdyBtb3JlIHJlbGlhYmx5IHRoYW4gd2l0aCBTZXRDdXJzb3IoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQmV0dGVyIHdpbmRvdyBtYW5hZ2VtZW50LiBNb3ZpbmcgYW5kIHJlc2l6aW5nIGZyb20gdGhlIHN5c3RlbQoJbWVudSBzaG91bGQgd29yayBub3cuCglBZGRlZCBzY3JvbGwtYmFyIG1vdXNlIHRyYWNraW5nLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBzY3JvbGwtYmFyIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiB0byBkZWZ3bmQuYy4KCkZlYiA1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gU3RkRHJhd01lbnVCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJTmV3IE5DX1RyYWNrTW91c2VNZW51QmFyKCkgZnVuY3Rpb24gd2hpY2ggY2FsbCAKCQlNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKSAmIE1lbnVNb3VzZU1vdmUoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgQ2hhbmdlTWVudSgpIGZ1bmN0aW9uLgoJUmVtb3ZlIHBlcm1hbmVudGx5IG9sZCBYdCBtZW51IGNvZGUuCglNYWtlIGNvbW1vbiBmdW5jdGlvbnMgTWVudUJ1dHRvbkRvd24oKSwgTWVudUJ1dHRvblVwKCkKCQkmIE1lbnVNb3VzZU1vdmUoKSBmb3IgYm90aCBwb3B1cHMgJiBtZW51YmFyLgoJCgkqIFtjb250cm9scy9jb21iby5jXQoJUGFpbnQgT0JNX0NPTUJPIGRpcmVjdGx5IGluIGNvbWJvIGNsaWVudC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggYnVnIGluIG11bHRpY29sdW1ucyBjYWxjdWxhdGlvbnMuCgoJKiBbY29udHJvbHMvTWFrZWZpbGVdCglSZW1vdmUgcnVsZXMgZm9yIG9sZCBmaWxlICdjYXB0aW9uLmMnLgoKCSogW21pc2Mva2VybmVsLmNdCglSZW1vdmUgZW1wdHkgc3R1YiBHZXRNb2R1bGVGaWxlTmFtZSgpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgR2V0TW9kdWxlSGFuZGxlKCkgZnVuY3Rpb24uCglOZXcgR2V0TW9kdWxlVXNhZ2UoKSBmdW5jdGlvbi4KCU5ldyBHZXRNb2R1bGVGaWxlTmFtZSgpIGZ1bmN0aW9uLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJVHJ5IHRvIGZpbmQgdGhlIGJ1ZyBhIG1pc3NpbmcgbWVudSBsb2FkaW5nIC4uLiBOb3QgZm91bmQgeWV0ICEKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlIG9sZCBtZW51YmFyIGNyZWF0aW9uLgoKVGh1IEZlYiAgMyAyMjozMDoxMSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2Mvd2luc29ja2V0LmNdCglNb3JlIGZ1bmN0aW9ucyBhZGRlZC4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIEpvaG4gQnJlemFrJ3Mgd2luc29jay5kbGwgc3R1ZmYuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDEgMjE6MTQ6NDcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGZ1bmN0aW9uIENyZWF0ZU5ld1NlZ21lbnRzKCkuICBNb2RpZmllZCBJUENDb3B5U2VsZWN0b3IKCXRvIGFsbG93IGFsaWFzaW5nIHRvIGFueSBhcmJpdHJhcnkgbWVtb3J5IHNwYWNlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIHBvdGVudGlhbCBidWcgaW4gR2xvYmFsR2V0RnJlZVNlZ21lbnRzKCkuCgoJKiBbbWVtb3J5L2xpbmVhci5jXQoJQ3JlYXRlZCBmdW5jdGlvbnMgR2xvYmFsTGluZWFyTG9jaygpIGFuZCBHbG9iYWxMaW5lYXJVbmxvY2soKS4KClR1ZSBGZWIgIDEgMDU6NTE6NDMgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVJlbW92ZWQgQ0FQVElPTiB3aW5kb3cgY2xhc3MuCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJQnVnIGZpeCBpbiBMb2FkQ3Vyc29yKCk6IGRvbid0IGFsbG9jYXRlIG1lbW9yeSBldmVyeSB0aW1lIGZvcgoJYnVpbHQtaW4gY3Vyc29ycy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbnZhbGlkYXRlIGNoaWxkIHdpbmRvd3MgaW4gSW52YWxpZGF0ZVJnbigpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCByZXBhaW50IG9mIHRoZSBjYXB0aW9uIHdoZW4gY2hhbmdpbmcgd2luZG93IHRleHQuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgU2V0Q2FwdHVyZSgpIHRvIGFsbG93IGtleWJvYXJkIGV2ZW50cyB3aGlsZSBjYXB0dXJpbmcuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpLCB0byBkbyBtb3VzZSB0cmFja2luZwoJd2l0aG91dCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgV2luZG93cyBwcm9ncmFtLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGZyYW1lIGRyYXdpbmcgZm9yIERMR01PREFMRlJBTUUgd2luZG93cy4KCVJld3JpdHRlbiB3aW5kb3cgbW92aW5nIGNvZGUsIHRvIHVzZSBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCkKCWluc3RlYWQgb2Ygbm9uLWNsaWVudCBtb3VzZSBldmVudHMgKHRoaXMgaXMgdGhlIHdheSBXaW5kb3dzCglkb2VzIGl0KSwgYW5kIHRvIHNlbmQgV01fRU5URVJTSVpFTU9WRSBtZXNzYWdlcy4KCVJlbW92ZWQgV01fTkNCVVRUT05VUCBhbmQgV01fTkNNT1VTRU1PVkUgaGFuZGxlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG9jYXRlIHRlbXBvcmFyeSBzdHJ1Y3R1cmVzIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZgoJdXNpbmcgR2xvYmFsQWxsb2MoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOUE9TX0dldE1pbk1heEluZm8oKSB0byBnZXQgc2l6aW5nIGluZm9ybWF0aW9ucy4KCkphbiAzMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIFN0ZERyYXdTY3JvbGxCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25Eb3duKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX0xCVVRUT05ET1dOLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25VcCgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9OVVAuCglDYWxsIHRvIE5DX1Njcm9sbEJhck1vdXNlTW92ZSgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9NT1VTRU1PVkUuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IEdldFN1Yk1lbnUoKSBmdW5jdGlvbi4KCU1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucyBmcm9tICd3aW5kb3dzL3dpbi5jJy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglTdGFydCBjaGFuZ2VzIHRvIHNhdGlzZnkgcmVjZW50IGNoYW5nZXMgaW4gc2Nyb2xsYmFycy93aW5kb3dzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUHV0IHNvbWUgY29kZSBpbiBMb2FkQWNjZWxlcmF0b3JzKCkgc3R1Yi4KCU5ldyBUcmFuc2xhdGVBY2NlbGVyYXRvcigpIGZ1bmN0aW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucy4KCUNhbGwgdG8gTkNfQ3JlYXRlU2Nyb2xsQmFycygpIGlmIHJlcXVpcmVkIGJ5IENyZWF0ZVdpbmRvdygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSmFuIDI0IDEwOjQwOjEwIEVTVCAxOTk0IEpvaG4gUmljaGFyZHNvbiAoanJpY2hhcmRAY3MudW1sLmVkdSkKCiAgICAgICAgKiBbd2luZG93L3dpbi5jXQogICAgICAgIEFkZGVkIGZ1bmN0aW9ucyBFbnVtV2luZG93cywgRW51bUNoaWxkV2luZG93cywgYW5kIGhlbHBlcgogICAgICAgIFdJTl9FbnVtQ2hpbGRXaW4uICBFbnVtV2luZG93cyB3b24ndCBsaXN0IGFsbCB3aW5lIHdpbmRvd3MKICAgICAgICBiZWNhdXNlIEdldERlc2t0b3BXaW5kb3cgaXNuJ3QgY29tcGxldGUuICBIb3dldmVyLCB0aGUgY29kZQogICAgICAgIGlzIGluIHBsYWNlIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseSBhbmQgb25seSBuZWVkcyAKICAgICAgICBHZXREZXNrdG9wV2luZG93IHRvIGRvIHNvLiAgCgpUdWUgSmFuIDI1IDA1OjUxOjQ3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgYWN0aXZhdGlvbiBtZXNzYWdlcyAoV01fQUNUSVZBVEUsCglXTV9OQ0FDVElWQVRFLCBXTV9NT1VTRUFDVElWQVRFKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCURlLWFjdGl2YXRlIHRoZSB3aW5kb3cgd2hlbiBsb3NpbmcgaW5wdXQgZm9jdXMuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeCBpbiBTZXRGb2N1cygpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgYWN0aXZhdGlvbiBvZiB0aGUgd2luZG93IG9uIG1vdXNlLWNsaWNrcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBub24tY2xpZW50IGFyZWEgcGFpbnRpbmcgdG8gdXNlIHRoZSBjb3JyZWN0IGNvbG9ycwoJZGVwZW5kaW5nIHVwb24gdGhlIGFjdGl2YXRpb24gc3RhdGUuCglBZGRlZCBXTV9OQ0FDVElWQVRFIG1lc3NhZ2UgaGFuZGxpbmcuCglGaXhlZCBhIGNvdXBsZSBvZiBidWdzIGluIHdpbmRvdyBtb3ZpbmcgYW5kIHJlc2l6aW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBHZXQvU2V0QWN0aXZlV2luZG93KCkuCglJbXBsZW1lbnRlZCBTV1BfTk9BQ1RJVkFURSBmbGFnIGluIFNldFdpbmRvd1BvcygpLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNZXNzYWdlQm94IGhhcyBhIENhcHRpb25CYXIgZm9yIGhpcyB0aXRsZSBleGNlcHQgZm9yCgkJTUJfU1lTVEVNTU9EQUwgd2l0aCBNQl9JQ09OSEFORC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gU3lzTWVudSBidXR0b24gbW91c2UgY2xpY2suCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIEFsdCBrZXkgKFZLX01FTlUpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBHZXRTeXN0ZW1NZW51KCkgZnVuY3Rpb24uCglOZXcgQ29weVN5c3RlbU1lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCU5ldyBOQ19UcmFja1N5c01lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU5ldyBXTV9JTklUTUVOVSwgV01fSU5JVE1FTlVQT1BVUCwgV01fTUVOVVNFTEVDVCAmIFdNX01FTlVDSEFSIGRlZmluZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKYW4gMTMgMTE6NDU6MTMgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW3dpbmRvdy93aW4uY10KCUFkZGVkIGZ1bmN0aW9ucyBFbmFibGVXaW5kb3csIElzV2luZG93RW5hYmxlZCwgYW5kIGhlbHBlciAKCVdJTl9TZXRTZW5zaXRpdmUuCgkKCSogW3dpbmRvdy9ldmVudC5jXQoJQWRkZWQgY2hlY2tzIGZvciBXU19ESVNBQkxFRCB3aW5kb3dzIGluIEVWRU5UX2tleSwgRVZFTlRfTW90aW9uTm90aWZ5LAoJRVZFTlRfQnV0dG9uUHJlc3MsIEVWRU5UX0J1dHRvblJlbGVhc2UsIEVWRU5UX0NvbmZpZ3VyZU5vdGlmeSwKCUVWRU5UX0ZvY3VzSW4sIEVWRU5UX0ZvY3VzT3V0LCBhbmQgRVZFTlRfRW50ZXJOb3RpZnkuICBLZXkgYW5kIAoJYnV0dG9uIHByZXNzZXMgYmVlcCBmb3IgYSBkaXNhYmxlZCB3aW5kb3cuICAKCUlmIGFueW9uZSBmaW5kcyBiZXR0ZXIgcGxhY2VzIGZvciB0aGVzZSBjaGVja3MsIHBsZWFzZSB0ZWxsIG1lLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglDbGVhbnVwIG9uIGJ1dHRvbnMgYW5zd2VyIHZhbHVlIHJldHVybmVkLgoKCSogW2NvbnRyb2wvY29tYm8uY10KCU5vdyB1c2UgT0JNX0NPTUJPIGJpdG1hcCBkcm9wZG93biBidXR0b24uCgpNb24gSmFuIDE3IDIxOjU2OjQ1IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tL2NdCglBIGZldyBidWdmaXhlcy4KClR1ZSBKYW4gMTggMDY6MzY6NDggMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCUFkZGVkIFggY3Vyc29yIGZvciBJRENfU0laRU5TIGFuZCBJRENfU0laRVdFLgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdICAoTmV3IGZpbGVzKQoJUmV3cm90ZSBtYWluKCkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiBYdCBhcHBsaWNhdGlvbiBjb250ZXh0LAoJYW5kIGFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2Ugb2YgYSBwcml2YXRlIG1hcCBub3cgY29uZmlndXJhYmxlIHdpdGggY29tbWFuZC1saW5lIG9wdGlvbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgV01fU1lTQ09NTUFORCBoYW5kbGluZywgYW5kIGJldHRlciBXTV9TRVRDVVJTT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUmVtb3ZlZCBDb25maWd1cmVOb3RpZnkgZXZlbnQgaGFuZGxlciAobm8gbG9uZ2VyIG5lZWRlZCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglTZW5kIFdNX1NFVENVUlNPUiBtZXNzYWdlIG9uIG1vdXNlIGV2ZW50cy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIE9FTSBiaXRtYXBzIGZvciB0aGUgZHJhd2luZyBvZiB0aGUgbm9uLWNsaWVudCBhcmVhLgoJQWRkZWQgY2FwdGlvbiBiYXIgYnV0dG9ucyBoYW5kbGluZywgYW5kIG1vdmluZyBhbmQgcmVzaXppbmcgb2YKCXRoZSB3aW5kb3cgdmlhIHRoZSB3aW5kb3cgZnJhbWUgKGJ5cGFzc2luZyB0aGUgd2luZG93IG1hbmFnZXIpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXQgdGhlIG92ZXJyaWRlX3JlZGlyZWN0IGZsYWcgZm9yIHdpbmRvd3MgKHRvIGJ5cGFzcyB3aW5kb3cKCW1hbmFnZXIpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBXaW5kb3dGcm9tUG9pbnQoKSwgQ2hpbGRXaW5kb3dGcm9tUG9pbnQoKSwKCUJyaW5nV2luZG93VG9Ub3AoKSwgR2V0L1NldEludGVybmFsV2luZG93UG9zKCksCglHZXQvU2V0V2luZG93UGxhY2VtZW50KCkuCgpNb24gSmFuIDE3IDIwOjQ4OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2hlYXAuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxvY2FsIGhlYXBzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSmFuICA0IDEzOjAxOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbd2luZG93L2NhcmV0LmNdCiAgICAgICAgTW9kaWZpZWQgY29kZSB0byB1c2Ugc3lzdGVtIHRpbWVyLgoKSmFuIDksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2luZG93cyBjcmVhdGUgaWYgcmVxdWlyZWQgbmV3IFhMSUIgTWVudUJhciAmIENhcHRpb25CYXIuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVdNX0NBTENTSVpFIE1vdmUgJiBSZXNpemUgY2FwdGlvbiwgbWVudWJhciAmIHNjcm9sbGJhcnMuCgkoSSdtIG5vdCBzdXJlIGl0J3MgdGhlIGdvb2QgcGxhY2UgZm9yIGl0LCBidXQgaXQgd29yay4uLikKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCW9wdGltaXplIGluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyLCBtYWtlIGxzZWVrKCkgaWYgbmV4dCB0eXBlIC4uLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJc2Nyb2xsYmFyIGJ1dHRvbnMgYXJlIG5vdyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCgoJKiBbY29udHJvbHMvY2FwdGlvbi5jXSAtIG5ldyBmaWxlIC4uLgoJY2FwdGlvbmJhciBzaG93aW5nIHRpdGxlLCBjbG9zZSBidXR0b24gd2l0aCBTeXNNZW51LAoJYW5kIG90aGVyIGJ1dHRvbnMgdXNpbmcgc3lzdGVtIHJlc291cmNlcyBiaXRtYXBzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnM6IFNldE1lbnVJdGVtQml0bWFwcygpIHdpdGggJ2dsdWVzJywKCU1ha2UgbmV3IHZlcnNpb24gb2YgTG9hZE1lbnUoKSAmIFBhcnNlTWVudSgpLAoJKCBwdXQgI2RlZmluZSBVU0VfUE9QVVBNRU5VICkuCglJbXBsZW1lbnRhdGlvbiBvZiBNZW51QmFyIGZ1bmN0aW9ucy4KCQoJKiBbc3lzcmVzLmRsbF0KCU5ldyBiaXRtYXBzIGZvciBzeXN0ZW0gc3VjaCBPQk1fQ0xPU0UsIE9CTV9NSU5JTUlaRSwgT0JNX1VQQVJST1dJLgoJTmV3IFNZU01FTlUgbWVudSwgaXQgZG9uJ3Qgd29yayB5ZXQgISA6LSgoCgpUdWUgSmFuIDExIDA1OjI3OjQ1IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW21lbW9yeS9hdG9tLmNdCglGaXhlZCBhIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGF0b21zIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLgoKCSogW21pc2MvcmVjdC5jXQoJQnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglCdWcgZml4IHdoZW4gc2V0dGluZyB0aGUgY2xpcCBtYXNrIHRvIGFuIGVtcHR5IHJlZ2lvbi4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQnVnIGZpeCBpbiBSZWxlYXNlREMoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ2FsbCBBZGp1c3RXaW5kb3dSZWN0RXgoKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGRpYWxvZyB3aW5kb3cuCglBZGRlZCBzdXBwb3J0IGZvciBEU19NT0RBTEZSQU1FIHN0eWxlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNsZWFuZWQgdXAgZXZlbnQgaGFuZGxpbmcgYW5kIHJlbW92ZWQgb2xkIFh0IHN0dWZmLgoJTW92ZWQgZG91YmxlLWNsaWNrIGhhbmRsaW5nIHRvIHdpbmRvd3MvbWVzc2FnZS5jCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeDogb25seSBzZXQgdGhlIFggZm9jdXMgd2hlbiB0aGUgd2luZG93IGlzIHZpZXdhYmxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBEcmF3UmVsaWVmUmVjdCgpIHRvIHVzZSBicnVzaCBpbnN0ZWFkIG9mIHBlbiwgYW5kCgl0byB1c2UgdGhlIHN5c3RlbSBjb2xvcnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXTV9OQ0hJVFRFU1QgbWVzc2FnZSBzZW5kaW5nLCBhbmQgbm9uLWNsaWVudAoJbW91c2UgbWVzc2FnZXMuCglDbGVhbmVkIHVwIGRvdWJsZS1jbGljayBoYW5kbGluZywgYW5kIHJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gIChOZXcgZmlsZSkKCUltcGxlbWVudGVkIEFkanVzdFdpbmRvd1JlY3QoKS4KCUltcGxlbWVudGVkIFdNX05DQ0FMQ1NJWkUsIFdNX05DSElUVEVTVCBhbmQgV01fTkNQQUlOVCBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglBZGRlZCBzZW5kaW5nIG9mIHRoZSBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdICAoTmV3IGZpbGVzKQoJSW1wbGVtZW50ZWQgc3lzdGVtIG1ldHJpY3MuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXggaW4gc2V0dGluZyB0aGUgcGFyZW50IGFuZCBvd25lciBpbiBDcmVhdGVXaW5kb3coKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHNlbmRpbmcgb2YgdGhlIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBTZXRXaW5kb3dQb3MoKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgpTdW4gSmFuICAyIDEyOjM4OjUzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglJbXBsZW1lbnRlZCBHZXRDbGFzc05hbWUgYW5kIEdldENsYXNzSW5mby4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglWYXJpb3VzIGltcHJvdmVtZW50cyB0byB0ZXh0IGNhcmV0IGNvZGUuCgpGcmkgRGVjIDMxIDE1OjIyOjIyIDE5OTMgIEpvaG4gQnJlemFrIDxicmV6YWtAYXBvbGxvLmhwLmNvbT4KCgkqIFttaXNjL2NvbW0uY10KCVBhdGNoZXMgdG8gd29yayB3aXRoIE5ldEJTRC4KClRodSBEZWMgMzAgMTI6MTE6NTUgMTk5MyAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW29iamVjdHMvYml0Ymx0LmNdIEFkZGVkIFN0cmV0Y2hCbHQoKS4KClR1ZSBKYW4gIDQgMDU6MjI6MDcgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW21pc2MvdXNlci5jXQoJQWRkZWQgY3JlYXRpb24gb2Ygc3lzdGVtIG1lc3NhZ2UgcXVldWUuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUFkZGVkIERDIHNpemUgZmllbGRzIGludG8gREMgc3RydWN0dXJlLgkJCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJQnVnIGZpeCBpbiBDTElQUElOR19JbnRlcnNlY3RSZWN0KCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWxsb2NhdGUgYSBEQ0UgaW5zdGVhZCBvZiBhIERDIGZvciBDU19DTEFTU0RDIGNsYXNzZXMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJRml4ZWQgR2V0VXBkYXRlUmVjdCgpIGFuZCBHZXRVcGRhdGVSZ24oKSB0byBjbGlwIHRvIHRoZSBjbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgR2V0RENFeCgpIGFuZCBHZXRXaW5kb3dEQygpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglJbXBsZW1lbnRlZCBXTV9XSU5ET1dQT1NDSEFOR0VEIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFhsaWIgZXZlbnQgaGFuZGxpbmcgaW5zdGVhZCBvZiBYdCBjYWxsYmFja3MuCglDaGFuZ2VkIE1TR19BZGRNc2coKSBjYWxscyB0byBoYXJkd2FyZV9ldmVudCgpIG9yIFBvc3RNZXNzYWdlKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBtdWx0aXBsZSBtZXNzYWdlIHF1ZXVlcy4KCUltcGxlbWVudGVkIGhhcmR3YXJlX2V2ZW50KCkgdG8gc3RvcmUgbWVzc2FnZXMgaW50byB0aGUgc3lzdGVtIHF1ZXVlLgoJSW1wbGVtZW50ZWQgR2V0L1NldFRhc2tRdWV1ZSgpLgoJQmV0dGVyIFdNX1BBSU5UIGFuZCBXTV9USU1FUiBoYW5kbGluZy4KCUNoYW5nZXMgdG8gdXNlIFhsaWIgaW5zdGVhZCBvZiBYdCBmb3IgZXZlbnRzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCVVzZSBHZXREQ0V4KCkgdG8gcmV0cmlldmUgdGhlIERDLCB0byBnZXQgYSBjb3JyZWN0IHZpc2libGUgcmVnaW9uLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCU1vdmVkIHRoZSB0aW1lciBwcm9jZWR1cmUgY2FsbGJhY2sgaW50byBEaXNwYXRjaE1lc3NhZ2UoKS4KCUNoYW5nZWQgaW1wbGVtZW50YXRpb24gdG8gZ2V0IHJpZCBvZiBYdCB0aW1lb3V0cy4gIFRpbWVyIGNoZWNraW5nCglpcyBub3cgZG9uZSBpbnNpZGUgR2V0TWVzc2FnZSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvY2F0ZSBhIERDRSBpbnN0ZWFkIG9mIGEgREMgZm9yIENTX09XTkRDIHdpbmRvd3MuCglSZXBsYWNlZCBYdCBjYWxscyB3aXRoIFhsaWIgY2FsbHMuCglNb3ZlZCB3aW5kb3cgcG9zaXRpb25pbmcgZnVuY3Rpb25zIGludG8gd2luZG93cy93aW5wb3MuYwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdICAoTmV3IGZpbGUpCglSZXdyaXR0ZW4gbW9zdCBvZiB0aGUgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldFdpbmRvd1BvcygpIGFuZCBNYXBXaW5kb3dQb2ludHMoKS4KCkphbiAzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUJhZCBhcmd1bWVudHMgZGVzY3JpcHRpb24gZm9yIGZ1bmN0aW9uIFNldERsZ0l0ZW1UZXh0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRnVuY3Rpb24gRHJhd1RleHQgbm93IGhhbmRsZSBEVF9DQUxDUkVDVCByZXF1ZXN0LgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTWVzc2FnZSBib3hlcyBub3cgdXNlIERyYXdUZXh0IHdpdGggRFRfQ0FMQ1JFQ1QuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBmdW5jdGlvbiBGcmFtZVJlY3QsIChpdCB3YXMgdXNpbmcgUEVOIGluc3RlYWQgb2YgQlJVU0gpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4IGZvciBmbGFncyBpbiBmdW5jdGlvbiBTaG93V2luZG93LgoJTW9yZSBhY2N1cmF0ZSBXTV9TSVpFIGdlbmVyYXRlZCBieSBmdW5jdGlvbiBTaG93V2luZG93LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUgY29kZSBmb3IgTEJTX01VTFRJUExFU0VMLgoJTW9yZSBjb2RlIGZvciBMQlNfTVVMVElDT0xVTU4uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglCYWQgZGVmaW5lIGZvciBNRl9TRVBBUkFUT1IuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uczogUG9wTWVudVduZFByb2MoKSB3aXRoICdnbHVlcycsCglDcmVhdGVQb3B1cE1lbnUoKSwgQXBwZW5kTWVudSgpLCBJbnNlcnRNZW51KCksIFJlbW92ZU1lbnUoKSwgCglEZWxldGVNZW51KCksIE1vZGlmeU1lbnUoKSwgVHJhY2tQb3B1cE1lbnUoKS4KCUNvZGUgaW4gc3R1YnM6IENyZWF0ZU1lbnUoKSwgRGVzdHJveU1lbnUoKS4gCgpTYXQgSmFuICAxIDEwOjIyOjQzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvd2luZS5jOiBBZGRlZCBzdXBwb3J0IGZvciByZWxvY2F0aW9uIHR5cGVzIDUgYW5kIDYuCgpNb24gRGVjIDI3IDExOjA2OjAzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tLmNdCgluZXcgZnVuY3Rpb25zOiBCdWlsZENvbW1EQ0IoKSwgT3BlbkNvbW0oKSwgQ2xvc2VDb21tKCksCglTZXRDb21tQnJlYWsoKSwgQ2xlYXJDb21tQnJlYWsoKSwgRXNjYXBlQ29tbUZ1bmN0aW9uKCksIEZsdXNoQ29tbSgpLAoJR2V0Q29tbUVycm9yKCksIFNldENvbW1FdmVudE1hc2soKSwgR2V0Q29tbUV2ZW50TWFzaygpLAoJU2V0Q29tbVN0YXRlKCksIEdldENvbW1TdGF0ZSgpLCBUcmFuc21pdENvbW1DaGFyKCksIFJlYWRDb21tKCksIAoJV3JpdGVDb21tKCkuCgpXZWQgRGVjIDIyIDEzOjAwOjE1IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglJbXBsZW1lbnRlZCB0ZXh0IGNhcmV0IGZ1bmN0aW9ucy4KClR1ZSBEZWMgMjEgMDY6MTM6NTggMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci93aW5lLmNdCglCdWcgZml4IGluIExvYWRJbWFnZSgpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3RleHQuY10KCSAgW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNb2RpZmllZCBncmFwaGljcyBjYWxscyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgREMgb3JpZ2luLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBXTV9OQ0NBTENTSVpFIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIG9uIHJlc2l6ZSBldmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2UgaW4gQ3JlYXRlV2luZG93KCkuCglSZWFsaXplIHdpZGdldHMgYXQgY3JlYXRpb24gdGltZSAoc2hvdWxkIHByZXZlbnQgcHJvYmxlbXMgd2l0aAoJdW5yZWFsaXplZCB3aWRnZXRzKS4KCkRlYyAxOSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJU2VuZCBtb3VzZSAmIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNlbmQga2V5Ym9hcmQgbWVzc2FnZSByZWNlaXZlZCB0byBpdHMgcGFyZW50LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZCBOYXZpZ2F0aW9uIGtleXMgLgoJTGlzdEJveCBub3cgdXNlIFZTQ1JPTEwgJiBIU0NST0xMIGluc3RlYWQgb2YgY2hpbGRyZW4uCglBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSVBMRVNFTC4KCUFscGhhIHZlcnNpb24gb2YgTEJTX01VTFRJQ09MVU1OLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGQgTmF2aWdhdGlvbiBrZXlzIG9uIGNsb3NlZCBDb21ib0JveC4KCVJlbW92ZSB1c2VsZXNzICdDT01CT0JPWF9DcmVhdGVDb21ib0JveCcgZnVuY3Rpb24uCgpNb24gRGVjIDE5IDIwOjM5OjM0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbG9hZGVyL3dpbmUuCglMb2FkSW1hZ2UoKSBtb2RpZmllZCB0byB1c2UgRmluZEZpbGUoKS4KCgkqIFttaXNjL2ZpbGUuY10KCVNldEVycm9yTW9kZSBhZGRlZAoKCSogW21pc2MvZG9zX2ZzLmNdCglidWcgZml4ZXMuCgpEZWMgMTMsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglidWcgZml4IGluIEdsb2JhbEdldEZyZWVTZWdtZW50IDogZ29vZCBwdHIgaW4gJ2dfcHJldicuCgoJKiBbc3lzcmVzLmRsbF0KCXByZWxpbWluYXJ5IHZlcnNpb24gb2YgYSAnZ2xhc3Mgb2Ygd2luZScgYml0bWFwCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uICdHZXRDYXB0dXJlJy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVJlbW92ZSB1c2VsZXNzICdTQ1JPTExCQVJfQ3JlYXRlU2Nyb2xsQmFyJyBmdW5jdGlvbi4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZW1vdmUgdXNlbGVzcyAnTElTVEJPWF9DcmVhdGVMaXN0Qm94JyBmdW5jdGlvbi4KCk1vbiBEZWMgMTMgMTM6NTE6MDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW29iamVjdHMvZm9udC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gR2V0Q2hhcldpZHRoKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgRVZFTlRfa2V5IHRvIHNlbmQgV2luZG93cyB2aXJ0dWFsIGtleSBjb2RlcyBmb3IKCVdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG1lc3NhZ2VzLCBhbmQgYSBXTV9DSEFSIG1lc3NhZ2UKCWZvciBwcmludGFibGUgY2hhcmFjdGVycy4KCldlZCBEZWMgMDggMTk6MjA6MDAgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGhuMzI0d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBQb2x5bGluZSBhbmQgUG9seWdvbgoKTW9uIERlYyAxMyAxNDo1MTo1NCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEaXJlY3RvcnkoKSBtb2RpZmllZCB0byB1c2UgZG9zX2ZzLmMncyBmdW5jdGlvbnMgdG8KCWFjY2VzcyBmaWxlcyZ8ZHJpdmVzLgoKU2F0IERlYyAwNCAxNzowNDoyMyAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgCUFkZGVkIEZpbmRGaWxlKCkgdG8gc2VhcmNoIGEgZmlsZSBpbiBhIGRvcy91bml4IHN0eWxlIHBhdGguCgkKCSogW21pc2MvZmlsZS5jXQoJTmV3IFdpbjMxIGZ1bmN0aW9uczogT3BlbkZpbGUsIF9sY3JlYXRlLCBfbGxzZWVrLCBHZXRUZW1wRHJpdmUsCglHZXRUZW1wRmlsZU5hbWUsIEdldFdpbmRvd3NEaXJlY3RvcnksIEdldFN5c3RlbURpcmVjdG9yeSwKCUdldERyaXZlVHlwZS4JCQkgICAKCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKV2VkIERlYyAgMSAxNjoyMDo0NSAxOTkzICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgogICAgICAgICogW21pc2MvcHJvZmlsZS5jXQogICAgICAgIFRoZSBQcm9maWxlIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlcy4gVGhleSBub3cKICAgICAgICBpbXBsZW1lbnQgYWxsIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gdGhlIFNESy4KClR1ZSBOb3YgMzAgMTM6NTU6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVJld3JvdGUgc2VsZWN0b3IgYWxpYXNpbmcgcm91dGluZXMgdG8gdXNlIFN5c3RlbSBWIElQQwoJcm91dGluZSB0byBhbGlhcyBtZW1vcnkgc2VnbWVudHMuCgpOb3YgMjgsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGNvbnNpc3RlbmN5IGluIGZ1bmN0aW9ucyB1c2luZyB3SW5kZXhlcwoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTmV3IGZ1bmN0aW9uIDogU2hvd1Njcm9sbEJhcigpLgoKCSogW2xvYWRlci9jdXJzb3IuY10gLi4uIE5ldyBmaWxlCglNb3ZlIGN1cnNvciBmdW5jdGlvbnMgZnJvbSBbbG9hZGVyL3Jlc291cmNlLmNdLgoJTmV3IGZ1bmN0aW9uIDogQ2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogR2V0Q2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogQ3JlYXRlQ3Vyc29yKCkuCglTZXRDdXJzb3IoKSBub3cgd29ya2luZyB1c2luZyBnbG9hYmFsIHZhcmlhYmxlICd3aW5IYXNDdXJzb3InLgoKCSpbb2JqZWN0L3BhbGV0dGUuY10KCU5ldyBzdHViIG9ubHkgOiBTZWxlY3RQYWxldHRlKCkuCglOZXcgc3R1YiBvbmx5IDogUmVhbGl6ZVBhbGV0dGUoKS4KCgkqW3dpbi9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uIDogRVZFTlRfZW50ZXJfbm90aWZ5KCksCgkJdXBkYXRlICd3aW5IYXNDdXJzb3InIGFuZCBzZW5kIFdNX1NFVENVUlNPUi4KCgkqW3dpbi9kZWZ3bmQuY10KCUFkZCBwcm9jZXNzaW5nIG9mIFdNX1NFVENVUlNPUiBtZXNzYWdlLgoKCSpbd2luL3dpbi5jXQoJTmV3IG1lbWJlcnMgaW4gV05EIHN0cnVjdHVyZSA6IGhDdXJzb3IsIGhXbmRWU2Nyb2xsICYgaFduZEhTY3JvbGwuIAoJQ3JlYXRlV2luZG93RXgoKSBub3cgY3JlYXRlIGNoaWxkcmVuIGZvciBXTV9IU0NST0xMICYgV01fVlNDUk9MTC4KCU5ldyBmdW5jdGlvbiBDbGllbnRUb1NjcmVlbigpLgoJTmV3IGZ1bmN0aW9uIFNjcmVlblRvQ2xpZW50KCkuCgpNb24gTm92IDI1IDE4OjI1OjQwIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgogICAgICAgCSogW2ZpbGVzLmggLyByZWdmdW5jLmggLyBtaXNjL2Rvcy5jXQogICAgICAgCVJlbW92ZWQuCgogICAgICAgCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAJQWRkZWQgc3VwcG9ydCBmb3IgbG9hZGluZyBkb3Nkcml2ZSBjZmcgZnJvbSB3aW5lLmluaS4KCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKCldlZCBOb3YgMjQgMTE6Mzc6MzMgMTk5MyAganVsbGlhcmRAZGlzdW5zMi5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttZW1vcnkvYXRvbS5jXQoJSW1wbGVtZW50ZWQgYXRvbXMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgUmVnaXN0ZXJDbGFzcygpIHRvIHVzZSBhdG9tcy4KCUltcGxlbWVudGVkIENTX0dMT0JBTENMQVNTIHN0eWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKCkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIExvYWRSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCBDcmVhdGVEaWFsb2dQYXJhbSgpIHRvIHVzZSBGaW5kL0xvYWRSZXNvdXJjZSgpLgoKTW9uIE5vdiAyMiAxMzo1ODo1NiAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW3dpbmRvd3Mvc2Nyb2xsLmNdCglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbnMgb2YgU2Nyb2xsV2luZG93LCBTY3JvbGxEQyBhbmQKICAgICAgICBTY3JvbGxXaW5kb3dFeC4KCk5vdiAyMSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU9wdGltaXphdGlvbiBvZiByZWRyYXcgZHVyaW5nICdBZGQnIG9yICdJbnNlcnQnLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJT3B0aW1pemF0aW9uIG9mIFdNX1BBSU5UIGR1cmluZyAndGh1bWJ0cmFja2luZycuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGQgb2YgYmV0YSBpbXBsZW1lbnQgb2YgJ0JTX09XTkVSRFJBVycKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCVN0eWxlICdTU19JQ09OJyBuZXcgc3VwcG9ydGVkLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJQmVnaW4gb2YgaW1wbGVtYW50YXRpb24gb2YgTUJfWFhYIHN0eWxlcy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZ1bmN0aW9uIExvYWRJY29uKCkgOiBub3cgcHJlcGFyZSB0cmFuc3BhcmVuY3kgQml0bWFwIG1hc2suCglGdW5jdGlvbiBMb2FkQ3Vyc29yKCkgOiBub3cgcHJlcGFyZSBhICdYIHBpeG1hcGN1cnNvcicuCglOZXcgZnVuY3Rpb24gU2V0Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCglOZXcgZnVuY3Rpb24gU2hvd0N1cnNvcigpIDogbm90IGZpbmlzaGVkLgoJTmV3IGZ1bmN0aW9uIEFjY2Vzc1Jlc291cmNlKCkgOiBzdHViLgoKCSogW29iai9kaWIuY10KCUZ1bmN0aW9uIERyYXdJY29uKCk6IGRldWdnaW5nIHBoYXNlIG9mIGljb24gdHJhbnNwYXJlbmN5IG1hc2suCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCW5ldyBmaWxlIGZvciBuZXdzIGZ1bmN0aW9ucyBMb2FkTGlicmFyeSgpICYgRnJlZUxpYnJhcnkoKS4KCgkqIFtzeXNyZXMuZGxsXQoJUmVzb3VyY2VzIG9ubHkgMTZiaXRzIERMTCBmb3IgU3lzdGVtIFJlc291cmNlcywgaWNvbnMsIGV0Yy4uLgoKU3VuIE5vdiAxNCAxNDozOTowNiAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglTaW1wbGlmaWVkIGRpYWxvZyB0ZW1wbGF0ZSBwYXJzaW5nLgoJSW1wbGVtZW50ZWQgRGlhbG9nQm94SW5kaXJlY3QoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgYnVnIGluIENyZWF0ZVdpbmRvdygpIHdoZW4gYWJvcnRpbmcgd2luZG93IGNyZWF0aW9uLgoJTW9kaWZpZWQgVXBkYXRlV2luZG93KCkgdG8gb25seSB1cGRhdGUgdmlzaWJsZSB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgSXNXaW5kb3coKS4KCk5vdiAxNCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdyA6IG5ldyBtZXNzYWdlcy4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU1vdmVkIHN0dWIgTWVzc2FnZUJveCgpIHRvIHRoaXMgbmV3IGZpbGUuCglJbXBsZW1lbnRlZCBvZiBhIGNhbGxiYWNrLCBub3cgTWVzc2FnZUJveCBzaG93IGEgd2luZG93LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTmV3IGZ1bmN0aW9uIERlc3Ryb3lJY29uKCkKCU5ldyBmdW5jdGlvbiBEZXN0cm95Q3Vyc29yKCkKCUZpbGxlZCBzdHViIExvYWRJY29uKCkKCUZpbGxlZCBzdHViIExvYWRDdXJzb3IoKQoJQnVnIGZpeGVkIGluIEZpbmRSZXNvdXJjZUJ5TmFtZSgpIDogbWlzc2luZyBsc2VlaygpLgoKCSogW29iai9kaWIuY10KCU5ldyBmdW5jdGlvbiBEcmF3SWNvbigpCgoJKiBbd2luZG93cy93aW4uY10KCU5ldyBmdW5jdGlvbiBDbG9zZVdpbmRvdygpCglOZXcgZnVuY3Rpb24gT3Blbkljb24oKQoJTmV3IGZ1bmN0aW9uIElzSWNvbmljKCkKCU5ldyBGdW5jdGlvbiBGaW5kV2luZG93KCkKClN1biBOb3YgMTQgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVdyb3RlIEFsbG9jQ1N0b0RTQWxpYXMoKSBhbmQgQWxsb2NEU3RvQ1NBbGlhcygpCgpTdW4gTm92IDE0IDA4OjI3OjE5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglXcm90ZSBBbGxvY1NlbGVjdG9yKCkgYW5kIFByZXN0b0NoYW5nb1NlbGVjdG9yKCkuICBZVUshCgpTYXQgTm92IDEzIDEzOjU2OjQyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglXcm90ZSBGaW5kUmVzb3VyY2UoKSwgTG9hZFJlc291cmNlKCksIExvY2tSZXNvdXJjZSgpLAoJYW5kIEZyZWVSZXNvdXJjZSgpCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3NpZ25hbC5oXQoJQ2hhbmdlZCBzZWxlY3RvciBhbGxvY2F0aW9uIG1ldGhvZC4KClN1biBOb3YgMTAgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtpZjE2MzIvY2FsbGJhY2suYyBpZjE2MzIvY2FsbC5TIGlmMTYzMi91c2VyLnNwZWNdIAoJYWRkZWQgQ2F0Y2ggKEtFUk5FTC41NSkgYW5kIFRocm93IChLRVJORUwuNTYpCgkKTm92IDcsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlCdWcgcmVzb2x2ZWQgOiBQYWludGluZyBtZXNzYWdlIGJlZm9yZSBzY3JvbGwgdmlzaWJsZS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJRGVzdHJveSBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlEZXN0cm95IGNsZWFudXAuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCgkJR2V0Q2hlY2sgTWVzc2FnZSBub3cgcmV0dXJuIGlzIHN0YXRlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglOZXcgZnVuY3Rpb24gSXNXaW5kb3dWaXNpYmxlKCkKCk1vbiBOb3YgIDEgMTQ6NDA6MjEgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglSZW1vdmVkIHNvbWUgZHVwbGljYXRlIGVudHJpZXMuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkaWFsb2cgdW5pdHMgYW5kIGZvbnRzLgoJQWRkZWQgcHJlbGltaW5hcnkgbG9hZGluZyBvZiBkaWFsb2cgcmVzb3VyY2VzLgoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gb2YgRGlhbG9nQm94KCkuCglJbXBsZW1lbnRlZCBHZXQvU2V0RGxnSXRlbSogZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZS4KCUltcGxlbWVudGVkIENyZWF0ZVdpbmRvd0V4KCkgYW5kIEdldFdpbmRvdygpLgoJQ29tcGxldGVkIERlc3Ryb3lXaW5kb3coKS4KCk1vbiBOb3YgIDEgMTg6MTk6MzQgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBpbnQgMHgxMSAmIDB4MTIuCgogICAgICAgICogW2xvYWRlci9pbnQyMS5jXQoJSW1wcm92ZWQgZnVuY3Rpb24gaGFuZGxpbmcuCgpTdW4gT2N0IDMxIDEyOjM4OjA5IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGVkIEdldENoYXJXaWR0aCgpLgoKV2VkIE9jdCAyNyAwOTo1NjowNiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGNoLmhwLmNvbT4KCgkqIFtNYWtlZmlsZV0KICAgICAgICBVc2UgR05VIG1hbGxvYy4KCgkqIFtpbmNsdWRlL2ludDIxLmggaW5jbHVkZS93aW5lLmhdCiAgICAgICAgQ2hhbmdlIHNjX2VmbGFncyB0byBzY19lZmwgLgoKCSogW2luY2x1ZGUvd2luZS5oXQogICAgICAgIEZpeCBtaXNwbGFjZWQgI2VuZGlmCiAgICAgICAgSW5jbHVkZSA8c2lnbmFsLmg+IGZvciBOZXRCU0QKCgkqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBEb24ndCBpbmNsdWRlIDxzeXMvdmZzLmg+IGluIE5ldEJTRAogICAgICAgIERvIGluY2x1ZGUgPHN5cy9tb3VudC5oPiBpbiBOZXRCU0QKICAgICAgICBDbGVhbnVwIHNvbWUgbGludC4KCk1vbiBPY3QgMjYgMTc6NTk6MDEgMTk5MyAgRXJpayBCb3MKCiAgICAgICAgKiBbaW5jbHVkZS9pbnQyMS5oXQogICAgICAgIEFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtYW55IGRvcyBpbnRzLgoKICAgICAgICAqIFttaXNjL2ZpbGUuY10gW2luY2x1ZGUvZmlsZXMuaF0KICAgICAgICBNb3ZlZCBPUEVOX01BWCBhbmQgRG9zRHJpdmVTdHJ1Y3QgdG8gZmlsZXMuaC4KClN1biBPY3QgMjQgMTM6MzY6NTAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wbGVtZW50ZWQgQ0hFQ0tCT1gsIEFVVE9DSEVDS0JPWCwgM1NUQVRFLCBBVVRPM1NUQVRFLAoJUkFESU9CVVRUT04sIEFVVE9SQURJT0JVVFRPTiwgR1JPVVBCT1ggY29udHJvbHMsIHRvZ2V0aGVyIHdpdGgKCWEgcHJlbGltaW5hcnkgVVNFUkJVVFRPTiBjb250cm9sLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gVEVYVF9OZXh0TGluZSgpIGFuZCBhZGRlZCBoYW5kbGluZyBvZiBwcmVmaXgKCWNoYXJhY3Rlci4KCgkqIFtjb250cm9scy9idXR0b24uY10KCURpc2FibGVkIGZvY3VzIGhhbmRsaW5nIGJ5IGNvbW1lbnRpbmcgb3V0IFNldEZvY3VzKCkgY2FsbHMgdW50aWwKCXNlcmlvdXMgYnVnIGNhbiBiZSBmb3VuZC4KCk9jdCAgMjAsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cCwgbmV3IG1lc3NhZ2VzIHByb2Nlc3NlZC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKVHVlIE9jdCAxMiAxNzo1MDoxMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIHByaXZhdGUgY29sb3IgbWFwLgoJVXNpbmcgYSBwcml2YXRlIG1hcCBpcyBub3cgdGhlIGRlZmF1bHQuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXguCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVEaWFsb2cqKCkgYW5kIElzRGlhbG9nTWVzc2FnZSgpLgoKCSogW21pc2MveHQuY10gW3dpbmRvd3MvZGVmd25kLmNdCglNb3ZlZCBEZWZXaW5kb3dQcm9jKCkgdG8gZGVmd25kLmMuCglBZGRlZCBXTV9OQ0NSRUFURSwgV01fTkNERVNUUk9ZIGFuZCBXTV9DVExDT0xPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBXTV9OQ0NSRUFURSBhbmQgV01fTkNERVNUUk9ZIG1lc3NhZ2VzLgoJSW1wbGVtZW50ZWQgSXNDaGlsZCgpLgoKVHVlIE9jdCAxMiAxNzo1MDoyMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9mb2N1cy5jXQoJSW1wbGVtZW50ZWQgR2V0Rm9jdXMoKSBhbmQgU2V0Rm9jdXMoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2ZW50cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBEcmF3Rm9jdXNSZWN0KCkuCgpTYXQgT2N0ICA5IDE0OjM2OjU3IDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL2ludDFhLmNdCglBZGRlZCBtb3JlIGZ1bmN0aW9uIGhhbmRsaW5nLgoKV2VkIE9jdCAgNiAxMjoyMToyMiAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9zaWduYWwuY10KCVNwbGl0IHNpZ25hbC5jIGludG8gaW50MWEuYywgaW50MjEuYyBhbmQgc2lnbmFsLmMuCgpUdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbY29udHJvbHMvc3RhdGljLmNdIFtjb250cm9sL3dpZGdldHMuY10KCVN0YXRpYyBjb250cm9sIGNsYXNzLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBhZGRpdGlvbmFsIERUXyBmbGFncyB0byBEcmF3VGV4dCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFttaXNjL3h0LmNdCglBZGRlZCBTZXRXaW5kb3dUZXh0KCkgYW5kIFdNX1NFVFRFWFQgcHJvY2Vzc2luZy4KClR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgoJKiBbaW5jbHVkZS9jb21iby5oXQoJQ29tYm8gYm94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9saXN0Ym94LmhdCglMaXN0Ym94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9zY3JvbGwuaF0KCVNjcm9sbCBiYXIgZGVmaW5pdGlvbnMKClNhdCBPY3QgIDIgMDk6MzU6NTQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUZpeGVkIGJ1ZyBpbiBNYWtlUHJvY0luc3RhbmNlKCkuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQ2hhbmdlZCB4L3cgYW5kIHgvYiB0byBkaXNwbGF5IGluIGhleC4KCgkqIFtkZWJ1Z2dlci9pMzg2LXBpbnNuLmNdCglBZGRlZCBjb2RlIHRvIHByb3Blcmx5IHVuYXNzZW1ibGUgMTYtYml0IGluZGV4aW5nLgoKRnJpIE9jdCAgMSAwODoyOTowNSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xvYWRlci9maWxlcy5jXSBbbWlzYy9wcm9maWxlLmNdCglTeXN0ZW0gaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3cgY2FsbGVkICJ3aW5lLmluaSIgYW5kIGNhbgoJYmUgbG9jYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksCglvciBhbnkgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZSBXSU5FUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2luY2x1ZGUvcmVnZnVuYy5oXQoJQ2hhbmdlZCByZWdpc3RlciBmdW5jdGlvbiBzdGFjayB0byBtYXRjaCBzaWdjb250ZXh0IHN0cnVjdHVyZS4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsb2FkZXIvZmlsZXMuY10KCUNyZWF0ZWQgZnVuY3Rpb24gdG8gc2VhcmNoIGEgcGF0aCBmb3IgZmlsZXMgdG8gbG9hZC4KCgkqIFtsb2FkZXIvd2luZS5jXQoJTW9kaWZpZWQgZXhlIGFuZCBkbGwgZmlsZSBsb2FkaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHBhdGgKCXNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgV0lORVBBVEguCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQnVnIGZpeC4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdIFtkZWJ1Z2dlci9kdGVzdC5jXSAKCSAgW2RlYnVnZ2VyL29ic3RhY2suaF0KCVVwZGF0ZXMgdG8gYWxsb3cgZGVidWdnZXIgdG8gZnVuY3Rpb24gdW5kZXIgTmV0QlNELgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHdpdGggbm8gYm9yZGVycy4gIEFkZGVkCiAJR2V0UGFyZW50KCksIEdldERsZ0N0cmxJRCgpLCBHZXRXaW5kb3dUZXh0KCkgYW5kCglHZXRXaW5kb3dUZXh0TGVuZ3RoKCkgZnVuY3Rpb25zLgoKCSogW21pc2MveHQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgV01fR0VUVEVYVCBhbmQgV01fR0VUVEVYVExFTkdUSCBtZXNzYWdlcwoJdG8gRGVmV2luZG93UHJvYyBhbmQgSW1wbGVtZW50ZWQgTWVzc2FnZUJlZXAoKS4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBzeXN0ZW0gY29sb3Igc3VwcG9ydC4KCgkqIFtjb250cm9scy9idXR0b24xLmNdCglNb2RzIHRvIG5ldyBidXR0b24gY29udHJvbCBhbmQgaW50ZWdyYXRpb24gd2l0aCBXaW5lLgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBKb2hhbm5lcyBSdXNjaGVpbnNraQoKCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KCU5ldyBidXR0b24gY29udHJvbCB1c2luZyBHREkgZnVuY3Rpb25zLgoJClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtkZWJ1Z2dlci8qXQoJQWRkZWQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyB0byBXaW5lCgpTYXQgU2VwIDI1IDEzOjIyOjUwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGRpLmVwZmwuY2gpCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXgKCkZyaSBTZXAgMjQgMDc6MzU6MTEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCB0aGUgZW50cnkgcG9pbnQgY29kZSB0byByZWR1Y2UgdGhlIHN0YW5kYXJkIGVudHJ5Cglwb2ludCBzaXplIGZyb20gMjIgYnl0ZXMgdG8gMTAgYnl0ZXMuICBUaGlzIGxlYXZlcyBhYm91dAoJNDAwMCBmcmVlIGVudHJ5IHBvaW50cyBpbnN0ZWFkIG9mIHRoZSA4MDAgaW4gdmVyc2lvbiAwLjQuMi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJld3JvdGUgZnVuY3Rpb25zIHRvIGFsbG93IGxvYWRpbmcgb2YgcmVzb3VyY2VzIGZyb20gYW55CglETEwuCgoJKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgZnVuY3Rpb25zIEdldEZpbGVuYW1lRnJvbUluc3RhbmNlKCkgYW5kIEdldEZpbGVJbmZvKCkKCXRvIHNlYXJjaCBmb3IgYSBsb2FkZWQgZmlsZSBiYXNlZCBvbiBpdHMgaW5zdGFuY2UgaGFuZGxlLgoJQWRkZWQgYSBmaWVsZCBpbiBzdHJ1Y3Qgd19maWxlcyB0byBtYWtlIHNlYXJjaGluZyBieSBhbiBpbnN0YW5jZQoJaGFuZGxlIGZhc3Rlci4KClR1ZSBTZXAgMjEgMDk6NTc6MDEgMTk5MyAgbWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14IChNaWd1ZWwgZGUgSWNhemEpCgoJKiBbbWlzYy9wcm9maWxlLmNdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFttaXNjL3Byb2ZpbGUuYy5vbGRdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtjb250cm9scy9XaW5CdXR0b24uY10KCUJ1ZyBmaXggd2l0aCBjYWxsIHRvIFh0VmFTZXRWYWx1ZXMuCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW3dpbmRvd3Mvd2luLmNdCglRdWljayBwYXRjaCB0byBnZXQgY29sb3JtYXBzIHRvIHdvcmsgd2l0aCBidXR0b24gd2lkZ2V0LgoKTW9uIFNlcCAyMCAwMjo0Mjo1NCAxOTkzICAgICh5bmd2aUBoYWZyby5pcykKCgkqIG1pc2Mva2V5Ym9hcmQuYzogCglJZmRlZmVkIG91dCBzb21lIGJvZ3VzIEFuc2k8LT5PZW0gY29udmVyc2lvbiBmdW5jdGlvbnMKCgkqIG1pc2MvbHN0ci5jOiAKCU5ldyBmaWxlIHdpdGggc3RyaW5nIGZ1bmN0aW9ucyBsaWtlIGxzdHIqIElzQ2hhciogKkFuc2kqIAoKV2VkIFNlcCAxNSAyMDozNToxMCAxOTkzICBKb2huIEJyZXphawoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGl0aW9uYWwgY2hhbmdlcyB0byBzdXBwb3J0IE5ldEJTRC4KCldlZCBTZXAgMTUgMjI6MTk6MjIgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIEZyYW1lUmVjdCBmdW5jdGlvbgoKVHVlIFNlcCAxNCAxMzo1NDo0NSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHByaXZhdGUgY29sb3IgbWFwLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUltcGxlbWVudGVkIENTX0NMQVNTREMgc3R5bGUuCgoJKiBbd2luZG93cy9kY2UuY10KCU1vdmVkIERDRXMgdG8gVVNFUiBoZWFwLgoJSW1wbGVtZW50ZWQgY2xhc3MgYW5kIHdpbmRvdyBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgQ1NfREJMQ0xLUyBzdHlsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIFNldFBpeGVsKCkuCgoJKiBbd2luZG93cy93aW4uY10JCglJbXBsZW1lbnRlZCBDU19PV05EQyBzdHlsZS4KCUltcGxlbWVudGVkIEdldC9TZXRXaW5kb3dMb25nKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwcGluZy5jXSAKCSAgW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2luLmNdCQoJTW92ZWQgd2luZG93cyBmcm9tIGdsb2JhbCBoZWFwIHRvIFVTRVIgaGVhcC4KCk1vbiBTZXAgMTMgMDU6MDA6MTEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtNYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFtzZWxlY3Rvci5jXQoJICBbbG9hZGVyL3dpbmUuY10gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBhYmlsaXR5IHRvIGdlbmVyYXRlIG1pc3NpbmcgZnVuY3Rpb25zIHN0YXRpc3RpY3MuCgpNb24gU2VwIDEzIDEyOjA5OjQ3IDE5OTMgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBbV0lOMzEtQVBQTEVUU10KCUFkZGVkIG5ldyBmaWxlLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGRlZmluaXRpb25zIGZvciBHZXRQcm9maWxle0ludCxTdHJpbmd9IGFuZCBTZXRIYW5kbGVDb3VudC4KCgkqIFtpZjE2MzIva2V5Ym9hcmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIEtleWJvYXJkIGRyaXZlciBETEwuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglBZGRlZCBrZXlib2FyZC5kbGwgdG8gbGlzdCBvZiBpbmNsdWRlZCBETExzLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIGRlZmluaXRpb24uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIHN0dWIuCgoJKiBbbWlzYy9maWxlLmNdCglDaGFuZ2VkIE9wZW5GaWxlLCBhbmQgYWRkZWQgU2V0SGFuZGxlQ291bnQgKGZvciB3aW5maWxlLmV4ZSkKCgkqIFttaXNjL2tleWJvYXJkLmNdCglBZGRlZCBrZXlib2FyZCBjb2RlLgoKCSogW21pc2MvcHJvZmlsZS5jXSBbbWlzYy94dC5jXQoJTW92ZWQgR2V0UHJpdmF0ZVByb2ZpbGUqIGNvbW1hbmRzIGhlcmUsIGFuZCBhZGRlZCBHZXRQcm9maWxlKgoJY29tbWFuZHMuCgpNb24gU2VwIDEzIDEwOjI0OjM3IDE5OTMgIEFuZHJldyBCdWxoYWsKCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUltcGxlbWVudGVkIE11bERpdigpLCBPdXRwdXREZWJ1Z1N0cmluZygpIGFuZCB3dnNwcmludGYoKQoKRnJpIFNlcCAxMCAwOToxMzozMCAxOTkzICBKb2huIEJyZXphawoKCSogWyovTWFrZWZpbGVdCglDcmVhdGVkIHBhdGNoIHRvIGFsbG93IEJTRCBtYWtlIHRvIGJ1aWxkIHdpbmUuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIE5VTEwgcG9pbnRlciByZWZlcmVuY2UuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFttaXNjL3h0LmNdCglEZWZpbmVkIEhaIHRvIGhhbmRsZSBzeXN0ZW0gc3BlY2lmaWMgdGltaW5nLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVVzZSBNX1BJIGlzIFBJCgoJKiBbb2JqZWN0cy9wYWxsZXRlLmNdCglOZXRCU0QgZG9lcyBub3QgaGF2ZSAvdXNyL2luY2x1ZGUvdmFsdWVzLmggYW5kIE1BWElOVCBpcyBJTlRfTUFYLgoKCSogW2R1bXAuY10gW2xkdC5jXSBbd2luZS5jXQoJaWZkZWYnZWQgbGludXggaGVhZGVycyBmb3IgbGludXggY29tcGlsZS4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglBZGQgTmV0QlNEIHN5c3RlbSBjYWxscyB3aGVuIGNvbXBpbGVkIG9uIHRoYXQgc3lzdGVtLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJVXNlIG1tYXAoTUFQX0FOT04sIC4uLikgZm9yIE5ldEJTRC4KCgkqIFtpZjE2MzIvY2FsbC5TXQoJRml4ZWQgc2VsZWN0b3IgYXNzdW1wdGlvbnMuCgpUaHUgU2VwIDkgMjA6MDE6MzcgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtjb250cm9scy9XaW5CdXR0b24qXSBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy93aWRnZXQuY10KICAJICBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIDNEIGJ1dHRvbiBjb250cm9sIGFuZCB0aWVkIGludG8gQ3JlYXRlV2luZG93KCkKClRodSBTZXAgIDkgMDc6MzU6MjQgMTk5MyAgU2NvdHQgTGFpcmQKCgkqIFtpZjE2MzIvc291bmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIFNPVU5EIERMTC4KCgkqIFtpZjE2MzIvd2luODdlbS5zcGVjXQoJQWRkZWQgbW9yZSBmdW5jdGlvbnMgdG8gdGhlIFdJTjg3RU0gRExMIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uCgoJKiBbbWlzYy9lbXVsYXRlLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgbmV3IG1hdGggZW11bGF0aW9uIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3NvdW5kLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgU09VTkQgRExMLgoKU3VuIFNlcCAgNSAyMTowMjoxMCAxOTkzICBKb2huIEJ1cnRvbgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgT3BlbkZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xvcGVuLAoJYW5kIF9sd3JpdGUuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBPRl8gbWFjcm9zCgoJKiBbbWlzYy9maWxlLmNdCglJbXBsZW1lbnRlZCBPcGVuRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbG9wZW4gYW5kIF9sd3JpdGUuCgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4CgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEJvYiBBbXN0YWR0CgogICAgICAgICogW29iamVjdHMvbGluZWRkYS5jXQogICAgICAgIEZpbmlzaGVkIExpbmVEREEoKS4KCkZyaSBTZXAgIDMgMTE6NTI6MTggMTk5MyAgQm9iIEFtc3RhZHQKCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglDaGFuZ2VkIHRvIHVzZSBDYWxsV2luZG93UHJvYygpIHJhdGhlciBkaXJlY3RseSBjYWxsaW5nIGNhbGxiYWNrLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIFNldENhcHR1cmUoKSBhbmQgUmVsZWFzZUNhcHR1cmUoKQoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNyZWF0ZWQgc3R1YiBmb3IgR2V0S2V5U3RhdGUoKQoKCSogW29iamVjdHMvbGluZWRkYS5jXQoJQ3JlYXRlZCBzdHViIGZvciBMaW5lRERBKCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNyZWF0ZWQgY2FsbGJhY2sgaGFuZGxlciBmb3IgTGluZUREQSBjYWxsYmFjayBwcm9jZWR1cmUuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDcmVhdGVkIEZyZWVQcm9jSW5zdGFuY2UoKQoKRnJpIFNlcCAgMyAwODozNjo1MiAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2xvYWRlci9zaWduYWwuY10KCVBhdGNoIHRvIGFuZCBjb2RlIGZvciBJTlQgMUEKClRodSBTZXAgIDIgMDA6MzE6NTQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL3RleHQuY10KCU1vcmUgdGV4dCBzdXBwb3J0OiBpbXBsZW1lbnRlZCBqdXN0aWZpY2F0aW9uIGFuZCB1bmRlcmxpbmluZy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdCglNb3ZlZCBsb3ctbGV2ZWwgY2xpcHBpbmcgZnVuY3Rpb25zIHRvIG9iamVjdHMvY2xpcHBpbmcuYy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIHdpbmRvdyB1cGRhdGUgcmVnaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdCglNb3ZlZCBzb21lIGRldmljZS1pbmRlcGVuZGVudCBEQyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9kY3ZhbHVlcy5jLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJlY3QoKSBhbmQgR2V0UGl4ZWwoKS4KClNhdCBBdWcgMjggMDg6NDA6MjMgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtpbmNsdWRlL25lZXhlLmhdIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgY29kZSB0byBoYW5kbGUgcmVsb2NhdGlvbiB0eXBlIDQuCgoJKiBbbG9hZGVyL3NpZ25hbC5oXSBbbG9hZGVyL3dpbmUuY10gW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZG9zIGludGVycnVwdHMuCgpUaHUgMjYgQXVnIDE5OjE1OjAwIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglGaXhlZCBidWcgZGVhbGluZyB3aXRoIGxvYWRpbmcgRExMcy4KClRodSBBdWcgMjYgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2ZvbnQuY10gW3dpbmRvd3MvZGMuY10KICAgICAgICBCZWdpbm5pbmcgb2YgcmVhbCBmb250IHN1cHBvcnQuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBJbXBsZW1lbnRlZCBQYXRCbHQoKS4KCiAgICAgICAgKiBbbWVtb3J5L2dsb2JhbC5jXQogICAgICAgIENvcnJlY3RlZCBhIGJ1ZyB3aXRoIGxpbmtlZCBsaXN0IGhhbmRsaW5nIGluIEdsb2JhbEFsbG9jKCkuCgogICAgICAgICogW29iamVjdHMvYml0bWFwLmNdCiAgICAgICAgQ29ycmVjdGVkIGEgYnVnIGluIEJJVE1BUF9TZWxlY3RPYmplY3QoKS4KClR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCiAgICAgICAgKiBbY29udHJvbHMvQ29tbWFuZCpdIFtjb250cm9scy9MYWJlbCpdIFtjb250cm9sc1tNZW51QnV0dG8qXQoJICBbY29udHJvbHMvU21lTWVudUJ1dHQqXQoJQ2hhbmdlIGNvZGUgdG8gc3VwcG9ydCAmIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgaW4gbWVudSBpdGVtIHRleHQuCgpUdWUgQXVnIDI0IDE5OjIyOjQwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2luY2x1ZGUvZ2RpLmhdIFt3aW5kb3dzL2RjLmNdCglIZWF2aWx5IG1vZGlmaWVkIHRoZSBEQyBzdHJ1Y3R1cmUgZm9yIGJldHRlciBkZXZpY2UtaW5kZXBlbmRlbmNlLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBiaXRtYXAgZGltZW5zaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgREMgc3RhdGUgc2F2aW5nIGFuZCByZXN0b3JpbmcuCgoJKiBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgUk9QIG1vZGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgRmlsbFJlY3QoKS4KCk1vbiBBdWcgMjMgMjI6MDg6MzQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFttaXNjL3h0LmNdCglGaXhlZCBidWcgaW4gSW52YWxpZGF0ZVJlY3QoKS4gIFNvbGl0YWlyZSBhdHRlbXB0ZWQgdG8KCWNsZWFyIHdpbmRvdyBiZWZvcmUgaXQgd2FzIHJlYWxpemVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQmVnYW4gcmV3cml0ZSBvZiBMb2FkQml0bWFwKCkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIGNvZGUgd2hpY2ggc2V0IEFyZ3YgYW5kIEFyZ2MgZ2xvYmFsIHZhcmlhYmxlcy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGNvZGUgdG8gc2V0IHVwIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXQoJRml4ZWQgZXJyb3IgaW4gUFNQIHN0cnVjdHVyZS4KClR1ZSBBdWcgMTcgMjA6NDE6MTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIGRldmljZSBjYXBhYmlsaXRpZXMuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIEVxdWFsUmduKCkgYW5kIENvbWJpbmVSZ24oKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbXBsZW1lbnRlZCBTYXZlL1Jlc3RvcmVWaXNSZ24oKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBQYWludFJnbigpIGFuZCBGaWxsUmduKCkuCgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglJbXBsZW1lbnRlZCBtYXBwaW5nIG1vZGVzLgoKVHVlIEF1ZyAxMCAxNDowNzozOCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbWlzYy9yZWN0LmNdCglJbXBsZW1lbnRlZCByZWN0YW5nbGUgQVBJIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIHJlZ2lvbnMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQ29ycmVjdGVkIGEgdHlwbyBpbiBVbnJlZ2lzdGVyQ2xhc3MoKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBEQyBjbGlwcGluZyBhbmQgdmlzaWJsZSByZWdpb24uCgpUdWUgQXVnIDEwIDIwOjU3OjU2IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10KCVNldE1lbnUoKSwgR2V0TWVudSgpLCBDaGVja01lbnVJdGVtKCkgaW1wbGVtZW50ZWQKClRodSBBdWcgIDUgMjI6MzM6MjIgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQoJTWFueSBpbXByb3ZlbWVudHMgbWVudXMuICBMb2FkTWVudSgpIHNob3VsZCB3b3JrLgoKV2VkIEF1ZyAgNCAxNDo1NTozNiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbb2JqZWN0cy9kaWIuY10KICAgICAgICBTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwcy4KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBiaXRtYXAgZGVwdGhzLgoKICAgICAgICAqIFtvYmplY3RzL2JydXNoLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgcGF0dGVybiBicnVzaGVzLgoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgc29tZSBHREkgZ3JhcGhpY3MgcHJpbWl0aXZlcy4KClR1ZSBBdWcgIDMgMjE6MTY6NDcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9tZW51LmhdCglDb2RlIHRvIGxvYWQgY2xhc3MgbWVudXMgZnJvbSBleGVjdXRhYmxlIGZpbGUuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUZpeGVkIHNwZWNpZmljYXRpb24gb2YgU2VuZE1lc3NhZ2UoKSBhbmQgUG9zdE1lc3NhZ2UuCgpNb24gSnVsIDI2IDIxOjUzOjI0IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2lmMTYzMi9jYWxsLlNdCglDb3JyZWN0ZWQgYSBidWcgaW4gS0VSTkVMX0luaXRUYXNrKCkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIGxvdCBvZiBjb25zdGFudHMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDb3JyZWN0ZWQgYSBidWcgaW4gc2VnbWVudCBhbGxvY2F0aW9uIGluIENyZWF0ZVNlbGVjdG9ycygpLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBTZWxlY3RPYmplY3QoKSBmb3IgYml0bWFwcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglJbXBsZW1lbnRlZCBoYXRjaGVkIGJydXNoZXMgYW5kIFNlbGVjdE9iamVjdCgpLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZW1vdmVkIGxpbmtlZCBsaXN0IChub3QgbmVlZGVkKS4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUltcGxlbWVudGVkIHN5c3RlbSBwYWxldHRlIGNyZWF0aW9uIGFuZCBtaXNjLiBwYWxldHRlIEFQSSBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy90aW1lci5jXQoJSW1wbGVtZW50ZWQgdGltZXJzLgoKCSogW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIG1lbW9yeSBkZXZpY2UgY29udGV4dHMuCgpUdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgogICAgICAgICogW2Rvcy5jXQoJU3BsaXQgRE9TM0NhbGwoKSBvdXQgb2Yga2VybmVsLmMuICBBZGRlZCBzdXBwb3J0IGZvciBnZXQgZGF0ZQoJYW5kIHRpbWUgZnVuY3Rpb25zLgoKCSogW2NhbGwuU10KCUFkZGVkIGZ1bmN0aW9uIFJldHVybkZyb21SZWdpc3RlckZ1bmMoKSB0byBhbGxvdyBET1MgY2FsbHMKCXRvIHJldHVybiB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgoKCSogW3JlZ2Z1bmMuaF0KCU1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzIHNhdmVkIG9uIHN0YWNrLgoKVHVlIEp1bCAyMCAxMDozODo1OSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbd2luLmNdCiAgICAgICAgQ29ycmVjdGVkIGFsbG9jYXRpb24gb2YgdGhlIFdNX0NSRUFURSBkYXRhIHN0cnVjdHVyZS4KCiAgICAgICAgKiBbZGNlLmNdIFtkY2UuaF0KICAgICAgICBJbXBsZW1lbnRlZCBEQ0UgaGFuZGxpbmcuCgogICAgICAgICogW2JpdG1hcC5jXSBbYnJ1c2guY10gW2RjLmNdIFtmb250LmNdIFtnZGkuaF0gW2dkaS5zcGVjXSAKICAgICAgICAgIFtnZGlvYmouY10gW3BhbGV0dGUuY10gW3Blbi5jXQogICAgICAgIEltcGxlbWVudGVkIHRoZSBHREkgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsbG9jYXRpb24uCgogICAgICAgICogW3dpbmRvd3MuaF0KICAgICAgICBBZGRlZCBzZXZlcmFsIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBmb3IgR0RJIG9iamVjdHMuCgpNb24gSnVsIDE5IDEyOjUxOjEwIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbGR0bGliLmNdCglNb2RpZmllZCBzeXN0ZW0gY2FsbHMgdG8gbWF0Y2ggTGludXMnIG5ldyBpbnRlcmZhY2UgZm9yCgl0aGUgTERUIG1vZGlmaWNhdGlvbi4KCgkqIFt3aW4uY10KCUZpeGVkIGJ1ZyB3aXRoIFdNX0NSRUFURSBtZXNzYWdlLgoKCSogW2hlYXAuY10gW2tlcm5lbC5zcGVjXQoJQ29tcGxldGVkIGxvY2FsIGhlYXAgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCgoJKiBbZ2xvYmFsLmNdCglDcmVhdGVkIGZ1bmN0aW9uIEdsb2JhbFF1aWNrQWxsb2MoKSBmb3IgZWFzeSBhbGxvY2F0aW9uIGZyb20gRExMcwoKVHVlIEp1bCAxMyAyMDozMTozMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2dsb2JhbC5jXQoJQ29tcGxldGVkIGdsb2JhbCBtZW1vcnkgcG9vbCBBUEkKClN1biBKdWwgMTEgMTY6NTk6NTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbbWVzc2FnZS5jXSBbdXNlci5jXSBbdXNlci5zcGVjXSBbd2luZG93cy5oXQoJQWRkZWQgZW11bGF0aW9uIG9mIFdpbmRvd3MgbWVzc2FnZSBxdWV1ZS4KClRodSBKdWwgIDggMTk6Mjk6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtidWlsZC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbY2FsbGJhY2suY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2R1bXAuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2dsb2JhbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaGVhcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBba2VybmVsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtsZHQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2xkdGxpYi5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcmVsYXkuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3Jlc291cmNlLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGlhcmQKCSogW3NlbGVjdG9yLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCgkqIFt1c2VyLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt3aW5lLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlIGFuZAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFt3aW50Y2wuY10gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAoJdXBkYXRlcyBieSBQZXRlciBNYWNEb25hbGQgYW5kIEFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbY2FsbGJhY2suaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2RsbHMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2hlYXAuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW25lZXhlLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtwcm90b3R5cGVzLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJRXJpYyBZb3VuZ2RhbGUKCSogW3NlZ21lbS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdGtJbnQuaF0gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCgkqIFt3aW5kb3dzLmhdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZCBhbmQgQm9iIEFtc3RhZHQKCSogW3dpbmUuaF0gT3JpZ2luYWwgYnkgRXJpYyBZb3VuZ2RhbGUKCSogW2tlcm5lbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbZ2RpLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtzaGVsbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdW5peGxpYi5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdXNlci5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3dpbjg3ZW0uc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW1dpbmRvd3MudGNsXSBPcmlnaW5hbCBieSBQZXRlciBNYWNEb25hbGQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2J1aWxkLXNwZWMudHh0XSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaWYxNjMyLlNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCg==