RlVUVVJFCgogICogVE9ETzogVGhlIGx3SVAgc291cmNlIGNvZGUgbWFrZXMgc29tZSBpbnZhbGlkIGFzc3VtcHRpb25zIG9uIHByb2Nlc3NvcgogICAgd29yZC1sZW5ndGgsIHN0b3JhZ2Ugc2l6ZXMgYW5kIGFsaWdubWVudC4gU2VlIHRoZSBtYWlsaW5nIGxpc3RzIGZvcgogICAgcHJvYmxlbXMgd2l0aCBleG90ZXJpYyAoL0RTUCkgYXJjaGl0ZWN0dXJlcyBzaG93aW5nIHRoZXNlIHByb2JsZW1zLgogICAgV2Ugc3RpbGwgaGF2ZSB0byBmaXggc29tZSBvZiB0aGVzZSBpc3N1ZXMgbmVhdGx5LgoKICAqIFRPRE86IHRoZSBQUFAgY29kZSBpcyBicm9rZW4gaW4gYSBmZXcgd2F5cy4gVGhlcmUgYXJlIG5hbWVzcGFjZQogICAgY29sbGlzaW9ucyBvbiBCU0Qgc3lzdGVtcyBhbmQgbWFueSBhc3N1bXB0aW9ucyBvbiB3b3JkLWxlbmd0aAogICAgKHNpemVvZihpbnQpKS4gSW4gcHBwLmMgYW4gYXNzdW1wdGlvbiBpcyBtYWRlIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YKICAgIGEgdGhyZWFkIHN1YnN5c3RlbS4gRWl0aGVyIFBQUCBuZWVkcyB0byBiZSBtb3ZlZCB0byBjb250cmliL3BvcnRzLz8/PwogICAgb3IgcmVhcnJhbmdlZCB0byBiZSBtb3JlIGdlbmVyaWMuCgpISVNUT1JZCgooQ1ZTIEhFQUQpCgogICogW0VudGVyIG5ldyBjaGFuZ2VzIGp1c3QgYWZ0ZXIgdGhpcyBsaW5lIC0gZG8gbm90IHJlbW92ZSB0aGlzIGxpbmVdCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKysgQnVnZml4ZXM6CgoKKFNUQUJMRS0xLjMuMSkKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA5LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgc29ja2V0cy5jLCBwYnVmLmMsIG5ldGJ1Zi5oLCBwYnVmLmg6IHRhc2sgIzcwMTM6IEFkZGVkIG9wdGlvbgogICAgTFdJUF9ORVRJRl9UWF9TSU5HTEVfUEJVRiB0byB0cnkgdG8gY3JlYXRlIHRyYW5zbWl0IHBhY2tldHMgZnJvbSBvbmx5CiAgICBvbmUgcGJ1ZiB0byBoZWxwIE1BQ3MgdGhhdCBkb24ndCBzdXBwb3J0IHNjYXR0ZXItZ2F0aGVyIERNQS4KCiAgMjAwOS0wNS0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogaWNtcC5oLCBpY21wLmM6IFNocmlua2VkIElDTVAgY29kZSwgYWRkZWQgb3B0aW9uIHRvIE5PVCBjaGVjayBpY29taW5nCiAgICBFQ0hPIHBidWYgZm9yIHNpemUgKGp1c3QgdXNlIGl0KTogTFdJUF9JQ01QX0VDSE9fQ0hFQ0tfSU5QVVRfUEJVRl9MRU4KCiAgMjAwOS0wNS0wNSBTaW1vbiBHb2xkc2NobWlkdCwgSmFrb2IgU3Rva2x1bmQgT2xlc2VuCiAgKiBpcC5oLCBpcC5jOiBBZGRlZCBpcF9jdXJyZW50X25ldGlmKCkgJiBpcF9jdXJyZW50X2hlYWRlcigpIHRvIHJlY2VpdmUKICAgIGV4dGVuZGVkIGluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSByZWNlaXZlZCBwYWNrZXQuCgogIDIwMDktMDQtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIHN5cy5oOiBNYWRlIFNZU19MSUdIVFdFSUdIVF9QUk9UIGFuZCBzeXNfbm93KCkgd29yayB3aXRoIE5PX1NZUz0xCgogIDIwMDktMDQtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCBvcHQuaDogQWRkZWQgb3B0aW9uIE1FTV9VU0VfUE9PTFNfVFJZX0JJR0dFUl9QT09MIHRvIHRyeSB0aGUgbmV4dAogICAgYmlnZ2VyIG1hbGxvYyBwb29sIGlmIG9uZSBpcyBlbXB0eSAob25seSB1c2FibGUgd2l0aCBNRU1fVVNFX1BPT0xTKS4KCiAgMjAwOS0wNC0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogZG5zLmMsIGluaXQuYywgZG5zLmgsIG9wdC5oOiB0YXNrICM3NTA3LCBwYXRjaCAjNjc4NjogRE5TIHN1cHBvcnRzIHN0YXRpYwogICAgaG9zdHMgdGFibGUuIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgRE5TX0xPQ0FMX0hPU1RMSVNUIGFuZAogICAgRE5TX0xPQ0FMX0hPU1RMSVNUX0lTX0RZTkFNSUMuIEFsc28sIEROU19MT09LVVBfTE9DQUxfRVhURVJOKCkgY2FuIGJlIGRlZmluZWQKICAgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGZvciBsb29rdXAuCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogcGF0Y2ggIzY3NjM6IEdsb2JhbCBESENQIFhJRCBjYW4gYmUgcmVkZWZpbmVkIHRvIHNvbWV0aGluZyBtb3JlIHVuaXF1ZQoKICAyMDA5LTAzLTMxIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX291dC5jLCB0Y3BfaW4uYywgc3lzLmgsIHRjcC5oLCBvcHRzLmg6IGFkZCBzdXBwb3J0IGZvcgogICAgVENQIHRpbWVzdGFtcCBvcHRpb25zLCBvZmYgYnkgZGVmYXVsdC4gIFJld29yayB0Y3BfZW5xdWV1ZSgpIHRvCiAgICB0YWtlIG9wdGlvbiBmbGFncyByYXRoZXIgdGhhbiBzcGVjaWZpZWQgb3B0aW9uIGRhdGEKCiAgMjAwOS0wMi0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogY2MuaDogQWRkZWQgcHJpbnRmIGZvcm1hdHRlciBmb3Igc2l6ZV90OiBTWlRfRgoKICAyMDA5LTAyLTE2IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBSaXNoaSBLaGFuKQogICogaWNtcC5jLCBvcHQuaDogcGF0Y2ggIzY1Mzk6IChjb25maWd1cmFibGUpIHJlc3BvbnNlIHRvIGJyb2FkY2FzdC0gYW5kIG11bHRpY2FzdAogICAgcGluZ3MKCiAgMjAwOS0wMi0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5pdC5oOiBBZGRlZCBMV0lQX1ZFUlNJT04gdG8gZ2V0IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHN0YWNrCgogIDIwMDktMDItMTEgU2ltb24gR29sZHNjaG1pZHQgKHN1Z2dlc3RlZCBieSBHb3R0ZnJpZWQgU3BpdGFsZXIpCiAgKiBvcHQuaCwgbWVtcC5oLy5jOiBhZGRlZCBNRU1QX01FTV9NQUxMT0MgdG8gdXNlIG1lbV9tYWxsb2MvbWVtX2ZyZWUgaW5zdGVhZAogICAgb2YgdGhlIHBvb2wgYWxsb2NhdG9yIChjYW4gc2F2ZSBjb2RlIHNpemUgd2l0aCBNRU1fTElCQ19NQUxMT0MgaWYgbGliYy1tYWxsb2MKICAgIGlzIG90aGVyd2lzZSB1c2VkKQoKICAyMDA5LTAxLTI4IEpvbmF0aGFuIExhcm1vdXIgKHN1Z2dlc3RlZCBieSBCaWxsIEJhdWVyYmFjaCkKICAqIGlwdjQvaW5ldF9jaGtzdW0uYywgaXB2NC9sd2lwL2luZXRfY2hrc3VtLmg6IGluZXRfY2hrc3VtX3BzZXVkb19wYXJ0aWFsKCkKICBpcyBvbmx5IHVzZWQgYnkgVURQTElURSBhdCBwcmVzZW50LCBzbyBjb25kaXRpb25hbGlzZSBpdC4KCiAgMjAwOC0xMi0wMyBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZSBvbiBwYXRjaCBmcm9tIEx1Y2EgQ2VyZXNvbGkpCiAgKiBhdXRvaXAuYzogY2hlY2tlZCBpbiAoc2xpZ2h0bHkgbW9kaWZpZWQpIHBhdGNoICM2NjgzOiBDdXN0b21pemFibGUgQVVUT0lQCiAgICAic2VlZCIgYWRkcmVzcy4gVGhpcyBzaG91bGQgcmVkdWNlIEFVVE9JUCBjb25mbGljdHMgaWYKICAgIExXSVBfQVVUT0lQX0NSRUFURV9TRUVEX0FERFIgaXMgb3ZlcnJpZGRlbi4KCiAgMjAwOC0xMC0wMiBKb25hdGhhbiBMYXJtb3VyIGFuZCBSaXNoaSBLaGFuCiAgKiBzb2NrZXRzLmMgKGx3aXBfYWNjZXB0KTogUmV0dXJuIEVXT1VMREJMT0NLIGlmIHdvdWxkIGJsb2NrIG9uIG5vbi1ibG9ja2luZwogICAgc29ja2V0LgoKICAyMDA4LTA2LTMwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgb3B0LmgsIHN0YXRzLmg6IGZpeGVkIGJ1ZyAjMjE0MzM6IENhbGxpbmcgbWVtX2ZyZWUvcGJ1Zl9mcmVlIGZyb20KICAgIGludGVycnVwdCBjb250ZXh0IGlzbid0IHNhZmU6IExXSVBfQUxMT1dfTUVNX0ZSRUVfRlJPTV9PVEhFUl9DT05URVhUIGFsbG93cwogICAgbWVtX2ZyZWUgdG8gcnVuIGJldHdlZW4gbWVtX21hbGxvYyBpdGVyYXRpb25zLiBBZGRlZCBpbGxlZ2FsIGNvdW50ZXIgZm9yCiAgICBtZW0gc3RhdHMuCgogIDIwMDgtMDYtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIHN0YXRzLmgvLmMsIHNvbWUgb3RoZXIgZmlsZXM6IHBhdGNoICM2NDgzOiBzdGF0cyBtb2R1bGUgaW1wcm92ZW1lbnQ6CiAgICBBZGRlZCBkZWZpbmVzIHRvIGRpc3BsYXkgZWFjaCBtb2R1bGUncyBzdGF0aXN0aWMgaW5kaXZpZHVhbGx5LCBhZGRlZCBzdGF0cwogICAgZGVmaW5lcyBmb3IgTUVNLCBNRU1QIGFuZCBTWVMgbW9kdWxlcywgcmVtb3ZlZCAodW51c2VkKSByZXhtaXQgY291bnRlci4KCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogZXJyLmg6IHBhdGNoICM2NDU5OiBNYWRlIGVycl90IG92ZXJyaWRhYmxlIHRvIHVzZSBhIG1vcmUgZWZmaWNpZW50IHR5cGUKICAgIChkZWZpbmUgTFdJUF9FUlJfVCBpbiBjYy5oKQoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbGlwaWYuYzogcGF0Y2ggIzY0ODA6IEFkZGVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHNsaXBpZiBmb3Igc3ltbWV0cnkKICAgIHRvIGxvb3BpZgoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMdWNhIENlcmVzb2xpKQogICogbmV0aWYuYywgbG9vcGlmLmMsIGlwLmMsIG5ldGlmLmgsIGxvb3BpZi5oLCBvcHQuaDogQ2hlY2tlZCBpbiBzbGlnaHRseQogICAgbW9kaWZpZWQgdmVyc2lvbiBvZiBwYXRjaCAjIDYzNzA6IE1vdmVkIGxvb3BpZiBjb2RlIHRvIG5ldGlmLmMgc28gdGhhdAogICAgbG9vcGJhY2sgdHJhZmZpYyBpcyBzdXBwb3J0ZWQgb24gYWxsIG5ldGlmcyAoYWxsIGxvY2FsIElQcykuCiAgICBBZGRlZCBvcHRpb24gdG8gbGltaXQgbG9vcGJhY2sgcGFja2V0cyBmb3IgZWFjaCBuZXRpZnMuCgoKICArKyBCdWdmaXhlczoKICAyMDA5LTA4LTEyIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYywgdGNwLmM6IEZpeCBidWcgIzI3MjA5OiBoYW5kbGUgdHJpbW1pbmcgb2Ygc2VnbWVudHMgd2hlbgogICAgb3V0IG9mIHdpbmRvdyBvciBvdXQgb2Ygb3JkZXIgcHJvcGVybHkKCiAgMjAwOS0wOC0xMiBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmM6IEZpeCBidWcgIzI3MTk5OiB1c2Ugc25kX3dsMiBpbnN0ZWFkIG9mIHNuZF93bDEKCiAgMjAwOS0wNy0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmg6IEZpeGVkIGJ1ZyAjMjcxMDU6ICJyZWFsbG9jKCkgY2Fubm90IHJlcGxhY2UgbWVtX3JlYWxsb2MoKSJzCgogIDIwMDktMDctMjcgS2llcmFuIE1hbnNsZXkKICAqIGFwaS5oIGFwaV9tc2cuaCBuZXRkYi5oIHNvY2tldHMuaDogYWRkIG1pc3NpbmcgI2luY2x1ZGUgZGlyZWN0aXZlcwoKICAyMDA5LTA3LTA5IEtpZXJhbiBNYW5zbGV5CiAgKiBhcGlfbXNnLmMsIHNvY2tldHMuYywgYXBpLmg6IEJVRzIzMjQwIHVzZSBzaWduZWQgY291bnRlcnMgZm9yCiAgICByZWN2X2F2YWlsIGFuZCBkb24ndCBpbmNyZW1lbnQgY291bnRlcnMgdW50aWwgbWVzc2FnZSBzdWNjZXNzZnVsbHkKICAgIHNlbnQgdG8gbWJveAoKICAyMDA5LTA2LTI1IEtpZXJhbiBNYW5zbGV5CiAgKiBhcGlfbXNnLmMgYXBpLmg6IEJVRzI2NzIyOiBpbml0aWFsaXNlIG5ldGNvbm4gd3JpdGUgdmFyaWFibGVzIAogICAgaW4gbmV0Y29ubl9hbGxvYwoKICAyMDA5LTA2LTI1IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuaDogQlVHMjY4Nzk6IHNldCByZXQgdmFsdWUgaW4gVENQX0VWRU5UIG1hY3JvcyB3aGVuIGZ1bmN0aW9uIGlzIG5vdCBzZXQKCiAgMjAwOS0wNi0yNSBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBCVUcyNjMwMSBhbmQgQlVHMjYyNjc6IGNvcnJlY3QKICAgIHNpbXVsdGFuZW91cyBjbG9zZSBiZWhhdmlvdXIsIGFuZCBtYWtlIHNuZF9ueHQgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIAogICAgYXMgaW4gdGhlIFJGQ3MuCgogIDIwMDktMDUtMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5oLCBldGhhcnAuYywgbmV0aWYuYzogZml4ZWQgYnVnICMyNjUwNzogIkdyYXR1aXRvdXMgQVJQIGRlcGVuZHMgb24KICAgIGFycF90YWJsZSAvIHVzZXMgZXRoYXJwX3F1ZXJ5IiBieSBhZGRpbmcgZXRoYXJwX2dyYXR1aXRvdXMoKQoKICAyMDA5LTA1LTEyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5oLCBpcC5jLCBpZ21wLmM6IGJ1ZyAjMjY0ODc6IEFkZGVkIGlwX291dHB1dF9pZl9vcHQgdGhhdCBjYW4gYWRkIElQIG9wdGlvbnMKICAgIHRvIHRoZSBJUCBoZWFkZXIgKHVzZWQgYnkgaWdtcF9pcF9vdXRwdXRfaWYpCgogIDIwMDktMDUtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIGluZXRfY2hrc3VtLmM6IE9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgdXNlIExXSVBfUExBVEZPUk1fSFRPTlMgKGlmCiAgICBkZWZpbmVkKSBmb3IgU1dBUF9CWVRFU19JTl9XT1JEIHRvIHNwZWVkIHVwIGNoZWNrc3VtbWluZy4KCiAgMjAwOS0wNS0wNSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBidWcgIzI2NDA1OiBQcmVtYXR1cmVseSByZWxlYXNlZCBzZW1hcGhvcmUgY2F1c2VzIGx3aXBfc2VsZWN0KCkKICAgIHRvIGNyYXNoCgogIDIwMDktMDUtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuYzogc25tcCB3YXMgbm90IGluaXRpYWxpemVkIGluIGx3aXBfaW5pdCgpCgogIDIwMDktMDUtMDQgRnLpZOlyaWMgQmVybm9uCiAgKiBkaGNwLmMsIG5ldGJpb3MuYzogQ2hhbmdlcyBpZiBJUF9TT0ZfQlJPQURDQVNUIGlzIGVuYWJsZWQuCgogIDIwMDktMDUtMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oOiBidWcgIzI2MzQ5OiBOYWdsZSBhbGdvcml0aG0gZG9lc24ndCBzZW5kIGFsdGhvdWdoIHNlZ21lbnQgaXMgZnVsbAogICAgKGFuZCB1bnNlbnQtPm5leHQgPT0gTlVMTCkKCiAgMjAwOS0wNS0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuaCwgdGNwaXAuYzogZml4ZWQgdGNwaXBfdW50aW1lb3V0IChkb2VzIG5vdCBuZWVkIHRoZSB0aW1lLCBicm9rZW4gYWZ0ZXIKICAgIDEuMy4wIGluIENWUyBvbmx5KSAtIGZpeGVzIGNvbXBpbGF0aW9uIG9mIHBwcF9vZS5jCgogIDIwMDktMDUtMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIG1zZ19pbi5jOiBmaXhlZCBidWcgIzI1NjM2OiBTTk1QU0VUIHZhbHVlIGlzIGlnbm9yZWQgZm9yIGludGVnZXIgZmllbGRzCgogIDIwMDktMDUtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHBhcC5jOiBidWcgIzIxNjgwOiBQUFAgdXBhcF9yYXV0aG5haygpIGRyb3BzIGxlZ2FsIE5BSyBwYWNrZXRzCgogIDIwMDktMDUtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jOiBidWcgIzI0MjI4OiBNZW1vcnkgY29ycnVwdGlvbiB3aXRoIFBQUCBhbmQgREhDUAoKICAyMDA5LTA0LTI5IEZy6WTpcmljIEJlcm5vbgogICogcmF3LmMsIHVkcC5jLCBpbml0LmMsIG9wdC5oLCBpcC5oLCBzb2NrZXRzLmg6IGJ1ZyAjMjYzMDk6IEltcGxlbWVudCB0aGUKICAgIFNPKEYpX0JST0FEQ0FTVCBmaWx0ZXIgZm9yIGFsbCBBUEkgbGF5ZXJzLiBBdm9pZCB0aGUgdW5pbmRlbnRlZCByZWNlcHRpb24KICAgIG9mIGJyb2FkY2FzdCBwYWNrZXRzIGV2ZW4gd2hlbiB0aGlzIG9wdGlvbiB3YXNuJ3Qgc2V0LiBQb3J0IG1haW50YWluZXJzCiAgICB3aGljaCB3YW50IHRvIGVuYWJsZSB0aGlzIGZpbHRlciBoYXZlIHRvIHNldCBJUF9TT0ZfQlJPQURDQVNUPTEgaW4gb3B0LmguCiAgICBJZiB5b3Ugd2FudCB0aGlzIG9wdGlvbiBhbHNvIGZpbHRlciBicm9hZGNhc3Qgb24gcmVjdiBvcGVyYXRpb25zLCB5b3UgYWxzbwogICAgaGF2ZSB0byBzZXQgSVBfU09GX0JST0FEQ0FTVF9SRUNWPTEgaW4gb3B0LmguCgogIDIwMDktMDQtMjggU2ltb24gR29sZHNjaG1pZHQsIEpha29iIFN0b2tsdW5kIE9sZXNlbgogICogZGhjcC5jOiBwYXRjaCAjNjcyMSwgYnVncyAjMjU1NzUsICMyNTU3NjogU29tZSBzbWFsbCBmaXhlcyB0byBESENQIGFuZAogICAgREhDUC9BVVRPSVAgY29vcGVyYXRpb24KCiAgMjAwOS0wNC0yNSBTaW1vbiBHb2xkc2NobWlkdCwgT2xlZyBUeXNoZXYKICAqIHRjcF9vdXQuYzogYnVnICMyNDIxMjogRGVhZGxvY2tlZCB0Y3BfcmV0cmFuc21pdCBkdWUgdG8gZXhjZWVkZWQgcGNiLT5jd25kCiAgICBGaXhlZCBieSBzb3J0aW5nIHRoZSB1bnNlbnQgYW5kIHVuYWNrZWQgcXVldWVzIChzZWdtZW50cyBhcmUgaW5zZXJ0ZWQgYXQgdGhlCiAgICByaWdodCBwbGFjZSBpbiB0Y3Bfb3V0cHV0IGFuZCB0Y3BfcmV4bWl0KS4KCiAgMjAwOS0wNC0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtcC5jLCBtZW0uYywgbWVtcC5oLCBtZW1fc3RkLmg6IGJ1ZyAjMjYyMTMgIlByb2JsZW0gd2l0aCBtZW1vcnkgYWxsb2NhdGlvbgogICAgd2hlbiBkZWJ1Z2dpbmciOiBtZW1wX3NpemVzIGNvbnRhaW5lZCB0aGUgd3Jvbmcgc2l6ZXMgKGluY2x1ZGluZyBzYW5pdHkKICAgIHJlZ2lvbnMpOyBtZW1wIHBvb2xzIGZvciBNRU1fVVNFX1BPT0xTIHdlcmUgdG9vIHNtYWxsCgogIDIwMDktMDQtMjQgU2ltb24gR29sZHNjaG1pZHQsIEZy6WTpcmljIEJlcm5vbgogICogaW5ldC5jOiBwYXRjaCAjNjc2NTogRml4IGEgc21hbGwgcHJvYmxlbSB3aXRoIHRoZSBsYXN0IGNoYW5nZXMgKGluY29ycmVjdAogICAgYmVoYXZpb3IsIHdpdGggd2l0aCBpcCBhZGRyZXNzIHN0cmluZyBub3QgZW5kZWQgYnkgYSAnXDAnLCBhIHNwYWNlIG9yIGEKICAgIGVuZCBvZiBsaW5lKQoKICAyMDA5LTA0LTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiByYXdhcGkudHh0OiBGaXhlZCBidWcgIzI2MDY5OiBDb3JyZWN0ZWQgZG9jdW1lbnRhdGlvbjogaWYgdGNwX2Nvbm5lY3QgZmFpbHMsCiAgICBwY2ItPmVyciBpcyBjYWxsZWQsIG5vdCBwY2ItPmNvbm5lY3RlZCAod2l0aCBhbiBlcnJvciBjb2RlKS4KCiAgMjAwOS0wNC0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBGaXhlZCBidWcgIzI2MjM2OiAiVENQIG9wdGlvbnMgKHRpbWVzdGFtcCkgZG9uJ3Qgd29yayB3aXRoCiAgICBuby1jb3B5LXRjcHdyaXRlIjogZGVhbGxvY2F0ZSBvcHRpb24gZGF0YSwgb25seSBjb25jYXQgc2VnbWVudHMgd2l0aCBzYW1lIGZsYWdzCgogIDIwMDktMDQtMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogRml4ZWQgYnVnICMyNTA5NDogIlplcm8tbGVuZ3RoIHBidWYiIChvcHRpb25zIGFyZSBub3cgYWxsb2NhdGVkCiAgICBpbiB0aGUgaGVhZGVyIHBidWYsIG5vdCB0aGUgZGF0YSBwYnVmKQoKICAyMDA5LTA0LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IGZpeGVkIGJ1ZyAjMjU2OTU6IFNlZ21lbnRhdGlvbiBmYXVsdCBpbiBkb193cml0ZW1vcmUoKQoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IHRyaWVkIHRvIGZpeCBidWcgIzIzNTU5OiBsd2lwX3JlY3Zmcm9tIHByb2JsZW0gd2l0aCB0Y3AKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiB0YXNrICM5MTkyOiBtZW1fZnJlZSBvZiBkaGNwLT5vcHRpb25zX2luIGFuZCBkaGNwLT5tc2dfaW4KCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYywgaXA2LmMsIHRjcF9vdXQuYywgaXAuaDogcGF0Y2ggIzY4MDg6IEFkZCBhIHV0aWxpdHkgZnVuY3Rpb24KICAgIGlwX2hpbnRlZF9vdXRwdXQoKSAoZm9yIHNtYWxsZXIgY29kZSBtYWlubHkpCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGluZXQuYzogcGF0Y2ggIzY3NjU6IFN1cHBvcnRpbmcgbmV3IGxpbmUgY2hhcmFjdGVycyBpbiBpbmV0X2F0b24oKQoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IHBhdGNoICM2NzY0OiBESENQIHJlYmluZCBhbmQgcmVuZXcgZGlkIG5vdCBzZW5kIGhvc3RuYW0gb3B0aW9uOwogICAgQ29udmVydGVkIGNvbnN0YW50IE9QVElPTl9NQVhfTVNHX1NJWkUgdG8gbmV0aWYtPm10dSwgY2hlY2sgaWYgbmV0aWYtPm10dQogICAgaXMgYmlnIGVub3VnaCBpbiBkaGNwX3N0YXJ0CgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGJ1Zi5jOiBidWcgIzI2MDI3OiBuZXRidWZfY2hhaW4gcmVzdWx0ZWQgaW4gcGJ1ZiBtZW1vcnkgbGVhawoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmMsIHBwcC5jOiBidWcgIzI1NzYzOiBjb3JyZWN0ZWQgNCBvY2N1cnJlbmNlcyBvZiBTTUVNQ1BZIHRvIE1FTUNQWQoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IGJ1ZyAjMjYxMjE6IHNldF9lcnJubyBjYW4gYmUgb3ZlcnJpZGRlbgoKICAyMDA5LTA0LTA5IEtpZXJhbiBNYW5zbGV5IChwYXRjaCBmcm9tIEx1Y2EgQ2VyZXNvbGkgPGx1Y2FjZXJlc29saT4pCiAgKiBpbml0LmMsIG9wdC5oOiBQYXRjaCM2Nzc0IFRDUF9RVUVVRV9PT1NFUSBicmVha3MgY29tcGlsYXRpb24gd2hlbgogICAgTFdJUF9UQ1A9PTAKCiAgMjAwOS0wNC0wOSBLaWVyYW4gTWFuc2xleSAocGF0Y2ggZnJvbSBSb3kgTGVlIDxyb3lsZWUxNz4pCiAgKiB0Y3AuaDogUGF0Y2gjNjgwMiBBZGQgZG8td2hpbGUtY2xhdXNlcyB0byB0aG9zZSBmdW5jdGlvbiBsaWtlCiAgICBtYWNyb3MgaW4gdGNwLmgKCiAgMjAwOS0wMy0zMSBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oLCBvcHQuaDogUmV3b3JrIHRoZSB3YXkgd2luZG93CiAgICB1cGRhdGVzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZW50IChCVUcyMDUxNSkKCiAgKiB0Y3BfaW4uYzogY29wZSB3aXRoIFNZTiBwYWNrZXRzIHJlY2VpdmVkIGR1cmluZyBlc3RhYmxpc2hlZCBzdGF0ZXMsCiAgICBhbmQgcmV0cmFuc21pc3Npb24gb2YgaW5pdGlhbCBTWU4uCgogICogdGNwX291dC5jOiBzZXQgcHVzaCBiaXQgY29ycmVjdGx5IHdoZW4gdGNwIHNlZ21lbnRzIGFyZSBtZXJnZWQKCiAgMjAwOS0wMy0yNyBLaWVyYW4gTWFuc2xleQogICogdGNwX291dC5jIHNldCB3aW5kb3cgY29ycmVjdGx5IG9uIHByb2JlcyAoY29ycmVjdGluZyBjaGFuZ2UgbWFkZQogICAgeWVzdGVyZGF5KQoKICAyMDA5LTAzLTI2IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcC5oOiBhZGQgdGNwX2FiYW5kb24oKSB0byBjb3BlIHdpdGggZHJvcHBpbmcKICAgIGNvbm5lY3Rpb25zIHdoZXJlIG5vIHJlc2V0IHJlcXVpcmVkIChidWcgIzI1NjIyKQoKICAqIHRjcF9vdXQuYzogc2V0IFRDUF9BQ0sgZmxhZyBvbiBrZWVwYWxpdmUgYW5kIHplcm8gd2luZG93IHByb2JlcyAKICAgIChidWcgIzIwNzc5KQoKICAyMDA5LTAyLTE4IFNpbW9uIEdvbGRzY2htaWR0IChKb25hdGhhbiBMYXJtb3VyIGFuZCBCaWxsIEF1ZXJiYWNoKQogICogaXBfZnJhZy5jOiBwYXRjaCAjNjUyODogdGhlIGJ1ZmZlciB1c2VkIGZvciBJUF9GUkFHX1VTRVNfU1RBVElDX0JVRiBjb3VsZCBiZQogICAgdG9vIHNtYWxsIGRlcGVuZGluZyBvbiBNRU1fQUxJR05NRU5UCgogIDIwMDktMDItMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaC8uYywgYXBpXyouaC8uYzogZml4ZWQgYXJndW1lbnRzIG9mIHNvY2tldCBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIHN0YW5kYXJkOwogICAgY29udmVydGVkIHNpemUgYXJndW1lbnQgb2YgbmV0Y29ubl93cml0ZSB0byAnc2l6ZV90JwoKICAyMDA5LTAyLTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwLmM6IGZpeGVkIGJ1ZyAjMjQ0NDA6IFRDUCBjb25uZWN0aW9uIGNsb3NlIHByb2JsZW0gb24gNjQtYml0IGhvc3QKICAgIGJ5IG1vdmluZyBhY2NlcHQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0byBUQ1BfUENCX0NPTU1PTgoKICAyMDA5LTAyLTEyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IGZpeGVkIGJ1ZyAjMjUzNDUgKERIQ1BERUNMSU5FIGlzIHNlbnQgd2l0aCAiTWF4aW11bSBtZXNzYWdlIHNpemUiCiAgICBvcHRpb24pCgogIDIwMDktMDItMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgYnVnICMyNDQ4MCAocmVsZWFzaW5nIG9sZCB1ZHBfcGRiIGFuZCBwYnVmIGluIGRoY3Bfc3RhcnQpCgogIDIwMDktMDItMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBhcGlfbXNnLmM6IGFkZGVkIGNvbmZpZ3VyYWJsZSBkZWZhdWx0IHZhbHVkIGZvciBuZXRjb25uLT5yZWN2X2J1ZnNpemU6CiAgICBSRUNWX0JVRlNJWkVfREVGQVVMVCAoZml4ZXMgYnVnICMyMzcyNjogcGJ1ZiBwb29sIGV4aGF1c3Rpb24gb24gc2xvdyByZWN2KCkpCgogIDIwMDktMDItMTAgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBmaXhlZCBidWcgIzI1NDY3OiBMaXN0ZW4gYmFja2xvZyBpcyBub3QgcmVzZXQgb24gdGltZW91dCBpbiBTWU5fUkNWRDoKICAgIEFjY2VwdHNfcGVuZGluZyBpcyBkZWNyZWFzZSBvbiBhIGNvcnJlc3BvbmRpbmcgbGlzdGVuIHBjYiB3aGVuIGEgY29ubmVjdGlvbgogICAgaW4gc3RhdGUgU1lOX1JDVkQgaXMgY2xvc2UuCgogIDIwMDktMDEtMjggSm9uYXRoYW4gTGFybW91cgogICogcGJ1Zi5jOiByZWNsYWltIHBidWZzIGZyb20gVENQIG91dC1vZi1zZXF1ZW5jZSBzZWdtZW50cyBpZiB3ZSBydW4KICAgIG91dCBvZiBwb29sIHBidWZzLgoKICAyMDA4LTEyLTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IGZpbGVzOiBwYXRjaCAjNjY5OTogZml4ZWQgc29tZSB3YXJuaW5ncyBvbiBwbGF0Zm9ybSB3aGVyZSBzaXplb2YoaW50KSA9PSAyIAoKICAyMDA4LTEyLTEwIFRhbWFzIFNvbW9neWksIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jOiBmaXhlZCBidWcgIzI1MDUxOiBsd2lwX3JlY3Zmcm9tIHByb2JsZW0gd2l0aCB1ZHA6IGZyb21hZGRyIGFuZAogICAgcG9ydCB1c2VzIGRlbGV0ZWQgbmV0YnVmLgoKICAyMDA4LTEwLTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogZml4ZWQgYnVnICMjMjQ1OTY6IFZ1bG5lcmFiaWxpdHkgb24gZmF1bHR5IFRDUCBvcHRpb25zIGxlbmd0aAogICAgaW4gdGNwX3BhcnNlb3B0CgogIDIwMDgtMTAtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYzogZml4ZWQgYnVnICMyNDUxNzogSVAgcmVhc3NlbWJseSBjcmFzaGVzIG9uIHVuYWxpZ25lZCBJUCBoZWFkZXJzCiAgICBieSBwYWNraW5nIHRoZSBzdHJ1Y3QgaXBfcmVhc3NfaGVscGVyLgoKICAyMDA4LTEwLTAzIERhdmlkIFdvb2Rob3VzZSwgSm9uYXRoYW4gTGFybW91cgogICogZXRoYXJwLmMgKGV0aGFycF9hcnBfaW5wdXQpOiBGaXggdHlwZSBhbGlhc2luZyBwcm9ibGVtIGNvcHlpbmcgaXAgYWRkcmVzcy4KCiAgMjAwOC0xMC0wMiBKb25hdGhhbiBMYXJtb3VyCiAgKiBkbnMuYzogSGFyZC1jb2RlIHN0cnVjdHVyZSBzaXplcywgdG8gYXZvaWQgaXNzdWVzIG9uIHNvbWUgY29tcGlsZXJzIHdoZXJlCiAgICBwYWRkaW5nIGlzIGluY2x1ZGVkLgoKICAyMDA4LTA5LTMwIEpvbmF0aGFuIExhcm1vdXIKICAqIHNvY2tldHMuYyAobHdpcF9hY2NlcHQpOiBjaGVjayBhZGRyIGlzbid0IE5VTEwuIElmIGl0J3MgdmFsaWQsIGRvIGFuCiAgICBhc3NlcnRpb24gY2hlY2sgdGhhdCBhZGRybGVuIGlzbid0IE5VTEwuCgogIDIwMDgtMDktMzAgSm9uYXRoYW4gTGFybW91cgogICogdGNwLmM6IEZpeCBidWcgIzI0MjI3LCB3cm9uZyBlcnJvciBtZXNzYWdlIGluIHRjcF9iaW5kLgoKICAyMDA4LTA4LTI2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbmV0LmgsIGlwX2FkZHIuaDogZml4ZWQgYnVnICMyNDEzMjogQ3Jvc3MtZGVwZW5kZW5jeSBiZXR3ZWVuIGlwX2FkZHIuaCBhbmQKICAgIGluZXQuaCAtPiBtb3ZlZCBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QgaW5fYWRkciBmcm9tIGlwX2FkZHIuaCB0byBpbmV0LmgKCiAgMjAwOC0wOC0xNCBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBmaXhlZCBidWcgIzIzODQ3OiBkb19jbG9zZV9pbnRlcm5hbCByZWZlcmVuY2VzIGZyZWVkIG1lbW9yeSAod2hlbgogICAgdGNwX2Nsb3NlIHJldHVybnMgIT0gRVJSX09LKQoKICAyMDA4LTA3LTA4IEZy6WTpcmljIEJlcm5vbgogICogc3RhdHMuaDogRml4IHNvbWUgYnVpbGQgYnVncyBpbnRyb2R1Y2VkIHdpdGggcGF0Y2ggIzY0ODMgKG1pc3Npbmcgc29tZSBwYXJhbWV0ZXJzCiAgICBpbiBtYWNyb3MsIG1haW5seSBpZiBNRU1fU1RBVFM9MCBhbmQgTUVNUF9TVEFUUz0wKS4KCiAgMjAwOC0wNi0yNCBKb25hdGhhbiBMYXJtb3VyCiAgKiB0Y3BfaW4uYzogRml4IGZvciBidWcgIzIzNjkzIGFzIHN1Z2dlc3RlZCBieSBBcnQgUi4gRW5zdXJlIGNzZWcgaXMgdW51c2VkCiAgICBpZiB0Y3Bfc2VnX2NvcHkgZmFpbHMuCgogIDIwMDgtMDYtMTcgU2ltb24gR29sZHNjaG1pZHQKICAqIGluZXRfY2hrc3VtLmM6IENoZWNrZWQgaW4gc29tZSBpZGVhcyBvZiBwYXRjaCAjNjQ2MCAobG9vcCBvcHRpbWl6YXRpb25zKQogICAgYW5kIGNyZWF0ZWQgZGVmaW5lcyBmb3Igc3dhcHBpbmcgYnl0ZXMgYW5kIGZvbGRpbmcgdTMyIHRvIHUxNi4KCiAgMjAwOC0wNS0zMCBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmMgUmVtb3ZlIHJlZHVuZGFudCAiaWYiIHN0YXRlbWVudCwgYW5kIHVzZSByZWFsIHJjdl93bmQKICAgIHJhdGhlciB0aGFuIHJjdl9hbm5fd25kIHdoZW4gZGVjaWRpbmcgaWYgcGFja2V0cyBhcmUgaW4td2luZG93LgogICAgQ29udHJpYnV0ZWQgYnkgPGFyYXNtdXNzZW5AY29uc3VsdGFudC5kYXRhc3lzLnN3cmkuZWR1PgoKICAyMDA4LTA1LTMwIEtpZXJhbiBNYW5zbGV5CiAgKiBtZW0uaDogRml4IEJVRyMyMzI1NC4gIENoYW5nZSBtYWNybyBkZWZpbml0aW9uIG9mIG1lbV8qIHRvIGFsbG93CiAgICBwYXNzaW5nIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdoZW4gTUVNX0xJQkNfTUFMTE9DIGlzIGRlZmluZWQuCgogIDIwMDgtMDUtMDkgSm9uYXRoYW4gTGFybW91cgogICogZXJyLmgsIGVyci5jLCBzb2NrZXRzLmM6IEZpeCBidWcgIzIzMTE5OiBSZW9yZGVyIHRpbWVvdXQgZXJyb3IgY29kZSB0bwogICAgc3RvcCBpdCBiZWluZyB0cmVhdGVkIGFzIGEgZmF0YWwgZXJyb3IuCgogIDIwMDgtMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgYnVnICMyMjgwNDogZGhjcF9zdG9wIGRvZXNuJ3QgY2xlYXIgTkVUSUZfRkxBR19ESENQCiAgICAoZmxhZyBub3cgY2xlYXJlZCkKCiAgMjAwOC0wMy0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIHRjcGlwLmMsIHRjcGlwLmgsIG9wdC5oOiBmaXhlZCBidWcgIzIxNDMzIChDYWxsaW5nIG1lbV9mcmVlL3BidWZfZnJlZQogICAgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBpc24ndCBzYWZlKTogc2V0IExXSVBfVVNFX0hFQVBfRlJPTV9JTlRFUlJVUFQgdG8gMQogICAgaW4gbHdpcG9wdHMuaCBvciB1c2UgcGJ1Zl9mcmVlX2NhbGxiYWNrKHApL21lbV9mcmVlX2NhbGxiYWNrKG0pIHRvIGZyZWUgcGJ1ZnMKICAgIG9yIGhlYXAgbWVtb3J5IGZyb20gaW50ZXJydXB0IGNvbnRleHQKCiAgMjAwOC0wMy0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmMsIHRjcC5jOiBmaXhlZCBidWcgIzIyMjQ5OiBkaXZpc2lvbiBieSB6ZXJvIGNvdWxkIG9jY3VyIGlmIGEgcmVtb3RlCiAgICBob3N0IHNlbnQgYSB6ZXJvIG1zcyBhcyBUQ1Agb3B0aW9uLgoKCihTVEFCTEUtMS4zLjApCgogICsrIE5ldyBmZWF0dXJlczoKCiAgMjAwOC0wMy0xMCBKb25hdGhhbiBMYXJtb3VyCiAgKiBpbmV0X2Noa3N1bS5jOiBBbGxvdyBjaG9pY2Ugb2Ygb25lIG9mIHRoZSBzYW1wbGUgYWxnb3JpdGhtcyB0byBiZQogICAgbWFkZSBmcm9tIGx3aXBvcHRzLmguIEZpeCBjb21tZW50IG9uIGhvdyB0byBvdmVycmlkZSBMV0lQX0NIS1NVTS4KCiAgMjAwOC0wMS0yMiBGculk6XJpYyBCZXJub24KICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwLmgsIG9wdC5oOiBSZW5hbWUgTFdJUF9DQUxDVUxBVEVfRUZGX1NFTkRfTVNTIGluIAogICAgVENQX0NBTENVTEFURV9FRkZfU0VORF9NU1MgdG8gaGF2ZSBjb2hlcmVudCBUQ1Agb3B0aW9ucyBuYW1lcy4KCiAgMjAwOC0wMS0xNCBGculk6XJpYyBCZXJub24KICAqIHJhd2FwaS50eHQsIGFwaV9tc2cuYywgdGNwLmMsIHRjcF9pbi5jLCB0Y3AuaDogY2hhbmdlcyBmb3IgdGFzayAjNzY3NSAiRW5hYmxlCiAgICB0byByZWZ1c2UgZGF0YSBvbiBhIFRDUF9FVkVOVF9SRUNWIGNhbGwiLiBJbXBvcnRhbnQsIGJlaGF2aW9yIGNoYW5nZXMgZm9yIHRoZQogICAgdGNwX3JlY3YgY2FsbGJhY2sgKHNlZSByYXdhcGkudHh0KS4KCiAgMjAwOC0wMS0xNCBGculk6XJpYyBCZXJub24sIE1hcmMgQ2hhbGFuZAogICogaXAuYzogSW50ZWdyYXRlIHBhdGNoICM2MzY5IiBpcF9pbnB1dCA6IGNoZWNraW5nIGJlZm9yZSByZWFsbG9jIi4KICAKICAyMDA4LTAxLTEyIEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuaCwgdGNwaXAuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IHJlcGxhY2UgdGhlIGZpZWxkCiAgICBuZXRjb25uOjpzZW0gcGVyIG5ldGNvbm46Om9wX2NvbXBsZXRlZCBsaWtlIHN1Z2dlc3RlZCBmb3IgdGhlIHRhc2sgIzc0OTAKICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLgoKICAyMDA4LTAxLTEyIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jLCBvcHQuaDogcmVwbGFjZSBERUZBVUxUX1JFQ1ZNQk9YX1NJWkUgcGVyIERFRkFVTFRfVENQX1JFQ1ZNQk9YX1NJWkUsCiAgICBERUZBVUxUX1VEUF9SRUNWTUJPWF9TSVpFIGFuZCBERUZBVUxUX1JBV19SRUNWTUJPWF9TSVpFICh0byBvcHRpbWl6ZSBxdWV1ZXMKICAgIHNpemVzKSwgbGlrZSBzdWdnZXN0ZWQgZm9yIHRoZSB0YXNrICM3NDkwICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLgoKICAyMDA4LTAxLTEwIEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuaCwgdGNwaXAuYzogYWRkIHRjcGlwX2NhbGxiYWNrX3dpdGhfYmxvY2sgZnVuY3Rpb24gZm9yIHRoZSB0YXNrICM3NDkwCiAgICAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4gdGNwaXBfY2FsbGJhY2sgaXMgYWx3YXlzIGRlZmluZWQgYXMKICAgICJibG9ja2luZyIgKCJibG9jayIgcGFyYW1ldGVyID0gMSkuCgogIDIwMDgtMDEtMTAgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogcmVwbGFjZSB0aGUgZmllbGQKICAgIG5ldGNvbm46Om1ib3ggKHN5c19tYm94X3QpIHBlciBuZXRjb25uOjpzZW0gKHN5c19zZW1fdCkgZm9yIHRoZSB0YXNrICM3NDkwCiAgICAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4KCiAgMjAwOC0wMS0wNSBGculk6XJpYyBCZXJub24KICAqIHN5c19hcmNoLnR4dCwgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcGlwLmMsIHN5cy5oLCBvcHQuaDoKICAgIEludHJvZHVjZSBjaGFuZ2VzIGZvciB0YXNrICM3NDkwICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiIHdpdGggc29tZQogICAgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc3lzX21ib3ggYXBpOiBzeXNfbWJveF9uZXcgdGFrZSBhICJzaXplIiBwYXJhbWV0ZXJzIHdoaWNoCiAgICBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIHF1ZXJ5IGJ5IHRoZSBtYWlsYm94LiBUaGVyZSBpcyB0aHJlZSBkZWZpbmVzCiAgICBpbiBvcHQuaCB0byBpbmRpY2F0ZSBzaXplcyBmb3IgdGNwaXA6Om1ib3gsIG5ldGNvbm46OnJlY3ZtYm94LCBhbmQgZm9yIHRoZSAKICAgIG5ldGNvbm46OmFjY2VwdG1ib3guIFBvcnQgbWFpbnRhaW5lcnMsIHlvdSBjYW4gZGVjaWRlIHRvIGp1c3QgYWRkIHRoaXMgbmV3IAogICAgcGFyYW1ldGVyIGluIHlvdXIgaW1wbGVtZW50YXRpb24sIGJ1dCB0byBpZ25vcmUgaXQgdG8ga2VlcCB0aGUgcHJldmlvdXMgYmVoYXZpb3IuCiAgICBUaGUgbmV3IHN5c19tYm94X3RyeXBvc3QgZnVuY3Rpb24gcmV0dXJuIGEgdmFsdWUgdG8ga25vdyBpZiB0aGUgbWFpbGJveCBpcwogICAgZnVsbCBvciBpZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQuIFRha2UgYSBsb29rIHRvIHN5c19hcmNoLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgogICAgVGhpcyBuZXcgZnVuY3Rpb24gaXMgdXNlZCBpbiB0Y3BpcF9pbnB1dCAoc28sIGNhbiBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0CiAgICBjb250ZXh0IHNpbmNlIHRoZSBmdW5jdGlvbiBpcyBub3QgYmxvY2tpbmcpLCBhbmQgaW4gcmVjdl91ZHAgYW5kIHJlY3ZfcmF3LgoKICAyMDA4LTAxLTA0IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQsIEpvbmF0aGFuIExhcm1vdXIKICAqIHJhd2FwaS50eHQsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jLCBzb2NrZXRzLmMsIHRjcC5oLCB0Y3AuYywKICAgIHRjcF9pbi5jLCBpbml0LmMsIG9wdC5oOiByZW5hbWUgYmFja2xvZyBvcHRpb25zIHdpdGggVENQXyBwcmVmaXgsIGxpbWl0IHRoZQogICAgImJhY2tsb2ciIHBhcmFtZXRlciBpbiBhbiB1OF90LCAwIGlzIGludGVycHJldGVkIGFzICJzbWFsbGVzdCBxdWV1ZSIsIGFkZAogICAgZG9jdW1lbnRhdGlvbiBpbiB0aGUgcmF3YXBpLnR4dCBmaWxlLgoKICAyMDA3LTEyLTMxIEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIFBlci1IZW5yaWsgTHVuZGJvbG0pCiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IEFkZCBUQ1AgcGVyc2lzdCB0aW1lcgoKICAyMDA3LTEyLTMxIEZy6WTpcmljIEJlcm5vbiwgTHVjYSBDZXJlc29saQogICogYXV0b2lwLmMsIGV0aGFycC5jOiBpcF9hZGRyLmg6IEludGVncmF0ZSBwYXRjaCAjNjM0ODogIkJyb2FkY2FzdCBBUlAgcGFja2V0cwogICAgaW4gYXV0b2lwIi4gVGhlIGNoYW5nZSBpbiBldGhhcnBfcmF3IGNvdWxkIGJlIHJlbW92ZWQsIHNpbmNlIGFsbCBjYWxscyB0bwogICAgZXRoYXJwX3JhdyB1c2UgZXRoYnJvYWRjYXN0IGZvciB0aGUgImV0aGRzdF9hZGRyIiBwYXJhbWV0ZXIuIEJ1dCBpdCBjb3VsZCBiZQogICAgd3JvbmcgaW4gdGhlIGZ1dHVyZS4KCiAgMjAwNy0xMi0zMCBGculk6XJpYyBCZXJub24sIFRvbSBFdmFucwogICogaXAuYzogRml4IGJ1ZyAjMjE4NDYgIkx3SVAgZG9lc24ndCBhcHBlYXIgdG8gcGVyZm9ybSBhbnkgSVAgU291cmNlIEFkZHJlc3MKICAgIEZpbHRlcmluZyIgcmVwb3J0ZWQgYnkgVG9tIEV2YW5zLgoKICAyMDA3LTEyLTIxIEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQsIEpvbmF0aGFuIExhcm1vdXIKICAqIHRjcC5oLCBvcHQuaCwgYXBpLmgsIGFwaV9tc2cuaCwgdGNwLmMsIHRjcF9pbi5jLCBhcGlfbGliLmMsIGFwaV9tc2cuYywKICAgIHNvY2tldHMuYywgaW5pdC5jOiB0YXNrICM3MjUyOiBJbXBsZW1lbnQgVENQIGxpc3RlbiBiYWNrbG9nOiBXYXJuaW5nOiByYXcgQVBJCiAgICBhcHBsaWNhdGlvbnMgaGF2ZSB0byBjYWxsICd0Y3BfYWNjZXB0ZWQocGNiKScgaW4gdGhlaXIgYWNjZXB0IGNhbGxiYWNrIHRvCiAgICBrZWVwIGFjY2VwdGluZyBuZXcgY29ubmVjdGlvbnMuCgogIDIwMDctMTItMTMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmMsIGVyci5oLCBlcnIuYywgc29ja2V0cy5jLCBkbnMuYywgZG5zLmg6IHJlcGxhY2UgImVudW0gZG5zX3Jlc3VsdCIKICAgIGJ5IGVycl90IHR5cGUuIEFkZCBhIG5ldyBlcnJfdCBjb2RlICJFUlJfSU5QUk9HUkVTUyIuCgogIDIwMDctMTItMTIgRnLpZOlyaWMgQmVybm9uCiAgKiBkbnMuaCwgZG5zLmMsIG9wdC5oOiBtb3ZlIEROUyBvcHRpb25zIHRvIHRoZSAicmlnaHQiIHBsYWNlLiBNb3N0IHZpc2libGVzCiAgICBhcmUgdGhlIG9uZSB3aGljaCBoYXZlIHJhbSB1c2FnZS4KCiAgMjAwNy0xMi0wNSBGculk6XJpYyBCZXJub24KICAqIG5ldGRiLmM6IGFkZCBhIExXSVBfRE5TX0FQSV9IT1NURU5UX1NUT1JBR0Ugb3B0aW9uIHRvIGRlY2lkZSB0byB1c2UgYSBzdGF0aWMKICAgIHNldCBvZiB2YXJpYWJsZXMgKD0wKSBvciBhIGxvY2FsIG9uZSAoPTEpLiBJbiB0aGlzIGxhc3QgY2FzZSwgeW91ciBwb3J0IHNob3VsZAogICAgcHJvdmlkZSBhIGZ1bmN0aW9uICJzdHJ1Y3QgaG9zdGVudCogc3lzX3RocmVhZF9ob3N0ZW50KCBzdHJ1Y3QgaG9zdGVudCogaCkiCiAgICB3aGljaCBoYXZlIHRvIGRvIGEgY29weSBvZiAiaCIgYW5kIHJldHVybiBhIHBvaW50ZXIgb250IHRoZSAicGVyLXRocmVhZCIgY29weS4KCiAgMjAwNy0xMi0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogaXBfaW5wdXQ6IGNoZWNrIGlmIGEgcGFja2V0IGlzIGZvciBpbnAgZmlyc3QgYmVmb3JlIGNoZWNraW5nIGFsbCBvdGhlcgogICAgbmV0aWZzIG9uIG5ldGlmX2xpc3QgKHNwZWVkcyB1cCBwYWNrZXQgcmVjZWl2aW5nIGluIG1vc3QgY2FzZXMpCgogIDIwMDctMTEtMzAgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jLCByYXcuYzogdGFzayAjNzQ5NzogU29ydCBsaXN0cyAocGNiLCBuZXRpZiwgLi4uKSBmb3IgZmFzdGVyIGFjY2VzcwogICAgVURQOiBtb3ZlIGEgKGNvbm5lY3RlZCkgcGNiIHNlbGVjdGVkIGZvciBpbnB1dCB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YKICAgIHBjYnMgc28gdGhhdCBpdCBpcyBmb3VuZCBmYXN0ZXIgbmV4dCB0aW1lLiBTYW1lIGZvciBSQVcgcGNicyB0aGF0IGhhdmUgZWF0ZW4KICAgIGEgcGFja2V0LgoKICAyMDA3LTExLTI4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYywgc3RhdHMuYywgc3RhdHMuaCwgb3B0Lmg6IEludHJvZHVjZWQgRVRIQVJQX1NUQVRTCgogIDIwMDctMTEtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZGhjcF91bmZvbGRfcmVwbHkoKSB1c2VzIHBidWZfY29weV9wYXJ0aWFsIGluc3RlYWQgb2YgaXRzIG93biBjb3B5CiAgICBhbGdvcml0aG0uCgogIDIwMDctMTEtMjQgU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGRiLmgsIG5ldGRiLmMsIHNvY2tldHMuaC8uYzogTW92ZWQgbHdpcF9nZXRob3N0YnluYW1lIGZyb20gc29ja2V0cy5jCiAgICB0byB0aGUgbmV3IGZpbGUgbmV0ZGIuYzsgaW5jbHVkZWQgbHdpcF9nZXRhZGRyaW5mby4KCiAgMjAwNy0xMS0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIG9wdC5oLCB0Y3AuYywgdGNwX2luLmM6IGltcGxlbWVudGVkIGNhbGN1bGF0aW5nIHRoZSBlZmZlY3RpdmUgc2VuZC1tc3MKICAgIGJhc2VkIG9uIHRoZSBNVFUgb2YgdGhlIG5ldGlmIHVzZWQgdG8gc2VuZC4gRW5hYmxlZCBieSBkZWZhdWx0LiBEaXNhYmxlIGJ5CiAgICBzZXR0aW5nIExXSVBfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyB0byAwLiBUaGlzIGZpeGVzIGJ1ZyAjMjE0OTIuCgogIDIwMDctMTEtMTkgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmMsIGRucy5oLCBkbnMuYzogSW1wbGVtZW50IEROU19ET0VTX05BTUVfQ0hFQ0sgb3B0aW9uIChjaGVjayBpZiBuYW1lCiAgICByZWNlaXZlZCBtYXRjaCB0aGUgbmFtZSBxdWVyeSksIGltcGxlbWVudCBETlNfVVNFU19TVEFUSUNfQlVGICh0aGUgcGxhY2Ugd2hlcmUKICAgIGNvcHkgZG5zIHBheWxvYWQgdG8gcGFyc2UgdGhlIHJlc3BvbnNlKSwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIHBsYWNlCiAgICBmb3IgYSBuZXcgcXVlcnksIGFuZCBmaXggc29tZSBtaW5vciBwcm9ibGVtcy4KCiAgMjAwNy0xMS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV3IGZpbGVzOiBpcHY0L2luZXQuYywgaXB2NC9pbmV0X2Noa3N1bS5jLCBpcHY2L2luZXQ2LmMKICAgIHJlbW92ZWQgZmlsZXM6IGNvcmUvaW5ldC5jLCBjb3JlL2luZXQ2LmMKICAgIE1vdmVkIGluZXQgZmlsZXMgaW50byBpcHY0L2lwdjYgZGlyZWN0b3J5OyBzcGxpdHRlZCBpbmV0LmMvaW5ldC5oIGludG8KICAgIGluZXQgYW5kIGNoa3N1bSBwYXJ0OyBjaGFuZ2VkIGluY2x1ZGVzIGluIGFsbCBsd0lQIGZpbGVzIGFzIGFwcHJvcHJpYXRlCgogIDIwMDctMTEtMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbXNnLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXQuaCwgc29ja2V0LmM6IEFkZGVkIHNlcXVlbnRpYWwKICAgIGRucyByZXNvbHZlciBmdW5jdGlvbiBmb3IgbmV0Y29ubiBhcGkgKG5ldGNvbm5fZ2V0aG9zdGJ5bmFtZSkgYW5kIHNvY2tldCBhcGkKICAgIChnZXRob3N0YnluYW1lL2dldGhvc3RieW5hbWVfcikuCgogIDIwMDctMTEtMTUgSmltIFBldHRpbmF0bywgRnLpZOlyaWMgQmVybm9uCiAgKiBvcHQuaCwgaW5pdC5jLCB0Y3BpcC5jLCBkaGNwLmMsIGRucy5oLCBkbnMuYzogYWRkIEROUyBjbGllbnQgZm9yIHNpbXBsZSBuYW1lCiAgICByZXF1ZXN0cyB3aXRoIFJBVyBhcGkgaW50ZXJmYWNlLiBJbml0aWFsaXphdGlvbiBpcyBkb25lIGluIGx3aXBfaW5pdCgpIHdpdGgKICAgIGJ1aWxkIHRpbWUgb3B0aW9ucy4gRE5TIHRpbWVyIGlzIGFkZGVkIGluIHRjcGlwX3RocmVhZCBjb250ZXh0LiBESENQIGNhbiBzZXQKICAgIEROUyBzZXJ2ZXIgaXAgYWRkcmVzc2VzIHdoZW4gb3B0aW9ucyBhcmUgcmVjZWl2ZWQuIFlvdSBuZWVkIHRvIHNldCBMV0lQX0ROUz0xCiAgICBpbiB5b3VyIGx3aXBvcHRzLmggZmlsZSAoTFdJUF9ETlM9MCBpbiBvcHQuaCkuIEROU19ERUJVRyBjYW4gYmUgc2V0IHRvIGdldAogICAgc29tZSB0cmFjZXMgd2l0aCBMV0lQX0RFQlVHRi4gU2FuaXR5IGNoZWNrIGhhdmUgYmVlbiBhZGRlZC4gVGhlcmUgaXMgYSAidG9kbyIKICAgIGxpc3Qgd2l0aCBwb2ludHMgdG8gaW1wcm92ZS4KCiAgMjAwNy0xMS0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1pYjIuYzogUGF0Y2ggIzYyMTU6IGFkZGVkIGlmQWRtaW5TdGF0dXMgd3JpdGUgc3VwcG9ydCAoaWYgZXhwbGljaXRseQogICAgZW5hYmxlZCBieSBkZWZpbmluZyBTTk1QX1NBRkVfUkVRVUVTVFMgdG8gMCk7IGFkZGVkIGNvZGUgdG8gY2hlY2sgbGluayBzdGF0dXMKICAgIGZvciBpZk9wZXJTdGF0dXMgaWYgTFdJUF9ORVRJRl9MSU5LX0NBTExCQUNLIGlzIGRlZmluZWQuCgogIDIwMDctMTEtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbXNnLmggYW5kIGRlcGVuZGVudCBmaWxlczogVGFzayAjNzQxMDogUmVtb3ZlZCB0aGUgbmVlZCB0byBpbmNsdWRlCiAgICBjb3JlIGhlYWRlciBmaWxlcyBpbiBhcGkuaCAoaXAvdGNwL3VkcC9yYXcuaCkgdG8gaGlkZSB0aGUgaW50ZXJuYWwKICAgIGltcGxlbWVudGF0aW9uIGZyb20gbmV0Y29ubiBhcGkgYXBwbGljYXRpb25zLgoKICAyMDA3LTExLTAzIEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIG9wdC5oOiBhZGQgU09fUkNWQlVGIG9wdGlvbiBmb3IgVURQICYKICAgIFJBVyBuZXRjb25uLiBZb3UgbmVlZCB0byBzZXQgTFdJUF9TT19SQ1ZCVUY9MSBpbiB5b3VyIGx3aXBvcHRzLmggKGl0J3MgZGlzYWJsZWQKICAgIGJ5IGRlZmF1bHQpLiBOZXRjb25uIEFQSSB1c2VycyBjYW4gdXNlIHRoZSBuZXRjb25uX3JlY3ZfYnVmc2l6ZSBtYWNybyB0byBhY2Nlc3MKICAgIGl0LiBUaGlzIGlzIGEgZmlyc3QgcmVsZWFzZSB3aGljaCBoYXZlIHRvIGJlIGltcHJvdmUgZm9yIFRDUC4gTm90ZSBpdCB1c2VkIHRoZQogICAgbmV0Y29ubjo6cmVjdl9hdmFpbCB3aGljaCBuZWVkIHRvIGJlIG1vcmUgInRocmVhZC1zYWZlIiAobm90ZSB0aGVyZSBpcyBhbHJlYWR5CiAgICB0aGUgcHJvYmxlbSBmb3IgRklPTlJFQUQgd2l0aCBsd2lwX2lvY3RsL2lvY3Rsc29ja2V0KS4KCiAgMjAwNy0xMS0wMSBGculk6XJpYyBCZXJub24sIE1hcmMgQ2hhbGFuZAogICogc29ja2V0cy5oLCBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jLCB0Y3AuaCwgdGNwX291dC5jOgogICAgSW50ZWdyYXRlICJwYXRjaCAjNjI1MCA6IE1TR19NT1JFIGZsYWcgZm9yIHNlbmQiLiBNU0dfTU9SRSBpcyB1c2VkIGF0IHNvY2tldCBhcGkKICAgIGxheWVyLCBORVRDT05OX01PUkUgYXQgbmV0Y29ubiBhcGkgbGF5ZXIsIGFuZCBUQ1BfV1JJVEVfRkxBR19NT1JFIGF0IHJhdyBhcGkKICAgIGxheWVyLiBUaGlzIG9wdGlvbiBlbmFibGUgdG8gZGVsYXllZCBUQ1AgUFVTSCBmbGFnIG9uIG11bHRpcGxlICJ3cml0ZSIgY2FsbHMuCiAgICBOb3RlIHRoYXQgcHJldmlvdXMgImNvcHkiIHBhcmFtZXRlciBmb3IgIndyaXRlIiBBUElzIGlzIG5vdyBjYWxsZWQgImFwaWZsYWdzIi4KCiAgMjAwNy0xMC0yNCBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogQWRkIG1hY3JvIEFQSV9FVkVOVCBpbiB0aGUgc2FtZSBzcGlyaXQgdGhhbiAKICAgIFRDUF9FVkVOVF94eHggbWFjcm9zIHRvIGdldCBhIGNvZGUgbW9yZSByZWFkYWJsZS4gSXQgY291bGQgYWxzbyBoZWxwIHRvIHJlbW92ZQogICAgc29tZSBjb2RlIChsaWtlIHdlIGhhdmUgdGFsayBpbiAicGF0Y2ggIzU5MTkgOiBDcmVhdGUgY29tcGlsZSBzd2l0Y2ggdG8gcmVtb3ZlCiAgICBzZWxlY3QgY29kZSIpLCBidXQgaXQgY291bGQgYmUgZG9uZSBsYXRlci4KCiAgMjAwNy0xMC0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWFueSBmaWxlczogQ2hhbmdlZCBpbml0aWFsaXphdGlvbjogbWFueSBpbml0IGZ1bmN0aW9ucyBhcmUgbm90IG5lZWRlZCBhbnkKICAgIG1vcmUgc2luY2Ugd2Ugbm93IHJlbHkgb24gdGhlIGNvbXBpbGVyIGluaXRpYWxpemluZyBnbG9iYWwgYW5kIHN0YXRpYwogICAgdmFyaWFibGVzIHRvIHplcm8hCgogIDIwMDctMTAtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYywgbWVtcC5jLCBtaWIyLmMsIGlwX2ZyYWcuaCwgbWVtcF9zdGQuaCwgb3B0Lmg6IENoYW5nZWQgSVBfUkVBU1NFTUJMWQogICAgdG8gZW5xdWV1ZSB0aGUgcmVjZWl2ZWQgcGJ1ZnMgc28gdGhhdCBtdWx0aXBsZSBwYWNrZXRzIGNhbiBiZSByZWFzc2VtYmxlZAogICAgc2ltdWx0YW5lb3VzbHkgYW5kIG5vIHN0YXRpYyByZWFzc2VtYmx5IGJ1ZmZlciBpcyBuZWVkZWQuCgogIDIwMDctMTAtMDUgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcGlwLmMsIGV0aGFycC5oLCBldGhhcnAuYzogbW92ZWQgZXRoZXJuZXRfaW5wdXQgZnJvbSB0Y3BpcC5jIHRvIGV0aGFycC5jIHNvCiAgICBhbGwgbmV0aWZzIChvciBwb3J0cykgY2FuIHVzZSBpdC4KCiAgMjAwNy0xMC0wNSBGculk6XJpYyBCZXJub24KICAqIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmM6IGFkZCBmdW5jdGlvbiBuZXRpZmFwaV9uZXRpZl9zZXRfZGVmYXVsdC4gQ2hhbmdlIHRoZSAKICAgIGNvbW1vbiBmdW5jdGlvbiB0byByZWR1Y2UgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgKGZvciBhbGwgZnVuY3Rpb25zIHVzaW5nCiAgICBvbmx5IHRoZSAibmV0aWYiIHBhcmFtZXRlcikuCgogIDIwMDctMTAtMDMgRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZmFwaS5oLCBuZXRpZmFwaS5jOiBhZGQgZnVuY3Rpb25zIG5ldGlmYXBpX25ldGlmX3NldF91cCwgbmV0aWZhcGlfbmV0aWZfc2V0X2Rvd24sCiAgICBuZXRpZmFwaV9hdXRvaXBfc3RhcnQgYW5kIG5ldGlmYXBpX2F1dG9pcF9zdG9wLiBVc2UgYSBjb21tb24gZnVuY3Rpb24gdG8gcmVkdWNlCiAgICBhIGxpdHRsZSBiaXQgdGhlIGZvb3RwcmludCAoZm9yIGFsbCBmdW5jdGlvbnMgdXNpbmcgb25seSB0aGUgIm5ldGlmIiBwYXJhbWV0ZXIpLgoKICAyMDA3LTA5LTE1IEZy6WTpcmljIEJlcm5vbgogICogdWRwLmgsIHVkcC5jLCBzb2NrZXRzLmM6IENoYW5nZXMgZm9yICIjMjA1MDMgSUdNUCBJbXByb3ZlbWVudCIuIEFkZCBJUF9NVUxUSUNBU1RfSUYKICAgIG9wdGlvbiBpbiBzb2NrZXQgQVBJLCBhbmQgYSBuZXcgZmllbGQgIm11bHRpY2FzdF9pcCIgaW4gInN0cnVjdCB1ZHBfcGNiIiAoZm9yCiAgICBuZXRjb25uIGFuZCByYXcgQVBJIHVzZXJzKSwgb25seSBpZiBMV0lQX0lHTVA9MS4gQWRkIGdldHNvY2tvcHQgcHJvY2Vzc2luZyBmb3IKICAgIElQX01VTFRJQ0FTVF9UVEwgYW5kIElQX01VTFRJQ0FTVF9JRi4KCiAgMjAwNy0wOS0xMCBGculk6XJpYyBCZXJub24KICAqIHNubXAuaCwgbWliMi5jOiBlbmFibGUgdG8gcmVtb3ZlIFNOTVAgdGltZXIgKHdoaWNoIGNvbnN1bW5lIHNldmVyYWwgY3ljbGVzCiAgICBldmVuIHdoZW4gaXQncyBub3QgbmVjZXNzYXJ5KS4gc25tcF9hZ2VudC50eHQgdGVsbCB0byBjYWxsIHNubXBfaW5jX3N5c3VwdGltZSgpCiAgICBlYWNoIDEwbXMgKGJ1dCwgaXQncyBpbnRydXNpdmUgaWYgeW91IHVzZSBzeXNfdGltZW91dCBmZWF0dXJlKS4gTm93LCB5b3UgY2FuCiAgICBkZWNpZGUgdG8gY2FsbCBzbm1wX2FkZF9zeXN1cHRpbWUoMTAwKSBlYWNoIDEwMDBtcyAod2hpY2ggaXMgYmlnZ2VyICJzdGVwIiwgYnV0CiAgICBjYWxsIHRvIGEgbG93ZXIgZnJlcXVlbmN5KS4gT3IsIHlvdSBjYW4gZGVjaWRlIHRvIG5vdCBjYWxsIHNubXBfaW5jX3N5c3VwdGltZSgpCiAgICBvciBzbm1wX2FkZF9zeXN1cHRpbWUoKSwgYW5kIHRvIGRlZmluZSB0aGUgU05NUF9HRVRfU1lTVVBUSU1FKHN5c3VwdGltZSkgbWFjcm8uCiAgICBUaGlzIG9uZSBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdCBpbiBtaWIyLmMuIFNOTVBfR0VUX1NZU1VQVElNRSBpcyBjYWxsZWQgaW5zaWRlCiAgICBzbm1wX2dldF9zeXN1cHRpbWUodTMyX3QgKnZhbHVlKSwgYW5kIGVuYWJsZSB0byBjaGFuZ2UgInN5c3VwdGltZSIgdmFsdWUgb25seQogICAgd2hlbiBpdCdzIHF1ZXJpZWQgKGFueSBkaXJlY3QgY2FsbCB0byAic3lzdXB0aW1lIiBpcyBjaGFuZ2VkIGJ5IGEgY2FsbCB0byAKICAgIHNubXBfZ2V0X3N5c3VwdGltZSkuCgogIDIwMDctMDktMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogaWdtcC5oLCBpZ21wLmMsIG5ldGlmLmgsIG5ldGlmLmMsIGlwLmM6IFRvIGVuYWJsZSB0byBoYXZlIGludGVyZmFjZXMgd2l0aCBJR01QLAogICAgYW5kIG90aGVycyB3aXRob3V0IGl0LCB0aGVyZSBpcyBhIG5ldyBORVRJRl9GTEFHX0lHTVAgZmxhZyB0byBzZXQgaW4gbmV0aWYtPmZsYWdzCiAgICBpZiB5b3Ugd2FudCBJR01QIG9uIGFuIGludGVyZmFjZS4gaWdtcF9zdG9wKCkgaXMgbm93IGNhbGxlZCBpbnNpZGUgbmV0aWZfcmVtb3ZlKCkuCiAgICBpZ21wX3JlcG9ydF9ncm91cHMoKSBpcyBub3cgY2FsbGVkIGluc2lkZSBuZXRpZl9zZXRfbGlua191cCgpIChuZWVkIHRvIGhhdmUKICAgIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSz0xKSB0byByZXNlbmQgcmVwb3J0cyBvbmNlIHRoZSBsaW5rIGlzIHVwIChhdm9pZCB0byB3YWl0CiAgICB0aGUgbmV4dCBxdWVyeSBtZXNzYWdlIHRvIHJlY2VpdmUgdGhlIG1hdGNoaW5nIG11bHRpY2FzdCBzdHJlYW1zKS4KCiAgMjAwNy0wOS0wOCBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgaXAuaCwgYXBpLmgsIHRjcC5oOiBkZWNsYXJlIGEgInN0cnVjdCBpcF9wY2IiIHdoaWNoIG9ubHkgY29udGFpbnMKICAgIElQX1BDQi4gQWRkIGluIHRoZSBuZXRjb25uJ3MgInBjYiIgdW5pb24gYSAic3RydWN0IGlwX3BjYiAqaXA7IiAobm8gc2l6ZSBjaGFuZ2UpLgogICAgVXNlIHRoaXMgbmV3IGZpZWxkIHRvIGFjY2VzcyB0byBjb21tb24gcGNiIGZpZWxkcyAodHRsLCB0b3MsIHNvX29wdGlvbnMsIGV0Yy4uLikuCiAgICBFbmFibGUgdG8gYWNjZXNzIHRvIHRoZXNlIGZpZWxkcyB3aXRoIExXSVBfVENQPTAuCgogIDIwMDctMDktMDUgRnLpZOlyaWMgQmVybm9uCiAgKiB1ZHAuYywgaXB2NC9pY21wLmMsIGlwdjQvaXAuYywgaXB2Ni9pY21wLmMsIGlwdjYvaXA2LmMsIGlwdjQvaWNtcC5oLAogICAgaXB2Ni9pY21wLmgsIG9wdC5oOiBJbnRlZ3JhdGUgInRhc2sgIzcyNzIgOiBMV0lQX0lDTVAgb3B0aW9uIi4gVGhlIG5ldyBvcHRpb24KICAgIExXSVBfSUNNUCBlbmFibGUvZGlzYWJsZSBJQ01QIG1vZHVsZSBpbnNpZGUgdGhlIElQIHN0YWNrIChlbmFibGUgcGVyIGRlZmF1bHQpLgogICAgQmUgY2FyZWZ1bCwgZGlzYWJsaW5nIElDTVAgbWFrZSB5b3VyIHByb2R1Y3Qgbm9uLWNvbXBsaWFudCB0byBSRkMxMTIyLCBidXQKICAgIGhlbHAgdG8gcmVkdWNlIGZvb3RwcmludCwgYW5kIHRvIHJlZHVjZSAidmlzaWJpbGl0eSIgb24gdGhlIEludGVybmV0LgoKICAyMDA3LTA5LTA1IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIG9wdC5oLCBzeXMuaCwgdGNwaXAuYywgc2xpcGlmLmMsIHBwcC5jLCBzeXNfYXJjaC50eHQ6IENoYW5nZSBwYXJhbWV0ZXJzIGxpc3QKICAgIGZvciBzeXNfdGhyZWFkX25ldyAoc2VlICJ0YXNrICM3MjUyIDogQ3JlYXRlIHN5c190aHJlYWRfbmV3X2V4KCkiKS4gVHdvIG5ldwogICAgcGFyYW1ldGVycyBoYXZlIHRvIGJlIHByb3ZpZGVkOiBhIHRhc2sgbmFtZSwgYW5kIGEgdGFzayBzdGFjayBzaXplLiBGb3IgdGhpcwogICAgb25lLCBzaW5jZSBpdCdzIHBsYXRmb3JtIGRlcGVuZGFudCwgeW91IGNvdWxkIGRlZmluZSB0aGUgYmVzdCBvbmUgZm9yIHlvdSBpbgogICAgeW91ciBsd2lwb3B0cy5oLiBGb3IgcG9ydCBtYWludGFpbmVycywgeW91IGNhbiBqdXN0IGFkZCB0aGVzZSBuZXcgcGFyYW1ldGVycwogICAgaW4geW91ciBzeXNfYXJjaC5jIGZpbGUsIGFuZCBidXQgaXQncyBub3QgbWFuZGF0b3J5LCB1c2UgdGhlbSBpbiB5b3VyIE9TCiAgICBzcGVjaWZpYyBmdW5jdGlvbnMuCgogIDIwMDctMDktMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBpbmV0LmMsIGF1dG9pcC5jLCBtc2dfaW4uYywgbXNnX291dC5jLCBpbml0LmM6IE1vdmUgc29tZSBidWlsZCB0aW1lIGNoZWNraW5ncwogICAgaW5zaWRlIGluaXQuYyBmb3IgdGFzayAjNzE0MiAiU2FuaXR5IGNoZWNrIHVzZXItY29uZmlndXJhYmxlIHZhbHVlcyIuCgogIDIwMDctMDktMDQgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogaWdtcC5oLCBpZ21wLmMsIG1lbXBfc3RkLmgsIG1lbXAuYywgaW5pdC5jLCBvcHQuaDogUmVwbGFjZSBtZW1fbWFsbG9jIGNhbGwgYnkKICAgIG1lbXBfbWFsbG9jLCBhbmQgdXNlIGEgbmV3IE1FTVBfTlVNX0lHTVBfR1JPVVAgb3B0aW9uIChzZWUgb3B0LmggdG8gZGVmaW5lIHRoZQogICAgdmFsdWUpLiBJdCB3aWxsIGF2b2lkIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIHByb2JsZW1zLCB1c2UgYSBjb3VudGVyIHRvIGtub3cKICAgIGhvdyBtYW55IHRpbWVzIGEgZ3JvdXAgaXMgdXNlZCBvbiBhbiBuZXRpZiwgYW5kIGZyZWUgaXQgd2hlbiBhbGwgYXBwbGljYXRpb25zCiAgICBsZWF2ZSBpdC4gTUVNUF9OVU1fSUdNUF9HUk9VUCBnb3QgOCBhcyBkZWZhdWx0IHZhbHVlIChhbmQgaW5pdC5jIGdvdCBhIHNhbml0eQogICAgY2hlY2sgaWYgTFdJUF9JR01QIT0wKS4KCiAgMjAwNy0wOS0wMyBGculk6XJpYyBCZXJub24KICAqIGlnbXAuaCwgaWdtcC5jLCBzb2NrZXRzLmMsIGFwaV9tc2cuYzogQ2hhbmdlcyBmb3IgIiMyMDUwMyBJR01QIEltcHJvdmVtZW50Ii4KICAgIEluaXRpYWxpemUgaWdtcF9tYWNfZmlsdGVyIHRvIE5VTEwgaW4gbmV0aWZfYWRkICh0aGlzIGZpZWxkIHNob3VsZCBiZSBzZXQgaW4KICAgIHRoZSBuZXRpZidzICJpbml0IiBmdW5jdGlvbikuIFVzZSB0aGUgImltcl9pbnRlcmZhY2UiIGZpZWxkIChmb3Igc29ja2V0IGxheWVyKQogICAgYW5kL29yIHRoZSAiaW50ZXJmYWNlIiBmaWVsZCAoZm9yIG5ldGNvbm4gbGF5ZXIpLCBmb3Igam9pbi9sZWF2ZSBvcGVyYXRpb25zLgogICAgVGhlIGlnbXBfam9pbi9sZWF2ZWdyb3VwIGZpcnN0IHBhcmFtZXRlciBjaGFuZ2UgZnJvbSBhIG5ldGlmIHRvIGFuIGlwYWRkci4KICAgIFRoaXMgZmllbGQgY291bGQgYmUgYSBuZXRpZidzIGlwYWRkciwgb3IgImFueSIgKHNhbWUgbWVhbmluZyB0aGFuIGlwX2FkZHJfaXNhbnkpLgoKICAyMDA3LTA4LTMwIEZy6WTpcmljIEJlcm5vbgogICogQWRkIG5ldGJ1Zi5oLCBuZXRidWYuYywgQ2hhbmdlIGFwaS5oLCBhcGlfbGliLmM6ICM3MjQ5ICJTcGxpdCBuZXRidWYgZnVuY3Rpb25zCiAgICBmcm9tIGFwaS9hcGlfbGliIi4gTm93IG5ldGJ1ZiBBUEkgaXMgaW5kZXBlbmRhbnQgb2YgbmV0Y29ubiwgYW5kIGNhbiBiZSB1c2VkCiAgICB3aXRoIG90aGVyIEFQSSAoYXBwbGljYXRpb24gYmFzZWQgb24gcmF3IEFQSSwgb3IgZnV0dXJlICJzb2NrZXQyIiBBUEkpLiBQb3J0cwogICAgbWFpbnRhaW5lcnMganVzdCBoYXZlIHRvIGFkZCBzcmMvYXBpL25ldGJ1Zi5jIGluIHRoZWlyIG1ha2VmaWxlL3Byb2plY3RzLgoKICAyMDA3LTA4LTMwIEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogaW5pdC5jOiBBZGQgZmlyc3QgdmVyc2lvbiBvZiBsd2lwX3Nhbml0eV9jaGVjayBmb3IgdGFzayAjNzE0MiAiU2FuaXR5IGNoZWNrCiAgICB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLgoKICAyMDA3LTA4LTI5IEZy6WTpcmljIEJlcm5vbgogICogaWdtcC5oLCBpZ21wLmMsIHRjcGlwLmMsIGluaXQuYywgbmV0aWYuYzogY2hhbmdlIGlnbXBfaW5pdCBhbmQgYWRkIGlnbXBfc3RhcnQuCiAgICBpZ21wX3N0YXJ0IGlzIGNhbGwgaW5zaWRlIG5ldGlmX2FkZC4gTm93LCBpZ21wIGluaXRpYWxpemF0aW9uIGlzIGluIHRoZSBzYW1lCiAgICBzcGlyaXQgdGhhbiB0aGUgb3RoZXJzIG1vZHVsZXMuIE1vZGlmeSBzb21lIElHTVAgZGVidWcgdHJhY2VzLgoKICAyMDA3LTA4LTI5IEZy6WTpcmljIEJlcm5vbgogICogQWRkIGluaXQuaCwgaW5pdC5jLCBDaGFuZ2Ugb3B0LmgsIHRjcGlwLmM6IFRhc2sgICM3MjEzICJBZGQgYSBsd2lwX2luaXQgZnVuY3Rpb24iCiAgICBBZGQgbHdpcF9pbml0IGZ1bmN0aW9uIHRvIHJlZ3JvdXAgYWxsIG1vZHVsZXMgaW5pdGlhbGl6YXRpb25zLCBhbmQgdG8gcHJvdmlkZQogICAgYSBwbGFjZSB0byBhZGQgY29kZSBmb3IgdGFzayAjNzE0MiAiU2FuaXR5IGNoZWNrIHVzZXItY29uZmlndXJhYmxlIHZhbHVlcyIuCiAgICBQb3J0cyBtYWludGFpbmVycyBzaG91bGQgcmVtb3ZlIGRpcmVjdCBpbml0aWFsaXphdGlvbnMgY2FsbHMgZnJvbSB0aGVpciBjb2RlLAogICAgYW5kIGFkZCBpbml0LmMgaW4gdGhlaXIgbWFrZWZpbGVzLiBOb3RlIHRoYXQgbHdpcF9pbml0KCkgZnVuY3Rpb24gaXMgY2FsbGVkCiAgICBpbnNpZGUgdGNwaXBfaW5pdCwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgcmF3IGFwaSB1c2VycyBzaW5jZSBhbGwgY2FsbHMgYXJlCiAgICBkaXNhYmxlZCB3aGVuIG1hdGNoaW5nIG9wdGlvbnMgYXJlIGRpc2FibGVkLiBBbHNvIG5vdGUgdGhhdCB0aGVpciBpcyBuZXcgb3B0aW9ucwogICAgaW4gb3B0LmgsIHlvdSBzaG91bGQgY29uZmlndXJlIGluIHlvdXIgbHdpcG9wdHMuaCAodGhleSBhcmUgZW5hYmxlZCBwZXIgZGVmYXVsdCkuCgogIDIwMDctMDgtMjYgTWFyYyBCb3VjaGVyCiAgKiBhcGlfbXNnLmM6IGRvX2Nsb3NlX2ludGVybmFsKCk6IFJlc2V0IHRoZSBjYWxsYmFja3MgYW5kIGFyZyAoY29ubikgdG8gTlVMTAogICAgc2luY2UgdGhleSBjYW4gdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIGJlIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgY29ubgogICAgcG9pbnRlciBhZnRlciB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQgKGFuZCBjb25uIGhhcyBiZWVuIGZyZWVkKS4gCgogIDIwMDctMDgtMjUgRnLpZOlyaWMgQmVybm9uIChBcnRlbSBNaWdhZXYncyBQYXRjaCkKICAqIG5ldGlmLmgsIG5ldGlmLmM6IEludGVncmF0ZSAicGF0Y2ggIzYxNjMgOiBGdW5jdGlvbiB0byBjaGVjayBpZiBsaW5rIGxheWVyIGlzIHVwIi4KICAgIEFkZCBhIG5ldGlmX2lzX2xpbmtfdXAoKSBmdW5jdGlvbiBpZiBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgb3B0aW9uIGlzIHNldC4KCiAgMjAwNy0wOC0yMiBGculk6XJpYyBCZXJub24KICAqIG5ldGlmLmgsIG5ldGlmLmMsIG9wdC5oOiBSZW5hbWUgTFdJUF9ORVRJRl9DQUxMQkFDSyBpbiBMV0lQX05FVElGX1NUQVRVU19DQUxMQkFDSwogICAgdG8gYmUgY29oZXJlbnQgd2l0aCBuZXcgTFdJUF9ORVRJRl9MSU5LX0NBTExCQUNLIG9wdGlvbiBiZWZvcmUgbmV4dCByZWxlYXNlLgoKICAyMDA3LTA4LTIyIEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuaCwgdGNwaXAuYywgZXRoZXJuZXRpZi5jLCBvcHQuaDogcmVtb3ZlIG9wdGlvbnMgRVRIQVJQX1RDUElQX0lOUFVUICYKICAgIEVUSEFSUF9UQ1BJUF9FVEhJTlBVVCwgbm93LCBvbmx5ICJldGhpbnB1dCIgY29kZSBpcyBzdXBwb3J0ZWQsIGV2ZW4gaWYgdGhlIAogICAgbmFtZSBpcyB0Y3BpcF9pbnB1dCAod2Uga2VlcCB0aGUgbmFtZSBvZiAxLjIuMCBmdW5jdGlvbikuCgogIDIwMDctMDgtMTcgSmFyZWQgR3J1YmIKICAqIG1lbXBfc3RkLmgsIG1lbXAuaCwgbWVtcC5jLCBtZW0uYywgc3RhdHMuYzogKFRhc2sgIzcxMzYpIENlbnRyYWxpemUgbWVtcG9vbCAKICAgIHNldHRpbmdzIGludG8gbmV3IG1lbXBfc3RkLmggYW5kIG9wdGlvbmFsIHVzZXIgZmlsZSBsd2lwcG9vbHMuaC4gVGhpcyBhZGRzCiAgICBtb3JlIGR5bmFtaWMgbWVtcG9vbHMsIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKICAgIG1lbXBvb2xzIGZvciBtZW1fbWFsbG9jLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogYXBpX21zZy5jOiBJbml0aWFsaXplIG5ld2Nvbm4tPnN0YXRlIHRvIE5FVENPTk5fTk9ORSBpbiBhY2NlcHRfZnVuY3Rpb247CiAgICBvdGhlcndpc2UgaXQgd2FzIGxlZnQgdG8gTkVUQ09OTl9DTE9TRSBhbmQgc2VudF90Y3AoKSBjb3VsZCBwcmVtYXR1cmVseQogICAgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBzb2NrZXRzLmM6IGx3aXBfYWNjZXB0KCk6IGNoZWNrIG5ldGNvbm5fcGVlcigpIGVycm9yIHJldHVybi4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIG1lbS5jLCBtZW0uaDogQWRkZWQgbWVtX2NhbGxvYygpLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogdGNwaXAuYywgdGNwaXAuaCBtZW1wLmMsIG1lbXAuaDogQWRkZWQgZGlzdGluY3QgbWVtcCAoTUVNUF9UQ1BJUF9NU0dfSU5QS1QpCiAgICBmb3IgaW5wdXQgcGFja2V0cyB0byBwcmV2ZW50IGZsb29kcyBmcm9tIGNvbnN1bWluZyBhbGwgb2YgTUVNUF9UQ1BJUF9NU0cKICAgIGFuZCBzdGFydmluZyBvdGhlciBtZXNzYWdlIHR5cGVzLgogICAgUmVuYW1lZCBNRU1QX1RDUElQX01TRyB0byBNRU1QX1RDUElQX01TR19BUEkKCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHBidWYuYywgcGJ1Zi5oLCBldGhhcnAuYywgdGNwX2luLmMsIHNvY2tldHMuYzogU3BsaXQgcGJ1ZiBmbGFncyBpbiBwYnVmCiAgICB0eXBlIGFuZCBmbGdzIChsYXRlciByZW5hbWVkIHRvIGZsYWdzKS4KICAgIFVzZSBlbnVtIHBidWZfZmxhZyBhcyBwYnVmX3R5cGUuICBSZW51bWJlciBQQlVGX0ZMQUdfKi4KICAgIEltcHJvdmVkIGx3aXBfcmVjdmZyb20oKS4gIFRDUCBwdXNoIG5vdyBwcm9wYWdhdGVkLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogZXRoZXJuZXRpZi5jLCBjb250cmliL3BvcnRzL3ZhcmlvdXM6IGV0aGJyb2FkY2FzdCBub3cgYSBzaGFyZWQgZ2xvYmFsCiAgICBwcm92aWRlZCBieSBldGhhcnAuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBwcHBfb2UuYyBwcHBfb2UuaCwgYXV0aC5jIGNoYXAuYyBmc20uYyBsY3AuYyBwcHAuYyBwcHAuaCwKICAgIGV0aGFycC5jIGV0aGVybmV0aWYuYywgZXRoYXJwLmgsIG9wdC5oIHRjcGlwLmgsIHRjcGlwLmM6CiAgICBBZGRlZCBQUFBvRSBzdXBwb3J0IGFuZCB2YXJpb3VzIFBQUCBpbXByb3ZlbWVudHMuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgaXBfZnJhZy5jLCBwYnVmLmMsIGFwaS5oLCBwYnVmLmg6IEludHJvZHVjZWQgcGJ1Zl9jb3B5X3BhcnRpYWwsCiAgICBtYWtpbmcgbmV0YnVmX2NvcHlfcGFydGlhbCB1c2UgdGhpcyBmdW5jdGlvbi4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeCBidWcgIzIwNTA2OiBTbG93IHN0YXJ0IC8gaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBzdGFydHMgd2l0aAogICAgMiAqIG1zcyAoaW5zdGVhZCBvZiAxICogbXNzIHByZXZpb3VzbHkpIHRvIGNvbXBseSB3aXRoIHNvbWUgbmV3ZXIgUkZDcyBhbmQKICAgIG90aGVyIHN0YWNrcy4KCiAgMjAwNy0wNy0xMyBKYXJlZCBHcnViYiAoaW50ZWdyYXRlZCBieSBGculk6XJpYyBCZXJub24pCiAgKiBvcHQuaCwgbmV0aWYuaCwgbmV0aWYuYywgZXRoZXJuZXRpZi5jOiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGFkZAogICAgYSBsaW5rIGNhbGxiYWNrIGluIHRoZSBuZXRpZiBzdHJ1Y3QsIGFuZCBmdW5jdGlvbnMgdG8gaGFuZGxlIGl0LiBCZSBjYXJlZnVsbAogICAgZm9yIHBvcnQgbWFpbnRhaW5lcnMgdG8gYWRkIHRoZSBORVRJRl9GTEFHX0xJTktfVVAgZmxhZyAobGlrZSBpbiBldGhlcm5ldGlmLmMpCiAgICBpZiB5b3Ugd2FudCB0byBiZSBzdXJlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4uLgoKICAyMDA3LTA2LTMwIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5oLCBzb2NrZXRzLmM6IEltcGxlbWVudCBNU0dfUEVFSyBmbGFnIGZvciByZWN2L3JlY3Zmcm9tIGZ1bmN0aW9ucy4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmgsIGV0aGFycC5jOiBDb21iaW5lZCBldGhhcnBfcmVxdWVzdCB3aXRoIGV0aGFycF9yYXcgZm9yIGJvdGgKICAgIExXSVBfQVVUT0lQID0wIGFuZCA9MSB0byByZW1vdmUgcmVkdW5kYW50IGNvZGUuCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCBtZW1wLmMsIG1lbS5oLCBtZW1wLmgsIG9wdC5oOiB0YXNrICM2ODYzOiBJbnRyb2R1Y2VkIHRoZSBvcHRpb24KICAgIE1FTV9VU0VfUE9PTFMgdG8gdXNlIDQgcG9vbHMgd2l0aCBkaWZmZXJlbnQgc2l6ZWQgZWxlbWVudHMgaW5zdGVhZCBvZiBhCiAgICBoZWFwLiBUaGlzIGJvdGggcHJldmVudHMgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIGdpdmVzIGEgaGlnaGVyIHNwZWVkCiAgICBhdCB0aGUgY29zdCBvZiBtb3JlIG1lbW9yeSBjb25zdW1wdGlvbi4gVHVybmVkIG9mZiBieSBkZWZhdWx0LgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmMsIGFwaV9tc2cuYywgYXBpLmgsIGFwaV9tc2cuaDogQ29udmVydGVkIHRoZSBsZW5ndGggYXJndW1lbnQgb2YKICAgIG5ldGNvbm5fd3JpdGUgKGFuZCB0aGVyZWZvcmUgYWxzbyBhcGlfbXNnX21zZy5tc2cudy5sZW4pIGZyb20gdTE2X3QgaW50bwogICAgaW50IHRvIGJlIGFibGUgdG8gc2VuZCBhIGJpZ2dlciBidWZmZXIgdGhhbiA2NEsgd2l0aCBvbmUgdGltZSAobWFpbmx5CiAgICB1c2VkIGZyb20gbHdpcF9zZW5kKS4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIGFwaV9tc2cuYzogTW92ZWQgdGhlIG5hZ2xlIGFsZ29yaXRobSBmcm9tIG5ldGNvbm5fd3JpdGUvZG9fd3JpdGUKICAgIGludG8gYSBkZWZpbmUgKHRjcF9vdXRwdXRfbmFnbGUpIGluIHRjcC5oIHRvIHByb3ZpZGUgaXQgdG8gcmF3IGFwaSB1c2VycywgdG9vLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjAwMjE6IE1vdmVkIHNlbmRidWYtcHJvY2Vzc2luZyBpbgogICAgbmV0Y29ubl93cml0ZSBmcm9tIGFwaV9saWIuYyB0byBhcGlfbXNnLmMgdG8gYWxzbyBwcmV2ZW50IG11bHRpcGxlIGNvbnRleHQtCiAgICBjaGFuZ2VzIG9uIGxvdyBtZW1vcnkgb3IgZW1wdHkgc2VuZC1idWZmZXIuCgogIDIwMDctMDYtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBldGhhcnAuaDogQ2hhbmdlZCBldGhhcnAgdG8gdXNlIGEgZGVmaW5lZCBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aAogICAgb2YgNiB0byBhdm9pZCBsb2FkaW5nIG5ldGlmLT5od2FkZHJfbGVuIGV2ZXJ5IHRpbWUgKHNpbmNlIHRoaXMgZmlsZSBpcyBvbmx5CiAgICB1c2VkIGZvciBldGhlcm5ldCBhbmQgc3RydWN0IGV0aF9hZGRyIGFscmVhZHkgaGFkIGEgZGVmaW5lZCBsZW5ndGggb2YgNikuCgogIDIwMDctMDYtMTcgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYywgc29ja2V0cy5oOiBJbXBsZW1lbnRlZCBzb2NrZXQgb3B0aW9ucyBTT19OT19DSEVDSyBmb3IgVURQIHNvY2tldHMKICAgIHRvIGRpc2FibGUgVURQIGNoZWNrc3VtIGdlbmVyYXRpb24gb24gdHJhbnNtaXQuCgogIDIwMDctMDYtMTMgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdAogICogZGVidWcuaCwgYXBpX21zZy5jOiBjaGFuZ2UgTFdJUF9FUlJPUiB0byB1c2UgaXQgdG8gY2hlY2sgZXJyb3JzIGxpa2UgaW52YWxpZAogICAgcG9pbnRlcnMgb3IgcGFyYW1ldGVycywgYW5kIGxldCB0aGUgcG9zc2liaWxpdHkgdG8gcmVkZWZpbmVkIGl0IGluIGNjLmguIFVzZQogICAgdGhpcyBtYWNybyB0byBjaGVjayAiY29ubiIgcGFyYW1ldGVyIGluIGFwaV9tc2cuYyBmdW5jdGlvbnMuCgogIDIwMDctMDYtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYywgc29ja2V0cy5oOiBBZGRlZCBVRFAgbGl0ZSBzdXBwb3J0IGZvciBzb2NrZXRzCgogIDIwMDctMDYtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5oLCBvcHQuaCwgYXBpX21zZy5jLCBpcC5jLCB1ZHAuYzogSW5jbHVkZWQgc3dpdGNoIExXSVBfVURQTElURSAoZW5hYmxlZAogICAgYnkgZGVmYXVsdCkgdG8gc3dpdGNoIG9mZiBVRFAtTGl0ZSBzdXBwb3J0IGlmIG5vdCBuZWVkZWQgKHJlZHVjZXMgdWRwLmMgY29kZQogICAgc2l6ZSkKCiAgMjAwNy0wNi0wOSBEb21pbmlrIFNwaWVzIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikKICAqIGF1dG9pcC5oLCBhdXRvaXAuYywgZGhjcC5oLCBkaGNwLmMsIG5ldGlmLmgsIG5ldGlmLmMsIGV0aGFycC5oLCBldGhhcnAuYywgb3B0Lmg6CiAgICBBdXRvSVAgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIGZvciBJUHY0LCB3aXRoIG5ldyBvcHRpb25zIExXSVBfQVVUT0lQIGFuZAogICAgTFdJUF9ESENQX0FVVE9JUF9DT09QIGlmIHlvdSB3YW50IHRvIGNvb3BlcmF0ZSB3aXRoIERIQ1AuIFNvbWUgdGlwcyB0byBhZGFwdAogICAgKHNlZSBUT0RPIG1hcmsgaW4gdGhlIHNvdXJjZSBjb2RlKS4KCiAgMjAwNy0wNi0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmgsIGV0aGFycC5jLCBldGhlcm5ldGlmLmM6IE1vZGlmaWVkIG9yZGVyIG9mIHBhcmFtZXRlcnMgZm9yCiAgICBldGhhcnBfb3V0cHV0KCkgdG8gbWF0Y2ggbmV0aWYtPm91dHB1dCBzbyBldGhhcnBfb3V0cHV0KCkgY2FuIGJlIHVzZWQKICAgIGRpcmVjdGx5IGFzIG5ldGlmLT5vdXRwdXQgdG8gc2F2ZSBvbmUgZnVuY3Rpb24gY2FsbC4KCiAgMjAwNy0wNi0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuaCwgZXRoZXJuZXRpZi5jLCBzbGlwaWYuYywgbG9vcGlmLmM6IEFkZGVkIGRlZmluZQogICAgTkVUSUZfSU5JVF9TTk1QKG5ldGlmLCB0eXBlLCBzcGVlZCkgdG8gaW5pdGlhbGl6ZSBwZXItbmV0aWYgc25tcCB2YXJpYWJsZXMsCiAgICBhZGRlZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSB0byBldGhlcm5ldGlmLCBzbGlwaWYgYW5kIGxvb3BpZi4KCiAgMjAwNy0wNS0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGlwX2ZyYWcuYywgaXBfZnJhZy5oLCBpcC5jOiBBZGRlZCBvcHRpb24gSVBfRlJBR19VU0VTX1NUQVRJQ19CVUYKICAgIChkZWZhdWx0aW5nIHRvIG9mZiBmb3Igbm93KSB0aGF0IGNhbiBiZSBzZXQgdG8gMCB0byBzZW5kIGZyYWdtZW50ZWQKICAgIHBhY2tldHMgYnkgcGFzc2luZyBQQlVGX1JFRnMgZG93biB0aGUgc3RhY2suCgogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IEltcGxlbWVudCBTT19SQ1ZUSU1FTyBmb3IgYWNjZXB0IGFuZCByZWN2IG9uIFRDUAogICAgY29ubmVjdGlvbnMsIHN1Y2ggcHJlc2VudCBpbiBwYXRjaCAjNTk1OS4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBncm91cCB0aGUgZGlmZmVyZW50IE5FVENPTk5fVURQeHh4CiAgICBjb2RlIGluIG9ubHkgb25lIHBhcnQuLi4KCiAgMjAwNy0wNS0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbXAuaCwgbWVtcC5jOiBBZGRlZCBvcHRpb24gTUVNUF9PVkVSRkxPV19DSEVDSyB0byBjaGVjayBmb3IgbWVtcAogICAgZWxlbWVudHMgdG8gb3ZlcmZsb3cuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgYWRkaW5nIHNvbWUgYnl0ZXMgYmVmb3JlIGFuZCBhZnRlcgogICAgZWFjaCBwb29sIGVsZW1lbnQgKGluY3JlYXNpbmcgdGhlaXIgc2l6ZSwgb2YgY291cnNlKSwgZmlsbGluZyB0aGVtIHdpdGggYQogICAgcHJvbWluZW50IHZhbHVlIGFuZCBjaGVja2luZyB0aGVtIG9uIGZyZWVpbmcgdGhlIGVsZW1lbnQuCiAgICBTZXQgaXQgdG8gMiB0byBhbHNvIGNoZWNrIGV2ZXJ5IGVsZW1lbnQgaW4gZXZlcnkgcG9vbCBlYWNoIHRpbWUgbWVtcF9tYWxsb2MoKQogICAgb3IgbWVtcF9mcmVlKCkgaXMgY2FsbGVkIChzbG93ZXIgYnV0IG1vcmUgaGVscGZ1bCkuCgogIDIwMDctMDUtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBtZW1wLmgsIG1lbXAuYywgcGJ1Zi5jIChzZWUgdGFzayAjNjgzMSk6IHVzZSBhIG5ldyBtZW1wIHBvb2wgZm9yCiAgICBQQlVGX1BPT0wgcGJ1ZnMgaW5zdGVhZCBvZiB0aGUgb2xkIHBvb2wgaW1wbGVtZW50YXRpb24gaW4gcGJ1Zi5jIHRvIHJlZHVjZQogICAgY29kZSBzaXplLgoKICAyMDA3LTA1LTExIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jLCBuZXRpZmFwaS5oLCBuZXRpZmFwaS5jLCB0Y3BpcC5jOgogICAgSW5jbHVkZSBhIGZ1bmN0aW9uIHBvaW50ZXIgaW5zdGVhZCBvZiBhIHRhYmxlIGluZGV4IGluIHRoZSBtZXNzYWdlIHRvIHJlZHVjZQogICAgZm9vdHByaW50LiBEaXNhYmxlIHNvbWUgcGFydCBvZiBsd2lwX3NlbmQgYW5kIGx3aXBfc2VuZHRvIGlmIHNvbWUgb3B0aW9ucyBhcmUKICAgIG5vdCBzZXQgKExXSVBfVENQLCBMV0lQX1VEUCwgTFdJUF9SQVcpLgoKICAyMDA3LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiAqLmggKGV4Y2VwdCBuZXRpZi9wcHAvKi5oKTogSW5jbHVkZWQgcGF0Y2ggIzU0NDg6IGluY2x1ZGUgJyNpZmRlZiBfX2NwbHVzcGx1cwogICAgXCBleHRlcm4gIkMiIHsnIGluIGFsbCBoZWFkZXIgZmlsZXMuIE5vdyB5b3UgY2FuIHdyaXRlIHlvdXIgYXBwbGljYXRpb24gdXNpbmcKICAgIHRoZSBsd0lQIHN0YWNrIGluIEMrKyBhbmQgc2ltcGx5ICNpbmNsdWRlIHRoZSBjb3JlIGZpbGVzLiBOb3RlIEkgaGF2ZSBsZWZ0CiAgICBvdXQgdGhlIG5ldGlmL3BwcC8qaCBoZWFkZXIgZmlsZXMgZm9yIG5vdywgc2luY2UgSSBkb24ndCBrbm93IHdoaWNoIGZpbGVzIGFyZQogICAgaW5jbHVkZWQgYnkgYXBwbGljYXRpb25zIGFuZCB3aGljaCBhcmUgZm9yIGludGVybmFsIHVzZSBvbmx5LgoKICAyMDA3LTA1LTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgKi5jLyouaDogSW5jbHVkZWQgcGF0Y2ggIzU5MjA6IENyZWF0ZSBkZWZpbmUgdG8gb3ZlcnJpZGUgQy1saWJyYXJ5CiAgICBtZW1jcHkuIDIgRGVmaW5lcyBhcmUgY3JlYXRlZDogTUVNQ1BZKCkgZm9yIG5vcm1hbCBtZW1jcHksIFNNRU1DUFkoKSBmb3IKICAgIHNpdHVhdGlvbnMgd2hlcmUgc29tZSBjb21waWxlcnMgbWlnaHQgaW5saW5lIHRoZSBjb3B5IGFuZCBzYXZlIGEgZnVuY3Rpb24KICAgIGNhbGwuIEFsc28gcmVwbGFjZWQgYWxsIGNhbGxzIHRvIG1lbWNweSgpIHdpdGggY2FsbHMgdG8gKFMpTUVNQ1BZKCkuCgogIDIwMDctMDUtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5oOiBJZiBNRU1fTElCQ19NQUxMT0M9PTEsIGFsbG93IHRoZSBkZWZpbmVzIChlLmcuIG1lbV9tYWxsb2MoKSAtPiBtYWxsb2MoKSkKICAgIHRvIGJlIG92ZXJyaWRlbiBpbiBjYXNlIHRoZSBDLWxpYnJhcnkgbWFsbG9jIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwcm90ZWN0ZWQKICAgIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MuCgogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQgKEF0dGUgS29qbykKICAqIGV0aGFycC5jOiBJbnRyb2R1Y2VkIGZhc3Qgb25lLWVudHJ5LWNhY2hlIHRvIHNwZWVkIHVwIEFSUCBsb29rdXAgd2hlbiBzZW5kaW5nCiAgICBtdWx0aXBsZSBwYWNrZXRzIHRvIHRoZSBzYW1lIGhvc3QuCgogIDIwMDctMDUtMDQgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBGaXggYnVnICMxOTE2MiAibHdpcF9zZW50bzogYSBwb3NzaWJsZQogICAgdG8gY29ycnVwdCByZW1vdGUgYWRkci9wb3J0IGNvbm5lY3Rpb24gc3RhdGUiLiBSZWR1Y2UgcHJvYmxlbXMgIm5vdCBlbm91Z2h0IG1lbW9yeSIgd2l0aAogICAgbmV0YnVmIChpZiB3ZSByZWNlaXZlIGxvdCBvZiBkYXRhZ3JhbXMpLiBJbXByb3ZlIGx3aXBfc2VuZHRvIChvbmx5IG9uZSBleGNoYW5nZSBiZXR3ZWVuCiAgICBzb2NrZXRzIGFwaSBhbmQgYXBpX21zZyB3aGljaCBydW4gaW4gdGNwaXBfdGhyZWFkIGNvbnRleHQpLiBBZGQgbmV0Y29ubl9zZW50byBmdW5jdGlvbi4KICAgIFdhcm5pbmcsIGlmIHlvdSBkaXJlY3RseSBhY2Nlc3MgdG8gImZyb21hZGRyIiAmICJmcm9tcG9ydCIgZmllbGQgZnJvbSBuZXRidWYgc3RydWN0LAogICAgdGhlc2UgZmllbGRzIGFyZSBub3cgcmVuYW1lZCAiYWRkciIgJiAicG9ydCIuCgogIDIwMDctMDQtMTEgSm9uYXRoYW4gTGFybW91cgogICogc3lzLmgsIGFwaV9saWIuYzogUHJvdmlkZSBuZXcgc3lzX21ib3hfdHJ5ZmV0Y2ggZnVuY3Rpb24uIFJlcXVpcmUgcG9ydHMgdG8gcHJvdmlkZSBuZXcKICAgIHN5c19hcmNoX21ib3hfdHJ5ZmV0Y2ggZnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBpZiBvbmUgaXMgdGhlcmUsIG90aGVyd2lzZSByZXR1cm4KICAgIHdpdGggU1lTX01CT1hfRU1QVFkuIHN5c19hcmNoX21ib3hfdHJ5ZmV0Y2ggY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24tbGlrZSBtYWNybwogICAgYnkgdGhlIHBvcnQgaW4gc3lzX2FyY2guaCBpZiBkZXNpcmVkLgoKICAyMDA3LTA0LTA2IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCB0Y3BpcC5oLCB0Y3BpcC5jLCBuZXRpZmFwaS5oLCBuZXRpZmFwaS5jOiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9ORVRJRl9BUEkKICAgIGFsbG93IHRvIHVzZSB0aHJlYWQtc2FmZSBmdW5jdGlvbnMgdG8gYWRkL3JlbW92ZSBuZXRpZiBpbiBsaXN0LCBhbmQgdG8gc3RhcnQvc3RvcCBkaGNwCiAgICBjbGllbnRzLCB1c2luZyBuZXcgZnVuY3Rpb25zIGZyb20gbmV0aWZhcGkuaC4gRGlzYWJsZSBhcyBkZWZhdWx0IChubyBwb3J0IGNoYW5nZSB0byBkbykuCgogIDIwMDctMDQtMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmM6IHJlbXBsYWNlIEVOT0JVRlMgZXJyb3JzIG9uIGFsbG9jX3NvY2tldCBieSBFTkZJTEUgdG8gYmUgbW9yZSBCU0QgY29tcGxpYW50LgoKICAyMDA3LTA0LTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcmNoLmgsIGFwaV9tc2cuYywgZGhjcC5jLCBtc2dfaW4uYywgc29ja2V0cy5jOiBJbnRyb2R1Y2VkICNkZWZpbmUgTFdJUF9VTlVTRURfQVJHKHgpCiAgICB1c2UgdGhpcyBmb3IgYW5kIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmb3JtIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHlvdSBpbnRlbnRpb25hbGx5CiAgICBhcmUgbm90IHVzaW5nIHRoaXMgdmFyaWFibGUuIENhbiBiZSBvdmVycmlkZW4gaW4gY2MuaC4KCiAgMjAwNy0wMy0yOCBGculk6XJpYyBCZXJub24KICAqIG9wdC5oLCBuZXRpZi5oLCBkaGNwLmgsIGRoY3AuYzogTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfTkVUSUZfSE9TVE5BTUUgYWxsb3cgdG8KICAgIGRlZmluZSBhIGhvc3RuYW1lIGluIG5ldGlmIHN0cnVjdCAodGhpcyBpcyBqdXN0IGEgcG9pbnRlciwgc28sIHlvdSBjYW4gdXNlIGEgaGFyZGNvZGVkCiAgICBzdHJpbmcsIHBvaW50IG9uIG9uZSBvZiB5b3VyJ3MgZXRoZXJuZXRpZiBmaWVsZCwgb3IgYWxsb2MgYSBzdHJpbmcgeW91IHdpbGwgZnJlZSB5b3Vyc2VsZikuCiAgICBJdCB3aWxsIGJlIHVzZWQgYnkgREhDUCB0byByZWdpc3RlciBhIGNsaWVudCBob3N0bmFtZSwgYnV0IGNhbiBhbHNvIGJlIHVzZSB3aGVuIHlvdSBjYWxsCiAgICBzbm1wX3NldF9zeXNuYW1lLgoKICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbgogICogbmV0aWYuaCwgbmV0aWYuYzogQSBuZXcgTkVUSUZfRkxBR19FVEhBUlAgZmxhZyBpcyBkZWZpbmVkIGluIG5ldGlmLmgsIHRvIGFsbG93IHRvIAogICAgaW5pdGlhbGl6ZSBhIG5ldHdvcmsgaW50ZXJmYWNlJ3MgZmxhZyB3aXRoLiBJdCB0ZWxsIHRoaXMgaW50ZXJmYWNlIGlzIGFuIGV0aGVybmV0CiAgICBkZXZpY2UsIGFuZCB3ZSBjYW4gdXNlIEFSUCB3aXRoIGl0IHRvIGRvIGEgImdyYXR1aXRvdXMgQVJQIiAoUkZDIDMyMjAgIklQIE1vYmlsaXR5CiAgICBTdXBwb3J0IGZvciBJUHY0IiBzZWN0aW9uIDQuNikgd2hlbiBpbnRlcmZhY2UgaXMgInVwIiB3aXRoIG5ldGlmX3NldF91cCgpLgoKICAyMDA3LTAzLTI2IEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogb3B0LmgsIHRjcGlwLmM6IE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX0FSUCBhbGxvdyB0byBkaXNhYmxlIEFSUCBpbml0IGF0IGJ1aWxkCiAgICB0aW1lIGlmIHlvdSBvbmx5IHVzZSBQUFAgb3IgU0xJUC4gVGhlIGRlZmF1bHQgaXMgZW5hYmxlLiBOb3RlIHdlIGRvbid0IGhhdmUgdG8gY2FsbCAKICAgIGV0aGFycF9pbml0IGluIHlvdXIgcG9ydCdzIGluaXRpbGl6YXRpb24gc2VxdWVuY2UgaWYgeW91IHVzZSB0Y3BpcC5jLCBiZWNhdXNlIHRoaXMgY2FsbAogICAgaXMgZG9uZSBpbiB0Y3BpcF9pbml0IGZ1bmN0aW9uLgoKICAyMDA3LTAzLTIyIEZy6WTpcmljIEJlcm5vbgogICogc3RhdHMuaCwgc3RhdHMuYywgbXNnX2luLmM6IFN0YXRzIGNvdW50ZXJzIGNhbiBiZSBjaGFuZ2UgdG8gdTMyX3QgaWYgbmVjZXNzYXJ5IHdpdGggdGhlCiAgICBuZXcgb3B0aW9uIExXSVBfU1RBVFNfTEFSR0UuIElmIHlvdSBuZWVkIHRoaXMgb3B0aW9uLCBkZWZpbmUgTFdJUF9TVEFUU19MQVJHRSB0byAxIGluCiAgICB5b3VyIGx3aXBvcHRzLmguIE1vcmUsIHVudXNlZCBjb3VudGVycyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHN0YXRzIHN0cnVjdHMsIGFuZCBub3QgCiAgICBkaXNwbGF5IGJ5IHN0YXRzX2Rpc3BsYXkoKS4gTm90ZSB0aGF0IHNvbWUgb3B0aW9ucyAoU1lTX1NUQVRTIGFuZCBSQVdfU1RBVFMpIGFyZSBkZWZpbmVkCiAgICBidXQgbmV2ZXIgdXNlZC4gRml4IG1zZ19pbi5jIHdpdGggdGhlIGNvcnJlY3QgI2lmIHRlc3QgZm9yIGEgc3RhdCBkaXNwbGF5LgoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBuZXRpZi5jLCBuZXRpZi5oOiBBcHBseSBwYXRjaCM0MTk3IHdpdGggc29tZSBjaGFuZ2VzIChvcmlnaW5hdG9yOiByaXJlbGFuZEBobWdzbC5jb20pLiAKICAgIFByb3ZpZGVzIGNhbGxiYWNrIG9uIG5ldGlmIHVwL2Rvd24gc3RhdGUgY2hhbmdlLgoKICAyMDA3LTAzLTExIEZy6WTpcmljIEJlcm5vbiwgTWFjZSBHYWVsLCBTdGV2ZSBSZXlub2xkcwogICogc29ja2V0cy5oLCBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jLCBpZ21wLmgsIGlnbXAuYywKICAgIGlwLmMsIG5ldGlmLmgsIHRjcGlwLmMsIG9wdC5oOgogICAgTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfSUdNUCB0byBlbmFibGUgSUdNUCBwcm9jZXNzaW5nLiBCYXNlZCBvbiBvbmx5IG9uZSAKICAgIGZpbHRlciBwZXIgYWxsIG5ldHdvcmsgaW50ZXJmYWNlcy4gRGVjbGFyZSBhIG5ldyBmdW5jdGlvbiBpbiBuZXRpZiB0byBlbmFibGUgdG8KICAgIGNvbnRyb2wgdGhlIE1BQyBmaWx0ZXIgKHRvIHJlZHVjZSBsd0lQIHRyYWZmaWMgcHJvY2Vzc2luZykuCgogIDIwMDctMDMtMTEgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3AuaCwgdGNwLmMsIHNvY2tldHMuYywgdGNwX291dC5jLCB0Y3BfaW4uYywgb3B0Lmg6IEtlZXBhbGl2ZSB2YWx1ZXMgY2FuCiAgICBiZSBjb25maWd1cmVkIGF0IHJ1biB0aW1lIHdpdGggTFdJUF9UQ1BfS0VFUEFMSVZFLCBidXQgZG9uJ3QgY2hhbmdlIHRoaXMKICAgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyAoZGVmYXVsdCBhcmUgUkZDMTEyMiBjb21wbGlhbnQpLiBOb3RlCiAgICB0aGF0IFRDUF9LRUVQSURMRSBhbmQgVENQX0tFRVBJTlRWTCBoYXZlIHRvIGJlIHNldCBpbiBzZWNvbmRzLgoKICAyMDA3LTAzLTA4IEZy6WTpcmljIEJlcm5vbgogICogdGNwLmg6IEtlZXBhbGl2ZSB2YWx1ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLCBidXQgZG9uJ3QgY2hhbmdlCiAgICB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyAoZGVmYXVsdCBhcmUgUkZDMTEyMiBjb21wbGlhbnQpLgoKICAyMDA3LTAzLTA4IEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCB0Y3BpcC5jLCBzeXMuaCwgc3lzLmMsIGVyci5jLCBvcHQuaDoKICAgIEltcGxlbWVudCBMV0lQX1NPX1JDVlRJTUVPIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIFNPX1JDVlRJTUVPCiAgICBvbiBVRFAgc29ja2V0cy9uZXRjb25uLgoKICAyMDA3LTAzLTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbm1wX21zZy5oLCBtc2dfaW4uYzogU05NUCBVRFAgcG9ydHMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLgoKICAyMDA3LTAzLTA2IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgc29ja2V0cy5oLCBzb2NrZXRzLmMsIHRjcGlwLmMsIHN5cy5oLCBzeXMuYywgZXJyLmg6IAogICAgSW1wbGVtZW50IFNPX1JDVlRJTUVPIG9uIFVEUCBzb2NrZXRzL25ldGNvbm4uCgogIDIwMDctMDItMjggS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpCiAgKiBhcGlfbGliLmMsIHRjcGlwLmMsIG1lbXAuYywgbWVtcC5oOiBtYWtlIEFQSSBtc2cgc3RydWN0cyBhbGxvY2F0ZWQKICAgIG9uIHRoZSBzdGFjayBhbmQgcmVtb3ZlIHRoZSBBUEkgbXNnIHR5cGUgZnJvbSBtZW1wCgogIDIwMDctMDItMjYgSm9uYXRoYW4gTGFybW91ciAoYmFzZWQgb24gcGF0Y2ggZnJvbSBTaW1vbiBHb2xkc2NobWlkdCkKICAqIHNvY2tldHMuaCwgc29ja2V0cy5jOiBNb3ZlIHNvY2tldCBpbml0aWFsaXphdGlvbiB0byBuZXcKICAgIGx3aXBfc29ja2V0X2luaXQoKSBmdW5jdGlvbi4KICAgIE5PVEU6IHRoaXMgY2hhbmdlcyB0aGUgQVBJIHdpdGggcG9ydHMuIFBvcnRzIHdpbGwgaGF2ZSB0byBiZQogICAgdXBkYXRlZCB0byBjYWxsIGx3aXBfc29ja2V0X2luaXQoKSBub3cuCgogIDIwMDctMDItMjYgSm9uYXRoYW4gTGFybW91ciAoYmFzZWQgb24gcGF0Y2ggZnJvbSBTaW1vbiBHb2xkc2NobWlkdCkKICAqIGFwaV9saWIuYzogVXNlIG1lbWNweSBpbiBuZXRidWZfY29weV9wYXJ0aWFsLgoKCiAgKysgQnVnIGZpeGVzOgoKICAyMDA4LTAzLTE3IEZy6WTpcmljIEJlcm5vbiwgRWQgS2VyZWtlcwogICogaWdtcC5oLCBpZ21wLmM6IEZpeCBidWcgIzIyNjEzICJJR01QIGlwaGRyIHByb2JsZW0iIChjb3VsZCBoYXZlCiAgICBzb21lIHByb2JsZW1zIHRvIGZpbGwgdGhlIElQIGhlYWRlciBvbiBzb21lIHRhcmdldHMsIHVzZSBub3cgdGhlCiAgICBpcC5oIG1hY3JvcyB0byBkbyBpdCkuCgogIDIwMDgtMDMtMTMgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmM6IEZpeCBidWcgIzIyNDM1ICJsd2lwX3JlY3Zmcm9tIHdpdGggVENQIGJyZWFrOyIuIFVzaW5nCiAgICAobHdpcF8pcmVjdmZyb20gd2l0aCB2YWxpZCAiZnJvbSIgYW5kICJmcm9tbGVuIiBwYXJhbWV0ZXJzLCBvbiBhCiAgICBUQ1AgY29ubmVjdGlvbiBjYXVzZWQgYSBjcmFzaC4gTm90ZSB0aGF0IHVzaW5nIChsd2lwXylyZWN2ZnJvbQogICAgbGlrZSB0aGlzIGlzIGEgYml0IHNsb3cgYW5kIHRoYXQgdXNpbmcgKGx3aXApZ2V0cGVlcm5hbWUgaXMgdGhlCiAgICBnb29kIGx3aXAgd2F5IHRvIGRvIGl0IChzbywgdXNpbmcgcmVjdiBpcyBmYXN0ZXIgb24gdGNwIHNvY2tldHMpLgoKICAyMDA4LTAzLTEyIEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogYXBpX21zZy5jLCBjb250cmliL2FwcHMvcGluZy5jOiBGaXggYnVnICMyMjUzMCAiYXBpX21zZy5jJ3MKICAgIHJlY3ZfcmF3KCkgZG9lcyBub3QgY29uc3VtZSBkYXRhIiwgYW5kIHRoZSBwaW5nIHNhbXBsZSAod2l0aAogICAgTFdJUF9TT0NLRVQ9MSwgdGhlIGNvZGUgZGlkIHRoZSB3cm9uZyBzdXBwb3NpdGlvbiB0aGF0IGx3aXBfcmVjdmZyb20KICAgIHJldHVybmVkIHRoZSBJUCBwYXlsb2FkLCB3aXRob3V0IHRoZSBJUCBoZWFkZXIpLgoKICAyMDA4LTAzLTA0IEpvbmF0aGFuIExhcm1vdXIKICAqIG1lbS5jLCBzdGF0cy5jLCBtZW0uaDogYXBwbHkgcGF0Y2ggIzY0MTQgdG8gYXZvaWQgY29tcGlsZXIgZXJyb3JzCiAgYW5kL29yIHdhcm5pbmdzIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBtZW1fc2l6ZV90IGFuZCBzaXplX3QgZGlmZmVyLgogICogcGJ1Zi5jLCBwcHAuYzogRml4IHdhcm5pbmdzIG9uIHNvbWUgc3lzdGVtcyB3aXRoIG1lbV9tYWxsb2MuCgogIDIwMDgtMDMtMDQgS2llcmFuIE1hbnNsZXkgKGNvbnRyaWJ1dGlvbnMgYnkgb3RoZXJzKSAKICAqIE51bWVyb3VzIHNtYWxsIGNvbXBpbGVyIGVycm9yL3dhcm5pbmcgZml4ZXMgZnJvbSBjb250cmlidXRpb25zIHRvCiAgICBtYWlsaW5nIGxpc3QgYWZ0ZXIgMS4zLjAgcmVsZWFzZSBjYW5kaWRhdGUgbWFkZS4KCiAgMjAwOC0wMS0yNSBDdWkgaGVuZ2JpbiAoaW50ZWdyYXRlZCBieSBGculk6XJpYyBCZXJub24pCiAgKiBkbnMuYzogRml4IGJ1ZyAjMjIxMDggIkROUyBwcm9ibGVtIiBjYXVzZWQgYnkgdW5hbGlnbmVkIHN0cnVjdHVyZXMuCgogIDIwMDgtMDEtMTUgS2llcmFuIE1hbnNsZXkKICAqIHRjcF9vdXQuYzogQlVHMjA1MTEuICBNb2RpZnkgcGVyc2lzdCB0aW1lciB0byBzdGFydCB3aGVuIHdlIGFyZQogICAgcHJldmVudGVkIGZyb20gc2VuZGluZyBieSBhIHNtYWxsIHNlbmQgd2luZG93LCBub3QganVzdCBhIHplcm8KICAgIHNlbmQgd2luZG93LgoKICAyMDA4LTAxLTA5IEpvbmF0aGFuIExhcm1vdXIKICAqIG9wdC5oLCBpcC5jOiBSZW5hbWUgSVBfT1BUSU9OUyBkZWZpbmUgdG8gSVBfT1BUSU9OU19BTExPV0VEIHRvIGF2b2lkCiAgICBjb25mbGljdCB3aXRoIExpbnV4IHN5c3RlbSBoZWFkZXJzLgoKICAyMDA4LTAxLTA2IEpvbmF0aGFuIExhcm1vdXIKICAqIGRoY3AuYzogZml4IGJ1ZyAjMTk5Mjc6ICJESENQIE5BQ0sgcHJvYmxlbSIgYnkgY2xlYXJpbmcgYW55IGV4aXN0aW5nIHNldCBJUAogICAgYWRkcmVzcyBlbnRpcmVseSBvbiByZWNlaXZpbmcgYSBESENQTkFLLCBhbmQgcmVzdGFydGluZyBkaXNjb3ZlcnkuCgogIDIwMDctMTItMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHN5cy5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBmaXggYnVnICMyMTY5ODogIm5ldGNvbm4tPnJlY3ZfYXZhaWwKICAgIGlzIG5vdCBwcm90ZWN0ZWQiIGJ5IHVzaW5nIG5ldyBtYWNyb3MgZm9yIGludGVybG9ja2VkIGFjY2VzcyB0byBtb2RpZnkvdGVzdAogICAgbmV0Y29ubi0+cmVjdl9hdmFpbC4KCiAgMjAwNy0xMi0yMCBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBPbGVnIFR5c2hldikKICAqIHRjcF9pbi5jOiBmaXggYnVnIyAyMTUzNSAobnJ0eCBub3QgcmVzZXQgY29ycmVjdGx5IGluIFNZTl9TRU5UIHN0YXRlKQoKICAyMDA3LTEyLTIwIEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIFBlci1IZW5yaWsgTHVuZGJvbG0pCiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IGZpeCBidWcgIzIwMTk5IChiZXR0ZXIgaGFuZGxpbmcKICAgIG9mIHNpbGx5IHdpbmRvdyBhdm9pZGFuY2UgYW5kIHByZXZlbnQgbHdJUCBmcm9tIHNocmlua2luZyB0aGUgd2luZG93KQoKICAyMDA3LTEyLTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgdGNwX2luLmM6IGZpeCBidWcgIzIxNjk5IChzZWdtZW50IGxlYWsgaW4gb29zZXEgcHJvY2Vzc2luZyB3aGVuIGxhc3QKICAgIGRhdGEgcGFja2V0IHdhcyBsb3N0KTogYWRkIGFzc2VydCB0aGF0IGFsbCBzZWdtZW50IGxpc3RzIGFyZSBlbXB0eSBpbgogICAgdGNwX3BjYl9yZW1vdmUgYmVmb3JlIHNldHRpbmcgcGNiIHRvIENMT1NFRCBzdGF0ZTsgZG9uJ3QgZGlyZWN0bHkgc2V0IENMT1NFRAogICAgc3RhdGUgZnJvbSBMQVNUX0FDSyBpbiB0Y3BfcHJvY2VzcwoKICAyMDA3LTEyLTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmg6IGZpeCBidWcgIzIxNjU0OiBleGNsdWRlIGRlZmluaXRpb24gb2Ygc3RydWN0IHRpbWV2YWwgZnJvbSAjaWZuZGVmIEZEX1NFVAogICAgSWYgaW5jbHVkaW5nIDxzeXMvdGltZS5oPiBmb3Igc3lzdGVtLXN0cnVjdCB0aW1ldmFsLCBMV0lQX1RJTUVWQUxfUFJJVkFURSBub3cKICAgIGhhcyB0byBiZSBzZXQgdG8gMCBpbiBsd2lwb3B0cy5oCgogIDIwMDctMTItMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYywgYXBpX2xpYi5jOiBmaXggYnVnICMyMTY1NiAocmVjdm1ib3ggcHJvYmxlbSBpbiBuZXRjb25uIEFQSSk6IGFsd2F5cwogICAgYWxsb2NhdGUgYSByZWN2bWJveCBpbiBuZXRjb25uX25ld193aXRoX3Byb3RvX2FuZF9jYWxsYmFjay4gRm9yIGEgdGNwLWxpc3RlbgogICAgbmV0Y29ubiwgdGhpcyByZWN2bWJveCBpcyBsYXRlciBmcmVlZCBhbmQgYSBuZXcgbWJveCBpcyBhbGxvY2F0ZWQgZm9yIGFjY2VwdG1ib3guCiAgICBUaGlzIGlzIGEgZml4IGZvciB0aHJlYWQtc2FmZXR5IGFuZCBhbGxvY2F0ZXMgYWxsIGl0ZW1zIG5lZWRlZCBmb3IgYSBuZXRjb25uCiAgICB3aGVuIHRoZSBuZXRjb25uIGlzIGNyZWF0ZWQuCgogIDIwMDctMTEtMzAgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBmaXJzdCBhdHRlbXB0IHRvIGZpeCBidWcgIzIxNjU1IChESENQIGRvZXNuJ3Qgd29yayByZWxpYWJseSB3aXRoIG11bHRpcGxlCiAgICBuZXRpZnMpOiBpZiBMV0lQX0RIQ1AgaXMgZW5hYmxlZCwgVURQIHBhY2tldHMgdG8gREhDUF9DTElFTlRfUE9SVCBhcmUgcGFzc2VkCiAgICB0byBuZXRpZi0+ZGhjcC0+cGNiIG9ubHkgKGlmIHRoYXQgZXhpc3RzKSBhbmQgbm90IHRvIGFueSBvdGhlciBwY2IgZm9yIHRoZSBzYW1lCiAgICBwb3J0IChvbmx5IHNvbHV0aW9uIHRvIGxldCBVRFAgcGNicyAnYmluZCcgdG8gYSBuZXRpZiBpbnN0ZWFkIG9mIGFuIElQIGFkZHJlc3MpCgogIDIwMDctMTEtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IGZpeGVkIGJ1ZyAjMjE2NDMgKHVkcF9zZW5kL3Jhd19zZW5kIGRvbid0IGZhaWwgaWYgbmV0aWYgaXMgZG93bikgYnkKICAgIGxldHRpbmcgaXBfcm91dGUgb25seSB1c2UgbmV0aWZzIHRoYXQgYXJlIHVwLgoKICAyMDA3LTExLTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBlcnIuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogQ2hhbmdlZCBlcnJvciBoYW5kbGluZzogRVJSX01FTSwgRVJSX0JVRgogICAgYW5kIEVSUl9SVEUgYXJlIHNlZW4gYXMgbm9uLWZhdGFsLCBhbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4gbmV0Y29ubnMgYW5kCiAgICBzb2NrZXRzIGJsb2NrIG1vc3Qgb3BlcmF0aW9ucyBvbmNlIHRoZXkgaGF2ZSBzZWVuIGEgZmF0YWwgZXJyb3IuCgogIDIwMDctMTEtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5oLCB1ZHAuYywgZGhjcC5jOiBJbXBsZW1lbnRlZCBuZXcgZnVuY3Rpb24gdWRwX3NlbmR0b19pZiB3aGljaCB0YWtlcyB0aGUKICAgIG5ldGlmIHRvIHNlbmQgYXMgYW4gYXJndW1lbnQgKHRvIGJlIGFibGUgdG8gc2VuZCBvbiBuZXRpZnMgdGhhdCBhcmUgZG93bikuCgogIDIwMDctMTEtMjYgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxNTgyOiBwY2ItPmFja2VkIGFjY291bnRpbmcgY2FuIGJlIHdyb25nIHdoZW4gQUNLcwogICAgYXJyaXZlIG91dC1vZi1vcmRlcgoKICAyMDA3LTExLTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwX291dC5jLCBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjAyODc6IHRjcF9vdXRwdXRfbmFnbGUgc2VuZHMgdG9vIGVhcmx5CiAgICBGaXhlZCB0aGUgbmFnbGUgYWxnb3JpdGhtOyBuYWdsZSBub3cgYWxzbyB3b3JrcyBmb3IgYWxsIHJhdyBBUEkgYXBwbGljYXRpb25zCiAgICBhbmQgaGFzIHRvIGJlIGV4cGxpY2l0bHkgZGlzYWJsZWQgd2l0aCAndGNwX3BjYi0+ZmxhZ3MgfD0gVEZfTk9ERUxBWScKCiAgMjAwNy0xMS0xMiBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjA5MDAuIE5vdywgbW9zdAogICAgb2YgdGhlIG5ldGNvbm5fcGVlciBhbmQgbmV0Y29ubl9hZGRyIHByb2Nlc3NpbmcgaXMgZG9uZSBpbnNpZGUgdGNwaXBfdGhyZWFkCiAgICBjb250ZXh0IGluIGRvX2dldGFkZHIuCgogIDIwMDctMTEtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBGaXhlZCBidWc6IGFzc2VydCBmaXJlZCB3aGVuIE1FTVBfQVJQX1FVRVVFIHdhcyBlbXB0eSAod2hpY2ggY2FuCiAgICBoYXBwZW4gYW55IHRpbWUpLiBOb3cgdGhlIHBhY2tldCBzaW1wbHkgaXNuJ3QgZW5xdWV1ZWQgd2hlbiBvdXQgb2YgbWVtb3J5LgoKICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjE0OTQ6IFRoZSBzZW5kIG1zcyAocGNiLT5tc3MpIGlzIHNldCB0byA1MzYgKG9yCiAgICBUQ1BfTVNTIGlmIHRoYXQgaXMgc21hbGxlcikgYXMgbG9uZyBhcyBubyBNU1Mgb3B0aW9uIGlzIHJlY2VpdmVkIGZyb20gdGhlCiAgICByZW1vdGUgaG9zdC4KCiAgMjAwNy0xMS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTQ5MTogVGhlIE1TUyBvcHRpb24gc2VudCAod2l0aCBTWU4pCiAgICBpcyBub3cgYmFzZWQgb24gVENQX01TUyBpbnN0ZWFkIG9mIHBjYi0+bXNzIChvbiBwYXNzaXZlIG9wZW4gbm93IGVmZmVjdGl2ZWx5CiAgICBzZW5kaW5nIG91ciBjb25maWd1cmVkIFRDUF9NU1MgaW5zdGVhZCBvZiB0aGUgb25lIHJlY2VpdmVkKS4KCiAgMjAwNy0xMS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjExODE6IE9uIGFjdGl2ZSBvcGVuLCB0aGUgaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyB3YXMKICAgIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgVENQX01TUywgbm90IG9uIHRoZSBNU1Mgb3B0aW9uIHJlY2VpdmVkCiAgICB3aXRoIFNZTitBQ0suCgogIDIwMDctMTAtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jLCBpbmV0LmMsIGluZXQuaDogRml4ZWQgVURQTGl0ZTogc2VuZDogQ2hlY2tzdW0gd2FzIGFsd2F5cyBnZW5lcmF0ZWQgdG9vCiAgICBzaG9ydCBhbmQgYWxzbyB3YXMgZ2VuZXJhdGVkIHdyb25nIGlmIGNoZWNrc3VtIGNvdmVyYWdlICE9IHRvdF9sZW47CiAgICByZWNlaXZlOiBjaGVja3N1bSB3YXMgY2FsY3VsYXRlZCB3cm9uZyBpZiBjaGVja3N1bSBjb3ZlcmFnZSAhPSB0b3RfbGVuCgogIDIwMDctMTAtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jOiBsZnJlZSB3YXMgbm90IHVwZGF0ZWQgaW4gbWVtX3JlYWxsb2MhCgogIDIwMDctMTAtMDcgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmM6IEZpcnN0IHN0ZXAgdG8gZml4ICJidWcgIzIwOTAwIDogUG90ZW50aWFsCiAgICBjcmFzaCBlcnJvciBwcm9ibGVtIHdpdGggbmV0Y29ubl9wZWVyICYgbmV0Y29ubl9hZGRyIi4gVkVSWSBJTVBPUlRBTlQ6CiAgICB0aGlzIGNoYW5nZSBjYXVzZSBhbiBBUEkgYnJlYWthZ2UgZm9yIG5ldGNvbm5fYWRkciwgc2luY2UgYSBwYXJhbWV0ZXIKICAgIHR5cGUgY2hhbmdlLiBBbnkgY29tcGlsZXIgc2hvdWxkIGNhdXNlIGFuIGVycm9yIHdpdGhvdXQgYW55IGNoYW5nZXMgaW4KICAgIHlvdXJzIG5ldGNvbm5fcGVlciBjYWxscyAoc28sIGl0IGNhbid0IGJlIGEgInNpbGVudCBjaGFuZ2UiKS4gSXQgYWxzbwogICAgcmVkdWNlIGEgbGl0dGxlIGJpdCB0aGUgZm9vdHByaW50IGZvciBzb2NrZXQgbGF5ZXIgKGx3aXBfZ2V0cGVlcm5hbWUgJgogICAgbHdpcF9nZXRzb2NrbmFtZSB1c2Ugbm93IGEgY29tbW9uIGx3aXBfZ2V0YWRkcm5hbWUgZnVuY3Rpb24gc2luY2UgCiAgICBuZXRjb25uX3BlZXIgJiBuZXRjb25uX2FkZHIgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXJzKS4KCiAgMjAwNy0wOS0yMCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMjEwODAgKHRjcF9iaW5kIHdpdGhvdXQgY2hlY2sgcGNicyBpbiBUSU1FX1dBSVQgc3RhdGUpCiAgICBieSBjaGVja2luZyAgdGNwX3R3X3BjYnMgYWxzbwoKICAyMDA3LTA5LTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpY21wLmM6IEZpeGVkIGJ1ZyAjMjExMDcgKGRpZG4ndCByZXNldCBJUCBUVEwgaW4gSUNNUCBlY2hvIHJlcGxpZXMpCgogIDIwMDctMDktMTUgTWlrZSBLbGVzaG92CiAgKiBtZW0uYzogRml4ZWQgYnVnICMyMTA3NyAoaW5hY2N1cmFjeSBpbiBjYWxjdWxhdGlvbiBvZiBsd2lwX3N0YXQubWVtLnVzZWQpCgogIDIwMDctMDktMDYgRnLpZOlyaWMgQmVybm9uCiAgKiBzZXZlcmFsLWZpbGVzOiByZXBsYWNlIHNvbWUgI2luY2x1ZGUgImFyY2gvY2MuaCIgYnkgImx3aXAvYXJjaC5oIiwgb3Igc2ltcGx5IHJlbW92ZQogICAgaXQgYXMgbG9uZyBhcyAibHdpcC9vcHQuaCIgaXMgaW5jbHVkZWQgYmVmb3JlICh0aGlzIG9uZSBpbmNsdWRlICJsd2lwL2RlYnVnLmgiIHdoaWNoCiAgICBhbHJlYWR5IGluY2x1ZGUgImx3aXAvYXJjaC5oIikuIExpa2UgdGhhdCwgZGVmYXVsdCBkZWZpbmVzIGFyZSBwcm92aWRlZCBieSAibHdpcC9hcmNoLmgiCiAgICBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBpbiBjYy5oLCBpbiB0aGUgc2FtZSBzcGlyaXQgdGhhbiAibHdpcC9vcHQuaCIgZm9yIGx3aXBvcHRzLmguCgogIDIwMDctMDgtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBpZ21wLmgsIGlnbXAuYzogU29tZSBjaGFuZ2VzIHRvIHJlbW92ZSBzb21lIHJlZHVuZGFudCBjb2RlLCBhZGQgc29tZSB0cmFjZXMsIAogICAgYW5kIGZpeCBzb21lIGNvZGluZyBzdHlsZS4KCiAgMjAwNy0wOC0yOCBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmM6IEZpeCBUQ1BJUF9NU0dfSU5QS1QgcHJvY2Vzc2luZzogbm93LCB0Y3BpcF9pbnB1dCBjYW4gYmUgdXNlZCBmb3IgYW55CiAgICBraW5kIG9mIHBhY2tldHMuIFRoZXNlIHBhY2tldHMgYXJlIGNvbnNpZGVyZWQgbGlrZSBFdGhlcm5ldCBwYWNrZXRzIChwYXlsb2FkIAogICAgcG9pbnRpbmcgdG8gZXRoaGRyKSBpZiB0aGUgbmV0aWYgZ290IHRoZSBORVRJRl9GTEFHX0VUSEFSUCBmbGFnLiBFbHNlLCBwYWNrZXRzIAogICAgYXJlIGNvbnNpZGVyZWQgbGlrZSBJUCBwYWNrZXRzIChwYXlsb2FkIHBvaW50aW5nIHRvIGlwaGRyKS4KCiAgMjAwNy0wOC0yNyBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRmlyc3QgZml4IGZvciAiYnVnICMyMDkwMCA6IFBvdGVudGlhbCBjcmFzaCBlcnJvcgogICAgcHJvYmxlbSB3aXRoIG5ldGNvbm5fcGVlciAmIG5ldGNvbm5fYWRkciIuIEludHJvZHVjZSBORVRDT05OX0xJU1RFTiBuZXRjb25uX3N0YXRlCiAgICBhbmQgcmVtb3ZlIG9ic29sZXRlIG9uZXMgKE5FVENPTk5fUkVDViAmIE5FVENPTk5fQUNDRVBUKS4KCiAgMjAwNy0wOC0yNCBLaWVyYW4gTWFuc2xleQogICogaW5ldC5jIE1vZGlmeSAoYWNjID4+IDE2KSB0ZXN0IHRvICgoYWNjID4+IDE2KSAhPSAwKSB0byBoZWxwIGJ1Z2d5CiAgICBjb21waWxlciAoUGFyYWRpZ20gQysrKQoKICAyMDA3LTA4LTA5IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIHN0YXRzLmgsIHN0YXRzLmMsIGlnbXAuaCwgaWdtcC5jLCBvcHQuaDogRml4IGZvciBidWcgIzIwNTAzIDogSUdNUCBJbXByb3ZlbWVudC4KICAgIEludHJvZHVjZSBJR01QX1NUQVRTIHRvIGNlbnRyYWxpemUgc3RhdGlzdGljcyBtYW5hZ2VtZW50LgoKICAyMDA3LTA4LTA5IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIHVkcC5jOiBGaXggZm9yIGJ1ZyAjMjA1MDMgOiBJR01QIEltcHJvdmVtZW50LiBFbmFibGUgdG8gcmVjZWl2ZSBhIG11bHRpY2FzdAogICAgcGFja2V0IG9uIGEgdWRwIHBjYiBiaW5kZWQgb24gYW4gbmV0aWYncyBJUCBhZGRyZXNzLCBhbmQgbm90IG9uICJhbnkiLgoKICAyMDA3LTA4LTA5IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIGlnbXAuaCwgaWdtcC5jLCBpcC5jOiBGaXggbWlub3IgY2hhbmdlcyBmcm9tIGJ1ZyAjMjA1MDMgOiBJR01QIEltcHJvdmVtZW50LgogICAgVGhpcyBpcyBtYWlubHkgb24gdXNpbmcgbG9va3VwL2xvb2tmb3IsIGFuZCBzb21lIGNvZGluZyBzdHlsZXMuLi4KCiAgMjAwNy0wNy0yNiBGculk6XJpYyBCZXJub24gKGFuZCAidGhlZG9jdG9yIikKICAqIGlnbXAuYzogRml4IGJ1ZyAjMjA1OTUgdG8gYWNjZXB0IElHTVB2MyAiUXVlcnkiIG1lc3NhZ2VzLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmMsIHRjcC5jOiBBbm90aGVyIGZpeCBmb3IgYnVnICMyMDAyMTogYnkgbm90IHJldHVybmluZyBhbiBlcnJvciBpZgogICAgdGNwX291dHB1dCBmYWlscyBpbiB0Y3BfY2xvc2UsIHRoZSBjb2RlIGluIGRvX2Nsb3NlX2ludGVybmFsIGdldHMgc2ltcGxlcgogICAgKHRjcF9vdXRwdXQgaXMgY2FsbGVkIGFnYWluIGxhdGVyIGZyb20gdGNwIHRpbWVycykuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYzogRml4ZWQgYnVnICMyMDQyOTogdXNlIHRoZSBuZXcgcGJ1Zl9jb3B5X3BhcnRpYWwgaW5zdGVhZCBvZiB0aGUgb2xkCiAgICBjb3B5X2Zyb21fcGJ1Ziwgd2hpY2ggaWxsZWdhbGx5IG1vZGlmaWVkIHRoZSBnaXZlbiBwYnVmLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IHRjcF9lbnF1ZXVlOiBwY2ItPnNuZF9xdWV1ZWxlbiBkaWRuJ3Qgd29yayBmb3IgY2hhaW5lIFBCVUZfUkFNczoKICAgIGNoYW5nZWQgc25kX3F1ZXVlbGVuKysgdG8gc25kX3F1ZXVlbGVuICs9IHBidWZfY2xlbihwKS4KCiAgMjAwNy0wNy0yNCBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCB0Y3AuYzogRml4IGJ1ZyAjMjA0ODA6IENoZWNrIHRoZSBwY2IgcGFzc2VkIHRvIHRjcF9saXN0ZW4oKSBmb3IgdGhlCiAgICBjb3JyZWN0IHN0YXRlIChtdXN0IGJlIENMT1NFRCkuCgogIDIwMDctMDctMTMgVGhvbWFzIFRhcmFub3dza2kgKGNvbW1pdGVkIGJ5IEphcmVkIEdydWJiKQogICogbWVtcC5jOiBGaXggYnVnICMyMDQ3ODogbWVtcF9tYWxsb2MgcmV0dXJuZWQgTlVMTCtNRU1QX1NJWkUgb24gZmFpbGVkCiAgICBhbGxvY2F0aW9uLiBJdCBub3cgcmV0dXJucyBOVUxMLgoKICAyMDA3LTA3LTEzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBGaXggYnVnICMyMDMxODogYXBpX21zZyAicmVjdiIgY2FsbGJhY2tzIGRvbid0IGNhbGwgcGJ1Zl9mcmVlIGluCiAgICBhbGwgZXJyb3IgY2FzZXMuCgogIDIwMDctMDctMTMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmM6IEZpeCBidWcgIzIwMzE1OiBwb3NzaWJsZSBtZW1vcnkgbGVhayBwcm9ibGVtIGlmIHRjcF9saXN0ZW4gZmFpbGVkLAogICAgYmVjYXVzZSBjdXJyZW50IGNvZGUgZG9lc24ndCBmb2xsb3cgcmF3YXBpLnR4dCBkb2N1bWVudGF0aW9uLgoKICAyMDA3LTA3LTEzIEtpZXJhbiBNYW5zbGV5CiAgKiBzcmMvY29yZS90Y3BfaW4uYyBBcHBseSBwYXRjaCM1NzQxIGZyb20gT2xlZyBUeXNoZXYgdG8gZml4IGJ1ZyBpbgogICAgb3V0IG9mIHNlcXVlbmNlIHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgcGFja2V0cwoKICAyMDA3LTA3LTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZWFybHktYWxsLWZpbGVzOiBBZGRlZCBhc3NlcnRpb25zIHdoZXJlIFBCVUZfUkFNIHBidWZzIGFyZSB1c2VkIGFuZCBhbgogICAgYXNzdW1wdGlvbiBpcyBtYWRlIHRoYXQgdGhpcyBwYnVmIGlzIGluIG9uZSBwaWVjZSAoaS5lLiBub3QgY2hhaW5lZCkuIFRoZXNlCiAgICBhc3N1bXB0aW9ucyBjbGFzaCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBjb252ZXJ0aW5nIHRvIGZ1bGx5IHBvb2wtYmFzZWQKICAgIHBidWYgaW1wbGVtZW50YXRpb25zLCB3aGVyZSBQQlVGX1JBTSBwYnVmcyBtaWdodCBiZSBjaGFpbmVkLgoKICAyMDA3LTA3LTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmM6IEZpbmFsIGZpeCBmb3IgYnVnICMyMDAyMSBhbmQgc29tZSBvdGhlciBwcm9ibGVtcwogICAgd2hlbiBjbG9zaW5nIHRjcCBuZXRjb25uczogcmVtb3ZlZCBjb25uLT5zZW0sIGxlc3MgY29udGV4dCBzd2l0Y2hlcyB3aGVuCiAgICBjbG9zaW5nLCBib3RoIG5ldGNvbm5fY2xvc2UgYW5kIG5ldGNvbm5fZGVsZXRlIHNob3VsZCBzYWZlbHkgY2xvc2UgdGNwCiAgICBjb25uZWN0aW9ucy4KCiAgMjAwNy0wNy0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogaXB2NC9pcC5oLCBpcHY2L2lwLmgsIG9wdC5oLCBuZXRpZi5oLCBldGhhcnAuaCwgaXB2NC9pcC5jLCBuZXRpZi5jLCByYXcuYywKICAgIHRjcF9vdXQuYywgdWRwLmMsIGV0aGFycC5jOiBBZGRlZCBvcHRpb24gTFdJUF9ORVRJRl9IV0FERFJISU5UIChkZWZhdWx0PW9mZikKICAgIHRvIGNhY2hlIEFSUCB0YWJsZSBpbmRpY2VzIHdpdGggZWFjaCBwY2IgaW5zdGVhZCBvZiBzaW5nbGUtZW50cnkgY2FjaGUgZm9yCiAgICB0aGUgY29tcGxldGUgc3RhY2suCgogIDIwMDctMDctMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYzogQWRkZWQgc29tZSBBU1NFUlRTIGFuZCBjYXN0cyB0byBwcmV2ZW50CiAgICB3YXJuaW5ncyB3aGVuIGFzc2lnbmluZyB0byBzbWFsbGVyIHR5cGVzLgoKICAyMDA3LTA2LTI4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEFkZGVkIGNoZWNrIHRvIHByZXZlbnQgdGNwX3BjYi0+c25kX3F1ZXVlbGVuIGZyb20gb3ZlcmZsb3dpbmcuCgogIDIwMDctMDYtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oOiBGaXhlZCBidWcgIzIwMjg3OiBGaXhlZCBuYWdsZSBhbGdvcml0aG0gKHNlbmRpbmcgd2FzIGRvbmUgdG9vIGVhcmx5IGlmCiAgICBhIHNlZ21lbnQgY29udGFpbmVkIGNoYWluZWQgcGJ1ZnMpCgogIDIwMDctMDYtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBhdXRvaXAuYzogcmVwbGFjZSBtb3N0IG9mIHJhbmQoKSBjYWxscyBieSBhIG1hY3JvIExXSVBfQVVUT0lQX1JBTkQgd2hpY2ggY29tcHV0ZQogICAgYSAicHNldWRvLXJhbmRvbSIgdmFsdWUgYmFzZWQgb24gbmV0aWYncyBNQUMgYW5kIHNvbWUgYXV0b2lwIGZpZWxkcy4gSXQncyBhbHdheXMKICAgIHBvc3NpYmxlIHRvIGRlZmluZSB0aGlzIG1hY3JvIGluIHlvdXIgb3duIGx3aXBvcHRzLmggdG8gYWx3YXlzIHVzZSBDIGxpYnJhcnkncwogICAgcmFuZCgpLiBOb3RlIHRoYXQgYXV0b2lwX2NyZWF0ZV9yYW5kX2FkZHIgZG9lc24ndCB1c2UgdGhpcyBtYWNyby4KCiAgMjAwNy0wNi0yOCBGculk6XJpYyBCZXJub24KICAqIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmMsIHRjcGlwLmgsIHRjcGlwLmM6IFVwZGF0ZSBjb2RlIHRvIGhhbmRsZSB0aGUgb3B0aW9uCiAgICBMV0lQX1RDUElQX0NPUkVfTE9DS0lORywgYW5kIGRvIHNvbWUgY2hhbmdlcyB0byBiZSBjb2hlcmVudCB3aXRoIGxhc3QgbW9kaWZpY2F0aW9ucwogICAgaW4gYXBpX2xpYi9hcGlfbXNnICh1c2UgcG9pbnRlcnMgYW5kIG5vdCB0eXBlIHdpdGggdGFibGUsIGV0Yy4uLikgCgogIDIwMDctMDYtMjYgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5oOiBGaXhlZCBidWcgIzIwMjU5OiBzdHJ1Y3QgdWRwX2hkciB3YXMgbGFja2luZyB0aGUgcGFja2luIGRlZmluZXMuCgogIDIwMDctMDYtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBGaXhlZCBidWcgIzIwMjUzOiBpY21wX2Rlc3RfdW5yZWFjaCB3YXMgY2FsbGVkIHdpdGggYSB3cm9uZyBwLT5wYXlsb2FkCiAgICBmb3IgdWRwIHBhY2tldHMgd2l0aCBubyBtYXRjaGluZyBwY2IuCgogIDIwMDctMDYtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBGaXhlZCBidWcgIzIwMjIwOiBVRFAgUENCIHNlYXJjaCBpbiB1ZHBfaW5wdXQoKTogYSBub24tbG9jYWwgbWF0Y2gKICAgIGNvdWxkIGdldCB1ZHAgaW5wdXQgcGFja2V0cyBpZiB0aGUgcmVtb3RlIHNpZGUgbWF0Y2hlZC4KCiAgMjAwNy0wNi0xMyBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogRml4ZWQgYnVnICMyMDE4MCAoVENQIHBjYnMgbGlzdGVuaW5nIG9uIElQX0FERFJfQU5ZIGNvdWxkIGdldAogICAgY2hhbmdlZCBpbiBuZXRpZl9zZXRfaXBhZGRyIGlmIHByZXZpb3VzIG5ldGlmLT5pcF9hZGRyLmFkZHIgd2FzIDAuCgogIDIwMDctMDYtMTMgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogcGNiX25ldyBzZXRzIGNvbm4tPmVyciBpZiBwcm90b2NvbCBpcyBub3QgaW1wbGVtZW50ZWQKICAgIC0+IG5ldGNvbm5fbmV3Xy4uKCkgZG9lcyBub3QgYWxsb2NhdGUgYSBuZXcgY29ubmVjdGlvbiBmb3IgdW5zdXBwb3J0ZWQKICAgIHByb3RvY29scy4KCiAgMjAwNy0wNi0xMyBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmM6IGNoYW5nZSByZXR1cm4gZXhwcmVzc2lvbiBpbiBuZXRjb25uX2FkZHIgYW5kIG5ldGNvbm5fcGVlciwgYmVjYXVzZQogICAgY29ubi0+ZXJyIHdhcyByZXNldCB0byBFUlJfT0sgd2l0aG91dCBhbnkgcmVhc29ucyAoYW5kIGVycm9yIHdhcyBsb3N0KS4uLgoKICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgTWF0dGhpYXMgV2Vpc3NlcgogICogb3B0LmgsIG1lbS5oLCBtZW0uYywgbWVtcC5jLCBwYnVmLmMsIGlwX2ZyYWcuYywgdmouYzogRml4IGJ1ZyAjMjAxNjIuIFJlbmFtZQogICAgTUVNX0FMSUdOIGluIExXSVBfTUVNX0FMSUdOIGFuZCBNRU1fQUxJR05fU0laRSBpbiBMV0lQX01FTV9BTElHTl9TSVpFIHRvIGF2b2lkCiAgICBzb21lIG1hY3JvIG5hbWVzIGNvbGxpc2lvbiB3aXRoIHNvbWUgT1MgbWFjcm9zLgoKICAyMDA3LTA2LTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYzogVURQIExpdGU6IGNvcnJlY3RlZCB0aGUgdXNlIG9mIGNoa3N1bV9sZW4gKGJhc2VkIG9uIFJGQzM4Mjg6IGlmIGl0J3MgMCwKICAgIGNyZWF0ZSBjaGVja3N1bSBvdmVyIHRoZSBjb21wbGV0ZSBwYWNrZXQuIE9uIFJYLCBpZiBpdCdzIDwgOCAoYW5kIG5vdCAwKSwKICAgIGRpc2NhcmQgdGhlIHBhY2tldC4gQWxzbyByZW1vdmVkIHRoZSBkdXBsaWNhdGUgJ3VkcGhkci0+Y2hrc3VtID0gMCcgZm9yIGJvdGgKICAgIFVEUCAmIFVEUCBMaXRlLgoKICAyMDA3LTA2LTExIFNyaW5pdmFzIEdvbGxha290YSAmIE9sZWcgVHlzaGV2CiAgKiB0Y3Bfb3V0LmM6IEZpeCBmb3IgYnVnICMyMDA3NSA6ICJBIHByb2JsZW0gd2l0aCBrZWVwLWFsaXZlIHRpbWVyIGFuZCBUQ1AgZmxhZ3MiCiAgICB3aGVyZSBUQ1AgZmxhZ3Mgd2Fzbid0IGluaXRpYWxpemVkIGluIHRjcF9rZWVwYWxpdmUuCgogIDIwMDctMDYtMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiB1ZHBfaW5wdXQoKTogSW5wdXQgcGJ1ZiB3YXMgbm90IGZyZWVkIGlmIHBjYiBoYWQgbm8gcmVjdiBmdW5jdGlvbgogICAgcmVnaXN0ZXJlZCwgcC0+cGF5bG9hZCB3YXMgbW9kaWZpZWQgd2l0aG91dCBtb2RpZnlpbmcgcC0+bGVuIGlmIHNlbmRpbmcKICAgIGljbXBfZGVzdF91bnJlYWNoKCkgKGhhZCBubyBuZWdhdGl2ZSBlZmZlY3QgYnV0IHdhcyBkZWZpbml0aXZlbHkgd3JvbmcpLgoKICAyMDA3LTA2LTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpY21wLmM6IENvcnJlY3RlZCBidWcgIzE5OTM3OiBGb3IgcmVzcG9uZGluZyB0byBhbiBpY21wIGVjaG8gcmVxdWVzdCwgaWNtcAogICAgcmUtdXNlZCB0aGUgaW5wdXQgcGJ1ZiBldmVuIGlmIHRoYXQgZGlkbid0IGhhdmUgZW5vdWdoIHNwYWNlIHRvIGluY2x1ZGUgdGhlCiAgICBsaW5rIGhlYWRlcnMuIE5vdyB0aGUgc3BhY2UgaXMgdGVzdGVkIGFuZCBhIG5ldyBwYnVmIGlzIGFsbG9jYXRlZCBmb3IgdGhlCiAgICBlY2hvIHJlc3BvbnNlIHBhY2tldCBpZiB0aGUgZWNobyByZXF1ZXN0IHBidWYgaXNuJ3QgYmlnIGVub3VnaC4KCiAgMjAwNy0wNi0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBDaGVja2VkIGluIHBhdGNoICM1OTE0OiBNb3ZlZCBzb2Nrb3B0IHByb2Nlc3NpbmcgaW50byB0Y3BpcF90aHJlYWQuCgogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmMsIHNvY2tldHMuYzogRml4ZWQgYnVnICM1OTU4IGZvciBuZXRjb25uX2xpc3RlbiAoYWNjZXB0bWJveCBvbmx5CiAgICBhbGxvY2F0ZWQgYnkgZG9fbGlzdGVuIGlmIHN1Y2Nlc3MpIGFuZCBuZXRjb25uX2FjY2VwdCBlcnJvcnMgaGFuZGxpbmcuIEluCiAgICBtb3N0IG9mIGFwaV9saWIgZnVuY3Rpb25zLCB3ZSByZXBsYWNlIHNvbWUgZXJyb3JzIGNoZWNraW5ncyBsaWtlICJpZiAoY29ubj09TlVMTCkiCiAgICBieSBBU1NFUlQsIGV4Y2VwdCBmb3IgbmV0Y29ubl9kZWxldGUuCgogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IEZpeGVkIGJ1ZyAjNTk1NyAiU2FmZS10aHJlYWQgcHJvYmxlbSBpbnNpZGUgbmV0Y29ubl9yZWN2IiB0byByZXR1cm4KICAgIGFuIGVycm9yIGNvZGUgaWYgaXQncyBpbXBvc3NpYmxlIHRvIGZldGNoIGEgcGJ1ZiBvbiBhIFRDUCBjb25uZWN0aW9uIChhbmQgbm90CiAgICBkaXJlY3RseSBjbG9zZSB0aGUgcmVjdm1ib3gpLgoKICAyMDA3LTA1LTIyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogRml4ZWQgYnVnICMxODk1ICh0Y3BfYmluZCBub3QgY29ycmVjdCkgYnkgaW50cm9kdWNpbmcgYSBsaXN0IG9mCiAgICBib3VuZCBidXQgdW5jb25uZWN0ZWQgKGFuZCBub24tbGlzdGVuaW5nKSB0Y3BfcGNicy4KCiAgMjAwNy0wNS0yMiBGculk6XJpYyBCZXJub24KICAqIHN5cy5oLCBzeXMuYywgYXBpX2xpYi5jLCB0Y3BpcC5jOiByZW1vdmUgc3lzX21ib3hfZmV0Y2hfdGltZW91dCgpICh3YXMgb25seQogICAgdXNlZCBmb3IgTFdJUF9TT19SQ1ZUSU1FTyBvcHRpb24pIGFuZCB1c2Ugc3lzX2FyY2hfbWJveF9mZXRjaCgpIGluc3RlYWQgb2YKICAgIHN5c19tYm94X2ZldGNoKCkgaW4gYXBpIGZpbGVzLiBOb3csIHVzZXJzIFNIT1VMRCBOT1QgdXNlIGludGVybmFsIGx3SVAgZmVhdHVyZXMKICAgIGxpa2UgInN5c190aW1lb3V0IiBpbiB0aGVpciBhcHBsaWNhdGlvbiB0aHJlYWRzLgoKICAyMDA3LTA1LTIyIEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IGNoYW5nZSB0aGUgc3RydWN0IGFwaV9tc2dfbXNnIHRvIHNlZQogICAgd2hpY2ggcGFyYW1ldGVycyBhcmUgdXNlZCBieSB3aGljaCBkb194eHggZnVuY3Rpb24sIGFuZCB0byBhdm9pZCAibWlzdXNpbmciCiAgICBwYXJhbWV0ZXJzIChwYXRjaCAjNTkzOCkuCgogIDIwMDctMDUtMjIgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCByYXcuYywgYXBpLmgsIGFwaV9tc2cuaCwgcmF3Lmg6IEluY2x1ZGVkIHBhdGNoICM1OTM4OgogICAgY2hhbmdlZCByYXdfcGNiLnByb3RvY29sIGZyb20gdTE2X3QgdG8gdThfdCBzaW5jZSBmb3IgSVB2NCBhbmQgSVB2NiwgcHJvdG8KICAgIGlzIG9ubHkgOCBiaXRzIHdpZGUuIFRoaXMgYWZmZWN0cyB0aGUgYXBpLCBhcyB0aGVyZSwgdGhlIHByb3RvY29sIHdhcwogICAgdTE2X3QsIHRvby4KCiAgMjAwNy0wNS0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtcC5jOiBhZGRpdGlvbiB0byBwYXRjaCAjNTkxMzogc21hbGxlciBwb2ludGVyIHdhcyByZXR1cm5lZCBidXQKICAgIG1lbXBfbWVtb3J5IHdhcyB0aGUgc2FtZSBzaXplIC0+IGRpZCBub3Qgc2F2ZSBtZW1vcnkuCgogIDIwMDctMDUtMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIGxvb3BpZi5jLCBzbGlwaWYuYzogRml4IGJ1ZyAjMTk3Mjk6IGZyZWUgcGJ1ZiBpZiBuZXRpZi0+aW5wdXQoKSByZXR1cm5zCiAgICAhPSBFUlJfT0suCgogIDIwMDctMDUtMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYywgdWRwLmM6IElmIGEgdWRwX3BjYiBoYXMgYSBsb2NhbF9pcCBzZXQsIGNoZWNrIGlmIGl0IGlzIHRoZSBzYW1lCiAgICBhcyB0aGUgb25lIG9mIHRoZSBuZXRpZiB1c2VkIGZvciBzZW5kaW5nIHRvIHByZXZlbnQgc2VuZGluZyBmcm9tIG9sZAogICAgYWRkcmVzc2VzIGFmdGVyIGEgbmV0aWYgYWRkcmVzcyBnZXRzIGNoYW5nZWQgKHBhcnRseSBmaXhlcyBidWcgIzMxNjgpLgoKICAyMDA3LTA1LTE2IEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuYywgaWdtcC5oLCBpZ21wLmM6IEZpeGVkIGJ1ZyAiIzE5ODAwIDogSUdNUDogaWdtcF90aWNrKCkgd2lsbCBub3Qgd29yawogICAgd2l0aCBOT19TWVM9MSIuIE5vdGUgdGhhdCBpZ21wX2luaXQgaXMgYWx3YXlzIGluIHRjcGlwX3RocmVhZCAoYW5kIG5vdCBpbiAKICAgIHRjcGlwX2luaXQpIGJlY2F1c2Ugd2UgaGF2ZSB0byBiZSBzdXJlIHRoYXQgbmV0d29yayBpbnRlcmZhY2VzIGFyZSBhbHJlYWR5CiAgICBhZGRlZCAobWFjIGZpbHRlciBpcyB1cGRhdGVkIG9ubHkgaW4gaWdtcF9pbml0IGZvciB0aGUgbW9tZW50KS4KCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIG1lbXAuYzogUmVtb3ZlZCBzZW1hcGhvcmVzIGZyb20gbWVtcCwgY2hhbmdlZCBzeXNfc2VtX3dhaXQgY2FsbHMKICAgIGludG8gc3lzX2FyY2hfc2VtX3dhaXQgY2FsbHMgdG8gcHJldmVudCB0aW1lcnMgZnJvbSBydW5uaW5nIHdoaWxlIHdhaXRpbmcKICAgIGZvciB0aGUgaGVhcC4gVGhpcyBmaXhlcyBidWcgIzE5MTY3LgoKICAyMDA3LTA1LTEzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgc29ja2V0cy5oLCBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyBmcm9tIHBhdGNoICM1ODY1IGJ5IG1vdmluZyB0aGUgZGVmaW5lcwogICAgZm9yIHNvY2tldCBvcHRpb25zIChsd2lwX3NldC8tZ2V0c29ja29wdCkgdXNlZCB3aXRoIGxldmVsIElQUFJPVE9fVENQIGZyb20KICAgIHRjcC5oIHRvIHNvY2tldHMuaC4KCiAgMjAwNy0wNS0wNyBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IEFub3RoZXIgYXR0ZW1wdCB0byBmaXggYnVnICMxNzkyMi4KCiAgMjAwNy0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jLCBwYnVmLmgsIGV0aGFycC5jOiBGdXJ0aGVyIHVwZGF0ZSB0byBBUlAgcXVldWVpbmc6IENoYW5nZWQgcGJ1Zl9jb3B5KCkKICAgIGltcGxlbWVudGF0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIHJldXNlZCAoZG9uJ3QgYWxsb2NhdGUgdGhlIHRhcmdldAogICAgcGJ1ZiBpbnNpZGUgcGJ1Zl9jb3B5KCkpLgoKICAyMDA3LTA1LTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmM6IGNoZWNrZWQgaW4gcGF0Y2ggIzU5MTM6IGluIG1lbXBfbWFsbG9jKCkgd2UgY2FuIHJldHVybiBtZW1wIGFzIG1lbQogICAgdG8gc2F2ZSBhIGxpdHRsZSBSQU0gKG5leHQgcG9pbnRlciBvZiBtZW1wIGlzIG5vdCB1c2VkIHdoaWxlIG5vdCBpbiBwb29sKS4KCiAgMjAwNy0wNS0wMyAibWFxIgogICogc29ja2V0cy5jOiBGaXggaW9jdGwgRklPTlJFQUQgd2hlbiBzb21lIGRhdGEgcmVtYWlucyBmcm9tIGxhc3QgcmVjdi4KICAgIChwYXRjaCAjMzU3NCkuCgogIDIwMDctMDQtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIGxvb3BpZi5jLCBsb29waWYuaCwgb3B0LmgsIHNyYy9uZXRpZi9GSUxFUzogZml4IGJ1ZyAjMjU5NTogImxvb3BpZiByZXN1bHRzCiAgICBpbiBOVUxMIHJlZmVyZW5jZSBmb3IgaW5jb21pbmcgVENQIHBhY2tldHMiLiBMb29waWYgaGFzIHRvIGJlIGNvbmZpZ3VyZWQKICAgICh1c2luZyBMV0lQX0xPT1BJRl9NVUxUSVRIUkVBRElORykgdG8gZGlyZWN0bHkgY2FsbCBuZXRpZi0+aW5wdXQoKQogICAgKG11bHRpdGhyZWFkaW5nIGVudmlyb25tZW50cywgZS5nLiBuZXRpZi0+aW5wdXQoKSA9IHRjcGlwX2lucHV0KCkpIG9yCiAgICBwdXR0aW5nIHBhY2tldHMgb24gYSBsaXN0IHRoYXQgaXMgZmVkIHRvIHRoZSBzdGFjayBieSBjYWxsaW5nIGxvb3BpZl9wb2xsKCkKICAgIChzaW5nbGUtdGhyZWFkIC8gTk9fU1lTIC8gcG9sbGluZyBlbnZpcm9ubWVudCB3aGVyZSBlLmcuCiAgICBuZXRpZi0+aW5wdXQoKSA9IGlwX2lucHV0KS4KCiAgMjAwNy0wNC0xNyBKb25hdGhhbiBMYXJtb3VyCiAgKiBwYnVmLmM6IFVzZSBzMzJfdCBpbiBwYnVmX3JlYWxsb2MoKSwgYXMgYW4gczE2X3QgY2FuJ3QgcmVsaWFibHkgaG9sZAogICAgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gdTE2X3Qncy4KICAqIHNvY2tldHMuaDogRkRfU0VUU0laRSBuZWVkcyB0byBtYXRjaCBudW1iZXIgb2Ygc29ja2V0cywgd2hpY2ggaXMKICAgIE1FTVBfTlVNX05FVENPTk4gaW4gc29ja2V0cy5jIHJpZ2h0IG5vdy4KCiAgMjAwNy0wNC0xMiBKb25hdGhhbiBMYXJtb3VyCiAgKiBpY21wLmM6IFJlc2V0IElQIGhlYWRlciBUVEwgaW4gSUNNUCBFQ0hPIHJlc3BvbnNlcyAoYnVnICMxOTU4MCkuCgogIDIwMDctMDQtMTIgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogTW9kaWZ5IHdheSB0aGUgcmV0cmFuc21pc3Npb24KICAgIHRpbWVyIGlzIHJlc2V0IHRvIGZpeCBidWcjMTk0MzQsIHdpdGggaGVscCBmcm9tIE9sZWcgVHlzaGV2LgoKICAyMDA3LTA0LTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYywgcGJ1Zi5jLCBwYnVmLmg6IDNyZCBmaXggZm9yIGJ1ZyAjMTE0MDAgKGFycC1xdWV1aW5nKTogTW9yZSBwYnVmcyB0aGFuCiAgICBwcmV2aW91c2x5IHRob3VnaHQgbmVlZCB0byBiZSBjb3BpZWQgKGV2ZXJ5dGhpbmcgYnV0IFBCVUZfUk9NISkuIENsZWFuZWQgdXAKICAgIHBidWYuYzogcmVtb3ZlZCBmdW5jdGlvbnMgbm8gbmVlZGVkIGFueSBtb3JlIChieSBldGhhcnApLgoKICAyMDA3LTA0LTExIEtpZXJhbiBNYW5zbGV5CiAgKiBpbmV0LmMsIGlwX2FkZHIuaCwgc29ja2V0cy5oLCBzeXMuaCwgdGNwLmg6IEFwcGx5IHBhdGNoICM1NzQ1OiBGaXgKICAgICJDb25zdGFudCBpcyBsb25nIiB3YXJuaW5ncyB3aXRoIDE2Yml0IGNvbXBpbGVycy4gIENvbnRyaWJ1dGVkIGJ5CiAgICBhdmF0YXJAbW1sYWIuY3NlLnl6dS5lZHUudHcKCiAgMjAwNy0wNC0wNSBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIGFwaV9tc2cuYzogRml4IGJ1ZyAjMTY4MzA6ICJlcnJfdGNwKCkgcG9zdHMgdG8gY29ubmVjdGlvbiBtYWlsYm94IHdoZW4gbm8gcGVuZCBvbgogICAgdGhlIG1haWxib3ggaXMgYWN0aXZlIi4gTm93LCB0aGUgcG9zdCBpcyBvbmx5IGRvbmUgZHVyaW5nIGEgY29ubmVjdCwgYW5kIGRvX3NlbmQsCiAgICBkb193cml0ZSBhbmQgZG9fam9pbl9sZWF2ZV9ncm91cCBkb24ndCBkbyBhbnl0aGluZyBpZiBhIHByZXZpb3VzIGVycm9yIHdhcyBzaWduYWxlZC4KCiAgMjAwNy0wNC0wMyBGculk6XJpYyBCZXJub24KICAqIGlwLmM6IERvbid0IHNldCB0aGUgSVBfREYgKCJEb24ndCBmcmFnbWVudCIpIGZsYWcgaW4gdGhlIElQIGhlYWRlciBpbiBJUCBvdXRwdXQKICAgIHBhY2tldHMuIFNlZSBwYXRjaCAjNTgzNC4KCiAgMjAwNy0wMy0zMCBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYzogYWRkIGEgInBjYl9uZXciIGhlbHBlciBmdW5jdGlvbiB0byBhdm9pZCByZWR1bmRhbnQgY29kZSwgYW5kIHRvIGFkZAogICAgbWlzc2luZyAgcGNiIGFsbG9jYXRpb25zIGNoZWNraW5nIChpbiBkb19iaW5kLCBhbmQgZm9yIGVhY2ggcmF3X25ldykuIEZpeCBzdHlsZS4KCiAgMjAwNy0wMy0zMCBGculk6XJpYyBCZXJub24KICAqIG1vc3Qgb2YgZmlsZXM6IHByZWZpeCBhbGwgZGVidWcuaCBkZWZpbmUgd2l0aCAiTFdJUF8iIHRvIGF2b2lkIGFueSBjb25mbGljdCB3aXRoCiAgICBvdGhlcnMgZW52aXJvbm1lbnQgZGVmaW5lcyAodGhlc2Ugd2VyZSB0b28gImdlbmVyaWMiKS4KCiAgMjAwNy0wMy0yOCBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIHNvY2tldHMuYzogbmV0YnVmX3JlZiBkb2Vzbid0IGNoZWNrIGl0cyBpbnRlcm5hbCBwYnVmX2FsbG9jIGNhbGwKICAgIHJlc3VsdCBhbmQgY2FuIGNhdXNlIGEgY3Jhc2guIGx3aXBfc2VuZCBub3cgY2hlY2sgbmV0YnVmX3JlZiByZXN1bHQuCgogIDIwMDctMDMtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYyBSZW1vdmUgIiNpbmNsdWRlIDxlcnJuby5oPiIgZnJvbSBzb2NrZXRzLmMgdG8gYXZvaWQgbXVsdGlwbGUKICAgIGRlZmluaXRpb24gb2YgbWFjcm9zIChpbiBlcnJuby5oIGFuZCBsd2lwL2FyY2guaCkgaWYgTFdJUF9QUk9WSURFX0VSUk5PIGlzCiAgICBkZWZpbmVkLiBUaGlzIGlzIHRoZSB3YXkgaXQgc2hvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IChsb29raW5nIGF0CiAgICBkb2Mvc3lzX2FyY2gudHh0KQoKICAyMDA3LTAzLTI4IEtpZXJhbiBNYW5zbGV5CiAgKiBvcHQuaCBDaGFuZ2UgZGVmYXVsdCBQQlVGX1BPT0xfQlVGU0laRSAoYWdhaW4pIHRvIGFjY29tb2RhdGUgZGVmYXVsdCBNU1MgKwogICAgSVAgYW5kIFRDUCBoZWFkZXJzICphbmQqIHBoeXNpY2FsIGxpbmsgaGVhZGVycwoKICAyMDA3LTAzLTI2IEZy6WTpcmljIEJlcm5vbiAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIGFwaV9saWIuYzogcGF0Y2ggZm9yIG5ldGNvbm5fd3JpdGUoKSwgZml4ZXMgYSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiB3aGljaCBjYXVzZQogICAgdG8gc2VuZCBzb21lIGdhcmJhZ2UuIEl0IGlzIG5vdCBhIGRlZmluaXRpdmUgc29sdXRpb24sIGJ1dCB0aGUgcGF0Y2ggZG9lcyBzb2x2ZQogICAgdGhlIHByb2JsZW0gZm9yIG1vc3QgY2FzZXMuCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmgsIGFwaV9tc2cuYzogUmVtb3ZlIG9ic29sZXRlIEFQSV9NU0dfQUNDRVBUIGFuZCBkb19hY2NlcHQgKG5ldmVyIHVzZWQpLgoKICAyMDA3LTAzLTIyIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jOiBzb21lcyByZXNvdXJjZXMgY291bGRuJ3QgYmUgZnJlZWQgaWYgdGhlcmUgd2FzIGVycm9ycyBkdXJpbmcKICAgIG5ldGNvbm5fbmV3X3dpdGhfcHJvdG9fYW5kX2NhbGxiYWNrLgoKICAyMDA3LTAzLTIyIEZy6WTpcmljIEJlcm5vbgogICogZXRoZXJuZXRpZi5jOiB1cGRhdGUgbmV0aWYtPmlucHV0IGNhbGxzIHRvIGNoZWNrIHJldHVybiB2YWx1ZS4gSW4gb2xkZXIgcG9ydHMsCiAgICBpdCdzIGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUgdGhlbSwgZXZlbiBpZiBiZWZvcmUsIHRoZXJlIGNvdWxkIGJlIGFub3RoZXIgcHJvYmxlbQogICAgKGFjY2VzcyB0byBhbiB1bmluaXRpYWxpemVkIG1haWxib3gpLgoKICAyMDA3LTAzLTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IGZpeGVkIGJ1ZyAjNTA2NyAoZXNzZW50aWFseSBhIHNpZ25lZC91bnNpZ25lZCB3YXJuaW5nIGZpeGVkCiAgICBieSBjYXN0aW5nIHRvIHVuc2lnbmVkKS4KCiAgMjAwNy0wMy0yMSBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCB0Y3BpcC5jOiBpbnRlZ3JhdGUgc3lzX21ib3hfZmV0Y2goY29ubi0+bWJveCwgTlVMTCkgY2FsbHMgZnJvbQogICAgYXBpX2xpYi5jIHRvIHRjcGlwLmMncyB0Y3BpcF9hcGltc2coKS4gTm93LCB1c2UgYSBsb2NhbCB2YXJpYWJsZSBhbmQgbm90IGEKICAgIGR5bmFtaWMgb25lIGZyb20gbWVtcCB0byBzZW5kIHRjcGlwX21zZyB0byB0Y3BpcF90aHJlYWQgaW4gYSBzeW5jaHJvbmUgY2FsbC4KICAgIEZyZWUgdGNwaXBfbXNnIGZyb20gdGNwaXBfYXBpbXNnIGlzIG5vdCBkb25lIGluIHRjcGlwX3RocmVhZC4gVGhpcyBnaXZlIGEKICAgIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gYXBpX2xpYiBhbmQgdGNwaXAuCgogIDIwMDctMDMtMjEgRnLpZOlyaWMgQmVybm9uCiAgKiBvcHQuaDogQWRkIExXSVBfTkVUSUZfQ0FMTEJBQ0sgKHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcpIGFuZCBzZXQgaXQgdG8gMC4KCiAgMjAwNy0wMy0yMSBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgaWdtcC5jLCBpZ21wLmg6IEZpeCBDKysgc3R5bGUgY29tbWVudHMKCiAgMjAwNy0wMy0yMSBLaWVyYW4gTWFuc2xleQogICogb3B0LmggQ2hhbmdlIGRlZmF1bHQgUEJVRl9QT09MX0JVRlNJWkUgdG8gYWNjb21vZGF0ZSBkZWZhdWx0IE1TUyArCiAgICBJUCBhbmQgVENQIGhlYWRlcnMKCiAgMjAwNy0wMy0yMSBLaWVyYW4gTWFuc2xleQogICogRml4IGFsbCB1c2VzIG9mIHBidWZfaGVhZGVyIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuICBJbiBzb21lCiAgICBjYXNlcyBqdXN0IGFzc2VydCBpZiBpdCBmYWlscyBhcyBJJ20gbm90IHN1cmUgaG93IHRvIGZpeCB0aGVtLCBidXQKICAgIHRoaXMgaXMgbm8gd29yc2UgdGhhbiBiZWZvcmUgd2hlbiB0aGV5IHdvdWxkIGNhcnJ5IG9uIHJlZ2FyZGxlc3MKICAgIG9mIHRoZSBmYWlsdXJlLgoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBzb2NrZXRzLmMsIGlnbXAuYywgaWdtcC5oLCBtZW1wLmg6IEZpeCBDKysgc3R5bGUgY29tbWVudHMgYW5kCiAgICBjb21tZW50IG91dCBtaXNzaW5nIGhlYWRlciBpbmNsdWRlIGluIGljbXAuYwoKICAyMDA3LTAzLTIwIEZy6WTpcmljIEJlcm5vbgogICogbWVtcC5oLCBzdGF0cy5jOiBGaXggc3RhdHNfZGlzcGxheSBmdW5jdGlvbiB3aGVyZSBtZW1wX25hbWVzIHRhYmxlIHdhc24ndAogICAgc3luY2hyb25pemVkIHdpdGggbWVtcC5oLgoKICAyMDA3LTAzLTIwIEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuYzogSW5pdGlhbGl6ZSB0Y3BpcCdzIG1ib3gsIGFuZCB2ZXJpZnkgaWYgaW5pdGlhbGl6ZWQgaW4gdGNwaXBfaW5wdXQsCiAgICB0Y3BpcF9ldGhpbnB1dCwgdGNwaXBfY2FsbGJhY2ssIHRjcGlwX2FwaW1zZywgdG8gZml4IGEgaW5pdCBwcm9ibGVtIHdpdGggCiAgICBuZXR3b3JrIGludGVyZmFjZXMuIEFsc28gZml4IGEgY29tcGlsZXIgd2FybmluZy4KCiAgMjAwNy0wMy0yMCBLaWVyYW4gTWFuc2xleQogICogdWRwLmM6IE9ubHkgdHJ5IGFuZCB1c2UgcGJ1Zl9oZWFkZXIoKSB0byBtYWtlIHNwYWNlIGZvciBoZWFkZXJzIGlmCiAgICBub3QgYSBST00gb3IgUkVGIHBidWYuCgogIDIwMDctMDMtMTkgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmgsIGFwaV9tc2cuYywgdGNwaXAuaCwgdGNwaXAuYzogQWRkIHJldHVybiB0eXBlcyB0byB0Y3BpcF9hcGltc2coKQogICAgYW5kIGFwaV9tc2dfcG9zdCgpLgoKICAyMDA3LTAzLTE5IEZy6WTpcmljIEJlcm5vbgogICogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgIm1lbXBfcmVhbGxvYyIgZnVuY3Rpb24gZnJvbSBtZW1wLmguCgogIDIwMDctMDMtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIHBidWYuYzogY2hlY2tlZCBpbiBwYXRjaCAjNTc5NjogcGJ1Zl9hbGxvYzogbGVuIGZpZWxkIGNsYWN1bGF0aW9uIGNhdXNlZAogICAgbWVtb3J5IGNvcnJ1cHRpb24uCgogIDIwMDctMDMtMTEgU2ltb24gR29sZHNjaG1pZHQgKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBhcGlfbGliLmMsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9tc2cuaCwgc29ja2V0cy5oOiBGaXhlZCBidWcgIzE5MjUxCiAgICAobWlzc2luZyBgY29uc3QnIHF1YWxpZmllciBpbiBzb2NrZXQgZnVuY3Rpb25zKSwgdG8gZ2V0IG1vcmUgY29tcGF0aWJsZSB0bwogICAgc3RhbmRhcmQgUE9TSVggc29ja2V0cy4KCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24gKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBzb2NrZXRzLmM6IEFkZCBhc3NlcnRzIGluc2lkZSBiaW5kLCBjb25uZWN0IGFuZCBzZW5kdG8gdG8gY2hlY2sgaW5wdXQKICAgIHBhcmFtZXRlcnMuIFJlbW92ZSBleGNlc3NpdmUgc2V0X2Vycm5vKCkgY2FsbHMgYWZ0ZXIgZ2V0X3NvY2tldCgpLCBiZWNhdXNlCiAgICBlcnJubyBpcyBzZXQgaW5zaWRlIG9mIGdldF9zb2NrZXQoKS4gTW92ZSBsYXN0IHNvY2tfc2V0X2Vycm5vKCkgaW5zaWRlCiAgICBsd2lwX2Nsb3NlLgoKICAyMDA3LTAzLTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmM6IEZpeGVkIGJ1ZyAjMTE0MDA6IE5ldyBldGhhcnAgcXVldWVpbmcgaW50cm9kdWNlZCBidWc6IG1lbXBfbWVtb3J5CiAgICB3YXMgYWxsb2NhdGVkIHRvbyBzbWFsbC4KCiAgMjAwNy0wMy0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYzogSW5pdGlhbGl6ZSBkaGNwIHRpbWVycyBpbiB0Y3BpcF90aHJlYWQgKGlmIExXSVBfREhDUCkgdG8gcHJvdGVjdAogICAgdGhlIHN0YWNrIGZyb20gY29uY3VycmVudCBhY2Nlc3MuCgogIDIwMDctMDMtMDYgRnLpZOlyaWMgQmVybm9uLCBEbWl0cnkgUG90YXBvdgogICogdGNwaXAuYywgaXBfZnJhZy5jLCBldGhlcm5ldGlmLmM6IEZpeCBzb21lIGJ1aWxkIHByb2JsZW1zLCBhbmQgYSByZWR1bmRhbmN5CiAgICBjYWxsIHRvICJsd2lwX3N0YXRzLmxpbmsucmVjdisrOyIgaW4gbG93X2xldmVsX2lucHV0KCkgJiBldGhlcm5ldGlmX2lucHV0KCkuCgogIDIwMDctMDMtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYywgaXBfZnJhZy5oOiBSZWR1Y2UgY29kZSBzaXplOiBkb24ndCBpbmNsdWRlIGNvZGUgaW4gdGhvc2UgZmlsZXMKICAgIGlmIElQX0ZSQUcgPT0gMCBhbmQgSVBfUkVBU1NFTUJMWSA9PSAwCgogIDIwMDctMDMtMDYgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGlwX2ZyYWcuaCwgdGNwaXAuaCwgdGNwaXAuYywgZXRoZXJuZXRpZi5jOiBhZGQgbmV3IGNvbmZpZ3VyYXRpb24KICAgIG9wdGlvbiBuYW1lZCBFVEhBUlBfVENQSVBfRVRISU5QVVQsIHdoaWNoIGVuYWJsZSB0aGUgbmV3IHRjcGlwX2V0aGlucHV0LgogICAgQWxsb3cgdG8gZG8gQVJQIHByb2Nlc3NpbmcgZm9yIGluY29taW5nIHBhY2tldHMgaW5zaWRlIHRjcGlwX3RocmVhZAogICAgKHByb3RlY3RpbmcgQVJQIGxheWVyIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MpLiBZb3UgY2FuIGFsc28gZGlzYWJsZQogICAgb2xkIGNvZGUgdXNpbmcgdGNwX2lucHV0IHdpdGggbmV3IGRlZmluZSBFVEhBUlBfVENQSVBfSU5QVVQgc2V0IHRvIDAuCiAgICBPbGRlciBwb3J0cyBoYXZlIHRvIHVzZSB0Y3BpcF9ldGhpbnB1dC4KCiAgMjAwNy0wMy0wNiBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIGVyci5oLCBlcnIuYzogZml4ZWQgY29tcGlsZXIgd2FybmluZyAiaW5pdGlhbGl6YXRpb24gZGlyY2FyZHMgcXVhbGlmaWVycwogICAgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIgoKICAyMDA3LTAzLTA1IEZy6WTpcmljIEJlcm5vbgogICogb3B0LmgsIHNvY2tldHMuaDogYWRkIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgKExXSVBfUE9TSVhfU09DS0VUU19JT19OQU1FUywKICAgIEVUSEFSUF9UUlVTVF9JUF9NQUMsIHJldmlldyBTT19SRVVTRSkKCiAgMjAwNy0wMy0wNCBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYzogUmVtb3ZlIHNvbWUgY29tcGlsZXIgd2FybmluZ3MgOiBwYXJhbWV0ZXIgInBjYiIgd2FzIG5ldmVyCiAgICByZWZlcmVuY2VkLgoKICAyMDA3LTAzLTA0IEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jOiBGaXggIltwYXRjaCAjNTc2NF0gYXBpX2xpYi5jIGNsZWFudXA6IGFmdGVyIHBhdGNoICM1Njg3IiAoZnJvbQogICAgRG1pdHJ5IFBvdGFwb3YpLgogICAgVGhlIGFwaV9tc2cgc3RydWN0IHN0YXkgb24gdGhlIHN0YWNrIChub3QgbW92ZWQgdG8gbmV0Y29ubiBzdHJ1Y3QpLgoKICAyMDA3LTAzLTA0IFNpbW9uIEdvbGRzY2htaWR0IChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogcGJ1Zi5jOiBGaXggQlVHIzE5MTY4IC0gcGJ1Zl9mcmVlIGNhbiBjYXVzZSBkZWFkbG9jayAoaWYKICAgIFNZU19MSUdIVFdFSUdIVF9QUk9UPTEgJiBmcmVlaW5nIFBCVUZfUkFNIHdoZW4gbWVtX3NlbSBpcyBub3QgYXZhaWxhYmxlKQogICAgQWxzbyBmaXhlZCBjYXN0IHdhcm5pbmcgaW4gcGJ1Zl9hbGxvYygpCgogIDIwMDctMDMtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBldGhhcnAuaCwgbWVtcC5jLCBtZW1wLmgsIG9wdC5oOiBGaXggQlVHIzExNDAwIC0gZG9uJ3QgY29ycnVwdAogICAgZXhpc3RpbmcgcGJ1ZiBjaGFpbiB3aGVuIGVucXVldWluZyBtdWx0aXBsZSBwYnVmcyB0byBhIHBlbmRpbmcgQVJQIHJlcXVlc3QKCiAgMjAwNy0wMy0wMyBGculk6XJpYyBCZXJub24KICAqIHVkcC5jOiByZW1vdmUgb2Jzb2xldGUgbGluZSAic3RhdGljIHN0cnVjdCB1ZHBfcGNiICpwY2JfY2FjaGUgPSBOVUxMOyIKICAgIEl0IGlzIHN0YXRpYywgYW5kIG5ldmVyIHVzZWQgaW4gdWRwLmMgZXhjZXB0IHVkcF9pbml0KCkuCgogIDIwMDctMDMtMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcGlwLmM6IE1vdmVkIGNhbGwgdG8gaXBfaW5pdCgpLCB1ZHBfaW5pdCgpIGFuZCB0Y3BfaW5pdCgpIGZyb20KICAgIHRjcGlwX3RocmVhZCgpIHRvIHRjcGlwX2luaXQoKS4gVGhpcyB3YXksIHJhdyBBUEkgY29ubmVjdGlvbnMgY2FuIGJlCiAgICBpbml0aWFsaXplZCBiZWZvcmUgdGNwaXBfdGhyZWFkIGlzIHJ1bm5pbmcgKGUuZy4gYmVmb3JlIE9TIGlzIHN0YXJ0ZWQpCgogIDIwMDctMDMtMDIgRnLpZOlyaWMgQmVybm9uCiAgKiByYXdhcGkudHh0OiBGaXggZG9jdW1lbnRhdGlvbiBtaXNtYXRjaCB3aXRoIGV0aGFycC5oIGFib3V0IGV0aGFycF90bXIncyBjYWxsCiAgICBpbnRlcnZhbC4KCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSAKICAqIHBidWYuYzogRml4IEJVRyMxNzY0NSAtIGVuc3VyZSBwYnVmIHBheWxvYWQgcG9pbnRlciBpcyBub3QgbW92ZWQKICAgIG91dHNpZGUgdGhlIHJlZ2lvbiBvZiB0aGUgcGJ1ZiBieSBwYnVmX2hlYWRlcigpCgogIDIwMDctMDItMjggS2llcmFuIE1hbnNsZXkgCiAgKiBzb2NrZXRzLmM6IEZpeCBCVUcjMTkxNjEgLSBlbnN1cmUgbWlsbGlzZWNvbmRzIHRpbWVvdXQgaXMgbm9uLXplcm8KICAgIHdoZW4gc3VwcGxpZWQgdGltZW91dCBpcyBhbHNvIG5vbi16ZXJvIAoKKFNUQUJMRS0xLjIuMCkKCiAgMjAwNi0xMi0wNSBMZW9uIFdvZXN0ZW5iZXJnCiAgKiBDSEFOR0VMT0c6IE1lbnRpb24gU1RBQkxFLTEuMi4wIHJlbGVhc2UuCgogICsrIE5ldyBmZWF0dXJlczoKCiAgMjAwNi0xMi0wMSBDaHJpc3RpYWFuIFNpbW9ucwogICogbWVtLmgsIG9wdC5oOiBBZGRlZCBNRU1fTElCQ19NQUxMT0Mgb3B0aW9uLgogICAgTm90ZSB0aGlzIGlzIGEgd29ya2Fyb3VuZC4gQ3VycmVudGx5IEkgaGF2ZSBubyBvdGhlciBvcHRpb25zIGxlZnQuCgogIDIwMDYtMTAtMjYgQ2hyaXN0aWFhbiBTaW1vbnMgKGFjY2VwdGVkIHBhdGNoIGJ5IEpvbmF0aGFuIExhcm1vdXIpCiAgKiBpcHY0L2lwX2ZyYWcuYzogcmVuYW1lIE1BWF9NVFUgdG8gSVBfRlJBR19NQVhfTVRVIGFuZCBtb3ZlIGRlZmluZQogICAgdG8gaW5jbHVkZS9sd2lwL29wdC5oLgogICogaXB2NC9sd2lwL2lwX2ZyYWcuaDogUmVtb3ZlIHVudXNlZCBJUF9SRUFTU19JTlRFUlZBTC4KICAgIE1vdmUgSVBfUkVBU1NfTUFYQUdFIGFuZCBJUF9SRUFTU19CVUZTSVpFIHRvIGluY2x1ZGUvbHdpcC9vcHQuaC4KICAqIG9wdC5oOiBBZGQgYWJvdmUgbmV3IG9wdGlvbnMuCgogIDIwMDYtMDgtMTggQ2hyaXN0aWFhbiBTaW1vbnMKICAqIHRjcF97aW4sb3V0fS5jOiBhZGRlZCBTTk1QIGNvdW50ZXJzLgogICogaXB2NC9pcC5jOiBhZGRlZCBTTk1QIGNvdW50ZXJzLgogICogaXB2NC9pcF9mcmFnLmM6IGFkZGVkIFNOTVAgY291bnRlcnMuCgogIDIwMDYtMDgtMDggQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGV0aGFycC57YyxofTogYWRkZWQgZXRoYXJwX2ZpbmRfYWRkcigpIHRvIHJlYWQKICAgIChzdGFibGUpIGV0aGVybmV0L0lQIGFkZHJlc3MgcGFpciBmcm9tIEFSUCB0YWJsZQoKICAyMDA2LTA3LTE0IENocmlzdGlhYW4gU2ltb25zCiAgKiBtaWJfc3RydWN0cy5jOiBhZGRlZAogICogaW5jbHVkZS9sd2lwL3NubXBfc3RydWN0cy5oOiBhZGRlZAogICogbmV0aWYue2MsaH0sIG5ldGlmL2V0aGVybmV0aWYuYzogYWRkZWQgU05NUCBzdGF0aXN0aWNzIHRvIG5ldGlmIHN0cnVjdAoKICAyMDA2LTA3LTA2IENocmlzdGlhYW4gU2ltb25zCiAgKiBzbm1wL2FzbjFfe2VuYyxkZWN9LmMgYWRkZWQKICAqIHNubXAvbWliMi5jIGFkZGVkCiAgKiBzbm1wL21zZ197aW4sb3V0fS5jIGFkZGVkCiAgKiBpbmNsdWRlL2x3aXAvc25tcF9hc24xLmggYWRkZWQKICAqIGluY2x1ZGUvbHdpcC9zbm1wX21zZy5oIGFkZGVkCiAgKiBkb2Mvc25tcF9hZ2VudC50eHQgYWRkZWQKCiAgMjAwNi0wMy0yOSBDaHJpc3RpYWFuIFNpbW9ucwogICogaW5ldC5jLCBpbmV0Lmg6IEFkZGVkIHBsYXRmb3JtIGJ5dGVzd2FwIHN1cHBvcnQuCiAgICBBZGRlZCBMV0lQX1BMQVRGT1JNX0JZVEVTV0FQIGRlZmluZSAoZGVmYXVsdHMgdG8gMCkgYW5kCiAgICBvcHRpb25hbCBMV0lQX1BMQVRGT1JNX0hUT05TKCksIExXSVBfUExBVEZPUk1fSFRPTkwoKSBtYWNyb3MuCgogICsrIEJ1ZyBmaXhlczoKCiAgMjAwNi0xMS0zMCBDaHJpc3RpYWFuIFNpbW9ucwogICogZGhjcC5jOiBGaXhlZCBmYWxzZSB0cmlnZ2VycyBvZiByZXF1ZXN0X3RpbWVvdXQuCgogIDIwMDYtMTEtMjggQ2hyaXN0aWFhbiBTaW1vbnMKICAqIG5ldGlmLmM6IEluIG5ldGlmX2FkZCgpIGZpeGVkIG1pc3NpbmcgY2xlYXIgb2YgaXBfYWRkciwgbmV0bWFzaywgZ3cgYW5kIGZsYWdzLgoKICAyMDA2LTEwLTExIENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbGliLmMgZXRoYXJwLmMsIGlwLmMsIG1lbXAuYywgc3RhdHMuYywgc3lzLntjLGh9IHRjcC5oOgogICAgUGFydGlhbGx5IGFjY2VwdGVkIHBhdGNoICM1NDQ5IGZvciBBTlNJIEMgY29tcGF0aWJpbGl0eSAvIGJ1aWxkIGZpeGVzLgogICogaXB2NC9sd2lwL2lwLmggaXB2Ni9sd2lwL2lwLmg6IENvcnJlY3RlZCBVRFAtTGl0ZSBwcm90b2NvbAogICAgaWRlbnRpZmllciBmcm9tIDE3MCB0byAxMzYgKGJ1ZyAjMTc1NzQpLgoKICAyMDA2LTEwLTEwIENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbXNnLmM6IEZpeGVkIE5hZ2xlIGFsZ29yaXRobSBhcyByZXBvcnRlZCBieSBCb2IgR3JpY2UuCgogIDIwMDYtMDgtMTcgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIHVkcC5jOiBGaXhlZCBidWcgIzE3MjAwLCBhZGRlZCBjaGVjayBmb3IgYnJvYWRjYXN0CiAgICBkZXN0aW5hdGlvbnMgZm9yIFBDQnMgYm91bmQgdG8gYSB1bmljYXN0IGFkZHJlc3MuCgogIDIwMDYtMDgtMDcgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogRmx1c2hpbmcgVENQIG91dHB1dCBpbiBkb19jbG9zZSgpIChidWcgIzE1OTI2KS4KCiAgMjAwNi0wNi0yNyBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX21zZy5jOiBBcHBsaWVkIHBhdGNoIGZvciBjb2xkIGNhc2UgKGJ1ZyAjMTExMzUpLgogICAgSW4gYWNjZXB0X2Z1bmN0aW9uKCkgZW5zdXJlIG5ld2Nvbm4tPmNhbGxiYWNrIGlzIGFsd2F5cyBpbml0aWFsaXplZC4KCiAgMjAwNi0wNi0xNSBDaHJpc3RpYWFuIFNpbW9ucwogICogbWVtLmg6IGFkZGVkIE1FTV9TSVpFX0YgYWxpYXMgdG8gZml4IGFuIGFuY2llbnQgY29sZCBjYXNlIChidWcgIzE3NDgpLAogICAgZmFjaWxpdGF0ZSBwcmludGluZyBvZiBtZW1fc2l6ZV90IGFuZCB1MTZfdCBzdGF0aXN0aWNzLgoKICAyMDA2LTA2LTE0IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbXNnLmM6IEFwcGxpZWQgcGF0Y2ggIzUxNDYgdG8gaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMKICAgIGluIGFjY2VwdCgpIGJ5IEtldmluIExhd3Nvbi4KCiAgMjAwNi0wNS0yNiBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX2xpYi5jOiBSZW1vdmVkIGNvbm4tPnNlbSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gCiAgICBmcm9tIG5ldGNvbm5fd3JpdGUoKSBhbmQgYWRkZWQgc3lzX3NlbV9uZXcgdG8gbmV0Y29ubl9uZXdfKi4KCihTVEFCTEUtMV8xXzEpCgogIDIwMDYtMDMtMDMgIENocmlzdGlhYW4gU2ltb25zCiAgKiBpcHY0L2lwX2ZyYWcuYzogQWRkZWQgYm91bmQtY2hlY2tpbmcgYXNzZXJ0aW9ucyBvbiBpcF9yZWFzc2JpdG1hcAogICAgYWNjZXNzIGFuZCBhZGRlZCBwYnVmX2FsbG9jKCkgcmV0dXJuIHZhbHVlIGNoZWNrcy4KCiAgMjAwNi0wMS0wMSAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwX3tpbixvdXR9LmMsIHRjcF9vdXQuYzogUmVtb3ZlZCAnZXZlbiBzbmRidWYnIGZpeCBpbiBUQ1AsIHdoaWNoIGlzCiAgICBub3cgaGFuZGxlZCBieSB0aGUgY2hlY2tzdW0gcm91dGluZSBwcm9wZXJseS4KCiAgMjAwNi0wMi0yNyAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICAqIHBidWYuYzogRml4IGFsaWdubWVudDsgcGJ1Zl9pbml0KCkgd291bGQgbm90IHdvcmsgdW5sZXNzCiAgICAgcGJ1Zl9wb29sX21lbW9yeVtdIHdhcyBwcm9wZXJseSBhbGlnbmVkLiAoUGF0Y2ggYnkgQ3VydCBNY0Rvd2VsbC4pCgogIDIwMDUtMTItMjAgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcC5jOiBSZW1vdmUgUENCcyB3aGljaCBzdGF5IGluIExBU1RfQUNLIHN0YXRlIHRvbyBsb25nLiBQYXRjaAogICAgc3VibWl0dGVkIGJ5IE1pdHJhbmkgSGlyb3NoaS4KCiAgMjAwNS0xMi0xNSAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGluZXQuYzogRGlzYWJsZWQgdGhlIGFkZGVkIHN1bW1pbmcgcm91dGluZSB0byBwcmVzZXJ2ZSBjb2RlIHNwYWNlLgoKICAyMDA1LTEyLTE0ICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3BfaW4uYzogRHVwbGljYXRlIEZJTiBBQ0sgcmFjZSBjb25kaXRpb24gZml4IGJ5IEtlbHZpbiBMYXdzb24uCiAgICBBZGRlZCBDdXJ0IE1jRG93ZWxsJ3Mgb3B0aW1pemVkIGNoZWNrc3VtbWluZyByb3V0aW5lIGZvciBmdXR1cmUKICAgIGluY2x1c2lvbi4gTmVlZCB0byBjcmVhdGUgdGVzdCBjYXNlIGZvciB1bmFsaWdlZCwgYWxpZ25lZCwgb2RkLAogICAgZXZlbiBsZW5ndGggY29tYmluYXRpb24gb2YgY2FzZXMgb24gdmFyaW91cyBlbmRpYW5lc3MgbWFjaGluZXMuCgogIDIwMDUtMTItMDkgIENocmlzdGlhYW4gU2ltb25zCiAgKiBpbmV0LmM6IFJld3JvdGUgc3RhbmRhcmQgY2hlY2tzdW0gcm91dGluZSBpbiBwcm9wZXIgcG9ydGFibGUgQy4KCiAgMjAwNS0xMS0yNSAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIHVkcC5jIHRjcC5jOiBSZW1vdmVkIFNPX1JFVVNFIGhhY2suIFNob3VsZCByZXNpZGUgaW4gc29ja2V0IGNvZGUgb25seS4KICAqICouYzogaW50cm9kdWNlZCBjYy5oIExXSVBfREVCVUcgZm9ybWF0dGVycyBtYXRjaGluZyB0aGUgdTE2X3QsIHMxNl90LAogICAgdTMyX3QsIHMzMl90IHR5cGVkZWZzLiBUaGlzIHNvbHZlcyBtb3N0IGRlYnVnIHdvcmQtbGVuZ3RoIGFzc3VtZXMuCgogIDIwMDUtMDctMTcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogaW5ldC5jOiBGaXhlZCB1bmFsaWduZWQgMTYtYml0IGFjY2VzcyBpbiB0aGUgc3RhbmRhcmQgY2hlY2tzdW0KICAgIHJvdXRpbmUgYnkgUGV0ZXIgSm9sYXNzb24uCiAgKiBzbGlwaWYuYzogRml4ZWQgaW1wbGVtZW50YXRpb24gYXNzdW1wdGlvbiBvZiBzaW5nbGUtcGJ1ZiBkYXRhZ3JhbXMuCgogIDIwMDUtMDItMDQgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwX291dC5jOiBGaXhlZCB1bmluaXRpYWxpemVkICdxdWV1ZScgcmVmZXJlbmNlZCBpbiBtZW1lcnIgYnJhbmNoLgogICogdGNwX3tvdXR8aW59LmM6IEFwcGxpZWQgcGF0Y2ggZml4aW5nIHVuYWxpZ25lZCBhY2Nlc3MuCgogIDIwMDUtMDEtMDQgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogcGJ1Zi5jOiBGaXhlZCBtaXNzaW5nIHNlbWljb2xvbiBhZnRlciBMV0lQX0RFQlVHIHN0YXRlbWVudC4KCiAgMjAwNS0wMS0wMyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB1ZHAuYzogVURQIHBjYi0+cmVjdigpIHdhcyBjYWxsZWQgZXZlbiB3aGVuIGl0IHdhcyBOVUxMLgoKKFNUQUJMRS0xXzFfMCkKCiAgMjAwNC0xMi0yOCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBldGhhcnAuKjogRGlzYWJsZWQgbXVsdGlwbGUgcGFja2V0cyBvbiB0aGUgQVJQIHF1ZXVlLgogICAgVGhpcyBjbGFzaGVzIHdpdGggVENQIHF1ZXVlaW5nLgoKICAyMDA0LTExLTI4IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC4qOiBGaXhlZCByYWNlIGNvbmRpdGlvbiBmcm9tIEFSUCByZXF1ZXN0IHRvIEFSUCB0aW1lb3V0LgogICAgSGFsdmVkIHRoZSBBUlAgcGVyaW9kLCBkb3VibGVkIHRoZSBwZXJpb2QgY291bnRzLgogICAgRVRIQVJQX01BWF9QRU5ESU5HIG5vdyBzaG91bGQgYmUgYXQgbGVhc3QgMi4gVGhpcyBwcmV2ZW50cwogICAgdGhlIGNvdW50ZXIgZnJvbSByZWFjaGluZyAwIHJpZ2h0IGF3YXkgKHdoaWNoIHdvdWxkIGFsbG93CiAgICB0b28gbGl0dGxlIHRpbWUgZm9yIEFSUCByZXNwb25zZXMgdG8gYmUgcmVjZWl2ZWQpLgoKICAyMDA0LTExLTI1IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGRoY3AuYzogRGVjbGluZSBtZXNzYWdlcyB3ZXJlIG5vdCBtdWx0aWNhc3QgYnV0IHVuaWNhc3QuCiAgKiBldGhhcnAuYzogRVRIQVJQX0NSRUFURSBpcyByZW5hbWVkIHRvIEVUSEFSUF9UUllfSEFSRC4KICAgIERvIG5vdCB0cnkgaGFyZCB0byBpbnNlcnQgYXJiaXRyYXJ5IHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzLAogICAgZXRoYXJwX2lwX2lucHV0KCkgbm93IGNhbGxzIGV0aGFycF91cGRhdGUoKSB3aXRob3V0IEVUSEFSUF9UUllfSEFSRC4gCiAgICBldGhhcnBfcXVlcnkoKSBub3cgYWx3YXlzIERPRVMgY2FsbCBFVEhBUlBfVFJZX0hBUkQgc28gdGhhdCB1c2VycwogICAgcXVlcnlpbmcgYW4gYWRkcmVzcyB3aWxsIHNlZSBpdCBhcHBlYXIgaW4gdGhlIGNhY2hlIChESENQIGNvdWxkCiAgICBzdWZmZXIgZnJvbSB0aGlzIHdoZW4gYSBzZXJ2ZXIgaW52YWxpZGx5IGdhdmUgYW4gaW4tdXNlIGFkZHJlc3MuKQogICogaXB2NC9pcF9hZGRyLmg6IFJlbmFtZWQgaXBfYWRkcl9tYXNrY21wKCkgdG8gX25ldGNtcCgpIGFzIHdlIGFyZQogICAgY29tcGFyaW5nIG5ldHdvcmsgYWRkcmVzc2VzIChpZGVudGlmaWVycyksIG5vdCB0aGUgbmV0d29yayBtYXNrcwogICAgdGhlbXNlbHZlcy4KICAqIGlwdjQvaXBfYWRkci5jOiBpcF9hZGRyX2lzYnJvYWRjYXN0KCkgbm93IGNoZWNrcyB0aGF0IHRoZSBnaXZlbgogICAgSVAgYWRkcmVzcyBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBuZXR3b3JrIG9mIHRoZSBnaXZlbiBpbnRlcmZhY2UuCgogIDIwMDQtMTEtMjQgS2llcmFuIE1hbnNsZXkgPGtqbTI1QGNhbS5hYy51az4KICAqIHRjcC5jOiBJbmNyZW1lbnQgcGNiLT5zbmRfYnVmIHdoZW4gQUNLIGlzIHJlY2VpdmVkIGluIFNZTl9TRU5UIHN0YXRlLgoKKFNUQUJMRS0xXzFfMC1SQzEpCgogIDIwMDQtMTAtMTYgS2llcmFuIE1hbnNsZXkgPGtqbTI1QGNhbS5hYy51az4KICAqIHRjcC5jOiBBZGQgY29kZSB0byB0Y3BfcmVjdmVkKCkgdG8gc2VuZCBhbiBBQ0sgKHdpbmRvdyB1cGRhdGUpIGltbWVkaWF0ZWx5LAogICAgZXZlbiBpZiBvbmUgaXMgYWxyZWFkeSBwZW5kaW5nLCBpZiB0aGUgcmN2X3duZCBpcyBhYm92ZSBhIHRocmVzaG9sZAogICAgKGN1cnJlbnRseSBUQ1BfV05ELzIpLiBUaGlzIGF2b2lkcyB3YWl0aW5nIGZvciBhIHRpbWVyIHRvIGV4cGlyZSB0byBzZW5kIGEKICAgIGRlbGF5ZWQgQUNLIGluIG9yZGVyIHRvIG9wZW4gdGhlIHdpbmRvdyBpZiB0aGUgc3RhY2sgaXMgb25seSByZWNlaXZpbmcgZGF0YS4KCiAgMjAwNC0wOS0xMiBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPgogICogdGNwKi4qOiBSZXRyYW5zbWl0IHRpbWUtb3V0IGhhbmRsaW5nIGltcHJvdmVtZW50IGJ5IFNhbSBKYW5zZW4uCgogIDIwMDQtMDgtMjAgVG9ueSBNb3VudGlmaWVsZCA8dG9ueUBzb2Z0aW5zLmNvLnVrPgogICogZXRoYXJwLmM6IE1ha2Ugc3VyZSB0aGUgZmlyc3QgcGJ1ZiBxdWV1ZWQgb24gYW4gQVJQIGVudHJ5CiAgICBpcyBwcm9wZXJseSByZWYgY291bnRlZC4KCiAgMjAwNC0wNy0yNyBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBkZWJ1Zy5oOiBBZGRlZCAoaW50KSBjYXN0IGluIExXSVBfREVCVUdGKCkgdG8gYXZvaWQgY29tcGlsZXIKICAgIHdhcm5pbmdzIGFib3V0IGNvbXBhcmlzb24uCiAgKiBwYnVmLmM6IFN0b3BwZWQgY29tcGlsZXIgY29tcGxhaW5pbmcgb2YgZW1wdHkgaWYgc3RhdGVtZW50CiAgICB3aGVuIExXSVBfREVCVUdGKCkgZW1wdHkuICBDbG9zZWQgYW4gdW5jbG9zZWQgY29tbWVudC4KICAqIHRjcC5jOiBTdG9wcGVkIGNvbXBpbGVyIGNvbXBsYWluaW5nIG9mIGVtcHR5IGlmIHN0YXRlbWVudAogICAgd2hlbiBMV0lQX0RFQlVHRigpIGVtcHR5LgogICogaXAuaCBDb3JyZWN0ZWQgSVBIX1RPUygpIG1hY3JvOiByZXR1cm5zIGEgYnl0ZSwgc28gZG9lc24ndCBuZWVkIGh0b25zKCkuCiAgKiBpbmV0LmM6IEFkZGVkIGEgY291cGxlIG9mIGNhc3RzIHRvIHF1aWV0IHRoZSBjb21waWxlci4KICAgIE5vIG5lZWQgdG8gdGVzdCBpc2FzY2lpKGMpIGJlZm9yZSBpc2RpZ2l0KGMpIG9yIGlzeGRpZ2l0KGMpLgoKICAyMDA0LTA3LTIyIFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4KICAqIGluZXQuYzogTWFkZSBkYXRhIHR5cGVzIGNvbnNpc3RlbnQgaW4gaW5ldF9udG9hKCkuCiAgICBBZGRlZCBjYXN0cyBmb3IgcmV0dXJuIHZhbHVlcyBvZiBjaGVja3N1bSByb3V0aW5lcywgdG8gcGFjaWZ5IGNvbXBpbGVyLgogICogaXBfZnJhZy5jLCB0Y3Bfb3V0LmMsIHNvY2tldHMuYywgcGJ1Zi5jCiAgICBTbWFsbCBjb3JyZWN0aW9ucyB0byBzb21lIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLCB0byBwYWNpZnkgY29tcGlsZXIuCgogIDIwMDQtMDctMjEgVG9ueSBNb3VudGlmaWVsZCA8dG9ueUBzb2Z0aW5zLmNvLnVrPgogICogZXRoYXJwLmM6IFJlbW92ZWQgc3B1cmlvdXMgc2VtaWNvbG9uIGFuZCBhZGRlZCBtaXNzaW5nIGVuZC1vZi1jb21tZW50LgogICogZXRoZXJuZXRpZi5jIFVwZGF0ZWQgbG93X2xldmVsX291dHB1dCgpIHRvIG1hdGNoIHByb3RvdHlwZSBmb3IKICAgIG5ldGlmLT5saW5rb3V0cHV0IGFuZCBjaGFuZ2VkIGxvd19sZXZlbF9pbnB1dCgpIHNpbWlsYXJseSBmb3IgY29uc2lzdGVuY3kuCiAgKiBhcGlfbXNnLmM6IENoYW5nZWQgcmVjdl9yYXcoKSBmcm9tIGludCB0byB1OF90LCB0byBtYXRjaCBwcm90b3R5cGUKICAgIG9mIHJhd19yZWN2KCkgaW4gcmF3LmggYW5kIHNvIGF2b2lkIGNvbXBpbGVyIGVycm9yLgogICogc29ja2V0cy5jOiBBZGRlZCB0cml2aWFsIChpbnQpIGNhc3QgdG8ga2VlcCBjb21waWxlciBoYXBwaWVyLgogICogaXAuYywgbmV0aWYuYyBDaGFuZ2VkIGRlYnVnIHN0YXRlbWVudHMgdG8gdXNlIHRoZSB0aWRpZXIgaXA0X2FkZHJOKCkgbWFjcm9zLgoKKFNUQUJMRS0xXzBfMCkKCiAgKysgQ2hhbmdlczoKCiAgMjAwNC0wNy0wNSBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBzb2NrZXRzLio6IFJlc3RydWN0dXJlZCBMV0lQX1BSSVZBVEVfVElNRVZBTC4gTWFrZSBzdXJlCiAgICB5b3VyIGNjLmggZmlsZSBkZWZpbmVzIHRoaXMgZWl0aGVyIDEgb3IgMC4gSWYgbm9uLWRlZmluZWQsCiAgICBkZWZhdWx0cyB0byAxLgogICogLmM6IEFkZGVkIDxzdHJpbmcuaD4gYW5kIDxlcnJuby5oPiBpbmNsdWRlcyB3aGVyZSB1c2VkLgogICogZXRoYXJwLmM6IE1hZGUgc29tZSBhcnJheSBpbmRpY2VzIHVuc2lnbmVkLgoKICAyMDA0LTA2LTI3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIG5ldGlmLio6IEFkZGVkIG5ldGlmX3NldF91cCgpL2Rvd24oKS4KICAqIGRoY3AuYzogQ2hhbmdlcyB0byByZXN0YXJ0IHByb2dyYW0gZmxvdy4KCiAgMjAwNC0wNS0wNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBldGhhcnAuYzogSW4gZmluZF9lbnRyeSgpLCBpbnN0ZWFkIG9mIGEgbGlzdCB0cmF2ZXJzYWwgcGVyIGNhbmRpZGF0ZSwgZG8gYQogICAgc2luZ2xlLXBhc3MgbG9va3VwIGZvciBkaWZmZXJlbnQgY2FuZGlkYXRlcy4gU2hvdWxkIGV4cGxvaXQgbG9jYWxpdHkuCgogIDIwMDQtMDQtMjkgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwKi5jOiBDbGVhbmVkIHVwIHNvdXJjZSBjb21tZW50IGRvY3VtZW50YXRpb24gZm9yIERveHlnZW4gcHJvY2Vzc2luZy4KICAqIG9wdC5oOiBFVEhBUlBfQUxXQVlTX0lOU0VSVCBvcHRpb24gcmVtb3ZlZCB0byBjb21wbHkgd2l0aCBBUlAgUkZDLgogICogZXRoYXJwLmM6IHVwZGF0ZV9hcnBfZW50cnkoKSBvbmx5IGFkZHMgbmV3IEFSUCBlbnRyaWVzIHdoZW4gYWR2aWNlZCB0byBieQogICAgdGhlIGNhbGxlci4gVGhpcyBkZXByZWNhdGVzIHRoZSBFVEhBUlBfQUxXQVlTX0lOU0VSVCBvdmVycnVsZSBvcHRpb24uCgogICsrIEJ1ZyBmaXhlczoKCiAgMjAwNC0wNC0yNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBldGhhcnAuYzogQXBwbGllZCBwYXRjaCBvZiBidWcgIzg3MDggYnkgVG9uaSBNb3VudGlmaWVsZCB3aXRoIGEgc29sdXRpb24KICAgIHN1Z2dlc3RlZCBieSBUaW1teSBCcm9saW4uIEZpeCBmb3IgMzItYml0IHByb2Nlc3NvcnMgdGhhdCBjYW5ub3QgYWNjZXNzCiAgICBub24tYWxpZ25lZCAzMi1iaXQgd29yZHMsIHN1Y2ggYXMgc29tcyAzMi1iaXQgVENQL0lQIGhlYWRlciBmaWVsZHMuIEZpeAogICAgaXMgdG8gcHJlZml4IHRoZSAxNC1iaXQgRXRoZXJuZXQgaGVhZGVycyB3aXRoIHR3byBwYWRkaW5nIGJ5dGVzLgoKICAyMDA0LTA0LTIzIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGlwX2FkZHIuYzogRml4IGluIHRoZSBpcF9hZGRyX2lzYnJvYWRjYXN0KCkgY2hlY2suCiAgKiBldGhhcnAuYzogRml4ZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldCB0aGF0IGluaXRpYXRlcyB0aGUgQVJQIHJlcXVlc3QKICAgIGlzIG5vdCBxdWV1ZWQsIGFuZCBnZXRzIGxvc3QuIEZpeGVkIHRoZSBjYXNlIHdoZXJlIHRoZSBwYWNrZXRzIGRlc3RpbmF0aW9uCiAgICBhZGRyZXNzIGlzIGFscmVhZHkga25vd247IHdlIG5vdyBhbHdheXMgcXVldWUgdGhlIHBhY2tldCBhbmQgcGVyZm9ybSBhbiBBUlAKICAgIHJlcXVlc3QuCgooU1RBQkxFLTBfN18wKQoKICArKyBCdWcgZml4ZXM6CgogICogRml4ZWQgVENQIGJ1ZyBmb3IgU1lOX1NFTlQgdG8gRVNUQUJMSVNIRUQgc3RhdGUgdHJhbnNpdGlvbi4KICAqIEZpeGVkIFRDUCBidWcgaW4gZGVxdWV1ZWluZyBvZiBGSU4gZnJvbSBvdXQgb2Ygb3JkZXIgc2VnbWVudCBxdWV1ZS4KICAqIEZpeGVkIHR3byBwb3NzaWJsZSBOVUxMIHJlZmVyZW5jZXMgaW4gcmFyZSBjYXNlcy4KCihTVEFCTEUtMF82XzYpCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBGaXhlZCBESENQIHdoaWNoIGRpZCBub3QgaW5jbHVkZSB0aGUgSVAgYWRkcmVzcyBpbiBERUNMSU5FIG1lc3NhZ2VzLgoKICArKyBDaGFuZ2VzOgoKICAqIGV0aGFycC5jIGhhcyBiZWVuIGhhdWxlZCBvdmVyIGEgYml0LgoKKFNUQUJMRS0wXzZfNSkKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIFRDUCBidWcgaW5kdWNlZCBieSBiYWQgd2luZG93IHJlc2l6aW5nIHdpdGggdW5pZGlyZWN0aW9uYWwgVENQIHRyYWZmaWMuCiAgKiBQYWNrZXRzIHNlbnQgZnJvbSBBUlAgcXVldWUgaGFkIGludmFsaWQgc291cmNlIGhhcmR3YXJlIGFkZHJlc3MuCgogICsrIENoYW5nZXM6CgogICogUGFzcy1ieSBBUlAgcmVxdWVzdHMgZG8gbm93IHVwZGF0ZSB0aGUgY2FjaGUuCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBObyBsb25nZXIgZGVwZW5kZW50IG9uIGN0eXBlLmguCiAgKiBOZXcgc29ja2V0IG9wdGlvbnMuCiAgKiBSYXcgSVAgcGNiIHN1cHBvcnQuCgooU1RBQkxFLTBfNl80KQoKICArKyBCdWcgZml4ZXM6CgogICogU29tZSBkZWJ1ZyBmb3JtYXR0ZXJzIGFuZCBjYXN0cyBmaXhlZC4KICAqIE51bWVyZW91cyBmaXhlcyBpbiBQUFAuCgogICsrIENoYW5nZXM6CgogICogREVCVUdGIG5vdyBpcyBMV0lQX0RFQlVHRgogICogcGJ1Zl9kZWNoYWluKCkgaGFzIGJlZW4gcmUtZW5hYmxlZC4KICAqIE1lbnRpb25lZCB0aGUgY2hhbmdlZCB1c2Ugb2YgQ1ZTIGJyYW5jaGVzIGluIFJFQURNRS4KCihTVEFCTEUtMF82XzMpCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBGaXhlZCBwb29sIHBidWYgbWVtb3J5IGxlYWsgaW4gcGJ1Zl9hbGxvYygpLgogICAgT2NjdXJlZCBpZiBub3QgZW5vdWdoIFBCVUZfUE9PTCBwYnVmcyBmb3IgYSBwYWNrZXQgcGJ1ZiBjaGFpbi4KICAgIFJlcG9ydGVkIGJ5IFNhdmluIFpsb2JlYy4KCiAgKiBQQlVGX1BPT0wgY2hhaW5zIGhhZCB0aGVpciB0b3RfbGVuIGZpZWxkIG5vdCBzZXQgZm9yIG5vbi1maXJzdAogICAgcGJ1ZnMuIEZpeGVkIGluIHBidWZfYWxsb2MoKS4KCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIEFkZGVkIFBQUCBzdGFjayBjb250cmlidXRlZCBieSBNYXJjIEJvdWNoZXIKCiAgKysgQ2hhbmdlczoKCiAgKiBOb3cgZHJvcHMgc2hvcnQgcGFja2V0cyBmb3IgSUNNUC9VRFAvVENQIHByb3RvY29scy4gTW9yZSByb2J1c3QuCgogICogQVJQIHF1ZXVldWluZyBub3cgcXVldWVzIHRoZSBsYXRlc3QgcGFja2V0IGluc3RlYWQgb2YgdGhlIGZpcnN0LgogICAgVGhpcyBpcyB0aGUgUkZDIHJlY29tbWVuZGVkIGJlaGF2aW91ciwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGluCiAgICBsd2lwb3B0cy5oLgoKKDAuNi4yKQoKICArKyBCdWdmaXhlczoKCiAgKiBUQ1AgaGFzIGJlZW4gZml4ZWQgdG8gZGVhbCB3aXRoIHRoZSBuZXcgdXNlIG9mIHRoZSBwYnVmLT5yZWYKICAgIGNvdW50ZXIuCgogICogREhDUCBkaGNwX2luZm9ybSgpIGNyYXNoIGJ1ZyBmaXhlZC4KCiAgKysgQ2hhbmdlczoKCiAgKiBSZW1vdmVkIHBidWZfcG9vbF9mcmVlX2NhY2hlIGFuZCBwYnVmX3Bvb2xfYWxsb2NfY2FjaGUuIEFsc28gcmVtb3ZlZAogICAgcGJ1Zl9yZWZyZXNoKCkuIFRoaXMgaGFzIHNwZWQgdXAgcGJ1ZiBwb29sIG9wZXJhdGlvbnMgY29uc2lkZXJhYmx5LgogICAgSW1wbGVtZW50ZWQgYnkgRGF2aWQgSGFhcy4KCigwLjYuMSkKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIFRoZSBwYWNrZXQgYnVmZmVyIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIGVuaGFuY2VkIHRvIHN1cHBvcnQKICAgIHplcm8tY29weSBhbmQgY29weS1vbi1kZW1hbmQgZm9yIHBhY2tldCBidWZmZXJzIHdoaWNoIGhhdmUgdGhlaXIKICAgIHBheWxvYWRzIGluIGFwcGxpY2F0aW9uLW1hbmFnZWQgbWVtb3J5LgogICAgSW1wbGVtZW50ZWQgYnkgRGF2aWQgSGFhcy4KCiAgICBVc2UgUEJVRl9SRUYgdG8gbWFrZSBhIHBidWYgcmVmZXIgdG8gUkFNLiBsd0lQIHdpbGwgdXNlIHplcm8tY29weQogICAgaWYgYW4gb3V0Z29pbmcgcGFja2V0IGNhbiBiZSBkaXJlY3RseSBzZW50IG9uIHRoZSBsaW5rLCBvciBwZXJmb3JtCiAgICBhIGNvcHktb24tZGVtYW5kIHdoZW4gbmVjZXNzYXJ5LgoKICAgIFRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGFzc3VtZSB0aGUgcGFja2V0IGlzIHNlbnQsIGFuZCB0aGUgUkFNCiAgICBpcyBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uIGRpcmVjdGx5IGFmdGVyIGNhbGxpbmcgdWRwX3NlbmQoKQogICAgb3Igc2ltaWxhciBmdW5jdGlvbi4KCiAgKysgQnVnZml4ZXM6CgogICogQVJQX1FVRVVFSU5HIHNob3VsZCBub3cgY29ycmVjdGx5IHdvcmsgZm9yIGFsbCBjYXNlcywgaW5jbHVkaW5nCiAgICBQQlVGX1JFRi4KICAgIEltcGxlbWVudGVkIGJ5IExlb24gV29lc3RlbmJlcmcuCgogICsrIENoYW5nZXM6CgogICogSVBfQUREUl9BTlkgaXMgbm8gbG9uZ2VyIGEgTlVMTCBwb2ludGVyLiBJbnN0ZWFkLCBpdCBpcyBhIHBvaW50ZXIKICAgIHRvIGEgJzAuMC4wLjAnIElQIGFkZHJlc3MuCgogICogVGhlIHBhY2tldCBidWZmZXIgaW1wbGVtZW50YXRpb24gaXMgY2hhbmdlZC4gVGhlIHBidWYtPnJlZiBjb3VudGVyCiAgICBtZWFuaW5nIGhhcyBjaGFuZ2VkLCBhbmQgc2V2ZXJhbCBwYnVmIGZ1bmN0aW9ucyBoYXZlIGJlZW4KICAgIGFkYXB0ZWQgYWNjb3JkaW5nbHkuCgogICogbmV0aWYgZHJpdmVycyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gc2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCBmaWVsZAogICAgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkIGNvcnJlY3RseSBieSB0aGUgZHJpdmVyIChoaW50OiA2IGZvciBFdGhlcm5ldCBNQUMpLgogICAgU2VlIHRoZSBjb250cmliL3BvcnRzL2MxNnggY3M4OTAwIGRyaXZlciBhcyBhIGRyaXZlciBleGFtcGxlLgoKICAqIG5ldGlmJ3MgaGF2ZSBhIGRoY3AgZmllbGQgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIE5VTEwgYnkgdGhlIGRyaXZlci4KICAgIFNlZSB0aGUgY29udHJpYi9wb3J0cy9jMTZ4IGNzODkwMCBkcml2ZXIgYXMgYSBkcml2ZXIgZXhhbXBsZS4KCigwLjUueCkgVGhpcyBmaWxlIGhhcyBiZWVuIHVubWFpbnRhaW5lZCB1cCB0byAwLjYuMS4gQWxsIGNoYW5nZXMgYXJlCiAgbG9nZ2VkIGluIENWUyBidXQgaGF2ZSBub3QgYmVlbiBleHBsYWluZWQgaGVyZS4KCigwLjUuMykgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4yCgogICsrIEJ1Z2ZpeGVzOgoKICAqIG1lbXBfbWFsbG9jKE1FTVBfQVBJX01TRykgY291bGQgZmFpbCB3aXRoIG11bHRpcGxlIGFwcGxpY2F0aW9uCiAgICB0aHJlYWRzIGJlY2F1c2UgaXQgd2Fzbid0IHByb3RlY3RlZCBieSBzZW1hcGhvcmVzLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIHN0cnVjdCBpcF9hZGRyIG5vdyBwYWNrZWQuCgogICogVGhlIG5hbWUgb2YgdGhlIHRpbWUgdmFyaWFibGUgaW4gYXJwLmMgaGFzIGJlZW4gY2hhbmdlZCB0byBjdGltZQogICAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIHRpbWUoKSBmdW5jdGlvbi4KCigwLjUuMikgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4xCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBBIG5ldyBUQ1AgZnVuY3Rpb24sIHRjcF90bXIoKSwgbm93IGhhbmRsZXMgYm90aCBUQ1AgdGltZXJzLgoKICArKyBCdWdmaXhlczoKCiAgKiBBIGJ1ZyBpbiB0Y3BfcGFyc2VvcHQoKSBjb3VsZCBjYXVzZSB0aGUgc3RhY2sgdG8gaGFuZyBiZWNhdXNlIG9mIGEKICAgIG1hbGZvcm1lZCBUQ1Agb3B0aW9uLgoKICAqIFRoZSBhZGRyZXNzIG9mIG5ldyBjb25uZWN0aW9ucyBpbiB0aGUgYWNjZXB0KCkgZnVuY3Rpb24gaW4gdGhlIEJTRAogICAgc29ja2V0IGxpYnJhcnkgd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KCiAgKiBwYnVmX2RlY2hhaW4oKSBkaWQgbm90IHVwZGF0ZSB0aGUgLT50b3RfbGVuIGZpZWxkIG9mIHRoZSB0YWlsLgoKICAqIEFib3J0ZWQgVENQIGNvbm5lY3Rpb25zIHdlcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5IGluIGFsbAogICAgc2l0dWF0aW9ucy4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBBbGwgcHJvdG9jb2wgaGVhZGVyIHN0cnVjdHMgYXJlIG5vdyBwYWNrZWQuCgogICogVGhlIC0+bGVuIGZpZWxkIGluIHRoZSB0Y3Bfc2VnIHN0cnVjdHVyZSBub3cgY291bnRzIHRoZSBhY3R1YWwKICAgIGFtb3VudCBvZiBkYXRhLCBhbmQgZG9lcyBub3QgYWRkIG9uZSBmb3IgU1lOIGFuZCBGSU4gc2VnbWVudHMuCgooMC41LjEpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjUuMAoKICArKyBOZXcgZmVhdHVyZXM6CgogICogUG9zc2libGUgdG8gcnVuIGFzIGEgdXNlciBwcm9jZXNzIHVuZGVyIExpbnV4LgoKICAqIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGNyb3NzIHBsYXRmb3JtIHBhY2tlZCBzdHJ1Y3RzLgoKICAqIEFSUCB0aW1lciBub3cgaW1wbGVtZW50ZWQuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIFRDUCBvdXRwdXQgcXVldWUgbGVuZ3RoIHdhcyBiYWRseSBpbml0aWFsaXplZCB3aGVuIG9wZW5pbmcKICAgIGNvbm5lY3Rpb25zLgoKICAqIFRDUCBkZWxheWVkIEFDS3Mgd2VyZSBub3Qgc2VudCBjb3JyZWN0bHkuCgogICogRXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgQlNTIHNlZ21lbnQgdmFyaWFibGVzLgoKICAqIHJlYWQoKSBpbiBCU0Qgc29ja2V0IGxpYnJhcnkgY291bGQgZHJvcCBkYXRhLgoKICAqIFByb2JsZW1zIHdpdGggbWVtb3J5IGFsaWdubWVudC4KCiAgKiBTaXR1YXRpb25zIHdoZW4gYWxsIFRDUCBidWZmZXJzIHdlcmUgdXNlZCBjb3VsZCBsZWFkIHRvCiAgICBzdGFydmF0aW9uLgoKICAqIFRDUCBNU1Mgb3B0aW9uIHdhc24ndCBwYXJzZWQgY29ycmVjdGx5LgoKICAqIFByb2JsZW1zIHdpdGggVURQIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKICAqIElQIG11bHRpY2FzdCBhZGRyZXNzIHRlc3RzIGhhZCBlbmRpYW5lc3MgcHJvYmxlbXMuCgogICogQVJQIHJlcXVlc3RzIGhhZCB3cm9uZyBkZXN0aW5hdGlvbiBoYXJkd2FyZSBhZGRyZXNzLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIHN0cnVjdCBldGhfYWRkciBjaGFuZ2VkIGZyb20gdTE2X3RbM10gYXJyYXkgdG8gdThfdFs2XS4KCiAgKiBBIC0+bGlua291dHB1dCgpIG1lbWJlciB3YXMgYWRkZWQgdG8gc3RydWN0IG5ldGlmLgoKICAqIFRDUCBhbmQgVURQIC0+ZGVzdF8qIHN0cnVjdCBtZW1iZXJzIHdoZXJlIGNoYW5nZWQgdG8gLT5yZW1vdGVfKi4KCiAgKiBudG9oKiBtYWNyb3MgYXJlIG5vdyBudWxsIGRlZmluaXRpb25zIGZvciBiaWcgZW5kaWFuIENQVXMuCgooMC41LjApIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjQuMgoKICArKyBOZXcgZmVhdHVyZXM6CgogICogUmVkZXNpZ25lZCBvcGVyYXRpbmcgc3lzdGVtIGVtdWxhdGlvbiBsYXllciB0byBtYWtlIHBvcnRpbmcgZWFzaWVyLgoKICAqIEJldHRlciBjb250cm9sIG92ZXIgVENQIG91dHB1dCBidWZmZXJzLgoKICAqIERvY3VtZW5hdGlvbiBhZGRlZC4KCiAgKysgQnVnZml4ZXM6CgogICogTG9ja2luZyBpc3N1ZXMgaW4gYnVmZmVyIG1hbmFnZW1lbnQuCgogICogQnVnZml4ZXMgaW4gdGhlIHNlcXVlbnRpYWwgQVBJLgoKICAqIElQIGZvcndhcmRpbmcgY291bGQgY2F1c2UgbWVtb3J5IGxlYWthZ2UuIFRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogRGlyZWN0b3J5IHN0cnVjdHVyZSBzb21ld2hhdCBjaGFuZ2VkOyB0aGUgY29yZS8gdHJlZSBoYXMgYmVlbgogICAgY29sbGFwc2VkLgoKKDAuNC4yKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC40LjEKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIEV4cGVyaW1lbnRhbCBBUlAgaW1wbGVtZW50YXRpb24gYWRkZWQuCgogICogU2tlbGV0b24gRXRoZXJuZXQgZHJpdmVyIGFkZGVkLgoKICAqIEV4cGVyaW1lbnRhbCBCU0Qgc29ja2V0IEFQSSBsaWJyYXJ5IGFkZGVkLgoKICArKyBCdWdmaXhlczoKCiAgKiBJbiB2ZXJ5IGludGVuc2Ugc2l0dWF0aW9ucywgbWVtb3J5IGxlYWthZ2UgY291bGQgb2NjdXIuIFRoaXMgaGFzCiAgICBiZWVuIGZpeGVkLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIFZhcmlhYmxlcyBuYW1lZCAiZGF0YSIgYW5kICJjb2RlIiBoYXZlIGJlZW4gcmVuYW1lZCBpbiBvcmRlciB0bwogICAgYXZvaWQgbmFtZSBjb25mbGljdHMgaW4gY2VydGFpbiBjb21waWxlcnMuCgogICogVmFyaWFibGUrKyBoYXZlIGluIGFwcGxpY2lhYmxlIGNhc2VzIGJlZW4gdHJhbnNsYXRlZCB0byArK3ZhcmlhYmxlCiAgICBzaW5jZSBzb21lIGNvbXBpbGVycyBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBpbiB0aGUgbGF0dGVyIGNhc2UuCgooMC40LjEpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjQKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIFRDUDogQ29ubmVjdGlvbiBhdHRlbXB0cyB0aW1lIG91dCBlYXJsaWVyIHRoYW4gZGF0YQogICAgdHJhbnNtaXNzaW9ucy4gTmFnbGUgYWxnb3JpdGhtIGltcGxlbWVudGVkLiBQdXNoIGZsYWcgc2V0IG9uIHRoZQogICAgbGFzdCBzZWdtZW50IGluIGEgYnVyc3QuCgogICogVURQOiBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgVURQLUxpdGUgZXh0ZW5zaW9ucy4KCiAgKysgQnVnZml4ZXM6CgogICogVENQOiBvdXQgb2Ygb3JkZXIgc2VnbWVudHMgd2VyZSBpbiBzb21lIGNhc2VzIGhhbmRsZWQgaW5jb3JyZWN0bHksCiAgICBhbmQgdGhpcyBoYXMgbm93IGJlZW4gZml4ZWQuIERlbGF5ZWQgYWNrbm93bGVkZ2VtZW50cyB3YXMgYnJva2VuCiAgICBpbiAwLjQsIGhhcyBub3cgYmVlbiBmaXhlZC4gQmluZGluZyB0byBhbiBhZGRyZXNzIHRoYXQgaXMgaW4gdXNlCiAgICBub3cgcmVzdWx0cyBpbiBhbiBlcnJvci4gUmVzZXQgY29ubmVjdGlvbnMgc29tZXRpbWVzIGh1bmcgYW4KICAgIGFwcGxpY2F0aW9uOyB0aGlzIGhhcyBiZWVuIGZpeGVkLgoKICAqIENoZWNrc3VtIGNhbGN1bGF0aW9uIHNvbWV0aW1lcyBmYWlsZWQgZm9yIGNoYWluZWQgcGJ1ZnMgd2l0aCBvZGQKICAgIGxlbmd0aHMuIFRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICogQVBJOiBhIGxvdCBvZiBidWcgZml4ZXMgaW4gdGhlIEFQSS4gVGhlIFVEUCBBUEkgaGFzIGJlZW4gaW1wcm92ZWQKICAgIGFuZCB0ZXN0ZWQuIEVycm9yIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgaGFzIGJlZW4KICAgIGltcHJvdmVkLiBMb2dpY2FsIGZsYXdzIGFuZCByYWNlIGNvbmRpdGlvbnMgZm9yIGluY29taW5nIFRDUAogICAgY29ubmVjdGlvbnMgaGFzIGJlZW4gZm91bmQgYW5kIHJlbW92ZWQuCgogICogTWVtb3J5IG1hbmFnZXI6IGFsaWdubWVudCBpc3N1ZXMuIFJlYWxsb2NhdGluZyBtZW1vcnkgc29tZXRpbWVzCiAgICBmYWlsZWQsIHRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICogR2VuZXJpYyBsaWJyYXJ5OiBiY29weSB3YXMgZmxhd2VkIGFuZCBoYXMgYmVlbiBmaXhlZC4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBBUEk6IGFsbCBkYXRhdHlwZXMgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIGdlbmVyaWMgb25lcyBzdWNoIGFzCiAgICBpbnRzLCB0byBzcGVjaWZpZWQgb25lcyBzdWNoIGFzIHUxNl90LiBGdW5jdGlvbnMgdGhhdCByZXR1cm4KICAgIGVycm9ycyBub3cgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIChlcnJfdCkuCgogICogR2VuZXJhbDogQSBsb3Qgb2YgY29kZSBjbGVhbmVkIHVwIGFuZCBkZWJ1Z2dpbmcgY29kZSByZW1vdmVkLiBNYW55CiAgICBwb3J0YWJpbGl0eSBpc3N1ZXMgaGF2ZSBiZWVuIGZpeGVkLgoKICAqIFRoZSBsaWNlbnNlIHdhcyBjaGFuZ2VkOyB0aGUgYWR2ZXJ0aXNpbmcgY2xhdXNlIHdhcyByZW1vdmVkLgoKICAqIEM2NCBwb3J0IGFkZGVkLgoKICAqIFRoYW5rczogSHVnZSB0aGFua3MgZ28gdG8gRGFnYW4gR2FsYXJuZWF1LCBIb3JzdCBHYXJuZXR6a2UsIFBldHJpCiAgICBLb3N1bmVuLCBNaWthZWwgQ2FsZXJlcywgYW5kIEZyaXRzIFdpbG1pbmsgZm9yIHJlcG9ydGluZyBhbmQKICAgIGZpeGluZyBidWdzIQoKKDAuNCkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuMy4xCgogICogTWVtb3J5IG1hbmFnZW1lbnQgaGFzIGJlZW4gcmFkaWNhbGx5IGNoYW5nZWQ7IGluc3RlYWQgb2YKICAgIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20gYSBzaGFyZWQgaGVhcCwgbWVtb3J5IGZvciBvYmplY3RzIHRoYXQgYXJlCiAgICByYXBpZGx5IGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgaXMgbm93IGtlcHQgaW4gcG9vbHMuIEFsbG9jYXRpb24KICAgIGFuZCBkZWFsbG9jYXRpb24gZnJvbSB0aG9zZSBtZW1vcnkgcG9vbHMgaXMgdmVyeSBmYXN0LiBUaGUgc2hhcmVkCiAgICBoZWFwIGlzIHN0aWxsIHByZXNlbnQgYnV0IGlzIHVzZWQgbGVzcyBmcmVxdWVudGx5LgoKICAqIFRoZSBtZW1vcnksIG1lbW9yeSBwb29sLCBhbmQgcGFja2V0IGJ1ZmZlciBzdWJzeXN0ZW1zIG5vdyBzdXBwb3J0CiAgICA0LSwgMi0sIG9yIDEtYnl0ZSBhbGlnbm1lbnQuCgogICogIk91dCBvZiBtZW1vcnkiIHNpdHVhdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBtb3JlIHJvYnVzdCB3YXkuCgogICogU3RhY2sgdXNhZ2UgaGFzIGJlZW4gcmVkdWNlZC4KCiAgKiBFYXNpZXIgY29uZmlndXJhdGlvbiBvZiBsd0lQIHBhcmFtZXRlcnMgc3VjaCBhcyBtZW1vcnkgdXNhZ2UsCiAgICBUVExzLCBzdGF0aXN0aWNzIGdhdGhlcmluZywgZXRjLiBBbGwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZQogICAgbm93IGtlcHQgaW4gYSBzaW5nbGUgaGVhZGVyIGZpbGUgImx3aXBvcHRzLmgiLgoKICAqIFRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGhhcyBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgc28gdGhhdCBhbGwKICAgIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcyBhcmUga2VwdCB1bmRlciB0aGUgc3JjL2FyY2gKICAgIGhpZXJhcmNoeS4KCiAgKiBFcnJvciBwcm9wYWdhdGlvbiBoYXMgYmVlbiBpbXByb3ZlZCwgYm90aCBpbiB0aGUgcHJvdG9jb2wgbW9kdWxlcwogICAgYW5kIGluIHRoZSBBUEkuCgogICogVGhlIGNvZGUgZm9yIHRoZSBSVFhDIGFyY2hpdGVjdHVyZSBoYXMgYmVlbiBpbXBsZW1lbnRlZCwgdGVzdGVkCiAgICBhbmQgcHV0IHRvIHVzZS4KCiAgKiBCdWdzIGhhdmUgYmVlbiBmb3VuZCBhbmQgY29ycmVjdGVkIGluIHRoZSBUQ1AsIFVEUCwgSVAsIEFQSSwgYW5kCiAgICB0aGUgSW50ZXJuZXQgY2hlY2tzdW0gbW9kdWxlcy4KCiAgKiBCdWdzIHJlbGF0ZWQgdG8gcG9ydGluZyBiZXR3ZWVuIGEgMzItYml0IGFuZCBhIDE2LWJpdCBhcmNoaXRlY3R1cmUKICAgIGhhdmUgYmVlbiBmb3VuZCBhbmQgY29ycmVjdGVkLgoKICAqIFRoZSBsaWNlbnNlIGhhcyBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gY29uZm9ybSBtb3JlIHdpdGggdGhlCiAgICBvcmlnaW5hbCBCU0QgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBhZHZlcnRpc2VtZW50IGNsYXVzZS4KCigwLjMuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuMwoKICAqIEZpeCBvZiBhIGZhdGFsIGJ1ZyBpbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQuIFBidWZzIHdpdGggYWxsb2NhdGVkCiAgICBSQU0gbmV2ZXIgcmV0dXJuZWQgdGhlIFJBTSB3aGVuIHRoZSBwYnVmIHdhcyBkZWFsbG9jYXRlZC4KCiAgKiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sLCB3aW5kb3cgdXBkYXRlcyBhbmQgcmV0cmFuc21pc3Npb25zIGRpZCBub3QKICAgIHdvcmsgY29ycmVjdGx5LiBUaGlzIGhhcyBub3cgYmVlbiBmaXhlZC4KCiAgKiBCdWdmaXhlcyBpbiB0aGUgQVBJLgoKKDAuMykgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuMgoKICAqIE5ldyBhbmQgaW1wcm92ZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gQWxsIGluY2x1ZGUgZmlsZXMgYXJlIG5vdwogICAga2VwdCBpbiBhIGRlZGljYXRlZCBpbmNsdWRlLyBkaXJlY3RvcnkuCgogICogVGhlIEFQSSBub3cgaGFzIHByb3BlciBlcnJvciBoYW5kbGluZy4gQSBuZXcgZnVuY3Rpb24sCiAgICBuZXRjb25uX2VycigpLCBub3cgcmV0dXJucyBhbiBlcnJvciBjb2RlIGZvciB0aGUgY29ubmVjdGlvbiBpbgogICAgY2FzZSBvZiBlcnJvcnMuCgogICogSW1wcm92ZW1lbnRzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoZSBzeXN0ZW0gbm93CiAgICBrZWVwcyBhIHBvaW50ZXIgdG8gdGhlIGxvd2VzdCBmcmVlIG1lbW9yeSBibG9jay4gQSBuZXcgZnVuY3Rpb24sCiAgICBtZW1fbWFsbG9jMigpIHRyaWVzIHRvIGFsbG9jYXRlIG1lbW9yeSBvbmNlLCBhbmQgaWYgaXQgZmFpbHMgdHJpZXMKICAgIHRvIGZyZWUgc29tZSBtZW1vcnkgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLgoKICAqIE11Y2ggdGVzdGluZyBoYXMgYmVlbiBkb25lIHdpdGggbGltaXRlZCBtZW1vcnkKICAgIGNvbmZpZ3VyYXRpb25zLiBsd0lQIG5vdyBkb2VzIGEgYmV0dGVyIGpvYiB3aGVuIG92ZXJsb2FkZWQuCgogICogU29tZSBidWdmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIHRoZSBidWZmZXIgKHBidWYpIHN1YnN5c3RlbS4KCiAgKiBNYW55IGJ1Z2ZpeGVzIGluIHRoZSBUQ1AgY29kZToKCiAgICAtIEZpeGVkIGEgYnVnIGluIHRjcF9jbG9zZSgpLgoKICAgIC0gVGhlIFRDUCByZWNlaXZlIHdpbmRvdyB3YXMgaW5jb3JyZWN0bHkgY2xvc2VkIHdoZW4gb3V0IG9mCiAgICAgIHNlcXVlbmNlIHNlZ21lbnRzIHdhcyByZWNlaXZlZC4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIENvbm5lY3Rpb25zIGFyZSBub3cgdGltZWQtb3V0IG9mIHRoZSBGSU4tV0FJVC0yIHN0YXRlLgoKICAgIC0gVGhlIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cgY291bGQgaW4gc29tZSBjYXNlcyBiZSB0b28KICAgICAgbGFyZ2UuIFRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICAgLSBUaGUgcmV0cmFuc21pc3Npb24gcXVldWUgY291bGQgaW4gc29tZSBjYXNlcyBiZSBzY3Jld2VkIHVwLiBUaGlzCiAgICAgIGhhcyBiZWVuIGZpeGVkLgoKICAgIC0gVENQIFJTVCBmbGFnIG5vdyBoYW5kbGVkIGNvcnJlY3RseS4KCiAgICAtIE91dCBvZiBzZXF1ZW5jZSBkYXRhIHdhcyBpbiBzb21lIGNhc2VzIG5ldmVyIGRlbGl2ZXJlZCB0byB0aGUKICAgICAgYXBwbGljYXRpb24uIFRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICAgLSBSZXRyYW5zbWl0dGVkIHNlZ21lbnRzIG5vdyBjb250YWluIHRoZSBjb3JyZWN0IGFja25vd2xlZGdtZW50CiAgICAgIG51bWJlciBhbmQgYWR2ZXJ0aXNlZCB3aW5kb3cuCgogICAgLSBUQ1AgcmV0cmFuc21pc3Npb24gdGltZW91dCBiYWNrb2ZmcyBhcmUgbm90IGNvcnJlY3RseSBjb21wdXRlZAogICAgICAoYWxhIEJTRCkuIEFmdGVyIGEgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucywgVENQIG5vdyBnaXZlcyB1cAogICAgICB0aGUgY29ubmVjdGlvbi4KCiAgKiBUQ1AgY29ubmVjdGlvbnMgbm93IGFyZSBrZXB0IG9uIHRocmVlIGxpc3RzLCBvbmUgZm9yIGFjdGl2ZQogICAgY29ubmVjdGlvbnMsIG9uZSBmb3IgbGlzdGVuaW5nIGNvbm5lY3Rpb25zLCBhbmQgb25lIGZvcgogICAgY29ubmVjdGlvbnMgdGhhdCBhcmUgaW4gVElNRS1XQUlULiBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIHRoZSBmYXN0CiAgICB0aW1lb3V0IHByb2Nlc3NpbmcgZm9yIHNlbmRpbmcgZGVsYXllZCBBQ0tzLgoKICAqIFRDUCBub3cgcHJvdmlkZXMgcHJvcGVyIGZlZWRiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiB3aGVuIGEKICAgIGNvbm5lY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB1cC4KCiAgKiBNb3JlIGNvbW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgY29kZS4gVGhlIGNvZGUgaGFzIGFsc28gYmVlbgogICAgc29tZXdoYXQgY2xlYW5lZCB1cC4KCigwLjIpIEluaXRpYWwgcHVibGljIHJlbGVhc2UuCg==