MTk5OS0wNC0yMCAgSmltIEJsYW5keSAgPGppbWJAendpbmdsaS5jeWdudXMuY29tPgoKCUZpeCBmcm9tIERhbGUgSGF3a2luczoKCSogY3BsdXMtZGVtLmMgKG1vcF91cCk6IFNldCB0eXBldmVjX3NpemUgdG8gemVybywgc28gaXQnbGwgYmUgCglyZWFsbG9jYXRlZCBwcm9wZXJseSBpZiB3ZSB1c2UgaXQgYWdhaW4uCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVuLiAgQmUKCXN0cmljdGVyIGFib3V0IHN5bnRheC4gIEFsd2F5cyBudWxsLXRlcm1pbmF0ZSBzdHJpbmcuCgoJRml4IGZyb20gTWFyY3VzIERhbmllbHM6CgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgdGhlCglpZGVudGlmaWVyIGxvb2tpbmcgZm9yIGFub3RoZXIgdW5kZXJzY29yZS4KCjE5OTktMDQtMTEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGxvY2EtY29uZi5oIChhbGxvY2EpIFtDX0FMTE9DQV06IERvbid0IHVzZSBHY2MgYnVpbHRpbgoJb3IgPGFsbG9jYS5oPi4KCSogY2xvY2suYyAoR05VX0haKTogTmV3IGRlZmluaXRpb24uCgkoY2xvY2spOiBVc2UgaXQuCgkqIGdldHJ1bnRpbWUuYzogTGlrZXdpc2UuCgoJKiBjb25maWcudGFibGU6IFVzZSBtaC1iZW9zLgoJKiBjb25maWcvbWgtYmVvczogTmV3IGZpbGUuCgoxOTk5LTA0LTAxICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogQXR0ZW1wdCB0byBoYW5kbGUgb3ZlcmZsb3dzIGluIGNvdW50cyB3aXRoIHNvbWUKCXNlbWJsYW5jZSBvZiBncmFjZS4KCShjb25zdW1lX2NvdW50KTogRGV0ZWN0IG92ZXJmbG93cy4gIFJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcnMsCglpbnN0ZWFkIG9mIHplcm8uCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSwgZGVtYW5nbGVfdGVtcGxhdGUpOiBIYW5kbGUgY2hhbmdlCgl0byBjb25zdW1lX2NvdW50J3MgcmV0dXJuIGNvbnZlbnRpb24uCgpUaHUgQXByICA4IDE0OjQzOjI4IDE5OTkgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHhtYWxsb2MuYywgcGV4ZWN1dGUuYzogRGVmaW5lIF9fQ1lHV0lOX18gd2hlbiBiZWluZyBjb21waWxlZAogCXdpdGggb2xkIF9fQ1lHV0lOMzJfXyBjb21waWxlci4KCjE5OTktMDQtMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfY29tcGFyZV9wb2ludGVycyk6IERlZmluZS4KCjE5OTktMDMtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmMgKHNwbGF5X3RyZWVfY29tcGFyZV9pbnRzKTogRGVmaW5lLgoKMTk5OS0wMy0zMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGNvbnN1bWVfY291bnQpOiBJZiBgY291bnQnIHdyYXBzLCByZXR1cm4gMCBhbmQKCWRvbid0IGFkdmFuY2UgaW5wdXQgcG9pbnRlci4KCShkZW1hbmdsZV9jbGFzc19uYW1lKTogSWYgY29uc3VtZV9jb3VudCBkaWRuJ3QgZmluZCBhIGNvdW50LCBkbwoJbm90aGluZy4gIERvbid0IGJvdGhlciB3aXRoIGBzdHJsZW4nIHNhbml0eSBjaGVjazsgY29uc3VtZV9jb3VudAoJZG9lcyBpdCBmb3IgdXMuCgoxOTk5LTAzLTE2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJRnJvbSBBcnQgSGFhcyAgPGFoYWFzQG5lb3NvZnQuY29tPjoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IERvbid0IGdyYWIgYWxsIHRoZSAnX18nIHN0cmluZ3MKCXdoZW4gZG9pbmcgYXJtIG9yIGhwIHN0eWxlLgoJKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogRGVjciBmb3JnZXR0aW5nX3R5cGVzIGZpZWxkIHdoZW4gZG9uZS4KCQpUaHUgTWFyIDExIDAxOjIyOjU4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogcGV4ZWN1dGUuYyAoX19DWUdXSU4zMl9fKTogUmVuYW1lIHRvCgkoX19DWUdXSU5fXyk6IHRoaXMuCgkqIHhtYWxsb2MuYzogTGlrZXdpc2UuCgoJQ2hhbmdlcyB0byBzdXBwb3J0IGkzODYtcGMtdXdpbi4KCSogY29uZmlndXJlLmluICgqLSotdXdpbiopOiBXb3JrYXJvdW5kIGZvciB2Zm9yayBidWcuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogcGV4ZWN1dGUuYyAocGV4ZWN1dGUpOiBCZSBsaWtlIHN0YW5kYXJkIFVuaXguCgkocHdhaXQpOiBMaWtld2lzZS4KCSogeG1hbGxvYy5jIChmaXJzdF9icmVhayk6IERlZmluZS4KCSh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBVc2UuCgkoeG1hbGxvYyk6IFVzZS4KClRodSBNYXIgMTEgMDE6MDc6NTUgMTk5OSAgRnJhbnogU2lybCA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiBjb25maWcudGFibGU6IENsZWFudXAgYW5kIGFkZCBtaC0qcGljIGhhbmRsaW5nIGZvciBhbHBoYSwgYXJtLCBwb3dlcnBjCgpTdW4gRmViIDI4IDIyOjMwOjQ0IDE5OTkgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IENoZWNrIGN5Z3dpbiosIG5vdCBjeWd3aW4zMiouCgpUdWUgRmViICA5IDE2OjM5OjAxIDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgbWtzdGVtcCAtPiBta3N0ZW1wcy4KClR1ZSBGZWIgIDkgMDE6MTI6MjcgMTk5OSAgTWFyYyBFc3BpZSA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUyk6IHJlbW92ZSBta3N0ZW1wLm8KCSogY29uZmlndXJlLmluIChmdW5jcyk6IENoZWNrIGZvciBhbmQgY29uZGl0aW9uYWxseSBhZGQgbWtzdGVtcHMgdG8KCXRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBsaWJpYmVydHkgd2lsbCBwcm92aWRlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkKV2VkIEZlYiAgMyAwMDowMToxNSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNsb2NrLmMgKEhaKTogRGVmaW5lIGluIHRlcm1zIG9mIChJU08gQykgQ0xPQ0tTX1BFUl9TRUMgb24gCglwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIEhaLgoJKiBnZXRydW50aW1lLmMgKEhaKTogTGlrZXdpc2UuCgpTYXQgSmFuIDMwIDEzOjI4OjA0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoeHN0cmR1cC5vKTogRGVwZW5kIG9uIGNvbmZpZy5oLgoKV2VkIEphbiAxMyAwNzoyNjo0NCAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjcGx1cy1kZW0uYyAobW9wX3VwKTogU2V0IHdvcmstPnByZXZpb3VzX2FyZ3VtZW50IHRvIE5VTEwgYWZ0ZXIKCWZyZWVpbmcgaXQuCgpXZWQgSmFuIDEzIDE0OjE2OjM2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHhzdHJkdXAuYyAoeHN0cmR1cCk6IFN3aXRjaCBmcm9tIHN0cmNweSB0byBtZW1jcHkgZm9yIHNwZWVkLgoKVHVlIEphbiAgNSAxNTo1ODoyOSAxOTk5ICBFbGVuYSBaYW5ub25pICA8ZXphbm5vbmlAa3dpa2VtYXJ0LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogZml4IHR5cG8sIHNwbGF5LXRyZWUuYyBpbnN0ZWFkIG9mCglzcGxheS10cmVlLm8uCgoxOTk5LTAxLTA0ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYgMi4xMi4xIG9yIGhpZ2hlci4KCjE5OTgtMTItMzAgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcmFuZG9tLmMgKE5VTEwpOiBEb24ndCByZWRlZmluZSBOVUxMIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZC4KClR1ZSBEZWMgMjIgMDk6NDM6MzUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYXJndi5jIChidWlsZGFyZ3YpOiBDYXN0IHRoZSByZXN1bHQgb2YgYWxsb2NhIGluIGFzc2lnbm1lbnQuCgoJKiBjaG9vc2UtdGVtcC5jOiBJbmNsdWRlIHN0ZGxpYi5oLgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLgogIAkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogQ29uc3RpZnkgZmlyc3QgcGFyYW1ldGVyLgogIAkoY29kZV9mb3JfcXVhbGlmaWVyKTogQXZvaWQgYSBnY2MgZXh0ZW5zaW9uLCBtYWtlIHRoZSBwYXJhbWV0ZXIgYW4KIAlpbnQsIG5vdCBhIGNoYXIuCgkoZGVtYW5nbGVfcXVhbGlmaWVyKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYSBjdHlwZSBmdW5jdGlvbiB0bwoJdW5zaWduZWQgY2hhci4KCShhcm1fcHQpOiBBZGQgcGFyZW5zIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMgdHJ1dGggdmFsdWUuCgkoZGVtYW5nbGVfYXJtX2hwX3RlbXBsYXRlKTogQ29uc3RpZnkgdmFyaWFibGUgYGFyZ3MnLgoJKGRvX2hwYWNjX3RlbXBsYXRlX2NvbnN0X3ZhbHVlKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYSBjdHlwZQoJZnVuY3Rpb24gdG8gdW5zaWduZWQgY2hhci4KCShkb19ocGFjY190ZW1wbGF0ZV9saXRlcmFsKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgaScuCgkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogQ29uc3RpZnkgcGFyYW1ldGVyIGBhcmdzJy4KCUNhc3QgdGhlIGFyZ3VtZW50IG9mIGEgY3R5cGUgZnVuY3Rpb24gdG8gdW5zaWduZWQgY2hhci4KCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8KIAlhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogZm5tYXRjaC5jIChmbm1hdGNoKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGVzIGBjJywgYGMxJywKIAlgY3N0YXJ0JyBhbmQgYGNlbmQnIHRvIHVuc2lnbmVkIGNoYXIuICBDYXN0IHRoZSBhcmd1bWVudCBvZiBtYWNybwogCWBGT0xEJywgd2hpY2ggdXNlcyBjdHlwZSBmdW5jdGlvbnMsIHRvIHVuc2lnbmVkIGNoYXIuCgoJKiBvYmphbGxvYy5jIChmcmVlKTogQWRkIHByb3RvdHlwZS4KClN1biBEZWMgMjAgMTY6MDM6NDYgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBGaXggdHlwbzogc3BsYXktdHJlZS5jLCBub3Qgc3BsYXktdHJlZS5vCgpGcmkgRGVjIDE4IDE3OjUwOjE4IDE5OTggIERhdmlkIFRheWxvciAgPHRheWxvckB0ZXhhcy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IHJlbW92ZSBkZWNsYXJhdGlvbiAtLSBmdW5jdGlvbgogCWRvZXNuJ3QgZXhpc3QuCgkoZG9faHBhY2NfdGVtcGxhdGVfbGl0ZXJhbCk6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGknLgoJCkZyaSBEZWMgMTggMTY6MTE6NDMgRVNUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBQcm9jZXNzIENWIGFuZCB1IGNvZGVzIGJlZm9yZQoJYnVtcGluZyB0aGUgcG9pbnRlciB3ZSByZWFkIGZyb20uIEFsc28gcHJlcGVuZCB0aGVzZSBjb2RlcywKCWFzIHdlIGRvIGluIG90aGVyIHBsYWNlcy4KCjE5OTgtMTItMTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJtX2hwX3RlbXBsYXRlKTogTWFrZSB2YXJpYWJsZSAnYXJncycgYmUKCSdjb25zdCBjaGFyIConIGluIG9yZGVyIHRvIG1hdGNoIGl0cyB1c2FnZSB3aGVuIGNhbGxpbmcgc2libGluZ3MuCgkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogTWFrZSBmaXJzdCBhcmcgJ2NvbnN0IGNoYXIgKionIGluIG9yZGVyCgl0byBtYXRjaCB1c2FnZS4KCk1vbiBEZWMgMTQgMDk6NTU6NTAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2hvb3NlLXRlbXAuYzogRG9uJ3QgY2hlY2sgSU5fR0NDIGFueW1vcmUuCgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZSk6IFVzZSBgY29uc3QnLCBub3QgYENPTlNUJy4KCSogbWVtY2hyLmMgKG1lbWNocik6IExpa2V3aXNlLgoJKiBtZW1jcHkuYyAobWVtY3B5KTogTGlrZXdpc2UuCgkqIG1lbW1vdmUuYyAobWVtbW92ZSk6IExpa2V3aXNlLgoKCSogbWtzdGVtcC5jOiBEb24ndCBjaGVjayBJTl9HQ0MgYW55bW9yZS4KCSogcGV4ZWN1dGUuYzogTGlrZXdpc2UuCgkqIHNwbGF5LXRyZWUuYzogTGlrZXdpc2UuCgoJKiBzdHJjaHIuYyAoc3RyY2hyKTogVXNlIGBjb25zdCcsIG5vdCBgQ09OU1QnLgoJKiBzdHJyY2hyLmMgKHN0cnJjaHIpOiBMaWtld2lzZS4KCSogc3RydG9sLmMgKHN0cnRvbCk6IExpa2V3aXNlLgoJKiBzdHJ0b3VsLmMgKHN0cnRvdWwpOiBMaWtld2lzZS4KCkZyaSBEZWMgIDQgMTM6NTE6MDQgMTk5OCAgRGF2aWQgVGF5bG9yICAgPHRheWxvckB0ZXhhcy5jeWdudXMuY29tPgoJCQkgIEVsZW5hIFphbm5vbmkgIDxlemFubm9uaUBjeWdudXMuY29tPgoJCQkgIFN0YW4gU2hlYnMgICAgIDxzaGVic0BjeWdudXMuY29tPgoJCQkgIEVkaXRoIEVwc3RlaW4gIDxlZXBzdGVpbkBjeWdudXMuY29tPgoJCQkgIEFuZHJlcyBNYWNMZW9kIDxhbWFjbGVvZEBjeWdudXMuY29tPgoJCQkgIFNhdGlzaCBQYWkJIDxwYWlAYXBvbGxvLmhwLmNvbT4KCgkqIEhQIGFDQyBkZW1hbmdsaW5nIHN1cHBvcnQuCgkqIGNwbHVzLWRlbS5jCgkobWFpbik6IFJlbW92ZSBkZWZhdWx0IHRvIEhQIHN0eWxlIGRlbWFuZ2xpbmcsIHNldCB0byBFREcKIAlkZW1hbmdsaW5nIGNvcnJlY3RseSB3aGVuIC1lZGcgc3BlY2lmaWVkOyBzZXQgdGhlIGRlbWFuZ2xpbmcgc3R5bGUKIAl3aGVuIHVzZXIgc3BlY2lmaWVzICdlZGcnLiBTZXQgc3RyaXBfdW5kZXJzY29yZSB0bwogCXByZXBlbmRzX3VuZGVyc2NvcmUsIGlmIG5vdCBIUFVYSFBQQS4gIFNldAogCWN1cnJlbnRfZGVtYW5nbGluZ19zdHlsZSB0byBocF9kZW1hbmdsaW5nIGlmIEhQVVhIUFBBLiAgU2V0CiAJY3VycmVudCBkZW1hbmdsaW5nIHN0eWxlIGNvcnJlY3RseSBpZiB0aGUgc3dpdGNoIGlzIGhwLiAgUmVhZAogCWxhYmVsIGNvcnJlY3RseSBhbHNvIGluIHRoZSBIUCBzdHlsZSBjYXNlLgoJKHdvcmtfc3R1ZmYpOiBhZGQgdGVtcF9zdGFydCBmaWVsZDsgYWRkIGZpZWxkIGZvciB2b2xhdGlsZSBtZW1iZXIKIAlmdW5jdGlvbi4KCShhcm1fcHQpOiBoYW5kbGUgQVJNX0RFTUFOR0xJTkcgYW5kIEVER19ERU1BTkdMSU5HIHN0eWxlczsgSFAKIAlzdHlsZSBmb3IgdGhpcyBjYXNlIGlzIHRoZSBzYW1lIGFzIEFSTS4KCShkZW1hbmdsZV9hcmdzKTogaGFuZGxlIEVER19ERU1BTkdMSU5HIHN0eWxlOyBzdXBwb3J0IEhQIHN0eWxlLgoJKGRlbWFuZ2xlX2FybV9ocF90ZW1wbGF0ZSk6IG5ldyBmdW5jdGlvbi4gKEl0IHdhcwogCWRlbWFuZ2xlX2FybV9wdC4pOyBjaGVjayBhbmQgc2V0IHZhbHVlIG9mIHRlbXBfc3RhcnQgZmllbGQgaW4KIAltdWx0aXBsZSBwbGFjZXMuIEFsc28sIHdoZW4gY2VjaGluZyBmb3IgZW5kIG9mIHRlbXBsYXRlIGFyZ3MsCiAJY2hlY2sgdG8gc2VlIGlmIGF0IGVuZCBvZiBzdGF0aWMgbWVtYmVyIG9mIHRlbXBsYXRlIGNsYXNzLgoJKGRlbWFuZ2xlX2NsYXNzKTogbmV3IGxvY2FsIHZhcmlhYmxlIDogc2F2ZV9jbGFzc19uYW1lX2VuZCBEb24ndAogCWluY2x1ZGUgdGVtcGxhdGUgYXJncyBpbiBzdHJpbmcgZGVmaW5pbmcgY2xhc3MuCgkoZGVtYW5nbGVfY2xhc3NfbmFtZSk6IHVzZSBkZW1hbmdlbF9hcm1faHBfdGVtcGxhdGUuCgkoZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSk6IGhhbmRsZSBjYXNlIHdoZXJlIGRlbWFuZ2xpbmcgc3R5bGUgaXMKIAlIUF9ERU1BTkdMSU5HIGFuZCBjdXJyZW50bHkgcG9pbnQgYXQgYW4gJ1gnIGluIHRoZSBtYW5nbGVkIG5hbWUuCiAgCUhhbmRsZSBFREdfREVNQU5HTElORyBzdHlsZS4gIEhhbmRsZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvcgogCW9wcyBmb3IgSFAgc3R5bGUuCgkoZGVtYW5nbGVfcHJlZml4KTogaGFuZGxlIEVER19ERU1BTkdMSU5HIGFuZCBBUk1fREVNQU5HTElORwogCXN0eWxlcy4gIGdsb2JhbCBkZXN0cnVjdG9yIGFuZCBjb25zdHJ1Y3RvciBmb3IgSFAgc3R5bGUgYXJlIHNhbWUKIAlhcyBmb3IgQVJNIHN0eWxlLiBTYW1lIGZvciBsb2NhbCB2YXJpYWJsZXMuCgkoZGVtYW5nbGVfcXVhbGlmaWVkKTogaGFuZGxlIEVER19ERU1BTkdMSU5HIHN0eWxlLgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IGFkZCBjYXNlIGZvciB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24uICBGb3IKIAljYXNlcyAnMScgLSAnOScgOiBpbml0aWFsaXplIHRoZSB0ZW1wX3N0YXJ0IGZpZWxkIHRvIC0xIGFuZCBoYW5kbGUKIAl0aGUgRURHX0RFTUFOR0xJTkcgc3R5bGUuICBmb3IgY2FzZSAnRicgOiBoYW5kbGUgRURHX0RFTUFOR0xJTkcKIAlhbmQgQVVUT19ERU1BTkdMSU5HIHN0eWxlcy4gIElmIGV4cGVjdGluZyBhIGZ1bmN0aW9uIGFuZCBtYW5hZ2VkCiAJdG8gZGVtYW5nbGUgdGhlIGZ1bmN0IGFyZ3MsIHRoZW4gaGFuZGxlIHRoZSBMVUNJRF9ERU1BTkdMSU5HLAogCUFSTV9ERU1BTkdMSU5HLCBhbmQgRURHX0RFTUFOR0xJTkcgc3R5bGVzLiAgQWRkIGNhc2UgZm9yIGxvY2FsCiAJY2xhc3MgbmFtZSBhZnRlciAiTG5ubl8gaW4gSFAgc3R5bGUgY2FzZS4gSFAgc3R5bGUgdG9vIG5lZWRzIHRvCiAJZm9yZ2V0IHR5cGVzLiAgX25ubiBpcyBPSyBmb3IgSFAgc3R5bGUsIHNvIGRvbid0IHJlcG9ydCBmYWlsdXJlLgoJKGRvX2hwYWNjX3RlbXBsYXRlX2NvbnN0X3ZhbHVlKTogbmV3IGZ1bmN0aW9uLiBIYW5kbGUgdGVtcGxhdGUncwogCXZhbHVlIHBhcmFtIGZvciBIUC9hQ0MuCgkoZG9faHBhY2NfdGVtcGxhdGVfbGl0ZXJhbCk6IG5ldyBmdW5jdGlvbi4gIEhhbmRsZSBhIHRlbXBsYXRlJ3MKIAlsaXRlcmFsIHBhcmFtZXRlciBmb3IgSFAgYUNDLgoJKHJlY3Vyc2l2ZWx5X2RlbWFuZ2xlKTogbmV3IGZ1bmN0aW9uCgkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogbmV3IGZ1bmN0aW9uLgoJKHVzYWdlKTogYWRkICdlZGcnIHRvIHRoZSBsaXN0IG9mIGRlbWFuZ2xpbmcgc3R5bGVzOyBhZGQgaHAgc3dpdGNoCiAJdG8gbWVzc2FnZS4KClNhdCBOb3YgMjggMTc6MjU6MjIgMTk5OCAgQ2hyaXN0b3BoZXIgRmF5bG9yIDxjZ2ZAY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IFJlbW92ZSBvYnNvbGV0ZSBpZmRlZmVkIGN5Z3dpbiBjb2RlLgoKRnJpIE5vdiAyNyAxMzoyNjowNiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jOiBBbHdheXMgaW5jbHVkZSBsaWJpYmVydHkuaC4gIEF2b2lkIHJlZHVuZGFuY2llcy4KCSogY3BsdXMtZGVtLmM6IExpa2V3aXNlLiAgQ29uZm9ybSB0byBsaWJpYmVydHkuaC4KCSogcGV4ZWN1dGUuYzogTGlrZXdpc2UuCgkqIHNwbGF5LXRyZWUuYzogTGlrZXdpc2UuCgoxOTk4LTExLTI1ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc3BsYXktdHJlZS5vKTogQWRkIGNvbmZpZy5oIGRlcGVuZGVuY3kuCgpNb24gTm92IDIzIDE2OjU5OjQ5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqICBjb25maWd1cmUuaW46IFVzZSBBQ19QUkVSRVEoMi4xMi4xKS4KCjE5OTgtMTEtMTYgIEJlbmphbWluIEtvc25payAgPGJrb3pAaGFpZ2h0LmNvbnN0YW50LmNvbT4KCiAgICAgICAgKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogQWRkIGRlbWFuZ2xpbmcgZm9yIEM5eCB0eXBlcy4KClRodSBOb3YgMTkgMjI6MTU6NTAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbXB3LmMgKG1wd19hY2Nlc3MpOiBBZGQgbWlzc2luZyBwYXJlbnMuCgpUaHUgTm92IDE5IDEyOjU5OjIxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19IRUFERVJfU1lTX1dBSVQuCgoJKiBwZXhlY3V0ZS5jOiBJbmNsdWRlIHN5cy93YWl0Lmggd2hlbiAhSU5fR0NDLgoKVGh1IE5vdiAxOSAxNDozODoyMCAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYzogcmV2ZXJ0IGJhY2sgdG8gY2hlY2tpbmcgb2xkIEN5Z3dpbgoJcHJlcHJvY2Vzc29yIHN5bWJvbCB1bnRpbCBzb21lIHRpbWUgaGFzIHBhc3NlZC4KCldlZCBOb3YgMTggMDg6NTI6MjYgMTk5OCAgQ2hyaXN0b3BoZXIgRmF5bG9yIDxjZ2ZAY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IFJlb3JnYW5pemUgV0lOMzIgY2FzZSB0byBhY2NvbW9kYXRlIEN5Z3dpbgoJc2luY2UgaXQgd2lsbCBub3cgc3VwcG9ydCBzaW1pbGFyIGNvbnN0cnVjdHMuCgpGcmkgTm92IDEzIDE5OjE4OjA1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGNhbGxvYy4KCgkqIGNhbGxvYy5jOiBOZXcJZmlsZS4KCgkqIHhtYWxsb2MuYyAoeGNhbGxvYyk6IE5ldyBmdW5jdGlvbi4KCkZyaSBOb3YgMTMgMDg6NTE6NDYgRVNUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IFVzZSB0aGUgbGFzdCAiX18iCglpbiB0aGUgbWFuZ2xlZCBuYW1lIHdoZW4gbG9va2luZyBmb3IgdGhlIHNpZ25hdHVyZS4gVGhpcyBhbGxvd3MKCXRlbXBsYXRlIG5hbWVzIHRvIGJlZ2luIHdpdGggIl9fIi4KCjE5OTgtMTEtMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcGx1cy1kZW0uYyAodHlwZV9raW5kX3QpOiBBZGQgdGtfcmVmZXJlbmNlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBIYW5kbGUgaXQuCgkoZG9fdHlwZSk6IFVzZSBpdCBmb3IgcmVmZXJlbmNlcywgaW5zdGVhZCBvZiB0a19wb2ludGVyLgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBVc2UgY3BsdXNfZGVtYW5nbGUsCglub3QgaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUuCgpTYXQgTm92ICA3IDE2OjAyOjEwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNob29zZS10ZW1wLmM6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIG1rc3RlbXAuYzogTGlrZXdpc2UuCgkqIHBleGVjdXRlLmM6IExpa2V3aXNlLgoKTW9uIE5vdiAgMiAxNTowNTozMyAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZ3VyZS5pbjogZGV0ZWN0IGN5Z3dpbiogaW5zdGVhZCBvZiBjeWd3aW4zMioKICAgICAgICAqIGNvbmZpZ3VyZTogcmVnZW5lcmF0ZQoKTW9uIE5vdiAgMiAxMDoyMjowMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwZXhlY3V0ZS5jOiBDaGVjayBIQVZFX0NPTkZJR19ILCBub3QgSU5fR0NDLCB3aGVuIGRldGVybWluaW5nCiAJd2hldGhlciB0byBpbmNsdWRlIGNvbmZpZy5oLiAgUG9zc2libHkgaW5jbHVkZSB1bmlzdGQuaCBpbiB0aGUKIAkhSU5fR0NDIGNhc2UuICBEZWZpbmUgVkZPUktfU1RSSU5HIGFzIGEgcHJpbnRhYmxlIGZ1bmN0aW9uIGNhbGwKIAlmb3IgZXJyb3IgbWVzc2FnZXMgKGVpdGhlciAidmZvcmsiIG9yICJmb3JrIi4pICBJZiBIQVZFX1ZGT1JLX0ggaXMKIAlkZWZpbmVkLCBpbmNsdWRlIHZmb3JrLmguICBJZiBWTVMgaXMgZGVmaW5lZCwgZGVmaW5lIHZmb3JrKCkKIAlhcHByb3ByaWF0ZWx5LiAgUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCiAgCShwZXhlY3V0ZSk6IFNldCBgZXJybXNnX2ZtdCcgdG8gVkZPUktfU1RSSU5HIGluc3RlYWQgb2YgY2hlY2tpbmcKIAlsb2NhbGx5IHdoYXQgc3RyaW5nIHRvIHVzZS4KCjE5OTgtMTAtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzcGxheS10cmVlLmM6IFR3ZWFrIGluY2x1ZGUgZGlyZWN0aXZlcyB0byBtYWtlIHN1cmUgZGVjbGFyYXRpb25zIG9mCgl4bWFsbG9jIGFuZCBmcmVlIGFyZSBhdmFpbGFibGUuCgoxOTk4LTEwLTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogRml4IGhhbmRsaW5nIG9mIHZpcnR1YWwgdGFibGVzIGluCglhbm9ueW1vdXMgbmFtZXNwYWNlcy4KCjE5OTgtMTAtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcGx1cy1kZW0uYyAod29ya19zdHVmZik6IFJlcGxhY2UgY29uc3RfdHlwZSBhbmQgdm9sYXRpbGVfdHlwZQoJd2l0aCB0eXBlX3F1YWxzLgoJKFRZUEVfVU5RVUFMSUZJRUQpOiBOZXcgbWFjcm8uCgkoVFlQRV9RVUFMX0NPTlNUKTogTGlrZXdpc2UuCgkoVFlQRV9RVUFMX1ZPTEFUSUxFKTogTGlrZXdpc2UuCgkoVFlQRV9RVUFMX1JFU1RSSUNUKTogTGlrZXdpc2UuCgkoY29kZV9mb3JfcXVhbGlmaWVyKTogTmV3IGZ1bmN0aW9uLgoJKHF1YWxpZmllcl9zdHJpbmcpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9xdWFsaWZpZXIpOiBMaWtld2lzZS4KCShpbnRlcm5hbF9jcGx1c19kZW1hbmdsZSk6IFVzZSB0aGVtLgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBMaWtld2lzZS4KCShkb190eXBlKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfZnVuZF90eXBlKSk6IExpa2V3aXNlLgoKVGh1IE9jdCAyMiAxOTo1ODo0MyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzcGxheS10cmVlLmMgKHNwbGF5X3RyZWVfZm9yZWFjaF9oZWxwZXIpOiBNYWtlIGRlZmluaXRpb24gc3RhdGljCgl0byBtYXRjaCBwcm90b3R5cGUuCgoxOTk4LTEwLTIxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc3BsYXktdHJlZS5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBpdC4KCShSRVFVSVJFRF9PRklMRVMpOiBMaWtld2lzZS4KCShzcGxheS10cmVlLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoKVHVlIE9jdCAyMCAxMjoyOTowMiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcXVhbGlmaWVkKTogRml4IG9mZi1ieS1vbmUgd2hlbiBjaGVja2luZwoJcmFuZ2Ugb2YgJ0snIGluZGV4LgoKVGh1IE9jdCAxNSAxODo1MToxMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jOiBQcm90b3R5cGUgbWtzdGVtcHMoKSB3aGVuIElOX0dDQy4KCgkqIGNwbHVzLWRlbS5jIChjb25zdW1lX2NvdW50KTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0bwoJYHVuc2lnbmVkIGNoYXInLgoJKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0bwoJYHVuc2lnbmVkIGNoYXInLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBMaWtld2lzZS4KCShkZW1hbmdsZV90ZW1wbGF0ZSk6IEluaXRpYWxpemUgdmFyaWFibGUgYGJpbmRleCcuICBDYXN0IHRoZQoJcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgUmVtb3ZlCgl1bnVzZWQgdmFyaWFibGUgYHN0YXJ0X29mX3ZhbHVlX3Bhcm0nLgoJKGRlbWFuZ2xlX2NsYXNzX25hbWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRlbWFuZ2xlX3ByZWZpeCk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKGdudV9zcGVjaWFsKTogTGlrZXdpc2UuICBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRlbWFuZ2xlX3F1YWxpZmllZCk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKGdldF9jb3VudCk6IExpa2V3aXNlLgoJKGRvX3R5cGUpOiBMaWtld2lzZS4gIENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byBgdW5zaWduZWQgY2hhcicuCgkoZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBta3N0ZW1wLmMgKG1rc3RlbXBzKTogQ2FzdCB2YXJpYWJsZSBgbGVuJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgpUdWUgT2N0IDEzIDIzOjUxOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCiAgICAgICAgKiBta3N0ZW1wLmM6IENoZWNrIEhBVkVfU1lTX1RJTUVfSCBiZWZvcmUgaW5jbHVkaW5nIHN5cy90aW1lLmgKICAgICAgICAqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IENoZWNrIGZvciBzeXMvdGltZS5oIHRvby4KICAgICAgICAqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZ2V0b3B0LmM6IENoZWNrIEhBVkVfU1RSSU5HU19IIGJlZm9yZSBpbmNsdWRpbmcgc3RyaW5ncy5oLgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBDaGVjayBmb3Igc3RyaW5ncy5oIHRvby4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gT2N0IDEyIDE5OjE1OjU5IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgogICAgICAgICogY29uZmlndXJlLmluOiBpbiBjb21tZW50LCBjYWxsIEFDX0VYRUVYVCBpbnN0ZWFkIG9mIEFNX0VYRUVYVAoKU3VuIE9jdCAxMSAxNzozNjowNiAxOTk4ICBNaWNoYWVsIFRpZW1hbm4gIDx0aWVtYW5uQGhvbG9kZWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY3BsdXMtZGVtLm8sIG9ic3RhY2subyk6IERlcGVuZCB1cG9uIGNvbmZpZy5oLgoKVGh1IE9jdCAgOCAyMzo0MjowOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNZXJnZSBlZ2NzICYgZGV2byBsaWJpYmVydHkuCgoxOTk4LTA5LTA4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IERlbWFuZ2xlIGFub255bW91cyBuYW1lc3BhY2VzLgoKTW9uIFNlcCAgNyAyMzoyOTowMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBta3N0ZW1wLmM6IEluY2x1ZGUgY29uZmlnLmggZXZlbiB3aGVuIG5vdCBJTl9HQ0MuICBXcmFwIGhlYWRlcgogCWluY2x1c2lvbnMgaW5zaWRlIEhBVkVfKl9IIG1hY3Jvcy4gIEluY2x1ZGUgYW5zaWRlY2wuaCB3aGVuIG5vdAogCUlOX0dDQy4KCgkqIHZhc3ByaW50Zi5jOiBJbmNsdWRlIHN0ZGFyZy5oL3ZhcmFyZ3MuaCBmaXJzdC4KCgkqIHZwcmludGYuYzogTGlrZXdpc2UuCgpTYXQgU2VwICA1IDAzOjI0OjQ5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBleGVjdXRlLmM6IFVwZGF0ZXMgZnJvbSBnY2MuICBDb3B5IGluIGdjYyBoYXMgYmVlbiByZW1vdmVkLiAgVGhpcwoJaXMgdGhlIGNhbm9uaWNhbCBjb3B5LiAgRGVmaW5lIElTU1BBQ0UgaWYgIUlOX0dDQy4KCSogYWxsb2NhLmMsIHZmcHJpbnRmLmMsIGNob29zZS10ZW1wLmMsIG1rc3RlbXAuYywgZ2V0b3B0LmM6IFNpbWlsYXJseS4KCSogZ2V0b3B0MS5jLCBvYnN0YWNrLmM6IFNpbWlsYXJseS4KCSogTWFrZWZpbGUuaW46IEJ1aWxkIG1rc3RlbXAubwoKVHVlIFNlcCAgMSAyMzoxMjo0NyAxOTk4ICBDaHJpc3RvcGhlciBGYXlsb3IgPGNnZkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBJbmNsdWRlIGFzcHJpbnRmIGluIGxpc3Qgb2YgZnVuY3Rpb25zIGtub3duIG5vdAoJdG8gYmUgaW4gbmV3bGliLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpXZWQgQXVnIDE5IDE0OjA1OjAxIDE5OTggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY3BsdXMtZGVtLmMgKHdvcmtfc3R1ZmYpOiBBZGQgZGxsaW1wb3J0ZWQuCgkoZGVtYW5nbGVkX3ByZWZpeCk6IE1hcmsgc3ltYm9scyBpbXBvcnRlZCBmcm9tIFBFIERMTC4KCShpbnRlcm5hbF9jcGx1c19kZW1hbmdsZWQpOiBIYW5kbGUuCgoxOTk4LTA4LTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IEZpeCBzaW1wbGUgYXJyYXkgaGFuZGxpbmcuICBJZiB3ZSBmYWlsLAoJc3RheSBmYWlsZWQuCgpNb24gQXVnIDE3IDEwOjQwOjM0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwbHVzLWRlbS5jOiBJbmNsdWRlIGNvbmZpZy5oIGlmIGl0IGV4aXN0cy4gIEFsc28sIG9ubHkKCXByb3RvdHlwZSBtYWxsb2MvcmVhbGxvYyBpZiB3ZSBjYW4ndCBnZXQgc3RkbGliLmguCgpTYXQgQXVnIDE1IDE2OjE1OjAxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogU3dpdGNoIGJhY2sgdG8gY2hlY2tpbmcgLS13aXRoLXRhcmdldC1zdWJkaXIgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byBjaGVjayBmb3IgbmV3bGliLCB1bmRvaW5nIHBhcnQgb2YgSnVseSAxNQoJY2hhbmdlLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpUaHUgQXVnIDEzIDE2OjQ3OjM4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcGx1cy1kZW0uYyAodHlwZV9raW5kX3QpOiBOZXcgdHlwZS4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogQWRkIHR5cGVfa2luZF90IHBhcmFtZXRlci4gIFJlbHkKCW9uIHRoaXMgcGFyYW10ZXIsIHJhdGhlciB0aGFuIGRlbWFuZ2xpbmcgdGhlIHR5cGUgYWdhaW4uCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBQYXNzIHRrX2ludGVncmFsLgoJKGRlbWFuZ2xlX3RlbXBsYXRlXzogUGFzcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBkb190eXBlLgoJKGRvX3R5cGUpOiBSZXR1cm4gYSB0eXBlX2tpbmRfdC4gIFBhc3MgdGtfaW50ZWdyYWwgdG8KCWRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0gZm9yIGFycmF5IGJvdW5kcy4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBMaWtld2lzZS4KCglBbHNvIGluY29ycG9yYXRlIGZyb20gR0NDIHZlcnNpb246CgoJVHVlIEp1bCAyMSAxMzoyODoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IFVzZSBkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheXMuCgpUaHUgQXVnIDEzIDE2OjQ3OjM4IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9uZXN0ZWRfYXJncyk6IE1ha2UgZnVuY3Rpb24gZGVmaW5pdGlvbgoJc3RhdGljIHRvIG1hdGNoIHRoZSBwcm90b3R5cGUuCgpUdWUgSnVsIDI4IDExOjMzOjA5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcGx1cy1kZW0uYyAodHlwZV9raW5kX3QpOiBOZXcgdHlwZS4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogQWRkIHR5cGVfa2luZF90IHBhcmFtZXRlci4gIFJlbHkKCW9uIHRoaXMgcGFyYW10ZXIsIHJhdGhlciB0aGFuIGRlbWFuZ2xpbmcgdGhlIHR5cGUgYWdhaW4uCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBQYXNzIHRrX2ludGVncmFsLgoJKGRlbWFuZ2xlX3RlbXBsYXRlXzogUGFzcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBkb190eXBlLgoJKGRvX3R5cGUpOiBSZXR1cm4gYSB0eXBlX2tpbmRfdC4gIFBhc3MgdGtfaW50ZWdyYWwgdG8KCWRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0gZm9yIGFycmF5IGJvdW5kcy4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBMaWtld2lzZS4KCglBbHNvIGluY29ycG9yYXRlIGZyb20gR0NDIHZlcnNpb246CgoJVHVlIEp1bCAyMSAxMzoyODoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IFVzZSBkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheXMuCgpNb24gSnVsIDI3IDEyOjE2OjA4IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChBTExPQ0EpOiBOZXcgdmFyaWFibGUuCgkoJChUQVJHRVRMSUIpKTogQWRkICQoQUxMT0NBKSB0byBsaWJyYXJ5LgoJKG5lZWRlZC1saXN0KTogQWRkICQoQUxMT0NBKS4KCSgkKEFMTE9DQSkpOiBEZXBlbmQgdXBvbiBzdGFtcC1waWNkaXIuCgpTdW4gSnVsIDE5IDA4OjIzOjE3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9uZXN0ZWRfYXJncyk6IE1ha2UgZnVuY3Rpb24gZGVmaW5pdGlvbgoJc3RhdGljIHRvIG1hdGNoIHRoZSBwcm90b3R5cGUuCgpXZWQgSnVsIDE1IDAwOjEyOjU4IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgLS13aXRoLWNyb3NzLWhvc3QgcmF0aGVyIHRoYW4KCS0td2l0aC10YXJnZXQtc3ViZGlyIHdoZW4gZGVjaWRpbmcgd2hldGhlciBidWlsZCB1c2VzIGEgY3Jvc3MKCWNvbXBpbGVyLCBhbmQgd2hlbiBkZWNpZGluZyB3aGVyZSB0byBpbnN0YWxsIHRoZSBsaWJyYXJ5LgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpTdW4gSnVsIDEyIDAxOjI3OjA1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9uZXN0ZWRfYXJncyk6IFJldHVybiBhIHZhbHVlLgoKU2F0IEp1bCAxMSAxNjoxOTo0OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHN0cmluZyk6IE1vdmUgZGVmaW5pdGlvbiBiZWZvcmUgd29ya19zdHVmZi4KCSh3b3JrX3N0dWZmKTogQWRkIHZvbGF0aWxlX3R5cGUsIGZvcmdldHRpbmdfdHlwZXMsCglwcmV2aW91c19hcmd1bWVudCwgYW5kIG5yZXBlYXRzIGZpZWxkcy4KCShTQ09QRV9TVFJJTkcpOiBOZXcgbWFjcm8uCgkoZGVtYW5nbGVfdGVtcGxhdGUpOiBBZGQgYHJlbWVtYmVyJyBwYXJhbWV0ZXIuICBBZGQgY29tbWVudC4KCVJlZ2lzdGVyIHRoZSBgQicgY29kZSB0eXBlIGhlcmUsIGlmIHJlbWVtYmVyaW5nLiAgVGlkeS4gIEZpeCBjcmFzaAoJb24gTlVMTCB0bXBsX2FyZ3ZlYy4gIEJlIGNvbnNpc3RlbnQgd2l0aCB1c2Ugb2YgdG5hbWUvdHJhd25hbWUuCgkoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBOZXcgZnVuY3Rpb24uCgkoaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUpOiBIYW5kbGUgdm9sYXRpbGUtcXVhbGlmaWVkIG1lbWJlcgoJZnVuY3Rpb25zLgoJKG1vcF91cCk6IERlbGV0ZSB0aGUgcHJldmlvdXNfYXJndW1lbnQgc3RyaW5nIGlmIHByZXNlbnQuCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogVGlkeS4gIEhhbmRsZSB2b2xhdGlsZS1xdWFsaWZpZWQgbWVtYmVyCglmdW5jdGlvbnMuICBIYW5kbGUgYmFjay1yZWZlcmVuY2VzIHVzaW5nIHRoZSBgQicgY29kZS4gIFVzZSBleHRyYQoJcGFyYW1ldGVyIHRvIGRlbWFuZ2xlX3RlbXBsYXRlIGFuZCBTQ09QRV9TVFJJTkcgd2hlcmUgYXBwcm9wcmlhdGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEZpeCB0aGlua287ICdCJyBpcyBub3QgYW4gaW50ZWdyYWwKCWNvZGUuCgkoZGVtYW5nbGVfY2xhc3MpOiBVc2UgU0NPUEVfU1RSSU5HLgoJKGdudV9zcGVjaWFsKTogUGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIGRlbWFuZ2xlX3RlbXBsYXRlLgoJVXNlIFNDT1BFX1NUUklORy4KCShkZW1hbmdsZV9xdWFsaWZpZWQpOiBTYXZlIHF1YWxpZmllZCB0eXBlcyBmb3IgbGF0ZXIKCWJhY2stcmVmZXJlbmNlcy4gIEhhbmRsZSBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGZvciB0ZW1wbGF0ZQoJdHlwZXMgY29ycmVjdGx5LgoJKGRvX3R5cGUpOiBUaWR5LiAgVXNlIFNDT1BFX1NUUklORy4gIFBhc3MgZXh0cmEgYXJndW1lbnQgdG8KCWRlbWFuZ2xlX3RlbXBsYXRlLiAgVXNlIGRlbWFuZ2xlZF9uZXN0ZWRfYXJncy4gIERvbid0IHJlbWVtYmVyCglxdWFsaWZpZWQgdHlwZXMgaGVyZTsgdGhhdCdzIG5vdyBkb25lIGluIGRlbWFuZ2xlX3F1YWxpZmllZC4KCVNpbWlsYXJseSBmb3IgdGVtcGxhdGVzLgoJKGRvX2FyZyk6IEltcHJvdmUgY29tbW1lbnQuICBIYW5kbGUgJ24nIHJlcGVhdCBjb2RlLgoJKHJlbWVtYmVyX3R5cGUpOiBDaGVjayBmb3JnZXR0aW5nX3R5cGVzLgoJKGRlbWFuZ2xlX2FyZ3MpOiBEZWFsIHdpdGggJ24nIHJlcGVhdCBjb2Rlcy4gIFRpZHkuCgpUaHUgSnVsICAyIDE2OjI2OjI0IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogT25seSB1c2UgbWgtZmJzZDIxIG9uICotKi1mcmVlYnNkMi4yLlswMTJdLCBub3Qgb24KCSotKi1mcmVlYnNkMi4yLiouICBGcm9tIERtaXRyaWogVGVqYmx1bSA8dGVqYmx1bUBhcmMuaHEuY3RpLnJ1Pi4KCk1vbiBKdW4gMTUgMTY6Mjk6MDEgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChzZXRvYmpzKTogQ29ycmVjdCBxdW90aW5nIGVycm9yIGluIGN5Z3dpbjMyIGNhc2UuCglGcm9tIENocmlzIEZheWxvciA8Y2dmQGN5Z251cy5jb20+LgoKTW9uIEp1biAgMSAxMzo0Nzo1NSAxOTk4ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAYnVnc2hhY2suY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogVXBkYXRlIHRvIGxhdGVzdCBGU0YgdmVyc2lvbi4KCk1vbiBKdW4gIDEgMTQ6MTc6MzYgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCBhIGRlcGVuZGVuY3kgb24gc3RhbXAtcGljZGlyIGZvciB0aGUKCW9iamVjdHMsIHNvIHRoYXQgd2UgY2FuIGRvIGEgcGFyYWxsZWwgYnVpbGQuCgpTYXQgTWF5IDMwIDIyOjE3OjEzIDE5OTggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29uZmlndXJlLmluIChjaGVja2Z1bmNzKTogQWRkIG1pc3NpbmcgIiciLgoKRnJpIE1heSAyOSAxMjo0MDo0MSAxOTk4ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAYnVnc2hhY2suY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYyAoX29ic3RhY2tfbWVtb3J5X3VzZWQpOiAgRWxpZGUgdGhpcyBmdW5jdGlvbiBpZiB3ZSdyZQoJb24gYSBzeXN0ZW0gd2l0aCBHTlUgbGliYy4KClR1ZSBNYXkgMjYgMTg6Mjg6NDMgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcubG9nLgoKVHVlIE1heSAyNiAxNTowMTo1MiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgYWxsb2NhLWNvbmYuaC4KCkZyaSBNYXkgMjIgMDE6Mzg6MDcgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGNwbHVzLWRlbS5jIChNQlVGX1NJWkUpOiBCdW1wZWQgZnJvbSA1MTIgdG8gMzI3NjcuCgoxOTk4LTA1LTIxICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IEhhbmRsZSB2b2xhdGlsZSBxdWFsaWZpY2F0aW9uLgoKMTk5OC0wNS0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgdW5pc3RkLmggYXMgd2VsbC4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoJKiBjb25maWcuaW46IFJlYnVpbGQuCgkqIGdldHBhZ2VzaXplLmMgKEdOVV9PVVJfUEFHRVNJWkUpOiBVc2Ugc3lzY29uZiBvbmx5IGlmIF9TQ19QQUdFU0laRQoJaXMgZGVmaW5lZCBpbiB1bmlzdGQuaC4gUmVmb3JtYXQgY29uZGl0aW9uYWwgYmxvY2sgZm9yIGVhc2llciByZWFkaW5nLgoKCSogY29uZmlnLnRhYmxlIChzaGFyZWQpOiBEZWZhdWx0IHRvIG5vIGlmICR7ZW5hYmxlX3NoYXJlZH0KCWlzIHVuc2V0IG9yIGVtcHR5OyB0aGlzIGxvZ2ljIGlzIHVzZWQgYnkgdGhlIHRvcGxldmVsCgljb25maWd1cmUgc2NyaXB0cywgdG9vLgoKU2F0IE1heSAxNiAxNDowMToyNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6IEFkZCBsaW5lIHRvIHNldCBlbmFibGVfc2hhcmVkIGluIHRoZSBNYWtlZmlsZQoJYXMgbmVlZGVkLgoKV2VkIE1heSAxMyAxNDoyNDozOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoc3F1YW5nbGVfbW9wX3VwKTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIHZvaWQuCgkoaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgb3B0aW9ucycuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IFJlbW92ZSBmdW5jdGlvbiB3aWRlIHZhcmlhYmxlIGBpbnQgaScgYW5kCglyZXBsYWNlIHdpdGggYHNpemVfdCBpJyBhdCBlYWNoIGxvY2F0aW9uIHdoZXJlIGl0IGlzIHVzZWQuCgkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IGNoYW5nZSB0eXBlIG9mIGBpJyBmcm9tIGludCB0byBzaXplX3QuCgpXZWQgTWF5IDEzIDEzOjM5OjM4IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS1jb25mLmg6IEluY2x1ZGUgY29uZmlnLmguICBDaGVjayBIQVZFX0FMTE9DQV9IIHJhdGhlcgoJdGhhbiBzcGFyYyBvciBzdW4uCgkqIE1ha2VmaWxlLmluIChhcmd2Lm8pOiBEZXBlbmQgdXBvbiBjb25maWcuaCBhbmQgYWxsb2NhLWNvbmYuaC4KCkZyaSBNYXkgIDggMDA6MjM6NTEgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBTZXQgbGliaWJlcnR5X3RvcGRpciBjb3JyZWN0bHkgd2hlbiBzcmNkaXIgaXMKCSIuIiBhbmQgd2l0aF90YXJnZXRfc3ViZGlyIGlzIG5vdCBzZXQuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KClRodSBNYXkgIDcgMTM6MDE6NDQgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBBZGQgKi0qLW1pbmd3MzIqIGNhc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCldlZCBNYXkgIDYgMTE6MzM6NTEgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBOZXZlciB1c2UgYSBQSUMgZmlsZSBmb3IgKi0qLWN5Z3dpbjMyKi4KCgkqIE1ha2VmaWxlLmluIChjb25maWcuc3RhdHVzKTogRGVwZW5kIHVwb24gY29uZmlnLnRhYmxlLgoKCSogY29uZmlndXJlLmluOiBPbiBhIGN5Z3dpbjMyIGhvc3QsIGFsd2F5cyBjb21waWxlIHJhbmRvbSwgYW5kCglkb24ndCB0ZXN0IGZvciBzeXNfc2lnbGlzdCwgc3Ryc2lnbmFsLCBvciBwc2lnbmFsLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgoJKiBjbG9jay5jOiBDaGVjayBIQVZFX1NZU19QQVJBTV9IIHJhdGhlciB0aGFuIE5PX1NZU19QQVJBTV9ILgoJKiBnZXRjd2QuYzogTGlrZXdpc2UuCgkqIGdldHBhZ2VzaXplLmM6IExpa2V3aXNlLgoJKiBnZXRydW50aW1lLmM6IExpa2V3aXNlLgoKVHVlIE1heSAgNSAxODowODozMiAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJVXNlIGF1dG9jb25mIHRlc3RzIHJhdGhlciB0aGFuIHRoZSBvbGQgZHVtbXkuYyB0ZXN0OgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19BUkdfV0lUSCBjYWxscyBmb3IgLS13aXRoLXRhcmdldC1zdWJkaXIgYW5kCgktLXdpdGgtbmV3bGliLiAgQWRkIEFDX0NPTkZJR19IRUFERVIuICBVc2UgQUNfUkVQTEFDRV9GVU5DUyBmb3IKCW1vc3QgZnVuY3Rpb25zLiAgQWRkIHNwZWNpYWwgY2FzZXMgdG8gaGFuZGxlIG5ld2xpYiBhbmQgVnhXb3Jrcy4KCVJlbW92ZSB0YXJnZXRfbWFrZWZpbGVfZnJhZy4gIENyZWF0ZSBzdGFtcC1oIGluIEFDX09VVFBVVCBpZgoJQ09ORklHX0hFQURFUlMgaXMgc2V0LiAgT25seSBjYWxsIGNvbmZpZy1tbC5pbiBpbiBBQ19PVVRQVVQgaWYKCUNPTkZJR19GSUxFUyBpcyBzZXQ7IHNldCBhY19maWxlIGJlZm9yZSBjYWxsaW5nIGl0LgoJKiBjb25maWcudGFibGUgKGFybS0qLXJpc2NpeCosICotKi1jeWd3aW4zMik6IFJlbW92ZS4KCSgqLSotaHB1eCosICotKi1oaXV4KiwgKi0qLWlyaXg0KiwgKi0qLXNvbGFyaXMyKik6IFJlbW92ZS4KCSgqLSotc3lzdjQqLCAqLSotZ28zMiwgKi0qLXZ4d29ya3M1KiwgKi0qLXZ4d29ya3MpOiBSZW1vdmUKCShpWzM0NTZdLSotbWluZ3czMiopOiBSZW1vdmUuCgkqIE1ha2VmaWxlLmluIChFUlJPUlNfQ0MsIENPTkZJR19ILCBORUVERURfTElTVCk6IFJlbW92ZS4KCShMSUJPQkpTKTogTmV3IHZhcmlhYmxlLgoJKEhPU1RfT0ZJTEVTLCBET19BTFNPLCBTVEFHRVNUVUZGKTogUmVtb3ZlLgoJKGFsbCk6IERlcGVuZCB1cG9uIG5lZWRlZC1saXN0LiAgRG9uJ3QgY2hlY2sgUlVMRTEuCgkoQHRhcmdldF9tYWtlZmlsZV9mcmFnQCk6IFJlbW92ZS4KCShDT01QSUxFLmMpOiBJbmNsdWRlIEBERUZTQC4KCShIRklMRVMpOiBBZGQgYWxsb2NhLWNvbmYuaC4KCShSRVFVSVJFRF9PRklMRVMpOiBSZW1vdmUgYmFzZW5hbWUuby4KCSgkKFRBUkdFVExJQikpOiBOZXcgdGFyZ2V0LgoJKHN0YW1wLW5lZWRlZCwgbG5lZWRlZC1saXN0LCBuZWVkZWQuYXdrLCBzdGFtcC1jb25maWcpOiBSZW1vdmUuCgkobGNvbmZpZy5oLCBuZWVkZWQyLmF3aywgZHVtbXkubywgZXJyb3JzKTogUmVtb3ZlLgoJKG5lZWRlZC1saXN0LCBjb25maWcuaCk6IFJld3JpdGUuCgkoUlVMRTEsICQoUlVMRTEpLCBSVUxFMiwgJChSVUxFMikpOiBSZW1vdmUuCgkoLmFsd2F5cy4pOiBSZW1vdmUuCgkoTWFrZWZpbGUpOiBTZXQgQ09ORklHX0ZJTEVTIGFuZCBDT05GSUdfSEVBREVSUy4KCShzdGFtcC1oKTogTmV3IHRhcmdldC4KCShhdGV4aXQubywgY2xvY2subywgZ2V0Y3dkLm8sIGdldHBhZ2VzaXplLm8pOiBOZXcgdGFyZ2V0cy4KCShiYXNlbmFtZS5vKTogRG9uJ3QgZGVwZW5kIHVwb24gY29uZmlnLmguCgkoZ2V0cnVudGltZS5vKTogRGVwZW5kIHVwb24gY29uZmlnLmguCgkqIGF0ZXhpdC5jOiBJbmNsdWRlIGNvbmZpZy5oLiAgQ2hlY2sgSEFWRV9PTl9FWElUIHJhdGhlciB0aGFuCglORUVEX29uX2V4aXQuCgkqIGJhc2VuYW1lLmM6IERvbid0IGluY2x1ZGUgY29uZmlnLmguICBEb24ndCBjaGVjayBORUVEX2Jhc2VuYW1lLgoJKiBjbG9jay5jOiBJbmNsdWRlIGNvbmZpZy5oLgoJKiBnZXRjd2QuYzogTGlrZXdpc2UuCgkqIGdldHBhZ2VzaXplLmM6IExpa2V3aXNlLgoJKiBnZXRydW50aW1lLmM6IExpa2V3aXNlLiAgRml4IGNoZWNrcyB3aGljaCBzZXQgSEFWRV9HRVRSVVNBR0UgYW5kCglIQVZFX1RJTUVTLgoJKiBzdHJlcnJvci5jOiBDaGFuZ2UgdXNlcyBvZiBORUVEX3N5c19lcnJsaXN0IHRvCglIQVZFX1NZU19FUlJMSVNULiAgTGlrZXdpc2UgZm9yIE5FRURfc3RyZXJyb3IgYW5kIEhBVkVfU1RSRVJST1IuCgkqIHN0cnNpZ25hbC5jOiBMaWtld2lzZSBmb3IgTkVFRF9zeXNfc2lnbGlzdCBhbmQgSEFWRV9TWVNfU0lHTElTVCwKCWFuZCBmb3IgTkVFRF9zdHJzaWduYWwgYW5kIEhBVkVfU1RSU0lHTkFMIGFuZCBmb3IgTkVFRF9wc2lnbmFsIGFuZAoJSEFWRV9QU0lHTkFMLgoJKiBhY2NvbmZpZy5oOiBOZXcgZmlsZS4KCSogZHVtbXkuYzogUmVtb3ZlLgoJKiBmdW5jdGlvbnMuZGVmOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1jeHV4NyAoSERFRklORVMpOiBSZW1vdmUgLURIQVZFX1NZU0NPTkYuCgkqIGNvbmZpZy9taC13aW5kb3dzIChIREVGSU5FUyk6IFJlbW92ZS4KCSogY29uZmlnL21oLWN5Z3dpbjMyOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1nbzMyOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1pcml4NDogUmVtb3ZlLgoJKiBjb25maWcvbWgtcmlzY2l4OiBSZW1vdmUuCgkqIGNvbmZpZy9taC1zeXN2NDogUmVtb3ZlLgoJKiBjb25maWcvbXQtbWluZ3czMjogUmVtb3ZlLgoJKiBjb25maWcvbXQtdnh3b3JrczU6IFJlbW92ZS4KCSogY29uZmlnLmluOiBOZXcgZmlsZSwgZ2VuZXJhdGVkIHVzaW5nIGF1dG9oZWFkZXIuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCk1vbiBNYXkgIDQgMTM6MDA6MjggMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBSZXdyaXRlIHRvIHVzZSBhdXRvY29uZi4KCSogY29uZmlndXJlOiBHZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCSogY29uZmlnL21oLWE2OGJzZDogUmVtb3ZlLgoJKiBjb25maWcvbWgtYXBvbGxvNjg6IFJlbW92ZS4KCSogY29uZmlnL21oLWhwYnNkOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1uY3IzMDAwOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1zeXN2OiBSZW1vdmUuCgkqIGNvbmZpZy9taC1haXggKFJBTkxJQiwgSU5TVEFMTCk6IERvbid0IGRlZmluZS4KCSogY29uZmlnL21oLWN4dXg3IChSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9taC1pcml4NCAoQ0MsIFJBTkxJQiwgSU5TVEFMTCk6IERvbid0IGRlZmluZS4KCSogY29uZmlnL21oLXN5c3Y0IChSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy50YWJsZTogQ2hhbmdlIGNvbmZpZ19zaGVsbCB0byBDT05GSUdfU0hFTEwsIGFuZCB1c2UKCWxpYmliZXJ0eV90b3BkaXIgdG8gZmluZCBtb3ZlLWlmLWNoYW5nZS4KIAkobTY4ay1hcG9sbG8tYnNkKiwgbTY4ay1hcG9sbG8tc3lzdiopOiBSZW1vdmUuCgkoaVszNDU2XTg2LW5jci1zeXN2NCosICotKi1kZ3V4KiwgaHBwYSotaHAtYnNkKik6IFJlbW92ZS4KCSgqLSotaXJpeCosICotKi1tODhrYmNzKiwgKi0qLXN5c3YqKTogUmVtb3ZlLgoJKiBNYWtlZmlsZS5pbiAoc3JjZGlyKTogU2V0IHRvIEBzcmNkaXJALgoJKFZQQVRIKTogTGlrZXdpc2UuCgkocHJlZml4LCBleGVjX3ByZWZpeCwgYmluZGlyLCBsaWJkaXIpOiBTZXQgdG8gYXV0b2NvbmYgdmFyaWFibGVzLgoJKFNIRUxMLCBJTlNUQUxMLCBJTlNUQUxMX1BST0dSQU0sIElOU1RBTExfREFUQSk6IExpa2V3aXNlLgoJKENDLCBDRkxBR1MsIFJBTkxJQikpOiBMaWtld2lzZS4KCShkYXRhZGlyLCBtYW4qZGlyLCBpbmZvZGlyLCBpbmNsdWRlZGlyLCBNQUtFSU5GTyk6IFJlbW92ZS4KCSh0YXJnZXRfbWFrZWZpbGVfZnJhZywgaG9zdF9tYWtlZmlsZV9mcmFnKTogQWRkIHN1YnN0aXR1dGlvbnMuCgkoSU5TVEFMTF9ERVNUKTogU2V0IHRvIEBJTlNUQUxMX0RFU1RALgoJKE1ha2VmaWxlKTogRGVwZW5kIHVwb24gY29uZmlnLnN0YXR1cy4gIERvbid0IGRlcGVuZCB1cG9uCgkkKGhvc3RfbWFrZWZpbGVfZnJhZykgb3IgJCh0YXJnZXRfbWFrZWZpbGVfZnJhZykuCgkoY29uZmlnLnN0YXR1cyk6IE5ldyB0YXJnZXQuCgpTdW4gTWF5ICAzIDE3OjU4OjQ5IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tdC1zdW5vczQ6IFJlbW92ZS4gIFNob3VsZCBiZSBoYW5kbGVkIGJ5IC0td2l0aC1oZWFkZXJzCglhbmQgLS13aXRoLWxpYnJhcmllcyBvcHRpb25zIGF0IHRvcCBsZXZlbC4KCSogY29uZmlnLnRhYmxlOiBOZXZlciB1c2UgbXQtc3Vub3M0LgoKCSogYWxsb2NhLWNvbmYuaDogTmV3IGZpbGUsIGNvbWJpbmluZyBhbGxvY2Etbm9ybS5oIGFuZAoJYWxsb2NhLWJvdGNoLmguCgkqIGFsbG9jYS1ub3JtLmg6IFJlbW92ZS4KCSogYWxsb2NhLWJvdGNoLmg6IFJlbW92ZS4KCSogY29uZmlndXJlLmluOiBTZXQgc2hlbGwgdmFyaWFibGVzIGZpbGVzIGFuZCBsaW5rcyB0byBlbXB0eS4KCSogY29uZmlnLnRhYmxlOiBEb24ndCBzZXQgc2hlbGwgdmFyaWFibGUgZmlsZXMuCgkqIGNvbmZpZ3VyZS5iYXQ6IERvbid0IGNyZWF0ZSBhbGxvY2EtY29uZi5oLgoJKiBtYWtlZmlsZS52bXM6IExpa2V3aXNlLgoJKiBtcHctY29uZmlnLmluOiBMaWtld2lzZS4KCSogdm1zYnVpbGQuY29tOiBMaWtld2lzZS4KCkZyaSBNYXkgIDEgMTE6NDE6NDIgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKCQoSE9TVF9PRklMRVMpICQoUkVRVUlSRURfT0ZJTEVTKSk6IFJlbW92ZSBvbGQKCXRhcmdldCBkZXBlbmRpbmcgdXBvbiBjb25maWcuaC4KCShhbGxvY2Eubyk6IEFkZCB0YXJnZXQgZGVwZW5kaW5nIHVwb24gY29uZmlnLmgKCShiYXNlbmFtZS5vLCBjaG9vc2UtdGVtcC5vLCBmbm1hdGNoLm8pOiBMaWtld2lzZS4KCShnZXRvcHQubywgZ2V0b3B0MS5vLCBwZXhlY3V0ZS5vLCBzdHJlcnJvci5vKTogTGlrZXdpc2UuCgkoc3Ryc2lnbmFsLm8sIHhzdHJlcnJvci5vKTogTGlrZXdpc2UuCgpGcmkgTWF5ICAxIDA0OjI2OjI1IDE5OTggIFBldGVyIFNjaGF1ZXIgPHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlPgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6ICBJbml0aWFsaXplIHdvcmsuCgpNb24gQXByIDI3IDE1OjUzOjMwIEVEVCAxOTk4IEFuZHJldyBNYWNMZW9kIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3F1YWxpZmllZCk6IFJlcGxhY2UgbWlzc2luZyBlbHNlLgoKU3VuIEFwciAyNiAxNTozODo1MCAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6IEZpeCBvZmYtYnktb25lIGJ1ZyB3aGVuIGNoZWNraW5nIHRoZQoJbGVuZ3RoIGluIHRoZSBuYW1lIG9mIGEgdmlydHVhbCB0YWJsZS4KCldlZCBBcHIgMjIgMTA6NTM6NDkgRURUIDE5OTggQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKHN0cnVjdCB3b3JrIHN0dWZmKTogQWRkIGZpZWxkIGZvciBCIGFuZCBLIG1hbmdsZSBjb2Rlcy4KCShjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDYWxsIG1vcF91cF9zcXVhbmdsZS4KCShjcGx1c19kZW1hbmdsZSk6IEluaXRpYWxpemUgc3F1YW5nbGUgaW5mbywgdGhlbiBjYWxsCglpbnRlcm5hbF9jcGx1c19kZW1hbmdsZS4gKE1vc3QgY29kZSBtb3ZlZCB0aGVyZSBhcyB3ZWxsKQoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogTmV3IGZ1bmN0aW9uLCBwZXJmb3JtcyBtb3N0IG9mIHdoYXQgdXNlCgl0byBiZSBkb25lIGluIGNwbHVzX2RlbWFuZ2xlLCBidXQgaXMgb25seSBjYWxsZWQgd2l0aCB0aGlzIGZpbGUuCgkoc3F1YW5nbGVfbW9wX3VwKTogTmV3IGZ1bmN0aW9uIHRvIGNsZWFuIHVwIEIgYW5kIEsgY29kZSBkYXRhLgoJKG1vcF91cCk6IHNldCBwb2ludGVycyB0byBOVUxMIGFmdGVyIGZyZWVpbmcuCgkoZGVtYW5nbGVfc2lnbmF0dXJlLCBkZW1hbmdsZV90ZW1wbGF0ZSwgZGVtYW5nbGVfY2xhc3MpOiBBZGQKCXN3aXRjaCBlbGVtZW50cyB0byBoYW5kbGUgSyBhbmQgQiBjb2Rlcy4KCShkZW1hbmdsZV9wcmVmaXgsIGdudV9zcGVjaWFsLCBkZW1hbmdsZV9xdWFsaWZpZWQpOiBBZGQKCWNvZGUgdG8gaGFuZGxlIEsgYW5kIEIgY29kZXMuCgkoZG9fdHlwZSwgZGVtYW5nbGVfZnVuZF90eXBlKTogSGFuZGxlIEIgYW5kIEsgY29kZXMuCgkocmVtZW1iZXJfS3R5cGUpOiBOZXcgZnVuY3Rpb24gdG8gc3RvcmUgSyBpbmZvLgoJKHJlZ2lzdGVyX0J0eXBlLCByZW1lbWJlcl9CdHlwZSk6IE5ldyBmdW5jdGlvbnMgZm9yIEIgY29kZXMuCgkoZm9yZ2V0X0JfYW5kX0tfdHlwZXMpOiBOZXcgZnVuY3Rpb24gdG8gZGVzdHJveSBCIGFuZCBLIGluZm8uCgpGcmkgQXByIDEwIDAxOjQ5OjEwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIENPUFlJTkcuTElCLCBjaG9vc2UtdGVtcC5jLCBjcGx1cy1kZW0uYzogU3luYyB3aXRoIGVnY3MgJiBnY2MuCgpUaHUgTWFyICA1IDA5OjIzOjI4IDE5OTggIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZy50YWJsZTogTWFrZSBsb2NhdGluZyBmcmFnIGZpbGVzIGZhaWxzYWZlIGV2ZW4gZm9yIHRoZQoJc3BlY2lhbCBjYXNlIGlmIGNvbmZpZ3VyaW5nIGFuZCBidWlsZGluZyBpbiBzcmNkaXIuCgpNb24gRmViIDIzIDE0OjMzOjE1IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNob29zZS10ZW1wLmM6IEZpeCBoYW5kbGluZyBvZiBzeXMvZmlsZS5oIHRvIHdvcmsgaW4gbGliaWJlcnR5LgoKU3VuIEZlYiAyMiAxODowMzoyMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjaG9vc2UtdGVtcC5jOiBTeW5jIHdpdGggY29weSBpbiBnY2MuCgpUaHUgRmViIDEyIDE2OjI5OjQ5IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGdldG9wdC5jOiBVcGRhdGUgdG8gbGF0ZXN0IEZTRiB2ZXJzaW9uLgoJKiBnZXRvcHQxLmM6IExpa2V3aXNlLgoKVHVlIEZlYiAxMCAxNjo1ODozMyAxOTk4ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBEb24ndCBnZXQgY29uZnVzZWQgYnkgLjxkaWdpdHM+CglzdHJpbmdzIHRoYXQgYXJlIG5vdCBhY3R1YWxseSBsZW5ndGhzLgoKRnJpIEZlYiAgNiAwMTozNToxNyAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoRkxBR1NfVE9fUEFTUyk6IERvbid0IHBhc3MgUElDRkxBRy4KCSguYy5vKTogQ2hlY2sgdmFsdWUgb2YgZW5hYmxlX3NoYXJlZCwgbm90IFBJQ0ZMQUcuCgkoc3RhbXAtcGljZGlyKTogRGl0by4KClRodSBGZWIgIDUgMTg6NDg6NTYgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjb25maWcvbWgtY3lnd2luMzI6IHJlbW92ZSB2YXNwcmludGYubyBmcm9tIEVYVFJBX09GSUxFUwogICAgICAgIHNpbmNlIGl0IGdldHMgYnVpbHQgYXV0b21hdGljYWxseQoKU3VuIEZlYiAgMSAwMjo1MjozMiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBjb25maWcudGFibGUgKHZ4d29ya3MgY29uZmlncyk6IERlZmF1bHQgdG8gVnhXb3JrcyA1LngsIGFzIHRoYXQgaXMKCXRoZSBjdXJyZW50bHkgc2hpcHBpbmcgT1MuCgpUdWUgSmFuIDI3IDE2OjA4OjIwIDE5OTggIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgoKCSogdm1zYnVpbGQuY29tIFtSRVFVSVJFX09GSUxFU106IFN5bmNocm9uaXplZCB3aXRoIE1ha2VmaWxlLmluOgoJQWRkIGZubWF0Y2gubyBhbmQgb2JqYWxsb2MubzsgcmVtb3ZlIHZhc3ByaW50Zi5vLgoJW2NvbmZpZy5oXTogRGVmaW5lIE5FRURfc3Ryc2lnbmFsLgoKTW9uIEphbiAxOSAxMjoyMDowMSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbnMuZGVmOiBDb3JyZWN0IGFyZ3VtZW50IHR5cGVzIGZvciBzdHJlcnJvciBhbmQKCXN0cnNpZ25hbC4gIFJlcG9ydGVkIGJ5IEFsZXggR3V0bWFuIDxhZ3V0bWFuQGVtYy5jb20+LgoKU3VuIEphbiAxOCAxNTo1NzoyOCAxOTk4ICBNaWNoYWVsIFNueWRlciAgPG1zbnlkZXJAY2xlYXZlci5jeWdudXMuY29tPgoKCSogdmFzcHJpbnRmLmMgKGludF92YXNwcmludGYpOiBJbmNyZWFzZSBidWZmZXIgc2l6ZSBmb3IgZmxvYXQvZG91YmxlCgl2YWx1ZXMuCgpTYXQgSmFuIDE3IDIyOjI4OjM4IDE5OTggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoJCQkgIEouSi4gVmFuZGVySGVpamRlbiA8Si5KLnZhbmRlckhlaWpkZW5Ac3R1ZGVudC51dHdlbnRlLm5sPgoKCUFkZCBtaW5ndzMyIHN1cHBvcnQuCgkqIHBleGVjdXRlLmMgKHBleGVjdXRlKTogTmV3IGZ1bmN0aW9uIGZvciBtaW5ndzMyLiBTdXBwb3J0cyBwaXBlcy4KCShwd2FpdCk6IE5ldyBmdW5jdGlvbiBmb3IgbWluZ3czMi4KCgkqIGNvbmZpZy50YWJsZSAoaVszNDU2XTg2LSotbWluZ3czMiopOiBTdXBwb3J0IGZvciBpMzg2LW1pbmd3MzIuCgkqIGNvbmZpZy9tdC1taW5ndzMyOiBOZXcgZmlsZS4KCSogeG1hbGxvYy5jIChmaXJzdF9icmVhayk6IE5vdCB1c2VkIGZvciBtaW5ndzMyLgoJKHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSk6IERvbid0IHVzZSBzYnJrIG9uIG1pbmd3MzIuCgkoeG1hbGxvYyk6IExpa2V3aXNlLgoJKHhyZWFsbG9jKTogTGlrZXdpc2UuCgpTYXQgSmFuIDE3IDIyOjI4OjA1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNob29zZS10ZW1wLmM6IFN5bmMgd2l0aCBnY2MgdmVyc2lvbi4KClR1ZSBKYW4gMTMgMTg6MzQ6MzkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGxfdG9fbGliZGlyLCBpbnN0YWxsX3RvX3Rvb2xkaXIpOiBBZGQgTVVMVElTVUJESVIKCXRvIGFsbCBmaWxlbmFtZXMgaW4gbGliZGlyIGFuZCB0b29sZGlyLgoJKGRpc3RjbGVhbik6IERvIE1VTFRJQ0xFQU4gYmVmb3JlIGRlbGV0aW5nIE1ha2VmaWxlLgoJKHN0YW1wLW5lZWRlZCwgc3RhbXAtY29uZmlnKTogQWRkIE1VTFRJU1JDVE9QIHRvCglwYXRobmFtZSBmb3IgbW92ZS1pZi1jaGFuZ2UuCgpUaHUgRGVjICA0IDE3OjI1OjE5IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jIChzeXNfbnNpZyk6IFRyeSBOU0lHIGFuZCBfTlNJRy4KCldlZCBOb3YgMTkgMTM6Mzc6MDYgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBhbGxvY2Etbm9ybS5oIChhbGxvY2EsIEdDQyBjYXNlKTogRG9uJ3QgcmVkZWZpbmUgYWxsb2NhIGlmIGl0Cgl3YXMgYWxyZWFkeSBkZWZpbmVkIHByZXZpb3VzbHkuCgpNb24gTm92IDEwIDEyOjQ4OjAzIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogTWFrZWZpbGUuaW4gKElOU1RBTEwpOiBVc2UgLi4vaW5zdGFsbC1zaCwgbm90IGluc3RhbGwuCgpUdWUgT2N0IDI4IDIzOjQxOjE1IDE5OTcgIEp1ZHkgR29sZGJlcmcgIDxqb2R5Z0BpZHQubmV0PgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBwZXhlY3V0ZS5jLgoKV2VkIE9jdCAxNSAxOToxMzo0OCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBhc3ByaW50Zi5jOiBDb25zaXN0ZW50bHkgdXNlIGVpdGhlciBzdGRhcmcgb3IgdmFyYXJncy4KClR1ZSBPY3QgMTQgMTI6MDE6MDAgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IERvbid0IGxvb2sgZm9yIHJldHVybiB0eXBlcyBvbgoJY29uc3RydWN0b3JzLiAgSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZSBjb25zdHJ1Y3RvcnMuCgpGcmkgT2N0ICAzIDE3OjUzOjMwIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIFJFQURNRTogRml4IGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb25zLgoKTW9uIFNlcCAyOSAxMjoyODo0MSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jOiBVcGRhdGUgdG8gY3VycmVudCB2ZXJzaW9uIGZyb20gL2dkL2dudS9saWI6CgoJTW9uIFNlcCAyOSAxMjoyNzo1OSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgogICAgICAgICogcGV4ZWN1dGUuYzogVXNlIHNwYXduIGlmIF9fQ1lHV0lOMzJfXy4KCgkxOTk3LTA4LTA4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCiAgICAgICAgKiBwZXhlY3V0ZS5jOiBJbmNsdWRlICJjb25maWcuaCIgZmlyc3QsIGFzIHBlciBhdXRvY29uZiBtYW51YWwuCgoJRnJpIEp1biAyNyAxNToyMDoyOSAxOTk3ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KCiAgICAgICAgKiBwZXhlY3V0ZS5jIChmaXhfYXJndik6IE5ldyBmdW5jdGlvbi4KICAgICAgICAocGV4ZWN1dGUpOiBXaW4zMiBidXQgbm90IEN5Z3dpbjMyIG5lZWRzIGl0cyBhcmd1bWVudHMgZml4ZWQuCiAgICAgICAgQWRkIHVuZGVyc2NvcmUgdG8gY3dhaXQgZnVuY3Rpb24gY2FsbC4KClN1biBTZXAgMjggMTI6MDA6NTIgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKICAgICAgICAqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEFkZCBuZXcgcGFyYW1ldGVyLiAgSGFuZGxlIG5ldwogICAgICAgIHRlbXBsYXRlLWZ1bmN0aW9uIG1hbmdsaW5nLgogICAgICAgIChjb25zdW1lX2NvdW50X3dpdGhfdW5kZXJzY29yZXMpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IEhhbmRsZSBuZXcgbmFtZS1tYW5nbGluZyBzY2hlbWUuCgpXZWQgU2VwIDI0IDAwOjMxOjU5IDE5OTcgIEZlbGl4IExlZSAgPGZsZWVAeWluLmN5Z251cy5jb20+CgoJKiBhc3ByaW50Zi5jOiBzdGRhcmcuaCB3aGVuIEFMTU9TVF9TVERDCgkqIGNvbmZpZy9taC13aW5kb3dzIChFWFRSQV9PRklMRVMpOiBhZGQgYXNwcmludGYubyBhbmQKIAlzdHJuY2FzZWNtcC5vLgoKVGh1IEF1ZyAyOCAxNDoyNzoxNSAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiB2YXNwcmludGYuYyAodmFzcHJpbnRmKTogQWxsb3cgZm9yIF9CU0RfVkFfTElTVF8uCgoJKiBjb25maWcudGFibGU6IEFkZCBjYXNlIGZvciBGcmVlQlNEIDIuMSBhbmQgMi4yLCBuZWVkcyBtaC1mYnNkMjEuCgoJKiBjb25maWcvbWgtZmJzZDIxIChFWFRSQV9PRklMRVMpOiBGb3JjZSB2YXNwcmludGYubwoKV2VkIFNlcCAxMCAxMjo0MzoxMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogQ2hhbmdlICJjb21wbGV4IiB0byAiX19jb21wbGV4Ii4KCkZyaSBTZXAgIDUgMTY6MzQ6NDIgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogYXNwcmludGYuYyAoYXNwcmludGYpOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBhc3ByaW50Zi5jCgkqIGZ1bmN0aW9ucy5kZWY6IERpdHRvLgoKVGh1IEF1ZyAyOCAxODo1MzozNCAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiBhcmd2LmMgKGR1cGFyZ3YpOiBOZXcgZnVuY3Rpb24sIGR1cGxpY2F0ZSBhbiBhcmd1bWVudCB2ZWN0b3IuCgpUdWUgQXVnIDE5IDIwOjI4OjQ1IDE5OTcgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtY3lnd2luMzI6IGFsc28gYnVpbGQgcmFuZG9tLm8KClR1ZSBBdWcgMTkgMTc6MTA6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IEFkZCAnZXh0ZXJuJyB0byBwcmVwZW5kc191bmRlcnNjb3JlLgoKV2VkIEp1bCAzMCAxMTo0MjoxOSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBWYXJpb3VzIGNoYW5nZXMgdG8gcHJvZHVjZSBKYXZhIG91dHB1dCB3aGVuIHBhc3NlZAoJRE1HTF9KQVZBLiAgVGh1cyAiOjoiIGJlY29tZXMgIi4iIGFuZCAiSkFycmF5PEZvbz4iIGJlY29tZXMgIkZvb1tdIi4KCShtYWluKTogU3VwcG9ydCAtLWphdmEgYW5kIC1qIGZsYWdzIHRvIHNldCBETUdMX0pBVkEuCgpUdWUgSnVsIDIyIDE5OjA1OjIzIDE5OTcgIFJvYmVydCBIb2VobmUgPHJvYmVydC5ob2VobmVATWF0aGVtYXRpay5UVS1DaGVtbml0ei5ERT4KCgkqIGNvbmZpZy9taC1nbzMyIChDQywgQVIsIFJBTkxJQik6IERvbid0IGRlZmluZS4KClR1ZSBKdWwgMjIgMTc6NDk6NTQgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUyk6IEFkZCBwZXhlY3V0ZS5vLgoJKHBleGVjdXRlLm8pOiBOZXcgdGFyZ2V0LgoKCSogTWFrZWZpbGUuaW4gKHN0YW1wLW5lZWRlZCk6IE5ldyB0YXJnZXQsIHJlcGxhY2luZyBuZWVkZWQtbGlzdC4KCShuZWVkZWQtbGlzdCk6IEp1c3QgZGVwZW5kIHVwb24gc3RhbXAtbmVlZGVkLgoJKHN0YW1wLWNvbmZpZyk6IE5ldyB0YXJnZXQsIHJlcGxhY2luZyBjb25maWcuaC4KCShjb25maWcuaCk6IEp1c3QgZGVwZW5kIHVwb24gc3RhbXAtY29uZmlnLgoJKG1vc3RseWNsZWFuKTogUmVtb3ZlIHN0YW1wLSouCgpUaHUgSnVuIDEyIDExOjAwOjE4IDE5OTcgIEFuZ2VsYSBNYXJpZSBUaG9tYXMgKGFuZ2VsYUBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBwYXNzIElOU1RBTEwsIElOU1RBTExfUFJPR1JBTSBhbmQKCUlOU1RBTExfREFUQSBmb3IgbXVsdGlsaWJiZWQgaW5zdGFsbHMKClR1ZSBKdW4gIDMgMTM6MjE6MDUgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCglUdWUgRGVjIDEwIDA5OjQ0OjU3IDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogY2hvb3NlLXRlbXAuYyAoY2hvb3NlX3RlbXBfYmFzZSk6IERvbid0IGR1bXAgY29yZSBpZiBUTVBESVIgaXMgZW1wdHkuCgoJKiBjaG9vc2UtdGVtcC5jICh0cnkpOiBJbnNpc3QgdGhhdCB0ZW1wIGRpciBiZSBzZWFyY2hhYmxlLgoKCVdlZCBPY3QgMjMgMTc6MzY6MzkgMTk5NiAgRG91ZyBSdXBwICAocnVwcEBnbmF0LmNvbSkKCgkqIGNob29zZS10ZW1wLmMgKGNob29zZV90ZW1wX2Jhc2UpOiBPbiBWTVMsIHVzZSBwcm9wZXIgc3ludGF4Cglmb3IgY3VycmVudCBkaXJlY3RvcnkuCgoJU2F0IEZlYiAxNSAxOTowMzo0OCAxOTk3ICBHZW9mZnJleSBOb2VyICAobm9lckBjeWdudXMuY29tKQoKCSogcGV4ZWN1dGUuYzogUmVtb3ZlIHNwZWNpYWwgY2FzZXMgZm9yIGN5Z3dpbjMyLgoJKHB3YWl0KTogUmVtb3ZlIGxvY2FsIGRlZmluaXRpb24gb2YgYHBpZCcuCgoJVHVlIE5vdiAxMiAxODoyNjoxNSAxOTk2ICBEb3VnIFJ1cHAgIChydXBwQGduYXQuY29tKQoKCSogcGV4ZWN1dGUuYyAodmZvcmspOiBTdXBwbHkgbmV3IGRlZmluaXRpb24gZm9yIFZNUy4KCShwd2FpdCk6IFVzZSB3YWl0cGlkIGluc3RlYWQgb2Ygd2FpdCBmb3IgVk1TLgoKVHVlIE1heSAyMCAxNDowMjoyMCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IEhhbmRsZSBgSicuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogUHJpbnQgImNvbXBsZXgiIGZvciBpdC4KCldlZCBBcHIgMzAgMTI6MTU6NDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBEb24ndCB0dXJuIG9uIG11bHRpbGliIGhlcmUuCgpNb24gQXByIDI4IDE5OjA0OjMxIDE5OTcgIE1pY2hhZWwgU255ZGVyICA8bXNueWRlckBjbGVhdmVyLmN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmM6IG1vdmUgX29ic3RhY2tfbWVtb3J5X3VzZWQgb3V0c2lkZSBvZiBpZmRlZi4gIENhbm5vdCBiZQoJZWxpZGVkOyBuZWVkZWQgYnkgZ2RiIGFuZCBub3QgcHJlc2VudCBpbiBsaWJjLgoKVGh1IEFwciAyNCAxOTozMzo0NyAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBSZW1vdmUgdG1wbXVsdGkub3V0LgoKVHVlIEFwciAyMiAxMDoyNToxNSAxOTk3ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X2llZWVfZG91YmxlX2xpdHRsZWJ5dGVfYmlnd29yZCk6CglBZGQgbmV3IGZsb2F0Zm9ybWF0LCBtYWlubHkgZm9yIEFSTSBkb3VibGVzLgoKTW9uIEFwciAxNCAxMjoxMToxNiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IFVzZSAke2NvbmZpZ19zaGVsbH0gd2l0aCAke21vdmVpZmNoYW5nZX0uICBGcm9tCglUaG9tYXMgR3JhaWNoZW4gPGdyYWljaGVuQHJ6cGQuZGU+LgoKRnJpIEFwciAgNCAwMzowOToyNCAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIG11bHRpbGliaW5nIGJ5IGRlZmF1bHQuCglVcGRhdGUgbXVsdGlsaWIgdGVtcGxhdGUgdG8gcmVhZCBjb25maWctbWwuaW4uCgpUdWUgQXByICAxIDE2OjI2OjM5IDE5OTcgIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcHJvZ2lzLmRlPgoKCSogbWFrZWZpbGUudm1zOiBBZGQgb2JqYWxsb2MuCgpNb24gTWFyIDMxIDIzOjU3OjUxIDE5OTcgIEguSi4gTHUgIDxoamxAZ251LmFpLm1pdC5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfaXQpOiBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9uLgoJKHVzYWdlLCBmYXRhbCk6IExpa2V3aXNlLgoKCSogeGV4aXQuYyAoX3hleGl0X2NsZWFudXApOiBBZGQgcHJvdG90eXBlLgoKCSogc3RyZXJyb3IuYyAoaW5pdF9lcnJvcl90YWJsZXMpOiBEZWNsYXJlLgoKRnJpIE1hciAyOCAxMTo0MzoyMCAxOTk3ICBILkouIEx1ICA8aGpsQGx1Y29uLm9yZz4KCgkqIGZ1bmN0aW9ucy5kZWY6IEFkZCBERUYgb2YgdmFzcHJpbnRmLCBhbmQgREVGRlVOQyBvZiBzdHJzaWduYWwuCgkqIHN0cnNpZ25hbC5jOiBPbmx5IGRlZmluZSBzdHJzaWduYWwgaWYgTkVFRF9zdHJzaWduYWwuCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiBSZW1vdmUgdmFzcHJpbnRmLm8uCgkqIGNvbmZpZ3VyZS5pbjogQWRkIE5FRURfc3Ryc2lnbmFsIHRvIHhjb25maWcuaC4gIEFkZCB2YXNwcmludGYubwoJdG8geG5lZWRlZC1saXN0LgoJKiBjb25maWcvbWgtY3lnd2luMzIgKEhERUZJTkVTKTogQWRkIC1ETkVFRF9zdHJzaWduYWwuCgkoRVhUUkFfT0ZJTEVTKTogRGVmaW5lIHRvIHZhc3ByaW50Zi5vLgoJKiBjb25maWcvbWgtd2luZG93cyAoSERFRklORVMpOiBBZGQgLURORUVEX3N0cnNpZ25hbC4KCShFWFRSQV9PRklMRVMpOiBBZGQgdmFzcHJpbnRmLm8uCgkqIGNvbmZpZy9tdC12eHdvcmtzNSAodnhjb25maWcuaCk6IERlZmluZSBORUVEX3N0cnNpZ25hbC4KCSh2eG5lZWRlZC1saXN0KTogQWRkIHZhc3ByaW50Zi5vLgoKVGh1IE1hciAyMCAxNzowMjowOSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBvYmphbGxvYy5jOiBJbmNsdWRlIDxzdGRpby5oPi4KCk1vbiBNYXIgMTcgMTk6MjM6MTEgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogb2JqYWxsb2MuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgb2JqYWxsb2MuYwoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCBvYmphbGxvYy5vLgoJKG9iamFsbG9jLm8pOiBOZXcgdGFyZ2V0LgoKU2F0IE1hciAxNSAxODo0OTo0MSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmM6IFVwZGF0ZSB0byBjdXJyZW50IEZTRiB2ZXJzaW9uLgoKRnJpIE1hciAxNCAxNDoxODo0NyAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogQWRkIHByb3RvdHlwZXMgZm9yIGFsbCBzdGF0aWMgZnVuY3Rpb25zLgoJKG15c3Ryc3RyKTogTWFrZSBzdGF0aWMuICBNYWtlIGFyZ3VtZW50cyBhbmQgcmVzdWx0IGNvbnN0LgoJKGNwbHVzX21hdGNoKTogUmVtb3ZlOyBub3QgdXNlZC4KClR1ZSBNYXIgMTEgMTQ6MjA6MzEgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogQ2FsbCBkZW1hbmdsZWRfZnVuZF90eXBlIGZvciBvdGhlcgoJX190KiBzeW1ib2xzLgoKVHVlIE1hciAxMSAxNTo0MToyMSAxOTk3ICBILkouIEx1ICA8aGpsQGx1Y29uLm9yZz4KCgkqIHNwYWNlcy5jOiBEZWNsYXJlIG1hbGxvYyBhbmQgZnJlZSBwcm9wZXJseS4KCSogc3Ryc2lnbmFsLmMgKGluaXRfc2lnbmFsX3RhYmxlcyk6IEFkZCBwcm90b3R5cGUuCgkqIHhhdGV4aXQuYyAoX3hleGl0X2NsZWFudXApOiBBZGQgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KCldlZCBGZWIgMTkgMTU6NDM6MjQgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGxuZWVkZWQtbGlzdCk6IElmIGFsbG9jYS5vIGlzIG5lZWRlZCwgeGV4aXQubyBpcwoJYWxzbyByZXF1aXJlZCBiZWNhdXNlIG9mIHhtYWxsb2Muby4KCkZyaSBGZWIgMTQgMTM6NDM6MzggMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogc3Ryc2lnbmFsLmM6IFVuY29uZGl0aW9uYWxseSByZWRlZmluZSBzeXNfc2lnbGlzdCBhcm91bmQgdGhlCglpbmNsdXNpb24gb2YgdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgpUaHUgRmViIDEzIDIyOjAxOjA0IDE5OTcgIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcHJvZ2lzLmRlPgoKCSogbWFrZWZpbGUudm1zOiBSZW1vdmUgOCBiaXQgY2hhcmFjdGVycy4gIFVwZGF0ZSB0byBsYXRlc3QKCWdjYyByZWxlYXNlLgoKVHVlIEZlYiAgNCAxMTo1MjoxOSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBzdHJzaWduYWwuYzogVXNlIE5FRURfc3lzX3NpZ2xpc3QgaW5zdGVhZCBvZgoJTE9TSU5HX1NZU19TSUdMSVNULgoJKiBjb25maWcudGFibGU6IERvbid0IHVzZSBtaC1seW54b3MuCgkqIGNvbmZpZy9taC1seW54b3M6IFJlbW92ZS4KClRodSBKYW4gMTYgMTQ6NTE6MDMgMTk5NyAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogRml4IGluZGVudGluZzsgbWFrZSBpZGVudGljYWwgdG8gdGhlIGNvcHkKCWluIEdDQy4KCShkb190eXBlLCBjYXNlICdNJyk6IENoZWNrIGZvciBhIHRlbXBsYXRlIGFzIHdlbGwgYXMgYSBjbGFzcy4KClRodSBEZWMgMTkgMTM6NTE6MzMgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY29uZmlnL210LXZ4d29ya3M1ICh2eG5lZWRlZC1saXN0KTogUmVtb3ZlIHNpZ3NldG1hc2subywgc2luY2UKCXZ4d29ya3MgNS5bMC0zXSBhbGwgaGF2ZSBzaWdzZXRtYXNrIGluIHRoZW07IHRoZSBvbmUgcHJvdmlkZWQgYnkKCWxpYmliZXJ0eSBpcyBpbmNvcnJlY3QsIGFzIHdlbGwuCgpNb24gRGVjICAyIDE1OjAzOjQyIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jIChhbGxvY2EpOiBXaGVuIGNvbXBpbGVkIHdpdGggYW4gQU5TSS9JU08gY29tcGlsZXIsCglhbGxvY2EgdGFrZXMgYSBzaXplX3QgYXJndW1lbnQsIG5vdCBqdXN0IHVuc2lnbmVkLgoKTW9uIE5vdiAxOCAxNTo0MjowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogTm90ZSB0aGF0IHRoaXMgZmlsZSBhbHNvIGxpdmVzIGluIEdDQy4KCk1vbiBOb3YgMTggMTU6MTk6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogYWxsb2NhLmM6IFJlbW92ZSBpbmNsdWRlIG9mIGxpYmliZXJ0eS5oIGZvciBocHV4LgoJKiBhcmd2LmM6ICBSZXBsYWNlIGRlZnMgZnJvbSBsaWJpYmVydHkuaC4KCSogc3BhY2VzLmM6IFB1dCBiYWNrIGV4dGVybnMgZnJvbSByZW1vdmVkIGZyb20gbGliaWJlcnR5LmguCgkqIHZhc3ByaW50Zi5jOiBSZW1vdmUgaW5jbHVkZSBvZiBsaWJpYmVydHkuaCBmb3IgaHB1eC4KCk1vbiBOb3YgMTggMTQ6MDg6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IENoZWNraW5nIGluIGFnYWluOyBsYXN0IGNoZWNraW4gZmlsZWQgZHVlIHRvIHN0aWNreSB0YWcuCgpXZWQgTm92IDEzIDA4OjIyOjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBSZXZlcnQgbGFzdCB0d28gY29tbWl0cyBkdWUgdG8gY29uZmxpY3RzIHdpdGgKCWhwdXggc3lzdGVtIGhlYWRlcnMuCgpXZWQgTm92IDEzIDA4OjIyOjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jLCBhcmd2LmMsIHNwYWNlcy5jLCBzdHJjYXNlY21wLmMsIHZhc3ByaW50Zi5jLCB2cHJpbnRmLmM6CglSZXZlcnQgbGFzdCBjb21taXQgZHVlIHRvIGNvbmZsaWN0cyB3aXRoIGhwdXggc3lzdGVtIGhlYWRlcnMuCgpXZWQgTm92IDEzIDEwOjM2OjUwIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jICh4e20scmV9YWxsb2MpOiBNYWtlIGRlY2xhcmF0aW9ucyBjb21wYXRpYmlsZSB3aXRoCglsaWJpYmVydHkuaCB3aGVuIGNvbXBpbGVkIHdpdGggYSBzdGFuZGFyZCBjb21waWxlci4KClR1ZSBOb3YgMTIgMTY6MzE6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogYWxsb2NhLmM6IEluY2x1ZGUgbGliaWJlcnR5LmggZm9yIGRlZmluaXRpb24gb2YgeG1hbGxvYy4KCURvbid0IHJlZGVmaW5lIE5VTEwuCgkqIGFyZ3YuYzogTW92ZSBwcm90b3R5cGVzIHRvIGxpYmliZXJ0eS5oLgoJKiBjcGx1cy1kZW0uYzogSW5jbHVkZSBsaWJpYmVydHkuaCBmb3IgZGVmaW5pdGlvbiBvZiB4bWFsbG9jLgoJRG9uJ3QgcmVkZWZpbmUgTlVMTC4KCVVzZSBjYXN0cyB0byBlbGltaW5hdGUgY29tcGlsZXIgd2FybmluZ3MuCgkqIHNwYWNlcy5jOiBSZW1vdmUgcHJvdG90eXBlcyBmb3IgbWFsbG9jIGFuZCBmcmVlIHdoaWNoIGFyZQoJYWxyZWFkeSBpbiBsaWJpYnJ0eS5oLgoJKiBzdHJjYXNlY21wLmM6IFVzZSBjYXN0cyB0byBlbGltaW5hdGUgY29tcGlsZXIgd2FybmluZ3MuCgkqIHZhc3ByaW50Zi5jOiBJbmNsdWRlIGxpYmliZXJ0eS5oIGZvciBkZWZpbml0aW9uIG9mIG1hbGxvYy4KCURvbid0IHJlZGVmaW5lIE5VTEwuCgkqIHZwcmludGYuYzogSW5jbHVkZSBzdGRhcmcuaCBpZiBfX1NURENfXy4KCkZyaSBPY3QgMTEgMTU6NDI6MTIgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC13aW5kb3dzOiAgQWRkIHN0cmNhc2VjbXAubyB0byBFWFRSQV9PRklMRVMuCgpGcmkgT2N0IDExIDExOjE2OjMxIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy5jIChtcHdpZnlfZmlsZW5hbWUpOiBSZXdyaXRlIHRvIHNpbXBsaWZ5LCBhbmQgdG8gaGFuZGxlCgl1cHdhcmQgY29tcG9uZW50cyBjb3JyZWN0bHkuCgpUdWUgT2N0ICA4IDA4OjU1OjM0IDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGUsIGNvbmZpZy9taC13aW5kb3dzOiAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHVuZGVyCglNU1ZDICh0aGUgTWljcm9zb2Z0IGJ1aWxkIGVudmlyb25tZW50KS4KCk1vbiBPY3QgIDcgMTA6NTA6MjcgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZm5tYXRjaC5jOiBVbmRlZiBjb25zdCBpZiBub3QgX19TVERDX18uCgpUaHUgT2N0ICAzIDEzOjQ2OjM5IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGZubWF0Y2guYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgZm5tYXRjaC5jLgoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCBmbm1hdGNoLm8uCgkoZm5tYXRjaC5vKTogTmV3IHRhcmdldC4KCldlZCBTZXAgMTggMTQ6NDk6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogRml4IGhhbmRsaW5nIG9mIGFkZHJlc3MgYXJncy4KCShnbnVfc3BlY2lhbCk6IEhhbmRsZSB0eXBlX2luZm8gc3R1ZmYuCgpGcmkgU2VwIDEzIDE3OjUyOjU1IDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy5jIChEZWJ1Z1BJKTogTWFrZSBzZXR0YWJsZSBmcm9tIHRoZSBlbnYgdmFyIERFQlVHX1BBVEhOQU1FUy4KCShtcHdpZnlfZmlsZW5hbWUpOiBIYW5kbGUgIjo6LyIgY2FzZS4KClRodSBTZXAgMTIgMTM6MzA6NDAgMTk5NiAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taC1jeWd3aW4zMjogbmV3IGZpbGUgKG5lZWQgLURORUVEX2Jhc2VuYW1lIGFuZAoJCS1ETkVFRF9zeXNfc2lnbGlzdCBmb3IgbmF0aXZlIE5UIHJlYnVpbGRpbmcpCgkqIGNvbmZpZy50YWJsZSAoKi0qLWN5Z3dpbjMyKTogbmV3IGVudHJ5CgkqIGNob29zZS10ZW1wLmM6IGJyaW5nIGluIHN5bmMgd2l0aCBnY2MgKHJldmVydCBBdWcgMTcgY2hhbmdlKQoKVGh1IEF1ZyAyOSAxNjo0ODo0NSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGUgKGlbMzQ1XTg2LSotKik6IFJlY29nbml6ZSBpNjg2IGZvciBwZW50aXVtIHByby4KClR1ZSBBdWcgMjcgMTM6NDc6NTggMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYyAocGV4ZWN1dGUpIFtNUFddOiBSZW1vdmUgb2xkIGJvZ3VzIGNvZGUgdGhhdAoJbWVzc2VkIHdpdGggYXJndW1lbnRzIHRoYXQgaW5jbHVkZWQgYSAnLycsIGFkZCBlc2NhcGUgY2hhcnMKCXRvIGRvdWJsZSBxdW90ZXMsIHJlbW92ZSBjb25zdCBkZWNsIGZyb20gYXJnIHRoYXQgTWFjCgljb21waWxlcnMgZG9uJ3Qgc2VlbSB0byBsaWtlLgoKU2F0IEF1ZyAxNyAwNDo0NDoyNyAxOTk2ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYzogVXBkYXRlIHRlc3QgZm9yIHdpbjMyICgmJiAhIGN5Z3dpbjMyKS4KCSogY2hvb3NlLXRlbXAuYzogZml4IFdJTjMyIHByZXByb2Nlc3NvciBkZWZpbmVzCgpUaHUgQXVnIDE1IDEyOjI2OjQ4IDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLnNlZDogQWRkIEBEQVNIX0NfRkxBR0AgYW5kIEBTRUdNRU5UX0ZMQUcoe0RlZmF1bHR9KUAKCXRvIGVkaXRpbmcgb2YgZGVmYXVsdCBtYWtlZmlsZSBydWxlLgoKU3VuIEF1ZyAxMSAyMTowMzoyNyAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogYWxsb2NhLW5vcm0uaDogIEluY2x1ZGUgPG1hbGxvYy5oPiBpZiBfV0lOMzIuCgkqIGFyZ3YuYzogIEluY2x1ZGUgbm9uLXByb3RvdHlwZWQgZGVjbHMgZm9yIG1hbGxvYyBhbmQgc3RyaW5nCglmdW5jdGlvbnMgaWYgISBfV0lOMzIgb3IgaWYgX19HTlVDX18uCgpUaHUgQXVnICA4IDEyOjQyOjQwIDE5OTYgIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcHJvZ2lzLmRlPgoKCSogY29uZmlnLmgtdm1zOiBOZXcgZmlsZS4KCSogbWFrZWZpbGUudm1zOiBVc2UgaXQuCgpXZWQgQXVnICA3IDE3OjE2OjEyIDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuYyAoX2dldG9wdF9pbnRlcm5hbCk6ICBJZiBhcmdjIGlzIDAsIGp1c3QgcmV0dXJuIChiZWZvcmUKCXdlIHJlZmVyZW5jZSAqYXJndiBhbmQgc2VnZmF1bHQpLgoKTW9uIEF1ZyAgNSAwMToyOTowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogQWRkIG11bHRpbGliLm91dC4KClRodSBKdWwgMTggMTc6NDA6NTUgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYWxsb2NhLW5vcm0uaDogQ2hhbmdlICNpZmRlZiBzcGFyYyB0byAjaWYgZGVmaW5lZCAoc3BhcmMpICYmCglkZWZpbmVkIChzdW4pLiAgRnJvbSBBbmRyZXcgR2llcnRoIDxBTkRSRVdHQG1pY3JvbGlzZS5jby51az4uCgpNb24gSnVsICAxIDEzOjQwOjQ0IDE5OTYgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCVR1ZSBNYXkgMjggMTU6Mjk6MDMgMTk5NiAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CgoJKiB2bXNidWlsZC5jb20gKFJFUVVJUkRfT0ZJTEVTKTogQWRkIGNob29zZS10ZW1wLm8gYW5kIHhzdHJkdXAuby4KCglUaHUgSmFuIDI1IDE4OjIwOjA0IDE5OTYgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgoKCSogdm1zYnVpbGQuY29tOiBDaGFuZ2VzIHRvIGhhbmRsZSBERUZGVU5DKG9uX2V4aXQpLgoJKGRvX29maWxlcyk6IEFsbG93IG5vbmV4aXN0ZW50IHNvdXJjZSBmaWxlIGluIHBhc3MgMy4KCShjaGtfZGVmZnVuYyk6IE5ldyByb3V0aW5lLgoKVHVlIEp1biAyNSAxOToyNDo0MyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYyAoUEVYRUNVVEVfVkVSQk9TRSk6IERlZmluZS4KCShNUFcgcGV4ZWN1dGUpOiBDaGVjayBmbGFncyAmIFBFWEVDVVRFX1ZFUkJPU0UgaW5zdGVhZCBvZiB2ZXJib3NlX2ZsYWcuCgpUdWUgSnVuIDI1IDIzOjExOjQ4IDE5OTYgIEphc29uIE1vbGVuZGEgIChjcmFzaEBnb2R6aWxsYS5jeWdudXMuY28uanApCgoJKiBNYWtlZmlsZS5pbiAoZG9jZGlyKTogUmVtb3ZlZC4KClR1ZSBKdW4gMjUgMjM6MDE6MDcgMTk5NiAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGdvZHppbGxhLmN5Z251cy5jby5qcCkKCgkqIE1ha2VmaWxlLmluIChvbGRpbmNsdWRlZGlyKTogUmVtb3ZlZC4KClR1ZSBKdW4gMjUgMjI6NTA6MDcgMTk5NiAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGdvZHppbGxhLmN5Z251cy5jby5qcCkKCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoZGF0YWRpcik6IFNldCB0byAkKHByZWZpeCkvc2hhcmUuCgpUaHUgSnVuIDIwIDIxOjE3OjUyIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1fcHQpOiBSZWluZGVudC4gIEF2b2lkIGVuZGxlc3MgbG9vcCBieQoJY2hlY2tpbmcgZm9yIGVycm9ycyBmcm9tIGRvX3R5cGUuCgpUdWUgSnVuIDE4IDE0OjM2OjE5IDE5OTYgIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcHJvZ2lzLmRlPgoKCSogbWFrZWZpbGUudm1zOiBOZXcgZmlsZS4KCSogeG1hbGxvYy5jOiBJZiBWTVMsIGluY2x1ZGUgPHN0ZGxpYi5oPiBhbmQgPHVuaXhsaWIuaD4gcmF0aGVyCgl0aGFuIGRlY2xhcmluZyBtYWxsb2MsIHJlYWxsb2MsIGFuZCBzYnJrLgoKTW9uIEp1biAxMCAxMzoxNzoxNyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYzogTmV3IGZpbGUuCgpXZWQgSnVuICA1IDE2OjU3OjQ1IDE5OTYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgoKCSogeG1hbGxvYy5jOiBEZWNsYXJlIHNicmsuCgpTYXQgTWF5ICA0IDA1OjA4OjQ1IDE5OTYgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGFsbG9jYS1ub3JtLmg6ICBBZGQgU1BBUkN3b3JrcyBjYyBjb21wYXRpYmxlIF9fYnVpbHRpbl9hbGxvY2EKCWRlY2xhcmF0aW9uLgoKTW9uIEFwciAyMiAxODo0MTo0OSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiB4c3RyZXJyb3IuYzogSW5jbHVkZSA8c3RkaW8uaD4uCgpTdW4gQXByIDIxIDExOjU1OjEyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGF0ZXhpdC5jLgoKU3VuIEFwciAyMSAwOTo1MDowOSAxOTk2ICBTdGVwaGVuIEwgTW9zaGllciAgKG1vc2hpZXJAd29ybGQuc3RkLmNvbSkKCgkqIGNob29zZS10ZW1wLmM6IEluY2x1ZGUgc3lzL3R5cGVzLmggYmVmb3JlIHN5cy9maWxlLmggZm9yIHNjbzMuMnY1LgoKV2VkIEFwciAxNyAxMToxNzo1NSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2hvb3NlLXRlbXAuYzogRG9uJ3QgI2luY2x1ZGUgc3lzL2ZpbGUuaCBpZmRlZiBOT19TWVNfRklMRV9ILgoJI2luY2x1ZGUgPHN0ZGlvLmg+CgkqIGNvbmZpZy9tdC12eHdvcmtzNSAoSERFRklORVMpOiBEZWZpbmUgTk9fU1lTX0ZJTEVfSC4KClR1ZSBBcHIgMTYgMTE6Mjc6MTYgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKICAgICAgICAqIE1ha2VmaWxlLmluIChsbmVlZGVkLWxpc3QpOiBJZiBhbGxvY2EubyBpcyBuZWVkZWQsIHNvIGlzIHhtYWxsb2Muby4KCVJldmVydHMgRmViIDgsIDE5OTUgY2hhbmdlLgoKTW9uIEFwciAxNSAxMjo1MzoyNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2hvb3NlLXRlbXAuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgY2hvb3NlLXRlbXAuYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgY2hvb3NlLXRlbXAuby4KClNhdCBBcHIgMTMgMTQ6MTk6MzAgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6ICBEb24ndCBiaWFzIGV4cG9uZW50IHdoZW4KCWhhbmRsaW5nIHplcm8ncywgZGVub3JtcyBvciBOYU5zLgoKVGh1IEFwciAxMSAxMzozNjo1NiAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfdG9fZG91YmxlKTogIEZpeCBidWdzIHdpdGggaGFuZGxpbmcKCW51bWJlcnMgd2l0aCBmcmFjdGlvbnMgPCAzMiBiaXRzLgoKTW9uIEFwciAgOCAxNDo0ODozNCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IFBlcm1pdCAtLWVuYWJsZS1zaGFyZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YKCWRpcmVjdG9yaWVzLgoKVHVlIE1hciAxOSAyMjowMjowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggZm9yIG5vbi1tYW5nbGVkIHBvaW50ZXIKCWFyZ3VtZW50cy4KCkZyaSBNYXIgIDggMTc6MjQ6MTggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBJZiBzcmNkaXIgaXMgYC4nIGFuZCB3aXRoX3RhcmdldF9zdWJkaXIgaXMgbm90CglgLicsIHRoZW4gc2V0IE1VTFRJU1JDVE9QIGJlZm9yZSBjYWxsaW5nIGNvbmZpZy1tbC5pbi4KClRodSBNYXIgIDcgMTM6Mzc6MTAgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LmMgKG1wd19vcGVuKTogQWRkIGRlYnVnZ2luZyBvdXRwdXQgb3B0aW9uLgoKV2VkIE1hciAgNiAxNzozNjowMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggZm9yIGFkZHJlc3Mtb2YtZXh0ZXJuIGFyZ3VtZW50cy4KClR1ZSBGZWIgMjcgMTI6MDA6NTAgMTk5NiAgUmF5bW9uZCBKb3UgIDxyam91QG1leGljYW4uY3lnbnVzLmNvbT4KCgkqIG1wdy5jIChtcHdpZnlfZmlsZW5hbWUpOiBDaGFuZ2UgNiB0byA1IGluCglzdHJuY21wICh1bml4bmFtZSwgIi90bXAvIiwgNSkuCgpUdWUgRmViIDIwIDEwOjU1OjUzIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEluaXRpYWxpemUgaXNfYm9vbC4gIENvcnJlY3RseQoJaGFuZGxlIDAgYXMgYSBwb2ludGVyIHZhbHVlIHBhcmFtZXRlci4KCk1vbiBGZWIgIDUgMTY6NDE6NDQgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCB1cG9uIHJlcXVpcmVkLWxpc3QuCgkocmVxdWlyZWQtbGlzdCk6IE5ldyB0YXJnZXQuCgkoY2xlYW4pOiBSZW1vdmUgcmVxdWlyZWQtbGlzdC4KCldlZCBKYW4gMzEgMTA6MTk6NDEgMTk5NiAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIHdpbjMyLmM6IERlbGV0ZWQuCgkqIGNvbmZpZy50YWJsZSAoaTM4Ni0qLXdpbjMyKTogRGVsZXRlZC4KCSogY29uZmlnL21oLWkzODZ3aW4zMjogRGVsZXRlZC4KClRodSBKYW4gMTggMTE6MzQ6MTcgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IENoYW5nZSBvcG5hbWUgcGFyYW1ldGVyIHRvCgljb25zdCBjaGFyICouCgkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IENoYW5nZSByZXR1cm4gdHlwZSBhbmQgb3BuYW1lIHBhcmFtZXRlciB0bwoJY29uc3QgY2hhciAqLiAgRG9uJ3QgY2FzdCByZXR1cm4gdmFsdWUuCgpUdWUgSmFuIDE2IDEyOjEzOjExIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy5jOiBJbmNsdWRlIFRpbWVyLmgsIGluIG9yZGVyIHRvIGdldCBtNjhrIE1pY3Jvc2Vjb25kcyB0cmFwCglkZWZpbml0aW9uLgoKV2VkIEphbiAgMyAxMzoxNTowNCAxOTk2ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suYzogVXBkYXRlIGNvcHlyaWdodCB0byAxOTk2LgoJKF9vYnN0YWNrX21lbW9yeV91c2VkKTogRGVmaW5lIG5ldyBmdW5jdGlvbi4gIENhbGxlZCB2aWEKCW9ic3RhY2tfbWVtb3J5X3VzZWQgbWFjcm8uCgpUaHUgRGVjIDI4IDExOjM5OjQwIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHhzdHJkdXAuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgeHN0cmR1cC5jLgoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCB4c3RyZHVwLm8uCgkoeHN0cmR1cC5vKTogTmV3IHRhcmdldC4KCk1vbiBEZWMgMTEgMTg6MTg6NTIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogYXRleGl0LmM6IE5ldyBzdHViIHRvIHByb3ZpZGUgYXRleGl0IG9uIHN5c3RlbXMgdGhhdCBoYXZlCglvbl9leGl0LCBsaWtlIFN1bk9TIDQuMS54IHN5c3RlbXMuCgkqIGZ1bmN0aW9ucy5kZWYgKG9uX2V4aXQsIGF0ZXhpdCk6IERpdHRvLgoKTW9uIERlYyAxMSAxNTo0MjoxNCAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHcuYyAobXB3X2Fib3J0KTogUmVtb3ZlIGRlY2wuCgkobXB3X2FjY2Vzcyk6IE1vdmUgZGVidWdnaW5nIHByaW50Zi4KClNhdCBEZWMgIDIgMDE6MjU6MjMgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBDb25zaXN0ZW50bHkgdXNlICR7aG9zdH0gcmF0aGVyIHRoYW4gJHt4aG9zdH0gb3IKCSR7dGFyZ2V0fS4KCSogY29uZmlndXJlLmluOiBEb24ndCBib3RoZXIgdG8gc2V0ICR7eGhvc3R9IGJlZm9yZSBjYWxsaW5nCgljb25maWcudGFibGUuCgpUdWUgTm92IDI4IDE0OjE2OjU3IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICguYy5vKTogVXNlIHRlc3QgaW5zdGVhZCBvZiB0aGUgbGVmdCBicmFja2V0LCB0bwoJYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIHZlcnNpb25zIG9mIG1ha2UuCgpUdWUgTm92IDI4IDExOjQ1OjE3IDE5OTUgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLnNlZDogRml4IElOQ0RJUiBlZGl0IHRvIHdvcmsgd2l0aCBOb3YgMTQgY2hhbmdlLgoKVHVlIE5vdiAyMSAxMToyNjozNCAxOTk1ICBGcmVkIEZpc2ggIDxmbmZAcnRsLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtaHB1eDogUmVtb3ZlLiAgSXQgd2FzIG9ubHkgdXNlZCB0byBkZWZpbmUgRVhUUkFfT0ZJTEVTLAoJd2hpY2ggd2FzIHNldCB0byBqdXN0IGFsbG9jYS5vLCB3aGljaCBpcyBub3cgYXV0b21hdGljYWxseSBtYXJrZWQKCWFzIG5lZWRlZCBieSB0aGUgYXV0b2NvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KClR1ZSBOb3YgMjEgMTQ6MTU6MDYgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBDaGVjayAke3dpdGhfY3Jvc3NfaG9zdH0gcmF0aGVyIHRoYW4gY29tcGFyaW5nCgkke2hvc3R9IGFuZCAke3RhcmdldH0uCgpUaHUgTm92IDE2IDE0OjM0OjQyIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSWYgd2l0aF90YXJnZXRfc3ViZGlyIGlzIGVtcHR5LCBzZXQgeGhvc3QgdG8KCSR7aG9zdH0gcmF0aGVyIHRoYW4gJHt0YXJnZXR9IGJlZm9yZSBjYWxsaW5nIGNvbmZpZy50YWJsZS4KClR1ZSBOb3YgMTQgMDE6Mzg6MzAgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChNVUxUSVRPUCk6IERlbGV0ZWQuCgkoTVVMVElTUkNUT1AsIE1VTFRJQlVJTERUT1ApOiBOZXcuCgkoRkxBR1NfVE9fUEFTUyk6IERlbGV0ZSBJTkNESVIuCgkoSU5DRElSKTogQWRkICQoTVVMVElTUkNUT1ApLgoJKGluc3RhbGxfdG9fbGliZGlyKTogQWRkICQoTVVMVElTVUJESVIpLiAgQ2FsbCAkKE1VTFRJRE8pLgoJKiBjb25maWd1cmUuaW46IERlbGV0ZSBjYWxsIHRvIGNmZy1tbC1jb20uaW4uICBDYWxsIGNvbmZpZy1tbC5pbgoJaW5zdGVhZCBvZiBjZmctbWwtcG9zLmluLgoJKGNyb3NzLWNvbXBpbGUgY2hlY2spOiBDaGFuZ2UgdG8gdGVzdCBmb3Igd2l0aF90YXJnZXRfc3ViZGlyLgoJKEVYVFJBX0xJTktTKTogRGVsZXRlLgoKU3VuIE5vdiAxMiAxMjoxMzowNCAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEFkZCBnZXRwYWdlc2l6ZS5jLm8gdG8gbmVlZGVkLWxpc3QuCgkqIG1wdy5jIFtVU0VfTVdfSEVBREVSU106IENvbmRpdGlvbmFsaXplIGNvbXBpbGluZyBvZgoJZnVuY3Rpb25zIHRoYXQgYXJlIHN1cHBsaWVkIGJ5IE1ldHJvd2Vya3MgbGlicmFyaWVzLgoJKGZzdGF0KTogQ2xlYW4gdXAgZGVzY3JpcHRvci0+cG9pbnRlciBjb252ZXJzaW9uIGNvZGUuCgkoSW5zdGFsbENvbnNvbGUsIGV0Yyk6IEVtcHR5IGRlZmluaXRpb25zLCBmb3Igd2hlbiBsaW5raW5nCgl3aXRoIFNJT1VYLgoKU3VuIE5vdiAgNSAxOToyNToyNyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChGTEFHU19UT19QQVNTKTogIEFsc28gcGFzcyBQSUNGTEFHUy4KCSguYy5vKTogIFN0eWxpc3RpYyBjaGFuZ2UuCgpUaHUgTm92ICAyIDEyOjA2OjI5IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHN0cnRvbC5jLCBzdHJ0b3VsLmM6IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPi4gIEZyb20KCXBoZG1AaW5mby51Y2wuYWMuYmUgKFBoaWxpcHBlIERlIE11eXRlcikuCgpXZWQgTm92ICAxIDExOjU5OjM2IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ29ycmVjdCBzZWQgY2FsbC4KCk1vbiBPY3QgMzAgMTM6MDM6NDUgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46ICBDbGVhbiB1cCAvIHNpbXBsaWZ5IGZvciBuYXRpdmUuCgoJKiBjb25maWd1cmUuaW46ICBNZXJnZSBpbiBzdHVmZiBmcm9tIC4uL3hpYmVydHkvY29uZmlndXJlLmluLgoJKiBNYWtlZmlsZS5pbiAoQ0MpOiAgQWRkIGRlZmluaXRpb24gKHNvIGl0IGNhbiBiZSBvdmVycnJpZGRlbgoJYnkgLi4vY29uZmlndXJlKS4KClR1ZSBPY3QgMjQgMTc6NTc6MjcgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LW1ha2Uuc2VkOiBMZWF2ZSBzdHJlcnJvci5jLm8gaW4gc3RhbmRhcmQgbGlzdCBvZiBmdW5jdGlvbnMuCgkqIG1wdy5jIChSX09LLCBFTk9FTlQsIEVBQ0NFU1MsIEVOT1NZUyk6IFJlbW92ZS4KCShsaW5rKTogUmVtb3ZlIHVzZWxlc3MgZGVmaW5pdGlvbiB3aXRoIGVycm9yIHJldHVybi4KCShsYXN0X21pY3Jvc2Vjb25kcywgd2Fybl9pZl9zcGluX2RlbGF5LCByZWNvcmRfZm9yX3NwaW5fZGVsYXkpOgoJVXNlIFVuc2lnbmVkV2lkZSB0eXBlIGZvciBtaWNyb3NlY29uZCBjb3VudHMuCgpUaHUgT2N0IDE5IDEwOjUyOjA3IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB3b2dnbGVidWcudGlhYy5uZXQ+CgoJKiBtZW1jbXAuYyAobWVtY21wKTogQXJndW1lbnQgdHlwZXMgYXJlIGNvbnN0IHZvaWQgKiwgbm90IHZvaWQKCSpjb25zdC4KCgkqIHN0cm5jYXNlY21wLmMgKHN0cm5jYXNlY21wKTogSW5jbHVkZSBhbnNpZGVjbC5oL3N0ZGFyZy5oLCBub3QKCXN5cy90eXBlcy5oLgoJKiBzdHJjYXNlY21wLmMgKHN0cmNhc2VjbXApOiBEaXR0by4KClR1ZSBPY3QgMTAgMTE6MDM6MjQgMTk5NSAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQklTT04pOiAgUmVtb3ZlIG1hY3JvLgoKVHVlIFNlcCAyNiAxNTowNjo0NiAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSEZJTEVTKTogQWRkIGRlZmF1bHQgZW1wdHkgZGVmaW5pdGlvbi4KCSogbXB3LWNvbmZpZy5pbiAoY29uZmlnLmgpOiBPbmx5IHVwZGF0ZSBpZiBjaGFuZ2VkLgoJKiBtcHctbWFrZS5pbjogUmVtb3ZlLgoJKiBtcHctbWFrZS5zZWQ6IE5ldyBmaWxlLCBlZGl0cyBNYWtlZmlsZS5pbiBpbnRvIE1QVyBtYWtlZmlsZS4KCSogbXB3LmM6IFJlbW92ZSBzZW1pLWNsb25lIG9mIHN0cmVycm9yIGNvZGUuCgkoc3lzX25lcnIsIHN5c19lcnJsaXN0KTogRGVmaW5lIGhlcmUuCgkoTWljcm9zZWNvbmRzKTogT25seSBkZWZpbmUgYXMgQS1saW5lIHRyYXAgaWYgbTY4ayBNYWMuCgpXZWQgU2VwIDIwIDEyOjUzOjMyIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChtYWludGFpbmVyLWNsZWFuKTogTmV3IHN5bm9ueW0gZm9yIGRpc3RjbGVhbi4KCk1vbiBBdWcgMjggMTk6NDc6NTIgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6ICBGb3IgaG9zdCwgZ2VuZXJhbGl6ZSByczYwMDAtaWJtLWFpeCoKCXRvICotaWJtLWFpeCogc28gd2UgYWxzbyBpbmNsdWRlIHBvd2VycGMuCgpUdWUgQXVnIDIyIDAzOjE4OjA1IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBrci1sYXB0b3AuY3lnbnVzLmNvbT4KCglGcmkgSnVuIDE2IDE4OjM1OjQwIDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQoKCSogeHN0cmVycm9yLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiwgdm1zYnVpbGQuY29tOiBDb21waWxlIGl0LgoKTW9uIEp1bCAzMSAxMjoxNjozMiAxOTk1ICBzdGV2ZSBjaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlIChpMzg2LSotd2luMzIpOiBOZXcuCgpGcmkgSnVsIDIxIDExOjM1OjUyIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTVVMVElUT1ApOiBOZXcgdmFyaWFibGUuCgkoTVVMVElESVJTLCBNVUxUSVNVQkRJUiwgTVVMVElETywgTVVMVElDTEVBTik6IExpa2V3aXNlLgoJKGFsbCk6IEFkZCBtdWx0aWxpYiBzdXBwb3J0LgoJKGluc3RhbGxfdG9fdG9vbGRpciwgKmNsZWFuKTogTGlrZXdpc2UuCgpNb24gSnVsIDEwIDExOjQ3OjI3IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCSogbWFrZWZpbGUuZG9zIChPQkpTKTogQWRkIGhleC5vLiAgRnJvbSBESiBEZWxvcmllLgoKRnJpIEp1biAzMCAxNzoyODo1OSAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKCgkqIHZtc2J1aWxkLmNvbTogIGNyZWF0ZSAibmV3LWxpYi5vbGIiLCBidWlsZCBsaWJpYmVydHkgdW5kZXIgdGhhdAoJbmFtZSwgYW5kIHRoZW4gbWFrZSBpdCBiZWNvbWUgImxpYmVydHkub2xiIiB3aGVuIGRvbmUsIHNvIHRoYXQgYW4KCWluY29tcGxldGUgYnVpbGQgYXR0ZW1wdCBuZXZlciBsZWF2ZXMgYmVoaW5kIHNvbWV0aGluZyB3aGljaCBsb29rcwoJbGlrZSBhIGNvbXBsZXRlIGxpYnJhcnkuCgpUaHUgSnVuIDI5IDAwOjIyOjAyIDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtaTM4NnBlOiBOZXcgZmlsZSBmb3IgUEUgaG9zdHMuCgkqIGNvbmZpZy50YWJsZTogVW5kZXJzdGFuZCBQRSBob3N0cy4KCldlZCBKdW4gMjggMTk6MTM6MjMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogVXBkYXRlIGZyb20gZ2NjLgoKCSogYXJndi5jLCBkdW1teS5jOiBJZiBfX1NURENfXywgI2luY2x1ZGUgImFsbG9jYS1jb25mLmgiIGFmdGVyCiAgICAgICAgPHN0ZGRlZi5oPi4KCSogYWxsb2NhLW5vcm0uaDogSWYgX19TVERDX18sIGRlY2xhcmUgYWxsb2NhIHdpdGggaXRzIHBhcmFtZXRlci4KClRodSBKdW4gMjIgMTg6NTc6NDcgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LW1ha2UuaW4gKEFMTF9DRkxBR1MpOiBEZWZpbmUgTkVFRF9iYXNlbmFtZS4KCSogbXB3LmM6IE9ubHkgdGVzdCBEZWJ1Z1BJIG9uY2Ugd2hlbmV2ZXIgcHJpbnRpbmcgZGVidWcgaW5mby4KCShtcHdpZnlfZmlsZW5hbWUpOiBJZiBmaWxlbmFtZSBpcyAvdG1wL2ZvbywgY2hhbmdlIGl0IGludG8gOl9mb28sCglhbHNvIGZpeCB0byBub3Qgd3JpdGUgb24gaW5wdXQgZmlsZW5hbWUgYnVmZmVyLgoJKG1wd19hY2Nlc3MpOiBVc2Ugc3RhdCgpIGluc3RlYWQgb2Ygb3BlbigpLCB3b3JrcyBmb3IgZGlyZWN0b3JpZXMKCWFzIHdlbGwgYXMgZmlsZXMuCgpNb24gSnVuIDE5IDAwOjMzOjIyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IE1hc3NhZ2UgYnJva2VuIHNoZWxscyB0aGF0IHJlcXVpcmUgJ2Vsc2UgdHJ1ZScuCgpTYXQgSnVuIDE3IDIzOjIxOjU4IDE5OTUgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogYWxsb2NhLW5vcm0uaDogRGVjbGFyZSBhbGxvY2EgYXMgdHlwZSAiUFRSIiB0byBtYXRjaCBmdW5jdGlvbnMuZGVmLgoJRGVjbGFyZSBfX2J1aWx0aW5fYWxsb2NhIGluIHRoZSBzcGFyYyBjYXNlLCBhcyBhcmd2LmMgZGlkLgoJKiBhcmd2LmM6IFJlcGxhY2UgaW5saW5lIHZlcnNpb24gb2YgYWxsb2NhLW5vcm0uaCBhdCBzdGFydCBvZiBmaWxlIHdpdGgKCWEgI2luY2x1ZGUgb2YgYWxsb2NhLWNvbmYuaC4gIFByZWNlZGUgaXQgd2l0aCBhbiBpbmNsdWRlIG9mIGFuc2lkZWNsLmgKCWJlY2F1c2UgYWxsb2NhLW5vcm0uaCBuZWVkcyB0byBkZWNsYXJlIGFsbG9jYSBhcyAiUFRSIi4KCk1vbiBKdW4gMTIgMTQ6MjQ6MjYgMTk5NSAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIHdpbjMyLmM6IE5ldyBmaWxlLgoKRnJpIEp1biAgOSAxNToxNjoxNCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGR1bW15LmM6ICNpbmNsdWRlICJhbGxvY2EtY29uZi5oIi4KCldlZCBKdW4gIDcgMTE6NDY6MjMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobW9zdGx5Y2xlYW4pOiBSZW1vdmUgc3RhbXAtcGljZGlyLgoJKGNsZWFuKTogRG9uJ3QuCgpNb24gSnVuICA1IDE4OjQ2OjA2IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlIChmcmFncyk6IFVzZSB0b3BsZXZlbCBwaWMgZnJhZ3MuCgoJKiBNYWtlZmlsZS5pbiAoUElDRkxBRyk6IE5ldyBtYWNyby4KCShhbGwpOiBEZXBlbmQgb24gc3RhbXAtcGljZGlyLgoJKG5lZWRlZC1saXN0KTogRGl0dG8uCgkoLmMubyk6IEFsc28gYnVpbGQgcGljIG9iamVjdC4KCShzdGFtcC1waWNkaXIpOiBOZXcgcnVsZS4KCShtb3N0bHljbGVhbik6IFJlbW92ZSBwaWMuCgkoY2xlYW4pOiBSZW1vdmUgc3RhbXAtcGljZGlyLgoKRnJpIE1hciAyNCAxNjo1NTo0OCAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKCgkqIHZtc2J1aWxkLmNvbSAoY29uZmlnLmgpOiBBZGQgYCNkZWZpbmUgTkVFRF9iYXNlbmFtZScuCgpUdWUgTWF5IDIzIDEwOjEyOjQ2IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogY2xvY2suYywgZ2V0b3B0LmMsIHN0cnRvZC5jLCB2c3ByaW50Zi5jOiAgQ2hhbmdlIGZyb20gdXNpbmcgTEdQTAoJdG8gbGliaW8tc3R5bGUgY29weXJpZ2h0LgoJKiBnZXRwYWdlc2l6ZS5jOiAgUmVtb3ZlIEZTRiBjb3B5cmlnaHQuCgpTYXQgTWF5IDIwIDEyOjMwOjIzIDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBrci1sYXB0b3AuY3lnbnVzLmNvbT4KCglBZGRlZCBpbXByb3ZlZCBWTVMgc3VwcG9ydCBmcm9tIFBhdCBSYW5raW46CgoJRnJpIE1hciAxNyAxODo0MDozNiAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKCgkqIHZtc2J1aWxkLmNvbTogIG5ldyBmaWxlLgoKCSogZ2V0cGFnZXNpemUuYyAoZ2V0cGFnZXNpemUpOiAgaW1wbGVtZW50IGZvciBWTVM7CgkqIHN0cmVycm9yLmMgKHN0cmVycm9yLCBzdHJlcnJubywgc3RydG9lcnJubyk6ICBhZGQgcnVkaW1lbnRhcnkKCXN1cHBvcnQgZm9yIEVWTVNFUlIuCgpUaHUgTWF5IDE4IDE3OjAxOjQyIDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBrci1sYXB0b3AuY3lnbnVzLmNvbT4KCglXZWQgTWF5IDEwIDE0OjI4OjE2IDE5OTUgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfYXJtX2V4dCk6IERlZmluZS4KClR1ZSBNYXkgMTYgMTM6MzA6NTkgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBiYXNlbmFtZS5jLCBiY21wLmMsIGdldGN3ZC5jLCBpbnNxdWUuYywgcmVuYW1lLmMsIHNpZ3NldG1hc2suYywKCXN0cmVycm9yLmMsIHN0cnNpZ25hbC5jOiAgUmVtb3ZlIEZTRiBjb3B5cmlnaHQuCgkqIHNpZ3NldG1hc2suYzogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAtIHNlZW1zIHRvIGJlIG5lZWRlZCBieSBJU0MuCgpNb24gTWF5IDE1IDE5OjUzOjE3IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogYmNvcHkuYywgYnplcm8uYywgbWVtY21wLmMsIG1lbWNweS5jLCBtZW1zZXQuYywgc3RyY2hyLmMsCglzdHJyY2hyLmMsIHN0cnN0ci5jLCB2Zm9yay5jOiAgUmVtb3ZlIEZTRiBDb3B5cmlnaHQsIGJlY2F1c2UgdGhpcwoJbWlnaHQgY29udGFtaW5hdGUgbGlic3RkYysrIHdpdGggdGhlIExHUEwuICAoT0snZCBieSBSTVMgMTEgT2N0IDk0LikKCSogc3RyY2hyLmMsIHN0cnJjaHIuYzogIEFkZCBjYXN0IHRvIHN1cHByZXNzIGNvbnN0IHdhcm5pbmcuCgpUaHUgTWF5ICA0IDE0OjM2OjQyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IFVzZSBjb25zdCBpbnN0ZWFkIG9mIENPTlNULiAgRG9uJ3QgaW5jbHVkZQogICAgICAgIGFuc2lkZWNsLmggZGlyZWN0bHkuCgpXZWQgQXByIDE5IDAxOjMwOjI3IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IERvbid0IGluY2x1ZGUgbGliaWJlcnR5LmguICBEbyBkZWNsYXJlIHhtYWxsb2MgYW5kCiAgICAgICAgeHJlYWxsb2MuCgkoLURNQUlOKTogRG9uJ3QgcmVseSBvbiBhbiBleHRlcm5hbGx5LWRlZmluZWQgdmVyc2lvbiBudW1iZXI7CiAgICAgICAgaW5zdGVhZCwgcmVxdWlyZSB0aGUgdmVyc2lvbiBudW1iZXIgdG8gYmUgZGVmaW5lZCBhcyBhCiAgICAgICAgcHJlcHJvY2Vzc29yIG1hY3JvLiAgSGFuZGxlIHRoZSBSUy82MDAwIGxlYWRpbmcgZG90LiAgRGVmaW5lCiAgICAgICAgeG1hbGxvYywgeHJlYWxsb2MgYW5kIGZhdGFsLiAgRG9uJ3Qgc3RyaXAgYSBsZWFkaW5nIHVuZGVyc2NvcmUKICAgICAgICBpZiB3ZSBjb3VsZG4ndCBkZW1hbmdsZSB0aGUgd29yZC4KClR1ZSBBcHIgIDQgMTM6MDM6NTEgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCShPbGQgbXB3LmMgY2hhbmdlIGRlc2NyaXB0aW9ucyByZXRhaW5lZCBmb3IgaW5mb3JtYXRpb25hbCB2YWx1ZS4pCgkqIG1wdy5jICh3YXJuaW5nX3RocmVzaG9sZCk6IERlZmF1bHQgdG8gLjQgc2VjLgoJKG92ZXJmbG93X2NvdW50LCBjdXJyZW50X3Byb2dyZXNzKTogTmV3IGdsb2JhbHMuCgkod2Fybl9pZl9zcGluX2RlbGF5KTogSW5jbHVkZSBjdXJyZW50IHByb2dyZXNzIHR5cGUsCglzdWNoIGFzIHByb2dyYW0gbmFtZSwgaW4gbWVzc2FnZS4KCShtcHdfc3RhcnRfcHJvZ3Jlc3MpOiBTZXQgY3VycmVudF9wcm9ncmVzcyB2YXJpYWJsZSBmcm9tIGFyZy4KCShtcHdfZW5kX3Byb2dyZXNzKTogUmVwb3J0IHNwaW4gZGVsYXlzIGJ5IHBvd2VyLW9mLXR3by1zaXplCglidWNrZXRzIGluc3RlYWQgb2YgY29uc3RhbnQtc2l6ZSBidWNrZXRzLgoKCSogbXB3LmM6IENsZWFuIHVwIGZvcm1hdHRpbmcsIHR5cGVzLCByZXR1cm5zLCBldGMuCgkoRU5PU1lTKTogRGVmaW5lLgoJKG1wd19mcmVhZCwgbXB3X2Z3cml0ZSk6IERlZmluZS4KCShzbGVlcCk6IERlZmluZSBjb3JyZWN0bHkuCgoJKiBtcHcuYzogTmV3IGNvZGUgdG8gaW1wbGVtZW50IGN1cnNvciBzcGlubmluZyBzdXBwb3J0LgoJKHVtYXNrKTogTmV3IGZ1bmN0aW9uLgoJKG1wd19mb3BlbiwgbXB3X2ZzZWVrLCBzdGF0LCBmc3RhdCk6IENhbGwgUFJPR1JFU1MuCgoJKiBtcHcuYyAobXB3X2Jhc2VuYW1lLCBtcHdfbWl4ZWRfYmFzZW5hbWUpOiBOZXcgZnVuY3Rpb25zLCBmaW5kCgliYXNlbmFtZXMgZm9yIE1QVyBhbmQgTVBXL1VuaXggZmlsZW5hbWVzLgoJKG1wd19zcGVjaWFsX2luaXQpOiBOZXcgZnVuY3Rpb24sIGNhbGxzIE1hY3NidWcgaWYgZGVzaXJlZC4KCgkqIG1wdy5jOiBBZGQgR1BMIG5vdGljZS4KCShtcHdpZnlfZmlsZW5hbWUpOiBBZGQgbW9yZSB0cmFuc2Zvcm1hdGlvbnMuCgkobXB3X2ZvcGVuKTogQ2FsbCBtcHdpZnlfZmlsZW5hbWUgb24gZmlsZSBuYW1lcy4KCShyZW5hbWUpOiBSZW1vdmUuCgkoY2hkaXIsIGdldGN3ZCk6IEFkZCBzaW1wbGUgZGVmaW5pdGlvbnMuCgoJKiBtcHcuYzogUmFuZG9tIGNsZWFudXBzLCByZW1vdmUgdW51c2VkIGNvZGUgYml0cy4KCUFkZGVkIGNvcHkgb2Ygc3RyZXJyb3IuYyBmb3IgZ2NjJ3MgdXNlLgoJKHN0YXQsIGZzdGF0LCBfc3RhdCk6IE5ldyB2ZXJzaW9ucyBiYXNlZCBvbiBHdWlkbyB2YW4gUm9zc3VtIGNvZGUuCgoJKiBtcHcuYyAobXB3X2ZzZWVrKTogTWFrZSBpdCB3b3JrIGNvcnJlY3RseSB3aGVuIGRvaW5nIFNFRUtfQ1VSLgoKCSogbXB3LmMgKHN0YXQpOiBSZW1vdmUgaGFjayBkZWZpbml0aW9uLCBnZXQgZnJvbSBzeXMvc3RhdC5oLgoJKGZvcmssIHZmb3JrLCBldGMpOiBQcmludCBlcnJvciBtZXNzYWdlcyBpZiBjYWxsZWQuCgkoZ2V0cnVzYWdlLCBzYnJrLCBlbnZpcm9uLCBpc2F0dHksIGxpbmssIHV0aW1lLCBta2Rpciwgcm1kaXIsCglyZW5hbWUsIGNob3duKTogRGVmaW5lLgoKCSogbXB3LWNvbmZpZy5pbjogTmV3IGZpbGUsIE1QVyB2ZXJzaW9uIG9mIGNvbmZpZ3VyZS5pbi4KCSogbXB3LW1ha2UuaW46IE5ldyBmaWxlLCBNUFcgdmVyc2lvbiBvZiBNYWtlZmlsZS5pbi4KCSogbXB3LmM6IE5ldyBmaWxlLCBNUFcgY29tcGF0aWJpbGl0eSByb3V0aW5lcy4KCkZyaSBNYXIgMjQgMTQ6MTA6MzAgMTk5NSAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBiYXNlbmFtZS5jOiBJbmNsdWRlIGNvbmZpZy5oIGJlZm9yZSBjaGVja2luZyBmb3IgTkVFRF9iYXNlbmFtZS4KClRodSBNYXIgMjMgMTk6MDk6NTQgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBmdW5jdGlvbnMuZGVmOiBBZGQgREVGRlVOQyBmb3IgYmFzZW5hbWUuCgoJKiBiYXNlbmFtZS5jOiBPbmx5IGRlZmluZSBiYXNlbmFtZSBpZiBORUVEX2Jhc2VuYW1lLgoKVGh1IE1hciAxNiAxMzozNjowNSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogRml4IC0tZW5hYmxlLXNoYXJlZCBsb2dpYyBmb3IgbmF0aXZlIGJ1aWxkcy4KCk1vbiBNYXIgMTMgMTE6MDU6MTEgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBEZW1hbmdsZSBib29sIGxpdGVyYWxzIHByb3Blcmx5LgoKTW9uIE1hciAgNiAyMzo1NzoyOCAxOTk1ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogc3RydG9sLmMgc3RydG91bC5jOiAgUmVwbGFjZSB0aGVzZSB3aXRoIGxlc3MgYnVnZ3kgdmVyc2lvbnMgZnJvbQoJTmV0QlNELiAgKHN0cnRvdWwgaW4gcGFydGljdWxhciBjb3VsZG4ndCBoYW5kbGUgYmFzZSAxNi4pCgpXZWQgTWFyICAxIDE1OjU5OjAxIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tdC12eHdvcmtzNSAoSERFRklORVMpOiBEZWZpbmUgTk9fU1lTX1BBUkFNX0guCgoJKiBjbG9jay5jOiBJZiBOT19TWVNfUEFSQU1fSCBpcyBkZWZpbmVkLCBkb24ndCBpbmNsdWRlCgk8c3lzL3BhcmFtLmg+LgoJKiBnZXRjd2QuYywgZ2V0cGFnZXNpemUuYywgZ2V0cnVudGltZS5jOiBMaWtld2lzZS4KCkZyaSBGZWIgMTcgMTU6NDA6NTUgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZ2V0cnVudGltZS5jIChnZXRfcnVuX3RpbWUpOiBEb24ndCBhc3N1bWUgdGhhdCBDTE9DS1NfUEVSX1NFQyBpcwoJYSBudW1iZXI7IEFOU0kgYXBwZWFycyB0byBwZXJtaXQgYW55IGV4cHJlc3Npb24sIGluY2x1ZGluZyBhCglmdW5jdGlvbiBjYWxsLgoKCSogY29uZmlnLnRhYmxlICgqLSotdnh3b3JrczUqKTogVXNlIG10LXZ4d29ya3M1IHdoZW4gY29uZmlndXJpbmcKCXhpYmVydHkuCgkqIGNvbmZpZy9tdC12eHdvcmtzNTogTmV3IGZpbGUuCgpUaHUgRmViICA5IDE0OjE5OjQ1IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJhc2VuYW1lLmMgKGJhc2VuYW1lKTogQ2hhbmdlIGFyZ3VtZW50IHRvIGJlIGNvbnN0LgoKV2VkIEZlYiAgOCAxODowNjo1MiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChsbmVlZGVkLWxpc3QpOiBEb24ndCB3b3JyeSBhYm91dCB4bWFsbG9jLgoKU3VuIEphbiAxNSAwMDo0MDozNiAxOTk1ICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEZWxldGUgeGhvc3QtbWtmcmFnLgoKVGh1IEphbiAxMiAxNjo1NDoxOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChsbmVlZGVkLWxpc3QpOiBJZiBhbGxvY2EubyBpcyBuZWVkZWQsIHNvIGlzIHhtYWxsb2Muby4KCldlZCBKYW4gMTEgMjI6Mzk6NTYgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN1am8uY3lnbnVzLmNvbT4KCgkqIGhleC5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUywgQ0ZJTEVTKTogTGlzdCBpdC4KCShoZXgubyk6IEFkZCBkZXBlbmRlbmNpZXMuCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogRm9yIEdOVSBzdHlsZSBjb25zdHJ1Y3RvciBhbmQKCWRlc3RydWN0b3IgbmFtZXMsIHRyeSBkZW1hbmdsaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZy4KCldlZCBEZWMgMjggMDA6NDk6MTUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tPgoKCSogdmFzcHJpbnRmLmMgKGludF92YXNwcmludGYpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHZhc3ByaW50Zik6IFVzZSBpbnRfdmFzcHJpbnRmLiAgUmVtb3ZlcyBhc3N1bXB0aW9uIHRoYXQgdmFfbGlzdAoJaXMgYXNzaWdubWVudCBjb21wYXRpYmxlLgoKU2F0IE5vdiAgNSAxOToyOToxMiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChMSUJDRkxBR1MpOiBOZXcgdmFyaWFibGUuCgkoRkxBR1NfVE9fUEFTUyk6IFBhc3MgaXQuCgkoLmMubyk6IFVzZSBpdC4KClRodSBOb3YgIDMgMTk6MDk6NDcgMTk5NCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN1am8uY3lnbnVzLmNvbT4KCgkqIGdldG9wdC5jLCBnZXRvcHQxLmM6IERvIGNvbXBpbGUgdGhlc2UgZnVuY3Rpb25zIHVuZGVyIExpbnV4LAoJc2luY2UgbWFueSBuYXRpdmUgdmVyc2lvbnMgYXJlIGJhc2VkIG9uIGdsaWJjIGJ1dCBhcmUgYnVnZ3kuCgpNb24gT2N0IDI0IDE1OjE2OjQ2IDE5OTQgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogdmFzcHJpbnRmLmM6ICBNYWtlICdmb3JtYXQnIGFyZyBiZSBjb25zdCwgdG8gYXZvaWQgYSBtaXNtYXRjaAoJd2l0aCBwcm90b3R5cGUgaW4gR05VIGxpYmMuICBTdXBwb3J0IHN0ZGFyZy5oIGFzIHdlbGwgYXMgdmFyYXJncy5oLgoKVHVlIE9jdCAxMSAxNzo0ODoyNyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiBBZGQgdmFzcHJpbnRmLm8uCgkqIGZ1bmN0aW9ucy5kZWY6IFJlbW92ZSB2YXNwcmludGYuCgpXZWQgU2VwIDE0IDE3OjA0OjU1IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIHhtYWxsb2MuYyAoZmlyc3RfYnJlYWspOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSk6IFJlY29yZCBzYnJrICgwKSBpbiBmaXJzdF9icmVhay4KCSh4bWFsbG9jKTogSWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIHRyeSB0byByZXBvcnQgaG93IG11Y2gKCW1lbW9yeSB3YXMgYWxsb2NhdGVkIGJ5IHRoZSBwcm9ncmFtIHVwIHRvIHRoaXMgcG9pbnQuCgkoeHJlYWxsb2MpOiBMaWtld2lzZS4KClN1biBTZXAgMDQgMTc6NTg6MTAgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKCgkqIE1ha2VmaWxlLmluIChFUlJPUlNfQ0MpOiBOZXcgdmFyaWFibGUsIGRlZmF1bHRlZCB0byAkKENDKS4gIFVzZSBpdAoJd2hlbiBsaW5raW5nIGR1bW15LgoJKiBjb25maWcudGFibGU6IEFkZCBob3N0IFJJU0NpWCBNYWtlZmlsZSBmcmFnLgoJKiBjb25maWcvbWgtcmlzY2l4OiBOZXcgZmlsZS4KClRodSBBdWcgMjUgMTc6Mjk6NDQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBzYW5ndWluZS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBEZWZpbmUuCgkoJChSVUxFMSkpOiBVc2UgJChGTEFHU19UT19QQVNTKS4KCldlZCBBdWcgMjQgMTc6MDg6NDcgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBzYW5ndWluZS5jeWdudXMuY29tKQoKCSogdmFzcHJpbnRmLmM6IEluY2x1ZGUgPHN0cmluZy5oPi4KCSh2YXNwcmludGYpOiBBZGQgY2FzdHMgdG8gdm9pZCBmb3IgdmFfYXJnIHRvIGF2b2lkIGdjYyB3YXJuaW5ncy4KCSogeGF0ZXhpdC5jOiBEZWNsYXJlIG1hbGxvYy4KCkZyaSBBdWcgMTkgMTU6Mjk6MTIgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcmdzKTogRml4IGEgYnVnIGluIHByZXZpb3VzIHBhdGNoICh0aGUKCW9uZSBiZWxvdykuCgpUaHUgQXVnIDE4IDE0OjM3OjE0IDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGUgYXJncyk6IEhhbmRsZSBBUk0gcmVwZWF0IGVuY29kaW5nIHdoZXJlCiAgICAgICAgdGhlIHR5cGUgaW5kZXggaXMgZ3JlYXRlciB0aGFuIDkuCgpXZWQgQXVnIDE3IDE2OjEzOjQ5IDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcXVhbGlmaWVkKTogYWNjZXB0IG9wdGlvbmFsICdfJyBiZXR3ZWVuCglxdWFsaWZpZWQgbmFtZS4gVGhpcyBpcyBiYWVjYXVzZSB0aGUgdGVtcGxhdGUgbmFtZSBtYXkgZW5kIHdpdGgKCW51bWVyaWMgYW5kIGNhbiBtaXhlZCB1cCB3aXRoIHRoZSBsZW5ndGggb2YgbmV4dCBxdWFsaWZpZWQgbmFtZS4KCldlZCBBdWcgIDMgMDU6NTI6MTQgMTk5NCAgRC4gVi4gSGVua2VsLVdhbGxhY2UgIChndW1ieUBjeWdudXMuY29tKQoKCSogY29uZmlnL210LXN1bm9zNDogVXNlIG91ciBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgY3Jvc3MtaW5jbHVkZXMKCWFuZCBjcm9zcy1saWJzIHdoZW4gdGhlIHRhcmdldCBpcyBhbHNvIGEgImhvc3QiIGVudmlyb25tZW50IChpZSBubwoJbmV3bGliOyBpbmNsdWRlcyBhbmQgc3VjaCBkb24ndCBiZWxvbmcgdG8gdXMpLiAgVGhpcyBpcyBzcGVjaWZpYwoJdG8gdGhlIEN5Z251cyBTdXBwb3J0IGVudmlyb25tZW50LgoKVHVlIEF1ZyAgMiAxNToyNToxMiAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogZGVtYW5nbGUgYXMgeHh4PCdRJz4gbm90Cgl4eHg8Y2g9ODE+LgoKTW9uIEF1ZyAgMSAxNzowMjo0OCAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKG1haW4pOiBmbHVzaCBzdGRvdXQgdG8gbWFrZSBwaXBlIHdvcmsuCgpTYXQgSnVsIDE2IDEyOjU2OjMyIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZSAoKi0qLWN4dXg3Kik6ICBSZWNvZ25pemUuCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X204ODExMF9leHQpIFtIQVJSSVNfRkxPQVRfRk9STUFUXToKCUhhcnJpcy1zcGVjaWZpYyBmbG9hdCBmb3JtYXQuCgkqIGNvbmZpZy9taC1jeHV4NzogTmV3IGZpbGUuCgpXZWQgSnVuIDI5IDAwOjI2OjE3IDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6ICBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0IG9mCgljb25zdW1lX2NvdW50IGRvZXNuJ3QgaW5kZXggYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KCk1vbiBKdW4gMjAgMjM6NTQ6MzcgMTk5NCAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogIEhhbmRsZSB2dGFibGUgbWFuZ2xpbmcgb2YgZ2NjLTIuNC41IGFuZAoJZWFybGllci4gSW1wcm92ZSB0ZXN0IGZvciBuZXcgdnRhYmxlIG1hbmdsaW5nLiBDaGFuZ2Ugb3V0cHV0IGJhY2sKCXRvIGB2aXJ0dWFsIHRhYmxlJy4KCk1vbiBKdW4gMjAgMTE6Mzc6MzAgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBzYW5ndWluZS5jeWdudXMuY29tKQoKCSogb2JzdGFjay5jOiBBbHdheXMgY29tcGlsZSB0aGlzIGNvZGUsIGV2ZW4gaWYgdXNpbmcgdGhlIEdOVQoJbGlicmFyeS4gIEF2b2lkcyBwcm9ibGVtcyB3aXRoIHJlbGF0aXZlbHkgcmVjZW50IGJpbmFyeQoJaW5jb21wYXRpYmlsaXR5LgoKVGh1IEp1biAxNiAxNzo1NDowMSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogSW5jbHVkZSBsaWJpYmVydHkuaC4KCSh4bWFsbG9jLCB4cmVhbGxvYywgZnJlZSk6IERvbid0IGRlY2xhcmUuCgkoc3Ryc3RyKTogRG9uJ3QgZGVjbGFyZSBwYXJhbWV0ZXJzLgoJKHhtYWxsb2MsIHhyZWFsbG9jKTogRG9uJ3QgZGVmaW5lLgoJKGxvbmdfb3B0aW9ucyk6IEFkZCBuby1zdHJpcC11bmRlcnNjb3Jlcy4KCShtYWluKTogQ2FsbCB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUuICBQYXNzIG4gaW4gc2hvcnQgb3B0aW9ucyB0bwoJZ2V0b3B0X2xvbmcuICBIYW5kbGUgb3B0aW9uICduJyB0byBub3Qgc3RyaXAgdW5kZXJzY29yZXMuCgkodXNhZ2UpOiBNZW50aW9uIC1uIGFuZCAtLW5vLXN0cmlwLXVuZGVyc2NvcmVzLgoKU3VuIEp1biAxMiAwMTozNzowOSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IFNlcGFyYXRlIGNvbnNlY3V0aXZlID4ncyB3aXRoIGEKICAgICAgICBzcGFjZS4KCShnbnVfc3BlY2lhbCk6IERlbWFuZ2xlIHRlbXBsYXRlIGFuZCBxdWFsaWZpZWQgbmFtZXMgaW4gYSB2dGFibGUgbmFtZS4KCkZyaSBNYXkgMjcgMTI6Mjc6NTIgMTk5NCAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN1am8uY3lnbnVzLmNvbSkKCglGcm9tIGdhcy0yLjMgYW5kIGJpbnV0aWxzLTIuNCBuZXQgcmVsZWFzZXM6CgoJV2VkIE1heSAxMSAyMjozMjowMCAxOTk0ICBESiBEZWxvcmllIChkakBjdHJvbi5jb20pCgoJKiBtYWtlZmlsZS5kb3M6IFtuZXddIE1ha2VmaWxlIGZvciBkb3MvZ28zMgoJKiBjb25maWd1cmUuYmF0OiB1cGRhdGUgZm9yIGxhdGVzdCBmaWxlcwoJKiBtc2Rvcy5jOiByZW1vdmUgc29tZSBmdW5jdGlvbnMgbm93IGluIGxpYmMuYQoKRnJpIE1heSAyMCAxODo1MzozMiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6ICBSZWNvZ25pemUgdGh1bmtzLCBhcyB3ZWxsIGFzCgl0aGUgbmV3IG5hbWluZyBzdHlsZSBmb3IgdnRhYmxlcyAod2hlbiAtZnZ0YWJsZS10aHVua3MpLgoKV2VkIE1heSAxOCAxMzozNDowNiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoWFRSQUZMQUdTKTogRG9uJ3QgZGVmaW5lLgoJKC5jLm8sIGR1bW15Lm8pOiBEb24ndCB1c2UgWFRSQUZMQUdTLgoJKCQoUlVMRTEpKTogRG9uJ3QgcGFzcyBYVFJBRkxBR1MgZG93biBpbiByZWN1cnNpdmUgY2FsbC4KCkZyaSBNYXkgMTMgMTY6MDI6MTIgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiB2YXNwcmludGYuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmOiBBZGQgaXQuCgpGcmkgTWF5IDEzIDE2OjIwOjI4IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEdyb2sgYm9vbC4KCkZyaSBNYXkgIDYgMTQ6NDQ6MjEgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogQWRkIGdvMzIKCSogY29uZmlnL21oLWdvMzI6IE5ldyB0ZW1wbGF0ZS4KCkZyaSBNYXkgIDYgMTE6MDE6NTkgMTk5NCAgRC4gVi4gSGVua2VsLVdhbGxhY2UgIChndW1ieUBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZSwgY29uZmlnL210LXN1bm9zNDogY29uZmlnIGZvciB3aGVuIHN1bjQgaXMgY3Jvc3MgdGFyZ2V0LgoKTW9uIEFwciAxMSAwMDo1NDozMyAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZ2V0b3B0LmMgW25vdCBfX0dOVV9MSUJSQVJZX19dIFtfX0dDQ19fXSBbbm90IF9fU1REQ19fXToKICAgICAgICBEZWNsYXJlIHN0cmxlbiB0byByZXR1cm4gaW50LiAgRG9uJ3QgaW5jbHVkZSBzdGRkZWYuaC4KCkZyaSBBcHIgIDEgMDA6Mzg6MTcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIGdldG9wdC5jOiBEZWxldGUgdXNlIG9mIElOX0dDQyB0byBjb250cm9sIHdoZXRoZXIKICAgICAgICBzdGRkZWYuaCBvciBnc3RkZGVmLmggaXMgaW5jbHVkZWQuCgpUaHUgQXByIDE0IDE0OjAwOjU2IDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogRml4IGEgYnVnIGluIHRlbXBsYXRlIGZ1bmN0aW9uCgl0eXBlIG51bWJlcmluZy4KCldlZCBBcHIgMTMgMTc6MjM6MDMgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiBGaXggdGVtcGxhdGUgZnVuY3Rpb24gd2l0aCBhcm0KCXN0eWxlIGFyZ3VtZW50IHR5cGUgbnVtYmVyLCBUbi4KCldlZCBBcHIgMTMgMTc6MTE6MTUgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAob3B0YWJsZSk6IEFkZCBuZXdbXSBhbmQgZGVsZXRlW10uCgpGcmkgQXByICA4IDExOjIxOjQyIDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogYXJndi5jIChidWlsZGFyZ3YpOiBEb24ndCBwcm9kdWNlIGVtcHR5IGFyZ3VtZW50IGp1c3QgYmVjYXVzZQoJdGhlcmUgaXMgdHJhaWxpbmcgd2hpdGVzcGFjZS4KCldlZCBBcHIgIDYgMTE6NDI6MTQgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IGZpeCAnUScgcXVhbGlmaWVkIG5hbWUgYnVnLgoJSGFuZGxlICdwJyBzYW1lIGFzICdQJy4KCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBIYW5kbGUgJ3AnIHNhbWUgYXMgJ1AnLgoKU2F0IE1hciAyNiAxMjowMDoxMyAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBmbG9hdGZvcm1hdC5jIChnZXRfZmllbGQsIHB1dF9maWVsZCk6ICBGaXggb2ZmIGJ5IG9uZSBlcnJvciBpbgoJbGl0dGxlIGVuZGlhbiBjYXNlLgoKVGh1IE1hciAyNCAxMDo0MDoxOSAxOTk0ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlKTogUGFzcyB1bnNpZ25lZCBjaGFyICosCglub3QgY2hhciAqLCB0byBwdXRfZmllbGQuCgpGcmkgTWFyIDE4IDEyOjM0OjMzIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogbWVtbW92ZS5jOiAgUmUtd3JvdGU7ICBwbGFjZWQgaW4gcHVibGljIGRvbWFpbi4KCldlZCBNYXIgMTYgMTA6MzM6MDcgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogSWYgQVJNIGRlbWFuZ2xpbmcsIGRvbid0IHRyZWF0CglfX1EqIGFzIGEgY29uc3RydWN0b3IuCgpNb24gTWFyIDE0IDEyOjI2OjAyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGllZWUtZmxvYXQuYzogUmVtb3ZlZDsgbm8gbG9uZ2VyIHVzZWQuCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgoKTW9uIE1hciAgNyAxMjoyODoxNyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBmbG9hdGZvcm1hdC5jIChnZXRfZmllbGQpOiBSZW1vdmVkIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBpLgoJKHB1dF9maWVsZCk6IFJlbW92ZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGkuCgpTdW4gRmViIDI3IDIxOjUwOjExIDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuYzogTmV3IGZpbGUsIGludGVuZGVkIHRvIHJlcGxhY2UgaWVlZS1mbG9hdC5jLgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIGFjY29yZGluZ2x5LgoKVGh1IEZlYiAyNCAxMTo1MToxMiAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AcnRsLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogUmVtb3ZlICNpZmRlZiBHRVRPUFRfQ09NUEFUIGFuZCAjaWYgMCBjb2RlLgoJIChfZ2V0b3B0X2luaXRpYWxpemUpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgX2dldG9wdF9pbnRlcm5hbC4KCSAoX2dldG9wdF9pbnRlcm5hbCk6CgkgSWYgbG9uZ19vbmx5IGFuZCB0aGUgQVJHVi1lbGVtZW50IGhhcyB0aGUgZm9ybSAiLWYiLCB3aGVyZSBmIGlzCgkgYSB2YWxpZCBzaG9ydCBvcHRpb24sIGRvbid0IGNvbnNpZGVyIGl0IGFuIGFiYnJldmlhdGVkIGZvcm0gb2YKCSBhIGxvbmcgb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggZi4gIE90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBubwoJIHdheSB0byBnaXZlIHRoZSAtZiBzaG9ydCBvcHRpb24uCgpUaHUgRmViIDEwIDE0OjQ0OjE2IDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYyBbbm90IF9fR05VX0xJQlJBUllfX10gW19fR05VQ19fXSBbbm90IElOX0dDQ106CiAgICAgICAgVGVzdCBqdXN0IF9fU1REQ19fLCBub3QgZW1hY3MuCgpXZWQgRmViICA5IDAwOjE0OjAwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYyBbbm90IF9fR05VX0xJQlJBUllfX10gW19fR05VQ19fXSBbbm90IElOX0dDQ10KICAgICAgICBbZW1hY3NdIFtub3QgX19TVERDX19dOiBEb24ndCBpbmNsdWRlIHN0ZGRlZi5oLiAgRG9uJ3QgZGVjbGFyZSBzdHJsZW4uCgpGcmkgRGVjIDI0IDE5OjQzOjAwIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBudXRyaW1hdC5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYyAoX05PX1BST1RPKTogRGVmaW5lIGJlZm9yZSBjb25maWcuaCBpcyBpbmNsdWRlZC4KCk1vbiBTZXAgMjAgMTU6NTk6MDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYywgZ2V0b3B0MS5jIFtlbWFjcyB8fCBDT05GSUdfQlJPS0VUU106IEluY2x1ZGUKCTxjb25maWcuaD4gb25seSB1bmRlciB0aGVzZSwgZWxzZSAiY29uZmlnLmgiLgoKVGh1IEF1ZyAxMiAxODoxNjo0OSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIGdldG9wdC5jLCBnZXRvcHQxLmMgW0hBVkVfQ09ORklHX0hdOiBJbmNsdWRlCiAgICAgICAgPGNvbmZpZy5oPiBpbnN0ZWFkIG9mICJjb25maWcuaCIuCgpTdW4gRmViIDIwIDE3OjE3OjAxIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AbGlzYS5jeWdudXMuY29tKQoKCSogY29uY2F0LmM6IENoZWNrIEFOU0lfUFJPVE9UWVBFUyByYXRoZXIgdGhhbiBfX1NURENfXyB0byBkZWNpZGUKCXdoZXRoZXIgdG8gdXNlIHByb3RvdHlwZXMgb3Igbm90LgoJKiBzdHJlcnJvci5jIChjb25zdCk6IE5ldmVyIHVuZGVmaW5lOyBsZXQgYW5zaWRlY2wuaCBoYW5kbGUgaXQuCgkqIHN0cnNpZ25hbC5jIChjb25zdCk6IExpa2V3aXNlLgoKVGh1IEZlYiAxNyAxMzoyNzozNSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4YXRleGl0LmMgKF94ZXhpdF9jbGVhbnVwKTogRGVjbGFyZSBhcyBleHRlcm47IGRvbid0IGluaXRpYWxpemUuCglNZXJnaW5nIGNvbW1vbiBhbmQgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG5lZWQgbm90IGJlIHN1cHBvcnRlZCBieQoJQU5TSSBDIGNvbXBpbGVycy4KCSh4YXRleGl0KTogSW5pdGlhbGl6ZSBfeGV4aXRfY2xlYW51cCBpZiBub3QgYWxyZWFkeSBzZXQuCgkqIHhleGl0LmM6IENvbW1lbnQgZml4LgoKV2VkIEZlYiAxNiAwMToxNTozNiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmM6IERvbid0IGRlY2xhcmUgeGV4aXQ7IGl0J3MgZGVjbGFyZWQgaW4gbGliaWJlcnR5LmguCgkoeHJlYWxsb2MpOiBJZiBvbGRtZW0gaXMgTlVMTCwgYWxsb2NhdGUgd2l0aCBtYWxsb2MsIHJhdGhlciB0aGFuCglhc3N1bWluZyB0aGF0IHJlYWxsb2Mgd29ya3MgY29ycmVjdGx5LgoKVHVlIEZlYiAxNSAwOToyNjoxNiAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjb25jYXQuYywgaWVlZS1mbG9hdC5jOiAgUmVwbGFjZSBpbmNsdXNpb24gb2YgPHN0cmluZy5oPgoJd2l0aCBleHBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFzIHJlY29tbWVuZGVkIGJ5IElhbiBUYXlsb3IuCgpTYXQgRmViIDEyIDEwOjMxOjExIDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUBydGwuY3lnbnVzLmNvbSkKCgkqIHhtYWxsb2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBVc2UgUFRSIGFuZCBzaXplX3QgdGhyb3VnaG91dC4KCShtYWxsb2MsIHJlYWxsb2MpOiBEZWNsYXJlLgoKVGh1IEZlYiAxMCAxNzowODoxOSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBhcmd2LmMsIGJhc2VuYW1lLmM6IEluY2x1ZGUgYW5zaWRlY2wuaCBhbmQgbGliaWJlcnR5LmguCgkqIGNvbmNhdC5jLCBmZG1hdGNoLmMsIGdldHJ1bnRpbWUuYywgc3BhY2VzLmM6IExpa2V3aXNlLgoJKiBzdHJlcnJvci5jLCBzdHJzaWduYWwuYywgeGF0ZXhpdC5jLCB4ZXhpdC5jOiBMaWtld2lzZS4KCSogeG1hbGxvYy5jOiBMaWtld2lzZS4KCSogY29uY2F0LmM6IERvbid0IGRlY2xhcmUgeG1hbGxvYy4gIElmIF9fU1REQ19fLCB1c2UgPHN0ZGFyZy5oPgoJbWFjcm9zLCBub3QgPHZhcmFyZ3MuaD4gbWFjcm9zLgoJKiBzcGFjZXMuYyAoc3BhY2VzKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdC4gIERvbid0IGNyYXNoIGlmCgltYWxsb2MgcmV0dXJucyBOVUxMLgoJKiBzdHJlcnJvci5jIChzdHJ1Y3QgZXJyb3JfaW5mbyk6IE1ha2UgbmFtZSBhbmQgbXNnIGZpZWxkcyBjb25zdC4KCShlcnJvcl9uYW1lcyk6IE1ha2UgY29uc3QuCgkoc3RyZXJybm8pOiBNYWtlIGNvbnN0LgoJKHN0cnRvZXJybm8pOiBNYWtlIGFyZ3VtZW50IGNvbnN0LgoJKiBzdHJzaWduYWwuYyAoc3RydWN0IHNpZ25hbF9pbmZvKTogTWFrZSBuYW1lIGFuZCBtc2cgZmllbGRzCgljb25zdC4KCShzaWduYWxfbmFtZXMsIHN5c19zaWdsaXN0KTogTWFrZSBjb25zdC4KCShzdHJzaWduYWwsIHN0cnNpZ25vKTogTWFrZSBjb25zdC4KCShzdHJ0b3NpZ25vKTogTWFrZSBhcmd1bWVudCBjb25zdC4KCSogeGF0ZXhpdC5jOiBEZWNsYXJlIHBhcmFtZXRlciB0eXBlcy4KCSogeG1hbGxvYy5jIChuYW1lKTogTWFrZSBjb25zdC4KCSh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBNYWtlIGFyZ3VtZW50IGNvbnN0LgoJKiBNYWtlZmlsZS5pbiAoSU5DRElSKTogRGVmaW5lLgoJKC5jLm8pOiBVc2UgJChJTkNESVIpLgoJKGR1bW15Lm8pOiBMaWtld2lzZS4KCShhcmd2Lm8sIGJhc2VuYW1lLm8pOiBOZXcgdGFyZ2V0czsgZGVwZW5kIG9uIGxpYmliZXJ0eS5oLgoJKGNvbmNhdC5vLCBmZG1hdGNoLm8sIGdldHJ1bnRpbWUubywgc3BhY2VzLm8pOiBMaWtld2lzZS4KCShzdHJlcnJvci5vLCBzdHJzaWduYWwubywgeGF0ZXhpdC5vLCB4ZXhpdC5vKTogTGlrZXdpc2UuCgkoeG1hbGxvYy5vKTogTGlrZXdpc2UuCgkoY3BsdXMtZGVtLm8pOiBOZXcgdGFyZ2V0OyBkZXBlbmQgb24gZGVtYW5nbGUuaC4KCShnZXRvcHQubywgZ2V0b3B0MS5vKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBnZXRvcHQuaC4KCShpZWVlLWZsb2F0Lm8pOiBOZXcgdGFyZ2V0OyBkZXBlbmQgb24gaWVlZS1mbG9hdC5oLgoJKG9ic3RhY2subyk6IE5ldyB0YXJnZXQ7IGRlcGVuZCBvbiBvYnN0YWNrLmguCgpUdWUgRmViICA4IDA1OjI5OjA4IDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCglIYW5kbGUgb2JzdGFja19jaHVua19hbGxvYyByZXR1cm5pbmcgTlVMTC4gIFRoaXMgYWxsb3dzCglvYnN0YWNrcyB0byBiZSB1c2VkIGJ5IGxpYnJhcmllcywgd2l0aG91dCBmb3JjaW5nIHRoZW0KCXRvIGNhbGwgZXhpdCBvciBsb25nam1wLgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX2JlZ2luLCBfb2JzdGFja19iZWdpbl8xLCBfb2JzdGFja19uZXdjaHVuayk6CglJZiBDQUxMX0NIVU5LRlVOIHJldHVybnMgTlVMTCwgc2V0IGFsbG9jX2ZhaWxlZCwgZWxzZSBjbGVhciBpdC4KCShfb2JzdGFja19iZWdpbiwgX29ic3RhY2tfYmVnaW5fMSk6IFJldHVybiAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgbm90LgoKVHVlIEZlYiAgOCAwMDozMjoyOCAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjb25jYXQuYywgaWVlZS1mbG9hdC5jOiAgSW5jbHVkZSA8c3RyaW5nLmg+LgoKU3VuIEZlYiAgNiAyMToyODo0NiAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSk6IE5ldyBmdW5jdGlvbi4KCSh4bWFsbG9jLCB4cmVhbGxvYyk6IEluY2x1ZGUgdGhlIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UsIGlmIHNldC4KCgkqIFJlcGxhY2UgYXRleGl0LmMgd2l0aCB4YXRleGl0LmMuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpLCBmdW5jdGlvbnMuZGVmOiBDaGFuZ2UgcmVmZXJlbmNlcy4KClNhdCBGZWIgIDUgMTQ6MDI6MzIgMTk5NCAgU3RhbiBTaGVicyAgKHNoZWJzQGFuZHJvcy5jeWdudXMuY29tKQoKCSogZ2V0cnVudGltZS5jIChnZXRfcnVuX3RpbWUpOiBVc2UgZ2V0cnVzYWdlIG9yIHRpbWVzIGlmCglIQVZFX0dFVFJVU0FHRSBvciBIQVZFX1RJTUVTIGFyZSBkZWZpbmVkLgoKRnJpIEZlYiAgNCAxNTo0OTozOCAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBhdGV4aXQuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpLCBmdW5jdGlvbnMuZGVmOiBBZGQgaXQuCgkqIHhleGl0LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTLCBSRVFVSVJFRF9PRklMRVMpOiBBZGQgaXQuCgkqIHhtYWxsb2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBDYWxsIHhleGl0IGluc3RlYWQgb2YgZXhpdC4KCUNoYW5nZSByZXF1ZXN0IGZvciAwIGJ5dGVzIGludG8gcmVxdWVzdCBmb3IgMSBieXRlLgoKV2VkIEZlYiAgMiAxMTozNjo0OSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogUHJpbnQgc2l6ZSB1c2luZyAlbHUsIGFuZCBjYXN0IHRvCgl1bnNpZ25lZCBsb25nLCB0byBhdm9pZCB3YXJuaW5ncy4KCkZyaSBKYW4gMjggMTc6NDk6MDYgMTk5NCAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN1am8uY3lnbnVzLmNvbSkKCgkqIGR1bW15LmM6IERvbid0IGluY2x1ZGUgdGltZS5oIGV2ZXI7IGFsd2F5cyBkZWZpbmUgY2xvY2tfdCBhcwoJInVuc2lnbmVkIGxvbmciLiAgVW50aWwgZ2NjL2ZpeGluY2x1ZGVzIGVuc3VyZXMgdGhhdCBjbG9ja190CglleGlzdHMsIF9fU1REQ19fIGlzbid0IGEgc3VmZmljaWVudCB0ZXN0LiAgQW5kIGlmIGNsb2NrKCkgZG9lc24ndAoJZXhpc3QsIGNsb2NrX3QgcHJvYmFibHkgZG9lc24ndCBlaXRoZXIuCgpNb24gSmFuIDI0IDExOjUyOjMxIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKCgkqIGNsb2NrLmMsIGdldHJ1bnRpbWUuYzogTmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbjogQWRkIHRvIGZpbGUgbGlzdHMuCgkqIGZ1bmN0aW9ucy5kZWYgKGNsb2NrKTogQWRkIHRvIGxpc3QuCgkqIGR1bW15LmMgKHRpbWUuaCk6IEFkZCBpZiBfX1NURENfXy4KCShjbG9ja190KTogI2RlZmluZSBhcyAidW5zaWduZWQgbG9uZyIgaWYgbm90IF9fU1REQ19fLgoKVHVlIEphbiAxMSAxMToyNzo0NCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBzdHJ0b2QuYzogRGVjbGFyZSBhdG9mLiAgRnJvbSBlZGxlckBqYW4udWx0cmEubnl1LmVkdSAoSmFuCglFZGxlcikuCgpUdWUgRGVjIDI4IDE0OjE3OjMwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChlcnJvcnMpOiBVc2UgQ0ZMQUdTIGFzIHdlbGwgYXMgTERGTEFHUyB3aGVuCglsaW5raW5nLgoKRnJpIERlYyAxNyAxMjoyNjowNyAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJtX3B0KTogTmV3IGZ1bmN0aW9uLiAgQ29tbW9uIGNvZGUKCWZvciBBUk0gdGVtcGxhdGUgZGVtYW5nbGluZy4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2NsYXNzX25hbWUpOiBVc2UgZGVtYW5nbGVfYXJtX3B0LgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogTGlrZXdpc2UuCgpUdWUgTm92IDMwIDE1OjQ3OjQ4IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IEFkZCBDT05TVCB0byBwbGVhc2UgZ2NjLgoKU2F0IE5vdiAyNyAxMTowNTo1MCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCglNZXJnZSBjaGFuZ2VzIGZyb20gdG9tQGJhc2lsLmljY2UucnVnLm5sIChUb20gUi5IYWdlbWFuKQoJKiBzdHJlcnJvci5jLCBzdHJzaWduYWwuYzogIEFzIGEgc21hbGwgc3BhY2Ugb3B0aW1pemF0aW9uLCBkb24ndAoJaW5jbHVkZSBtZXNzYWdlcyB3aGVuIHRoZXkgYXJlbid0IGFjdHVhbGx5IHVzZWQuCgoJTWVyZ2UgY2hhbmdlcyBmcm9tIHRha2VmaXZlLmNvLmF0IWpvZSAoSm9zZWYgTGVoZXJiYXVlcikKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCwgZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSwKCWNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6ICBGaXhlcyBmb3Igc3lzdGVtcyB3aGVyZSBjcGx1c19tYXJrZXIKCWlzIHNvbWV0aGluZyBvdGhlciB0aGFuICckJy4KCkZyaSBOb3YgMjYgMTM6NTE6MTEgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiB3YWl0cGlkLmM6ICBTaW1wbGUtbWluZGVkIGFwcHJvY2ltYXRpb24gdG8gd2FpdHBpZAoJdXNpbmcgdmFuaWxsYSB3YWl0LgoJKiBmdW5jdGlvbnMuZGVmLCBNYWtlZmlsZS5pbjogIFVwZGF0ZSBhY2NvcmRpbmdseSwKClRodSBOb3YgMTggMTg6MDE6MTUgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMoZGVtYW5nbGVfdGVtcGxhdGUpOiBmaXggYnVnIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KCXdpdGggdmFsdWUgb2YgdXNlciBkZWZpbmVkIHR5cGUuCgpXZWQgTm92IDE3IDE4OjMwOjIxIDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IGFkZCB0aGUgc3ViamVjdCBuZXcgZnVuY3Rpb24KCXRvIHN1cHBvcnQgdW5pZmllZCBzZWFyY2ggb2Ygb3BlcmF0b3IgaW4gY2xhc3MuCgpXZWQgTm92IDEwIDA5OjQ3OjIyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCWdjYyAtV2FsbCBsaW50OgoJKiBzdHJ0b3VsLmMgKHN0cnRvdWwpOiB1c2UgIihkaWdpdCA9ICpzKSAhPSAnXDAnIiBub3QganVzdAoJImRpZ2l0ID0gKnMiIGFzIGNvbmRpdGlvbiBpbiB3aGlsZSBsb29wLgoKVHVlIE5vdiAgOSAxNTo1MjoyMiAxOTkzICBNYXJrIEVpY2hpbiAgKGVpY2hpbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHBhc3MgU0hFTEwgdG8gcmVjdXJzaXZlIG1ha2UKClRodSBOb3YgIDQgMTI6MDk6MjYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiB2ZnByaW50Zi5jLCB2cHJpbnRmLmMsIHZzcHJpbnRmLmM6ICBNYWtlIGZvcm1hdCBhcmcKCWJlIChjb25zdCBjaGFyKiksIGZvciBBTlNJIChhbmQgZ2NjIHcvZml4cHJvdG8pIGNvbnNpc3RlbmN5LgoKVGh1IE5vdiAgNCAwODoyOTowNCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogTWFrZSAqLSotaGl1eCogdXNlIG1oLWhwdXguCgpGcmkgT2N0IDIyIDA3OjUzOjE1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlOiBBZGQgKiB0byBlbmQgb2YgYWxsIE9TIG5hbWVzLgoKVHVlIE9jdCAxOSAxNzoxMjowMSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogZW5zdXJlIHRoYXQgb2JqZWN0IGZpbGUgbmFtZXMgYXJlCgkgIG5vdCBkdXBsaWNhdGVkLCBhcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgb2JqZWN0IGZpbGUgaW4KCSAgYSBsaWJyYXJ5IGNhdXNlcyBwcm9ibGVtcyBvbiBzb21lIG1hY2hpbmVzCgpNb24gT2N0IDE4IDIxOjU5OjI4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogc3RyY2FzZWNtcC5jLCBzdHJuY2FzZWNtcC5jOiBDaGFuZ2UgdV9jaGFyIHRvIHVuc2lnbmVkIGNoYXIuCgpGcmkgT2N0IDE1IDIyOjE3OjExIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvb0BydGwuY3lnbnVzLmNvbSkKCgkqIHN0cm5jYXNlY21wLmM6IG5ldyBmaWxlLCBpbXBsZW1lbnRzIHN0cm5jYXNlY21wCgkqIHN0cmNhc2VjbXAuYzogbmV3IGZpbGUsIGltcGxlbWVudCBzdHJjYXNlY21wCgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogbGlzdCB0aGVzZSB0d28gbmV3IHNvdXJjZSBmaWxlcwoKCSogZnVuY3Rpb25zLmRlZjogYWRkIHN0cmNhc2VjbXAgYW5kIHN0cm5jYXNlY21wIGVudHJpZXMKCkZyaSBPY3QgMTUgMTQ6NTM6MDUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogc3RydG91bC5jIChzdHJ0b3VsKSwgc3RydG9sLmMgKHN0cnRvbCk6IEhhbmRsZSBvdmVyZmxvdwoJYWNjb3JkaW5nIHRvIEFOU0kgQy4KClRodSBPY3QgMTQgMTY6MzQ6MTkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IGFkZCBzdXBwb3J0IG9mIEFSTSBnbG9iYWwgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciwKCWFuZCAnRycgZm9yIHBhc3NpbmcgcmVjb3JkIG9yIHVuaW9uIGluIHBhcmFtZXRlci4KCldlZCBPY3QgMTMgMTM6MzY6MTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogRml4IGNvbW1lbnQgdG8gY2xhcmlmeSB0aGF0IHN0dWZmIGluIFJFUVVJUkVEX09GSUxFUwoJc2hvdWxkIG5vdCBiZSBpbiBmdW5jdGlvbnMuZGVmLgoKV2VkIE9jdCAxMyAxMzoxMzozOCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBmdW5jdGlvbnMuZGVmOiBSZW1vdmVkIHhtYWxsb2MuICBTdHVmZiBpbiBSRVFVSVJFRF9PRklMRVMgc2hvdWxkCglub3QgYmUgaW4gZnVuY3Rpb25zLmRlZi4KCk1vbiBPY3QgIDQgMTg6MjY6MzkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IGNoYW5nZSBnbG9ibCBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHRvIHByb3BlciBuYW1lCgpUdWUgU2VwIDI4IDE4OjExOjA3IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBmaXggYnVnIGluIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKClR1ZSBTZXAgMjggMTY6MjA6NDkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IHN1cHBvcnQgYm90aCBvbGQgYW5kIG5ldyBfdnQkLi4uIHZ0YmwgbWFuZ2xlZCBuYW1lcwoKRnJpIFNlcCAyNCAxOTowNzoxNiAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBGaXggZGVtYW5nbGVfdGVtcGxhdGUgcHJvdG90eXBlCgpGcmkgU2VwIDI0IDE3OjMyOjU1IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBmaXggdGVtcGxhdGUgZGVtYW5nbGluZwoJKiBjcGx1cy1kZW0uYzogZml4IGNvbnN0IHR5cGUgZGVtYW5nbGluZwoJKiBjcGx1cy1kZW0uYzogZml4IGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IsIHZpcnR1YWwgdGFibGUsCglxdWFsaWZpZXIsIGdsb2JhbCBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIGRlbWFuZ2xpbmcKCldlZCBTZXAgIDEgMjM6MTM6MTEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYywgc3RyZXJyb3IuYzogVXNlIGZ1bGx5LWJyYWNrZXRlZCBpbml0aWFsaXplciB0bwoJa2VlcCBnY2MgLVdhbGwgaGFwcHkuCgpGcmkgQXVnIDI3IDEwOjMwOjA5IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBBZGQgQ09OU1RTIHRvIG1ha2UgZ2NjIGhhcHB5IHdpdGggbGFzdAoJcGF0Y2guCgpGcmkgQXVnIDI3IDExOjI0OjU0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCVBhdGNoIGZyb20gUGF1bCBGbGluZGVyczoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBEZWFsIHdpdGggYXJyYXlzLgoKVHVlIEF1ZyAyNCAxNDoyMzo1MCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQ6IERlYWwgd2l0aCBHTlUgZm9ybWF0IGZvciBtb3JlCgl0aGFuIDkgY2xhc3Nlcy4KCldlZCBBdWcgMTggMTk6NTA6MjkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZHVtbXkubyk6IFJlZGlyZWN0IHRvIC9kZXYvbnVsbCB0byBhdm9pZCAidmFyaWFibGUKCW5vdCBpbml0aWFsaXplZCIgd2FybmluZ3MgdW5kZXIgSFAvVVgKClN1biBBdWcgMTUgMjA6NDI6NDAgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzdHJlcnJvci5jOiBNb3ZlIGluY2x1ZGUgb2Ygc3RkaW8uaCBhZnRlciBzeXNfZXJybGlzdCAjZGVmaW5lLgoJQWxzbyByZW1vdmUgTlVMTCBkZWZpbml0aW9uIChzdGRpby5oIGFsd2F5cyBkZWZpbmVzIE5VTEwsIHNvIGl0CgluZXZlciBkaWQgYW55dGhpbmcgYnV0IGNsdXR0ZXIgdXAgdGhlIGNvZGUpLgoKU2F0IEF1ZyAxNCAxNDoyMTo0OSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZjogaGFuZGxlIHhtYWxsb2MuYwoKCSogeG1hbGxvYy5jOiBwcm92aWRlIHhtYWxsb2MgYW5kIHhyZWFsbG9jIGZ1bmN0aW9ucwoKVGh1IEF1ZyAxMiAxNzozODo1NyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogRml4IGEgY29tbWVudC4KClNhdCBBdWcgIDcgMTM6NTY6MzUgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogZ2V0b3B0MS5jOiBEZWNsYXJlIGNvbnN0IHRoZSB3YXkgZ2V0b3B0LmMgZG9lcy4KCkZyaSBBdWcgIDYgMTc6MDM6MTMgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogb2JzdGFjay5jLCBhbGxvY2EuYzogVXBkYXRlIGZyb20gRlNGLgoJKiBnZXRvcHQuYywgZ2V0b3B0MS5jOiBVcGRhdGUgdG8gY3VycmVudCBGU0YgdmVyc2lvbiwgd2hpY2gKCWRvZXNuJ3QgdXNlIGFsbG9jYS4KClR1ZSBKdWwgMjcgMTQ6MDM6NTcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRlbWFuZ2xlKTogQWRkIHRoZSB0YXJnZXQgd2l0aCBhIG1lc3NhZ2Ugc2F5aW5nCgl3aGVyZSBkZW1hbmdsZSB3ZW50LgoKTW9uIEp1bCAyNiAxNTo0OTo1NCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBSZW1vdmUgb2Jzb2xldGUgYGRlbWFuZ2xlJyB0YXJnZXQuCgpUaHUgSnVsIDIyIDA4OjMxOjAxIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGFybV9zcGVjaWFsKTogIEFwcGx5IHBhdGNoIGZyb20gYXJnQGx1Y2lkLmNvbSB0bwoJYXZvaWQgaW5maW5pdGUgbG9vcCBvbiB2dGJsIHN5bWJvbHMgd2l0aCBkaXNhbWJpZ3VhdGluZyAianVuayIKCXRhY2tlZCBvbiB0aGUgZW5kLgoKTW9uIEp1bCAxOSAxNDoxMDozNyAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYzogd29yayBhcm91bmQgc29tZSBzeXN0ZW1zIGxvc2luZyBkZWZpbml0aW9ucyBvZgoJc3lzX3NpZ2xpc3QKCgkqIGNvbmZpZy9taC1seW54b3M6IHRoaXMgc3lzdGVtIGhhcyBhIGxvc2luZyBkZWZpbml0aW9uIG9mCglzeXNfc2lnbGlzdAoKCSogY29uZmlnLnRhYmxlOiB1c2UgbWgtbHlueG9zIGZvciAqLSotbHlueG9zCgpNb24gSnVsIDE5IDE3OjA4OjUyIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogQWRkIHN1cHBvcnQgZm9yIEhQUEEgQlNEIGhvc3RzLgoKCSogY29uZmlnL21oLWhwYnNkOiBOZXcgZmlsZS4KCk1vbiBKdWwgMTIgMTg6MDA6NDAgMTk5MyAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVEFHUyk6IG1ha2Ugd29yayB3aGVuIHNyY2RpciAhPSBvYmpkaXIuCgpTdW4gSnVuIDI3IDE1OjM1OjMxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtYWluKTogQWRkIGxvbmcgb3B0aW9ucywgaW5jbHVkaW5nIC0taGVscCBhbmQKCS0tdmVyc2lvbi4KCSh1c2FnZSk6IE5ldyBmdW5jdGlvbiBmcm9tIGNvZGUgaW4gbWFpbi4KClR1ZSBKdW4gMjIgMTE6Mzc6MzggMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6ICBOZXcgc2hlbGwgc2NpcHQsIHNvdXJjZWQgYnkgYm90aCAuL2NvbmZpZ3VyZSxpbgoJYW5kIC4uL3hpYmVydHkvY29uZmlndXJlLmluLCB0byBhdm9pZCBtYWludGFpbmFuY2UgbG9zc2FnZXMuCgkqIGNvbmZpZ3VyZS5pbiBhbmQgLi4veGliZXJ0eS9jb25maWd1cmUuaW46ICBVc2UgY29uZmlnLnRhYmxlLgoKCSogY29uZmlndXJlLmluOiBEb24ndCB1c2UgbWgtYWl4IGZvciBBSVggMy4yLCBvbmx5IGZvciAzLjEuCgkqIGNvbmZpZ3VyZS5pbjogTWFwICotKi1pcml4KiAoZXhjZXB0IGlyaXg0KSB0byBtaC1zeXN2LgoJKiAuLi94aWJlcnR5L2NvbmZpZ3VyZS5pbjogIFVwZGF0ZSBmcm9tIC4vY29uZmlndXJlLmluLgoKVHVlIEp1biAxNSAxNzowNTozMSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogcmVtb3ZlIHBhcmVudGRpciBzdXBwb3J0CgpXZWQgTWF5IDI2IDEyOjU5OjA5IDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jICh4cmVhbGxvYyk6ICBNYXRjaCBkZWZpbml0aW9uIHdpdGggcHJvdG90eXBlLgoKVHVlIE1heSAyNSAxNDoyNzo1MSAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogIERlbWFuZ2xlIGNmcm9udAoJbG9jYWwgdmFyaWFibGVzIGFzIGFuIGV4dGVuc2lvbiB0byBBUk0gZGVtYW5nbGluZy4KCkZyaSBNYXkgMjEgMDk6NTM6NTcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0LmM6IERvbid0IHJlcXVpcmUgcG9pbnRlcnMgdG8gZG91YmxlIHRvIGJlIGFsaWduZWQuCgpUdWUgTWF5IDE4IDE3OjEyOjEwIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKICAgICAgICAobWVyZ2UgY2hhbmdlcyBmcm9tIGRsb25nQGNzZS51Y3NjLmVkdSkKCSogY3BsdXMtZGVtLmMgKGNvbnN1bWVfY291bnQpOiAgU2ltcGxpZnkuCgkqIGNwbHVzLWRlbS5jIChhcm1fcHQsIGRlbWFuZ2xlX2NsYXNzX25hbWUpOiAgTmV3IGZ1bmN0aW9ucy4KCSogY3BsdXMtZGVtLmMgKHZhcmlvdXMpOiAgQ2FsbHMgdG8gYXJtX3B0LCBkZW1hbmdsZV9jbGFzc19uYW1lLgoKCSogY3BsdXMtZGVtLmMgKHhtYWxsb2MsIHhyZWFsbG9jLCBzdHJzdHIpOiAgTWFrZSBleHRlcm4gZGVjbHMgaW50bwoJZnVsbCBwcm90b3R5cGVzLgoJKiBjcGx1cy1kZW0uYyAoZnJlZSk6ICBBZGQgcHJvdG90eXBlLgoJKiBjcGx1cy1kZW0uYyAob3B0YWJsZSk6ICBGdWxseSBicmFja2V0aXplIGluaXRpYWxpemVyLgoKRnJpIE1heSAxNCAxNzoxMzowNSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAgV2hldGhlciBpbml0aWFsIHVuZGVyc2NvcmVzIGFyZSBzdHJpcHBlZAoJZGVwZW5kcyBvbiB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgcHJlcGVuZHNfdW5kZXJzY29yZQoJKHdoaWNoIGlzIGdlbmVyYXRlZCBieSB0aGUgYmludXRpbHMgTWFrZWZpbGUpLgoKRnJpIE1heSAxNCAwNzozMjoyMCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtb3BfdXAsIGFybV9zcGVjaWFsKTogUmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcy4KClR1ZSBNYXkgIDQgMjA6MzE6NTkgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoY29uc3VtZV9jb3VudCk6ICBSZXR1cm4gemVybyBpZiBhcmcgZG9lcyBub3QKCXN0YXJ0IHdpdGggZGlnaXQsIGFuZCBkb24ndCBjb25zdW1lIGFueSBpbnB1dC4KClR1ZSBNYXkgIDQgMDg6MTA6MjggMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZGVtYW5nbGUpOiBVc2UgJHtzcmNkaXJ9IG5vdCAkXi4KCgkqIHN0cnRvZC5jOiBOZXcgZmlsZSwgbmVlZGVkIGF0IGxlYXN0IGZvciBCU0QgNC4zLgoKU3VuIE1heSAgMiAxMTozMDo0MiAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jIChzeXNfc2lnbGlzdCk6ICBGb3IgQU5TSSBjb21waWxhdGlvbnMsIHR5cGUgaXMKCSJjb25zdCBjaGFyICpjb25zdCIuICBBbHNvIHJlbW92ZSBjb25kaXRpb25hbGl6YXRpb24gb24gX19TVERDX18KCXNpbmNlIGNvbnN0IGlzIGRlZmluZWQgYXdheSBmb3Igbm9uLUFOU0kuCgpXZWQgQXByIDI4IDE5OjI5OjU1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgKi0qLWhwdXguCgkqIGNvbmZpZy9taC1ocHV4OiBOZXcgZmlsZS4KClR1ZSBBcHIgMjcgMTU6MjI6MTkgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiB0bXBuYW0uYzogIEFkZGVkIEFOU0kgdG1wbmFtKCkgZnVuY3Rpb24uCgkqIGZ1bmN0aW9ucy5kZWYsIE1ha2VmaWxlLmluOiAgVXBkYXRlIGFjY29yZGluZ2x5LgoKVHVlIEFwciAyNyAxMzozODozOCAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSk6IEdldCB0aGUgZGVtYW5nbGluZyBvZgoJc3RvcF9fMUEgcmlnaHQuCgpGcmkgQXByIDE2IDIzOjQ4OjI0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjYWx2aW4pCgoJKiBjcGx1cy1kZW0uYzogRGVjbGFyZSBzdHJzdHIgcmV0dXJuIHR5cGUuCgpGcmkgTWFyIDI2IDEyOjAxOjI2IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmM6IEFkZCBzb21lIEFJWCBzaWduYWxzLgoKVGh1IE1hciAyNSAxNToxNzoyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoTUFLRU9WRVJSSURFUyk6IERlZmluZSB0byBiZSBlbXB0eS4KCldlZCBNYXIgMjQgMDE6NTk6MjUgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogYWRkIGluc3RhbGxjaGVjayAmIGR2aSB0YXJnZXRzCgpUaHUgTWFyIDE4IDE0OjA1OjQ0IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGllZWUtZmxvYXQuYzogIE5ldyBmaWxlLCBtb3ZlZCBmcm9tIC4uL2dkYiAoc2luY2UgaXQgaXMKCW5lZWRlZCBieSAuLi9vcGNvZGUvbTY4ay1kaXMuYykuCgpUdWUgTWFyICAyIDE3OjQ3OjMxIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6ICBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIGNmcm9udCB3aXRoIEFSTS4KCkZyaSBGZWIgMjYgMDA6MTc6MDcgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6ICBGaXggbWFpbiBwcm9ncmFtICh3aGVuIGNvbXBpbGVkIHdpdGggLURNQUlOKQoJdG8gYmUgbW9yZSB1c2VmdWwgYXMgYSBmaWx0ZXIuCgpTYXQgRmViIDIwIDIxOjQxOjM5IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsX3RvX2xpYmRpciwgaW5zdGFsbF90b190b29sZGlyKTogR28gaW50byB0aGUKCWRlc3RpbmF0aW9uIGRpcmVjdG9yeSBiZWZvcmUgcnVubmluZyAkKFJBTkxJQiksIGluIGNhc2UgdGhhdAoJcHJvZ3JhbSB0cmllcyB0byBjcmVhdGUgYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcyBwYXJ0IG9mCglpdHMgd29yay4KClRodSBGZWIgMTggMjM6MDA6MTkgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYyAoc3lzX3NpZ2xpc3QpOiAgUmVtb3ZlIHlldCBhbm90aGVyIColXiYlJiQjICJjb25zdCIKCWJlY2F1c2UgQlNEIDQuNCBsYWNrcyBvbmUuICBJc24ndCB0aGlzIGZ1bj8KClRodSBGZWIgMTggMTE6MjQ6MjUgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogIFNldCBmdW5jX2RvbmUgYWZ0ZXIKCWRlbWFuZ2xpbmcgYSB0ZW1wbGF0ZS4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogIEZpeCBzZXZlcmFsIHNtYWxsIGJ1Z3MKCWluIGRlbWFuZ2xpbmcgR05VIHN0eWxlIHRlbXBsYXRlcy4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6ICBGaXggZm9yIHRlbXBsYXRlcyBpbiBHTlUKCXN0eWxlIGNvbnN0cnVjdG9ycy4KCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogIEZpeCBmb3IgdGVtcGxhdGVzIGluIEdOVSBzdHlsZQoJc3RhdGljIGRhdGEgbWVtYmVycy4KClR1ZSBGZWIgMTYgMTc6Mjg6MzUgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogIE1vZGlmeSB0byBpbmNsdWRlIHR5cGUKCW1vZGlmaWVycyBsaWtlIHN0YXRpYyBhbmQgY29uc3QgaW4gcmVtZW1iZXJlZCB0eXBlcy4KClRodSBGZWIgMTEgMjI6MjA6NDcgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVkX3F1YWxpZmllZCk6ICBBZGQgbmV3IHBhcmFtZXRlciB0aGF0IHRlbGxzCgl3aGV0aGVyIHRvIHByZXBlbmQgb3IgYXBwZW5kIHRoZSBxdWFsaWZpZXJzLgoJKiBjcGx1cy1kZW0uYyAoc3RyaW5nX3ByZXBlbmRzKTogIFVzZWQgbm93LCByZW1vdmUgI2lmIDAuCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiAgQ2FsbCBkZW1hbmdsZV9xdWFsaWZpZWQKCXdpdGggcHJlcGVuZGluZy4KCSogY3BsdXNfZGVtLmMgKGdudV9zcGVjaWFsKTogIFJlY29nbml6ZSBzdGF0aWMgZGF0YSBtZW1iZXJzIHRoYXQKCXVzZSBxdWFsaWZpZWQgbmFtZXMuCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQpOiAgQWNjdW11bGF0ZSBxdWFsaWZpZXJzIGluIGEKCXRlbXBvcmFyeSBidWZmZXIgYW5kIHRoZSBwcmVwZW5kIG9yIGFwcGVuZCB0aGVtIHRvIHRoZSByZXN1bHQsCglhcyBzcGVjaWZpZWQgYnkgdGhlIG5ldyAiYXBwZW5kIiBmbGFnLgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6ICBDYWxsIGRlbWFuZ2xlZF9xdWFsaWZpZWQgd2l0aAoJYXBwZW5kaW5nLgoKTW9uIERlYyAyOCAxMDo0NzoxOSAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jIChzaWduYWxfdGFibGUpOiBOb3cgY29uc3QuCgkoaW5pdF9zaWduYWxfdGFibGVzKTogVmFyaWFibGUgZWlwIG5vdyBwb2ludHMgdG8gY29uc3QuCgoJKiBzdHJlcnJvci5jIChlcnJvcl90YWJsZSk6IE5vdyBjb25zdC4KCShpbml0X2Vycm9yX3RhYmxlcyk6IFZhcmlhYmxlIGVpcCBub3cgcG9pbnRzIHRvIGNvbnN0LgoKVHVlIERlYyAxNSAxNTozNjo1MCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIG1lbWNoci5jIChtZW1jaHIpOiAgTmV3IChBTlNJIHN0YW5kYXJkKSBmdW5jdGlvbi4KCSogTWFrZWZpbGUuaW4sIGZ1bmN0aW9ucy5kZWY6ICBBZGRlZCBtZW1jaHIuCgkqIE1ha2VmaWxlLmluIChBUl9GTEFHUyk6IFVzZSByYyBpbnN0YWQgb2Ygbm9uLXN0YW5kYXJkIGNxLgoKV2VkIERlYyAgMiAyMjo0OToxMCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogcmVtb3ZlIHVzZSBvZiBVU0cgYXJvdW5kIDxhbGxvY2EuaD4sIHdoaWNoIG5ldmVyIG1lYW50Cglhbnl0aGluZyBhbnl3YXkKCgkqIGNvbmZpZy9taC17YWl4LGFwb2xsbzY4LG5jcjMwMDAsc3lzdixzeXN2NH06IHJlbW92ZWQgZGVmaW5pdGlvbnMKCW9mIFVTRyBhbmQgVVNHcjQKClRodSBOb3YgMTkgMDM6MDk6MzMgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IFJlY29nbml6ZSBgdycsIGEgd2lkZSBjaGFyYWN0ZXI7CglpdCdzIG5vdyBhIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBBTlNJIFgzSjE2IHdvcmtpbmcgcGFwZXI7IG91dHB1dAoJIndjaGFyX3QiIGZvciBpdC4KCShkZW1hbmdsZV90ZW1wbGF0ZSk6IEFjY2VwdCBgdycgYXMgYW4gaW50ZWdyYWwgdHlwZS4KCSh4bWFsbG9jLCB4cmVhbGxvYyk6IFVzZSBgY2hhciAqJywgbm90IGBQVFInLiAgQ2FzdCBjYWxscyB0byB0aGVpcgoJY291bnRlcnBhcnRzIG1hbGxvYyBhbmQgcmVhbGxvYyB0byBgY2hhciAqJy4KCShtYWluKTogRXhpdCB3aXRoIGEgMCBzdGF0dXMuCgkqIE1ha2VmaWxlLmluIChkZW1hbmdsZSk6IERvbid0IGV4cGVjdCB0aGUgdXNlciB0byBkZWZpbmUKCURFTUFOR0xFLCBpbnN0ZWFkIGZvcmNlIHRvIGJlIGNwbHVzLWRlbS5jLiAgTG9vayBpbiAkKHNyY2RpcikvLi4vaW5jbHVkZQoJZm9yIGRlbWFuZ2xlLmguICBQYXNzIGl0IGFueSBIREVGSU5FUyBvciBYVFJBRkxBR1MuCgpXZWQgTm92IDE4IDE4OjU2OjIwIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEFSX0ZMQUdTKTogIEF2b2lkIHZlcmJvc2l0eS4KCSogY29uZmlnL21oLXN5c3Y0OiAgUmVtb3ZlIEFSX0ZMQUdTIG92ZXJyaWRlLCB1c2UgSU5TVEFMTD1jcCwKCXJlcGxhY2UgVVNHcjQgd2l0aCBIQVZFX1NZU0NPTkYuCgkqIGNvbmZpZy9taC1zb2xhcmlzOiAgUmVtb3ZlOyBtaC1zeXN2NCB3b3JrcyBub3cuCgkqIGdldHBhZ2VzaXplLmM6ICBSZXBsYWNlIFVTR3I0IHdpdGggSEFWRV9TWVNDT05GLgoJKiBjb25maWd1cmUuaW46ICBTaW1wbGlmeSBob3N0IG1hdGNoaW5nIHRhYmxlLCByZW1vdmUgc2VwYXJhdGUKCXNvbGFyaXMgY29uZmlnIGZpbGUuCgpTdW4gTm92IDE1IDA5OjM1OjE2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChpWzM0XTg2LSotc29sYXJpczIqKTogIEFkZCwgdXNlIG1oLXN5c3Y0LgoKVHVlIE5vdiAgMyAyMToyNzowMyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQWRkIGRlY2xzLgoJKHJlbWVtYmVyX3R5cGUpOiBEb24ndCBjYXN0IHhtYWxsb2MuCgkoc3RyaW5nX25lZWQpOiBMaWtld2lzZTsgZG9uJ3QgY2FzdCB4cmVhbGxvYyBlaXRoZXIuCgpGcmkgT2N0IDIzIDA4OjUyOjAxIDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmcywgcmVuYW1lLmM6IGFkZGVkIHNpbXBsZQoJaW1wbGVtZW50YXRpb24gb2YgcmVuYW1lLCBzaW5jZSBzb21lIGJpbnV0aWxzIHByb2dyYW1zIHVzZSBpdC4KClRodSBPY3QgMTUgMTU6MTg6MjIgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYzogIEFkZCBhcHByb3ByaWF0ZSAnY29uc3QnIHRvIHN5c19zaWdsaXN0CglleHRlcm4gZGVjbGFyYXRpb24gKGlmIF9fU1REQ19fKS4gIChOZWVkZWQgZm9yIExpbnV4LikKCSogc3Ryc2lnbmFsLmMgKHN0cnNpZ25hbCk6IEFkZCBjYXN0IHRvIHJlbW92ZSBjb25zdC1uZXNzLgoKRnJpIE9jdCAgOSAwMzoyMjo1NSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChuZWVkZWQuYXdrLCBuZWVkZWQyLmF3ayk6ICBSZW1vdmUgZXJyb25lb3VzIFwncwoJYmVmb3JlICIncywgZGlhZ25vc2VkIGJ5IEJTRCA0LjQgYXdrLgoKVGh1IE9jdCAgOCAxNToyNToxMiAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogY3JlYXRlIGNvbmZpZy5oIGFuZCBuZWVkZWQtbGlzdCB0aHJvdWdoICQoQ09ORklHX0gpCglhbmQgJChORUVERURfTElTVCksIHRvIGdpdmUgc29tZSBob29rcyBmb3IgeGliZXJ0eS4KClRodSBPY3QgIDEgMjM6MzE6NDIgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiB1c2UgY3B1LXZlbmRvci10cmlwbGUgaW5zdGVhZCBvZiBuZXN0ZWQgY2FzZXMKCldlZCBTZXAgMzAgMTE6MjY6NTkgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGFyZ3YuYywgYmFzZW5hbWUuYywgYmNtcC5jLCBiY29weS5jLCBiemVyby5jLAoJY29uY2F0LmMsIGNwbHVzLWRlbS5jLCBmZG1hdGNoLmMsIGdldGN3ZC5jLCBnZXRvcHQuYywgZ2V0b3B0MS5jLAoJZ2V0cGFnZXNpemUuYywgaW5zcXVlLmMsIG1lbWNtcC5jLCBtZW1jcHkuYywgbWVtbW92ZS5jLCBtZW1zZXQuYywKCW9ic3RhY2suYywgc2lnc2V0bWFzay5jLCBzcGFjZXMuYywgc3RyY2hyLmMsIHN0cmVycm9yLmMsCglzdHJyY2hyLmMsIHN0cnNpZ25hbC5jLCBzdHJzdHIuYywgdmZvcmsuYywgdnNwcmludGYuYzoKCUNvbnZlcnQgZnJvbSB1c2luZyBHUEwgdG8gTEdQTC4KClNhdCBTZXAgMjYgMDQ6MDE6MzAgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZXJyb3JzKTogIExlYXZlIGR1bW15Lm8gYW5kIGR1bW15IGFyb3VuZCBzbyB0aGF0Cgl3ZSBjYW4gc2VlIGhvdyB0aGUgbmVlZGVkIGxpc3Qgd2FzIGdlbmVyYXRlZCAoaXQncyBzb21ldGltZXMgd3JvbmcpLgoJKG1vc3RseWNsZWFuKTogIFJlbW92ZSB0aGVtLgoKTW9uIFNlcCAyMSAxNDo1MDo0MiAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBnZXRjd2QuYzogc3VwcGx5IGEgZGVmYXVsdCBpZiBNQVhQQVRITEVOIGlzIG5vdCBkZWZpbmVkLgoKCSogY29uZmlnL21oLWlyaXg0OiBzZXQgRVhUUkFfT0ZJTEVTIHRvIGFsbG9jYS5vLCBmcm9tIFdSUy4KCldlZCBTZXAgIDkgMTI6NDE6NDggMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IFVzZSBYVFJBRkxBR1Mgd2hlbiBjb21waWxpbmcsIHNvIHRoYXQgeGliZXJ0eSB3b3JrcwoJd2hlbiBjcm9zcy1jb21waWxpbmcuCgpUaHUgU2VwICAzIDEzOjI5OjM5IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBzZW5kYWkuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAoZGVtYW5nbGVfcHJlZml4KTogcmVkdWN0aW9uIGluIHN0cmVuZ3RoIG9mIHN0cnN0cgoJICBhcyBhIHRpbWUgb3B0aW1pemF0aW9uLgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlKTogcmVtb3ZlIHN0cnBicmsgdGVzdC4gIEFwcGVhcnMgdG8KCSAgYmUgbW9yZSBleHBlbnNpdmUgdGhhbiBzaW1wbHkgZGVtYW5nbGluZy4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19tYXRjaCk6IG5ldyBmdW5jdGlvbi4KClR1ZSBTZXAgIDEgMTU6MjQ6MDQgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6ICAjaW5jbHVkZSA8c3RkaW8uaD4sIHRvIGRlZmluZSBOVUxMLgoJRGVmaW5lIGN1cnJlbnRfZGVtYW5nbGluZ19zdHlsZS4KClN1biBBdWcgMzAgMTc6NTg6MTkgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6ICBOZXcgZmlsZSwgbW92ZWQgZnJvbSAuLi9nZGIuCgkqIGNwbHVzLWRlbS5jIChzZXRfY3BsdXNfbWFya2VyX2Zvcl9kZW1hbmdsaW5nKTogIE5ldyBleHBvcnRlZAoJZnVuY3Rpb24sIHRvIGF2b2lkIGNvbXBpbGluZyBpbiB0YXJnZXQtZGVwZW5kZW5jeSBmb3IgQ1BMVVNfTUFSS0VSLgoJKiBjcGx1cy1kZW0uYyAoY3BsdXNfZGVtYW5nbGUpOiAgQWxsb3cgZGVtYW5nbGluZyBzdHlsZSBvcHRpb24KCXRvIGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlciwgYnV0IHVzaW5nIHRoZSBnbG9iYWwgdmFyaWFibGUKCWN1cnJlbnRfZGVtYW5nbGluZ19zdHlsZSBhcyBhIGRlZmF1bHQuCgkqIE1ha2VmaWxlLmluOiAgVXBkYXRlIGZvciBjcGx1cy1kZW0uYwoKU2F0IEF1ZyAyOSAxMDo0NDowOSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogIE1lcmdlIGluIGNvbW1lbnQgY2hhbmdlcyBmcm9tIEZTRiB2ZXJzaW9uLiAgTm93CgltYXRjaGVzIHRoZSBGU0YgdmVyc2lvbiBleGFjdGx5LgoKRnJpIEF1ZyAyOCAxODozOTowOCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYyAoQ0FMTF9GUkVFRlVOKTogIENhbid0IHVzZSA/OiB3aXRoIHZvaWQgdmFsdWVzIChhdAoJbGVhc3Qgb24gbG9zaW5nIERFQ3N0YXRpb25zISk7IHVzZSBpZi10aGVuLWVsc2UgaW5zdGVhZC4KCldlZCBBdWcgMTkgMTQ6NDA6MzQgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFsd2F5cyBjcmVhdGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLgoKTW9uIEF1ZyAxMCAxNzozMzo0MCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgogICAgICAgKiBNYWtlZmlsZS5pbjogY2xlYW4gdXAgZGVmaW5pdGlvbiBvZiBDRklMRVMsIG1vcmUgY29tbWVudHMKClNhdCBBdWcgIDggMjM6MTA6NTkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBnZXRvcHQuYyAobXlfaW5kZXgpOiAgTWFrZSBmaXJzdCBhcmcgY29uc3QgdG8gbWF0Y2ggc3RyY2hyLAoJd2hpY2ggaXQgc29tZXRpbWVzIGlzIHJlbWFwcGVkIHRvLgoKU2F0IEF1ZyAgMSAxMzo0ODo1MCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYyAoREVGQVVMVF9BTElHTk1FTlQpOiAgVXBkYXRlIHRvIG1hdGNoIEZTRiB2ZXJzaW9uLgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX2JlZ2luKTogIEluaXRpYWxpemUgdXNlX2V4dHJhX2FyZy4KCSogb2JzdGFjay5jIChfb2JzdGFja19iZWdpbl8xKTogIE5ldywgZnJvbSBGU0YgdmVyc2lvbi4KCk1vbiBKdWwgMjAgMjE6MDc6NTggMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKENBTExfQ0hFQ0tGVU4sIENBTExfRlJFRUZVTik6ICBVc2UgdXNlX2V4dHJhX2FyZyBhbmQKCWV4dHJhX2FyZy4KCSogb2JzdGFjay5jIChfb2JzdGFja19iZWdpbik6ICBSZW1vdmUgYXJlYV9pZCBhbmQgZmxhZ3MgYXJndW1lbnRzCgkocHJldmlvdXNseSBhZGRlZCBmb3IgbW1hbGxvYyBzdXBwb3J0LCBpbnRlcmZhY2UgaGFzIGNoYW5nZWQpLgoJQWxzbyBjb252ZXJ0IGZsYWdzIHVzYWdlIHRvIHVzZSB1c2VfZXh0cmFfYXJnIGFuZCBtYXliZV9lbXB0eV9vYmplY3QuCgpGcmkgSnVsIDEwIDAwOjQxOjUzIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYXJndi5jOiAgTW92ZSBleHBhbmRhcmd2IGlubGluZSBhbmQgZWxpbWluYXRlIHN0YXRpYyB2YXJpYWJsZXMuCglSZXdyaXRlIHRvIGFsd2F5cyBhbGxvY2F0ZSBpbiBwb3dlcnMgb2YgdHdvLiAgRml4IHRvIHJldHVybiBhbgoJYXJndiB3aXRoIGEgc2luZ2xlIG51bGwgc3RyaW5nIGFyZyBpZiBwYXNzZWQgYSBudWxsIHN0cmluZy4KCkZyaSBKdWwgIDMgMjA6Mjc6MjkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiByYW5kb20uYywgc2lnc2V0bWFzay5jLCBzdHJlcnJvci5jLCBzdHJzaWduYWwuYzogIFJlbW92ZQoJIih2b2lkKSIgY2FzdHMgZnJvbSBmdW5jdGlvbiBjYWxscyB3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIGlzCglpZ25vcmVkLCBpbiBhY2NvcmRhbmNlIHdpdGggR05VIGNvZGluZyBzdGFuZGFyZHMuCgpNb24gSnVuIDI5IDEwOjU0OjE5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogYmNvcHkuYywgc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmM6ICBMaW50LgoKVGh1IEp1biAyNSAwOToxODo0MSAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAcnRsLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogbWVyZ2UgY2hhbmdlcyBmcm9tIG1ha2UuCgpUaHUgSnVuIDI1IDA0OjQzOjIyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYWxsb2NhLmM6ICBJbmNvcnBvcmF0ZSBmaXhlcyBmcm9tIGdkYi9hbGxvY2EuYy4KCUZJWE1FOiAgRXZlbnR1YWxseSBtb3ZlIGdkYidzIGFsbG9jYSBjb25maWd1cmF0aW9uIGZpbGVzIGhlcmUsCglhbmQgcmVtb3ZlIGdkYi9hbGxvY2EuYyBhbmQgaXRzIE1ha2VmaWxlLmluIHN1cHBvcnQuCgpUdWUgSnVuIDIzIDIxOjU2OjMwIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZHVtbXkuYzogIERlZmluZSBOT1RISU5HIHRvIC8qbm90aGluZyovLCBjaGFuZ2UgcmV0dXJuIHR5cGUKCW9mIG1haW4gdG8gaW50IGFuZCByZXR1cm4gemVyby4KCSogZnVuY3Rpb25zLmRlZjogIFN1cHBseSBOT1RISU5HIGFzIHRoZSBmb3VydGggYXJnIHRvIG1hY3JvcwoJdGhhdCBkb24ndCBoYXZlIGFuIGV4cGxpY2l0IGFyZywgdG8gc2F0aXNmeSBwaWNreSBwcmVwcm9jZXNzb3JzLgoKV2VkIEp1biAxNyAxODoxMzo1OCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIENsZWFuIHVwICpjbGVhbiBydWxlcywgYXMgcGVyIHN0YW5kYXJkcy50ZXhpLgoKVHVlIEp1biAxNiAxNjoxMTo1OSAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAcnRsLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuYywgZ2V0b3B0MS5jOiBtZXJnZWQgbGFyZ2VseSBncmF0dWl0b3VzLCBtb3N0bHkKCSAgd2hpdGVzcGFjZSBkaWZmcyBmcm9tIG90aGVyIHByZXAgZGlzdHJpYnV0aW9ucy4KCk1vbiBKdW4gMTUgMTI6MjU6NDYgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtbmNyMzAwMCAoSU5TVEFMTCk6ICBEb24ndCB1c2UgL3Vzci91Y2IvaW5zdGFsbCwKCWl0IGlzIGJyb2tlbiBvbiBuY3IgMzAwMCdzLgoKTW9uIEp1biAxNSAwMTowMzoyNiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHNpZ3NldG1hc2suYzogIFJld3JpdGUuICBPbGQgb25lIHdhcyB2ZXJ5IGNvbmZ1c2VkIGFib3V0IGl0cwoJYXJndW1lbnRzIGFuZCByZXN1bHQuICBOZXcgb25lIGNhbid0IGRvIG11Y2gsIGJ1dCBhdCBsZWFzdCBrbm93cwoJd2hhdCBpdCBjYW4ndCBkbywgYW5kIGl0J3MgZ29vZCBlbm91Z2ggZm9yIEdEQidzIHVzZS4KClN1biBKdW4gMTQgMTU6MTc6NDAgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9ucy5kZWY6ICBVc2UgcHJvcGVyIHByb3RvdHlwZSBmb3Igc3RydG91bC4KCkZyaSBKdW4gMTIgMTk6MjI6NDAgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIEFkZCByYW5kb20uYy4KCSogY29uZmlnL21oLSo6ICBVc2UgInRydWUiIHJhdGhlciB0aGFuICJlY2hvID4vZGV2L251bGwiIGZvciByYW5saWIuCgkqIGNvbmZpZ3VyZS5pbjogIHVwZGF0ZSBzb2xhcmlzMiBjb25maWcuCgpXZWQgSnVuIDEwIDE2OjMxOjI5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogcmFuZG9tLmM6ICBBZGQgZm9yIHJhbmRvbSgpIGFuZCBzcmFuZG9tKCkuCgkqIGZ1bmN0aW9ucy5kZWY6ICBBZGQgcmFuZG9tCgpUdWUgSnVuICA5IDE3OjI3OjE4IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlnL3ttaC1uY3IzMDAwLCBtaC1zeXN2NH06ICBBZGQgZGVmaW5pdGlvbiBmb3IgSU5TVEFMTAoJdXNpbmcgL3Vzci91Y2IvaW5zdGFsbC4KCk1vbiBKdW4gIDEgMTM6MjA6MTcgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogc3RyZXJyb3IuYzogIEtsdWRnZSB0byBndWFyZCBhZ2FpbnN0IGEgY29uZmxpY3Qgd2l0aAoJcG9zc2libGUgZGVjbGFyYXRpb24gb2Ygc3lzX2Vycmxpc3QgaW4gZXJybm8uaC4KClN1biBNYXkgMzEgMTU6MDc6NDcgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL21oLXNvbGFyaXM6IGFkZCBzb2xhcmlzMiBjb25maWcgc3VwcG9ydC4KCkZyaSBNYXkgMjkgMTc6MjM6MjMgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogc2lnc2V0bWFzay5jOiAgI2lmZGVmIG91dCBzaWdzZXRtYXNrIGlmIFNJR19TRVRNQVNLCglpcyBub3QgZGVmaW5lZCAoc2hvdWxkIGJlIGRlZmluZWQgaW4gc2lnbmFsLmgsIHNheXMgUG9zaXguKS4KCk1vbiBNYXkgMTggMTc6MzU6MDQgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogbWVyZ2VkIGNoYW5nZXMgZnJvbSBtYWtlLTMuNjIuMTEuCgpGcmkgTWF5ICA4IDE0OjUzOjA3IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6IG1lcmdlZCBjaGFuZ2VzIGZyb20gYmlzb24tMS4xOC4KClR1ZSBNYXkgIDUgMTE6NTE6NDAgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBEb24ndCBoYXZlICQoRVhUUkFfT0ZJTEVTKSBkZXBlbmQgb24gY29uZmlnLmgsCglzaW5jZSB0aGF0IGludHJvZHVjZXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5LgoJKCQoRVhUUkFfT0ZJTEVTKSBhcmUgdXNlZCB0byBidWlsZCBjb25maWcuaC4pCgoJKiBzdHJ0b3VsLmM6ICBGaXhlcyB0byBoYW5kbGUgbm9uLWRlY2ltYWwgYmFzZXMgYmV0dGVyLgoKV2VkIEFwciAyMiAwOToyNzo1MSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1uY3IzMDAwOiAgUmVwbGFjZSBNSU5VU19HIHdpdGggQ0ZMQUdTLgoJKiBNYWtlZmlsZS5kb3M6ICBGaW5pc2ggTUlOVVNfRyBlcmFkaWNhdGlvbi4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6ICBBZGQgc3Ryc2lnbmFsLmMuCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiAgQWRkIHN0cmVycm9yLm8gc3Ryc2lnbmFsLm8KCSogTWFrZWZpbGUuaW4gKG5lZWRlZC1saXN0KTogIFNwbGl0IGNyZWF0aW9uIG9mIGVycm9ycyBmaWxlIHRvCglzZXBhcmF0ZSBtYWtlIHRhcmdldC4KCSogTWFrZWZpbGUuaW4gKGNvbmZpZy5oLCBuZWVkZWQyLmF3aywgZXJyb3JzKTogIE5ldyB0YXJnZXRzLgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiAgU3BsaXQgdG8gbXVsdGlwbGUgbGluZXMsIGFkZCBuZWVkZWQyLmF3awoJYW5kIGNvbmZpZy5oLgoJKiBkdW1teS5jIChERUZGVU5DLCBERUZWQVIpOiAgQWRkIGRlZmluZXMgYW5kIHVuZGVmcy4KCSogZnVuY3Rpb25zLmRlZiAoc3RyZXJyb3IpOiAgUmVtb3ZlIGZyb20gb3B0aW9uYWwgbGlzdC4KCSogZnVuY3Rpb25zLmRlZiAoc3lzX25lcnIsIHN5c19lcnJsaXN0LCBzeXNfc2lnbGlzdCk6ICBERUZWQVIncwoJKiBmdW5jdGlvbnMuZGVmIChzdHJlcnJvciwgcHNpZ25hbCk6ICBERUZGVU5DJ3MKCSogc3RyZXJyb3IuYzogIFJld3JpdGUgZnJvbSBzY3JhdGNoIHRvIHVzZSBzeXNfZXJybGlzdCBvbmx5IGlmCglhdmFpbGFibGUsIGFkZCBlcnJub19tYXgoKSwgYWRkIHN0cmVycm5vKCksIGFkZCBzdHJ0b2Vycm5vKCksCglhZGQgdGVzdCBkcml2ZXIuCgkqIHN0cnNpZ25hbC5jOiAgTmV3IGZpbGUsIHNpZ25hbCBlcXVpdmFsZW50IHRvIHN0cmVycm9yLmMuCglVc2VzIHN5c19zaWdsaXN0IGlmIGF2YWlsYWJsZSwgZGVmaW5lcyBzaWdub19tYXgoKSwgc3Ryc2lnbmFsKCksCglzdHJzaWdubygpLCBzdHJ0b3NpZ25vKCksIHBzaWduYWwoKSwgYW5kIHRlc3QgZHJpdmVyLgoKTW9uIEFwciAyMCAyMDo0OTozMiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBkbyBub3QgcHJpbnQgcmVjdXJzaW9uIGxpbmUuCgoJKiBNYWtlZmlsZS5pbjogYWxsb3cgQ0ZMQUdTIHRvIGJlIHBhc3NlZCBpbiBmcm9tIGNvbW1hbmQgbGluZS4KCSAgUmVtb3ZlZCBNSU5VU19HLiAgRGVmYXVsdCBDRkxBR1MgdG8gLWcuCgpNb24gQXByIDIwIDEyOjU3OjQ2IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1haXg6ICBOZXcuICBFWFRSQV9PRklMRVMgbGlzdHMgY29weXNpZ24ubywKCXNvIGxpYmcrKyB1c2VycyBkb24ndCBoYXZlIHRvIGJlIGluY29udmVuaWVuY2VkIGJ5IGEKCWxpYmMuYSBidWcgKGxpYmMuYSBuZWVkcyBjb3B5c2lnbiwgYnV0IGRvZXNuJ3QgZGVmaW5lIGl0ISkuCgkqIGNvbmZpZ3VyZS5pbjogIFVzZSBjb25maWcvbWgtYWl4LgoJKiBzdHJ0b3VsLmM6ICBIYW5kbGUgJy0nIGFzIHJlcXVpcmVkIGJ5IEFOU0kuCglDbGVhbiB1cCByYWRpeCBoYW5kbGluZy4KCSogc3Ryc3RyLmM6ICBGaXggYnVnZ3kgYWxnb3JpdGhtLgoJKiBNYWtlZmlsZS5pbjogIENoYW5nZSBzbyB0aGF0ICR7RVhUUkFfT0ZJTEVTfSBpcwoJYXBwZW5kZWQgdG8gbmVlZGVkLWxpc3QgKHdoaWNoIGlzIHVzZWQgYnkgbGliZysrKS4KCkZyaSBBcHIgMTAgMjI6NTE6NDEgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBSZWNvZ25pemUgbmV3IG5jcjMwMDAgY29uZmlnLgoJKiBjb25maWcvbWgtbmNyMzAwMDogIE5ldyBjb25maWcgZmlsZS4KCldlZCBBcHIgIDEgMjM6MzE6NDMgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhcmd2LmMsIGR1bW15LmM6ICBMaW50LgoKVHVlIE1hciAzMSAxODo0Njo0NCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1zeXN2NDogIE5ldyBjb25maWcgZmlsZS4KCSogY29uZmlndXJlLmluIChob3N0X21ha2VmaWxlX2ZyYWcpOiAgU2V0IHRvIGNvbmZpZy9taC1zeXN2NCBmb3IKCWhvc3Rfb3MgPT0gc3lzdjQuCgkqIGdldHBhZ2VzaXplLmM6ICBGb3IgU1ZSNCwgdXNlIHN5c2NvbmYoX1NDX1BBR0VTSVpFKSB0byBnZXQKCXBhZ2VzaXplLgoKU3VuIE1hciAyOSAxMjoyNjo0MiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiAgTGludC4KCkZyaSBNYXIgMjcgMDg6MzI6NTUgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBmdW5jdGlvbnMuZGVmIChhbGxvY2EpOiAgRml4IHJldHVybiB0eXBlIGFuZCBhcmdzIHRvIGF2b2lkCgl0eXBlIGNsYXNoIHdpdGggZ2NjJ3MgYnVpbHRpbiBhbGxvY2EuCgpUdWUgTWFyIDI0IDIzOjMzOjQyIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluLCBjb25maWcvbWgtaXJpeDQ6IGlyaXg0IHN1cHBvcnQuCgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZiwgYWxsb2NhLmM6IGFkZGVkIGFsbG9jYS4KClR1ZSBNYXIgMjQgMTc6MzQ6NDYgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYyAoQ0FMTF9GUkVFRlVOKTogIE1ha2UgaXQgY29tcGlsZSBvbiBERUNzdGF0aW9ucy4KClRodSBNYXIgMTkgMTM6NTc6NDIgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBhcmd2LmM6ICBGaXggdmFyaW91cyBleHRlcm5hbCBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZQoJY29ycmVjdCBpbiBhbiBBTlNJIGNvbXBpbGF0aW9uIGVudmlyb25tZW50LgoKU2F0IE1hciAxNCAxNzoyODoxNyAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogIENoYW5nZXMgdG8gc3VwcG9ydCBjYWxsaW5nIG1tYWxsb2MgZnVuY3Rpb25zLAoJd2hpY2ggdGFrZSBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IG92ZXIgbWFsbG9jIGZ1bmN0aW9ucy4KCkZyaSBNYXIgIDYgMjI6MDE6MTAgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBhZGRlZCBjaGVjayB0YXJnZXQuCgpUaHUgRmViIDI3IDIyOjE5OjM5IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogYXJndi5jOiAgI2luY2x1ZGUgYWxsb2NhLWNvbmYuaCAobmVlZGVkIGJ5IEFJWCkuCgpXZWQgRmViIDI2IDE4OjA0OjQwIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbjogcmVtb3ZlZCB0cmFjZXMgb2YgbmFtZXN1YmRpciwKCSAgLXN1YmRpcnMsICQoc3ViZGlyKSwgJCh1bnN1YmRpciksIHNvbWUgcmNzIHRyaWdnZXJzLiAgRm9yY2VkCgkgIGNvcHlyaWdodHMgdG8gJzkyLCBjaGFuZ2VkIHNvbWUgZnJvbSBDeWdudXMgdG8gRlNGLgoKU2F0IEZlYiAyMiAwMTowOToyMSAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYXJndi5jOiAgQ2hlY2sgaW4gRnJlZCdzIHZlcnNpb24gd2hpY2ggZml4ZXMgcHJvYmxlbXMgd2l0aAoJYWxsb2NhKCkuCgpGcmkgRmViICA3IDIxOjQ2OjA4IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBtYWtlZmlsZS5kb3M6ICBSZW1vdmUgTlVMIHRvIGtlZXAgcGF0Y2ggZnJvbSBmYWlsaW5nLgoKVGh1IEphbiAzMCAyMjo0ODo0MSAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogZ2V0b3B0LmMgKF9nZXRvcHRfaW50ZXJuYWwpOiAgRml4IHVzYWdlIG9mIGVudW0gaGFzX2FyZy4KCk1vbiBKYW4gMjAgMTg6NTM6MjMgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCiAJKiBnZXRvcHQuYywgZ2V0b3B0MS5jLCAuLi9pbmNsdWRlL2dldG9wdC5oOiAgR2V0IGxhdGVzdCB2ZXJzaW9ucy4KClNhdCBKYW4gMTggMTY6NTM6MDEgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBhcmd2LmM6ICBOZXcgZmlsZSB0byBidWlsZCBhbmQgZGVzdHJveSBzdGFuZGFyZCBhcmd1bWVudAoJdmVjdG9ycyBmcm9tIGEgY29tbWFuZCBzdHJpbmcuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBhcmd2LmMgYW5kIGFyZ3YubyB0byBhcHByb3ByaWF0ZSBtYWNyb3MuCgpGcmkgRGVjIDIwIDEyOjEyOjU3IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgQ2hhbmdlIHN2cjQgcmVmZXJlbmNlcyB0byBzeXN2NC4KCgkqIHJpbmRleC5jOiAgRGVjbGFyZSByZXR1cm4gdHlwZSBvZiBleHRlcm5hbGx5IHVzZWQgZnVuY3Rpb24KCXN0cnJjaHIoKS4KClRodSBEZWMgMTkgMTg6MzU6MDMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIFJlbW92ZSAiKioqIiBpbiBub3JtYWwgb3V0cHV0LCBzaW5jZSBNYWtlIHByb2R1Y2VzCgl0aGlzIG9uIGVycm9ycywgYW5kIGl0J3MgY29udmVuaWVudCB0byBzZWFyY2ggZm9yLgoKVHVlIERlYyAxNyAyMzoyMTozMCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIG1lbWNtcC5jLCBtZW1jcHkuYywgbWVtbW92ZS5jLCBtZW1zZXQuYywgc3RyY2hyLmMsIHN0cnJjaHIuYzoKCU5ldyBBTlNJIGZ1bmN0aW9ucy4gIFRoZSBvbGQgbm9uLUFOU0kgZnVuY3Rpb25zIChzdWNoIGFzIGJjb3B5KQoJc2hvdWxkIGJlIGF2b2lkZWQuCgkqIGJjb3B5LmM6ICBGaXggdG8gY29ycmVjdGx5IGhhbmRsZSBvdmVybGFwcGluZyByZWdpb25zLgoJKiBpbmRleC5jLCByaW5kZXguYzogIFJlLXdyaXRlIGluIHRlcm1zIG9mIHN0cmNocigpIGFuZCBzdHJyY2hyKCkuCgkqIGZ1bmN0aW9ucy5kZWY6ICBBZGQgdGhlIG5ldyBmdW5jdGlvbnMuCgkqIGZ1bmN0aW9ucy5kZWY6ICBBZGQgNHRoIHBhcmFtZXRlciB0byBERUYgbWFjcm8sCglhbiBhbnNpZGVjbC5oLXN0eWxlIHByb3RvdHlwZS4KCSogZHVtbXkuYzogIFVzZSBleHBhbmRlZCBERUYgbWFjcm8gdG8gY3JlYXRlIGEgZHVtbXkgZnVuY3Rpb24KCWNhbGwsIHdpdGggY29ycmVjdCBwYXJhbWV0ZXIgdHlwZXMuICAoVGhpcyBhdm9pZHMgc29tZQoJY29tcGxhaW50cyBmcm9tIGdjYyBhYm91dCBwcmVkZWZpbmVkIGJ1aWx0aW5zLikKCglNb3ZlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGNvbmZpZy9taC1kZWZhdWx0IGludG8gTWFrZWZpbGUuaW4uCglUaGlzIGF2b2lkIGR1cGxpY2F0aW9uLCBhbmQgc2ltcGxpZmllcyB0aGluZ3Mgc2xpZ2h0bHkuCgkqIE1ha2VmaWxlLmluOiAgVHdlYWsgc28gd2UgZG9uJ3QgbmVlZCBjb25maWcvbWgtZGVmYXVsdC4KCSogUkVBRE1FOiAgVXBkYXRlLgoJKiBjb25maWd1cmUuaW46ICBObyBsb25nZXIgbmVlZCBjb25maWcvbWgtZGVmYXVsdC4KCSogY29uZmlnL21oLWRlZmF1bHQ6ICBEZWxldGVkLgoJKiBjb25maWcvbWgtc3lzdjogIFJlbW92ZSBsaW5lcyBjb3BpZWQgZnJvbSBvbGQgbWgtZGVmYXVsdC4KClR1ZSBEZWMgMTcgMDU6NDY6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBmZG1hdGNoLmMgKGZkbWF0Y2gpOiAgRG9uJ3QgY29tcGFyZSBzdF9yZGV2LCB3aGljaCBpcyBmb3IKCSdta25vZCcgZGV2aWNlIG51bWJlcnMuCgpNb24gRGVjIDE2IDEyOjI1OjM0IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZmRtYXRjaC5jLCBNYWtlZmlsZS5pbjogIEFkZCBuZXcgZnVuY3Rpb24gdGhhdCB0YWtlcyB0d28KCW9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgcmV0dXJucyBub256ZXJvIGlmIHRoZXkgcmVmZXIgdG8KCXRoZSBzYW1lIGZpbGUsIHplcm8gb3RoZXJ3aXNlLiAgKHVzZWQgaW4gZ2RiKQoKV2VkIERlYyAxMSAxNzo0MDozOSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCUZyb20gREo6CgkqIG1zZG9zLmM6IHN0dWIgZnVuY3Rpb25zIGZvciBkb3MuCgkqIG1ha2VmaWxlLmRvcywgY29uZmlnZGouYmF0OiBuZXcuCgkqIGdldG9wdC5jOiBEb24ndCBpbmNsdWRlIGFsbG9jYS1jb25mLmggaW4gYSBHTzMyIHdvcmxkLgoKClR1ZSBEZWMgMTAgMDQ6MTQ6NDkgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluZm9kaXIgYmVsb25ncyBpbiBkYXRhZGlyLgoKRnJpIERlYyAgNiAyMzoyNjo0NSAxOTkxICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2ggYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogcmVtb3ZlIHNwYWNlcyBmb2xsb3dpbmcgaHlwaGVucyBiZWNhdXNlIGJzZCBtYWtlCgkgIGNhbid0IGNvcGUuICBhZGRlZCBzdGFuZGFyZHMudGV4dCBzdXBwb3J0LiAgaW5zdGFsbCB1c2luZwoJICBJTlNUQUxMX0RBVEEuCgoJKiBjb25maWd1cmUuaW46IHJlbW92ZSBjb21tb250YXJnZXRzIGFzIGl0IGlzIG5vIGxvbmdlciBhCgkgIHJlY29nbml6ZWQgaG9vay4KClRodSBEZWMgIDUgMjI6NDY6NDYgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGlkZXN0ZGlyIGFuZCBkZGVzdGRpciBnbyBhd2F5LiAgQWRkZWQgY29weXJpZ2h0cwoJICBhbmQgc2hpZnQgZ3BsIHRvIHYyLiAgQWRkZWQgQ2hhbmdlTG9nIGlmIGl0IGRpZG4ndCBleGlzdC4gZG9jZGlyCgkgIGFuZCBtYW5kaXIgbm93IGtleWVkIG9mZiBkYXRhZGlyIGJ5IGRlZmF1bHQuCgpGcmkgTm92IDIyIDE5OjE1OjI5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBmaW5kLW5lZWRlZC5hd2sgZG9lcyBub3QgZml0IGluIDE0IGNoYXJzLgoKCSogTWFrZWZpbGUuaW46ICBTdXBwcmVzcyBlcnJvciBjaGVja2luZyB3aGVuIGNvbXBpbGluZyB0aGUgdGVzdAoJcHJvZ3JhbSwgYmVjYXVzZSBVbHRyaXggbWFrZS9zaCBhYm9ydHMgdGhlcmUgZHVlIHRvIGEgYnVnLgoKRnJpIE5vdiAyMiAxMjoyMzoxNyAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgUmUtZGlkIGhvdyBFWFRSQV9PRklMRVMgaXMgdXNlZCB0byBiZSBtb3JlIHVzZWZ1bC4KCSogUkVBRE1FOiAgRXhwbGFpbmVkIGhvdyB0aGUgYXV0by1jb25maWd1cmF0aW9uIHdvcmtzLAoJYW5kIGhvdyB0byBhZGQgbmV3IGZpbGVzIGFuZC9vciBjb25maWd1cmF0aW9ucy4KCkZyaSBOb3YgMjIgMDk6NDU6MjMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzdHJ0b3VsLmM6ICBBdm9pZCBkZWZpbmluZyBVTE9OR19NQVggaWYgYWxyZWFkeSBkZWZpbmVkOwoJY2FzdCBhIGNvbnN0IGNoYXIgKiB0byBjaGFyICogZm9yIHBlZGFudHMuCgoJKiBnZXRvcHQuYzogIE9ubHkgZGVmaW5lICJjb25zdCIgYWZ0ZXIgbG9jYWwgaW5jbHVkZSBmaWxlcyBnZXQgdG8sCglhbmQgb25seSBpZiB0aGV5IGhhdmVuJ3QgZGVmaW5lZCBpdC4KClRodSBOb3YgMjEgMTY6NTg6NTMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBnZXRjd2QuYyAocmVtb3ZlIGdldHdkLmMpOiBHTlUgY29kZSBzaG91bGQgY2FsbCBnZXRjd2QoKS4gIFdlCgllbXVsYXRlIGl0IHdpdGggZ2V0d2QoKSBpZiBhdmFpbGFibGUuICBUaGlzIGF2b2lkcyBjYWxsZXJzIGhhdmluZwoJdG8gZmluZCBhIE1BWFBBVEhMRU4gb3IgUEFUSF9NQVggdmFsdWUgZnJvbSBzb21ld2hlcmUuCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmOiAgZ2V0d2QtPmdldGN3ZC4KCSogY29uZmlndXJlLmluOiAgVXNlIGdlbmVyaWMgY2FzZSBmb3IgZXZlcnkgc3lzdGVtLgoJKiBjb25maWcvbWgte2RlbHRhODgsbWFjaCxyczYwMDAsc3ZyNH06ICBSZW1vdmUuCgkqIGNvbmZpZy9taC1zeXN2OiAgVXNlIGRlZmF1bHQgaGFuZGxpbmcsIGp1c3QgYWRkIC1EVVNHLgoKVGh1IE5vdiAxNCAxMDo1ODowNSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBjb25maWcvbWgtZGVmYXVsdDogUmUtZG8gbWFrZSBtYWdpYwoJc28gdGhhdCBmb3IgdGhlIGRlZmF1bHQgKCJhdXRvbWF0aWMiKSBtb2RlIHdlIG9ubHkKCWNvbXBpbGUgdGhlIGZpbGVzIHdlIGFjdHVhbGx5IG5lZWQuICBEbyB0aGlzIHVzaW5nCglhIHJlY3Vyc2l2ZSBtYWtlOiAgVGhlIHRvcC1sZXZlbCBnZW5lcmF0ZXMgdGhlIGxpc3QKCW9mIG5lZWRlZCBmaWxlcyAobG9vc2VseSwgdGhlIG9uZXMgbWlzc2luZyBpbiBsaWJjKSwKCWFuZCB0aGVuIHBhc3NlcyB0aGF0IGxpc3QgdG8gdGhlIHJlY3Vyc2l2ZSBtYWtlLgoJKiBjb25maWcvbWgtbWFjaDogIFJlbW92ZSBvYnNvbGV0ZSBTVFJFUlJPUi17QyxPfSBtYWNyb3MuCgpUdWUgTm92IDEyIDE5OjEwOjU3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCVJTLzYwMDAgaG9zdCBzdXBwb3J0IChncnVtYmxlKS4KCgkqIGNvbmZpZ3VyZS5pbjogIEJ1aWxkIGFsbG9jYS1jb25mLmggZmlsZSBmcm9tIGFsbG9jYS1ub3JtLmgKCShldmVyeXRoaW5nIGVsc2UpIG9yIGFsbG9jYS1ib3RjaC5oIChycy82MDAwKS4KCSogTWFrZWZpbGUuaW46ICBJbmNsdWRlIC4gb24gdGhlIGluY2x1ZGUgcGF0aC4KCSogZ2V0b3B0LmM6ICBVc2UgYWxsb2NhLWNvbmYuaC4KCSogYWxsb2NhLW5vcm0uaDogIEhvdyB0byBkZWNsYXJlIGFsbG9jYSBvbiByZWFzb25hYmxlIG1hY2hpbmVzLgoJKiBhbGxvY2EtYm90Y2guaDogSG93IHRvIGRlY2xhcmUgYWxsb2NhIG9uIGJyYWluZGVhZCBtYWNoaW5lcy4KClR1ZSBOb3YgMTIgMDk6MjE6NDggMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25jYXQuYyA6ICBOZXcgZmlsZSwgbGlrZSBjb25jYXQoKSBpbiBnZGIgYnV0IGNhbiB0YWtlIGEKCXZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgcmF0aGVyIHRoYW4gZml4ZWQgYXQgMyBhcmdzLiAgRm9yCglub3csIGNsaWVudCBhcHBsaWNhdGlvbnMgbXVzdCBzdXBwbHkgYW4geG1hbGxvYygpLCB3aGljaCBpcyBhCglmcm9udCBlbmQgZnVuY3Rpb24gdG8gbWFsbG9jKCkgdGhhdCBkZWFscyB3aXRoIG91dC1vZi1tZW1vcnkKCWNvbmRpdGlvbnMuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBjb25jYXQuYyBhbmQgY29uY2F0Lm8gdG8gYXBwcm9wcmlhdGUgbWFjcm9zLgoKU2F0IE5vdiAgOSAxMzoyOTo1OSAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1zdnI0OiAgQWRkIHNpZ3NldG1hc2sgdG8gbGlzdCBvZiByZXF1aXJlZCBmdW5jdGlvbnMuCgpTdW4gTm92ICAzIDExOjU3OjU2IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogdnNwcmludGYuYzogIE5ldyBmaWxlLgoJKiBmdW5jdGlvbnMuZGVmLCBNYWtlZmlsZS5pbjogIEFkZCB2c3ByaW50Zi4KClN1biBPY3QgMjcgMTY6MzE6MjIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy9taC1yczYwMDA6ICBBZGQgcnMvNjAwMCBob3N0IHN1cHBvcnQuCgkqIE1ha2VmaWxlLmluOiAgQ29tcGlsZSB3aXRoIGRlYnVnIGluZm8uCgpGcmkgT2N0IDI1IDE3OjAxOjEyIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbiwgYW5kIG5ldyBmaWxlczogZHVtbXkuYywgZnVuY3Rpb25zLmRlZiwKCWNvbmZpZy9tZi1kZWZhdWx0OiAgQWRkZWQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gbW9kZSwKCXdoaWNoIGluY2x1ZGVzIGludG8gbGliaWJlcnR5LmEgZnVuY3Rpb25zIHRoYXQgYXJlICJtaXNzaW5nIiBpbiBsaWJjLgoJKiBzdHJkdXAuYywgdnByaW50Zi5jLCB2ZnByaW50Zi5jOiBOZXcgZmlsZXMuCgpUaHUgT2N0IDI0IDAyOjI5OjI2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlnL2htYWtlLXN2cjQ6IE5ldyBmaWxlLgoKCSogY29uZmlnL2htYWtlLXN5c3Y6IEFkZCBIT1NUX0NGSUxFUyBhbmQgSE9TVF9PRklMRVMuCgoJKiBiYXNlbmFtZS5jLCBiY21wLmMsIGJjb3B5LmMsIGJ6ZXJvLmMsIGdldHBhZ2VzaXplLmMgZ2V0d2QuYywKCWluZGV4LmMsIGluc3F1ZS5jLCByaW5kZXguYywgc3BhY2VzLmMsIHN0cnN0ci5jLCB2Zm9yay5jOiBOZXcKCWZpbGVzIGNvbnRhaW5pbmcgZWl0aGVyIHBvcnRhYmxlIEMgdmVyc2lvbnMgb3IgZW11bGF0aW9ucyB1c2luZwoJbmF0aXZlIGxpYnJhcnkgY2FsbHMuCgoJKiBzdHJlcnJvci5jOiAgQWRkIGNvcHlyaWdodCwgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiwgZXRjLgoKCSogc3RydG9sLmM6ICBSZXBsYWNlIGhhcmR3aXJlZCBoZXggY29uc3RhbnRzIHdpdGggc29tZSBtb3JlCglwb3J0YWJsZSBtYWNyb3MuICBSZW1vdmUgaWxsZWdhbCAoYWNjb3JkaW5nIHRvIGdjYykgY2FzdC4KCgkqIHN0cnRvdWwuYzogUmVwbGFjZSBoYXJkd2lyZWQgaGV4IGNvbnN0YW50IHdpdGggbW9yZSBwb3J0YWJsZQoJbWFjcm8uCgoJKiBNYWtlZmlsZS5pbjogTW92ZSBUQVJHRVRMSUIgYW5kIENGTEFHUyB3aGVyZSBtYWtlZmlsZSBmcmFnbWVudHMKCWNhbiBvdmVycmlkZSB0aGVtLiAgQWRkIG5ldyBzb3VyY2UgYW5kIG9iamVjdCBmaWxlIG5hbWVzIHRvIENGSUxFUwoJYW5kIE9GSUxFUyByZXNwZWN0aXZlbHkuCgoJKiBjb25maWd1cmUuaW46IEFkZCBzdXBwb3J0IGZvciBTVlI0IG1ha2VmaWxlIGZyYWdtZW50cy4KClR1ZSBPY3QgMjIgMTk6MDA6MjMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IE1vdmUgUkFOTElCLCBBUiBhbmQgQVJfRkxBR1MgdG8gd2hlcmUgdGhleSBjYW4gYmUKCW92ZXItcmlkZGVuIGJ5IGNvbmZpZy9obWFrZS0qCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgbTg4a2N2cyB0byBzeXN2IGxpc3QKCkZyaSBPY3QgIDQgMDE6Mjk6MDggMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIE1vc3QgaG9zdHMgbmVlZCBzdHJlcnJvciwgYnV0IG9uZSBvciB0d28gZG9uJ3QsCglhbmQgdGhleSBvdmVycmlkZSB0aGVzZSBkZWZpbml0aW9ucyBpbiB0aGUgaG9zdC1kZXBlbmRlbnQgbWFrZWZpbGUKCWZyYWdtZW50LgoJKiBjb25maWcvaG1ha2UtbWFjaDogIFRoZSBvZGQgbWFuIG91dCBvbiBzdHJlcnJvciAtLSBpdCdzIHN1cHBsaWVkLgoJKiBzdHJlcnJvci5jOiAgTmV3IGZpbGUuCgoJKiBzdHJ0b2wuYywgc3RydG91bC5jOiAgQWRkIHN0cnRvbCB0byBsaWJpYmVydHksIHNpbmNlIE1hY2ggbGFja3MKCWl0IGFuZCBiZmQgdXNlcyBpdC4KCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5pbiwgY29uZmlnL2htYWtlLW1hY2g6ICBPbmx5IGNvbmZpZ3VyZQoJc3RydG9sICYgc3Ryb3RvdWwgaW4gb24gTWFjaC4KClR1ZSBTZXAgIDMgMDY6MzY6MjMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogb2JzdGFjay5jOiAgTWVyZ2Ugd2l0aCBsYXRlc3QgRlNGIHZlcnNpb24uCgoMCkxvY2FsIFZhcmlhYmxlczoKdmVyc2lvbi1jb250cm9sOiBuZXZlcgpFbmQ6Cg==