MTk5OS0wNC0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoQkFTRUxJTktfUCk6IE5ldyBtYWNyby4KCShTRVRfQkFTRUxJTktfUCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogUmVtb3ZlIG5lZWRsZXNzIGFzc2lnbm1lbnQgaW4gaWYKCXN0YXRlbWVudC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZF9yKTogRml4IGhhbmRsaW5nIHdoZW4gd2UgYXJlIGxvb2tpbmcKCXNwZWNpZmljYWxseSBmb3IgYSB0eXBlOyB0aGVzZSBhcmUgbm90IGhpZGRlbiBieSBmdW5jdGlvbnMgYW5kCgl2YXJpYWJsZXMuCgkobG9va3VwX21lbWJlcik6IFVzZSBTRVRfQkFTRUxJTktfUC4KCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuKTogVXNlIEJBU0VMSU5LX1AuCgkocmVhbGx5X292ZXJsb2FlZF9mbik6IExpa2V3aXNlLgoJKGdldF9maXJzdF9mbik6IExpa2V3aXNlLgoJCjE5OTktMDQtMDUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwpOiBUd2VhaywgYW5kIGltcHJvdmUKCWRvY3VtZW50YXRpb24uCgoJKiBjbGFzcy5jIChtYXliZV9maXh1cF92cHRycyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCShidWlsZF9jbGFzc19pbml0X2xpc3QpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoZGVjbF9jbGFzc19sZXZlbCk6IENhbGwgY2hlY2tfdGVtcGxhdGVfc2hhZG93IGhlcmUKCS4uLiAKCShwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcpOiAuLi4gbm90IGhlcmUuCgkqIHNlYXJjaC5jIChkZnNfcHVzaF90eXBlX2RlY2xzKTogT25seSBhdm9pZAoJdGVtcGxhdGUtc2VsZi1yZWZlcmVuY2UgVFlQRV9ERUNMcyBpZiB0aGV5IGFyZSBmcm9tIGJhc2UgY2xhc3Nlcy4KCjE5OTktMDQtMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jIChjaGVja190ZW1wbGF0ZV9zaGFkb3cpOiBEb24ndCB0cmVhdCBPVkVSTE9BRHMgYXMgX0RFQ0wKCW5vZGVzLiAgVGlkeS4KCjE5OTktMDQtMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1heWJlX2ZpeHVwX3ZwdHJzLCBidWlsZF9jbGFzc19pbml0X2xpc3QpOiBMb3NlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IGNhbGwgYnVpbGRfY2xhc3NfaW5pdF9saXN0LgoKMTk5OS0wNC0wMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRpbmZvLmggKF9fY2xhc3NfdHlwZV9pbmZvKTogRml4IGlsbGVnYWwgZGVjbGFyYXRpb24uCgkKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0lEX0VYUFIpOiBVcGRhdGUgY29tbWVudC4KCSogY3AtdHJlZS5oIChJTkhFUklURURfVkFMVUVfQklORElOR19QKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfQ0xBU1NfVkFMVUUpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgkoaXNfcHJvcGVybHlfZGVyaXZlZF9mcm9tKTogRGVjbGFyZS4KCShpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSk6IExpa2V3aXNlLgoJKG1heWJlX21heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzKTogTGlrZXdpc2UuCgkobm90ZV9uYW1lX2RlY2xhcmVkX2luX2NsYXNzKTogTGlrZXdpc2UuCgkocHVzaF91c2luZ19kZWNsKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbi4KCShpZF9pbl9jdXJyZW50X2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKHB1c2hfY2xhc3NfYmluZGluZyk6IENoYW5nZSBwcm90b3R5cGUuCgkoY2xlYXJfaWRlbnRpdGlmZXJfY2xhc3NfdmFsdWVzKTogRGVjbGFyZS4KCSogY2FsbC5jIChpc19wcm9wZXJseV9kZXJpdmVkX2Zyb20pOiBNYWtlIGl0IGdsb2JhbC4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEJlIGNhcmVmdWwgYWJvdXQgdXBkYXRpbmcgY2FuZGlkYXRlcy4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBIYW5kbGUgQ09NUE9ORU5UX1JFRnMuICBEb24ndCBjcmFzaCB3aGVuCglhc2tlZCB0byBtYWtlIGlsbGVnYWwgY2FsbHMuCgkqIGNsYXNzLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKGNsYXNzX3N0YWNrX25vZGUpOiBBZGQgbmFtZXNfdXNlZCBzbG90LgoJKGNoZWNrX21lbWJlcl9kZWNsX2lzX3NhbWVfaW5fY29tcGxldGVfc2NvcGUpOiBSZW1vdmUuCgkoYWRkX21ldGhvZCk6IEZpeCBjb21tZW50LiAgUHVzaCB0aGUgZGVjbGFyYXRpb24gaW50byBjbGFzcwoJc2NvcGUuCgkoZmluaXNoX3N0cnVjdF8xKTogV2hlbiBwb3BwaW5nIHRoZSBjbGFzcywgcG9wIHRoZSBiaW5kaW5ncyB0b28uCglSZW1vdmUgY2hlY2sgZm9yIGRhdGEgbWVtYmVyL2Z1bmN0aW9uIG1lbWJlciBjb25mbGljdC4KCShmaW5pc2hfc3RydWN0KTogUmVtb3ZlIGNhbGxzIHRvCgljaGVja19tZW1iZXJfZGVjbF9pc19zYW1lX2luX2NvbXBsZXRlX3Njb3BlLiAgQ2hhbmdlIGNhbGxzIHRvCglwb3BjbGFzcy4KCShwdXNoY2xhc3MpOiBDbGVhciBuYW1lc191c2VkIGluIHRoZSBjbGFzcyBzdGFjayBlbnRyeS4KCVVzZSBpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSB0byByZW1vdmUgY2FjaGVkIGVudHJpZXMsIHJhdGhlcgoJdGhhbiBtYWdpYyB2YWx1ZXMgd2l0aCBwb3BjbGFzcy4gIENsZWFyIElERU5USUZJRVJfQ0xBU1NfVkFMVUUKCWJlZm9yZSBlbnRlcmluZyBhIG5ldyBjbGFzcy4gIFJlbW92ZSBkZWFkIGNvZGUuICBEb24ndCBtZXNzIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fZGVjbCB3aGVuIHB1c2hpbmcgZGVjbGFyYXRpb25zLgoJKGludmFsaWRhdGVfY2xhc3NfbG9va3VwX2NhY2hlKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSAuLi4KCShwb3BjbGFzcyk6IEhlcmUuICBDbGVhbiB1cCBuYW1lc191c2VkIG9uIG91ciB3YXkgb3V0LgoJKGluc3RhbnRpYXRlX3R5cGUpOiBBZGp1c3QuCgkoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBEb24ndCBwdXNoIHRoZSBkZWNsYXJhdGlvbiBoZXJlLgoJKG1heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKG5vdGVfbmFtZV9kZWNsYXJlZF9pbl9jbGFzcyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGFkZF9iaW5kaW5nKTogQ2hhbmdlIHByb3RvdHlwZS4KCShmaW5kX2NsYXNzX2JpbmRpbmdfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkoaW5uZXJtb3N0X25vbmNsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkoY3VycmVudF9iaW5kaW5nX2xldmVsKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoaW5uZXJfYmluZGluZ19sZXZlbCk6IFJlbW92ZS4gIFJlcGxhY2Ugd2l0aCBjdXJyZW50X2JpbmRpbmdfbGV2ZWwKCXRocm91Z2hvdXQuCgkocHVzaF9iaW5kaW5nX2xldmVsKTogUmVtb3ZlIHNwZWNpYWwgaGFuZGxpbmcgb2YKCWNsYXNzX2JpbmRpbmdfbGV2ZWwuCgkocG9wX2JpbmRpbmdfbGV2ZWwpOiBMaWtld2lzZS4gIFVzZSBmaW5kX2NsYXNzX2JpbmRpbmdfbGV2ZWwuCgkoc3VzcGVuZF9iaW5kaW5nX2xldmVsKTogTGlrZXdpc2UuCgkoZ2xvYmFsX2JpbmRpbmdzX3ApOiBVc2UgaW5uZXJtb3N0X25vbmNsYXNzX2xldmVsLgoJKHRvcGxldmVsX2JpbmRpbmdzX3ApOiBMaWtld2lzZS4KCShuYW1lc3BhY2VfYmluZGluZ3NfcCk6IExpa2V3aXNlLgoJKHBzZXVkb19nbG9iYWxfbGV2ZWxfcCk6IExpa2V3aXNlLgoJKHB1c2hfYmluZGluZyk6IENsZWFyIElOSEVSSVRFRF9WQUxVRV9CSU5ESU5HX1AuCgkoYWRkX2JpbmRpbmcpOiBDaGVjayBmb3IgaWxsZWdhbCBtdWx0aXBsZSBkZWNsYXJhdGlvbnMuICBSZXR1cm4gYQoJdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbmV3IGJpbmRpbmcgd2FzIGxlZ2FsLgoJKHB1c2hfbG9jYWxfYmluZGluZyk6IFNraXAgb3ZlciBjbGFzcyBiaW5kaW5nIGxldmVscy4gIENoZWNrCglyZXR1cm4gdmFsdWUgZnJvbSBhZGRfYmluZGluZy4KCShwdXNoX2NsYXNzX2JpbmRpbmcpOiBTZXQgSU5IRVJJVEVEX1ZBTFVFX0JJTkRJTkdfUC4gIENhbGwKCW5vdGVfbmFtZV9kZWNsYXJlZF9pbl9jbGFzcy4KCShwdXNobGV2ZWxfY2xhc3MpOiBSZW1vdmUgImZha2Ugb3V0IHRoZSByZXN0IG9mIHRoZSBjb21waWxlciIKCWNvZGUuCgkocG9wbGV2ZWxfY2xhc3MpOiBSZXNldCBJREVOVElGSUVSX0NMQVNTX1ZBTFVFcy4KCShjbGVhcl9pZGVudGlmaWVyX2NsYXNzX3ZhbHVlcyk6IE5ldyBmdW5jdGlvbi4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBVc2UgaXQuCgkocG9wX2V2ZXJ5dGhpbmcpOiBUd2Vhay4KCShtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBEb24ndCBwdXNoIHRoZQoJZGVjbGFyYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZSBoZXJlLgoJKHB1c2h0YWcpOiBEb24ndCBwdXNoIHRhZyBkZWNsYXJhdGlvbnMgaW50byBjbGFzcyBzY29wZSBoZXJlLgoJKHB1c2hkZWNsKTogQXBwbHkgRGVNb3JnYW4ncyBsYXcgZm9yIHJlYWRhYmlsaXR5LgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogUmVtb3ZlIHNwZWNpYWwtY2FzZSBjb2RlIGZvcgoJVFlQRV9CRUlOR19ERUZJTkVELiAgSGFuZGxlIE9WRVJMT0FEcyBhbmQgYW5vbnltb3VzIHVuaW9ucy4KCShwdXNoX2NsYXNzX2xldmVsX2JpbmRuZyk6IERlYWwgd2l0aCBpbmhlcml0ZWQgYmluZGluZ3MuCgkobG9va3VwX25hbWVfcmVhbCk6IFJlbW92ZSBzcGVjaWFsLWNhc2UgY29kZSBmb3IKCVRZUEVfQkVJTkdfREVGSU5FRCwgYW5kIHNvbWUgaW1wbGljaXQgdHlwZW5hbWUgbWFnaWMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgQ09NUE9ORU5UX1JFRiBmb3IgYSB0ZW1wbGF0ZSBmdW5jdGlvbi4KCShidWlsZF9lbnVtZXJhdG9yKTogRG9uJ3QgY2FsbCBwdXNoZGVjbF9jbGFzc19sZXZlbCBoZXJlLgoJKGlkX2luX2N1cnJlbnRfY2xhc3MpOiBSZW1vdmUuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IERvbid0IGNhbGwgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgb3IKCWNoZWNrX3RlbXBsYXRlX3NoYWRvdy4KCSogZXJyZm4uYyAoY3BfZmlsZV9vZik6IERvbid0IGRlY2xhcmUuCgkoY3BfbGluZV9vZik6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgYW4gT1ZFUkxPQUQuCgkoY3BfZmlsZV9vZik6IExpa2V3aXNlLgoJKGNwX2xpbmVfb2YpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IEhhbmRsZSBhIENPTVBPTkVOVF9SRUYuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQ2FsbCBtYXliZV9ub3RlX25hbWVfdXNlZF9pbl9jbGFzcywgbm90CglwdXNoZGVjbF9jbGFzc19sZXZlbC4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEJ1aWxkIENPTVBPTkVOVF9SRUZzIGZvciByZWZlcmVuY2VzCgl0byBtZW1iZXIgdGVtcGxhdGVzIGFzIHdlbGwgYXMgbWVtYmVyIGZ1bmN0aW9ucy4gIFJlbW92ZSBkZWFkCgljb2RlLgoJKiBwYXJzZS55IChsZWZ0X2N1cmx5KTogUmVtb3ZlLgoJKG5vbm5lc3RlZF90eXBlKTogQ2FsbCBtYXliZV9ub3RlX25hbWVfdXNlZF9pbl9jbGFzcywgbm90CglwdXNoZGVjbF9jbGFzc19sZXZlbC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBMaWtld2lzZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBBZGp1c3QsIGZvciByb2J1c3RuZXNzLgoJKGNoZWNrX3RlbXBsYXRlX3NoYWRvdyk6IEhhbmRsZSBPVkVSTE9BRHMuCgkoYnVpbGRfdGVtcGxhdGVfZGVjbCk6IFNldCBERUNMX0NPTlNUUlVDVE9SX1Agb24gdGhlCglURU1QTEFURV9ERUNMLCBpZiBhcHByb3ByaWF0ZS4KCSogc2VhcmNoLmMgKGVudmVsb3BlX2FkZF9kZWNsKTogUmVtb3ZlLgoJKGRmc19wdXNoZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfY29tcHJlc3NfZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfcHVzaF9kZWNscyk6IE5ldyBmdW5jdGlvbi4KCShkZnNfcHVzaF90eXBlX2RlY2xzKTogTGlrZXdpc2UuCgkoc2V0dXBfY2xhc3NfYmluZGluZ3MpOiBMaWtld2lzZS4KCSh0ZW1wbGF0ZV9zZWxmX3JlZmVyZW5jZV9wKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkX3IpOiBVc2UgaXQuCgkobG9vdXBfbWVtYmVyKTogUmVtb3ZlIG9sZCBjb21tZW50LiAgRGVhbCB3aXRoIGFtYmlndWl0eS4KCShwdXNoX2NsYXNzX2RlY2xzKTogVXNlIGRmc19wdXNoX2RlY2xzIGFuZCBkZnNfcHVzaF90eXBlX2RlY2xzLAoJYW5kIHJlbW92ZSBlbnZlbG9wZSBwcm9jZXNzaW5nLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IExldCBwdXNoY2xhc3MgcHVzaAoJZGVjbGFyYXRpb25zIGZvciBiYXNlIGNsYXNzZXMuCgkoZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbik6IFB1c2ggZGVjbGFyYXRpb25zIGludG8gY2xhc3Mgc2NvcGUuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSnVzdCBwdXQgYW4gT1ZFUkxPQUQgaW50byB0aGUKCUNPTVBPTkVOVF9SRUYsIG5vdCBhIFRSRUVfTElTVCBvZiBhbiBPVkVSTE9BRC4KCShidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBEZWFsIHdpdGggT1ZFUkxPQUQuICBIYW5kbGUgdGVtcGxhdGUtaWRzLgoJKiBNYWtlZmlsZS5pbiAoY2xhc3Mubyk6IERlcGVuZCBvbiBzcGxheS10cmVlLmguCgkKV2VkIE1hciAzMSAxMTozMDo0MyBCU1QgMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IFVzZSBzYW1lX3R5cGVfcC4KCSogdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogVXNlIHNhbWVfdHlwZV9wLgoKMTk5OS0wMy0zMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX2lubGluZV9kZWZpbml0aW9ucywKCWZpbmlzaF9pbmxpbmVfZGVmaW5pdGlvbnMpOiBSZW5hbWUgZnJvbSBmaW5pc2hfZGVmYXVsdF9hcmdzIGFuZAoJYmVnaW5faW5saW5lX2RlZmluaXRpb25zLCByZXNwZWN0aXZlbHksIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGEKCXRvdGFsIGxpZS4gIDopCgkqIHBhcnNlLnkgKHN0cnVjdHNwKTogQWRqdXN0LgoKCSogdHJlZS5jIChoYXNoX3RyZWVfY29ucyk6IFJlbW92ZSBvYnNvbGV0ZSB2aWFfKiBwYXJtcy4KCShsaXN0X2hhc2hfbG9va3VwKTogTGlrZXdpc2UuCgkoaGFzaF90cmVlX2NoYWluKTogQWRqdXN0LgoJKiBwdC5jICh0c3Vic3QpOiBBZGp1c3QuCgkodHN1YnN0X2FyZ190eXBlcyk6IFVzZSBwbGFpbiBoYXNoX3RyZWVfY29ucy4KCSogY3AtdHJlZS5oIChoYXNoX3RyZWVfY29uc19zaW1wbGUpOiBMb3NlLgoJKiBwYXJzZS55IChkZWNsbW9kcywgbm9uZW1wdHlfY3ZfcXVhbGlmaWVycyk6IFVzZSBoYXNoX3RyZWVfY29ucy4KCldlZCBNYXIgMzEgMTA6NDg6MjkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKICAgICAgICAqIE1ha2VmaWxlLmluIChoYXNoLmgpOiBHZW5lcmF0ZSB1c2luZyBncGVyZiBsYW5ndWFnZSAnQycsIG5vdAogICAgICAgICdLUi1DJywgc28gZ3BlcmYgdXNlcyB0aGUgYGNvbnN0JyBrZXl3b3JkIG9uIHN0cmluZ3MuCgkgCiAgICAgICAgKiBneHguZ3BlcmYgKHJlc3dvcmQpOiBDb25zdC1pZnkgYSBjaGFyKi4KCjE5OTktMDMtMzAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoSURFTlRJRklFUl9BU19ERVNDLCBJREVOVElGSUVSX0FTX0xJU1QsIAoJQ0xBU1NUWVBFX0JBU0VMSU5LX1ZFQywgQ0xBU1NUWVBFX05fU1VQRVJDTEFTU0VTLCAKCUNMQVNTVFlQRV9OX0JBU0VDTEFTU0VTLCBDTEFTU1RZUEVfTUFYX0RFUFRILCAKCUNMQVNTVFlQRV9CQVNFX0lOSVRfTElTVCwgQ0xBU1NUWVBFX0FTX0xJU1QsIENMQVNTVFlQRV9JRF9BU19MSVNULAoJQ0xBU1NUWVBFX0JJTkZPX0FTX0xJU1QpOiBSZW1vdmUgY3J1ZnQuCgkqIGNsYXNzLmMsIGxleC5jLCBwYXJzZS55LCBwdHJlZS5jLCBzZWFyY2guYywgc2VtYW50aWNzLmMsIAoJdHJlZS5jOiBBZGp1c3QuCgoxOTk5LTAzLTI5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBSZW1vdmUgLVdzaWduLXByb21vIGZyb20gLVdhbGwuCgoxOTk5LTAzLTI4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChmbl90eXBlX3VuaWZpY2F0aW9uKTogSWdub3JlICd0aGlzJyBwYXJtIGZyb20gY29udmVyc2lvbiBvcHMuCgoxOTk5LTAzLTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChhZGRfZnJpZW5kKTogRGVjbGFyZS4KCShhZGRfZnJpZW5kcyk6IExpa2V3aXNlLgoJKiBmcmllbmQuYyAoYWRkX2ZyaWVuZCk6IE1ha2UgaXQgZ2xvYmFsLiAgRG9uJ3QgYWRkIHRvCglERUNMX0JFRlJJRU5ESU5HX0NMQVNTRVMgaWYgdGhlIGJlZnJpZW5kaW5nIGNsYXNzIGlzIGEgdGVtcGxhdGUuCgkoYWRkX2ZyaWVuZHMpOiBNYWtlIGl0IGdsb2JhbC4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IERvbid0IGFkZCB0byBERUNMX0JFRlJJRU5ESU5HX0NMQVNTRVMgaWYgdGhlCgliZWZyaWVuZGluZyBjbGFzcyBpcyBhIHRlbXBsYXRlLgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbF8xKTogRml4IHR5cG8gaW4gY29tbWVudC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIGFkZF9mcmllbmQgYW5kCglhZGRfZnJpZW5kcyByYXRoZXIgdGhhdCBkdXBsaWNhdGluZyBzb21lIG9mIHRoZWlyIGZ1bmN0aW9uYWxpdHkKCWhlcmUuCgkKMTk5OS0wMy0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogVW5pZnkgJ3RoaXMnIGFuZCBub24tJ3RoaXMnIGNhc2VzLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IENoZWNrIGZvciAndGhpcycgc29vbmVyLgoKRnJpIE1hciAyNiAxMDoyMDozNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxsLmMgKG9wX2Vycm9yKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoYWRkX2NhbmRpZGF0ZSwgc291cmNlX3R5cGUsIGFkZF93YXJuaW5nKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogQ29uc3QtaWZ5IGEgY2hhciouCgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiwKCWZpeGVkX3R5cGVfb3JfbnVsbCwgYnVpbGRfdnRhYmxlX2VudHJ5X3JlZik6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGdldF92dGFibGVfbmFtZSwgZmluaXNoX3N0cnVjdF8xKTogQ29uc3QtaWZ5IGEgY2hhciouCgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlLCByZWNvcmRfYnVpbHRpbl90eXBlLAogCXJlY29yZF91bmtub3duX3R5cGUsIG1lbWJlcl9mdW5jdGlvbl9vcl9lbHNlLCBiYWRfc3BlY2lmaWVycyk6CiAJTGlrZXdpc2UuCgkoZmluZF9iaW5kaW5nLCBzZWxlY3RfZGVjbCwgdW5xdWFsaWZpZWRfbmFtZXNwYWNlX2xvb2t1cCwKCWxvb2t1cF9mbGFncywgcXVhbGlmeV9sb29rdXAsIHJlY29yZF9idWlsdGluX2phdmFfdHlwZSwgdGFnX25hbWUpOgoJQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkod2Fybl9leHRlcm5fcmVkZWNsYXJlZF9zdGF0aWMsIGR1cGxpY2F0ZV9kZWNscywgcHVzaGRlY2wsCglpbXBsaWNpdGx5X2RlY2xhcmUsIHJlY29yZF9idWlsdGluX2phdmFfdHlwZSwgZGVmaW5lX2Z1bmN0aW9uLAoJZ3Jva19vcF9wcm9wZXJ0aWVzLCB0YWdfbmFtZSk6IENvbnN0LWlmeSBhIGNoYXIqLgoKCSogY3AtdHJlZS5oIChGT1JNQVRfVkJBU0VfTkFNRSk6IEFsbG93IHBhcmFtZXRlciBgQlVGJyB0byBiZSBjb25zdC4KCShkZWZpbmVfZnVuY3Rpb24sIGZpbmlzaF9idWlsdGluX3R5cGUpOiBDb25zdC1pZnkgYSBjaGFyKi4KCShjcF9lcnJvciwgY3BfZXJyb3JfYXQsIGNwX3dhcm5pbmcsIGNwX3dhcm5pbmdfYXQsIGNwX3BlZHdhcm4sCgljcF9wZWR3YXJuX2F0LCBjcF9jb21waWxlcl9lcnJvciwgY3Bfc3ByaW50Zik6IEFkZCBwcm90b3R5cGUgYXJncy4KCShmaWxlX25hbWVfbm9uZGlyZWN0b3J5KTogQ29uc3QtaWZ5IGEgY2hhciouCgkoaW5pdF9maWxlbmFtZV90aW1lcyk6IERvbid0IHByb3RvdHlwZS4KCShjb21waWxlcl9lcnJvcik6IFByb3RvdHlwZS4KCSh5eWVycm9yLCBpbml0X3JlcG8pOiBDb25zdC1pZnkgYSBjaGFyKi4KCShidWlsZF9zcmNsb2MpOiBEb24ndCBwcm90b3R5cGUuCgkoYnVpbGRfeF9pbmRpcmVjdF9yZWYsIGJ1aWxkX2luZGlyZWN0X3JlZiwgYnVpbGRfY29tcG9uZW50X2FkZHIpOgogCUNvbnN0LWlmeSBhIGNoYXIqLgoJKHdhcm5fZm9yX2Fzc2lnbm1lbnQpOiBEb24ndCBwcm90b3R5cGUuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24sIHJlYWRvbmx5X2Vycm9yLCBjaGVja19mb3JfbmV3X3R5cGUsCglHTlVfeHJlZl9iZWdpbiwgR05VX3hyZWZfZmlsZSwgR05VX3hyZWZfcmVmLCBHTlVfeHJlZl9jYWxsKToKCUNvbnN0LWlmeSBhIGNoYXIqLgoKCSogZGVjbDIuYyAoYWNjZXB0YWJsZV9qYXZhX3R5cGUsIG91dHB1dF92dGFibGVfaW5oZXJpdCwKCXNldHVwX2luaXRwLCBzdGFydF9vYmplY3RzLCBmaW5pc2hfb2JqZWN0cywgZG9fZHRvcnMsIGRvX2N0b3JzLAoJbWVyZ2VfZnVuY3Rpb25zLCBkZWNsX25hbWVzcGFjZSwgdmFsaWRhdGVfbm9ubWVtYmVyX3VzaW5nX2RlY2wsCglkb19ub25tZW1iZXJfdXNpbmdfZGVjbCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGxhbmdfZl9vcHRpb25zKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoZmluaXNoX2J1aWx0aW5fdHlwZSk6IExpa2V3aXNlLgoJKGFkZF9mdW5jdGlvbiwgYXJnX2Fzc29jX25hbWVzcGFjZSwgYXJnX2Fzc29jX2NsYXNzKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlLgoKCSogZXJyZm4uYzogSW5jbHVkZSBjcC10cmVlLmguCgkoY3BfdGhpbmcpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShjb21waWxlcl9lcnJvcik6IERvbid0IHByb3RvcHR5cGUuCgkoY3BfY29tcGlsZXJfZXJyb3IpOiBDYXN0IGBjb21waWxlcl9lcnJvcicgdG8gYGVycm9yZm4nIGJlZm9yZQoJcGFzc2luZyBpdCB0byBgY3BfdGhpbmcnLgoKCSogZXJyb3IuYyAoaW50ZXJlc3Rpbmdfc2NvcGVfcCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogZXhjZXB0LmMgKGJ1aWxkX2VoX3R5cGVfdHlwZSwgYnVpbGRfZWhfdHlwZV90eXBlX3JlZik6IENvbnN0LWlmeQoJYSBjaGFyKi4KCgkqIGluaXQuYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkobWVtYmVyX2luaXRfb2tfb3JfZWxzZSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKGJ1aWxkX2phdmFfY2xhc3NfcmVmKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBsZXguYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkoZ2V0X3RpbWVfaWRlbnRpZmllciwgaW50ZXJmYWNlX3N0cmNtcCwgZXh0ZW5kX3Rva2VuX2J1ZmZlciwKCWhhbmRsZV9jcF9wcmFnbWEpOiBDb25zdC1pZnkgYSBjaGFyKi4KCShpc19nbG9iYWwsIGluaXRfZmlsZW5hbWVfdGltZXMpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShmaWxlX25hbWVfbm9uZGlyZWN0b3J5LCBjcGx1c190cmVlX2NvZGVfbmFtZSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKGNvbXBpbGVyX2Vycm9yKTogQ2hhbmdlIGZyb20gZml4ZWQgYXJncyB0byB2YXJpYWJsZSBhcmdzLgoJKHl5ZXJyb3IpOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHBhcnNlLnkgKGNvbmRfc3RtdF9rZXl3b3JkKTogQ29uc3QtaWZ5IGEgY2hhciouCgkocGFyc2VfZGVjbCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogcHQuYyAodGVtcGxhdGVfYXJnc19lcXVhbCwgcHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IExpa2V3aXNlLgoJKHByaW50X2NhbmRpZGF0ZXMsIGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBMaWtld2lzZS4KCgkqIHJlcG8uYyAoZ2V0X2Jhc2VfZmlsZW5hbWUsIG9wZW5fcmVwb19maWxlLCBpbml0X3JlcG8pOiBMaWtld2lzZS4KCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuLCBleHBhbmRfZ2VuZXJpY19kZXNjLCBleHBhbmRfc2lfZGVzYywKCWV4cGFuZF9jbGFzc19kZXNjLCBleHBhbmRfcHRyX2Rlc2MsIGV4cGFuZF9hdHRyX2Rlc2MpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfaW5mbywgbG9va3VwX21lbWJlcik6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIGEgUFRSLgoKCSogc2lnLmMgKGNvbXBpbGVyX2Vycm9yKTogRG9uJ3QgcHJvdG90eXBlLgoJKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV9uYW0pOiBDb25zdC1pZnkgYSBjaGFyKi4KCShnZXRfc2lndGFibGVfbmFtZSwgYnVpbGRfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIpOiBMaWtld2lzZS4KCgkqIHRyZWUuYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkobm9fbGlua2FnZV9oZWxwZXIsIGJ1aWxkX3NyY2xvYyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoX19lcHJpbnRmKTogRG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5kbGUgYGNvbnN0JyB3aGVuICFfX1NURENfXy4KCgkqIHR5cGVjay5jIChjb21waWxlcl9lcnJvcik6IERvbid0IHByb3RvdHlwZS4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQ29uc3QtaWZ5IGEgY2hhciouCgkoY29tcF9jdl90YXJnZXRfdHlwZXMpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShidWlsZF94X2luZGlyZWN0X3JlZiwgYnVpbGRfaW5kaXJlY3RfcmVmLCBjb252ZXJ0X2FyZ3VtZW50cywKCWJ1aWxkX2NvbXBvbmVudF9hZGRyLCBidWlsZF91bmFyeV9vcCwgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOgoJQ29uc3QtaWZ5IGEgY2hhciouCgoJKiB0eXBlY2syLmMgKGFjayk6IEFkZCBzdGF0aWMgcHJvdG90eXBlIGFuZCBjaGFuZ2UgZnJvbSBmaXhlZCBhcmdzCgl0byB2YXJpYWJsZSBhcmdzLgoJKHJlYWRvbmx5X2Vycm9yLCBjaGVja19mb3JfbmV3X3R5cGUpOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHhyZWYuYyAoX1hSRUZfRklMRSwgZmluZF9maWxlLCBmaWxlbmFtZSwgZmN0bmFtZSwgZGVjbG5hbWUsCglmaXhuYW1lLCBvcGVuX3hyZWZfZmlsZSwgY2xhc3NuYW1lLCBHTlVfeHJlZl9iZWdpbik6IExpa2V3aXNlLgoJKEdOVV94cmVmX2ZpbGUpOiBMaWtld2lzZS4gIEFsc28gdXNlIGB4bWFsbG9jJyBpbnN0ZWFkIG9mIGBtYWxsb2MnLgoJKEdOVV94cmVmX2VuZF9zY29wZSwgR05VX3hyZWZfcmVmLCBHTlVfeHJlZl9kZWNsLCBHTlVfeHJlZl9jYWxsLAoJZ2VuX2Fzc2lnbiwgR05VX3hyZWZfbWVtYmVyKTogQ29uc3QtaWZ5IGEgY2hhciouCgoxOTk5LTAzLTI1ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ3h4aW50LnRleGk6IFJlbW92ZSBvbGQgZGlzY3Vzc2lvbiBvbiBjb3B5aW5nIHZpcnR1YWwgYmFzZXMuCgoxOTk5LTAzLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2UtbGFuZy5pbjogUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGcrKy5vL2crKy5jLgoJTGluayBnKysgZnJvbSBnY2Muby4KCjE5OTktMDMtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogVHJlYXQgdnRhYmxlcyBsaWtlIGZ1bmN0aW9ucy4KCjE5OTktMDMtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IFRzdWJzdCBpbnRvIERFQ0xfQkVGUklFTkRJTkdfQ0xBU1NFUy4KCjE5OTktMDMtMjUgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIGBzaWduZWQnIHR5cGUgYXMgYSBzeW5vbnltCglmb3IgYGludCcuCgoxOTk5LTAzLTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBIYW5kbGUgY3YtcXVhbCB1bmlmaWNhdGlvbiBmb3IgcG9pbnRlcnMKCXRvIG1lbWJlcnMuCgoJKiBkZWNsLmMgKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlCglvbiBlcnJvci4KCShsb29rdXBfbmFtZV9yZWFsKTogU2V0IExPT0tVUF9DT01QTEFJTiB3aGVuICpub3QqIHBhcnNpbmcuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogSWYgd2UgZ290IGVycm9yX21hcmtfbm9kZSwgY2FsbAoJbG9va3VwX25hbWUgYWdhaW4uCgoxOTk5LTAzLTI0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWx3YXlzIHJlc2V0IFRZUEVfRklFTERTIGZvciBlbXB0eQoJY2xhc3Nlcy4KCjE5OTktMDMtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvIG5lc3RlZCBmaWVsZCBsb29rdXAgcmVnYXJkbGVzcyBvZgoJVFlQRV9CRUlOR19ERUZJTkVELgoKMTk5OS0wMy0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ190eXBlKTogUmVtb3ZlIGhhc19hc3NpZ25tZW50IGFuZAoJaGFzX3JlYWxfYXNzaWdubWVudC4gIEFkZCBiZWZyaWVuZGluZ19jbGFzc2VzLgoJKFRZUEVfSEFTX0FTU0lHTk1FTlQpOiBSZW1vdmUuCgkoVFlQRV9IQVNfUkVBTF9BU1NJR05NRU5UKTogTGlrZXdpc2UuCgkoQ0xBU1NUWVBFX0JFRlJJRU5ESU5HX0NMQVNTRVMpOiBOZXcgbWFjcm8uCgkobGFuZ19kZWNsKTogRG9jdW1lbnQuCgkoREVDTF9CRUZSSUVORElOR19DTEFTU0VTKTogTmV3IG1hY3JvLgoJKEZSSUVORF9OQU1FKTogTW92ZSBkZWNsYXJhdGlvbiB0byBtb3JlIG9idmlvdXMgbG9jYXRpb24uCgkoRlJJRU5EX0RFQ0xTKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHVzZSBUWVBFX0hBU19SRUFMX0FTU0lHTk1FTlQuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29weSBERUNMX0JFRlJJRU5ESU5HX0NMQVNTRVMuCgkoZml4dXBfYW5vbnltb3VzX3VuaW9uKTogRG9uJ3QgdXNlIFRZUEVfSEFTX0FTU0lHTk1FTlQuCgkoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBVc2UgRlJJRU5EX05BTUUgYW5kIEZSSUVORF9ERUNMUy4KCShhZGRfZnJpZW5kKTogTGlrZXdpc2UuICBEb24ndCBkbyB3ZWlyZCB0aGluZ3Mgd2l0aCBhc3NpZ25tZW50CglvcGVyYXRvcnMuICBVcGRhdGUgREVDTF9CRUZSSUVORElOR19DTEFTU0VTLgoJKGFkZF9mcmllbmRzKTogRG9uJ3QgZG8gd2VpcmQgdGhpbmdzIHdpdGggYXNzaWdubWVudCBvcGVyYXRvcnMuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBMaWtld2lzZS4gIFVwZGF0ZQoJQ0xBU1NUWVBFX0JFRlJJRU5ESU5HX0NMQVNTRVMuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3Qgc2V0CglUWVBFX0hBU19BU1NJR05NRU5ULiAKCSh0c3Vic3RfY29weSk6IFN1YnN0aXR1dGUgdGhlIFRSRUVfVFlQRSBmb3IgbW9yZSB1bmFyeQoJZXhwcmVzc2lvbnMuCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IERvbid0IGxvb2sgYXQgVFlQRV9IQVNfQVNTSUdOTUVOVC4KCSogc2VhcmNoLmMgKHByb3RlY3RlZF9hY2Nlc3NpYmxlX3ApOiBOZXcgZnVuY3Rpb24uCgkoZnJpZW5kX2FjY2Vzc2libGVfcCk6IExpa2V3aXNlLgoJKGFjY2Vzc2libGVfcCk6IFVzZSB0aGVtLgoJCjE5OTktMDMtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBEb24ndCBjcmVhdGUgdGhpbmdzIHRoYXQgYXJlbid0CglQVFJNRU1fQ1NUcyB3aGVuIGFwcGx5aW5nIGEgcXVhbGlmaWNhdGlvbiBjb252ZXJzaW9uIHRvIGEKCVBUUk1FTV9DU1QuCgoxOTk5LTAzLTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBEb24ndCBtZW50aW9uIGhhc2guby4KCShPQkpERVBTKTogTGlrZXdpc2UuCgoxOTk5LTAzLTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFNldCBhdF9lb2YgdG8gMiBhZnRlciBleHBhbmRpbmcgY3RvcnMuCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogTWFrZSBzdXJlIHdlIGRvbid0IGFkZCBhbnkgYWZ0ZXIKCXRoZW4uCgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogTW92ZSBpbnRlbGxpZ2VuY2UgYWJvdXQgaGFuZGxpbmcKCURFQ0xfQ09NREFUIGZvciB2YXJpYWJsZXMgZnJvbSBoZXJlLi4uCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogLi4udG8gaGVyZS4KCShtYXliZV9tYWtlX29uZV9vbmx5KTogVHdlYWsuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogQ2FsbCBjb21kYXRfbGlua2FnZSBmb3IgdmFyaWFibGVzLCB0b28uCgkoZmluaXNoX2ZpbGUpOiBIYW5kbGUgdGVtcGxhdGUgc3RhdGljcyBwcm9wZXJseS4KCjE5OTktMDMtMjIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfUFRSTUVNRlVOQ19QKTogVXNlIFRZUEVfUFRSTUVNRlVOQ19GTEFHLgoJRG9jdW1lbnQgaW50ZXJuYWxzIG9mIHBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9ucy4KCShERUxUQTJfRlJPTV9QVFJNRU1GVU5DKTogTWFrZSBpdCBjYWxsIGRlbHRhMl9mcm9tX3B0cm1lbWZ1bmMuCgkoUEZOX0ZST01fUFRSTUVNRlVOQyk6IFNpbWlsYXJseS4KCShidWlsZF90eXBlX2NvbnZlcnNpb24pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlci4KCShidWlsZF9wdHJtZW1mdW5jMSk6IERlY2xhcmUuCgkoZXhwYW5kX3B0cm1lbWZ1bmNfY3N0KTogTmV3IGZ1bmN0aW9uLgoJKGRlbHRhMl9mcm9tX3B0cm1lbWZ1bmMpOiBMaWtld2lzZS4KCShwZm5fZnJvbV9wdHJtZW1mdW5jKTogTGlrZXdpc2UuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciB0bwoJYnVpbGRfdHlwZV9jb252ZXJzaW9uLiAgVXNlIFRZUEVfUFRSTUVNX1AgZm9yIHJlYWRhYmlsaXR5LgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgdG8KCWJ1aWxkX3R5cGVfY29udmVyc2lvbi4KCShvY3BfY29udmVydCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBOVUxMIHBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9ucy4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IEhhbmRsZSBQVFJNRU1fQ1NUcyBmb3IgZnVuY3Rpb25zLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBEb24ndCBnbyBzcGxpdHRpbmcgQ09OU1RSVUNUT1JzCglvcGVuIHdoZW4gaGFuZGxpbmcgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zLgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBDbGVhbiB1cCBlcnJvciBtZXNzYWdlcy4gIEJlCgltb3JlIHN0cmluZ2VudCB3aXRoIHBvaW50ZXJzLXRvLW1lbWJlcnMuCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jMSk6IERvbid0IGRlY2xhcmUuICBNYWtlIGl0IGdsb2JhbC4KCShidWlsZF91bmFyeV9vcCk6IFRpZHkgZXZlci1zby1zbGlnaHRseS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogUmVtb3ZlIGV4dHJhIHBhcmFtZXRlciB0bwoJYnVpbGRfdHlwZV9jb252ZXJzaW9uLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBCdWlsZCBQVFJNRU1fQ1NUcyBpZiB3ZSBrbm93IHdoYXQgZnVuY3Rpb24KCXdlJ3JlIHVzaW5nLgoJKGV4cGFuZF9wdHJtZW1mdW5jX2NzdCk6IERlZmluZS4KCShkZWx0YTJfZnJvbV9wdHJtZW1mdW5jKTogTGlrZXdpc2UuCgkocGZuX2Zyb21fcHRybWVtZnVuYyk6IExpa2V3aXNlLgoJCjE5OTktMDMtMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogSGFuZGxlIHRlbXBsYXRlLWlkIGV4cHJlc3Npb25zCgljb3JyZWN0bHkuCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCjE5OTktMDMtMTkgIENoaXAgU2FsemVuYmVyZyAgPGNoaXBAcGVybHN1cHBvcnQuY29tPgoKCSogZnJpZW5kLmMgKG1ha2VfZnJpZW5kX2NsYXNzKTogQXZvaWQgY29yZSBkdW1wIHdoZW4KCW5vdC15ZXQtZGVmaW5lZCBmcmllbmQgdHlwZSBsYWNrcyBUWVBFX0xBTkdfU1BFQ0lGSUMoKS4KCjE5OTktMDMtMTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBTdXBwcmVzcyBub3JtYWwgbGlua2FnZSBoZXVyaXN0aWNzCglmb3IgI3ByYWdtYSBpbnRlcmZhY2UgdW5kZXIgTVVMVElQTEVfU1lNQk9MX1NQQUNFUy4KCjE5OTktMDMtMTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogTWFrZS1sYW5nLmluOiAoJChJTlRMX1RBUkdFVFMpKTogZGVwZW5kIG9uIGNwL3BhcnNlLmMKCSgkKHNyY2RpcikvY3AvcGFyc2UuYyk6IG1vdmVkIGZyb20gLi4vTWFrZWZpbGUuaW4KCjE5OTktMDMtMTcgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBwYXJzZS55IChuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IAoJRG8gbm90IHB1c2ggYSBzY29wZSBmb3IgZXJyb3JfbWFya19ub2RlLgoJKG1heWJlX2Jhc2VfY2xhc3NfbGlzdCk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQ2hlY2sgZm9yIGVycm9yX21hcmtfbm9kZSBhcyBhIHR5cGUuCglEZXRlY3RlZCBieSBnKysuYnJlbmRhbi9hcnJheS1yZWZzLkMuCgkoc3RhcnRfZGVjbF8xKTogTGlrZXdpc2UuIERldGVjdGVkIGJ5IGcrKy5idWdzLzkwMDMyMl8wMS5DLgoJKG1heWJlX2J1aWxkX2NsZWFudXBfMSk6IExpa2V3aXNlLiBEZXRlY3RlZCBieQoJZysrLmphc29uL2luY29tcGxldGUxLkMuCgoJKiB0cmVlLmMgKGJ1aWxkX2R1bW15X29iamVjdCk6IFVzZSB2b2lkX3plcm9fbm9kZSBpbnN0ZWFkIG9mIHRoZQoJZXJyb3JfbWFya19ub2RlCgkoaXNfZHVtbXlfb2JqZWN0KTogQ2hlY2sgZm9yIHN1Y2ggYSBub2RlLgoJRGV0ZWN0ZWQgYnkgZysrLmJvYi9pbmhlcml0MS5DCgoxOTk5LTAzLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAob2xkX2JhY2tyZWZfaW5kZXgpOiBTcGxpdCBvdXQuLi4KCShmbHVzaF9yZXBlYXRzKTogRnJvbSBoZXJlLiAgUmVuYW1lIGJhY2sgZnJvbSB0cnlfb2xkX2JhY2tyZWYuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lKTogUHV0IGJhY2sgc29tZSBvbGQtc3R5bGUgcmVwZWF0IGhhbmRsaW5nLgoKTW9uIE1hciAxNSAyMTo1NzoxNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgogICAgICAgICogbGV4LmM6IERvbid0IGluY2x1ZGUgc2V0am1wLmguCgkocGFyc2VfZmxvYXQpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHBmX2FyZ3MpOiBOZXcgc3RydWN0LgoJKHJlYWxfeXlsZXgpOiBVc2UgdGhlbSBpbiBjYWxsIHRvIGBkb19mbG9hdF9oYW5kbGVyJy4KCjE5OTktMDMtMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogU2V0IENMQVNTVFlQRV9WQkFTRUNMQVNTRVMgaGVyZS4KCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogTm90IGhlcmUuCgkqIHNlYXJjaC5jIChkZnNfc2VhcmNoKTogUmVtb3ZlOyBubyBsb25nZXIgdXNlZC4KCQoxOTk5LTAzLTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbDIuYyAodmFsaWRhdGVfbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBJc3N1ZSBzZW5zaWJsZQoJZXJyb3ItbWVzc2FnZXMgb24gYm9ndXMgcXVhbGlmaWVycy4KCQoxOTk5LTAzLTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCgkqIE1ha2VmaWxlLmluIChzZWFyY2gubyk6IEFkZCBkZXBlbmRlbmN5IG9uIHZhcnJheS5oLgoKMTk5OS0wMy0xMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBVc2Ugc2FtZV90eXBlX3AuCgkqIG1ldGhvZC5jICh0cnlfb2xkX2JhY2tyZWYpOiBSZW5hbWVkIGZyb20gZmx1c2hfcmVwZWF0cy4gIFVzZQoJc2FtZV90eXBlX3AuICBEb24ndCB0cnkgdG8gaGFuZGxlIHJlcGVhdHMuICBSZXR1cm4gc3VjY2Vzcy4KCShpc19iYWNrX3JlZmVyZW5jZWFibGVfdHlwZSk6IFJldHVybiAwIGlmIFRZUEVfRk9SX0pBVkEuICBTdXBwb3J0CgljYWxscyBmcm9tIG9sZC1zdHlsZSBjb2RlLCB0b28uCgkoY2hlY2tfa3R5cGUpOiBVc2Ugc2FtZV90eXBlX3AuCgkoY2hlY2tfYnR5cGUpOiBVc2Ugc2FtZV90eXBlX3AuICBEb24ndCBwdWxsIG91dCBUWVBFX01BSU5fVkFSSUFOVC4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IFNpbXBsaWZ5IGxvZ2ljLgoJKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IFN0cmlwIHR5cGVkZWZzIGFuZCBxdWFscyBhdCB0aGUgdG9wLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZV93aXRoX0djb2RlKTogUmVtb3ZlIGNhbGwgdG8KCXR5cGVfY2Fub25pY2FsX3ZhcmlhbnQuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lKTogTGlrZXdpc2UuICBSZW1vdmUgc3VwcG9ydCBmb3Igb2xkLXN0eWxlIAoJcmVwZWF0cywgd2hpY2ggaGF2ZSBiZWVuIGRpc2FibGVkIHNpbmNlIDIuNy4yLiAgRG9uJ3QgbWVzcyB3aXRoIAoJVFJFRV9VU0VELgoJKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IERvbid0IG1lc3Mgd2l0aCBUUkVFX1VTRUQuCgoxOTk5LTAzLTEzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZXJyb3IuYyAoY3BfcHJpbnRlcnMpOiBBZGQgJ0YnIGVzY2FwZSBjaGFyYWN0ZXIuCgkoZHVtcF90eXBlX3JlYWwpOiBSZW1vdmUgVFJFRV9MSVNUIChmbmFyZ3MpIHByaW50aW5nLgoJRnVuY3Rpb25hbGl0eSBtb3ZlZCB0byBkdW1wX3BhcmFtZXRlcnMuCgkoZHVtcF90eXBlX3N1ZmZpeCk6IFVzZSBkdW1wX3BhcmFtZXRlcnMgYW5kIGR1bXBfZXhjZXB0aW9uX3NwZWMuCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogRXh0ZW5kIG1lYW5pbmcgb2YgViBwYXJhbWV0ZXIuIFVzZQoJZHVtcF9wYXJhbWV0ZXJzIGFuZCBkdW1wX2V4Y2VwdGlvbl9zcGVjLgoJKGR1bXBfcGFyYW1ldGVycyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZHVtcF9leGNlcHRpb25fc3BlYyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZm5kZWNsX2FzX3N0cmluZyk6IENoYW5nZSBhcmd1bWVudCBzZW1hbnRpY3MuIFVzZQoJZHVtcF9mdW5jdGlvbl9kZWNsIGRpcmVjdGx5LgoJCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBVc2UgY3BfZXJyb3IuCgkKMTk5OS0wMy0xMyAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfc3dpdGNoX2NvbmQpOiBIYW5kbGUgZXJyb3IgY2FzZXMgZ3JhY2VmdWxseS4KCURldGVjdGVkIGJ5IGcrKy5sYXcvZW51bTUuQwoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogQ2hlY2sgZm9yIGVycm9ycyBhZnRlciByZXNvbHZpbmcKCW9mZnNldHMuIERldGVjdGVkIGJ5IGcrKy5icmVuZGFuL3N0YXRpYzEuQwoKCSogZGVjbC5jIChjb21wbGV0ZV9hcnJheV90eXBlKTogSWdub3JlIGluaXRpYWxfdmFsdWUgaWYgaXQgaXMgYW4KCWVycm9yLiBEZXRlY3RlZCBieSBnKysuYmVuamFtaW4vMTc5MzAuQwkKCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogUmV0dXJuIGVycm9yIGlmIG9uZSBhcmd1bWVudAoJaXMgaW4gZXJyb3IuIERldGVjdGVkIGJ5IGcrKy5iZW5qYW1pbi8xMzQ3OC5DCgoxOTk5LTAzLTEyICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChzZWxlY3RfZGVjbCk6IEFsbG93IGNsYXNzIHRlbXBsYXRlcyB3aGVuIHdlIG5lZWQgdHlwZXMuCgkqIGRlY2wyLmMgKGFtYmlndW91c19kZWNsKTogTGlrZXdpc2UuCgoxOTk5LTAzLTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBDb3JyZWN0IGNhbGwgdG8gZW5mb3JjZV9hY2Nlc3MuCgkqIHNlYXJjaC5jIChhY2Nlc3NpYmxlX3ApOiBUd2VhayBjb21tZW50LgoKMTk5OS0wMy0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogQ2FsbCBidWlsZF9zZWxmX3JlZmVyZW5jZS4KCShmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uKTogU2V0IERFQ0xfQ09OVEVYVCBmb3IgVFlQRV9ERUNMcy4KCgkqIHNlYXJjaC5jIChhc3NlcnRfY2Fub25pY2FsX3VubWFya2VkKTogRml4IHR5cG8gaW4gcHJvdG90eXBlLgoKCSogc2VhcmNoLmMgKGRmc19jYW5vbmljYWxfcXVldWUpOiBOZXcgZnVuY3Rpb24uCgkoZGZzX2Fzc2VydF91bm1hcmtlZF9wKTogTGlrZXdpc2UuCgkoYXNzZXJ0X2Nhbm9uaWNhbF91bm1hcmtlZCk6IExpa2V3aXNlLgoJKGFjY2Vzc19pbl90eXBlKTogVXNlIGl0LgoJKGFjY2Vzc2libGVfcCk6IExpa2V3aXNlLiAgV2FsayB0aGUgd2hvbGUgdHJlZSB3aGVuIHVtYXJraW5nLgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IFVzZSBhY2Nlc3NpYmxlX3AKCWluc3RlYWQgb2YgY29tcHV0ZV9hY2Nlc3MuCgoxOTk5LTAzLTA5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBIYW5kbGUgb3ZlcmxvYWRlZCBjb252ZXJzaW9uIG9wcy4KCjE5OTktMDMtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGZsYWdfYWNjZXNzX2NvbnRyb2wpOiBEZWNsYXJlLgoJKFRSRUVfVklBX1BQVUJMSUMpOiBEb2N1bWVudC4KCShERUNMX05PTlNUQVRJQ19NRU1CRVJfUCk6IE5ldyBtYWNyby4KCShlbmZvcmNlX2FjY2Vzcyk6IFJldHVybiBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGFjY2VzcwoJd2FzIHBlcm1pdHRlZC4KCShidWlsZF9zZWxmX3JlZmVyZW5jZSk6IENoYW5nZSBwcm90b3R5cGUuCgkoY29tcHV0ZV9hY2Nlc3MpOiBSZXBsYWNlIHdpdGggLi4uCgkoYWNjZXNzaWJsZV9wKTogTmV3IGZ1bmN0aW9uLgoJKGRmc193YWxrKTogQ2hhbmdlIHByb3RvdHlwZS4KCShkZnNfdW5tYXJrKTogTGlrZXdpc2UuCgkobWFya2VkcCk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGVuZm9yY2VfYWNjZXNzKTogVXNlIGFjY2Vzc2libGVfcC4KCSogY2xhc3MuYyAoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBJbnNlcnQgdGhlIGRlY2xhcmF0aW9uIGludG8gdGhlCglsaXN0IG9mIG1lbWJlcnMgZm9yIHRoaXMgdHlwZSwgYW5kIG1ha2UgaXQgcHVibGljLgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogQXZvaWQgaWxsLXRpbWVkIHJlY3Vyc2lvbi4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogVXNlIGxvb2t1cF9tZW1iZXIsIG5vdCB0aHJlZSBzZXBhcmF0ZQoJbmFtZS1sb29rdXBzLiAgQ2FsbCBlbmZvcmNlX2FjY2VzcyByYXRoZXIgdGhhbiBjaGVja2luZyBmb3IKCWlsbGVnYWwgYWNjZXNzZXMgaGVyZS4KCShyZXNvbHZlX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKiBwYXJzZS55IChzZWxmX3JlZmVyZW5jZSk6IFJlbW92ZS4KCShvcHRfY29tcG9uZW50X2RlY2xfbGlzdCk6IERvbid0IHVzZSBpdC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKHByaW50X2NhbmRpZGF0ZXMpOiBHZW5lcmFsaXplIHRvIGhhbmRsZSBsaXN0cyBvZgoJb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCByZWx5IG9uIFRSRUVfVklBX1BSSVZBVEU7IGl0J3MKCW5vdCBzZXQuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBVc2UgbmV3IGNhbGxpbmcgY29udmVudGlvbiBmb3IgZGZzX3dhbGsuCgkqIHNlYXJjaC5jOiBJbmNsdWRlIHZhcnJheS5oLiAgQWRkIHByb3RvdHlwZXMuCgkoZGZzX3dhbGspOiBBY2NlcHQgYSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgd29yayBmdW5jdGlvbnMuIAoJQWxsIGNhbGxlcnMgY2hhbmdlZC4gIEFsbCB3b3JrIGZ1bmN0aW9ucyBjaGFuZ2VkLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogUmVuYW1lIHRvIGJmc193YWxrLCBhbmQgbWFrZSBjb25zaXN0ZW50Cgl3aXRoIGRmc193YWxrLgoJKGRmc193YWxrX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkoY2Fub25pY2FsX2JpbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnRleHRfZm9yX25hbWVfbG9va3VwKTogTGlrZXdpc2UuCgkoc2hhcmVkX21hcmtlZF9wKTogTGlrZXdpc2UuCgkoc2hhcmVkX3VubWFya2VkX3ApOiBMaWtld2lzZS4KCShsb2t1cF9maWVsZF9xdWV1ZV9wKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkX3IpOiBHZW5lcmFsaXplIHRvIGhhbmRsZSBib3RoIGZ1bmN0aW9ucyBhbmQgZmllbGRzLgoJKGxvb2t1cF9maWVsZCk6IEp1c3QgY2FsbCBsb29rdXBfbWVtYmVyLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBNb3ZlIGJvZHkgb2YgbG9va3VwX2ZpZWxkIGhlcmUgYW5kIGdlbmVyYWxpemUuCgkoZGZzX2FjY2Vzc2libGVfcXVldWVfcCk6IExpa2V3aXNlLgoJKGRmc19hY2Nlc3NpYmxlX3ApOiBMaWtld2lzZS4KCShkZnNfYWNjZXNzX2luX3R5cGUpOiBMaWtld2lzZS4KCShhY2Nlc3NfaW5fdHlwZSk6IExpa2V3aXNlLgoJKGNvbXB1dGVfYWNjZXNzKTogUmVtb3ZlLCBhbmQgcmVwbGFjZSB3aXRoIC4uLgoJKGFjY2Vzc2libGVfcCk6IE5ldyBmdW5jdGlvbi4KCSh2YmFzZV90eXBlcyk6IFJlbW92ZS4KCSh2YmFzZV9kZWNsX3B0cl9pbnRlcm1lZGlhdGUpOiBMaWtld2lzZS4KCSh2YmFzZV9kZWNsX3B0cik6IExpa2V3aXNlLgoJKHZiYXNlX2luaXRfcmVzdWx0KTogTGlrZXdpc2UuCgkoY2xvc2VkX2VudmVsb3Blcyk6IExpa2V3aXNlLgoJKGJ2dGFibGUpOiBMaWtld2lzZS4KCjE5OTktMDMtMDkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IENoZWNrIGZvciBwcm9wZXIgbnVtYmVyIG9mIGFyZ3MKCWJlZm9yZSBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdGhvc2UgYXJncy4KCjE5OTktMDMtMDYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfdHlwZSk6IEFkZCBhbm9uX3VuaW9uIGZpZWxkLgoJKEFOT05fVU5JT05fVFlQRV9QKTogVXNlIGl0IGluc3RlYWQgb2YgZXhhbWluaW5nIHR5cGUuCgkoU0VUX0FOT05fVU5JT05fVFlQRV9QKTogTmV3IG1hY3JvLgoJKiBkZWNsLmMgKGNoZWNrX3RhZ19kZWNsKTogVXNlIGl0LgoKCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogSGFuZGxlIG5vbi10eXBlIGNvbnRleHRzIGVhcmxpZXIsIGFuZAoJaGFuZGxlIE5VTExfVFJFRS4KCgkqIHRyZWUuYyAoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBVc2UgY29weV90b19wZXJtYW5lbnQuCgoJKiBkZWNsMi5jIChzZXR1cF9pbml0cCk6IEdpdmUgc3RhdGljcyB3aXRoIG5vIHByaW9yaXR5IHRoZSBkZWZhdWx0Cglwcmlvcml0eSBoZXJlLgoJKGRvX2R0b3JzLCBkb19jdG9ycywgZmluaXNoX2ZpbGUpOiBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBvZgoJbm9uLXByaW9yaXRpemVkIHN0YXRpY3MuCgoxOTk5LTAzLTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChBTk9OX1VOSU9OX1RZUEVfUCk6IFJvYnVzdGlmeS4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBEb24ndCBpc3N1ZSBhbiBlcnJvciBpZiBhbgoJaW1tZWRpYXRlIGxvb2t1cCBmYWlsczsgaXQgbWlndCBiZSByZXNvbHZlZCBsYXRlci4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEFkZCBjb21tZW50LgoJKiBzZWFyY2guYyAoYnJlYWR0aF9maXJzdF9zZWFyY2gpOiBBZGQgUE9TVEZOIGFuZCBEQVRBCglwYXJhbWV0ZXJzLiAgVGlkeS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkobG9va3VwX2ZpZWxkX3F1ZXVlX3ApOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX2ZpZWxkX3IpOiBMaWtld2lzZS4KCShsb29rdXBfZmllbGRfcG9zdCk6IExpa2V3aXNlLgoJKGxvb2t1cF9maWVsZCk6IFVzZSB0aGVtLCB2aWEgYnJlYWR0aF9maXJzdF9zZWFyY2gsIGluc3RlYWQgb2YKCWR1cGxpY2F0aW5nIGxvZ2ljLgoJKGNvbXB1dGVfYWNjZXNzKTogUm9idXN0aWZ5LgoJKGxvb2t1cF9mbmZpZWxkX2luZm8pOiBOZXcgc3RydWN0dXJlLgoJCjE5OTktMDMtMDUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCwgY2FzZSBBUlJBWV9SRUYpOiBVc2UgdHN1YnN0X2V4cHIgYWdhaW4uCgoxOTk5LTAzLTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jLCBkZWNsMi5jLCBtZXRob2QuYywgcHQuYzogQWRkICdzdGF0aWMnIHRvIG1ha2UgU3VuT1MgNAoJY2MgaGFwcHkuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2NsYXNzKTogQWxzbyByZXR1cm4gaWYKCUNMQVNTVFlQRV9JTlRFUkZBQ0VfT05MWSBpcyBzZXQuCgoxOTk5LTAzLTAzICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IE9ubHkgb3ZlcndyaXRlIHRoZSBvbGQgYmluZGluZyBpZgoJdGhlcmUgd2FzIG9uZS4KCSogZGVjbDIuYyAoZG9fbG9jYWxfdXNpbmdfZGVjbCk6IEZpeCBsb29wIHRlcm1pbmF0aW9uLgoKMTk5OS0wMy0wMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogRG9uJ3QgZGVjbGFyZS4KCSogcHQuYyAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogTWFrZSBpdCBzdGF0aWMuICBFbGltaW5hdGUKCWNvbXBsYWluIHBhcmFtZXRlci4gIE5vdGUgdGhhdCBkZWNsIGlzIGFsd2F5cyBub24tTlVMTCBub3csIGFuZAoJc2ltcGxpZnkgYWNjb3JkaW5nbHkuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogQWx3YXlzIGNhbGwKCXB1c2hfY3BfZnVuY3Rpb25fY29udGV4dC4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBBbHdheXMgY2FsbCBwb3BfY3BfZnVuY3Rpb25fY29udGV4dC4KCjE5OTktMDItMjYgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogQWRkIFZBTFVFIGFyZywgZm9yIGhlbHBmdWwKCWRpYWdub3N0aWNzLgoJY3AtdHJlZS5oIChjb21wbGV0ZV90eXBlX29yX2Vsc2UpOiBBZGRlZCBWQUxVRSBwYXJhbWV0ZXIuCgkqIGluaXQuYyAoYnVpbGRfbmV3XzEpOiBFeHRyYSBhcmcgdG8gY29tcGxldGVfdHlwZV9vcl9lbHNlLgoJKGJ1aWxkX2RlbGV0ZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogTGlrZXdpc2UuCgkocG9pbnRlcl9pbnRfc3VtKTogTGlrZXdpc2UuCgkocG9pbnRlcl9kaWZmKTogTGlrZXdpc2UuCgkoYnVpbGRfY29tcG9uZW50X3JlZik6IExpa2V3aXNlLgoJCgkqIHR5cGVjazIuYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogQWx3YXlzIHVzZSBjcF9lcnJvci4KCVNob3cgZGVjbGFyYXRpb24gb2YgdW5kZWZpbmVkIHR5cGUsIGlmIGFwcHJvcHJpYXRlLgoJRGVhbCB3aXRoIFVOS05PV05fVFlQRSBub2Rlcy4KCQoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogVXNlIFRZUEVfU0laRSBhcwoJc2l6ZV96ZXJvX25vZGUgdG8gbWVhbiBpbmNvbXBsZXRlIHR5cGUuCgkocmVxdWlyZV9jb21wbGV0ZV90eXBlX2luX3ZvaWQpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfY29tcG91bmRfZXhwcik6IENhbGwgY29tcGxldGVfdHlwZV9pbl92b2lkIGZvciBMSFMuCgkoYnVpbGRfY19jYXN0KTogQ2FsbCBjb21wbGV0ZV90eXBlX2luX3ZvaWQgZm9yIHZvaWQgY2FzdC4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogQ2FsbCBjb21wbGV0ZV90eXBlX2luX3ZvaWQgZm9yIHZvaWQgY2FzdC4KCSogZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcl9zdG10KTogVm9pZCBleHByZXNzaW9uIGNoZWNrcyBtb3ZlZCB0bwoJcmVxdWlyZV9jb21wbGV0ZV90eXBlX2luX3ZvaWQuIENhbGwgaXQuCgkqIGNwLXRyZWUuaCAocmVxdWlyZV9jb21wbGV0ZV90eXBlX2luX3ZvaWQpOiBQcm90b3R5cGUgbmV3IGZ1bmN0aW9uLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogVXNlIGFsdGVybmF0aXZlIGZvcm1hdCBmb3IgZnVuY3Rpb24gCglkZWNscy4gRG9uJ3QgcmVxdWlyZV9jb21wbGV0ZV90eXBlIGhlcmUuIFNpbXBsaWZ5IGRpYWdub3N0aWMgcHJpbnRpbmcuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBEb24ndCByZXF1aXJlX2NvbXBsZXRlX3R5cGUgb24gUkhTIHlldC4KCSogY2FsbC5jIChjb252ZXJ0X2FyZ190b19lbGxpcHNpcyk6IENhbGwgcmVxdWlyZV9jb21wbGV0ZV90eXBlLgoJCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ29wZSB3aXRoIHF1YWxpZmllZCB2b2lkIHJldHVybiB0eXBlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NhbGxfZXhwcik6IExpa2V3aXNlCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZQoJKGNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlCgkqIGRlY2wyLmMgKHJlcGFyc2VfYWJzZGNsX2FzX2V4cHIpOiBDb3BlIHdpdGggcXVhbGlmaWVkIHZvaWQgdHlwZS4KCQoJKiBjYWxsLmMgKHByaW50X3pfY2FuZGlkYXRlcyk6IFVzZSBhbHRlcm5hdGUgcHJpbnQgZm9ybWF0LCB0byBiZQoJY29uc2lzdGFudCB3aXRoIChwdC5jKSBwcmludF9jYW5kaWRhdGVzLgoJbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IExpc3QgY2FuZGlkYXRlIG1lbWJlcnMuCglzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogQnVpbGQgYW1iaWd1b3VzIGxpc3QsIGFuZCBzaG93IGl0LCBpZgoJYW1iaWd1b3VzLgoKMTk5OS0wMi0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogRG9uJ3QgY29uZnVzZSBjb25zdGFudCBhcnJheQoJdmFyaWFibGVzIHdpdGggdGhlaXIgaW50aWFpbGl6ZXJzLgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBDb3B5IERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVEVEIHdoZW4KCW1lcmdpbmcgZGVjbHMuCgkqIHB0LmMgKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogVHdlYWsgZm9yIGNsYXJpdHkuCgkoaW5zdGFudGlhdGVfZGVjbCk6IE1hcmsgYSBkZWNsIGluc3RhbnRpYXRlZCBiZWZvcmUgcmVnZW5lcmF0aW5nCglpdCB0byBhdm9pZCByZWN1cnNpb24uCgkqIHRyZWUuYyAobWFwY2FyKTogRG9uJ3QgY2FsbCBkZWNsX2NvbnN0YW50X3ZhbHVlIHVubGVzcyB3ZSBrbm93Cglzb21ldGhpbmcgaXMgVFJFRV9SRUFET05MWV9ERUNMX1AuCgoJKiBjbGFzcy5jIChjaGVja19mb3Jfb3ZlcnJpZGUpOiBEb24ndCBzdG9wIGNoZWNraW5nIHdoZW4gd2UgZmluZAoJdGhlIGZpcnN0IG92ZXJyaWRkZW4gZnVuY3Rpb24uICBEZWxldGUgI2lmIDAnZCBjb2RlLgoJKiBzZWFyY2guYyAoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBMaWtld2lzZS4KCQoxOTk5LTAyLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBEZWZpbmUgX19GQVNUX01BVEhfXyB3aGVuIGFwcHJvcHJpYXRlLgoKMTk5OS0wMi0yNCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbGxvdyBib29sZWFuIGludGVncmFsIGNvbnN0YW50CglleHByZXNzaW9ucyB0byBjb252ZXJ0IHRvIG51bGwgcG9pbnRlci4KCjE5OTktMDItMjQgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBSZXNvbHZlIG5hbWVzcGFjZSBhbGlhc2VzLgoKCSogY2xhc3MuYyAocHVzaF9uZXN0ZWRfY2xhc3MpOiBBbGxvdyBuYW1lc3BhY2VzLgoKCSogZGVjbDIuYyAoc2V0X2RlY2xfbmFtZXNwYWNlKTogQWRkIGZyaWVuZHAgcGFyYW1ldGVyLgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBQYXNzIGl0LgoJKGdyb2t2YXJkZWNsKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogQ2hhbmdlIGRlY2xhcmF0aW9uLgoKMTk5OS0wMi0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogQWxsb3cgYW4gYXJyYXkgb2YgZXhwbGljaXQgc2l6ZSB6ZXJvLgoKMTk5OS0wMi0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyZm4uYzogQ2hhbmdlIHZhcmFyZ3MgY29kZSB0byBsb29rIGxpa2UgdG9wbGV2LmMuCgoJKiBtZXRob2QuYyAocHJvY2Vzc19tb2RpZmllcnMpOiBEb24ndCBwcmVwZW5kICdVJyBmb3IgY2hhciBvcgoJd2NoYXJfdC4KCjE5OTktMDItMjAgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi5yZWFkeSk6IERvbid0IGNvbnNpZGVyIHVwZGF0aW5nCgljcGxpYjIgc3R1ZmYgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzbid0IHdyaXRhYmxlLCBhcwoJaXQgd29uJ3Qgd29yayAoc3VjaCBhcyBkdXJpbmcgYSBgbWFrZSBpbnN0YWxsJykuCgpTdW4gRmViIDIxIDIwOjM4OjAwIDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGRlY2wyLmMgKHN0YXJ0X29iamVjdHMpOiBNYWtlIGZpbGUgc2NvcGUgY29uc3RydWN0b3JzIGFuZAoJZGVzdHJ1Y3RvcnMgbG9jYWwgdG8gdGhlIGZpbGUgaWYgQVNNX09VVFBVVF9DT05TVFJVQ1RPUiBhbmQKCUFTTV9PVVRQVVRfREVTVFJVQ1RPUiBhcmUgZGVmaW5lZC4KCjE5OTktMDItMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9NRVRIT0RfVkVDKTogQWRqdXN0IGNvbW1lbnQuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkanVzdCBwcm90b3R5cGUuCgkobG9va3VwX2ZuZmllbGRzXzEpOiBEZWNsYXJlLgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IEFkanVzdCBjYWxsIHRvCglmbl90eXBlX3VuaWZpY2F0aW9uLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogRG9uJ3QgYWxsb3cgZHVwbGljYXRlIGRlY2xhcmF0aW9ucyBvZgoJY29uc3RydWN0b3JzIG9yIGRlc3RydWN0b3JzLgoJKHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCUFkanVzdCBjYWxsIHRvIGZuX3R5cGVfdW5pZmljYXRpb24uCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEJlIG1vcmUgcm9idXN0IGluIHRoZSBmYWNlIG9mIGlsbGVnYWwKCXNwZWNpYWxpemF0aW9ucy4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IFJlbW92ZSBob2tleSBoYW5kbGluZyBvZiBtZW1iZXIKCXRlbXBsYXRlcy4KCSogcHQuYyAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogSW1wcm92ZSBjb21tZW50cy4gIEFkanVzdCB0bwoJaGFuZGxlIHRlbXBsYXRlIGFyZ3VtZW50IGRlZHVjdGlvbiBhcyBwZXIgdGhlIHN0YW5kYXJkLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRml4IGNvbW1lbnQgc3BhY2luZy4gIEhhbmRsZQoJdHlwZS1jb252ZXJzaW9uIG9wZXJhdG9ycyBjb3JyZWN0bHkuICBJbXByb3ZlIGVycm9yLXJlY292ZXJ5LgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBSZW1vdmUgRVhUUkFfRk5fQVJHIHBhcmFtZXRlci4KCShnZXRfYmluZGluZ3NfcmVhbCk6IFNpbXBsaWZ5IGhhbmRsaW5nIG9mIHN0YXRpYyBtZW1iZXJzLgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzXzEpOiBNYWtlIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4KCSogdHlwZWNrLmMgKGNvbXBwYXJtcyk6IEZpeCBjb21tZW50LgoJKGJ1aWxkX3VuYXJ5X29wKTogRG9uJ3QgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggdGVtcGxhdGUKCXNwZWNpYWxpemF0aW9uIGlzIGJlaW5nIHJlZmVycmVkIHRvIHdoZW4gd2hlbiB0aGUgYWRkcmVzcy1vZgoJb3BlcmF0b3IgaXMgdXNlZCB3aXRoIGEgdGVtcGxhdGUgZnVuY3Rpb24uCgkKVGh1IEZlYiAxOCAyMzo0MDowMSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcC10cmVlLmggKGx2YWx1ZV9vcl9lbHNlKTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcKCWtleXdvcmQgdG8gbWF0Y2ggYW4gYW5hbG9nb3VzIGNoYW5nZSBhdCB0aGUgdG9wIGxldmVsLgoKCSogdHJlZS5jIChsdmFsdWVfb3JfZWxzZSk6IExpa2V3aXNlLgoKMTk5OS0wMi0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBDb21tZW50LgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSB4cmVmX2Jhc2V0eXBlcy4KCjE5OTktMDItMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKHRzdWJzdCk6IENoYW5nZSBwcm90b3R5cGUuCgkodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCSh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKHR5cGVfdW5pZmljYXRpb24pOiBSZW1vdmUgcHJvdG90eXBlLgoJKiBjYWxsLmMgKGNvbnZlcnRfZGVmYXVsdF9hcmcpOiBBZGp1c3QgY2FsbCB0byB0c3Vic3RfZXhwci4KCSogY2xhc3MuYyAocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBKdXN0IHVzZQoJZm5fdHlwZV91bmlmaWNhdGlvbi4gCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBZGp1c3QgY2FsbCB0byB0c3Vic3QuCgkqIG1ldGhvZC5jIChidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogTGlrZXdpc2UuCgkqIHB0LmMgKEdUQl9WSUFfVklSVFVBTCk6IE5ldyBtYWNyby4KCShHVEJfSUdOT1JFX1RZUEUpOiBMaWtld2lzZS4KCShyZXNvbHZlX292ZXJsb2FkZWRfdW5pZmljYXRpb24pOiBBZGQgYGNvbXBsYWluJyBwYXJhbWV0ZXIuCgkodHJ5X29uZV9vdmVybG9hZCk6IExpa2V3aXNlLgoJKHRzdWJzdF90ZW1wbGF0ZV9hcmdfdmVjdG9yKTogTGlrZXdpc2UuCgkodHN1YnN0X3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkodHN1YnN0X2FnZ3JfdHlwZSk6IExpa2V3aXNlLgoJKHRzdWJzdF9hcmdfdHlwZXMpOiBMaWtld2lzZS4KCSh0c3Vic3RfY2FsbF9kZWNsYXJhdG9yX3Bhcm1zKTogTGlrZXdpc2UuCgkodW5pZnkpOiBSZW1vdmUgZXhwbGljaXRfbWFzay4KCSh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBMaWtld2lzZS4KCShnZXRfdGVtcGxhdGVfYmFzZV9yZWN1cnNpdmUpOiBMaWtld2lzZS4KCShjb2VyY2VfdGVtcGxhdGVfdGVtcGxhdGVfcGFybXMpOiBQcm92aWRlIHByb3RvdHlwZS4KCSh0c3Vic3RfZnVuY3Rpb25fdHlwZSk6IExpa2V3aXNlLgoJKHRyeV9jbGFzc191bmlmaWNhdGlvbik6IE5ldyBmdW5jdGlvbi4KCUFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlIG5ldyBjb21wbGFpbiBwYXJhbWV0ZXIuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBVc2UgdHJ5X2NsYXNzX3VuaWZpY2F0aW9uLgoJKHVuaWZ5KTogQWRqdXN0IGhhbmRsaW5nIG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIHRlbXBsYXRlIHR5cGVzLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBTdWJzdGl0dXRlIGV4cGxpY2l0IGFyZ3VtZW50cyBiZWZvcmUKCXVuaWZpY2F0aW9uLgoJCjE5OTktMDItMTYgIEtyaWFuZyBMZXJkc3V3YW5ha2lqIDxsZXJkc3V3YUBzY2YtZnMudXNjLmVkdT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBSZW1vdmUgZGVhZCBjb2RlLgoKMTk5OS0wMi0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX29iamVjdHMpOiBGaXggY29kZSBJIG1pc3NlZCBpbiBwcmV2aW91cyBjaGFuZ2UuCgoxOTk5LTAyLTEzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBSZXR1cm4gTlVMTF9UUkVFIGluc3RlYWQgb2YgZXJyb3JfbWFya19ub2RlLgoJKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgZXhwZWN0IGVycm9yX21hcmtfbm9kZSBmcm9tIGdyb2tmbmRlY2wuCgoJKiBwdC5jIChtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDb21wbGFpbiBhYm91dAoJJ3RlbXBsYXRlIDw+JyBvbiBub24tc3BlY2lhbGl6YXRpb24uCgoxOTk5LTAyLTEwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2F0Y2ggd2llcmQgZGVjbGFyYXRvcnMuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgYWJvcnQgYmVjYXVzZSBvZiBuYW1lc3BhY2UgcGFyc2luZwoJZmFpbHVyZS4KCShjaGVja19kZWNsX25hbWVzcGFjZSk6IFJlbW92ZS4KCjE5OTktMDItMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGdldF90ZW1wbGF0ZV9iYXNlKTogRG9uJ3QgZGVjbGFyZS4KCShkZnNfd2Fsayk6IERlY2xhcmUuCgkoZGZzX3VubWFyayk6IExpa2V3aXNlLgoJKG1hcmtlZHApOiBMaWtld2lzZS4KCSogcHQuYyAodW5pZnkpOiBSZW1vdmUgZHVwbGljYXRlIGRlY2xhcmF0aW9uLiAgUGFzcyB0cGFybXMgYW5kCgl0YXJncyB0byBnZXRfdGVtcGxhdGVfYmFzZS4KCShnZXRfdGVtcGxhdGVfYmFzZV9yZWN1cnNpdmUpOiBNb3ZlIGhlcmUgZnJvbSBzZWFyY2guYy4gIENoZWNrIHRvCglzZWUgdGhhdCB0aGUgYmFzZSBmb3VuZCBjYW4gYmUgaW5zdGFudGlhdGVkIHRvIGZvcm0gdGhlIGRlc2lyZWQKCXR5cGUuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBMaWtld2lzZS4KCShnZXRfY2xhc3NfYmluZGluZ3MpOiBTaW1wbGlmeS4KCSogc2VhcmNoLmMgKGdldF90ZW1wbGF0ZV9iYXNlX3JlY3Vyc2l2ZSk6IE1vdmUgdG8gcHQuYy4KCShnZXRfdGVtcGxhdGVfYmFzZSk6IExpa2V3aXNlLgoJKG1hcmtlZHApOiBNYWtlIGl0IGdsb2JhbC4KCShkZnNfd2Fsayk6IExpa2V3aXNlLgoJKGRmc191bm1hcmspOiBMaWtld2lzZS4KCQoxOTk5LTAyLTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDb21wbGFpbiBhYm91dAoJc3BlY2lhbGl6YXRpb24gaW4gd3JvbmcgbmFtZXNwYWNlLgoJKiB0cmVlLmMgKGRlY2xfbmFtZXNwYWNlX2NvbnRleHQpOiBOZXcgZm4uCgoxOTk5LTAyLTA2ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiBkZWNsMi5jIChhcmdfYXNzb2NfdHlwZSk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgbmVzdGVkIAoJdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KClNhdCBGZWIgIDYgMTg6MDg6NDAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrMi5jOiBVcGRhdGUgZW1haWwgYWRkcnNzZXMuCgoxOTk5LTAyLTA0ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiBwdC5jICh1bmlmeSk6IENhbGwgY29lcmNlX3RlbXBsYXRlX3Bhcm1zIHdpdGggdGhlIENPTVBMQUlOIGZsYWcKCXR1cm5lZCBvZmYuCgoxOTk5LTAyLTA0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmV0cm9maXRfbGFuZ19kZWNsKTogU3BsaXQgb3V0Li4uCgkoYnVpbGRfbGFuZ19kZWNsKTogRnJvbSBoZXJlLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogQ2FsbCBpdCBmb3IgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSB0aGUgbWlkZGxlIAoJZW5kIHRoYXQgZG9uJ3QgaGF2ZSBERUNMX0xBTkdfU1BFQ0lGSUMuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCgkqIGRlY2wyLmM6IFJlbW92ZSBmbGFnX2luaXRfcHJpb3JpdHkuICBBbHdheXMgZW5hYmxlIGluaXRwIHN0dWZmLgoJKHN0YXJ0X29iamVjdHMsIGZpbmlzaF9vYmplY3RzKTogT25seSB1c2Ugc3BlY2lhbAoJaW5pdF9wcmlvcml0eSBjb2RlIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHByaW9yaXR5LgoJKGRvX2N0b3JzLCBkb19kdG9ycyk6IFVzZSBERUZBVUxUX0lOSVRfUFJJT1JJVFkgZm9yIHRoZSBub24taW5pdHAKCW9iamVjdHMuCgpXZWQgRmViICAzIDIyOjUwOjE3IDE5OTkgIE1hcmMgRXNwaWUgPE1hcmMuRXNwaWVAbGlhZmEuanVzc2lldS5mcj4KCiAgICAgICAgKiBNYWtlLWxhbmcuaW4gKEdYWF9PQkpTKTogUmVtb3ZlIGNob29zZS10ZW1wLm8sIHBleGVjdXRlLm8gYW5kCglta3N0ZW1wLm8uICBHZXQgdGhlbSBmcm9tIGxpYmliZXJ0eSBub3cuCgkoREVNQU5HTEVSX1BST0cpOiBTaW1sYXJseSwgcmVtb3ZlIGdldG9wdC5vIGdldG9wdDEuby4KCQpUdWUgRmViICAyIDIyOjM4OjQ4IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBVc2UgcmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIuCgoxOTk5LTAyLTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIFRZUEVOQU1FX1RZUEUpOiBDaGVjayBUWVBFX0JFSU5HX0RFRklORUQKCWJlZm9yZSBjYWxsaW5nIGNvbXBsZXRlX3R5cGVfb3JfZWxzZS4KCk1vbiBGZWIgIDEgMDk6NDk6NTIgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaW5wdXQuYyAoaW5saW5lKTogRG9uJ3QgZGVmaW5lLCBpdHMgaGFuZGxlZCBieSBzeXN0ZW0uaC4KClN1biBKYW4gMzEgMjA6MzQ6MjkgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBkZWNsMi5jOiBEb24ndCBkZWZpbmUgZmxhZ19ub19pZGVudCBoZXJlLiAgRG9uJ3QgcHJvY2VzcwoJLWYobm8tKWlkZW50IGhlcmUuCgkqIGNwLXRyZWUuaDogRG9uJ3QgZGVjbGFyZSBmbGFnX25vX2lkZW50IGhlcmUuCgkqIGxhbmctc3BlY3MuaDogTWFwIC1RbiB0byAtZm5vLWlkZW50LgoKMTk5OS0wMS0yOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgdHJlZV9iaW5kaW5nKTogUmVwbGFjZSBzY29wZSBmaWVsZCB3aXRoIGEgdW5pb24uCgkoQklORElOR19TQ09QRSk6IEFkanVzdC4KCSogZGVjbC5jIChCSU5ESU5HX0xFVkVMKTogQWRqdXN0LgoKMTk5OS0wMS0yNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBTZXQgdXAgdGhlIERFQ0xfSU5JVElBTCBvZgoJbWVtYmVyIGNvbnN0YW50cy4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogUHVsbCBvdXQgVFlQRV9NQUlOX1ZBUklBTlQgaW4KCWEgY3RvciBpbml0aWFsaXplci4KCgkqIHRyZWUuYyAoZXF1YWxfZnVuY3Rpb25zKTogRml4IG5hbWUgaW4gcHJvdG90eXBlLgoKCSogZGVjbC5jIChwdXNoX2xvY2FsX2JpbmRpbmcpOiBBZGQgRkxBR1MgYXJndW1lbnQuCgkocHVzaGRlY2wsIHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogUGFzcyBpdC4KCSogZGVjbDIuYyAoZG9fbG9jYWxfdXNpbmdfZGVjbCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IEFkanVzdCBwcm90b3R5cGUuCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBGaXggbG9naWMuCgoJKiBkZWNsLmMgKHB1c2hfbG9jYWxfYmluZGluZyk6IEFsc28gd3JhcCB1c2VkIGRlY2xzIGluIGEgVFJFRV9MSVNULgoJKHBvcGxldmVsKTogSGFuZGxlIHRoYXQuICBGaXggbG9naWMgZm9yIHJlbW92aW5nIFRSRUVfTElTVHMuCgkoY2F0X25hbWVzcGFjZV9sZXZlbHMpOiBEb24ndCBsb29wIGZvcmV2ZXIuCgoxOTk5LTAxLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBGaXggdHlwbyBpbiBkdXBsaWNhdGVkIHRlc3QuCgoxOTk5LTAxLTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IE1hcmsgdGhlCgljaG9zZW4gZnVuY3Rpb24gdXNlZC4KCgkqIGNhbGwuYyAoYnVpbGRfY2FsbCk6IE1ha2Ugc3VyZSB0aGF0IGEgZnVuY3Rpb24gY29taW5nIGluIGhhcwoJYmVlbiBtYXJrZWQgdXNlZCBhbHJlYWR5LgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IENhbGwgbWFya191c2VkIGluc3RlYWQgb2YKCWFzc2VtYmxlX2V4dGVybmFsLgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvLCBkb19wb3BfZXhjZXB0aW9uLCBleHBhbmRfZW5kX2VoX3NwZWMsIAoJYWxsb2NfZWhfb2JqZWN0LCBleHBhbmRfdGhyb3cpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9idWlsdGluX2RlbGV0ZV9jYWxsKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuLCBnZXRfdGluZm9fZm4sIGJ1aWxkX2R5bmFtaWNfY2FzdF8xLCAKCWV4cGFuZF9zaV9kZXNjLCBleHBhbmRfY2xhc3NfZGVzYywgZXhwYW5kX3B0cl9kZXNjLCBleHBhbmRfYXR0cl9kZXNjLAoJZXhwYW5kX2dlbmVyaWNfZGVzYyk6IExpa2V3aXNlLgoKMTk5OS0wMS0yNSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHRyZWUuYyAoZXF1YWxfZnVuY3Rpb25zKTogTmV3IGZ1bmN0aW9uLgoJKG92bF9tZW1iZXIpOiBDYWxsIGl0LgoKMTk5OS0wMS0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IEZpeCBjb252ZXJzaW9uIG9mIDAgdG8gcG1mLgoKMTk5OS0wMS0yNSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogUmV0dXJuIDEgaWYgb2xkIGFuZCBuZXcgYXJlIGlkZW50aWNhbC4KCShwdXNoX292ZXJsb2FkZWRfZGVjbCk6IFNldCBPVkxfVVNFRCB3aGVuIFBVU0hfVVNJTkcuCgoxOTk5LTAxLTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogTWFrZSBtZW1iZXIgZnVuY3Rpb25zIG9uZV9vbmx5IG9uIHdpbmRvd3MuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGNvbXBsYWluIGFib3V0IGltcGxpY2l0IGludCBpbgoJYSBzeXN0ZW0gaGVhZGVyLiAgQ2hhbmdlIHNhbWUtbmFtZSBmaWVsZCBjaGVjayB0byBub3QgY29tcGxhaW4gaW4KCWEgc3lzdGVtIGhlYWRlciBpbnN0ZWFkIG9mIHdpdGhpbiBleHRlcm4gIkMiLgoKMTk5OS0wMS0yMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoUFVTSF9HTE9CQUwpOiBOZXcgbWFjcm8uCgkoUFVTSF9MT0NBTCk6IExpa2V3aXNlLgoJKFBVU0hfVVNJTkcpOiBMaWtld2lzZS4KCShuYW1lc3BhY2VfYmluZGluZ3NfcCk6IERlY2xhcmUuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IERvbid0IG1ha2UgaXQgc3RhdGljLiAgQ2hlY2sgZm9yCglpbGxlZ2FsIGRlY2xhcmF0aW9ucyBhZnRlciB1c2luZyBkZWNsYXJhdGlvbnMgaGVyZS4KCShuYW1lc3BhY2VfYmluZGluZ3NfcCk6IExpa2V3aXNlLgoJKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbnNpZGVyIGRlY2xhcmF0aW9ucyBmcm9tIGRpZmZlcmVudAoJbmFtZXNwYWNlcyB0byBiZSB0aGUgc2FtZS4KCShwdXNoZGVjbCk6IFVzZSBzeW1ib2xpYyBQVVNIXyBjb25zdGFudHMgaW4gY2FsbHMgdG8KCXB1c2hfb3ZlcmxvYWRlZF9kZWNsLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsXzEpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAodmFsaWRhdGVfbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBUd2VhayBgc3RkJyBoYW5kbGluZy4gCgkoZG9fbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBDaGVjayBmb3IgaWxsZWdhbCB1c2luZyBkZWNsYXJhdGlvbnMKCWFmdGVyIG9yZGluYXJ5IGRlY2xhcmF0aW9ucyBoZXJlLgoJKGRvX2xvY2FsX3VzaW5nX2RlY2wpOiBDYWxsIHB1c2hkZWNsIHRvIGluc2VydCBkZWNsYXJhdGlvbnMuCgoxOTk5LTAxLTIxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRml4IGxhbmdfYyAtPiBsYW5nX25hbWVfYyB0eXBvLgoKMTk5OS0wMS0yMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogRG9uJ3QgY2FsbCBidWlsZF9hcnJheV90eXBlCglmb3IgdHlwZXMgaW52b2x2aW5nIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkKCSogY3AtdHJlZS5oIChQQVJNX0RFQ0xfRVhQUik6IERlbGV0ZS4KCShjb252ZXJ0X2RlZmF1bHRfYXJnKTogQ2hhbmdlIHByb3RvdHlwZS4KCShjaGVja19kZWZhdWx0X2FyZ3VtZW50KTogRGVjbGFyZS4KCShzZWFyY2hfdHJlZSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGNvbnZlcnRfZGVmYXVsdF9hcmcpOiBUYWtlIHRoZSBmdW5jdGlvbiB0byB3aGljaCB0aGUKCWRlZmF1bHQgYXJndW1lbnQgYmVsb25ncyBhcyBhIHBhcmFtZXRlciwgYW5kIGRvIGFueSBuZWNlc3NhcnkKCWluc3RhbnRpYXRpb24gaGVyZSwgaW5zdGVhZCBvZiAuLi4KCShidWlsZF9vdmVyX2NhbGwpOiBIZXJlLgoJKiBkZWNsLmMgKGxvY2FsX3ZhcmlhYmxlX3ApOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfZGVmYXVsdF9hcmd1bWVudCk6IExpa2V3aXNlLCBzcGxpdCBvdXQgYW5kIHRpZGllZCBmcm9tIC4uLgoJKGdyb2twYXJtcyk6IEhlcmUuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IERvbid0IHNldCBQQVJNX0RFQ0xfRVhQUi4KCSogcHQuYyAodHN1YnN0X2NhbGxfZGVjbGFyYXRvcl9wYXJtcyk6IE5ldyBmdW5jdGlvbi4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogSGFuZGxlIEFSUkFZX1JFRnMuICBEbyB0aGUgb2J2aW91cyB0aGluZwoJd2l0aCBDQUxMX0VYUFJzLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gYmUgY2xldmVyLgoJKHRzdWJzdCk6IFVzZSB0c3Vic3RfY2FsbF9kZWNsYXJhdG9yX3Bhcm1zLgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFVzZSBuZXcgaW50ZXJmYWNlIHRvCgljb252ZXJ0X2RlZmF1bHRfYXJnLgoJCjE5OTktMDEtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX2RlY2wpOiBEb24ndCBwcmludCB0aGUgYXJndW1lbnQgdHlwZXMgZm9yCglhIGZ1bmN0aW9uIHdoZW4gdGhlIHZlcmJvc2l0eSBsZXZlbCBpcyBuZWdhdGl2ZS4KCQoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENoZWNrIGZvcm1hdCBhdHRyaWJ1dGVzIGF0IGNhbGwtdGltZS4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogRml4IGNvbW1lbnQuCgkodW5pZnkpOiBEb24ndCBhbGxvdyB1bmlmaWNhdGlvbiB3aXRoIHZhcmlhYmxlLXNpemVkIGFycmF5cy4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfc3RtdF9leHByKTogV2hlbiBwcm9jZXNzaW5nIGEgdGVtcGxhdGUgbWFrZQoJdGhlIEJJTkRfRVhQUiBsb25nLWxpdmVkLgoKMTk5OS0wMS0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogTWFrZSB2dGFibGVzIGNvbWRhdCBoZXJlLgoJKGltcG9ydF9leHBvcnRfdnRhYmxlKTogTm90IGhlcmUuCgoxOTk5LTAxLTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IFdyYXAgYW4gT1ZFUkxPQUQgYXJvdW5kIGEgdW5pcXVlCglub24tc3RhdGljIG1lbWJlciBmdW5jdGlvbi4KCjE5OTktMDEtMTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgogICAgICAgICogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IE9ubHkgZGlhZ25vc2UgaWxsZWdhbCBhZGRyZXNzIG9mIG1lbWJlcgogICAgICAgIGZ1bmN0aW9uIGlmIGNvbXBsYWluaW5nLgoKICAgICAgICAqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFJlbW92ZSBkdXBsaWNhdGUgY29kZS4KCjE5OTktMDEtMTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoY29weV90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtKTogVXNlIHBlcm1hbmVudF9vYnN0YWNrLgoKMTk5OS0wMS0xOCAgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKICAgICAgICAqIHB0LmMgKHVuaWZ5KTogUmVtb3ZlIHJlc3RyaWN0aW9ucyBvbiBkZWR1Y3Rpb24gb2YgYXJndW1lbnQKICAgICAgICBvZiB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKMTk5OS0wMS0xOCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBSZXNvbHZlIE9GRlNFVF9SRUYgZXhwcnMuCgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IFNob3cgbGlzdCBvZgoJYWxsIGNhbmRpZGF0ZXMsIHdoZW4gbm9uZSBvZiB0aGVtIG1hdGNoLgoKMTk5OS0wMS0xOCAgQ2hpcCBTYWx6ZW5iZXJnICA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+CgoJKiB0eXBlY2suYyAoY29tcF9wdHJfdHR5cGVzX3JlaW50ZXJwcmV0KTogUGVyIEFOU0ksIHRpZ2h0ZW4gdXAKCWRlZmluaXRpb24gb2YgJ2Nhc3RpbmcgYXdheSBjb25zdCcgaW4gcmVpbnRlcnByZXRfY2FzdDw+LgoKMTk5OS0wMS0xOCAgR3JhaGFtIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGN2dC5jOiBBZGQgaW5jbHVkZSBmb3IgZGVjbC5oLCByZW1vdmUgZXh0ZXJuIGZvcgoJc3RhdGljX2FnZ3JlZ2F0ZXMgd2hpY2ggaXMgbm93IHByb3ZpZGVkIGJ5IGRlY2wuaC4KCgkqIE1ha2VmaWxlLmluIChjdnQubyk6IEFkZCBkZXBlbmRlbmN5IGZvciBkZWNsLmggYW5kIG1pc3NpbmcKCWRlcGVuZGVuY2llcyBmb3IgY29udmVydC5oIGFuZCBmbGFncy5oLgoKMTk5OS0wMS0xOCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGRlY2wyLmMgKGRvX2R0b3JzKTogU2V0IGN1cnJlbnQgbG9jYXRpb24gdG8gdGhhdCBvZiB0aGUKCWRlY2wsIGZvciBzZW5zaWJsZSBkaWFnbm9zdGljcyBhbmQgZGVidWdnaW5nLgoJKGNoZWNrX2NsYXNzZm4pOiBJc3N1ZSBgaW5jb21wbGV0ZSB0eXBlJyBlcnJvciwgaWYKCWNsYXNzIGlzIG5vdCBkZWZpbmVkLgoKMTk5OS0wMS0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBBZGQgcHJvdG90eXBlIGZvciBib3VuZF9wbWZfcC4KCjE5OTktMDEtMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCSAgICBNYW5mcmVkIEhvbGxzdGVpbiA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBtYWtlICdtYWluKCl7fScgYW4gZXJyb3Igd2l0aCBvbmx5CgktV3JldHVybi10eXBlLgoKMTk5OS0wMS0xNiAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfdHlwZSk6IEFkZGVkIGhhc19tdXRhYmxlIGZsYWcuCgkoQ0xBU1NUWVBFX0hBU19NVVRBQkxFKTogTmV3IG1hY3JvIHRvIGFjY2VzcyBpdC4KCShUWVBFX0hBU19NVVRBQkxFX1ApOiBOZXcgbWFjcm8gdG8gcmVhZCBpdC4KCShjcF9oYXNfbXV0YWJsZV9wKTogUHJvdG90eXBlIGZvciBuZXcgZnVuY3Rpb24uCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFNldCBoYXNfbXV0YWJsZSBmcm9tIG1lbWJlcnMuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBDbGVhciBkZWNsJ3MgVFJFRV9SRUFET05MWSBmbGFnLCBpZgoJaXQgY29udGFpbnMgYSBtdXRhYmxlLgoJKiB0eXBlY2suYyAoY3BfaGFzX211dGFibGVfcCk6IE5ldyBmdW5jdGlvbi4KCjE5OTktMDEtMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBJZ25vcmUgdG9wLWxldmVsIHF1YWxpZmllcnMgb24KCW5vbi10eXBlIHBhcmFtZXRlcnMuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogVXNlIGN1cnJlbnRfZnVuY3Rpb25fcGFybXMgaW4gdGhlIGNhbGwKCXRvIHJlcXVpcmVfY29tcGxldGVfdHlwZV9mb3JfcGFybXMsIG5vdCB0aGUgcHJvYmFibHkgZW1wdHkKCURFQ0xfQVJHVU1FTlRTLgoKMTk5OS0wMS0xNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IERvbid0IHdhcm4gYWJvdXQgcmVkdW5kYW50IHZvbGF0aWxlLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9jbGFzcyk6IE1VTFRJUExFX1NZTUJPTF9TUEFDRVMgb25seSBtZWFucwoJdGhhdCB3ZSBkb24ndCBzdXBwcmVzcyB0aGUgb3RoZXIgY29waWVzLgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IExpa2V3aXNlLgoKMTk5OS0wMS0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVbmRvIDE5OTgtMTItMTQgY2hhbmdlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGVfMSk6IExpa2V3aXNlLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSBtaXNsZWFkaW5nIGNvbW1lbnQuCgkodHN1YnN0X2FnZ3JfdHlwZSk6IFN1YnN0aXR1dGUgaWYgdGhlcmUgYXJlIHRlbXBsYXRlIHBhcmFtZXRlcnMsCglyZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZXkgdXNlIHRlbXBsYXRlIGFyZ3VtZW50cy4KCSh1bmlmeSk6IExpa2V3aXNlLCBidXQgZm9yIHVuaWZpY2F0aW9uLgoKMTk5OS0wMS0xMiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoZmxhZ19wZXJtaXNzaXZlKTogRGVjbGFyZSBleHRlcm4uCgoxOTk5LTAxLTA2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChJREVOVElGSUVSX1RZUEVOQU1FX1ApOiBVc2UgT1BFUkFUT1JfVFlQRU5BTUVfRk9STUFUCgloZXJlLiAKCShsYW5nX3R5cGUpOiBBZGQgaXNfcGFydGlhbF9pbnN0YW50aWF0aW9uLiAgRGVjcmVhc2Ugd2lkdGggb2YKCWR1bW15LiAKCShQQVJUSUFMX0lOU1RBTlRJQVRJT05fUCk6IE5ldyBtYWNyby4KCShPUEVSQVRPUl9UWVBFTkFNRV9QKTogUmVtb3ZlLgoJKiBkZWNsLmMgKHVuYXJ5X29wX3ApOiBVc2UgSURFTlRJRklFUl9UWVBFTkFNRV9QLCBub3QKCU9QRVJBVE9SX1RZUEVOQU1FX1AuIAoJKGdyb2tfb3BfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogSGFuZGxlIGZyaWVuZHMgdGhhdCBhcmUgbWVtYmVyIGZ1bmN0aW9ucwoJY29ycmVjdGx5LiAKCSogbGV4LmMgKGluaXRfcGFyc2UpOiBVc2UgT1BFUkFUT1JfVFlQRU5BTUVfRk9STUFULgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJld29yayBmb3IgY2xhcml0eS4gIEF2b2lkCglsZWF2aW5nIFRZUEVfQkVJTkdfREVGSU5FRCBzZXQgaW4gb2JzY3VyZSBjYXNlcy4gIERvbid0IGRvCglhbnkgbW9yZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gdGhhbiBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBmb3IKCWltcGxpY2l0IHR5cGVuYW1lLiAgU2V0IFBBUlRJQUxfSU5TVEFOVElBVElPTl9QLgoJKHRzdWJzdF9kZWNsKTogVXNlIElERU5USUZJRVJfVFlQRU5BTUVfUC4KCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBIYW5kbGUgcGFydGlhbAoJc3BlY2lhbGl6YXRpb25zIG9mIGEgdHlwZSB0aGF0IHdhcyBwcmV2aW91c2x5IHBhcnRpYWxseQoJaW5zdGFudGlhdGVkLiAKCQpXZWQgSmFuICA2IDAzOjE4OjUzIDE5OTkgIE1hcmsgRWxicmVjaHQgIDxzbm93YmFsbDNAdXNhLm5ldC4KCgkqIGcrK3NwZWMuYyAoTElCU1REQ1hYKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBVc2UgTElCU1REQ1hYIGluc3RlYWQgb2YgIi1sc3RkYysrIi4KClR1ZSBKYW4gIDUgMjI6MTE6MjUgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKICAgICAgICAqIE1ha2UtbGFuZy5pbiAoZysrLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoxOTk5LTAxLTA0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJvdW5kX3BtZl9wKTogTmV3IGZuLgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogVXNlIGl0LgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBVc2Ugc2FtZV90eXBlX3AuCgpUdWUgRGVjIDIyIDE1OjA5OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChjdnQubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNwLXRyZWUuaCAoY2hlY2tfdGVtcGxhdGVfc2hhZG93LCBwb2RfdHlwZV9wKTogQWRkIHByb3RvdHlwZXMuCgoJKiBjdnQuYzogSW5jbHVkZSB0b3BsZXYuaC4KCgkqIGV4Y2VwdC5jIChnZXRfZWhfY2F1Z2h0LCBnZXRfZWhfaGFuZGxlcnMpOiBIaWRlIHByb3RvdHlwZXMgYW5kCglkZWZpbml0aW9ucy4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgaXR5cGUnLgoKCSogbGV4LmMgKHl5ZXJyb3IpOiBDYXN0IHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gYSBjdHlwZSBmdW5jdGlvbiB0bwoJYW4gdW5zaWduZWQgY2hhci4KCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX0M5eF9uYW1lKTogV3JhcCBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24KCWluICJIT1NUX0JJVFNfUEVSX1dJREVfSU5UID49IDY0Ii4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBNYXJrIHBhcmFtZXRlciBgY29udmVydF9wJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKMTk5OC0xMi0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoVFlQRV9SQUlTRVNfRVhDRVBUSU9OUyk6IEltcHJvdmUgZG9jdW1lbnRhdGlvbi4KCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERvbid0IGNyYXNoIG9uIGVtcHR5IHRocm93CglzcGVjcy4gCgoxOTk4LTEyLTE4ICBESiBEZWxvcmllICA8ZGpAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IENoZWNrIGZvciBib3RoIGVycm9yX21hcmtfbm9kZQoJYW5kIE5VTExfTk9ERSBhZnRlciBjYWxsIHRvIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLgoKMTk5OC0xMi0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoaW50ZXJlc3Rpbmdfc2NvcGVfcCk6IE5ldyBmbi4KCShkdW1wX3NpbXBsZV9kZWNsKTogVXNlIGl0LgoJKGR1bXBfZXhwciwgY2FzZSBDT05TVFJVQ1RPUik6IEZvcmNlIGEgJiBmb3IgYSBQTUYuCgkoZHVtcF9leHByLCBjYXNlIE9GRlNFVF9SRUYpOiBQcmludCAtPiogaWYgYXBwcm9wcmlhdGUuCgoxOTk4LTEyLTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBEbyBjb252ZXJzaW9uCgl0byBjb3JyZWN0IHR5cGUgaGVyZSwgcmF0aGVyIHRoYW4gLi4uCgkoaW5zdGFudGlhdGVfdHlwZSk6IEhlcmUuCgoJKiBjcC10cmVlLmggKERFQ0xfVEVNUExBVEVfUEFSTV9QKTogTmV3IG1hY3JvLgoJKERFQ0xfVEVNUExBVEVfVEVNUExBVEVfUEFSTV9QKTogVXNlIGl0LgoJKGRlY2xfdGVtcGxhdGVfcGFybV9wKTogUmVtb3ZlLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3Qgc2V0IERFQ0xfQ09OVEVYVCBmb3IgYSB0ZW1wbGF0ZQoJcGFyYW10ZXIuIAoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IFVzZSBERUNMX1RFTVBMQVRFX1BBUk1fUC4KCSogcHQuYyAocHVzaF9pbmxpbmVfdGVtcGxhdGVfcGFybXNfcmVjdXJzaXZlKTogU2V0IGl0LgoJKGRlY2xfdGVtcGxhdGVfcGFybV9wKTogUmVtb3ZlLgoJKGNoZWNrX3RlbXBsYXRlX3NoYWRvdyk6IFVzZSBERUNMX1RFTVBMQVRFX1BBUk1fUC4KCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBTZXQgaXQuCgkKV2VkIERlYyAxNiAxNjozMzo1OCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmggKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtTUQsIC1NTUQgYW5kIC1NRyB0byBjYzFwbHVzCglpZiBjb25maWd1cmVkIHdpdGggY3BwbGliLgoKMTk5OC0xMi0xNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBNYWtlIHN1cmUgbnNfYmluZGluZyBpcyBpbml0aWFsaXplZC4KCQoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVuZG8gaW5hZHZlcnRhbnQgY2hhbmdlIGluIHByZXZpb3VzCglwYXRjaC4KCjE5OTgtMTItMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBUd2VhayBoYW5kbGluZyBvZiBjbGFzcy1sZXZlbCBiaW5kaW5ncy4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IFVwZGF0ZSBwb2ludGVyLXRvLW1lbWJlcgoJaGFuZGxpbmcuIAoJKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHBvcF9iaW5kaW5nKTogVGFrZSB0aGUgREVDTCB0byBwb3AsIG5vdCBqdXN0IHRoZSBuYW1lLgoJRGVhbCB3aXRoIGBzdHJ1Y3Qgc3RhdCcgaGFjay4KCShiaW5kaW5nX2xldmVsKTogQWRkIHRvIGRvY3VtZW50YXRpb24uCgkocHVzaF9iaW5kaW5nKTogQ2xlYXIgQklORElOR19UWVBFLgoJKGFkZF9iaW5kaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfbG9jYWxfYmluZGluZyk6IFVzZSBpdC4KCShwdXNoX2NsYXNzX2JpbmRpbmcpOiBMaWtld2lzZS4KCShwb3BsZXZlbCk6IEFkanVzdCBjYWxscyB0byBwb3BfYmluZGluZy4KCShwb3BsZXZlbF9jbGFzcyk6IExpa2V3aXNlLgoJKHB1c2hkZWNsKTogQWRqdXN0IGhhbmRsaW5nIG9mIFRZUEVfREVDTHM7IGFkZCBiaW5kaW5ncyBmb3IgaGlkZGVuCglkZWNsYXJhdGlvbnMgdG8gY3VycmVudCBiaW5kaW5nIGxldmVsLgoJKHB1c2hfY2xhc3NfbGV2ZWxfYmluZGluZyk6IExpa2V3aXNlLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogQWRqdXN0IGhhbmRsaW5nIG9mIE9WRVJMT0FEcyBpbiBsb2NhbAoJYmluZGluZ3MuIAoJKGxvb2t1cF9uYW1lc3BhY2VfbmFtZSk6IERvbid0IGNyYXNoIHdoZW4gY29uZnJvbnRlZCB3aXRoIGEKCVRFTVBMQVRFX0RFQ0wuIAoJKGxvb2t1cF9uYW1lX3JlYWwpOiBEbyBgc3RydWN0IHN0YXQnIGhhY2sgaW4gbG9jYWwgYmluZGluZwoJY29udGV4dHMuIAoJKGJ1aWxkX3B0cm1lbWZ1bmNfdHlwZSk6IEFkanVzdCBkb2N1bWVudGF0aW9uLgoJKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgYXZvaWQgYnVpbGRpbmcgcmVhbCBhcnJheSB0eXBlcyB3aGVuCglwcm9jZXNzaW5nIHRlbXBsYXRlcyB1bmxlc3MgcmVhbGx5IG5lY2Vzc2FyeS4KCShmaW5pc2hfbWV0aG9kKTogQWRqdXN0IGNhbGxzIHRvIHBvcF9iaW5kaW5nLgoJKiBkZWNsMi5jIChyZXBhcnNlX2Fic2RjbF9hc19leHByKTogUmVjdXJzaXZlbHkgY2FsbCBvdXJzZWx2ZXMsCglub3QgcmVwYXJzZV9kZWNsX2FzX2V4cHIuCgkoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBEZWFsIHdpdGggYSB0ZW1wbGF0ZS1pZCBhcyB0aGUgZnVuY3Rpb24gdG8KCWNhbGwgaW4gYSBNRVRIT0RfQ0FMTF9FWFBSLgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBUd2VhayBwb2ludGVyLXRvLW1lbWJlciBoYW5kbGluZy4KCShtYXliZV9hZGp1c3RfdHlwZXNfRm9yX2RlZHVjdGlvbik6IERvbid0IGRvIHBlY3VsaWFyIHRoaW5ncyB3aXRoCglNRVRIT0RfVFlQRXMgaGVyZS4KCShyZXNvbHZlX292ZXJsb2FkZWRfdW5pZmljYXRpb24pOiBIYW5kbGUgQ09NUE9ORU5UX1JFRnMuICBCdWlsZAoJcG9pbnRlci10by1tZW1iZXIgdHlwZXMgd2hlcmUgbmVjZXNzYXJ5LgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGVfMSk6IERvbid0IGF2b2lkIGJ1aWxkaW5nIHJlYWwKCWFycmF5IHR5cGVzIHdoZW4gcHJvY2Vzc2luZyB0ZW1wbGF0ZXMgdW5sZXNzIHJlYWxseSBuZWNlc3NhcnkuCgkoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBDb21wYXJlIHRoZSBleGNlcHRpb24gbGlzdHMgY29ycmVjdGx5LiAKCQoxOTk4LTEyLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5kZWYgKENQTFVTX0JJTkRJTkcpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KCSogY3AtdHJlZS5oIChMT0NBTF9CSU5ESU5HX1ApOiBOZXcgbWFjcm8uCgkobGFuZ19pZGVudGlmaWVyKTogUmVuYW1lIGxvY2FsX3ZhbHVlIHRvIGJpbmRpbmdzLgoJKHRyZWVfYmluZGluZyk6IE1ha2UgYHNjb3BlJyBvZiB0eXBlIGB2b2lkKicsIG5vdCBgdHJlZScuCgkoQklORElOR19TQ09QRSk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgoJKElERU5USUZJRVJfTE9DQUxfVkFMVUUpOiBSZW1vdmUuCgkoSURFTlRJRklFUl9DTEFTU19WQUxVRSk6IERvY3VtZW50LgoJKElERU5USUZJRVJfQklORElORyk6IE5ldyBtYWNyby4KCShJREVOVElGSUVSX1ZBTFVFKTogTGlrZXdpc2UuCgkoVElNRV9JREVOVElGSUVSX1RJTUUpOiBMaWtld2lzZS4KCShUSU1FX0lERU5USUZJRVJfRklMRUlORk8pOiBMaWtld2lzZS4KCShJTVBMSUNJVF9UWVBFTkFNRV9QKTogTGlrZXdpc2UuCgkoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUpOiBSZW1vdmUuCgkocHVzaF9sb2NhbF9iaW5kaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfY2xhc3NfYmluZGluZyk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBVcGRhdGUgY29tbWVudHM7IHVzZSBwdXNoX2NsYXNzX2JpbmRpbmcuCgkqIGRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWVfd2l0aF9zY29wZSk6IFJlbW92ZS4KCShzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZSk6IExpa2V3aXNlLgoJKHB1c2hfYmluZGluZyk6IE5ldyBmdW5jdGlvbi4KCShwb3BfYmluZGluZyk6IExpa2V3aXNlLgoJKGJpbmRpbmdfbGV2ZWwpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4gIFJlbW92ZSBzaGFkb3dlZC4KCShCSU5ESU5HX0xFVkVMKTogTmV3IG1hY3JvLgoJKGZyZWVfYmluZGluZ19ub2Rlcyk6IE5ldyB2YXJpYWJsZS4KCShwb3BsZXZlbCk6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4gIERvbid0IG1lc3MgdXAKCUJMT0NLX1ZBUnMgd2hlbiBkb2luZyBmb3Itc2NvcGUgZXh0ZW5zaW9uLiAgUmVtb3ZlIGVmZmVjdGl2ZWx5CglkZWFkIGNvZGUuCgkocHVzaGxldmVsX2NsYXNzKTogVHdlYWsgZm9ybWF0dGluZy4KCShwb3BsZXZlbF9jbGFzcyk6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4KCShwcmludF9iaW5kaW5nX2xldmVsKTogTGlrZXdpc2UuCgkoc3RvcmVfYmluZGluZ3MpOiBMaWtld2lzZS4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkocHVzaF9jbGFzc19sZXZlbF9iaW5kaW5nKTogTGlrZXdpc2UuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBVcGRhdGUgY29tbWVudHMuICBBZGp1c3QgZm9yIG5ldwoJbmFtZS1sb29rdXAgc2NoZW1lLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCShsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShyZXF1aXJlX2NvbXBsZXRlX3R5cGVzX2Zvcl9wYXJtcyk6IExpa2V3aXNlLiAgUmVtb3ZlIG1pc2xlYWRpbmcKCSNpZiAwJ2QgY29kZS4gCgkoZ3Jva19wYXJtcyk6IExpa2V3aXNlLiAgRG9uJ3QgY2FsbAoJcmVxdWlyZV9jb21wbGV0ZV90eXBlc19mb3JfcGFybXMgaGVyZS4KCShncm9rX2N0b3JfcHJvcGVydGllcyk6IERvbid0IHRyZWF0IHRlbXBsYXRlcyBhcyBjb3B5Cgljb25zdHJ1Y3RvcnMuIAoJKGdyb3Bfb3BfcHJvcGVydGllcyk6IE9yIGFzIGFzc2lnbm1lbnQgb3BlcmF0b3JzLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRG9jdW1lbnQuICBBZGp1c3QgZm9yIG5ldyBuYW1lLWxvb2t1cCBzY2hlbWUuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRvX2xvY2FsX3VzaW5nX2RlY2wpOiBVc2UgcHVzaF9sb2NhbF9iaW5kaW5nLgoJKiBsZXguYyAoYmVnaW5fZGVmaW5pdGlvbl9vZl9pbmNsYXNzX2lubGluZSk6IE5ldyBmdW5jdGlvbiwgc3BsaXQKCW91dCBmcm9tIC4uLgoJKGRvX3BlbmRpbmdfaW5saW5lcyk6IEhlcmUsIGFuZCAuLi4KCShwcm9jZXNzX25leHRfaW5saW5lKTogSGVyZS4KCShnZXRfdGltZV9pZGVudGlmaWVyKTogVXNlIFRJTUVfSURFTlRJRklFUl8qIG1hY3Jvcy4KCShpbml0X2ZpbGVuYW1lX3RpbWVzKTogTGlrZXdpc2UuCgkoZXh0cmFjdF9pbnRlcmZhY2VfaW5mbyk6IExpa2V3aXNlLgoJKHN0ZV90eXBlZGVjbF9pbnRlcmZhY2VfaW5mbyk6IExpa2V3aXNlLgoJKGNoZWNrX25ld2xpbmUpOiBMaWtld2lzZS4KCShkdW1wX3RpbWVfc3RhdGlzdGljcyk6IExpa2V3aXNlLgoJKGhhbmRsZV9jcF9wcmFnbWEpOiBMaWtld2lzZS4KCShkb19pZGVudGlmaWVyKTogQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBSZXR1cm4gY3Rvcl9pbml0aWFsaXplcl9vcHQgdmFsdWUuCgkoZm5kZWYpOiBVc2UgaXQuCgkoZm4uZGVmcGVuKTogUGFzcyBhcHByb3ByaWF0ZSB2YWx1ZXMgdG8gc3RhcnRfZnVuY3Rpb24uCgkocGVuZGluZ19pbmxpbmUpOiBVc2UgZnVuY3Rvcl90cnlfYmxvY2sgdmFsdWUsIGFuZCBwYXNzCglhcHByb3ByaWF0ZSB2YWx1ZXMgdG8gZmluaXNoX2Z1bmN0aW9uLgoJKiBwdC5jIChpc19tZW1iZXJfdGVtcGxhdGUpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbjsgcmVtb3ZlIGhhbmRsaW5nCglvZiBGVU5DVElPTl9ERUNMcy4gIEFzIHBlciBuYW1lLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkZWFsIG9ubHkgaW4KCVRFTVBMQVRFX0RFQ0xzLiAKCShkZWNsX3RlbXBsYXRlX3Bhcm1fcCk6IENoYW5nZSBuYW1lIG9mIG9sZGRlY2wgcGFyYW1ldGVyIHRvIGRlY2wuCgkoY2hlY2tfdGVtcGxhdGVfc2hhZG93KTogQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHRzdWJzdF9kZWNsKTogVHdlYWsgc28gYXMgbm90IHRvIGNvbmZ1c2UgbWVtYmVyIHRlbXBsYXRlcyB3aXRoCgljb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMuCgkodW5pZnkpOiBIYW5kbGUgVU5JT05fVFlQRXMuCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfaWRlbnRpZmllcik6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4KCShsYW5nX3ByaW50X3hub2RlKTogQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IExpa2V3aXNlLgoJKGNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgoJCjE5OTgtMTItMDggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbGxvdyBmaWVsZCB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcwoJaW4gZXh0ZXJuICJDIi4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGxpbWl0IGZpZWxkIGxvb2t1cCB0byB0eXBlcy4KCSogY2xhc3MuYyAoY2hlY2tfbWVtYmVyX2RlY2xfaXNfc2FtZV9pbl9jb21wbGV0ZV9zY29wZSk6IE5vIGVycm9yIAoJaWYgaWN2IGFuZCB4IGFyZSB0aGUgc2FtZS4KCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBUd2VhayBlcnJvciBtZXNzYWdlLgoKMTk5OC0xMi0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZW51bSk6IFVzZSBwdXNoX29ic3RhY2tzLCBub3QKCWVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KCShmaW5pc2hfZW51bSk6IENhbGwgcG9wX29ic3RhY2tzLgoKMTk5OC0xMi0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlIHJhdGhlciB0aGFuCglqdW5rLiAKCjE5OTgtMTItMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKG1vc3Rfc3BlY2lhbGl6ZWRfaW5zdGFudGlhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jYW5kaWRhdGVzKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKHZhbGlkYXRlX2xocyk6IFJlbW92ZS4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0CglhbmQgdGhlbiBzdWJzdGFudGlhbGx5IHJld29ya2VkLCBmcm9tIC4uLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBVc2UgaXQuICBTaW1wbGlmeS4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogQ29tcGxhaW4gd2hlbiBjYWxsZXIgaGFzIGluZGljYXRlZAoJdGhhdCdzIHRoZSByaWdodCB0aGluZyB0byBkby4gIERvbid0IGNyYXNoIGlmIGluc3RhbnRpYXRlX3R5cGUKCWZhaWxzLgoJKiBwdC5jOiBTdWJzdGl0dXRlIGBwYXJhbWV0ZXJzJyBmb3IgYHBhcmFtdGVycycgdGhyb3VnaG91dC4KCShwcmludF9jYW5kaWRhdGVzKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuCgkobW9zdF9zcGVjaWFsaXplZF9pbnN0YW50aWF0aW9uKTogU3BsaXQgb3V0IGZyb20gLi4uCgkobW9zdF9zcGVjaWFsaXplZCk6IEhlcmUuCgpXZWQgRGVjICA5IDE1OjMzOjAxIDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemUgY3BwbGliLgoJKiBkZWNsMi5jIChwYXJzZV9vcHRpb25zLGNwcF9pbml0aWFsaXplZCk6IFJlbW92ZWQuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogTW92ZSBpbml0aWFsaXphdGlvbiBvZiBjcHBsaWIgdG8KCWxhbmdfaW5pdF9vcHRpb25zLgoKMTk5OC0xMi0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVcGRhdGUgdGhlIG5hbWUgb2YgdGhlIFRFTVBMQVRFX0RFQ0wsIGFzCgl3ZWxsIGFzIHRoZSBUWVBFX0RFQ0wsIHdoZW4gYSB0eXBlZGVmIG5hbWUgaXMgYXNzaWduZWQgdG8gYQoJcHJldmlvdXNseSBhbm9ueW1vdXMgdHlwZS4KCjE5OTgtMTItMDggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwL2V4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiB1c2UgX19zdGFydF9jcF9oYW5kbGVyIGluc3RlYWQgb2YKCV9fY3BfZWhfaW5mbyBmb3IgZ2V0dGluZyB0aGUgZWggaW5mbyBwb2ludGVyLiBBZGQgdGFibGVfaW5kZXggdG8KCWZpZWxkIGxpc3QuCgkocHVzaF9laF9jbGVhbnVwKTogRG9uJ3QgaW5jcmVtZW50ICdoYW5kbGVycycgZGF0YSBmaWVsZC4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRG9uJ3Qgc2V0IHRoZSAnY2F1Z2h0JyBmaWVsZC4KCgkqIGNwL2V4Y2VwdGlvbi5jYyAoQ1BfRUhfSU5GTyk6IE5ldyBtYWNybyBmb3IgZ2V0dGluZyB0aGUgCglleGNlcHRpb24gaW5mbyBwb2ludGVyIHdpdGhpbiBsaWJyYXJ5IHJvdXRpbmVzLgoJKF9fY3BfZWhfaW5mbyk6IFVzZSBDUF9FSF9JTkZPLgoJKF9fc3RhcnRfY3BfaGFuZGxlcik6IEdldCBleGNlcHRpb24gaW5mbyBwb2ludGVyLCBzZXQgY2F1Z2h0IGZpZWxkLAoJYW5kIGluY3JlbWVudCB0aGUgaGFuZGxlcnMgZmllbGQuIEF2b2lkcyB0aGlzIGJlaW5nIGRvbmUgYnkgaGFuZGxlcnMuCgkoX191bmNhdGNoX2V4Y2VwdGlvbiwgX19jaGVja19laF9zcGVjKTogVXNlIENQX0VIX0lORk8gbWFjcm8uCgkodW5jYXVnaHRfZXhjZXB0aW9uKTogVXNlIENQX0VIX0lORk8gbWFjcm8uCgpUdWUgRGVjICA4IDEwOjQ4OjIxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2UtbGFuZy5pbiAoY3h4bWFpbi5vKTogRGVwZW5kIG9uICQoREVNQU5HTEVfSCksIG5vdCBkZW1hbmdsZS5oCgpNb24gRGVjICA3IDE3OjU2OjA2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogQWRkIHN1cHBvcnQgZm9yIFwgYXMgYG5hdHVyYWwnCgljaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMgaW4gI2xpbmUgdG8gYmUgY29uc2lzdGVudCB3aXRoICNpbmNsdWRlCgloYW5kbGluZy4gIFdlIHN1cHBvcnQgZXNjYXBlIHByY2Vzc2luZyBpbiB0aGUgIyAxICIuLi4iIHZlcnNpb24gb2YKCXRoZSBjb21tYW5kLiAgU2VlIGFsc28gc3VwcG9ydCBpbiBjcC9sZXguYy4KCQoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3AvZGVjbDIuYzogcy9kYXRhL29wdHMvIHdoZW4gaW5pdGlhbGl6aW5nIGNwcF9yZWFkZXIgCiAgICAgICAgICBzdHJ1Y3R1cmUuCgkKMTk5OC0xMi0wNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChidWlsZF90eXBlbmFtZV90eXBlKTogU2V0IERFQ0xfQVJUSUZJQ0lBTC4KCgkqIGVycm9yLmMgKGR1bXBfc2ltcGxlX2RlY2wpOiBBbHNvIHByaW50IG5hbWVzcGFjZSBjb250ZXh0LgoJKGR1bXBfZnVuY3Rpb25fZGVjbCk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBEb24ndCBwcmludCBvbGQgdmFsdWUgaWYgaXQncwoJZXJyb3JfbWFya19ub2RlLgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRml4IGhhbmRsaW5nIG9mIGxvY2FsIHR5cGVzIHNoYWRvd2VkCglieSBhIG5vbi10eXBlIGRlY2wuICBSZW1vdmUgb2Jzb2xldGUgY29kZS4KCSogY3AtdHJlZS5oIChERUNMX0ZVTkNUSU9OX1NDT1BFX1ApOiBOZXcgbWFjcm8uCgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mcGVybWlzc2l2ZS4KCSogZGVjbDIuYzogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogQWRkIGZsYWdfcGVybWlzc2l2ZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IElmIG5laXRoZXIgLWZwZXJtaXNzaXZlIG9yIC1wZWRhbnRpYwoJd2VyZSBzcGVjaWZpZWQsIHNldCBmbGFnX3BlZGFudGljX2Vycm9ycy4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBUdXJuIGRyb3BwZWQgcXVhbGlmaWVyIG1lc3NhZ2VzCgliYWNrIGludG8gcGVkd2FybnMuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoKMTk5OC0xMi0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoY29lcmNlX25ld190eXBlKTogVXNlIHNhbWVfdHlwZV9wLgoJKGNvZXJjZV9kZWxldGVfdHlwZSk6IExpa2V3aXNlLgoKCSogY2FsbC5jIChjaGVja19kdG9yX25hbWUpOiBSZXR1cm4gMSwgbm90IGVycm9yX21hcmtfbm9kZS4KCjE5OTgtMTItMDQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChoYW5kbGVfY3BfcHJhZ21hKTogRGlzYWJsZSAjcHJhZ21hIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbgoJaWYgTVVMVElQTEVfU1lNQk9MX1NQQUNFUy4KCgkqIHB0LmMgKGNoZWNrX3RlbXBsYXRlX3NoYWRvdyk6IE5ldyBmbi4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogVXNlIGl0LgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogTGlrZXdpc2UuCgkocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBMaWtld2lzZS4KCShzdGFydF9tZXRob2QpOiBMaWtld2lzZS4KCSh4cmVmX3RhZyk6IERvbid0IHRyeSB0byB1c2UgJ3QnIGlmIHdlJ3JlIGRlZmluaW5nLgoKCSogY2FsbC5jIChjaGVja19kdG9yX25hbWUpOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IENvbXBsYWluIGFib3V0IHVzaW5nIG5vbi10ZW1wbGF0ZSBoZXJlLgoJKiBwYXJzZS55IChhcHBhcmVudF90ZW1wbGF0ZV90eXBlKTogTm90IGhlcmUuCgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IENvbXBsYWluIGFib3V0IHNwZWNpYWxpemF0aW9uCgl3aXRoIEMgbGlua2FnZS4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZ7bm8tLH1pbXBsaWNpdC1pbmxpbmUtdGVtcGxhdGVzLgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogRG9uJ3QgYXNzdW1lIHRoYXQgYW55IGludGVnZXIKCWFyZ3VtZW50IGlzIGludGVuZGVkIHRvIGJlIGEgY29uc3RhbnQtZXhwcmVzc2lvbi4KCjE5OTgtMTItMDMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChoYW5kbGVfdXNpbmdfZGVjbCk6IEZpeCBjb21tZW50LiAgRG9uJ3QgbG9va3VwCgljb25zdHJ1Y3RvcnMgaW4gYmFzZSBjbGFzc2VzLgoJKHZhbGlkYXRlX2xocyk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfMSk6IERvbid0IHJldHVybiBhIFVTSU5HX0RFQ0wuCgkKCSogY3AtdHJlZS5oIChERUNMX0FDQ0VTUyk6IEltcHJvdmUgZG9jdW1lbnRhdGlvbi4KCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogRG9uJ3Qgc2V0IHRoZSBpbml0aWFsaXphdGlvbi1kb25lCglmbGFnIHVudGlsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLgoJCjE5OTgtMTItMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsMi5jICh2YWxpZGF0ZV9ub25tZW1iZXJfdXNpbmdfZGVjbCk6IENvbXBsYWluIGFib3V0IHVzaW5nCglkZWNsYXJhdGlvbnMgZm9yIGNsYXNzIG1lbWJlcnMuCgoxOTk4LTExLTI5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFVzZSBzYW1lX3R5cGVfcC4KCgkqIGRlY2wuYyAoY2hlY2tfdGFnX2RlY2wpOiBEb24ndCB3YXJuIGFib3V0IG51bGwgZGVjbCBpbnNpZGUgYSAKCWNsYXNzLgoKCSogcHQuYyAodW5pZnksIGNhc2UgT0ZGU0VUX1RZUEUpOiBQYXNzIGRvd24gJ3N0cmljdCcgcmF0aGVyIHRoYW4KCVVOSUZZX0FMTE9XX05PTkUuCgkoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogVXNlIFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFLgoJKHJlc29sdmVfb3ZlcmxvYWRlZF91bmlmaWNhdGlvbik6IFN0cmlwIGJhc2VsaW5rcy4KCkZyaSBOb3YgMjcgMTM6MDc6MjMgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZysrc3BlYy5jOiBEb24ndCBwcm90b3R5cGUgeG1hbGxvYy4KCjE5OTgtMTEtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBVc2UgVFlQRV9QVFJfUCB0byBjaGVjayBmb3IgcG9pbnRlcnMuCgoJKiBkZWNsLmMgKGNoZWNrX3RhZ19kZWNsKTogRG8gY29tcGxhaW4gYWJvdXQgbnVsbCBmcmllbmQgZGVjbCBhdAoJZmlsZSBzY29wZS4KCjE5OTgtMTEtMjUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGxleC5jIChtYWtlX2xhbmdfdHlwZSk6IENsZWFyIHRoZSB3aG9sZSBzdHJ1Y3QgbGFuZ190eXBlLCBub3QKCW9ubHkgdGhlIGZpcnN0IG11bHRpcGxlIG9mIHNpemVvZiAoaW50KS4KCjE5OTgtMTEtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IEFuIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIGEgc3RhdGljIGRhdGEKCW1lbWJlciBpcyBvbmx5IGEgZGVmaW5pdGlvbiBpZiBpdCBoYXMgYW4gaW5pdGlhbGl6ZXIuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogVXNlIGNwX2ZpbmlzaF9kZWNsIGZvciB0aGUgdGhyb3cgdGVtcC4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFBhc3MgRElSRUNUX0JJTkQgZG93biBpbnRvCgljcF9maW5pc2hfZGVjbC4KCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogQ2hlY2sgZm9yIERJUkVDVF9CSU5EIGluc3RlYWQgb2YKCURFQ0xfQVJUSUZJQ0lBTC4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogVXNlIGJ1aWxkX2RlY2wuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogSnVzdCB1c2UgY29udmVydCwgbm90CglidWlsZF9yZWludGVycHJldF9jYXN0LgoKCSogbGV4LmMgKGhhbmRsZV9nZW5lcmljX3ByYWdtYSk6IFVzZSB0b2tlbl9idWZmZXIuCgoJKiBkZWNsLmMgKGNoZWNrX3RhZ19kZWNsKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgbnVsbCBmcmllbmQgZGVjbC4KCjE5OTgtMTEtMjQgIERhdmUgUGl0dHMgIDxkcGl0dHNAY296eC5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKERFTUFOR0xFUl9QUk9HKTogTW92ZSB0aGUgb3V0cHV0IGFyZ3VtbnRzIHRvIHRoZSAKCWZpcnN0IHBvc2l0aW9uLgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IFVzZSBJU0FMUEhBLgoJKHJlYWRlc2NhcGUpOiBVc2UgSVNHUkFQSC4KCSh5eWVycm9yKTogVXNlIElTR1JBUEguCgoxOTk4LTExLTI0ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogc2VhcmNoLmMgKGdldF9hYnN0cmFjdF92aXJ0dWFscyk6IERvIG5vdCB1c2UgaW5pdGlhbAoJQ0xBU1NUWVBFX0FCU1RSQUNUX1ZJUlRVQUxTLgoJKiB0eXBlY2syLmMgKGFic3RyYWN0X3ZpcnR1YWxzX2Vycm9yKTogU2hvdyBsb2NhdGlvbiBvZiBhYnN0cmFjdAoJZGVjbGFyYXRpb24uCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogVXNlCglDTEFTU1RZUEVfQUJTVFJBQ1RfVklSVFVBTCwgcmF0aGVyIHRoYW4gcmVjYWxjdWxhdGUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IERvbid0IGJvdGhlciB3b3JraW5nIG91dCB3aGV0aGVyCglnZXRfYWJzdHJhY3RfdmlydHVhbHMgd2lsbCBkbyBhbnl0aGluZywganVzdCBkbyBpdC4KCjE5OTgtMTEtMjQgIEdyYWhhbSA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IFJlbW92ZSB1bnVzZWQgc3RhdGVtZW50LgoKMTk5OC0xMS0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IENhdGNoIGludmFsaWQgb3ZlcmxvYWRzLgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IEJ1aWxkIHVwIE9WRVJMT0FEcyBwcm9wZXJseSBmb3IgY29udmVyc2lvbiBvcHMuCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBIYW5kbGUgZ2V0dGluZyByZWFsIE9WRVJMT0FEcy4KCShhZGRfY29udmVyc2lvbnMpOiBMaWtld2lzZS4gIFJldmVydCBsYXN0IGNoYW5nZS4KCSogY2FsbC5jIChhZGRfY29udl9jYW5kaWRhdGUpOiBQYXNzIHRvdHlwZSB0byBhZGRfY2FuZGlkYXRlIGluc3RlYWQKCW9mIGZuLiAgRG9uJ3QgYWRkIGEgbmV3IGNhbmRpZGF0ZSBpZiB0aGUgbGFzdCBvbmUgd2FzIGZvciB0aGUgc2FtZSAKCXR5cGUuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogSGFuZGxlIGdldHRpbmcgYSB0eXBlIGFzIGEgZnVuY3Rpb24uCgkoam91c3QpOiBJZiB3ZSBnb3QgdHdvIGNvbnZlcnNpb24gY2FuZGlkYXRlcyB0byB0aGUgc2FtZSB0eXBlLCAKCWp1c3QgcGljayBvbmUuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMb3NlICd0ZW1wbGF0ZXMnLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgZ2V0dGluZyByZWFsIE9WRVJMT0FEcy4KCjE5OTgtMTEtMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogSWYgdGhlcmUgYXJlIGVsZW1lbnRzCgl0aGF0IGRvbid0IGhhdmUgaW5pdGlhbGl6ZXJzIGFuZCB0aGV5IG5lZWQgdG8gaGF2ZSBjb25zdHJ1Y3RvcnMKCXJ1biwgc3VwcGx5IHRoZW0gd2l0aCBpbml0aWFsaXplcnMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBIGNsYXNzIHdpdGggYSAwLXdpZHRoIGJpdGZpZWxkIGlzCglzdGlsbCBlbXB0eS4KCjE5OTgtMTEtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IHRyeSB0byBmaWd1cmUgb3V0IHdoYXQKCXNwZWNpYWxpemF0aW9uIHRvIHVzZSBmb3IgYSBwYXJ0aWFsIGluc3RhbnRpYXRpb24uICBDb3JyZWN0Cgl0eXBvcyBpbiBhIGNvdXBsZSBvZiBjb21tZW50cy4gIEF2b2lkIGNhbGxpbmcgdXNlc190ZW1wbGF0ZV9wYXJtcwoJbXVsdGlwbGUgdGltZXMuCgoxOTk4LTExLTIzICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGN5Z251cy5jb20+CgogICAgICAgICogbWV0aG9kLmMgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IEFkZCBjYWxsIHRvCiAgICAgICAgYnVpbGRfbWFuZ2xlZF9DOXhfbmFtZSBmb3IgaW50VElfdHlwZV9ub2Rlcy4KICAgICAgICAoYnVpbGRfbWFuZ2xlZF9DOXhfbmFtZSk6IEFkZCBwcm90b3R5cGUsIGRlZmluZS4KICAgICAgICAqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgbmFtZXMgZm9yCiAgICAgICAgVEltb2RlX3R5cGVfbm9kZS4gCgkKMTk5OC0xMS0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZCk6IFVwZGF0ZSBDTEFTU1RZUEVfREVDTEFSRURfQ0xBU1MuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBTZXQgdGhpbmdzIHVwIGZvciAwLXdpZHRoIGJpdGZpZWxkcwoJbGlrZSB3ZSBkbyBmb3Igb3RoZXJzLgoKCSogZGVjbC5jIChjaGVja190YWdfZGVjbCk6IE5ldyBmbi4KCShzaGFkb3dfdGFnKTogU3BsaXQgb3V0IGZyb20gaGVyZS4KCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBDYWxsIGl0LgoKMTk5OC0xMS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jOiBMb3NlIHdhcm5fYWJvdXRfcmV0dXJuX3R5cGUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBbHdheXMgY29tcGxhaW4gYWJvdXQgaW1wbGljaXQgaW50LCBleGNlcHQgZm9yCglgbWFpbiAoKSB7IC4uLiB9Jy4KCgkqIGRlY2wuYyAodGFnX25hbWUpOiBOZXcgZm4uCgkoeHJlZl90YWcpOiBDb21wbGFpbiBhYm91dCB1c2luZyB0eXBlZGVmLW5hbWUgYWZ0ZXIgY2xhc3Mta2V5LgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBBbHNvIGtlZXAgZ29pbmcgaWYgZnJvbV9hcnJheS4KCgkqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IEFsc28gaGFuZGxlIHRoZSBvdXRwdXQgb2YKCWJ1aWxkX29mZnNldF9yZWYuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIGNvbnN0cnVjdG9yX25hbWUgd2hlbiBjb21wYXJpbmcKCWZpZWxkIG5hbWUgYWdhaW5zdCBlbmNsb3NpbmcgY2xhc3MuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IExpa2V3aXNlLgoKMTk5OC0xMS0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBSZW1vdmUgY29kZSB0byBoYW5kbGUgS0VFUCA9PSAyLgoJKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGNvbmZ1c2UgQkxPQ0stb3JkZXIgd2hlbgoJcHJvY2Vzc2luZyBhIGRlc3RydWN0b3IuCgoxOTk4LTExLTIxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZXNfZm9yX3Bhcm1zKTogQ2FsbCBsYXlvdXRfZGVjbAoJYWZ0ZXIgd2UndmUgY29tcGxldGVkIHRoZSB0eXBlLgoKMTk5OC0xMS0yMSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogQWxsb3cgdXNpbmcgdGVtcGxhdGVzCglmcm9tIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgoKMTk5OC0xMS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUhhbmRsZSBzcGVjaWZ5aW5nIHRlbXBsYXRlIGFyZ3MgdG8gbWVtYmVyIGZ1bmN0aW9uIHRlbXBsYXRlcy4KCSogdHJlZS5jIChidWlsZF9vdmVybG9hZCk6IEFsd2F5cyBjcmVhdGUgYW4gT1ZFUkxPQUQgZm9yIGEgdGVtcGxhdGUuCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBIYW5kbGUgZmluZGluZyBhbiBPVkVSTE9BRC4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IExpa2V3aXNlLgoJKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogU2VlIHRocm91Z2ggYSBiYXNlbGluay4KCSogcGFyc2UueSAoZG9faWQpOiBEb24ndCBjYWxsIGRvX2lkZW50aWZpZXIgaWYgd2UgZ290IGEgYmFzZWxpbmsuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUsIGNhc2UgVFJFRV9MSVNUKTogUmVjdXJzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbGxvdyBhIGJvb2xlYW4gY29uc3RhbnQgZm9yIGFycmF5Cglib3VuZHMsIG9kZCBhcyB0aGF0IHNvdW5kcy4KCgkqIHB0LmMgKHVuaWZ5KTogQmUgbW9yZSBzdHJpY3QgYWJvdXQgbm9uLXR5cGUgcGFybXMsIGV4Y2VwdCBmb3IKCWFycmF5IGJvdW5kcy4KCShVTklGWV9BTExPV19JTlRFR0VSKTogTmV3IG1hY3JvLgoKMTk5OC0xMS0xOSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZS1sYW5nLmluIChtYW5kaXIpOiBSZXBsYWNlIGFsbCB1c2VzIG9mICQobWFuZGlyKSBieSAkKG1hbjFkaXIpLgoKMTk5OC0xMS0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBDYWxsCgltYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24gYmVmb3JlIHB1c2hfdGVtcGxhdGVfZGVjbC4KCURvbid0IGNhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIGZvciBhIHNwZWNpYWxpemF0aW9uLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogRG8gcmV0dXJuIGEgbWVtYmVyIHRlbXBsYXRlIGNsYXNzLgoJKiBkZWNsMi5jIChoYW5kbGVfY2xhc3NfaGVhZCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgY2xhc3Nlcy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBIHBhcm0gdHlwZSBuZWVkIG5vdCBiZSBjb21wbGV0ZS4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IEZpeCB0aGlua28uCgoxOTk4LTExLTE4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChQVFJNRU1fQ1NUX0NMQVNTKTogRml4IHR5cG8uCgkoZ2xvYmFsX2RlbGV0ZV9mbmRlY2wpOiBOZXcgdmFyaWFibGUuCgkqIGRlY2wuYyAoZ2xvYmFsX2RlbGV0ZV9mbmRlY2wpOiBEZWZpbmUgaXQuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgaXQuCgkqIGluaXQuYyAoYnVpbGRfYnVpbHRpbl9kZWxldGVfY2FsbCk6IFVzZSBpdC4KCSogdHJlZS5jIChtYXBjYXIpOiBSZWN1cnNpdmVseSBjYWxsIG1hcGNhciBmb3IgdGhlIHR5cGUgb2YgRVhQUgoJbm9kZXMuCgoxOTk4LTExLTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBBbHdheXMgY29tcGxhaW4gYWJvdXQgdW5yZXNvbHZlZAoJdHlwZS4KCgkqIHRyZWUuYyAobHZhbHVlX3BfMSk6IEFuIElORElSRUNUX1JFRiB0byBhIGZ1bmN0aW9uIGlzIGFuIGx2YWx1ZS4KCSogY2FsbC5jIChidWlsZF9vYmplY3RfY2FsbCk6IEFsc28gc3VwcG9ydCByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucy4KCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogRG9uJ3QgZGVjYXkgYSBmdW5jdGlvbgoJaWYgdGhlIHRhcmdldCBpcyBhIHJlZmVyZW5jZSB0byBmdW5jdGlvbi4KCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBHZXQgYWxsIHRoZSBvdmVybG9hZHMgZnJvbSBhIGNsYXNzLgoKCSogZGVjbC5jIChncm9rX2N0b3JfcHJvcGVydGllcyk6IENvbXBsYWluIGFib3V0IGFueSBjb25zdHJ1Y3RvcgoJdGhhdCB3aWxsIHRha2UgYSBzaW5nbGUgYXJnIG9mIHRoZSBjbGFzcyB0eXBlIGJ5IHZhbHVlLgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBDYW4ndCBjcmVhdGUgb2JqZWN0cyBvZiAKCWFic3RyYWN0IGNsYXNzZXMgdGhpcyB3YXkuCgkqIGN2dC5jIChvY3BfY29udmVydCk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogTWVtYmVyIGZ1bmN0aW9ucyBvZiBsb2NhbCBjbGFzc2VzIGFyZSBub3QKCXB1YmxpYy4KCjE5OTgtMTEtMTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGNjMXBsdXMpOiBBZGQgZGVwZW5kZW5jeSBvbiBoYXNoLm8uCgoxOTk4LTExLTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzKTogQ29tcGxhaW4gYWJvdXQgdmlydHVhbHMgd2l0aAoJbm8gZmluYWwgb3ZlcnJpZGVyLgoJKiB0eXBlY2syLmMgKGFic3RyYWN0X3ZpcnR1YWxzX2Vycm9yKTogUmVtb3ZlIGhhbmRsaW5nIGZvciB2aXJ0dWFscwoJd2l0aCBubyBmaW5hbCBvdmVycmlkZXIuCgkqIGNsYXNzLmMgKG92ZXJyaWRlX29uZV92dGFibGUpOiBEb24ndCBzZXQgREVDTF9BQlNUUkFDVF9WSVJUVUFMX1AKCW9uIHZpcnR1YWxzIHdpdGggbm8gZmluYWwgb3ZlcnJpZGVyLgoKCSogbGV4LmMgKHJlaW5pdF9wYXJzZV9mb3JfYmxvY2spOiBBZGQgYSBzcGFjZSBhZnRlciB0aGUgaW5pdGlhbCAnOicuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBEb24ndCByZW1vdmUgemVyby13aWR0aCBiaXQtZmllbGRzIHVudGlsCglhZnRlciBsYXlvdXRfdHlwZS4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBEb24ndCBzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9hbm9uKTogQ29tcGxhaW4gYWJvdXQgbm9uLWZpZWxkcy4KCSogZGVjbDIuYyAoYnVpbGRfYW5vbl91bmlvbl92YXJzKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTm9ybWFsIGRhdGEgbWVtYmVycyBjYW4ndCBoYXZlIHRoZSBzYW1lCgluYW1lIGFzIHRoZSBjbGFzcywgZWl0aGVyLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2Fub24pOiBOZWl0aGVyIGNhbiBtZW1iZXJzIG9mIGFuCglhbm9ueW1vdXMgdW5pb24uCgoxOTk4LTExLTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChUWVBFX0FMSUFTX1NFVCk6IERvY3VtZW50IGxhbmd1YWdlLWRlcGVuZGVudCB1c2VzLgoJKFRZUEVfQklORk8pOiBMaWtld2lzZS4KCShJU19BR0dSX1RZUEUpOiBUd2Vhay4KCShTRVRfSVNfQUdHUl9UWVBFKTogTmV3IG1hY3JvLgoJKENMQVNTX1RZUEVfUCk6IFR3ZWFrLgoJKGxhbmdfdHlwZSk6IEdyb3VwIG1hcmsgYml0ZmllbGRzIHRvZ2V0aGVyLiAgUmVtb3ZlIGxpbmVudW0uCgkoQ0xBU1NUWVBFX1NPVVJDRV9MSU5FKTogUmVtb3ZlIG1hY3JvLgoJKENMQVNTVFlQRV9NQVJLRURfTik6IE5ldyBtYWNyby4KCShTRVRfQ0xBU1NUWVBFX01BUktFRF9OKTogTGlrZXdpc2UuCgkoQ0xFQVJfQ0xBU1NUWVBFX01BUktFRF9OKTogTGlrZXdpc2UuCgkoQ0xBU1NfVFlQRV9NQVJLRURfKik6IFVzZSB0aGVtLgoJKFNFVF9DTEFTU1RZUEVfTUFSS0VEXyopOiBMaWtld2lzZS4KCShDTEVBUl9DTEFTU1RZUEVfTUFSS0VEXyopOiBMaWtld2lzZS4KCShURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0lORk8pOiBMaWtld2lzZS4KCShUWVBFX1RFTVBMQVRFX0lORk8pOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTXMgYXMgd2VsbC4KCShUWVBFTkFNRV9UWVBFX0ZVTExOQU1FKTogVXNlIFRZUEVfQklORk8gcmF0aGVyIHRoYW4gQ0xBU1NUWVBFX1NJWkUuCgkqIGNsYXNzLmMgKGNsYXNzX2NhY2hlX29ic3RhY2spOiBOZXcgdmFyaWFibGUuCgkoY2xhc3NfY2FjaGVfZmlyc3RvYmopOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0KTogRG9uJ3Qgc2V0IENMQVNTVFlQRV9TT1VSQ0VfTElORS4KCShwdXNoY2xhc3MpOiBGcmVlIHRoZSBjYWNoZSwgd2hlbiBhcHByb3ByaWF0ZS4KCShwb3BjbGFzcyk6IFRpZHkuCgkobWF5YmVfcHVzaF9jYWNoZV9vYnN0YWNrKTogVXNlIGNsYXNzX2NhY2hlX29ic3RhY2suCgkqIGRlY2wuYyAoaW5jbHVkZSBoYXNoLmgpLgoJKHR5cGVuYW1lX2hhc2gpOiBOZXcgZnVuY3Rpb24uCgkodHlwZW5hbWVfY29tcGFyZSk6IExpa2V3aXNlLgoJKGJ1aWxkX3R5cGVuYW1lX3R5cGUpOiBDaGVjayB0aGUgaGFzaCB0YWJsZSB0byBhdm9pZCBjcmVhdGluZwoJZHVwbGljYXRlcy4KCShidWlsZF9wdHJtZW1mdW5jX3R5cGUpOiBVc2UgU0VUX0lTX0FHR1JfVFlQRS4KCShncm9rZGVjbGFyYXRvcik6IFVzZSBDTEFTU19UWVBFX1AuCgkoeHJlZl9iYXNldHlwZXMpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLiAgRG9uJ3QgcHV0IGN1cnJlbnRfY2xhc3NfcmVmIG9uIHRoZQoJcGVybWFuZW50IG9ic3RhY2suCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogVXNlCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfSU5GTwoJYW5kIFRZUEVfVElfQVJHUy4KCSogbGV4LmMgKG5vdGVfZ290X3NlbWljb2xvbik6IFVzZSBDTEFTU19UWVBFX1AuCgkobWFrZV9sYW5nX3R5cGUpOiBEb24ndCBjcmVhdGUgVFlQRV9MQU5HX1NQRUNJRklDIGFuZCBhc3NvY2lhdGVkCglmaWVsZHMgZm9yIHR5cGVzIG90aGVyIHRoYW4gY2xhc3MgdHlwZXMuICBEbyBjbGVhciBUWVBFX0FMSUFTX1NFVAoJZm9yIHR5cGVzIG90aGVyIHRoYW4gY2xhc3MgdHlwZXMsIHRob3VnaC4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBVc2UgQ0xBU1NfVFlQRV9QIGFuZAoJVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPLgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBEb24ndCBzZXQKCUNMQVNTVFlQRV9HT1RfU0VNSUNPTE9OLiAgCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKSBVc2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPLgoJQ29lcmNlIGFyZ3VtZW50cyBvbiB0aGUgbW9tZW50YXJ5IG9ic3RhY2suCgkoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IFVzZSBURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0lORk8uCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxjdWxhdGUgdGVtcGxhdGUgYXJndW1lbnRzIG9uIHRoZQoJbW9tZW50YXJ5IG9ic3RhY2suICBUaWR5LgoJKHRzdWJzdF90ZW1wbGF0ZV9hcmdfdmVjdG9yKTogVXNlIG1ha2VfdGVtcF92ZWMuCgkodHN1YnN0X2FnZ3JfdHlwZSk6IFB1dCB0ZW1wbGF0ZSBhcmd1bWVudHMgb24gdGhlIG1vbWVudGFyeQoJb2JzdGFjay4gCgkodHN1YnN0X2RlY2wpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBDb3B5IHRoZSBhcnJheSBib3VuZHMgaW5kZXggdG8gdGhlIHBlcm1hbmVudCBvYnN0YWNrCgliZWZvcmUgYnVpbGRpbmcgaW5kZXggdHlwZXMuICBVc2UgbmV3IG1hY3Jvcy4KCSh1bmlmeSk6IFVzZSBuZXcgbWFjcm9zLgoJKGRvX3R5cGVfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzXzEpOiBVc2UgbmV3IG1hY3Jvcy4KCShkZnNfcHVzaGRlY2xzKTogQnVpbGQgZW52ZWxvcGVzIG9uIHRoZSBjYWNoZSBvYnN0YWNrLgoJKGRmc19jb21wcmVzc19kZWNscyk6IFVzZSBuZXcgbWFjcm9zLgoJKHB1c2hfY2xhc3NfZGVjbHMpOiBCdWlsZCBvbiB0aGUgY2FjaGUgb2JzdGFjay4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90eXBlb2YpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04uCgkqIHNpZ24uYyAoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfb3JfcmVmZXJlbmNlX3R5cGUpOiBVc2UKCVNFVF9JU19BR0dSX1RZUEUuCgkqIHRyZWUuYyAobWFrZV9iaW5mbyk6IENoZWNrIENMQVNTX1RZUEVfUC4KCShjb3B5X3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBBZGp1c3QuCgkobWFrZV90ZW1wX3ZlYyk6IFVzZSBwdXNoX2V4cHJlc2lvbl9vYnN0YWNrLgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IFVzZSBuZXcgbWFjcm9zLgoJKGNvbXB0eXBlcyk6IExpa2V3aXNlLgoJCjE5OTgtMTEtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IEFkZCBkaWFnbm9zdGljcyBmb3IgaW52YWxpZCBhcnJheSwgcmVmZXJlbmNlCglhbmQgcG9pbnRlciB0byBtZW1iZXIgdHlwZXMuCgoxOTk4LTExLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogRG9uJ3QgZmF0YWwgdHdpY2UgaW4gYSByb3cuCgoJKiB0eXBlY2suYyAoY19leHBhbmRfc3RhcnRfY2FzZSk6IFVzZSBidWlsZF9leHByX3R5cGVfY29udmVyc2lvbi4KCVNpbXBsaWZ5LgoKCSogcGFyc2UueSAoc3RydWN0c3ApOiBGaXggY3V0LWFuZC1wYXN0ZSBlcnJvci4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogQ29tcGxhaW4gYWJvdXQgbm9uLWludGVncmFsIHNpemUuCgoJKiBwYXJzZS55ICh1bmFyeV9leHByKTogQ29tcGxhaW4gYWJvdXQgZGVmaW5pbmcgdHlwZXMgaW4gc2l6ZW9mLgoKCSogdHlwZWNrLmMgKGV4cHJfc2l6ZW9mKTogQ29tcGxhaW4gYWJvdXQgc2l6ZW9mIGFuIG92ZXJsb2FkZWQgZm4uCgoJKiBydHRpLmMgKGJ1aWxkX3hfdHlwZWlkKTogQ29tcGxhaW4gYWJvdXQgdHlwZWlkIHdpdGhvdXQgCglpbmNsdWRpbmcgPHR5cGVpbmZvPi4KCShnZXRfdHlwZWlkKTogTGlrZXdpc2UuICBDb21wbGFpbiBhYm91dCB0eXBlaWQgb2YgaW5jb21wbGV0ZSB0eXBlLgoJKGdldF90aW5mb19mbl9keW5hbWljKTogTGlrZXdpc2UuCgkoZ2V0X3R5cGVpZF8xKTogTm90IHN0YXRpYyBhbnltb3JlLgoJKiBleGNlcHQuYyAoYnVpbGRfZWhfdHlwZV90eXBlKTogVXNlIGdldF90eXBlaWRfMS4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBHaXZlIGVycm9ycyBmb3IgZHluYW1pY19jYXN0IHRvCglhbWJpZ3VvdXMgb3IgcHJpdmF0ZSBiYXNlcy4gIEZpeCB3YXJuaW5nIGZvciByZWZlcmVuY2UgY2FzdC4KCjE5OTgtMTEtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVEVEKTogTmV3IG1hY3JvLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFJlbW92ZSBzcGVjaWFsLWNhc2UgY29kZSB0byBkZWFsIHdpdGgKCXRlbXBsYXRlIGZyaWVuZHMsIGFuZCBqdXN0IGRvIHRoZSBvYnZpb3VzIHRoaW5nLgoJKiBwdC5jIChyZWdpc3Rlcl9zcGVjaWFsaXphdGlvbik6IFR3ZWFrIGZvciBjbGFyaXR5LCBhbmQgYWxzbyB0bwoJY2xlYXIgREVDTF9JTklUSUFMIGZvciBhbiBpbnN0YW50aWF0aW9uIGJlZm9yZSBpdCBpcyBtZXJnZWQgd2l0aCBhCglzcGVjaWFsaXphdGlvbi4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEZpeCBpbmRlbnRhdGlvbi4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uKTogSGFuZGxlIGJvdGggZGVmaW5pdGlvbnMgaW4gZnJpZW5kCglkZWNsYXJhdGlvbiBhbmQgb3V0c2lkZSBmcmllbmQgZGVjbGFyYXRpb25zLgoJKHRzdWJzdF9kZWNsKTogRG9uJ3QgY2xlYXIgREVDTF9JTklUSUFMIGZvciBhbiBpbnN0YW50aWF0aW9uLgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogVHdlYWsgYWNjb3JkaW5nbHkuCgkoaW5zdGFudGlhdGVfZGVjbCk6IExpa2V3aXNlLgoJCjE5OTgtMTEtMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCk6IFByb21vdGUgd2FybmluZyBhYm91dCBuYWtlZAoJbWVtYmVyIGZ1bmN0aW9uIHJlZmVyZW5jZSB0byBlcnJvci4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogQ29tcGxhaW4gYWJvdXQgY29udmVydGluZyBhbiBvdmVybG9hZGVkIAoJZnVuY3Rpb24gdG8gdm9pZC4KCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IEp1c3QgcmV0dXJuIGEgbG9uZSBzdGF0aWMgbWVtYmVyCglmdW5jdGlvbi4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBPbmx5IGNvbXBsYWluIGFib3V0IHJlYWwgQ09OU1RSVUNUT1JzLAoJbm90IGludGVybmFsIG9uZXMuCgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IEltcHJvdmUgZXJyb3IgaGFuZGxpbmcuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBDb21wbGFpbiBhYm91dCBtYWtpbmcgJ21haW4nIGEgdGVtcGxhdGUuCgoJKiB0eXBlY2suYyAoc3RyaW5nX2NvbnZfcCk6IERvbid0IGNvbnZlcnQgZnJvbSB3Y2hhcl90W10gdG8gY2hhciouCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogSGFuZGxlIGEgQklUX05PVF9FWFBSIGFyb3VuZCBhIAoJVFlQRV9ERUNMIGluIGEgdGVtcGxhdGUuCgoxOTk4LTExLTE1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogQWRkIFVSTCBpbiB0aGUgb3RoZXIgY2FzZSwgdG9vLgoKCSogZGVjbC5jIChzdHJ1Y3QgY3BfZnVuY3Rpb24pOiBBZGQgbmFtZWRfbGFiZWxfdXNlcy4KCShwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBTYXZlIGl0LgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSBpdC4KCShkZWZpbmVfbGFiZWwpOiBBbHNvIGNvbXBsYWluIGFib3V0IGp1bXBpbmcgaW50byB0aGUgc2NvcGUgb2YgCglub24tUE9EIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGNvbnN0cnVjdG9ycy4KCSogdHJlZS5jIChwb2RfdHlwZV9wKTogTmV3IGZuLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDbGVhciBUWVBFX0JFSU5HX0RFRklORUQgc29vbmVyLgoJKiBydHRpLmMgKHN5bnRoZXNpemVfdGluZm9fZm4pOiBDYWxsIGltcG9ydF9leHBvcnRfZGVjbCBoZXJlLgoJKGdldF90aW5mb19mbik6IE5vdCBoZXJlLgoJKiByZXBvLmMgKHJlcG9fZ2V0X2lkKTogQWJvcnQgaWYgd2UgZ2V0IGNhbGxlZCBmb3IgYW4gaW5jb21wbGV0ZQoJdHlwZS4KCjE5OTgtMTEtMTMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogTWFrZSBzdXJlIGZpcnN0IGFyZ3VtZW50IHRvCglfX2NwX3B1c2hfZXhjZXB0aW9uIGlzIG9mIHR5cGUgYHZvaWQqJyB0byBhdm9pZCBzcHVyaW91cyBlcnJvcgoJbWVzc2FnZXMuCgoxOTk4LTExLTExICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0cnlfb25lX292ZXJsb2FkKTogVGFrZSBvcmlnX3RhcmdzIGFnYWluLiAgT25seSBjaGVjayBmb3IKCW1pc21hdGNoZXMgYWdhaW5zdCB0aGVtOyB3ZSBkb24ndCBjYXJlIHdoYXQgYSBwcmV2aW91cyBjYWxsIGZvdW5kLgoJKHJlc29sdmVfb3ZlcmxvYWRlZF91bmlmaWNhdGlvbik6IEFkanVzdC4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBEb24ndCByZXR1cm4gYW55dGhpbmcgZm9yIGEgbm9uLXR5cGUKCWZpZWxkIGZyb20gYSBkZXBlbmRlbnQgdHlwZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJlc29sdmUgU0NPUEVfUkVGcyBvZiB0aGUgY3VycmVudCBjbGFzcwoJaW4gYW4gYXJyYXkgZGVjbGFyYXRvci4KCShzdGFydF9kZWNsKTogUHVzaCBpbnRvIHRoZSBjbGFzcyBiZWZvcmUgbG9va2luZyBmb3IgdGhlIGZpZWxkLgoKMTk5OC0xMS0wOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEhhbmRsZSBSRUZFUkVOQ0VfVFlQRS4KCjE5OTgtMTEtMDggIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxsb3cgbmFtZXNwYWNlLXNjb3BlZCBtZW1iZXJzIGlmIHRoZXkKCWFyZSBmcmllbmRzLgoKMTk5OC0xMS0wOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2RlY2wpOiBEb24ndCBtZXNzIHdpdGggdGhlIGdsb2JhbCB2YWx1ZSBvZiBhbiAKCXVuLW1hbmdsZWQgREVDTF9BU1NFTUJMRVJfTkFNRS4KCjE5OTgtMTEtMDMgIENocmlzdG9waGVyIEZheWxvciA8Y2dmQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlIENZR1dJTiBjb25kaXRpb25hbAoJc2luY2UgQ1lHV0lOIGlzIG5vdyBhYmxlIHRvIGRlYWwgd2l0aCB0cmFwcGluZyBzaWduYWxzLgoKU2F0IE5vdiAgNyAxNTo0ODowMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcC10cmVlLmg6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIGV4Y2VwdGlvbi5jYzogSW5jbHVkZSBnYW5zaWRlY2wuaCAoc2luY2Ugd2UgZG9uJ3QgaW5jbHVkZSBjb25maWcuaCkKCSogZysrc3BlYy5jOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoKMTk5OC0xMS0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ19kZWNsX2ZsYWdzKTogQWRkIGRlZmluZWRfaW5fY2xhc3MuICBEZWNyZWFzZQoJc2l6ZSBvZiBkdW1teS4KCShERUNMX0RFRklORURfSU5fQ0xBU1NfUCk6IE5ldyBtYWNyby4KCShURU1QTEFURV9QQVJNU19GT1JfSU5MSU5FKTogRG9jdW1lbnQuCgkoY2hlY2tfc3RhdGljX3ZhcmlhYmxlX2RlZmluaXRpb24pOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBTZXQgREVDTF9ERUZJTkVEX0lOX0NMQVNTX1AsIGlmCglhcHByb3ByaWF0ZS4gCgkoY2hlY2tfc3RhdGljX3ZhcmlhYmxlX2RlZmluaXRpb24pOiBTcGxpdCBvdXQgZnJvbSAuLi4KCShncm9rZGVjbGFyYXRvcik6IEhlcmUuCgkqIHB0LmMgKGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSAuLi4KCShwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IEhlcmUuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBGaXggY29tbWVudC4KCQoxOTk4LTExLTA0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChDUF9UWVBFX0NPTlNUX1ApOiBNYWtlIHswLDF9LXZhbHVlZC4KCShDUF9UWVBFX1ZPTEFUSUxFX1ApOiBMaWtld2lzZS4KCShDUF9UWVBFX1JFU1RSSUNUX1ApOiBMaWtld2lzZS4KCjE5OTgtMTEtMDMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBVc2UgYnVpbGRfaW5kZXhfdHlwZSwgbm90IGJ1aWxkX2luZGV4XzJfdHlwZS4KCjE5OTgtMTEtMDIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBCZSBtb3JlIGhlbHBmdWwuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBDYWxsIGltcG9ydF9leHBvcnRfY2xhc3MuCgoJKiBjcC10cmVlLmggKEVNUFRZX0NPTlNUUlVDVE9SX1ApOiBDaGVjayAhVFJFRV9IQVNfQ09OU1RSVUNUT1IuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogUHJvcGFnYXRlIFRSRUVfSEFTX0NPTlNUUlVDVE9SLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoKMTk5OC0xMS0wMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRml4IG9mZi1ieS1vbmUgZXJyb3IuCgoxOTk4LTExLTAyICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIHBhcnNlLnkgKGFwcGFyZW50X3RlbXBsYXRlX3R5cGUpOiBuZXcgdHlwZQoJKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogdXNlIGl0CgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBvbmUgbmV3IGNvbmZsaWN0CgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkCgoxOTk4LTExLTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChDT01QQVJFX1NUUklDVCk6IE5ldyBtYWNyby4KCShDT01QQVJFX0JBU0UpOiBMaWtld2lzZS4KCShDT01QQVJFX1JFTEFYRUQpOiBMaWtld2lzZS4KCShDT01QQVJFX1JFREVDTEFSQVRJT04pOiBMaWtld2lzZS4KCShzYW1lX3R5cGVfcCk6IExpa2V3aXNlLgoJKHNhbWVfb3JfYmFzZV90eXBlX3ApOiBMaWtld2lzZS4KCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogVXNlIHRoZW0sIGluIHBsYWNlIG9mIGNvbXB0eXBlcwoJd2l0aCBudW1lcmljIGFyZ3VtZW50cy4KCShyZWZlcmVuY2VfYmluZGluZyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGlzX3N1YnNlcSk6IExpa2V3aXNlLgoJKGlzX3Byb3Blcmx5X2Rlcml2ZWRfZnJvbSk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgkoam91c3QpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZGVsZXRlX2R1cGxpY2F0ZV9maWVsZHNfMSk6IExpa2V3aXNlLgoJKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4gIFJlbW92ZSAjaWYgMCdkIGNvZGUuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBMaWtld2lzZS4gIFVzZSBDT01QQVJFX1JFREVDTEFSQVRJT04gaGVyZS4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLiAgQ2hlY2sgZm9yIGlsbGVnYWwgYXJyYXkgZGVjbGFyYXRpb25zLgoJKGdyb2twYXJtcyk6IExpa2V3aXNlLgoJKGdyb2tfb3BfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBMaWtld2lzZS4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfdmVjX2luaXQpOiBMaWtld2lzZS4KCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlX2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKGlzX3NwZWNpYWxpemF0aW9uX29mKTogVXNlIENPTVBBUkVfKiBhbmQgbmV3IG1hY3Jvcy4KCShjb21wX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogTGlrZXdpc2UuCgkoY29lcmNlX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkodGVtcGxhdGVfYXJnc19lcXVhbCk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGNvdmFyaWFudF9yZXR1cm5fcCk6IExpa2V3aXNlLgoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTGlrZXdpc2UuCgkqIHNpZy5jIChtYXRjaF9tZXRob2RfdHlwZXMpOiBMaWtld2lzZS4KCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogTGlrZXdpc2UuCgkoY3BfdHJlZV9lcXVhbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBMaWtld2lzZS4KCShjb21wX2FycmF5X3R5cGVzKTogTGlrZXdpc2UuICBHZXQgaXNzdWVzIGludm9sdmluZyB1bmtub3duIGFycmF5Cglib3VuZHMgcmlnaHQuCgkoY29tcHR5cGVzKTogVXBkYXRlIGNvbW1lbnRzLiAgVXNlIG5ldyBmbGFncy4KCShjb21wX3RhcmdldF90eXBlcyk6IFVzZSBuZXcgbWFjcm9zLgoJKGNvbXBwYXJtcyk6IExpa2V3aXNlLgoJKGNvbXBfdGFyZ2V0X3Bhcm1zKTogTGlrZXdpc2UuCgkoc3RyaW5nX2NvbnZfcCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9pbmRpcmVjdF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9yZWludGVycHJldF9jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfY29uc3RfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoJKGNvbXBfcHRyX3R0eXBlc19yZWFsKTogTGlrZXdpc2UuCgkocHRyX3JlYXNvbmFibHlfc2ltaWxhcik6IExpa2V3aXNlLgoJKGNvbXBfcHRyX3R0eXBlc19jb25zdCk6IExpa2V3aXNlLgoJCjE5OTgtMTAtMzEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBGaXggY3V0LWFuZC1wYXN0ZSBlcnJvci4KCjE5OTgtMTAtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogUGFzcyBpbnRlZ2VyX3plcm9fbm9kZSwgbm90CglpbnRlZ2VyX3R3b19ub2RlLCB0byBidWlsZF92ZWNfZGVsZXRlLgoJKiBpbml0LmMgKGJ1aWxkX2FycmF5X2VoX2NsZWFudXApOiBSZW1vdmUuCgkoZXhwYW5kX3ZlY19pbml0X3RyeV9ibG9jayk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfdmVjX2luaXRfY2F0Y2hfY2xhdXNlKTogTGlrZXdpc2UuCgkoYnVpbGRfdmVjX2RlbGV0ZV8xKTogRG9uJ3QgZGVhbCB3aXRoIGNhc2UgdGhhdCBhdXRvX2RlbGV0ZV92ZWMKCW1pZ2h0IGJlIGludGVnZXJfdHdvX25vZGUgYW55bW9yZS4KCShleHBhbmRfdmVjX2luaXQpOiBSZXdvcmsgZm9yIGluaXRpYWxpemF0aW9uLWNvcnJlY3RuZXNzIGFuZAoJZXhjZXB0aW9uLWNvcnJlY3RuZXNzLgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IE1ha2UgbXV0dWFsIGV4Y2x1c2l2aXR5CglvZiBjYXNlcyBtb3JlIG9idmlvdXMuCgkKMTk5OC0xMC0yOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogT0ssIG9ubHkgd2FybiBpZiBub3QgbGV4aW5nLgoJU2ltcGxpZnkgc3VnZ2VzdGVkIGZpeC4KCgkqIGNwLXRyZWUuaCAoSURFTlRJRklFUl9NQVJLRUQpOiBOZXcgbWFjcm8uCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBVc2UgYnJlYWR0aF9maXJzdF9zZWFyY2guCgkoYWRkX2NvbnZlcnNpb25zKTogQXZvaWQgYWRkaW5nIHR3byBjb252ZXJzaW9ucyB0byB0aGUgc2FtZSB0eXBlLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogV29yayB3aXRoIGJhc2UgYmluZm9zLCByYXRoZXIKCXRoYW4gYmluZm9zIGFuZCBiYXNlIGluZGljZXMuCgkoZ2V0X3ZpcnR1YWxfZGVzdHJ1Y3Rvcik6IEFkanVzdC4KCSh0cmVlX2hhc19hbnlfZGVzdHJ1Y3Rvcl9wKTogQWRqdXN0LgoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogQWRqdXN0LgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBHZW5lcmFsaXplIGNoZWNrIGZvciBpbmNvcnJlY3QKCW51bWJlciBvZiB0ZW1wbGF0ZSBwYXJtcy4KCShpc19tZW1iZXJfdGVtcGxhdGVfY2xhc3MpOiAjaWYgMC4KCjE5OTgtMTAtMjkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2MxcGx1cyk6IFB1dCBDWFhfT0JKUywgYW5kIHRoZW5jZSBAZXh0cmFfY3h4X29ianNALAoJbGFzdC4KCjE5OTgtMTAtMjggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgkKCSogbGV4LmM6IENhbGwgY2hlY2tfbmV3bGluZSBmcm9tIGxhbmdfaW5pdCBhbHdheXMuICBBZnRlcgoJY2FsbGluZyBjcHBfc3RhcnRfcmVhZCwgc2V0IHl5X2N1ciBhbmQgeXlfbGltIHRvIHJlYWQgZnJvbSB0aGUKCWNwcGxpYiB0b2tlbiBidWZmZXIuCgoxOTk4LTEwLTI4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgY29uc2lkZXIgdGVtcGxhdGVzIGZvciBhIG5vcm1hbAoJbWF0Y2guCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBjb21wbGFpbiBhYm91dCBub24tY29weQoJYXNzaWdubWVudCBvcHMgaW4gdW5pb24gbWVtYmVycy4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IERvbid0IHBhc3MgYXRfZW9mIHRvIGltcG9ydF9leHBvcnRfdnRhYmxlLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogRG9uJ3QgY2FsbCBpbXBvcnRfZXhwb3J0X2NsYXNzLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBEbyBpbXBvcnQvZXhwb3J0IHN0dWZmLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IExvc2UuCgkoZmluaXNoX2ZpbGUpOiBEb24ndCBjYWxsIGl0LgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IFJlbW92ZSBpdC4KCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogUmVzZXQgVFlQRV9IQVNfREVTVFJVQ1RPUiBoZXJlLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE5vdCBoZXJlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRG8gc2V0IERFQ0xfSU5JVElBTC4KCQoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IENvbXBsYWluIGFib3V0IGRlZmF1bHQgdGVtcGxhdGUKCWFyZ3MgZm9yIGVuY2xvc2luZyBjbGFzc2VzLgoKCSogY2FsbC5jIChhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogVHJlYXQgY29udmVyc2lvbiBmdW5jdGlvbnMKCWFzIGNvbWluZyBmcm9tIHRoZSBhcmd1bWVudCdzIGNsYXNzLgoJKiBjcC10cmVlLmggKERFQ0xfQ09OVl9GTl9QKTogTmV3IGZuLgoJKERFQ0xfREVTVFJVQ1RPUl9QKTogQWxzbyBjaGVjayBERUNMX0xBTkdVQUdFLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogVXNlIERFQ0xfQ09OVl9GTl9QLgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fbmFtZSk6IExpa2V3aXNlLgoJKGR1bXBfZnVuY3Rpb25fZGVjbCk6IExpa2V3aXNlLgoJKiBwdC5jIChmbl90eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBMaWtld2lzZS4KCjE5OTgtMTAtMjcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQWxzbyBnZW5lcmF0ZSBMT09LVVBfRVhQUiBmb3IgUkVTVUxUX0RFQ0wuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBBbHNvIGNoZWNrIGZvciB1c2luZyBSRVNVTFRfREVDTAoJZnJvbSBvdXRlciBjb250ZXh0LgoKMTk5OC0xMC0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgdHlwZV9xdWFscywgcmF0aGVyIHRoYW4gY29uc3RwLAoJY29uc2lzdGVudGx5LgoKMTk5OC0xMC0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogaW5zdGFudGlhdGVfdHlwZSBoZXJlLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogQW5kIGhlcmUuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IE5vdCBoZXJlLgoJKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogTm8gbmVlZCB0byBjb25zIHVwIGFuIE9WRVJMT0FELgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogaW5zdGFudGlhdGVfdHlwZSBoZXJlLgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogQW5kIGhlcmUuCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IE5vdCBoZXJlLgoJKGdyb2twYXJtcyk6IE9yIGhlcmUuCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBPciBoZXJlLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IFRha2UgdGhlIGFkZHJlc3Mgb2Ygb3ZlcmxvYWRlZAoJZnVuY3Rpb25zLCB0b28uCgkocmVxdWlyZV9pbnN0YW50aWF0ZWRfdHlwZSk6IExvc2UuCgkoY29udmVydF9hcmd1bWVudHMpOiBEb24ndCBoYW5kbGUgdW5rbm93biB0eXBlcyBoZXJlLgoJKGJ1aWxkX2NfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX2JpbmFyeV9vcCk6IEd1dC4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogRG9uJ3QgcmVxdWlyZV9pbnN0YW50aWF0ZWRfdHlwZS4KCShidWlsZF9tb2RpZnlfZXhwcik6IExpa2V3aXNlLgoJKGJ1aWxkX3N0YXRpY19jYXN0KTogRG9uJ3QgaW5zdGFudGlhdGVfdHlwZS4KCShidWlsZF9yZWludGVycHJldF9jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfY29uc3RfY2FzdCk6IExpa2V3aXNlLgoJKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoYnVpbGRfcHRybWVtZnVuYyk6IFVzZSB0eXBlX3Vua25vd25fcC4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQWxzbyBkbyBkZWZhdWx0X2NvbnZlcnNpb24gb24gb3ZlcmxvYWRlZAoJZnVuY3Rpb25zLiAgSGFuZCB0aGVtIG9mZiB0byBvY3BfY29udmVydC4KCjE5OTgtMTAtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBEZWFsIHdpdGggVEVNUExBVEVfREVDTHMgdGhhdCBhcmUKCVZBUl9ERUNMcy4gIEhhbmRsZSB2dGFibGVzIHdob3NlIERFQ0xfQ09OVEVYVCBpcyBub3QgYSB0eXBlLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIGJ1aWxkX2NwbHVzX2FycmF5X3R5cGUgdG8gYnVpbGQKCWFycmF5IHR5cGVzLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2VoX3NwZWMpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogU2ltcGxpZnkgdmVyeSBzbGlnaHRseS4KCQoxOTk4LTEwLTI2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29tcGxhaW4gYWJvdXQgYSB2YXJpYWJsZSB1c2luZwoJY29uc3RydWN0b3Igc3ludGF4IGNvbWluZyBiYWNrIG51bGwgZnJvbSBzdGFydF9kZWNsLgoKCSogZnJpZW5kLmMgKG1ha2VfZnJpZW5kX2NsYXNzKTogQ29tcGxhaW4gYWJvdXQgdHJ5aW5nIHRvIG1ha2UKCWEgbm9uLWNsYXNzIHR5cGUgYSBmcmllbmQuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBTZXQgREVDTF9JTklUSUFMIGZvciBhIGRlZm4gaGVyZS4KCShzdGFydF9mdW5jdGlvbik6IE5vdCBoZXJlLgoKMTk5OC0xMC0yNiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEaXNhbGxvdyBgZXhwbGljaXQnIGluIGEgZnJpZW5kIGRlY2xhcmF0aW9uLgoKMTk5OC0xMC0yNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBPbmx5IHNraXAgYW5vbnltb3VzIGZpZWxkcwoJaWYgdGhleSBhcmUgYml0ZmllbGRzLgoKCSogY3AtdHJlZS5kZWYgKFRZUEVPRl9UWVBFKTogTmV3IGNvZGUuCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogSGFuZGxlIGl0LgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCSogdHJlZS5jIChzZWFyY2hfdHJlZSk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3R5cGVvZik6IE5ldyBmbi4KCSogcGFyc2UueSAodHlwZXNwZWMpOiBVc2UgaXQuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCjE5OTgtMTAtMjYgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNwLXRyZWUuaCAoRk9STUFUX1ZCQVNFX05BTUUpOiBNYWtlIGRlZmluaXRpb24gdW5jb25kaXRpb25hbC4KCjE5OTgtMTAtMjYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGhhbmRsZSBwbWYgcmVmZXJlbmNlcyAKCXNwZWNpYWxseS4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBEb24ndCB0cnkgdG8gY29udmVydCB0byB0aGUgYmFzZSB0eXBlCglpZiBpdCdzIGFtYmlndW91cyBvciBwZWRhbnRpYy4KCgkqIHR5cGVjazIuYyAoY2hlY2tfZm9yX25ld190eXBlKTogT25seSBkZXBlbmQgb24gcGVkYW50aWMgZm9yCglDLXN0eWxlIGNhc3RzLgoKMTk5OC0xMC0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBTZXQgREVDTF9OT05DT05WRVJUSU5HX1AgZm9yIGFsbAoJbm9uLWNvbnZlcnRpbmcgY29uc3RydWN0b3JzLgoJCjE5OTgtMTAtMjQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBneHhpbnQudGV4aTogQ29ycmVjdCBkb2N1bWVudGF0aW9uIGZvciBuLCBOLCBRLCBhbmQgQi4KCjE5OTgtMTAtMjMgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBwYXJzZS55IChjb25kaXRpb24pOiBDb252ZXJ0IFZBUl9ERUNMIGZyb20gcmVmZXJlbmNlIHRvIGluZGlyZWN0CglyZWZlcmVuY2UuCgoxOTk4LTEwLTIzICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fY3BfcG9wX2V4Y2VwdGlvbik6IEZyZWUgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbgoJdmFsdWUsIG5vdCB0aGUgcG90ZW50aWFsbHkgY29lcmNlZCBvbmUuCgoxOTk4LTEwLTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogTWFrZWZpbGUuaW4gKGhhc2guaCk6IFJ1biBncGVyZiB3aGVuIG5lY2Vzc2FyeS4KCgkqIGNwLXRyZWUuaCAoQ1BfVFlQRV9SRUFET05MWSk6IFJlbW92ZS4KCShDUF9UWVBFX1ZPTEFUSUxFKTogTGlrZXdpc2UuCgkoQ1BfVFlQRV9RVUFMUyk6IE5ldyBtYWNyby4KCShDUF9UWVBFX0NPTlNUX1ApOiBMaWtld2lzZS4KCShDUF9UWVBFX1ZPTEFUSUxFX1ApOiBMaWtld2lzZS4KCShDUF9UWVBFX1JFU1RSSUNUX1ApOiBMaWtld2lzZS4KCShDUF9UWVBFX0NPTlNUX05PTl9WT0xBVElMRV9QKTogTGlrZXdpc2UuCgkoY3BfYnVpbGRfdHlwZV92YXJpYW50KTogUmVuYW1lIHRvIC4uLgoJKGNwX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogRGVjbGFyZS4KCShTSUdOQVRVUkVfUE9JTlRFUl9OQU1FX0ZPUk1BVCk6IE1vZGlmeSB0byBhbGxvdyBgcmVzdHJpY3QnLgoJKFNJR05BVFVSRV9SRUZFUkVOQ0VfTkFNRV9GT1JNQVQpOiBMaWtld2lzZS4KCShjcF90eXBlX3F1YWxfZnJvbV9yaWQpOiBOZXcgZnVuY3Rpb24uCgkoY29tcHBhcm1zKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNwX3R5cGVfcXVhbHMpOiBOZXcgZnVuY3Rpb24uCgkoYXRfbGVhc3RfYXNfcXVhbGlmaWVkX3ApOiBMaWtld2lzZS4KCShtb3JlX3F1YWxpZmllZF9wKTogTGlrZXdpc2UuCgkKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogUmVwbGFjZSBjYWxscyB0bwoJY3BfYnVpbGRfdHlwZV92YXJpYW50IHdpdGggY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUuICBVc2UKCUNQX1RZUEVfUVVBTFMgdG8gZ2V0IHF1YWxpZmllcnMgYW5kIGF0X2xlYXN0X2FzX3F1YWxpZmllZF9wIHRvCgljb21wYXJlIHRoZW0uICBVc2UgQ1BfVFlQRV8qIG1hY3JvcyB0byBjaGVjayBxdWFsaWZpZXJzLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogTGlrZXdpc2UuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBMaWtld2lzZS4KCShidWlsZF9vdmVyX2NhbGwpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAob3ZlcnJpZGVzKTogQ29tcGFyZSBhbGwgcXVhbGlmaWVycywgbm90IGp1c3QgYGNvbnN0JywKCW9uIG1ldGhvZCBkZWNsYXJhdGlvbnMuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkoY29udmVydF9wb2ludGVyX3RvX3JlYWwpOiBMaWtld2lzZS4KCSh0eXBlX3Byb21vdGVzX3RvKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoY2hlY2tfZm9yX3VuaW5pdGlhbGl6ZWRfY29uc3RfdmFyKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShjcF9maW5pc2hfZGVjbCk6IFVzZSBjaGVja19mb3JfdW5pbml0aWFsaXplZF9jb25zdF92YXIuCgkoZ3Jva2RlY2xhcmF0b3IpOiBNb3JlIENQX1RZUEVfUVVBTFMgY29udmVyc2lvbiwgZXRjLiAgVXBkYXRlIHRvCgloYW5kbGUgYHJlc3RyaWN0Jy4KCShncm9rX2N0b3JfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKGdyb2tfb3BfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkocmV2ZXJfc3RhdGljX21lbWJlcl9mbik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rX21ldGhvZF9xdWFscyk6IExpa2V3aXNlLgoJKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX3JlYWRvbmx5X29yX3ZvbGF0aWxlKTogUmVuYW1lIHRvIC4uLgoJKGR1bXBfcXVhbGlmaWVycyk6IE5ldyBmdW5jdGlvbi4gIEhhbmRsZSBgcmVzdHJpY3QnLgoJKGR1bXBfdHlwZV9yZWFsKTogVXNlIGl0LgoJKGR1bXBfYWdncl90eXBlKTogTGlrZXdpc2UuCgkoZHVtcF90eXBlX3ByZWZpeCk6IExpa2V3aXNlLgoJKGR1bXBfdHlwZV9zdWZmaXgpOiBMaWtld2lzZS4KCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBMaWtld2lzZS4KCShjdl9hc19zdHJpbmcpOiBMaWtld2lzZS4KCSogZ3h4LmdwZXJmOiBBZGQgX19yZXN0cmljdCBhbmQgX19yZXN0cmljdF9fLgoJKiBneHhpbnQudGV4aTogRG9jdW1lbnQgYHUnIGFzIHVzZWQgZm9yIGBfX3Jlc3RyaWN0JywgYW5kIGEgZmV3CglvdGhlciBwcmV2aW91c2x5IHVuZG9jdW1lbnRlZCBjb2Rlcy4KCSogaGFzaC5oOiBSZWdlbmVyYXRlZC4KCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0KTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShidWlsZF9tZW1iZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld18xKTogTGlrZXdpc2UuCgkqIGxleC5jIChpbml0X3BhcnNlKTogQWRkIGVudHJ5IGZvciBSSURfUkVTVFJJQ1QuCgkoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShjcF90eXBlX3F1YWxfZnJvbV9yaWQpOiBEZWZpbmUuCgkqIGxleC5oIChlbnVtIHJpZCk6IEFkZCBSSURfUkVTVFJJQ1QuCgkqIG1ldGhvZC5jIChwcm9jZXNzX21vZGlmaWVycyk6IERlYWwgd2l0aCBgcmVzdHJpY3QnLgoJKiBwYXJzZS55IChwcmltYXJ5KTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkodHN1YnN0X2FnZ3JfdHlwZSk6IExpa2V3aXNlLgoJKHRzdWJzdCk6IExpa2V3aXNlLgoJKGNoZWNrX2N2X3F1YWxzX2Zvcl91bmlmeSk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShidWlsZF9oZWFkb2YpOiBMaWtld2lzZS4KCShnZXRfdGluZm9fdmFyKTogTGlrZXdpc2UuCgkoYnVpZGxfZHluYW1pY19jYXN0XzEpOiBMaWtld2lzZS4gIEZpeCBgdm9sYXRpbGUnIGhhbmRsaW5nLgoJKGV4cGFuZF9jbGFzc19kZXNjKTogTGlrZXdpc2UuCgkoZXhwYW5kX2F0dHJfZGVzYyk6IExpa2V3aXNlLgoJKHN5bnRoZXNpemVfdGluZm9fZm4pOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGNvdmFyaWFudF9yZXR1cm5fcCk6IExpa2V3aXNlLiAgRml4IGB2b2xhdGlsZScgaGFuZGxpbmcuIAoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTGlrZXdpc2UuCgkoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBMaWtld2lzZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV9uYW1lKTogVGFrZQoJdHlwZV9xdWFscywgbm90IGNvbnN0cCBhbmQgdm9sYXRpbGVwLgoJKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV90eXBlKTogTGlrZXdpc2UuCgkobWF0Y2hfbWV0aG9kX3R5cGVzKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJKGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGUpOiBMaWtld2lzZS4KCShjcF9idWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUgdG8gLi4uCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uICBEZWFsIHdpdGggYF9fcmVzdHJpY3QnLgoJKGNhbm9uaWNhbF90eXBlX3ZhcmlhbnQpOiBNb3JlIENQX1RZUEVfUVVBTFMgY29udmVyc2lvbiwgZXRjLgoJKGJ1aWxkX2V4Y2VwdGlvbl92YXJpYW50KTogTGlrZXdpc2UuCgkobWFwY2FyKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChxdWFsaWZfdHlwZSk6IExpa2V3aXNlLgoJKGNvbW1vbl90eXBlKTogTGlrZXdpc2UuCgkoY29tcHR5cGVzKTogTGlrZXdpc2UuCgkoY29tcF9jdl90YXJnZXRfdHlwZXMpOiBMaWtld2lzZS4KCShhdF9sZWFzdF9hc19xdWFsaWZpZWRfcCk6IERlZmluZS4KCShtb3JlX3F1YWxpZmllZF9wKTogTGlrZXdpc2UuCgkoY29tcF9jdl9xdWFsaWZpY2F0aW9uKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShjb21wcGFybXMpOiBMaWtld2lzZS4KCShpbmxpbmVfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKHN0cmluZ19jb252X3ApOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfaW5kaXJlY3RfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfYXJyYXlfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9jX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9tb2RpZnlfZXhwcik6IExpa2V3aXNlLgoJKGNvbnZlcnRfRm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCShjb21wX3B0cl90dHlwZXNfcmVhbCk6IExpa2V3aXNlLgoJKGNwX3R5cGVfcXVhbHMpOiBOZXcgZnVuY3Rpb24uCgkKMTk5OC0xMC0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChDUF9UWVBFX1JFQURPTkxZKTogTmV3IG1hY3JvIHRvIGhhbmRsZSBhcnJheXMuCgkoQ1BfVFlQRV9WT0xBVElMRSk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIHRoZW0uCgkqIHRyZWUuYyAoY2Fub25pY2FsX3R5cGVfdmFyaWFudCk6IExpa2V3aXNlLgoKMTk5OC0xMC0yMiAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHBhcnNlLnkgKG5hbWVkX2NsYXNzX2hlYWQpOiBQdXNoIGludG8gY2xhc3Mgd2hpbGUgcGFyc2luZyB0aGUKCWJhc2UgY2xhc3MgbGlzdC4KCSogZGVjbDIuYyAocHVzaF9zY29wZSwgcG9wX3Njb3BlKTogTmV3IGZ1bmN0aW9ucy4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIHRoZW0uCiAgICAgICAgKiBpbml0LmMgKGJ1aWxkX25ld18xKTogRGVsYXkgY2xlYW51cCB1bnRpbCBlbmQgb2YgZnVsbCBleHByZXNzaW9uLgoKMTk5OC0xMC0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBVc2Ugb2YgYSB0eXBlIGhlcmUgaXMgYW4gZXJyb3IuCgoxOTk4LTEwLTE5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJUmV2YW1wIHJlZmVyZW5jZXMgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IENhbGwgYnVpbGRfY29tcG9uZW50X3JlZiBmb3IgYQoJcmVmZXJlbmNlIHRvIGEgbWVtYmVyIGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IE9ubHkgcmV0dXJuIGEgc2luZ2xlIGZ1bmN0aW9uIAoJaWYgaXQncyBzdGF0aWMuICBPdGhlcndpc2UsIHJldHVybiBhIENPTVBPTkVOVF9SRUYuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIGEgQ09NUE9ORU5UX1JFRi4KCShidWlsZF91bmFyeV9vcCk6IEhhbmRsZSBhbGwgdW5rbm93bi10eXBlIHRoaW5ncy4KCSogZGVjbDIuYyAoYXJnX2Fzc29jKTogSGFuZGxlIENPTVBPTkVOVF9SRUYuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBDb21wbGFpbiBpZiB0aGUgZnVuY3Rpb24gd2UgZ2V0IGlzIGEKCW5vbnN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uICBSZW1vdmUgY29kZSBmb3IgZmluZGluZyAiY29tcGF0aWJsZSIKCWZ1bmN0aW9ucy4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgTk9QX0VYUFIuCgkqIHRyZWUuYyAoYnVpbGRfZHVtbXlfb2JqZWN0KTogTmV3IGZuLgoJKG1heWJlX2R1bW15X29iamVjdCk6IE5ldyBmbi4KCShpc19kdW1teV9vYmplY3QpOiBOZXcgZm4uCgkqIGNwLXRyZWUuaDogRGVjbGFyZSB0aGVtLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogVXNlIG1heWJlX2R1bW15X29iamVjdC4KCSogZXJyb3IuYyAoZHVtcF9leHByLCBjYXNlIE9GRlNFVF9SRUYpOiBVc2UgaXNfZHVtbXlfb2JqZWN0LgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogVXNlIG1heWJlX2R1bW15X29iamVjdCBhbmQKCWlzX2R1bW15X29iamVjdC4KCShidWlsZF9vZmZzZXRfcmVmKTogVXNlIG1heWJlX2R1bW15X29iamVjdC4KCShyZXNvbHZlX29mZnNldF9yZWYpOiBVc2UgaXNfZHVtbXlfb2JqZWN0LgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogQ2FsbCBidWlsZF9kdW1teV9vYmplY3QuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBDYWxsIGlzX2R1bW15X29iamVjdC4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfYWRkcik6IE1ha2Ugc3VyZSBmaWVsZCBpcyBhIGZpZWxkLgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBEZWxldGUgb2Jzb2xldGUgY29kZS4KCgkqIHB0LmMgKHRzdWJzdCwgVEVNUExBVEUqUEFSTSopOiBBYm9ydCBpZiB3ZSBkb24ndCBoYXZlIGFueSBhcmdzLgoKMTk5OC0xMC0xOCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogRml4IHVzaW5nLWRpcmVjdGl2ZXMgb2YKCXN0ZCBpZiBzdGQgaXMgaWdub3JlZC4KCjE5OTgtMTAtMTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBGaXggdGhpbmtvLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEVtYmVkZGVkIGF0dHJzIGJpbmQgdG8gdGhlIHJpZ2h0LAoJbm90IHRoZSBsZWZ0LgoKCSogcGFyc2UueSAoZm4uZGVmMik6IEZpeCAnYXR0cnMnIGZvcm1hdC4KCjE5OTgtMTAtMTggIEFsYXN0YWlyIEouIEhvdWdodG9uIDxhamg4QGRvYy5pYy5hYy51az4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBVcGRhdGUuCgkqIHBhcnNlLnkgKGV4cHJfb3JfZGVjbGFyYXRvcl9pbnRlcm4pOiBOZXcgcnVsZS4KCShleHByX29yX2RlY2xhcmF0b3IsIGRpcmVjdF9ub3R5cGVfZGVjbGFyYXRvciwgcHJpbWFyeSwKCWZ1bmN0aW9uYWxfY2FzdCk6IFVzZSBpdC4KCShub3R5cGVfZGVjbGFyYXRvcl9pbnRlcm4pOiBOZXcgcnVsZS4KCShub3R5cGVfZGVjbGFyYXRvciwgY29tcGxleF9ub3R5cGVfZGVjbGFyYXRvcik6IFVzZSBpdC4KCjE5OTgtMTAtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IFNldCBERUNMX0NPTlRFWFQgdG8gbmFtZXNwYWNlIGlmIGFwcHJvcHJpYXRlLgoJKGdyb2t2YXJkZWNsKTogTGlrZXdpc2UuCgpTYXQgT2N0IDE3IDIzOjI3OjIwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZlYyk6IENhc3QgMXN0IGFyZ3VtZW50IG9mIGBiemVybycgdG8gKFBUUikuCgkoYWRkX21ldGhvZCk6IExpa2V3aXNlIGZvciBhcmd1bWVudHMgMSAmIDIgb2YgYGJjb3B5Jy4KCQoJKiBkZWNsLmMgKHNpZ25hbF9jYXRjaCk6IE1hcmsgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBwdC5jIChwcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDYXN0IDFzdCBhcmd1bWVudCBvZgoJYGJ6ZXJvJyB0byAoUFRSKS4KCgkqIHRyZWUuYyAoYnVpbGRfYmFzZV9maWVsZHMpOiBDYXN0IGBiYXNlX2FsaWduJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoxOTk4LTEwLTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogSGFuZGxlIHRlbXBsYXRlIHBhcmFtZXRlcnMgZm9yIG1lbWJlcgoJdGVtcGxhdGVzIHdoZXJlIHNhaWQgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlCglzdXJyb3VuZGluZyBjbGFzcy4KCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogQnVpbGQgY2xlYW51cHMgYmVmb3JlIGVudGVyaW5nIHRoZQoJYW5vbnltb3VzIGZ1bmN0aW9uIHVzZWQgdG8gZG8gdGhlbSB0byBhdm9pZCBhY2Nlc3MtY2hlY2tpbmcKCWNvbmZ1c2lvbi4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEFkZCBiYWNrIGNhbGwgdG8gY3BsdXNfZGVjbF9hdHRyaWJ1dGVzCglhY2NpZGVudGFsbHkgcmVtb3ZlZCBieSBwcmV2aW91cyBjaGFuZ2UsIGFuZCBtYWtlIERFQ0xfUlRMIGhlcmUuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBEb24ndCBtYWtlIERFQ0xfUlRMIGhlcmUuCgkKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IERvbid0IGV4YW1pbmUgdW5pbnN0YW50aWF0ZWQKCWRlZmF1bHQgYXJndW1lbnRzLgoKMTk5OC0xMC0xNiAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKICAgICAgICAqIGxleC5jIChyZWFsX3l5bGV4KTogRml4IHVuYWxpZ25lZCBhY2Nlc3Mgb2Ygd2NoYXJfdC4KCjE5OTgtMTAtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogRml4IGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCBwcmV2aW91cwoJY2hhbmdlcy4gIENoZWNrIGZvciBkdXBsaWNhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucyBoZXJlLgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogSGFuZGxlIEZVTkNUSU9OX0RFQ0wgdnMgVEVNUExBVEVfREVDTAoJY29ycmVjdGx5OyBzdWNoIHRoaW5ncyBuZXZlciBtYXRjaC4KCShncm9rZm5kZWNsKTogRG9uJ3QgbG9vayBmb3IgZHVwbGljYXRlIG1ldGhvZHMgaGVyZS4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IERvbid0IGFzc3VtZSBuYW1lcyBhcmUgbWFuZ2xlZC4KCURvbid0IGFkZCBib2d1cyBtZW1iZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIGEgY2xhc3MgYmVmb3JlIHRoZQoJY2xhc3MgdHlwZSBpcyBjb21wbGV0ZS4KCShncm9rZmllbGQpOiBSZWZvcm1hdCBlcnJvciBtZXNzYWdlLgoJKiBtZXRob2QuYyAoc2V0X21hbmdsZWRfbmFtZV9mb3JfZGVjbCk6IERvbid0IG1hbmdsZSBuYW1lcyB3aGlsZQoJcHJvY2VzaW5nX3RlbXBsYXRlX2RlY2wuCgkKMTk5OC0xMC0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IENvbXBsYWluIGFib3V0IGEgcG9pbnRlciB0byBkYXRhCgltZW1iZXIsIHRvby4KCSogdHlwZWNrMi5jIChidWlsZF9tX2NvbXBvbmVudF9yZWYpOiBEb24ndCBpbmRpcmVjdCBhIHBvaW50ZXIgdG8KCWRhdGEgbWVtYmVyLgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IERvbid0IHVuZG8gdGhlIGFib3ZlLgoKCSogY3AtdHJlZS5oIChERUNMX0NfQklUX0ZJRUxELCBTRVRfREVDTF9DX0JJVF9GSUVMRCk6IE5ldyBtYWNyb3MuCgkoc3RydWN0IGxhbmdfZGVjbF9mbGFncyk6IEFkZCBgYml0ZmllbGQnLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgREVDTF9DX0JJVF9GSUVMRCBpbnN0ZWFkIG9mCglERUNMX0JJVF9GSUVMRC4KCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkLCBncm9rX2FsaWdub2YpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfYWRkciwgZXhwcl9zaXplb2YpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IERvbid0IGNyYXNoIGlmIHRha2luZyB0aGUgYWRkcmVzcwoJcmV0dXJucyBlcnJvcl9tYXJrX25vZGUuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBBbHNvIGNoZWNrIGN0eXBlIHdoZW4gY2hlY2tpbmcgZm9yIDo6bWFpbigpLgoKMTk5OC0xMC0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogOjptYWluIGFuZCBfX2J1aWx0aW5fKiBnZXQgQyBsaW5rYWdlLgoJRG8gbWFuZ2xpbmcgaGVyZS4KCShncm9rZGVjbGFyYXRvcik6IEluc3RlYWQgb2YgaGVyZS4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IExvc2Ugc3BlY2lhbCBoYW5kbGluZyBvZiA6Om1haW4gYW5kCglfX2J1aWx0aW5fKi4KCSogY3AtdHJlZS5oIChERUNMX01BSU5fUCk6IENoZWNrIGZvciBDIGxpbmthZ2UuCgoJKiBzcGV3LmMgKHl5bGV4KTogQ2xlYXIgbG9va2luZ19mb3JfdHlwZW5hbWUgaWYgd2UgZ290CgknZW51bSB7IC4uLiB9OycuCgoxOTk4LTEwLTE1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfd2Fybl9hYm91dF9vdmVybHlfcHJpdmF0ZV9jbGFzcyk6IEltcHJvdmUgZXJyb3IKCW1lc3NhZ2VzIGZvciBjbGFzcyB3aXRoIG9ubHkgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMuCgoJKiBjcC10cmVlLmRlZiAoVFlQRU5BTUVfVFlQRSk6IEFkZCB0byBkb2N1bWVudGF0aW9uLgoJKiBjcC10cmVlLmggKFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUpOiBEb2N1bWVudC4KCShidWlsZF90eXBlbmFtZV90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKGJ1aWxkX3R5cGVuYW1lX3R5cGUpOiBCcm9rZW4gb3V0IGZyb20gLi4uCgkobWFrZV90eXBlbmFtZV90eXBlKTogVXNlIGl0LgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuCgoxOTk4LTEwLTE0IEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IENoZWNrIGFnYWluc3QgdHlwZV9yZWZlcnJlZF90by4KICAgICAgICAqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBDaGVjayBmb3IgZGVjbGFyYXRvciBuYW1lIGJlZm9yZSBidWlsZGluZwoJREVDTF9BU1NFTUJMRVJfTkFNRS4KCSAKMTk5OC0xMC0xNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEFkZCBjb21tZW50LgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgbWFyayB0aGUgX1RZUEUgbm9kZSBmb3IKCW1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMgYXMgYW4gaW5zdGFudGlhdGlvbi4KCjE5OTgtMTAtMTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEZpeCBteSB0aGlua28uCgoxOTk4LTEwLTEzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0aW5mbzIuY2MgKGZhc3RfY29tcGFyZSk6IFJlbW92ZS4KCShiZWZvcmUpOiBKdXN0IHVzZSBzdHJjbXAuCgkqIHRpbmZvLmNjIChvcGVyYXRvcj09KTogSnVzdCB1c2Ugc3RyY21wLgoKMTk5OC0xMC0xMyAgS2xhdXMtR2VvcmcgQWRhbXMgIDxLbGF1cy1HZW9yZy5BZGFtc0BjaGVtaWUudW5pLWthcmxzcnVoZS5kZT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IERvbid0IGNoZWNrIGZvciBsaW5rYWdlIGluIGBleHRlcm4gIkMiJwoJZGVjbGFyYXRpb25zLgoKMTk5OC0xMC0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3BlY2lhbGl6YXRpb25zX29mX3NhbWVfdGVtcGxhdGVfcCk6IFJlbW92ZS4KCSogc2VhcmNoLmMgKGdldF90ZW1wbGF0ZV9iYXNlKTogRG9uJ3QgdXNlIGl0LgoJKGdldF90ZW1wbGF0ZV9iYXNlX3JlY3Vyc2l2ZSk6IExpa2V3aXNlLgoJKiBwdC5jIChzcGVjaWFsaXphdGlvbnNfb2Zfc2FtZV90ZW1wbGF0ZV9wKTogUmVtb3ZlLgoJKHVuaWZ5KTogRG9uJ3QgdXNlIGl0LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEZpbmQgdGhlIGNvcnJlY3QgcGFyZW50IHdoZW4gc2V0dGluZwoJQ0xBU1NUWVBFX1RJX1RFTVBMQVRFLgoJCjE5OTgtMTAtMTIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRpbmZvLmNjIChvcGVyYXRvcj09KTogQWx3YXlzIGNvbXBhcmUgbmFtZXMuCgoxOTk4LTEwLTEyICBIZXJtYW4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBGaXggY3V0LWFuZC1wYXN0ZSBlcnJvci4KCjE5OTgtMTAtMTIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluYy90eXBlaW5mbzogQWRkICNwcmFnbWEgaW50ZXJmYWNlLgoJKG9wZXJhdG9yIT0pOiBKdXN0IGNhbGwgb3BlcmF0b3I9PS4KCSogdGluZm8uY2M6IEFkZCAjcHJhZ21hIGltcGxlbWVudGF0aW9uLgoJKG9wZXJhdG9yPT0pOiBNb3ZlIGZyb20gaW5jL3R5cGVpbmZvIGFuZCB0aW5mbzIuY2MuCglDaGVjayBfX0NPTU1PTl9VTlJFTElBQkxFIGluc3RlYWQgb2YgX1dJTjMyLgoKCSogdHlwZWNrMi5jIChteV9mcmllbmRseV9hYm9ydCk6IEFkZCBVUkwuCgoxOTk4LTEwLTEyICBBbGFzdGFpciBKLiBIb3VnaHRvbiA8YWpoOEBkb2MuaWMuYWMudWs+CgoJKiBkZWNsLmMgKHN0YXJ0X21ldGhvZCk6IEFkZGVkIGV4dHJhIHBhcmFtZXRlciBmb3IgYXR0cmlidXRlcy4KCSogY3AtdHJlZS5oIChzdGFydF9tZXRob2QpOiBVcGRhdGUgcHJvdG90eXBlLgoJKiBwYXJzZS55IChmbi5kZWYyKTogVXBkYXRlIHN0YXJ0X21ldGhvZCBwYXJhbWV0ZXIgbGlzdC4KCjE5OTgtMTAtMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKHNwZWNpYWxpemF0aW9uc19vZl9zYW1lX3RlbXBsYXRlX3ApOiBEZWNsYXJlLgoJKiBwdC5jIChzcGVjaWFsaXphdGlvbnNfb2Zfc2FtZV90ZW1wbGF0ZV9wKTogTmV3IGZ1bmN0aW9uLgoJKHVuaWZ5KTogVXNlIGl0LgoJKiBzZWFyY2guYyAoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBVc2UgaXQuCgkoZ2V0X3RlbXBsYXRlX2Jhc2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkKMTk5OC0xMC0xMCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogZGVjbDIuYyAoc3RhcnRfb2JqZWN0cyk6IEFkZCBuZXcgdmFyaWFibGUgYGpvaW5lcicgYW5kCglpbml0aWFsaXplIGl0IHByb3Blcmx5LgoKMTk5OC0xMC0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IFR3ZWFrIHRvIG1hdGNoIDE5OTgtMTAtMDcKCWNoYW5nZSB0byB2dGFibGUgdHlwZXMuCgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBBdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gY2F1c2VkIGJ5CgkxOTk4LTEwLTAzIGNoYW5nZS4KCjE5OTgtMTAtMDggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHJlc29sdmVfb3ZlcmxvYWRlZF91bmlmaWNhdGlvbik6IE5ldyBmbi4KCSh0cnlfb25lX292ZXJsb2FkKTogTGlrZXdpc2UuCgkodW5pZnkpOiBEb24ndCBmYWlsIG9uIHVua25vd24gdHlwZS4KCSh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBMaWtld2lzZS4gIFVzZSByZXNvbHZlX292ZXJsb2FkZWRfdW5pZmljYXRpb24KCXRvIGhhbmRsZSBhbiBvdmVybG9hZGVkIGFyZ3VtZW50LgoJKHRlbXBsYXRlX2FyZ3NfZXF1YWwpOiBTcGxpdCBvdXQuLi4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBGcm9tIGhlcmUuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQWxzbyBhbGxvdyBhIHRlbXBsYXRlIHdpdGggbW9yZQoJcGFybXMgdGhhbiB3ZXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgoJKiBjcC10cmVlLmg6IEFkZCB0ZW1wbGF0ZV9hcmdzX2VxdWFsLgoJKiBjYWxsLmMgKHJlc29sdmVfYXJncyk6IFJlbW92ZSBURU1QTEFURV9JRF9FWFBSIGNvZGUuCgpUaHUgT2N0ICA4IDE1OjU4OjMwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IFJldmVydCBteSAxOTk4LTA5LTI4CgljaGFuZ2UuCgpUaHUgT2N0ICA4IDA2OjAwOjE5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHR5cGVjay5jICh1bnNpZ25lZF90eXBlKTogT25seSByZXR1cm4gVEl0eXBlIG5vZGVzIHdoZW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgPj0gNjQgYml0cy4KCShzaWduZWRfdHlwZSk6IFNpbWlsYXJseS4KCSogZGVjbC5jIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IE9ubHkgZGVjbGFyZQoJd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IGNyZWF0ZSBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKiBjcC10cmVlLmggKGludFRJX3R5cGVfbm9kZSwgdW5zaWduZWRfaW50VElfdHlwZV9ub2RlKTogT25seSBkZWNsYXJlCgl3aGVuIEhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgPj0gNjQgYml0cy4KCldlZCBPY3QgIDcgMTI6MzI6NDQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGhhc2guaCk6IEFkZCAtTCBLUi1DIC1GICcsIDAsIDAnIGZsYWdzIHRvIGdwZXJmLgoJKGd4eC5ncGVyZik6IFVwZGF0ZSBjb21tZW50cyBkZXNjcmliaW5nIGludm9jYXRpb24gZmxhZ3MuCgkoaGFzaC5oKTogUmVnZW5lcmF0ZSB1c2luZyBncGVyZiAyLjcuMSAoMTk5ODEwMDYgZWdjcykuCgoxOTk4LTEwLTA3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWRkIGNvbW1lbnRhcnkgb24gcHJldm91cyBjaGFuZ2UuCgoJKiBjcC10cmVlLmggKHZ0YmxfcHRyX3R5cGVfbm9kZSk6IE5ldyB2YXJpYWJsZS4KCSogY2xhc3MuYyAoYnVpbGRfdnRibF9yZWYpOiBEb24ndCBpbmRpcmVjdCB0aHJvdWdoIHRoZSB2cHRyOyBpdCdzCglhbHJlYWR5IG9mIHRoZSByaWdodCB0eXBlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IE1ha2UgdGhlIHZwdHIgYmUgb2YgdHlwZSB2dGJsX3B0cl90eXBlX25vZGUuCglTaW1wbGlmeSBjb2RlIHRvIGdyb3cgdnRhYmxlLgoJKiBkZWNsLmMgKHZ0YmxfcHRyX3R5cGVfbm9kZSk6IERlZmluZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgaXQuCgkKMTk5OC0xMC0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuZGVmIChQVFJNRU1fQ1NUKTogTmV3IHRyZWUgbm9kZS4KCSogY3AtdHJlZS5oIChwdHJtZW1fY3N0KTogTmV3IHR5cGUuCgkobGFuZ190eXBlKTogUmVtb3ZlIGxvY2FsX3R5cGVkZWNscy4KCShkdW1teSk6IEluY3JlYXNlIHRvIDEyIGJpdHMgZnJvbSAxMS4KCShDTEFTU1RZUEVfTE9DQUxfVFlQRURFQ0xTKTogUmVtb3ZlLgoJKFBUUk1FTV9DU1RfQ0xBU1MpOiBOZXcgbWFjcm8uCgkoUFRSTUVNX0NTVF9NRU1CRVIpOiBMaWtld2lzZS4KCShjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIpOiBOZXcgdmFyaWFibGUuCgkoY3VycmVudF9jbGFzc190eXBlKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbi4KCShmaW5pc2hfc3RydWN0KTogQ2hhbmdlIHByb3RvdHlwZS4KCSh1bnJldmVyc2VfbWVtYmVyX2RlY2xhcmF0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IENoYW5nZSBwcm90b3R5cGUuCgkoZ3Jva19lbnVtX2RlY2xzKTogUmVtb3ZlLgoJKGZpeHVwX2Fub255bW91c191bmlvbik6IE5ldyBmdW5jdGlvbi4KCShncm9rX3hfY29tcG9uZW50cyk6IENoYW5nZSBwcm90b3R5cGUuCgkodHN1YnN0X2NoYWluKTogUmVtb3ZlLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRml4IGluZGVudGF0aW9uLgoJKGZpbmlzaF9jbGFzc19kZWZpbml0aW9uKTogQ2hhbmdlIHByb3RvdHlwZS4KCShmaW5pc2hfbWVtYmVyX2NsYXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShjaGVja19tdWx0aXBsZV9kZWNsYXJhdG9ycyk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChjbGFzc19zdGFja19ub2RlX3QpOiBOZXcgdHlwZS4KCShjdXJyZW50X2NsYXNzX2Jhc2UpOiBSZW1vdmUuCgkoY3VycmVudF9jbGFzc19zdGFjayk6IENoYW5nZSB0eXBlLgoJKGN1cnJlbnRfYWNjZXNzX3NwZWNpZmllcik6IE5ldyB2YXJpYWJsZS4KCShncm93X21ldGhvZCk6IFJlbW92ZS4KCShjaGVja19tZW1iZXJfZGVjbF9pc19zYW1lX2luX2NvbXBsZXRlX3Njb3BlKTogQnJlYWsgb3V0IGZyb20KCWZpbmlzaF9zdHJ1Y3QuCgkobWFrZV9tZXRob2RfdmVjKTogTmV3IGZ1bmN0aW9uLgoJKGZyZWVfbWV0aG9kX3ZlYyk6IExpa2V3aXNlLgoJKGFkZF9pbXBsaWNpdGx5X2RlY2xhcmVkX21lbWJlcnMpOiBCcmVhayBvdXQgZnJvbSBmaW5pc2hfc3RydWN0XzEuCgkoZnJlZV9tZXRob2RfdmVjcyk6IE5ldyB2YXJpYWJsZS4KCShhZGRfbWV0aG9kKTogUmV3b3JrIGZvciBkaXJlY3QgdXNlIGZyb20gcGFyc2VyLgoJKGhhbmRsZV91c2luZ19kZWNsKTogV2F0Y2ggZm9yIE5VTExfVFJFRSB3aGlsZSBpdGVyYXRpbmcgdGhyb3VnaAoJQ0xBU1NUWVBFX01FVEhPRF9WRUMuCgkoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogRG9uJ3QgYnVpbGQgQ0xBU1NUWVBFX01FVEhPRF9WRUMgaGVyZTsKCWp1c3QgZG8gc29tZSBlcnJvci1jaGVja2luZy4KCSh3YXJuX2hpZGRlbik6IENoYW5nZSBpdGVyYXRpb24gdGhyb3VnaCBDTEFTU1RZUEVfTUVUSE9EX1ZFQy4KCShmaW5pc2hfc3RydWN0XzEpOiBTaW1wbGlmeS4gIFVzZSBhZGRfaW1wbGljaXRseV9kZWNsYXJlZF9tZW1iZXJzLgoJKGZpbmlzaF9zdHJ1Y3QpOiBDaGFuZ2UgcHJvdG90eXBlLiAgU2ltcGxpZnk7IGZpZWxkcyBhbmQgbWV0aG9kcwoJYXJlIGFscmVhZHkgc2V0IHVwIGF0IHRoaXMgcG9pbnQuCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogU2V0IHVwIGN1cnJlbnRfY2xhc3Nfc3RhY2suCgkocHVzaGNsYXNzKTogU2F2ZSBjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIuCgkocG9wY2xhc3MpOiBSZXN0b3JlIGl0LgoJKGN1cnJlbnRseV9vcGVuX2NsYXNzKTogU2ltcGxpZnkuCgkoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBSZW1vdmUgdXNlIG9mIENMQVNTVFlQRV9MT0NBTF9UWVBFREVDTFMuCgkqIGRlY2wuYyAoc2F2ZWRfc2NvcGUpOiBBZGQgYWNjZXNzX3NwZWNpZmllci4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IFNhdmUgaXQuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSBpdC4KCShtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBVc2UKCWZpbmlzaF9tZW1iZXJfZGVjbGFyYXRpb24uIAoJKHB1c2h0YWcpOiBMaWtld2lzZS4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IERvbid0IHJldHVybiBhIHZhbHVlLgoJKGZpeHVwX2Fub255bW91c191bmlvbik6IEJyZWFrIG91dCBmcm9tIGdyb2tfeF9jb21wb25lbnRzLgoJKHNoYWRvd190YWcpOiBVc2UgaXQuCgkoeHJlZl90YWcpOiBDb21wbGFpbiBhYm91dCB1c2luZyBhbiBlbGFib3JhdGVkIHR5cGUgc3BlY2lmaWVyIHRvCglyZWZlcmVuY2UgYSB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlciBvciB0eXBlZGVmIG5hbWUuCgkoeHJlZl9iYXNldHlwZXMpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0xPQ0FMX1RZUEVERUNMUy4KCShjdXJyZW50X2xvY2FsX2VudW0pOiBSZW1vdmUuCgkoYnVpbGRfZW51bWVyYXRvcik6IENhbGwgZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbi4KCShncm9rX2VudW1fZGVjbHMpOiBSZW1vdmUuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogU2ltcGxpZnkuCgkoY2hlY2tfY2xhc3Nmbik6IENoYW5nZSBpdGVyYXRpb24gdGhyb3VnaCBDTEFTU1RZUEVfTUVUSE9EX1ZFQy4KCShncm9rZmllbGQpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0xPQ0FMX1RZUEVERUNMUy4KCShtZXJnZV9mdW5jdGlvbnMpOiBBZGQgdG8gY29tbWVudC4KCShhcmdfYXNzb2NfdHlwZSk6IFByb3RvdHlwZS4KCShhcmdfYXNzb2MpOiBQYXNzIGFzIG1hbnkgYXJndW1lbnRzIGFzIHRoZXJlIGFyZSBwYXJhbWV0ZXJzLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgUFRSTUVNX0NTVC4gIEltcHJvdmUgaGFuZGxpbmcgb2YKCU9GRlNFVF9SRUYuCgkqIGV4cHIuYyAoY3Bsc19leHBhbmRfZXhwcik6IFJlbW92ZSBkZWFkIGNvZGUuICBIYW5kbGUKCVBUUk1FTV9DU1QuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBMb29rdXAgZnJpZW5kcyB3aGVuIGluIG5lc3RlZCBjbGFzc2VzLgoJQ2hhbmdlIGNvbW1lbnRzLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBEbyBsb29rdXAgZXZlbiBmb3IgY2xhc3NlcyB0aGF0IGFyZQoJb25seSBwYXJ0aWFsbHkgZGVmaW5lZC4KCShkZWNsX2NvbnN0YW50X3ZhbHVlKTogUmVtb3ZlIGRlYWQgY29kZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogUmVtb3ZlIGhhY2sgd2hlcmUgYnkgVFlQRSB3YXMKCW5vdCBhIFRZUEUuICBIYW5kbGUgUFRSTUVNX0NTVC4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogRG9uJ3QgcGFzcyBhIFBBUk1fREVDTCB3aGVyZSBhIFRZUEUKCXNob3VsZCBnby4KCSogcGFyc2UueSAoY29tcG9uZW50cywgbm90eXBlX2NvbXBvbmVudHMsIGNvbXBvbmVudF9kZWNsLAoJY29tcG9uZW50X2RlY2xfMSwgY29tcG9uZW50X2RlY2xhcmF0b3IsIGNvbXBvbmVudF9kZWNsYXJhdG9yMCk6CglOb3cgYWxsIGFyZSBpdHlwZSByYXRoZXIgdGhhbiB0dHlwZS4gIFJld29yayB0byBhZGQgbWVtYmVycyB0bwoJY2xhc3NlcyBvbiB0aGUgZmx5LgoJKHR5cGVzcXBlY3F1YWxfcmVzZXJ2ZWQpOiBVc2UgY2hlY2tfbXVsdGlwbGVfZGVjbGFyYXRvcnMuCgkoc3RydWN0c3ApOiBVcGRhdGUgY2xhc3MgdG8gZmluaXNoX2NsYXNzX2RlZmluaXRpb24uCgkoZG9feHJlZl9kZWZuKTogVW5zcGxpdCBpbnRvIG5hbWVkX2NsYXNzX2hlYWQuCgkoYWNjZXNzX3NwZWNpZmllcik6IFNldCBjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIuCgkqIHB0LmMgKHNldF9jdXJyZW50X2FjY2Vzc19mcm9tX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogRG9uJ3QgdGFrZSB0aGUgcGFyYW1ldGVycy4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBNYWtlIG1vcmUgcm9idXN0LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IHVzZSBjdXJyZW50X2xvY2FsX2VudW0uCgkoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IEhhbmRsZSBQVFJNRU1fQ1NULgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIHNldF9jdXJyZW50X2FjY2Vzc19mcm9tX2RlY2wsCglmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uIGFuZCB1bnJldmVyc2VfbWVtYmVyX2RlY2xhcmF0aW9ucy4gIFNldAoJbGluZW5vL2lucHV0X2ZpbGVuYW1lIGJlZm9yZSBnZW5lcmF0aW5nIGltcGxpY2l0IG1lbWJlciBmdW5jdGlvbnMuICAKCSh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBEb24ndCBhc3N1bWUgYmFjay11bmlmaWNhdGlvbiBoYXBwZW5zCglvbmx5IGZvciB0aGUgbGFzdCBhcmd1bWVudC4KCShyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZSk6IENhbGwgcHVzaGNsYXNzIGEgYml0IGVhcmxpZXIuCgkodHN1YnN0X2NoYWluKTogUmVtb3ZlLgoJKHRzdWJzdF9lbnVtKTogVXNlIHNldF9jdXJyZW50X2FjY2Vzc19mcm9tX2RlY2wuCgkoc2V0X21hbmdsZWRfbmFtZV9mb3JfdGVtcGxhdGVfZGVjbCk6IEZpeCBpbmRlbnRhdGlvbi4KCSogc2VhcmNoLmMgKGxvb2t1cF9mbmZpZWxkc18xKTogQ2hhbmdlIGl0ZXJhdGlvbiB0aHJvdWdoCglDTEFTU1RZUEVfTUVUSE9EX1ZFQy4KCShkZnNfcHVzaGRlY2xzKTogTGlrZXdpc2UuCgkoZGZzX2NvbXByZXNzX2RlY2xzKTogTGlrZXdpc2UuCgkoYWRkX2NvbnZlcnNpb25zKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IERvbid0IHRha2UgY29tcG9uZW50cy4KCUNoYW5nZSBjYWxsIHRvIGZpbmlzaF9zdHJ1Y3QuCgkoZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfbWVtYmVyX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgdGFrZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJQ2hhbmdlIGNhbGwgdG8gZ3Jva194X2NvbXBvbmVudHMuICBDYWxsIGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbC4KCShjaGVja19tdWx0aXBsZV9kZWNsYXJhdG9ycyk6IE5ldyBmdW5jdGlvbi4KCSogc2lnLmMgKGFwcGVuZF9zaWduYXR1cmVfZmllbGRzKTogV29yayBmcm9tIHRoZSBUWVBFX01FVEhPRFMsIG5vdAoJYSBwYXNzZWQgaW4gZmllbGRsaXN0LgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogSGFuZGxlIFBUUk1FTV9DU1QuCgkobWFwY2FyKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IEJ1aWxkIFBUUk1FTV9DU1RzLCBub3QKCUlOVEVHRVJfQ1NUcywgZm9yIHBvaW50ZXItdG8tZGF0YSBtZW1iZXJzLgoJCgkqIGNhbGwuYyAocmVzb2x2ZV9hcmdzKTogUmVzb2x2ZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMsIGlmCglwb3NzaWJsZS4KClR1ZSBPY3QgIDYgMDc6NTc6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHNwZXcubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNhbGwuYyAoY29tcGFyZV9pY3MpOiBJbml0aWFsaXplIHZhcmlhYmxlcyBgZGVyZWZfZnJvbV90eXBlMicsCiAJYGRlcmVmX3RvX3R5cGUxJyBhbmQgYGRlcmVmX3RvX3R5cGUyJy4KCgkqIGV4Y2VwdC5jIChnZXRfZWhfdHlwZSk6IEhpZGUgcHJvdG90eXBlIGFuZCBkZWZpbml0aW9uLgoJKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2tfb2xkKTogUmVtb3ZlIHVudXNlZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogcHQuYyAodHN1YnN0X2RlY2wpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBhcmd2ZWMnLgoKCSogc3Bldy5jOiBJbmNsdWRlIHRvcGxldi5oLgoKMTk5OC0xMC0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IERvIHNhdmUgYW5kIHJlc3RvcmUgZmlsZSBwb3NpdGlvbi4KCjE5OTgtMTAtMDUgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogQ2xlYXIKCW51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGFmdGVyIF9fLgoKMTk5OC0xMC0wNSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSXNzdWUgJ2luY29tcGxldGUgdHlwZScgZXJyb3IsCglpZiBjbGFzcyBpcyBub3QgZGVmaW5lZC4KCjE5OTgtMTAtMDUgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBNb3ZlIGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlCglgZm4nIGludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzIHVzZWQuICBEb24ndCBhY2Nlc3MgdmFyaWFibGUKCWBmbicgd2hlbiBpdCBpcyB1bmluaXRpYWxpemVkLCBpbnN0ZWFkIHVzZSBgZm5zJy4KCjE5OTgtMTAtMDQgIFRoZW9kb3JlIFBhcGFkb3BvdWxvIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBlcnJmbi5jIChjcF90aGluZyk6IFByaW50IGJ1ZiBhcyBhIHN0cmluZyBub3QgYXMgYSBwcmludGYgZm9ybWF0Cgl0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBvcGVyYXRvciUuIENvbnNlcXVlbnRseSwgYCUlJyBzZXF1ZW5jZXMKCWluIGZvcm1hdCBhcmUgY29waWVkIGFzIGAlJyBpbiBidWYuCgoxOTk4LTEwLTA0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwb3BfdGluc3RfbGV2ZWwpOiBDYWxsIGV4dHJhY3RfaW50ZXJmYWNlX2luZm8uCgkoaW5zdGFudGlhdGVfZGVjbCk6IERvbid0IHNhdmUgYW5kIHJlc3RvcmUgZmlsZSBwb3NpdGlvbi4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBNYWtlIHN0YXRpY3MgaW4gZXh0ZXJuIGlubGluZXMgYW5kCgl0ZW1wbGF0ZXMgY29tbW9uLCBpZiBwb3NzaWJsZSBhbmQgdGhlIHRhcmdldCBkb2Vzbid0IHN1cHBvcnQgd2VhawoJc3ltYm9scy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgcmVkdW5kYW50IGNhbGxzIHRvCglidWlsZF90eXBlX3ZhcmlhbnQgYW5kIHNvbWUgZHVwbGljYXRlZCBjb2RlLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3JlZmVyZW5jZV90eXBlKTogT25seSB0YWtlIHRoZSB0eXBlIHBhcm0uCgkoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfdHlwZSk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX21ldGhvZF90eXBlKTogQWRqdXN0LgoJKiBjcC10cmVlLmg6IFVwZGF0ZS4KCjE5OTgtMTAtMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IE1ha2UgcGVkd2FybnMgYWJvdXQgZHJvcHBlZCBxdWFsaWZpZXJzCglpbnRvIGZ1bGwtZmxlZGdlZCBlcnJvcnMuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfdnRhYmxlcyk6IEluIGFkZGl0aW9uIHRvIHVuc2V0dGluZyAKCVRSRUVfUkVBRE9OTFksIHJlbW92ZSB0b3AtbGV2ZWwgY29uc3QgdHlwZSBxdWFsaWZpZXIuCgoxOTk4LTEwLTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoY3VycmVudF9jbGFzc19wdHIsIGN1cnJlbnRfY2xhc3NfcmVmKTogQ2xhcmlmeQoJZG9jdW1lbnRhdGlvbi4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogRG9uJ3QgZXhwZWN0IGZvbGQgdG8gcmVtb3ZlIGFsbCB0cml2aWFsCglOT1AgdHlwZSBjb252ZXJzaW9ucy4KCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IFVzZSBjb21wdHlwZXMgZGlyZWN0bHk7IGlnbm9yZQoJcXVhbGlmaWVycyBvbiB0aGUgREVDTC4KCShkdXBsaWNhdGVfZGVjbHMpOiBSZW1vdmUgcXVhbGlmaWVyIGNoZWNrcyBvbiBERUNMLgoJKGdyb2tkZWNsYXJhdG9yKTogTWFrZSB0aGUgdHlwZSBidWlsdCB1cCBpbmNsdWRlIHRvcC1sZXZlbAoJcXVhbGlmaWVycy4KCSogZGVjbDIuYyAoZG9fZHRvcnMpOiBGaXggc3BlbGxpbmcgZXJyb3IuCgkqIGVycm9yLmMgKGR1bXBfc2ltcGxlX2RlY2wpOiBEb24ndCBsb29rIGF0IHF1YWxpZmllcnMgb24gdGhlIGRlY2wKCXdoZW4gcHJpbnRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IEFkZCBkb2N1bWVudGF0aW9uLiAgRGVhbCB3aXRoIHRoZSBmYWN0Cgl0aGF0IHR5cGUgb2YgYWxsb2NhdGVkIG1lbW9yeSBub3cgY29udGFpbnMgcXVhbGlmaWVycy4KCSogbGV4LmMgKGlzX2dsb2JhbCk6IEltcHJvdmUgZXJyb3ItcmVjb3ZlcnkuCgkqIHNpZy5jIChidWlsZF9tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcik6IERvbid0IGNhc3QgYXdheSBjb25zdAoJb24gZmllbGRzIG9mIHNpZ3RhYmxlX2VudHJ5X3R5cGUuCgkqIHRyZWUuYyAobHZhbHVlX3R5cGUpOiBEb24ndCBsb29rIGF0IHRvcC1sZXZlbCBxdWFsaWZpZXJzIG9uCglleHByZXNzaW9ucy4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTWFrZSBzdXJlIHRoZSB0eXBlIG9mIHRoZSBDT01QT05FTlRfUkVGCgljb250YWlucyB0b3AtbGV2ZWwgcXVhbGlmaWVycywgYXMgYXBwcm9wcmlhdGUuICBJbXByb3ZlCgllcnJvci1oYW5kbGluZy4gCgkoYnVpbGRfaW5kaXJlY3RfcmVmKTogU2ltcGxpZnkuICBEb24ndCBzdHJpcCB0b3AtbGV2ZWwgcXVhbGlmaWVycy4KCShidWlsZF9hcnJheV9yZWYpOiBMaWtld2lzZS4KCShidWlsZF91bmFyeV9vcCk6IEltcHJvdmUgZXJyb3ItcmVjb3ZlcnkuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBNYWtlIHRha2luZyB0aGUgYWRkcmVzcyBhIGJvdW5kIG1lbWJlcgoJZnVuY3Rpb24gYW4gZXJyb3IsIG5vdCBhIHNvcnJ5LgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBMb29rIGF0IHRoZSB0eXBlIHF1YWxpZmllcnMsIG5vdCB0aGUKCXF1YWxpZmllcnMgb24gdGhlIGV4cHJlc3Npb24gaXRzZWxmLgoJCjE5OTgtMTAtMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1lcmdlX2Z1bmN0aW9ucyk6IFJlbW92ZSBkdXBsaWNhdGVzLgoKCSogZGVjbDIuYzogQWRkIC1me25vLSx9aW1wbGljaXQtaW5saW5lLXRlbXBsYXRlcy4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBDaGVjayBpdC4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFRlbXBsYXRlIHBhcm1zIGFsc28gdGFrZSBwcmVjZWRlbmNlCglvdmVyIGltcGxpY2l0IHR5cGVuYW1lLiAgT25seSB3YXJuIGlmIHl5bGV4LgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBPbmx5IGZvbGQgaWYgaWZleHAgaXMgYW4KCUlOVEVHRVJfQ1NULgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogQ2hlY2sgREVDTF9JTlRFUkZBQ0VfS05PV04KCWluc3RlYWQgb2YgbGlua2FnZS4KCjE5OTgtMTAtMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoRk9STUFUX1ZCQVNFX05BTUUpOiBOZXcgbWFjcm8uCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BvaW50ZXIpOiBVc2UgaXQuCgkqIHJ0dGkuYyAoZXhwYW5kX2NsYXNzX2Rlc2MpOiBMaWtld2lzZS4KCSogdHJlZS5jIChidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IExpa2V3aXNlLgoKVGh1IE9jdCAgMSAxMDo0Mzo0NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQWRkIGludm9jYXRpb24gb2YKCVNFVF9ERUZBVUxUX0RFQ0xfQVRUUklCVVRFUywgaWYgZGVmaW5lZC4KCShzdGFydF9mdW5jdGlvbik6IEFkZCBpbnZvY2F0aW9uIG9mCglTRVRfREVGQVVMVF9ERUNMX0FUVFJJQlVURVMsIGlmIGRlZmluZWQuCgoJKiBsZXguYzogUmVwbGFjZSBvY2N1cmFuY2VzIG9mIEhBTkRMRV9TWVNWX1BSQUdNQSB3aXRoCglIQU5ETEVfR0VORVJJQ19QUkFHTUFTLgoJCjE5OTgtMDktMjggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IEFsd2F5cyBwZXJtaXQgdm9sYXRpbGUgYXNtcy4KCjE5OTgtMDktMjggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVGlnaHRlbiBjaGVja3MgZm9yIGludmFsaWQKCWRlc3RydWN0b3JzLiAgSW1wcm92ZSBlcnJvci1tZXNzYWdlcyBhbmQgZXJyb3ItcmVjb3ZlcnkuCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBEb24ndCBhc3N1bWUgdGhhdCBtYW5nbGVkIGRlc3RydWN0b3IgCgluYW1lcyBjb250YWluIHR5cGUgaW5mb3JtYXRpb24uCgkKMTk5OC0wOS0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogUmVtb3ZlIGFzc2VydC4KCgkqIGRlY2wyLmMgKGJ1aWxkX2Fub25fdW5pb25fdmFycyk6IERvbid0IHByb2Nlc3MgYSBmaWVsZCB3aXRoIG5vCgluYW1lLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogQWxzbyBjb21wbGFpbiBhYm91dCBsb2NhbCBhbm9uIHVuaW9ucyB3aXRoIG5vCgltZW1iZXJzLgoKMTk5OC0wOS0yNSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVzcGFjZV9uYW1lKTogSWYgdGhlIG5hbWUgaXMgYSBuYW1lc3BhY2UsCglyZXR1cm4gaXQgaW1tZWRpYXRlbHkuCgpGcmkgU2VwIDI1IDExOjQ1OjM4IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLXRyZWUuaCAoZGVmaW5lX2Nhc2VfbGFiZWwpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlci4KCShjaGVja19qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKGdyb2tjbGFzc2ZuKTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfaW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3hfZGVsZXRlKTogTGlrZXdpc2UuCgkobWF5YmVfZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkodW5zaGFyZV9iYXNlX2JpbmZvcyk6IEFkZCBwcm90b3R5cGUuCgkoc3RyaW5nX2NvbnZfcCk6IExpa2V3aXNlLgoJKG15X2ZyaWVuZGx5X2Fib3J0KTogTWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlcgogCWBjaGVja2NvbnN0JywgYWxsIGNhbGxlcnMgY2hhbmdlZC4KCShidWlsZF90eXBlX2NvbnZlcnNpb24pOiBNYXJrIHBhcmFtZXRlciBgY29kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IEluaXRpYWxpemUgdmFyaWFibGUgYGNvbnYnLgoKCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IEluaXRpYWxpemUgdmFyaWFibGUgYGQnLgogIAkoZGVmaW5lX2Nhc2VfbGFiZWwpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgZGVjbCcsIGFsbCBjYWxsZXJzCiAJY2hhbmdlZC4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IElmICFVU0VfQ1BQTElCLCBtYXJrIHBhcmFtZXRlcgogCWBhcmdjJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoZ3Jva2NsYXNzZm4pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgY25hbWUnLCBhbGwgY2FsbGVycwogCWNoYW5nZWQuCgkoY2hlY2tfamF2YV9tZXRob2QpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBjdHlwZScuCgkoY29weV9hc3NpZ25tZW50X2FyZ19wKTogTWFyayBwYXJhbWV0ZXIgYHZpcnR1YWxwJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYHByZXYnLgoKCSogZXhwci5jIChleHRyYWN0X2luaXQpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVycyBgZGVjbCcgYW5kIGBpbml0Jy4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIKIAlgYWxpYXNfdGhpcycsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZXhwYW5kX2FnZ3JfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfMSk6IEluaXRpYWxpemUgdmFyaWFibGUgYHN1c3AnLgoJKGJ1aWxkX3hfZGVsZXRlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYHR5cGUnLCBhbGwgY2FsbGVycwoJY2hhbmdlZC4KCgkqIGxleC5jIChzZXRfdHlwZWRlY2xfaW50ZXJmYWNlX2luZm8pOiBNYXJrIHBhcmFtZXRlciBgcHJldicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShyZWFkZXNjYXBlKTogVXNlICh1bnNpZ25lZCkgdmFsdWUgaW4gc2hpZnQuCgkocmVhbF95eWxleCk6IExpa2V3aXNlLiAgTGlrZXdpc2UuICBBbHNvIGNhc3QgYHNpemVvZicgdG8gaW50IHdoZW4KCWNvbXBhcmluZyB0byBhIHNpZ25lZCBxdWFudGl0eS4KCgkqIHB0LmMgKG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFJlbW92ZSB1bnVzZWQKIAlwYXJhbWV0ZXIgYGRlY2wnLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQWRkIGJyYWNlcyBhcm91bmQgZW1wdHkgYm9keSBpbgoJYW4gZWxzZS1zdGF0ZW1lbnQuCgkoY3VycmVudF90ZW1wbGF0ZV9hcmdzKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgYXJncycuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBwcmV2X2xvY2FsX2VudW0nLgoJKHRzdWJzdF9kZWNsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGByJy4KCShzZXRfbWFuZ2xlZF9uYW1lX2Zvcl90ZW1wbGF0ZV9kZWNsKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYGNvbnRleHQnLgoKCSogc3Bldy5jIChzY2FuX3Rva2Vucyk6IENoYW5nZSB0eXBlIG9mIHBhcmFtZXRlciBgbicgdG8gdW5zaWduZWQuCglMaWtld2lzZSBmb3IgdmFyaWFibGUgYGknLgoJKHl5bGV4KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgdHJycicuCgoJKiB0eXBlY2suYyAoY29tcHBhcm1zKTogTWFyayB2YXJpYWJsZSBgc3RyaWN0JyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogeHJlZi5jIChzaW1wbGlmeV90eXBlKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBmdW5jdGlvbiB0bwoJYHVuc2lnbmVkIGNoYXInLgoKMTk5OC0wOS0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ3VhZ2VfbHZhbHVlX3ZhbGlkKTogUmVtb3ZlLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgZGlzYWxsb3cgcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMuCgkqIHRyZWUuYyAobHZhbHVlX3BfMSk6IE5ldyBmdW5jdGlvbiwgY29tYmluaW5nIGR1cGxpY2F0ZWQKCWNvZGUgZnJvbSAuLi4KCShsdmFsdWVfcCk6IFVzZSBpdC4KCShyZWFsX2x2YWx1ZV9wKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChsYW5ndWFnZV9sdmFsdWVfdmFsaWQpOiBSZW1vdmUuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBUcmVhdCBGVU5DVElPTl9UWVBFcyBhcyByZWFkb25seSwgZXZlbiB0aG91Z2gKCXRoZXkgZG9uJ3QgaGF2ZSBUUkVFX1JFQURPTkxZIHNldC4KCSogdHlwZWNrMi5jIChyZWFkb25seV9lcnJvcik6IEFkZCBjYXNlIGZvciBGVU5DVElPTl9ERUNMcy4KCQoxOTk4LTA5LTI0ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBzcGV3LmMgKHl5bGV4KTogR2l2ZSBkaWFnbm9zdGljLgoJKiBoYXNoLmggKGlzX3Jlc2VydmVkX3dvcmQpOiBBZGQgZXhwb3J0LgoJKiBneHguZ3BlcmY6IERpdHRvLgoJKiBsZXguaCAocmlkKTogQWRkIFJJRF9FWFBPUlQuCgkqIGxleC5jIChpbml0X3BhcnNlKTogRGl0dG8uIAoKVHVlIFNlcCAyMiAyMTowMToxOSAxOTk4ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogTWFrZSB3YXJuaW5nIGEgZnVsbCBzZW50ZW5jZS4KCjE5OTgtMDktMjIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbF9saXN0KTogSW1wcm92ZSBlcnJvci1yZWNvdmVyeS4KCjE5OTgtMDktMjIgIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCiAgICAgICAgKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IE1vdmUgZXJyb3IgdG8gcG9pbnQgd2hlcmUgbmFtZQogICAgICAgIHZhcmlhYmxlIGNhbiBiZSB1c2VkIGJ5IGR1bXBfdHlwZS4KCjE5OTgtMDktMjIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBJbXByb3ZlIGVycm9yLXJlY292ZXJ5LgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4KCSogcHQuYyAoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogTGlrZXdpc2UuCgoxOTk4LTA5LTIwICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEZpbmRpbmcgbXVsdGlwbGUgbWVtYmVycyBpcyBhbHdheXMKCWFuIGVycm9yLgoKMTk5OC0wOS0yMSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGMrKy1maWx0KTogIExpbmsgbGliaWJlcnR5LmEgYWZ0ZXIgY3h4bWFpbi5vLgoKTW9uIFNlcCAyMSAwMTo1MzowNSAxOTk4ICBGZWxpeCBMZWUgIDxmbGVlQGN5Z251cy5jb20+CgogICAgICAgICogbGV4LmMgKGluaXRfbGV4KTogVXNlIGdldGVudiAoIkxBTkciKSwgbm90IEdFVF9FTlZJUk9OTUVOVCAoKS4KCjE5OTgtMDktMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChtYXliZV93YXJuX2Fib3V0X292ZXJseV9wcml2YXRlX2NsYXNzKTogUmVmb3JtYXQuCgoxOTk4LTA5LTE3ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fY3BsdXNfdHlwZV9tYXRjaGVyKTogcmVhbGlnbiBzb21lIGNvZGUuCgoxOTk4LTA5LTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogTWFrZS1sYW5nLmluICh0aW5mby5vKTogVXNlIENYWEZMQUdTIHdoZW4gY29tcGlsaW5nLgoJKHRpbmZvMi5vKTogTGlrZXdpc2UuCgkoZXhjZXB0aW9uLm8pOiBMaWtld2lzZS4KCShuZXcubyk6IExpa2V3aXNlLgoJKG9wbmV3Lm8pOiBMaWtld2lzZS4KCShvcG5ld250Lm8pOiBMaWtld2lzZS4KCShvcHZuZXcubyk6IExpa2V3aXNlLgoJKG9wdm5ld250Lm8pOiBMaWtld2lzZS4KCShvcGRlbC5vKTogTGlrZXdpc2UuCgkob3BkZWxudC5vKTogTGlrZXdpc2UuCgkob3B2ZGVsLm8pOiBMaWtld2lzZS4KCShvcHZkZWxudC5vKTogTGlrZXdpc2UuCgoxOTk4LTA5LTE2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKICAgICAgICAqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBLaWxsIF9fYnVpbHRpbl9mcCBhbmQgX19idWlsdGluX3NwLgoKMTk5OC0wOS0xNSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjYWxsLmMgKGJ1aWxkX2ZpZWxkX2NhbGwpOiBoYW5kbGUgc3RhdGljIGRhdGEgbWVtYmVycyB0b28KCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiB3aGVuIGNvbXBhcmluZyBwb2ludGVyIHR5cGVzLCBjaGVjawoJd2hldGhlciByZWZlcnJlZCB0eXBlcyBtYXRjaCBldmVuIGluIHN0cmljdGVzdCBtb2RlcwoKMTk5OC0wOS0xNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaDogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZS4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkqIGNsYXNzLmM6IFJldmVydCBwcmV2aW91cyBjaGFuZ2UuCgkobWF5YmVfd2Fybl9hYm91dF9vdmVybHlfcHJpdmF0ZV9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBEZWNsYXJlIGhlcmUsIGFuZCBtYWtlIHN0YXRpYy4gIFJlbW92ZQoJdW5uZWNlc3NhcnkgcGFyYW1ldGVycy4gIFRpZHkgc2xpZ2h0bHkuICBVc2UKCW1heWJlX3dhcm5fYWJvdXRfb3Zlcmx5X3ByaXZhdGVfY2xhc3MuIAoJKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkanVzdC4gIFJlbW92ZSBjaGVjayBmb3IgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMsCglub3cgZG9uZSBlbHNld2hlcmUuCgkoZmluaXNoX3N0cnVjdCk6IEFkanVzdC4KCQoxOTk4LTA5LTE1ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTm8gbmVlZCB0byBjaGVjayBmb3IgbmV3CglleGNlcHRpb24gbW9kZWwuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBEZWxldGVkLgoJKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2spOiBBZGQgY2FsbCB0byBzdGFydF9kZWNsXzEoKS4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogQWRkIGNhbGwgdG8gZW5kX2NhdGNoX2hhbmRsZXIoKS4KCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IE9ubHkgY2hlY2sgdGhlIGV4Y2VwdGlvbiAKCWxhbmd1YWdlIGlmIHRoZXJlIGlzIGFuIGV4Y2VwdGlvbiB0YWJsZS4KCjE5OTgtMDktMTUgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChleHBhbmRfaW5kaXJlY3RfdnRibHNfaW5pdCk6IE1hcmsgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzCglhcyB1c2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggdmlydHVhbCBmdW5jdGlvbiB0YWJsZXMuCgoxOTk4LTA5LTE0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChsYW5nX3R5cGUpOiBBZGQgaGFzX25vbl9wcml2YXRlX3N0YXRpY19tZW1fZm4uCgkoQ0xBU1NUWVBFX0hBU19OT05fUFJJVkFURV9TVEFUSUNfTUVNX0ZOKTogTmV3IG1hY3JvLCB0byBhY2Nlc3MgaXQuCgkqIGNsYXNzLmMgKG1heWJlX2NsYXNzX3Rvb19wcml2YXRlX3ApOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogVXNlIGl0LgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgQ0xBU1NUWVBFX0hBU19OT05fUFJJVkFURV9TVEFUSUNfTUVNX0ZOIGlmCglhcHByb3ByaWF0ZS4KCQoJKiBwdC5jIChjaGVja19zcGVjaWFsaXphdGlvbl9zY29wZSk6IEZpeCBzcGVsbGluZyBlcnJvci4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFJlbW92ZSBjb2RlIHRvIGhhbmRsZSBleHBsaWNpdAoJc3BlY2lhbGl6YXRpb25zIGluIGNsYXNzIHNjb3BlOyB0aGV5IGFyZSBub3cgY29ycmVjdGx5IGRpYWdub3NlZAoJYXMgZXJyb3JzLgoKMTk5OC0wOS0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBjb3B5IHR5cGVzIGlmIHRoZQoJREVDTF9BQlNUUkFDVF9PUklHSU4gb2YgdGhlIG5ldyBkZWNsIG1hdGNoZXMgdGhlIFRZUEVfTkFNRSBvZiB0aGUKCXR5cGUuIAoKMTk5OC0wOS0wOSAgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKCSogY2xhc3MuYyAoZ2V0X2VuY2xvc2luZ19jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShpc19iYXNlX29mX2VuY2xvc2luZ19jbGFzcyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGdldF9lbmNsb3NpbmdfY2xhc3MpOiBEZWNsYXJlLgoJKGlzX2Jhc2Vfb2ZfZW5jbG9zaW5nX2NsYXNzKTogTGlrZXdpc2UuCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSB0aGVtLgoKMTk5OC0wOS0wOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZysrc3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IENoZWNrIHdoZXRoZXIgTUFUSF9MSUJSQVJZIGlzCgludWxsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHVzZSBpdC4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogSGFuZGxlIE5BTUVTUEFDRV9ERUNMLgoJKiBwYXJzZS55IChiYXNlX2NsYXNzLjEpOiBBdm9pZCBjcmFzaCBvbiBlcnJvci4KCjE5OTgtMDktMDggIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IElmIGNvbnRleHQgaXMgYSBuYW1lc3BhY2UsIHRoZSBjb2RlCglpcyBpbiBlcnJvci4KCjE5OTgtMDktMDggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogcGFyc2UueSAobm9tb2RzX2luaXRkY2wwKTogU2V0IHVwIHRoZSBwYXJzZXIgc3RhY2sgY29ycmVjdGx5LgoKMTk5OC0wOS0wOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoYW5vbnltb3VzX25hbWVzcGFjZV9uYW1lKTogRGVjbGFyZS4KCSogZGVjbC5jOiBEZWZpbmUgaXQuCgkocHVzaF9uYW1lc3BhY2UpOiBVc2UgYW5vbnltb3VzX25hbWVzcGFjZV9uYW1lLCByYXRoZXIgdGhhbiBsb2NhbAoJc3RhdGljIGFub25fbmFtZS4KCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogSWYgYSBuYW1lc3BhY2UgaXMgbmFtZWQKCWFub255bW91c19uYW1lc3BhY2VfbmFtZSwgY2FsbCBpdCB7YW5vbnltb3VzfS4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogRGlzdGluZ3Vpc2ggYmV0d2VlbiByZWZlcmVuY2VzIGFuZCBwb2ludGVycwoJaW4gZXJyb3IgbWVzc2FnZS4KCjE5OTgtMDktMDggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkgICAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4JCgkKCSogcHQuYyAocHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uKTogQ29uc2lzdGFudGx5IGFsbG9jYXRlCglhbmQgemVybyB0cGQucGFybXMgYmFzZWQgb24gbnRwYXJtcy4gIFVzZSB0cGQyLnBhcm1zLCBub3QKCXRwZC5wYXJtcywgd2hlcmUgYXBwcm9wcmlhdGUuCgpTdW4gU2VwICA2IDAwOjAwOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChJTkNMVURFUyk6IFVwZGF0ZSBhZnRlciByZWNlbnQgdG9wbGV2ZWwgZ2NjCglyZW9yZ2FuaXphdGlvbnMuCgoxOTk4LTA5LTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChUSV9QRU5ESU5HX1NQRUNJQUxJWkFUSU9OX0ZMQUcpOiBSZW1vdmUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZW1vdmUgaGFja2VyeSB0byBkZWFsIHdpdGggZXhwbGljaXQKCXNwZWNpYWxpemF0aW9ucyBpbiBjbGFzcyBzY29wZS4KCSogZGVjbC5jIChncm9rZm5kZWNsKTogSW1wcm92ZSBlcnJvci1yZWNvdmVyeS4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogTGlrZXdpc2UuCgkqIHB0LmMgKGNoZWNrX3NwZWNpYWxpemF0aW9uX3Njb3BlKTogTmV3IGZ1bmN0aW9uLgoJKGJlZ2luX3NwZWNpYWxpemF0aW9uKTogQ2FsbCBpdC4KCShwcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tCglwdXNoX3RlbXBsYXRlX2RlY2wuICBDaGVjayBwYXJ0aWFsIHNwZWNpYWxpemF0aW9ucyBtb3JlCglzdHJpbmdlbnRseS4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBDYWxsIGl0LgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRG9uJ3QgYXR0ZW1wdCB0byBoYW5kbGUgZXhwbGljaXQKCXNwZWNpYWxpemF0aW9ucyBpbiBjbGFzcyBzY29wZS4KCSh0ZW1wbGF0ZV9wYXJtX2RhdGEpOiBEb2N1bWVudC4gIEFkZCBjdXJyZW50X2FyZyBhbmQKCWFyZ191c2VzX3RlbXBsYXRlX3Bhcm1zLiAKCShtYXJrX3RlbXBsYXRlX3Bhcm0pOiBTZXQgaXQuCgkodHN1YnN0X2FyZ190eXBlcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogVHdlYWsuCgkKMTk5OC0wOS0wNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGluYy90eXBlaW5mbyAodHlwZV9pbmZvOjp0eXBlX2luZm8oY29uc3QgY2hhciopKTogTWFrZQoJYGV4cGxpY2l0Jy4KCgkqIGNwLXRyZWUuaCAoaGFzaF90cmVlX2NvbnNfc2ltcGxlKTogTmV3IG1hY3JvLgoJKiBwdC5jICh0c3Vic3RfYXJnX3R5cGVzKTogTmV3IGZ1bmN0aW9uLiAgVXNlIGhhc2hfdHJlZV9jb25zLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSBtYWtlX3RlbXBfdmVjLCBpbnN0ZWFkIG9mCgltYWtlX3RyZWVfdmVjLiAgRG9jdW1lbnQgdGhpcyBiZWhhdmlvci4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSh0c3Vic3QsIGNhc2VzIE1FVEhPRF9UWVBFLCBGVU5DVElPTl9UWVBFKTogVXNlIHRzdWJzdF9hcmdfdHlwZXMuICAKCVJlbW92ZSBkZWFkIGNvZGUgKGFuZCBhZGQgc3NlcnRpb24gdG8gY2hlY2sgaXRzIGRlYWRuZXNzKS4gIEZpeAoJYnVnIHcuci50LiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnMuCgoxOTk4LTA5LTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IEFsd2F5cyBtYWtlIGFydGlmaWNpYWxzIGNvbWRhdC4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoKMTk5OC0wOS0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoZmluaXNoX2dsb2JhbGx5X3F1YWxpZmllZF9tZW1iZXJfY2FsbF9leHByKToKCVJlbmFtZSB0byAuLi4KCShmaW5pc2hfcXVhbGlmaWVkX2NhbGxfZXhwcikuCgkqIHNlbWFudGljcy5jOiBMaWtld2lzZS4KCSogcGFyc2UueSAocHJpbWFyeSk6IFVzZSBpdC4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IFJlbW92ZSByZWR1bmRhbnQgY29kZS4KCQoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IENhbGwgY29udmVydF9mcm9tX3JlZmVyZW5jZSB0bwogCWhhbmRsZSBtZW1iZXJzIG9mIHJlZmVyZW5jZSB0eXBlLiAgSW1wcm92ZSBlcnJvciByZWNvdmVyeS4KCjE5OTgtMDktMDMgIEJlbmphbWluIEtvc25payAgPGJrb3pAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogRGVjbGFyZSB3YXJuX25vbnRlbXBsYXRlX2ZyaWVuZC4KCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0LgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1Xbm9uLXRlbXBsYXRlLWZyaWVuZC4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFVzZSB0byB0b2dnbGUgbm9uLXRlbXBsYXRlIGZ1bmN0aW9uIHdhcm5pbmcuCgoxOTk4LTA5LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IERvbid0IHJlc29sdmUgQ09OU1RfREVDTHMgdG8gdGhlaXIKCWNvcnJlc3BvbmRpbmcgSU5URUdFUl9DU1RzIHdoZW4gcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IFR3ZWFrIGFjY29yZGluZ2x5LgoKMTk5OC0wOS0wMyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKICAgICAgICAqIGRlY2wuYyAocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBBZGQgd2FybmluZyBoZXJlLgogICAgICAgIChwdXNoZGVjbCk6IFR3ZWFrLgoKMTk5OC0wOS0wMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90b19yZWFsKTogVGlkeS4KCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlX3JlY3Vyc2l2ZSk6IFNpbXBsaWZ5LgoJKGdldF9iYXNlX2Rpc3RhbmNlKTogTGlrZXdpc2UuCgoJKiBwdC5jICh1bmlmeSk6IE9ubHkgc3BlY2lhbC1jYXNlIElOVEVHRVJfVFlQRSBpZiBpdCB1c2VzIHRlbXBsYXRlCglwYXJtcy4KCldlZCBTZXAgMDIgMDk6MjU6MjkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogIENhbGwgSEFORExFX1BSQUdNQSBiZWZvcmUKCUhBTkRMRV9TWVNWX1BSQUdNQSBpZiBib3RoIGFyZSBkZWZpbmVkLiAgR2VuZXJhdGUgd2FybmluZyBtZXNzYWdlcwoJaWYgdW5rbm93biBwcmFnbWFzIGFyZSBlbmNvdW50ZXJlZC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBJbnRlcnByZXQgcmV0dXJuIGNvZGUgZnJvbQoJaGFuZGxlX3ByYWdtYV90b2tlbiAoKS4gIFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdGlvbiByYXRoZXIKCXRoYW4gbmV4dCB1bnByb2Nlc3NlZCBjaGFyYWN0ZXIuIAoJKHByYWdtYV9nZXRjKTogTmV3IGZ1bmN0aW9uOiByZXRyaWV2ZXMgY2hhcmFjdGVycyBmcm9tIHRoZQoJaW5wdXQgc3RyZWFtLiAgRGVmaW5lZCB3aGVuIEhBTkRMRV9QUkFHTUEgaXMgZGVmaW5lZC4KCShwcmFnbWFfdW5nZXRjKTogTmV3IGZ1bmN0aW9uOiByZXBsYWNlcyBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUKCWlucHV0IHN0cmVhbS4gIERlZmluZWQgd2hlbiBIQU5ETEVfUFJBR01BIGlzIGRlZmluZWQuCgoxOTk4LTA5LTAxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChvdXRwdXRfdnRhYmxlX2luaGVyaXQpOiBVc2UgJWNESUdJVCBpbiB0aGUgb3BlcmFuZHMuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeV9yZWYpOiBMaWtld2lzZS4KCjE5OTgtMDktMDEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKERFQ0xfRlJJRU5EX1BTRVVET19URU1QTEFURV9JTlNUQU5USUFUSU9OKTogTmV3IG1hY3JvLgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IFVzZSBpdC4KCjE5OTgtMDktMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFsc28gZG8gaW1wbGljaXQgdHlwZW5hbWUgdGhpbmcgZm9yCglhcnRpZmljaWFsIFRZUEVfREVDTHMuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHMsIGxvb2t1cF9maWVsZCk6IEFkanVzdCBmb3IgaW1wbGljaXQgdHlwZW5hbWUga2x1ZGdlLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IFVzZSBlbnRlcl9zY29wZV9vZi4KCShlbnRlcl9zY29wZV9vZik6IEV4dHJhY3QgdHlwZSBmcm9tIGltcGxpY2l0IHR5cGVuYW1lLgoJKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCSogbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IEhhbmRsZSBpbXBsaWNpdCB0eXBlbmFtZSB3aGVuIGNoZWNraW5nCglmb3IgU0VMRk5BTUUuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ19zdHJpY3RfcHJvdG90eXBlLgoJKiBsZXguYyAoZG9fc2NvcGVkX2lkLCBkb19pZGVudGlmaWVyKTogRG9uJ3QgaW1wbGljaXRseV9kZWNsYXJlIGlmCgktZnN0cmljdC1wcm90b3R5cGUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJZiAtZntubywtfXN0cmljdC1wcm90b3R5cGUgd2Fzbid0CglzcGVjaWZpZWQsIHNldCBpdCB0byB0aGUgdmFsdWUgb2YgcGVkYW50aWMuCgoxOTk4LTA5LTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jKTogSGFuZGxlIHRlbXBsYXRlLWlkIGV4cHJlc3Npb25zIGFzIGFyZ3VtZW50cy4KCjE5OTgtMDgtMzEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9lbnVtKTogSGFuZGxlIG1lbWJlciBlbnVtcyBvZiBjbGFzc2VzIGRlY2xhcmVkIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgkKCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBTdHJpcCBhdHRyaWJ1dHJlcyBiZWZvcmUgY2FsbGluZwoJZ3Jva3R5cGVuYW1lLiAKCQoxOTk4LTA4LTMxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmgsIGRlY2wyLmM6IFJlbW92ZSBzdXBwb3J0IGZvciAtZmFsbC12aXJ0dWFsLAoJLWZlbnVtLWludC1lcXVpdmFsZW5jZSBhbmQgLWZuby1ub25udWxsLW9iamVjdHMuCgkqIGNsYXNzLmMgKGNoZWNrX2Zvcl9vdmVycmlkZSk6IFJlbW92ZSBzdXBwb3J0IGZvciAtZmFsbC12aXJ0dWFsLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IFJlbW92ZSBzdXBwb3J0IGZvciAtZmVudW0taW50LWVxdWl2YWxlbmNlLgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF92ZmllbGRfcmVmKTogUmVtb3ZlIHN1cHBvcnQgZm9yIC1mbm8tbm9ubnVsbC1vYmplY3RzLgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogTGlrZXdpc2UuCgpTdW4gQXVnIDMwIDIyOjE2OjMxIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIE1ha2VmaWxlLmluIChJTlRFUkZBQ0UpOiBOZXcsIHNldCB0byAxLgoKMTk5OC0wOC0zMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IFVzZSBDUF9ERUNMX0NPTlRFWFQsIG5vdCBERUNMX0NPTlRFWFQsIHdoZW4KCWNvbXBhcmluZyB3aXRoIGdsb2JhbF9uYW1lc3BhY2UuCgkoZHVtcF9hZ2dyX3R5cGUpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IElzc3VlIGVycm9yIG9uIGRlY2xhcmF0aW9uIG9mIGZyaWVuZAoJdGVtcGxhdGVzIHdpdGggZXhwbGljaXQgdGVtcGxhdGUgYXJndW1lbnRzLgoKCSogcHQuYyAoY29udmVydF90ZW1wbGF0ZV9hcmd1bWVudCk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0Cglmcm9tLi4uCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogSGVyZS4KCSh0c3Vic3QpOiBBdHRlbXB0IGJldHRlciBlcnJvci1yZWNvdmVyeS4KCjE5OTgtMDgtMjggIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGRlY2xfdGVtcGxhdGVfcGFybV9wKTogQWRkIGNoZWNrcyBmb3IKCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgoxOTk4LTA4LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBGaXggdGhpbmtvIGluIHByZXZpb3VzIGNoYW5nZS4KCjE5OTgtMDgtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChkZnNfc2VhcmNoLCBiaW5mb19mb3JfdnRhYmxlLCBkZnNfYmZ2X2hlbHBlcik6IE5ldyBmbnMuCgkqIGRlY2wyLmMgKG91dHB1dF92dGFibGVfaW5oZXJpdCk6IENhbGwgYmluZm9fZm9yX3Z0YWJsZS4KCjE5OTgtMDgtMjggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJQWRkIHN1cHBvcnQgZm9yIGRpc2NhcmRpbmcgdW51c2VkIHZpcnR1YWwgZnVuY3Rpb25zLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mdnRhYmxlLWdjLgoJKiBjcC10cmVlLmg6IEFkZCBmbGFnX3Z0YWJsZV9nYy4KCSogZGVjbDIuYyAob3V0cHV0X3Z0YWJsZV9pbmhlcml0KTogTmV3IGZuLgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IENhbGwgaXQuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeV9yZWYpOiBOZXcgZm4uCgkoYnVpbGRfdnRibF9yZWYpOiBDYWxsIGl0LgoKMTk5OC0wOC0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfZW51bWVyYXRvcik6IFRha2UgdGhlIGVudW1lcmF0aW9uIHR5cGUgYXMgYQoJcGFyYW10ZXIuIAoJKiBkZWNsLmMgKGZpbmlzaF9lbnVtKTogRG9uJ3Qgc2V0IHRoZSBUUkVFX1RZUEUgZm9yIHRoZQoJZW51bWVyYXRpb24gY29uc3RhbnQgdmFsdWVzIGlmIHdlJ3JlIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbHMuCglEb24ndCBzZXQgdGhlIHR5cGUgZm9yIHRoZSBDT05TVF9ERUNMcyBlaXRoZXI7IHRoYXQncyBkb25lIGluCglidWlsZF9lbnVtZXJhdG9yLgoJKGJ1aWxkX2VudW1lcmF0b3IpOiBUYWtlIHRoZSBlbnVtZXJhdGlvbiB0eXBlIGFzIGEKCXBhcmFtZXRlci4gCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgcmVzb2x2ZSBlbnVtZXJhdGlvbiBjb25zdGFudHMgd2hpbGUKCXByb2Nlc3NpbmcgdGVtcGxhdGUgZGVjbGFyYXRpb25zLCBldmVuIGlmIHRoZXkgaGFwcGVuIHRvIGJlCglURU1QTEFURV9QQVJNX0lOREVYcy4gCgoJKiBwYXJzZS55IChjdXJyZW50X2VudW1fdHlwZSk6IE5ldyB2YXJpYWJsZS4KCShwcmltYXJ5KTogRG9uJ3QgYWxsb3cgc3RhdGVtZW50LWV4cHJlc3Npb24gaW4gbG9jYWwgY2xhc3NlcyBqdXN0CglhcyB3ZSBkb24ndCBpbiBnbG9iYWwgY2xhc3Nlcy4KCShzdHJ1Y3RzcCk6IFVzZSBjdXJyZW50X2VudW1fdHlwZS4KCShlbnVtX2xpc3QpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBEb24ndCBjaGVjayBmb3IgTk9QX0VYUFJzIGludHJvZHVjZWQgYnkKCWZpbmlzaF9lbnVtOyB0aGV5IG5vIGxvbmdlciBvY2N1ci4KCQoJKiBjcC10cmVlLmggKGZpbmlzaF9iYXNlX3NwZWNpZmllcik6IE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueSAoYmFzZV9jbGFzcyk6IFVzZSBpdC4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9iYXNlX3NwZWNpZmllcik6IERlZmluZSBpdC4KCgkqIHBhcnNlLnkgKHN0cnVjdHNwKTogV2FybiBvbiB1c2Ugb2YgdHlwZW5hbWUgb3V0c2lkZSBvZiB0ZW1wbGF0ZQoJZGVjbGFyYXRpb25zLiAKCQoxOTk4LTA4LTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IFJlbW92ZSAjcHJhZ21hIHZ0YWJsZS4KCSogbGFuZy1vcHRpb25zLmg6IFJlbW92ZSArZSBvcHRpb25zLgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IERvbid0IGNoZWNrIHdyaXRlX3ZpcnR1YWxzLgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCwgZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGRmc19kZWJ1Z19tYXJrKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSwgZmluaXNoX3Z0YmxzLCBmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2hlY2sgZmxhZ19lbGlkZV9jb25zdHJ1Y3RvcnMuCgkqIGRlY2wyLmM6IGZsYWdfZWxpZGVfY29uc3RydWN0b3JzIGRlZmF1bHRzIHRvIDEuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFJlbW92ZSByZXR1cm5fbG9jIHBhcm0uCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogQWRqdXN0LgoKCSogc2VhcmNoLmM6IFRlYXIgb3V0IGFsbCBtaV9tYXRyaXggYW5kIG1lbW9pemUgY29kZS4KCShsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkcyk6IFVzZSBzY3JhdGNoX3RyZWVfY29ucy4KCSogbGFuZy1vcHRpb25zLmg6IFJlbW92ZSBkb2N1bWVudGF0aW9uIGZvciAtZmhhbmRsZS1leGNlcHRpb25zLAoJLWZtZW1vaXplLWxvb2t1cHMgYW5kIC1mc2F2ZS1tZW1vaXplZC4KCSogY3AtdHJlZS5oOiBMb3NlIG1pX21hdHJpeCBhbmQgbWVtb2l6ZSBzdXBwb3J0LgoJKiBkZWNsMi5jOiBJZ25vcmUgLWZtZW1vaXplLWxvb2t1cHMgYW5kIC1mc2F2ZS1tZW1vaXplZC4KCSogY2xhc3MuYzogTG9zZSBzdHJ1Y3QgY2xhc3NfbGV2ZWwuCgkocHVzaGNsYXNzLCBwb3BjbGFzcyk6IExvc2UgbWVtb2l6ZSBzdXBwb3J0LgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCglOZXZlciBjaGFuZ2UgQklORk9fSU5IRVJJVEFOQ0VfQ0hBSU4uCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBDaGFuZ2UgbW9kaWZpY2F0aW9uIG9mCglCSU5GT19JTkhFUklUQU5DRV9DSEFJTiB0byBhbiBhc3NlcnQuCgkqIHNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBMaWtld2lzZS4KCShnZXRfYmFzZV9kaXN0YW5jZSk6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBMaWtld2lzZS4KCShjb252ZXJ0X3BvaW50ZXJfdG9fc2luZ2xlX2xldmVsKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuICBMb3NlIHNldHRpbmcgVFJFRV9WSUFfKiBvbiBUUkVFX0xJU1RzLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzKTogRG9uJ3QgY2FsbCB1bnNoYXJlX2Jhc2VfYmluZm9zLgoJKHVuc2hhcmVfYmFzZV9iaW5mb3MpOiBEb24ndCBjYWxsIHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzLgoJKGxheW91dF9iYXNldHlwZXMpOiBDYWxsIHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzIGluc3RlYWQgb2YgCgl1bnNoYXJlX2Jhc2VfYmluZm9zLgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogQ2FsbCB1bnNoYXJlX2Jhc2VfYmluZm9zLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHJldmVyc2VfcGF0aCk6IFJlbW92ZSAnY29weScgcGFybTsgYWx3YXlzIG1ha2UgYQoJdGVtcG9yYXJ5IGNvcHkuCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBKdXN0IGNhbGwgaXQuCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IExpa2V3aXNlLiAgRG9uJ3QgcmUtcmV2ZXJzZS4KCjE5OTgtMDgtMjcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogVXNlIHJldmVyc2VfcGF0aC4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBNb3ZlIHdhcm5pbmdzIGZvciBpbmFjY2Vzc2libGUgYmFzZXMgdG8KCWxheW91dF9iYXNldHlwZXMuCgkobW9kaWZ5X29uZV92dGFibGUpOiBSZW1vdmUgY2hlY2sgb2YgVFJFRV9VU0VEIChiaW5mbykuCgkoZml4dXBfdnRhYmxlX2RlbHRhczEpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChCSU5GT19JTkhFUklUQU5DRV9DSEFJTik6IERvY3VtZW50IGhlcmUuCgkoeHJlZl90YWcpOiBSZW1vdmUgYmluZm9zIHBhcmFtZXRlci4KCShtYWtlX2JpbmZvKTogUmVtb3ZlIGNoYWluIHBhcmFtZXRlci4KCShyZXZlcnNlX3BhdGgpOiBBZGQgY29weSBwYXJhbWV0ZXIuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDaGFuZ2UgY2FsbHMgdG8geHJlZl90YWcuCgkoeHJlZl90YWcpOiBSZW1vdmUgYmluZm9zIHBhcmFtZXRlci4KCSh4cmVmX2Jhc2V0eXBlcyk6IENoYW5nZSBjYWxscyB0byBtYWtlX2JpbmZvLgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IENoYW5nZSBjYWxscyB0byB4cmVmX3RhZy4KCShoYW5kbGVfY2xhc3NfaGVhZCk6IExpa2V3aXNlLgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogTGlrZXdpc2UuCgkqIGxleC5jIChtYWtlX2xhbmdfdHlwZSk6IENoYW5nZSBjYWxscyB0byBtYWtlX2JpbmZvLgoJKiBwYXJzZS55IChzdHJ1Y3RzcCk6IENoYW5nZSBjYWxscyB0byB4cmVmX3RhZy4KCShuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IExpa2V3aXNlLgoJKG5hbWVkX2NsYXNzX2hlYWQpOiBMaWtld2lzZS4KCSogcnR0aS5jIChpbml0X3J0dGlfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBDaGFuZ2UgY2FsbHMgdG8gcmV2ZXJzZV9wYXRoLgoJKGRmc19nZXRfdmJhc2VfdHlwZXMpOiBDaGFuZ2UgY2FsbHMgdG8gbWFrZV9iaW5mby4KCShnZXRfdmJhc2VfdHlwZXMpOiBSZW1vdmUgZGVhZCBjb2RlLgoJKiB0cmVlLmMgKHVuc2hhcmVfYmFzZV9iaW5mb3MpOiBDaGFuZ2UgY2FsbHMgdG8gbWFrZV9iaW5mby4KCShsYXlvdXRfYmFzZXR5cGVzKTogV2FybiBoZXJlIGFib3V0IGluYWNjZXNzaWJsZSBiYXNlcy4KCShtYWtlX2JpbmZvKTogUmVtb3ZlIGNoYWluIHBhcmFtZXRlci4KCShyZXZlcnNlX3BhdGgpOiBBZGQgY29weSBwYXJhbWV0ZXIuCgkKMTk5OC0wOC0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYzogI2lmIDAgY29tcGxldGVfdHlwZV9wLgoJKiBpbml0LmMgKGJ1aWxkX2phdmFfY2xhc3NfcmVmLCBidWlsZF9uZXdfMSk6IFJlbW92ZSB1bnVzZWQgbG9jYWxzLgoJKiBtZXRob2QuYyAocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IExpa2V3aXNlLgoKCVN0b3Agc2hhcmluZyBiaW5mb3MgZm9yIGluZGlyZWN0IHZpcnR1YWwgYmFzZXMuCgkqIHRyZWUuYyAocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBVbnNoYXJlIHZiYXNlcywgdG9vLgoJKGxheW91dF9iYXNldHlwZXMpOiBMaWtld2lzZS4KCSh1bnNoYXJlX2Jhc2VfYmluZm9zKTogQ29weSB2YmFzZXMsIHRvby4KCSogY3AtdHJlZS5oIChCSU5GT19WSUFfUFVCTElDLCBCSU5GT19CQVNFSU5JVF9NQVJLRUQsCglCSU5GT19WQkFTRV9JTklUX01BUktFRCk6IFJlbW92ZSBvYnNvbGV0ZSBtYWNyb3MuCgkoQklORk9fUFVTSERFQ0xTX01BUktFRCwgU0VUX0JJTkZPX1BVU0hERUNMU19NQVJLRUQsCglDTEVBUl9CSU5GT19QVVNIREVDTFNfTUFSS0VEKTogTmV3IG1hY3Jvcy4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCwgbG9va3VwX2ZuZmllbGRzLCBsb29rdXBfbWVtYmVyKTogUmVtb3ZlCglyZWZlcmVuY2UgdG8gQklORk9fVklBX1BVQkxJQy4KCShtYXJrZWRfcHVzaGRlY2xzX3AsIHVubWFya2VkX3B1c2hkZWNsc19wKTogTmV3IGZucy4KCShwdXNoX2NsYXNzX2RlY2xzKTogVXNlIHRoZW0uCgkoZGZzX3B1c2hkZWNscyk6IFVzZSBTRVRfQklORk9fUFVTSERFQ0xTX01BUktFRC4KCShkZnNfY29tcHJlc3NfZGVjbHMpOiBVc2UgQ0xFQVJfQklORk9fUFVTSERFQ0xTX01BUktFRC4KCjE5OTgtMDgtMjcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBTZXQgREVDTF9DT05URVhUIGZvciB0aGUKCUNPTlNUX0RFQ0xzLiAKCjE5OTgtMDgtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9lbnVtKTogQ2hhbmdlIHByb3RvdHlwZS4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IFVzZSBUWVBFX1ZBTFVFUywgcmF0aGVyIHRoYW4gdGFraW5nIGEKCVZBTFVFUyBwYXJhbWV0ZXIuICBEb24ndCB0cnkgdG8gY29tcHV0ZSBtaW5zL21heHMgaWYKCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4gCgkqIHBhcnNlLnkgKHN0cnVjdHNwKTogVXNlIG5ldyBjYWxsaW5nIHNlcXVlbmNlIGZvciBmaW5pc2hfZW51bS4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBMaWtld2lzZS4gIFRha2UgdGhlIG5ldyB0eXBlIGFzIGlucHV0LiAgCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuICBUd2Vhay4KCVJlZ2lzdGVyIGVudW1zIG9uIGluc3RhbnRpYXRpb24gbGlzdCBiZWZvcmUgc3Vic3RpdHV0aW5nCgllbnVtZXJhdGlvbiBjb25zdGFudHMuCgkodHN1YnN0X2RlY2wpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KCShyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgb2JsaXRlcmF0ZSB0aGUKCURFQ0xfVEVNUExBVEVfSU5GTyBmb3IgYSB0ZW1wbGF0ZSBpZiB3ZSdyZSBub3QgcmVwbGFjaW5nIGl0IHdpdGgKCWFueXRoaW5nLiAKCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRml4IHR5cG8gaW4gY29tbWVudC4KCldlZCBBdWcgMjYgMTA6NTQ6NTEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXJyZm4uYzogUmVtb3ZlIHN0ZGFyZy5oL3ZhcmFyZ3MuaC4KCSogdHJlZS5jOiBMaWtld2lzZS4KCjE5OTgtMDgtMjUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfY29weSk6IE9ubHkgZG8gdHlwZW5hbWUgb3ZlcmxvYWRpbmcgb24gYW4KCUlERU5USUZJRVJfTk9ERSB0aGF0IGhhcHBlbnMgdG8gbG9vayBsaWtlIGEgdHlwZW5hbWUgaWYgaXQgYWN0dWFsbHkKCWhhcyBhIHR5cGUgZm9yIHVzIHRvIHVzZS4KCjE5OTgtMDgtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wX2N2X3RhcmdldF90eXBlcyk6IFNwbGl0IG91dC4uLgoJKGNvbXBfdGFyZ2V0X3R5cGVzKTogRnJvbSBoZXJlLiAgRG9uJ3QgYWxsb3cgY3YtcXVhbCBjaGFuZ2VzIHVuZGVyCglhIHBvaW50ZXIgaWYgbnB0cnMgPT0gMC4gIEZpeCBPRkZTRVRfVFlQRSBoYW5kbGluZy4KCShidWlsZF9wdHJtZW1mdW5jKTogUGFzcyAxIHRvIG5wdHJzLgoJKiBjdnQuYyAocGVyZm9ybV9xdWFsaWZpY2F0aW9uX2NvbnZlcnNpb25zKTogVXNlIGNvbXBfcHRyX3R0eXBlcy4KCjE5OTgtMDgtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzZWFyY2guYyAoZGVwZW5kZW50X2Jhc2VfcCk6IERvbid0IGNvbXBhcmUgYSBiaW5mbyB0bwoJY3VycmVudF9jbGFzc190eXBlOyB1c2UgdGhlIFRSRUVfVFlQRSBvZiB0aGUgYmluZm8gaW5zdGVhZC4KCgkqIGNwLXRyZWUuaCAoQ0xBU1NfVFlQRV9QKTogUmV2aXNlIGRlZmluaXRpb24uCgoxOTk4LTA4LTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbXBsYWluIGFib3V0IGRpZmZlcmVudAoJZXhjZXB0aW9ucyBmcm9tIGFuIGludGVybmFsIGRlY2wgZXZlbiBpZiBwZWRhbnRpYy4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQ29udmVydGluZyBmcm9tIHBtIG9mIHZiYXNlCgl0byBkZXJpdmVkIGlzIGFuIGVycm9yLCBub3QgYSBzb3JyeS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogVXNlIGNvbnZlcnRfcG9pbnRlcl90b19yZWFsIGZvciAndGhpcycuCgkqIGNsYXNzLmMgKGZpeGVkX3R5cGVfb3JfbnVsbCk6IFJlbmFtZSBmcm9tCglyZXNvbHZlc190b19maXhlZF90eXBlX3AuICBSZXR1cm4gdGhlIGR5bmFtaWMgdHlwZSBvZiB0aGUKCWV4cHJlc3Npb24sIGlmIGZpeGVkLCBvciBudWxsLgoJKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IFVzZSBpdC4gIFJldHVybiAwIGlmIHRoZSBkeW5hbWljIHR5cGUKCWRvZXMgbm90IG1hdGNoIHRoZSBzdGF0aWMgdHlwZS4KCShidWlsZF92YmFzZV9wYXRoKTogUmVuYW1lICdhbGlhc190aGlzJyB0byAnbm9ubnVsbCcuICBVc2UKCXJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCBhZ2Fpbi4KCjE5OTgtMDgtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IE1vdmUgc3BlY2lhbCBjYXNlIGNvZGUgZm9yIGRlYWxpbmcgd2l0aAoJdHJpY2t5IGZyaWVuZCB0ZW1wbGF0ZXMgaGVyZSBmcm9tIC4uLgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogSGVyZS4KCjE5OTgtMDgtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IFJlbW92ZSByZWR1bmRhbnQgbGlua2FnZSBjaGVjay4KCjE5OTgtMDgtMjQgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEhhbmRsZSB0aGUgY2FzZSB0aGF0IHZhbHR5cGUKCWlzIHdpZGVyIHRoYW4gdGhlIGZ1bmN0aW9ucyByZXR1cm4gdHlwZS4KCjE5OTgtMDgtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKENMQVNTX1RZUEVfUCk6IE5ldyBtYWNyby4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBpdCBpbnN0ZWFkIG9mIElTX0FHR1JfVFlQRS4KCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCgkKMTk5OC0wOC0yNCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBEZWNsYXJlLgoJKiBwdC5jIChkZWNsX3RlbXBsYXRlX3Bhcm1fcCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChwdXNoZGVjbCk6IENoZWNrIGRlY2xzIGZvciByZWRlY2xhcmluZyB0ZW1wbGF0ZSBwYXJtcy4KCSh4cmVmX3RhZyk6IE1ha2UgcmVkZWNsYXJhdGlvbiBhbiBlcnJvciwgcHJpbnQgZGVjbC4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogQ2hlY2sgZmllbGRfZGVjbHMgZm9yIHJlZGVjbGFyYXRpb24gYXMgd2VsbC4KCjE5OTgtMDgtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBGaXggdXAgdGhlIHR5cGUgb2Ygc3RyaW5nIGNvbnN0YW50cy4KCjE5OTgtMDgtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBNb3ZlIGNoZWNrIGZvciBvZGQgdXNlcwoJb2YgTlVMTCB0byBhdm9pZCBkdXBsaWNhdGUgd2FybmluZ3MuCgoxOTk4LTA4LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGx2YWx1ZV90eXBlKTogRml4IGZvciBhcnJheXMuCgkqIHR5cGVjay5jIChzdHJpbmdfY29udl9wKTogTmV3IGZuLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBVc2UgaXQuCgkoYnVpbGRfdW5hcnlfb3ApOiBVc2UgbHZhbHVlX3R5cGUuCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbiwgY29udmVydF9saWtlKTogVXNlIHN0cmluZ19jb252X3AuCgkoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFVzZSBsdmFsdWVfdHlwZS4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IElnbm9yZSAtdHJhZGl0aW9uYWwuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBmbGFnX3dyaXRhYmxlX3N0cmluZ3MgaW5oaWJpdHMKCWZsYWdfY29uc3Rfc3RyaW5ncy4KCjE5OTgtMDgtMjQgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oIChsYW5nX29wdGlvbnMpOiBBZGQgZmNvbnN0LXN0cmluZ3MgdG8gdGhlIGxpc3QKCW9mIHZhbGlkIG9wdGlvbnMuCgkqIGRlY2wyLmMgKGxhbmdfZl9vcHRpb25zLCBsYW5nX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KCjE5OTgtMDgtMjQgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgogICAgICAgICogbGV4LmMgKHJlYWxfeXlsZXgpOiBEb24ndCB3YXJuIGFib3V0IGxvbmcgbG9uZyBjb25zdGFudHMgaWYKICAgICAgICB3ZSdyZSBhbGxvd2luZyBsb25nIGxvbmcuCgoxOTk4LTA4LTI0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IFVzZSBJREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRSBpbnN0ZWFkIG9mCglhY2Nlc3NpbmcgYmluZGluZ3MgZGlyZWN0bHkuCgoJKiBzZWFyY2guYyAobXlfdHJlZV9jb25zKTogUmVpbXBsZW1lbnQuCgoJKiBsYW5nLXNwZWNzLmg6IFJlbW92ZSBfX0hPTk9SX1NURC4KCSogaW5jL2V4Y2VwdGlvbiwgaW5jL25ldywgaW5jL25ldy5oLCBpbmMvdHlwZWluZm86IExpa2V3aXNlLgoKMTk5OC0wOC0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDb21wbGFpbiBhYm91dCBpbi1jbGFzcyBpbml0aWFsaXphdGlvbgoJb2YgYWdncmVnYXRlcyBhbmQvb3IgcmVmZXJlbmNlcy4KCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogQ2xlYXIgSVNfQUdHUl9UWVBFIGZvcgoJVEVNUExBVEVfVFlQRV9QQVJNcy4gCgoJKiBkZWNsMi5jIChncm9rX2FycmF5X2RlY2wpOiBBZGQgY29tbWVudC4KCShtYXJrX3VzZWQpOiBEb24ndCBpbnN0YW50aWF0ZSBhbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uLgoJKiBmcmllbmQuYyAobWFrZV9mcmllbmRfY2xhc3MpOiBSZW1vdmUgYm9ndXMgY29tbWVudC4gIEZpeCBjaGVjawoJZm9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zLgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IERvbid0CglTRVRfREVDTF9FWFBMSUNJVF9JTlNUQU5USUFUSU9OIGhlcmUuCgkobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IE9yIGhlcmUuCgkoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogRG8gaXQgaGVyZSwgaW5zdGVhZC4gIEFkZCBjaGVja3MgZm9yCglkdXBsaWNhdGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMsIGV0Yy4gIFRpZHkuCgkoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfZGVjbCk6IEltcHJvdmUgY29tbWVudHMuICBDb21wbGFpbiBhYm91dCBleHBsaWNpdAoJaW5zdGFudGlhdGlvbnMgd2hlcmUgbm8gZGVmaW5pdGlvbiBpcyBhdmFpbGFibGUuCgkKCSogY3AtdHJlZS5oIChhbnNpX251bGxfbm9kZSk6IFJlbW92ZS4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBXYXJuIGFib3V0IGNvbnZlcnRpbmcgTlVMTCB0byBhbgoJYXJpdGhtZXRpYyB0eXBlLgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBMaWtld2lzZS4gIFVzZQoJbnVsbF9wdHJfY3N0X3AgaW5zdGVhZCBvZiBleHBhbmRpbmcgaXQgaW5saW5lLgoJKiBkZWNsLmMgKGFuc2lfbnVsbF9ub2RlKTogUmVtb3ZlLiAKCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1ha2UgbnVsbF9ub2RlIGFsd2F5cyBoYXZlIGludGVncmFsIHR5cGUuCgkqIGV4Y2VwdC5jIChidWlsZF90aHJvdyk6IFdhcm4gYWJvdXQgY29udmVydGluZyBOVUxMIHRvIGFuCglhcml0aG1ldGljIHR5cGUuCgkqIGxleC5jIChpbml0X3BhcnNlKTogUmVtb3ZlIGhhbmRsaW5nIG9mIGFuc2lfbnVsbF9ub2RlLgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBEb24ndCBjb252ZXJ0IE5VTEwgdG8gdm9pZCogdHlwZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBGaXggTlVMTCB3YXJuaW5ncy4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogV2FybiBhYm91dCBjb252ZXJ0aW5nIE5VTEwgdG8gYW4KCWFyaXRobWV0aWMgdHlwZS4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJCjE5OTgtMDgtMjAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoc2VhcmNoX3RyZWUsIG5vX2xpbmthZ2VfaGVscGVyLCBub19saW5rYWdlX2NoZWNrKTogTmV3IGZuLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBVc2Ugbm9fbGlua2FnZV9jaGVjay4KCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IExpa2V3aXNlLgoJKGdyb2tmbmRlY2wpOiBMaWtld2lzZS4gIE1lbWJlcnMgb2YgYW5vbnltb3VzIHR5cGVzIGhhdmUgbm8gbGlua2FnZS4KCgkqIG1ldGhvZC5jIChwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBSZW1vdmUgdXNlbGVzcyBjb2RlLgoKMTk5OC0wOC0yMCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJSGFuZGxlIG5ldydpbmcgb2YgSmF2YSBjbGFzc2VzLgoJKiBpbml0LmMgKGJ1aWxkX2NsYXNzX2NsYXNzcmVmKTogIE5ldyBmdW5jdGlvbi4KCShidWlsZF9uZXdfMSk6ICBJZiB0eXBlIGlzIFRZUEVfRk9SX0pBVkE6ICBDYWxsIF9Kdl9BbGxvY09iamVjdDsKCWNvbnN0cnVjdG9yIGRvZXMgbm90IHJldHVybiB0aGlzOyAgZG9uJ3QgbmVlZCB0byBleGNlcHRpb24tcHJvdGVjdC4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6ICBDb3B5IFRZUEVfRk9SX0pBVkEgZmxhZy4KCSogZGVjbDIuYyAoYWNjZXB0YWJsZV9qYXZhX3R5cGUpOiAgSGFuZGxlIHRlbXBsYXRlLWRlcml2ZWQgdHlwZXMuCgoxOTk4LTA4LTIwICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogIFN1cHByZXNzIHZ0YWJsZXMgZm9yIEphdmEgY2xhc3Nlcy4KCjE5OTgtMDgtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEFsd2F5cyBtZXJnZSB0aGUgb2xkIGFuZCBuZXcgcGF0dGVybnMKCWZvciB0ZW1wbGF0ZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIG5ldyBvbmUgaGFzCglERUNMX0lOSVRJQUwuICBEb24ndCB0aHJvdyBhd2F5IHNwZWNpYWxpemF0aW9ucy4gIE1lcmdlCglERUNMX1NBVkVEX1RSRUUuCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogVXNlIHRoZSByaWdodCBwYXR0ZXJuIHdoZW4gY2FsY3VsYXRpbmcgdGhlCgljb21wbGV0ZSBhcmdzIGZvciBhIG5ldyB0ZW1wbGF0ZSBpbnN0YW5jZS4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogRGVhbCB3aXRoIHRyaWNreSBmcmllbmQgdGVtcGxhdGUKCWNhc2UuCgkoaW5zdGFudGlhdGVfZGVjbCk6IExpa2V3aXNlLgoJClRodSBBdWcgMjAgMDk6MDk6NDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaW5pdC5jIChidWlsZF9idWlsdGluX2RlbGV0ZV9jYWxsKTogQWRkIG1pc3NpbmcgYXNzZW1ibGVfZXh0ZXJuYWwKCWNhbGwuCgoxOTk4LTA4LTIwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChub3R5cGVfdW5xdWFsaWZpZWRfaWQpOiBBbHNvIGFjY2VwdCB+QTxpbnQ+LgoKMTk5OC0wOC0xOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogV2FybiBvbiB1c2Ugb2YgTlVMTCBpbgoJYXJpdGhtZXRpYy4KCSogZXhjZXB0LmMgKGJ1aWxkX3Rocm93KTogV2FybiB3aGVuIE5VTEwgaXMgdGhyb3duLCBldmVuIHdpdGgKCS1hbnNpLiAgVXNlIGFuc2lfbnVsbF9ub2RlLCByYXRoZXIgdGhhbiBpbnRlZ2VyX3plcm9fbm9kZSwgaW4gdGhlCgl0aHJvd24gZXhwcmVzc2lvbi4KCQoJKiBjcC10cmVlLmggKGFuc2lfbnVsbF9ub2RlKTogTmV3IHZhcmlhYmxlLgoJKiBkZWNsLmMgKGFuc2lfbnVsbF9ub2RlKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBpdHMgdHlwZS4KCSogbGV4LmMgKGluaXRfcGFyc2UpOiBJbml0aWFsaXplIGl0cyB2YWx1ZS4gIFVzZSBhbnNpX251bGxfbm9kZQoJZm9yIG51bGxfbm9kZSBpbiBub24tQU5TSSBtb2RlLgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IFVzZSBhbnNpX251bGxfbm9kZSBpbgoJcGxhY2Ugb2YgbnVsbF9ub2RlIHRvIGF2b2lkIHNwdXJpb3VzIGVycm9ycy4KCjE5OTgtMDgtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGVudGVyX3Njb3BlX29mKTogTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS55IChjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IFVzZSBpdC4KCSogc2VtYW50aWNzLmMgKGVudGVyX3Njb3BlX29mKTogTmV3IGZ1bmN0aW9uLgoKMTk5OC0wOC0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBObywgaGVyZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDYXRjaCBwYXJtIHdpdGggcG9pbnRlciB0byBhcnJheSBvZgoJdW5rbm93biBib3VuZCBoZXJlLi4uCgkqIG1ldGhvZC5jIChwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiAuLi5ub3QgaGVyZS4KCgkqIGd4eGludC50ZXhpOiBSZW1vdmUgb2Jzb2xldGUgZG9jdW1lbnRhdGlvbiBvZiBvdmVybG9hZGluZyBjb2RlLgoKCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IEFsc28gc2V0IFRZUEVfU0laRV9VTklULgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBMaWtld2lzZS4KCgkqIHRyZWUuYyAobHZhbHVlX3R5cGUpOiBGaXggZm9yIGFycmF5cy4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogVXNlIGx2YWx1ZV90eXBlLgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBJZ25vcmUgLXRyYWRpdGlvbmFsLgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogRG9uJ3QgbWVzcyB3aXRoIGVycm9yX21hcmtfbm9kZS4KCSogbGV4LmMgKGRvX3Njb3BlZF9pZCk6IFVzZSBjcF9lcnJvci4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuKTogRG9uJ3QgbWVzcyB3aXRoIHRoZSBjb250ZXh0IGZvciBub3cuCgoxOTk4LTA4LTE3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxsb3cgYW5vbnltb3VzIHR5cGVzIHRvIGJlIGN2LXF1YWxpZmllZC4KCk1vbiBBdWcgMTcgMTA6NDA6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3AtdHJlZS5oIChzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZSk6IFByb3ZpZGUgcHJvdG90eXBlLgoKCSogZGVjbDIuYyAoZG9fbmFtZXNwYWNlX2FsaWFzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYGJpbmRpbmcnCglhbmQgYG9sZCcuCgpGcmkgQXVnIDE0IDE2OjQyOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogUmVuYW1lIEJCSVNPTiB0byBCSVNPTiBzbyB0aGF0IGl0IGNhbiBiZSBwcm9wZXJseQoJaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBtYWtlZmlsZS4KCjE5OTgtMDgtMTMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZpbml0LXByaW9yaXR5LgoJKiBkZWNsMi5jOiBMaWtld2lzZS4gIENoZWNrIGZsYWdfaW5pdF9wcmlvcml0eSBpbnN0ZWFkIG9mCglVU0VfSU5JVF9QUklPUklUWS4KCgkqIGRlY2wyLmMgKHNldHVwX2luaXRwKTogTmV3IGZuLgoJKHN0YXJ0X29iamVjdHMsIGZpbmlzaF9vYmplY3RzLCBkb19jdG9ycyk6IEhhbmRsZSBpbml0X3ByaW9yaXR5LgoJKGRvX2R0b3JzLCBmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoKMTk5OC0wOC0xMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIdXNoIHdhcm5pbmcuCgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IEFsc28gc2V0IERFQ0xfSUdOT1JFRF9QLgoKMTk5OC0wOC0xMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBEb24ndCBhYm9ydCB3aGVuIGluc3RhbnRpYXRpbmcgYQoJc3ludGhlc2l6ZWQgbWV0aG9kLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IElzc3VlIGVycm9ycyBvbiBuYW1lc3BhY2UgcXVhbGlmaWVkCglkZWNsYXJhdG9ycyBpbiBwYXJhbWV0ZXIgbGlzdHMgb3IgaW4gY2xhc3Mgc2NvcGUuCgoxOTk4LTA4LTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBhYm9ydCBvbiBib2d1cwoJZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuCgoxOTk4LTA4LTA3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogdHlwZWNrLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZSk6IFVzZSBjb21wbGV0ZV90eXBlX29yX2Vsc2UuCgkoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogQWx3YXlzIHJldHVybiBOVUxMX1RSRUUgb24gZmFpbHVyZSwgYXMKCWRvY3VtZW50ZWQuCgoJKiBwdC5jICh0c3Vic3RfYWdncl90eXBlKTogUHJvdG90eXBlLgoJKHRzdWJzdF9kZWNsKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSB0c3Vic3QuICBTZXQKCWlucHV0X2ZpbGVuYW1lIGFuZCBsaW5lbm8gYXMgYXBwcm9wcmlhdGUuCgkocG9wX3RpbnN0X2xldmVsKTogUmVzdG9yZSB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgc2F2ZWQgaW4KCXB1c2hfdGluc3RfbGV2ZWwuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBTZXQgaW5wdXRfZmlsZW5hbWUgYW5kIGxpbmVubyBhcwoJYXBwcm9wcmlhdGUuCgkodHN1YnN0KTogTW92ZSBfREVDTCBwcm9jZXNzaW5nIHRvIHRzdWJzdF9kZWNsLiAgTWFrZSBzdXJlIHRoZQoJY29udGV4dCBmb3IgYSBUWVBFTkFNRV9UWVBFIGlzIGNvbXBsZXRlLgoKCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogSXNzdWUgZXJyb3JzIG9uIGJpdGZpZWxkcyBkZWNsYXJlZCB3aXRoCglmdW5jdGlvbiB0eXBlLgoJKGRvX2R0b3JzKTogQXMgaW4gZG9fY3RvcnMsIHByZXRlbmQgdG8gYmUgYSBtZW1iZXIgb2YgdGhlIHNhbWUKCWNsYXNzIGFzIGEgc3RhdGljIGRhdGEgbWVtYmVyIHdoaWxlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGl0cwoJZGVzdHJ1Y3Rvci4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBIYW5kbGUgTlVMTCBwb2ludGVyCgljb252ZXJzaW9ucywgZXZlbiBpbiBjb21wbGV4IHZpcnR1YWwgYmFzZSBjbGFzcyBoaWVyYXJjaGllcy4KCjE5OTgtMDgtMDYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKEVOVU1fVEVNUExBVEVfSU5GTyk6IE5ldyBtYWNyby4KCShUWVBFX1RFTVBMQVRFX0lORk8pOiBMaWtld2lzZS4KCShTRVRfVFlQRV9URU1QTEFURV9JTkZPKTogTGlrZXdpc2UuCgkoRU5VTV9USV9URU1QTEFURSk6IExpa2V3aXNlLgoJKEVOVU1fVElfQVJHUyk6IExpa2V3aXNlLgoJKGxvb2t1cF9uZXN0ZWRfdHlwZV9ieV9uYW1lKTogUmVtb3ZlLgoJKiBkZWNsLmMgKG1heWJlX3Byb2Nlc3NfdGVtcGxhdGVfdHlwZV9kZWNsYXJhdGlvbik6IEhhbmRsZSBlbnVtcy4KCShzdGFydF9lbnVtKTogRG9uJ3QgY2hlY2sgZm9yIHByaW1hcnktdGVtcGxhdGUgZW51bSBkZWNsYXJhdGlvbnMKCWhlcmUuIAoJKGZpbmlzaF9lbnVtKTogQ2xlYW4gdXAsIGRvY3VtZW50LiAgTWFrZSBzdXJlIHRlbXBsYXRlIGVudW0KCWNvbnN0YW50cyBnZXQgdGhlIGNvcnJlY3QgdHlwZS4KCShidWlsZF9lbnVtZXJhdG9yKTogQ29weSBpbml0aWFsaXplcnMgZm9yIHRlbXBsYXRlIGVudW1lcmF0aW9ucywKCXRvby4gCgkoZ3Jva19lbnVtX2RlY2xzKTogRG9jdW1lbnQuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9jdW1lbnQgdXNlIG9mIExPT0tVUF9FWFBSIGEgYml0CgliZXR0ZXIuICBCdWlsZCBMT09LVVBfRVhQUnMgZm9yIGxvY2FsIHZhcmlhYmxlcywgZXZlbiBpZiB0aGV5IGFyZQoJVFJFRV9QRVJNQU5FTlQuCgkqIHB0LmMgKHRzdWJzdF9lbnVtKTogUmVtb3ZlIGZpZWxkX2NoYWluIHBhcmFtZXRlci4KCSh0ZW1wbGF0ZV9jbGFzc19kZXB0aCk6IEluY2x1ZGUgdGhlIGRlcHRoIG9mIHN1cnJvdW5kaW5nIGZ1bmN0aW9uCgljb250ZXh0cy4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBDaGVjayBmb3IgcHJpbWFyeS10ZW1wbGF0ZSBlbnVtIGRlY2xhcmF0aW9ucwoJaGVyZS4gIERlYWwgd2l0aCBlbnVtZXJhdGlvbiB0ZW1wbGF0ZXMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgY2FsbCB0c3Vic3RfZW51bSBkaXJlY3RseSwKCWNhbGwgdHN1YnN0IGluc3RlYWQsIHRvIGluc3RhbnRpYXRlIGVudW1zLiAgRGVhbCB3aXRoIGFsbAoJZmllbGRfY2hhaW4gaXNzdWVzIGhlcmUsIG5vdCBpbiB0c3Vic3RfZW51bS4KCShsb29rdXBfbmVzdGVkX3R5cGVfYnlfbmFtZSk6IFJlbW92ZS4KCSh0c3Vic3RfYWdncl90eXBlKTogUmV2aXNlIGhhbmRsaW5nIG9mIGVudW1lcmF0aW9uIHR5cGVzLgoJKHRzdWJzdCk6IExpa2V3aXNlLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkodHN1YnN0X2V4cHIpOiBDYWxsIHRzdWJzdCwgbm90IHRzdWJzdF9lbnVtIGZvciBUQUdfREVGTnMuCgkKMTk5OC0wOC0wNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IERvbid0IG1hbmdsZSB0aGUgbmFtZSBvZiBhIFRZUEVfREVDTCBpZiBpdAoJdXNlcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcyk6IFVzZSB0aGUgZnVsbCBzZXQgb2YKCXRlbXBsYXRlIGFyZ3VtZW50cyBmb3IgdHN1YnN0J2luZy4KCShidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogUGFzcyB0aGUgZnVsbCBzZXQgb2YgdGVtcGxhdGUKCWFyZ3VtZW50cyB0byBidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzLCBub3QganVzdCB0aGUKCWlubmVybW9zdF9hcmdzLiAKCSogcHQuYyAoVE1QTF9BUkdTX0RFUFRIKTogRGVmaW5lIHVzaW5nCglUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMsIGZvciBjbGFyaXR5LgoJKE5VTV9UTVBMX0FSR1MpOiBOZXcgbWFjcm8uCgkoYWRkX291dGVybW9zdF90ZW1wbGF0ZV9hcmdzKTogRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBvdXRlcgoJYXJncyB3aWxsIGJlIGNvbXBsZXRlbHkgZGlzY2FyZGVkLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSB0aGUgZnVsbCBzZXQgb2YgdGVtcGxhdGUgYXJndW1lbnRzCglmb3IgdHN1YnN0J2luZy4gIFNpbXBsaWZ5LiAgQWRkIHNvbWUgYXNzZXJ0cy4gIEltcHJvdmUKCWVycm9yIG1lc3NhZ2VzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFBhc3MgdGhlIGZ1bGwgc2V0IG9mIHRlbXBsYXRlIGFyZ3VtZW50cwoJdG8gY29lcmNlX3RlbXBsYXRlX3Bhcm1zLgoJKHRzdWJzdCk6IEFkZCBhc3NlcnRpb24uCgkoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogRG9uJ3QgaW5zdGFudGlhdGUgbWVtYmVyIHRlbXBsYXRlCgljbGFzc2VzLiAKCQoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBEZWFsIHdpdGggYSBURU1QTEFURV9JRF9FWFBSIHdob3NlCgluYW1lIGlzIGEgTE9PS1VQX0VYUFIsIHJhdGhlciB0aGFuIGFuIElERU5USUZJRVJfTk9ERS4KCjE5OTgtMDgtMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsKTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIHZvaWQuCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBBIG5hbWVzcGFjZS1sZXZlbCBkZWNsIHRha2VzIHByaW9yaXR5CglvdmVyIGltcGxpY2l0IHR5cGVuYW1lLiAgQXZvaWQgZG9pbmcgdGhlIHNhbWUgbG9va3VwIHR3aWNlLgoKCSogc2VhcmNoLmMgKGRlcGVuZGVudF9iYXNlX3ApOiBOZXcgZm4uCgkoZGZzX3B1c2hkZWNscywgZGZzX2NvbXByZXNzX2RlY2xzKTogVXNlIGl0LgoKCSogdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogRG9uJ3QgdHJ5IHRvIGhhbmRsZSAKCXZpcnR1YWwgZnVuY3Rpb25zIGlmIHRoZSB0eXBlIGRvZXNuJ3QgaGF2ZSBhbnkuCgoxOTk4LTA4LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRG9uJ3QgbWFuZ2xlIHRoZSBuYW1lIG9mIGEgVFlQRV9ERUNMIGlmIGl0Cgl1c2VzIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoxOTk4LTA4LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5kZWYgKExPT0tVUF9FWFBSKTogRG9jdW1lbnQuICBSZW1vdmUgc2Vjb25kIGFyZ3VtZW50LgoJKiBjcC10cmVlLmggKERFQ0xfVElfVEVNUExBVEUpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgdXNlIGEgc2Vjb25kIGFyZ3VtZW50LCBvciBhIHR5cGUsCgl3aGVuIGJ1aWxkaW5nIExPT0tVUF9FWFBScy4KCShkb19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoZG9fc2NvcGVkX2lkKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IERvbid0IG5lZWRsZXNzbHkgY2FsbAoJY29weV90b19wZXJtYW5lbnQgb3IgYnVpbGRfbWluLgoJKHRzdWJzdF9jb3B5KTogUmVtb3ZlICNpZiAwJ2QgY29kZS4gIFRzdWJzdCBpbnRvIExPT0tVUF9FWFBScyBpZgoJbmVjZXNzYXJ5LgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IEltcHJvdmUgZXJyb3IgbWVzc2FnZS4KCSogdHJlZS5jIChtYXBjYXIsIGNhc2UgTE9PS1VQX0VYUFIpOiBEb24ndCBiZSBzb3JyeTsgbWFrZSBhIGNvcHkuCgkoYnVpbGRfbWluKTogQ29weSB0aGUgdHlwZSB0byB0aGUgcGVybWFuZW50IG9ic3RhY2ssIHRvby4KCQoxOTk4LTA4LTAxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGluaXRfaW5pdF9wcm9jZXNzaW5nKTogUmVtb3ZlIEJJKiBoYW5kbGluZy4KCShidWlsZF9idWlsdGluX2NhbGwpOiBSZW1vdmUuCgkoYnVpbGRfYnVpbHRpbl9kZWxldGVfY2FsbCk6IE5ldyBmbi4KCShidWlsZF9kZWxldGUpOiBVc2UgaXQuCgkKMTk5OC0wNy0zMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoUFJPQ0VTU0lOR19SRUFMX1RFTVBMQVRFX0RFQ0xfUCk6IE5ldyBtYWNyby4KCShtYXliZV9jaGVja190ZW1wbGF0ZV90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKG1heWJlX3Byb2Nlc3NfdGVtcGxhdGVfdHlwZV9kZWNsYXJhdGlvbik6IE5ldyBmdW5jdGlvbiwKCXNwbGl0IG91dCBmcm9tIHB1c2h0YWcgIENhbGwgbWF5YmVfY2hlY2tfdGVtcGxhdGVfdHlwZS4KCShwdXNodGFnKTogVXNlIGl0LiAgVXNlIFBST0NFU1NJTkdfUkVBTF9URU1QTEFURV9ERUNMX1AuCgkoeHJlZl90YWcpOiBVc2UgUFJPQ0VTU0lOR19SRUFMX1RFTVBMQVRFX0RFQ0xfUC4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFVzZSBQUk9DRVNTSU5HX1JFQUxfVEVNUExBVEVfREVDTF9QLgoJKiBwdC5jICh0ZW1wbGF0ZV9jbGFzc19kZXB0aF9yZWFsKTogR2VuZXJhbGl6YXRpb24gb2YgLi4uCgkodGVtcGxhdGVfY2xhc3NfZGVwdGgpOiBVc2UgaXQuCgkocmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBVc2UgZHVwbGljYXRlX2RlY2xzIGZvciBkdXBsaWNhdGUKCWRlY2xhcmF0aW9ucyBvZiBzcGVjaWFsaXphdGlvbnMuCgkobWF5YmVfY2hlY2tfdGVtcGxhdGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IEZpeCBjb21tZW50LgoJKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLiAgQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBvbgoJZXJyb25lb3VzIGNvZGUuCgkodHN1YnN0X2ZyaWVuZF9mdW5jdGlvbik6IEZpeCBjb21tZW50LgoJKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9ERUNMKTogRGVhbCB3aXRoIGEgREVDTF9USV9URU1QTEFURSB0aGF0IGlzCglhbiBJREVOVElGSUVSX05PREUuCgkqIHNlbWFudGljcy5jIChiZWdpbl9mdW5jdGlvbl9kZWZpbml0aW9uKTogVXNlCglyZXNldF9zcGVjaWFsaXphdGlvbiB0byBub3RlIHRoYXQgdGVtcGxhdGUgaGVhZGVycyBkb24ndCBhcHBseQoJZGlyZWN0bHkgdG8gZGVjbGFyYXRpb25zIGFmdGVyIHRoZSBvcGVuaW5nIGN1cmx5IGZvciBhIGZ1bmN0aW9uLgoKMTk5OC0wNy0yOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IFVzZSBjdXJyZW50X25hbWVzcGFjZSBpbnN0ZWFkIG9mCglERUNMX0NPTlRFWFQgKGRlY2wpIHRvIGRldGVybWluZSB3aGVyZSB3ZSBnby4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEZpeCB0eXBvLgoKMTk5OC0wNy0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBCZSBsZW5pZW50IHdpdGggbWVtYmVyIGZ1bmN0aW9ucyB0byBkZWFsCgl3aXRoIG5lc3RlZCBmcmllbmRzLgoKMTk5OC0wNy0yOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ29udmVydCBpbnRlZ2VyX3plcm9fbm9kZSB0bwogCXNzaXpldHlwZSBiZWZvcmUgcGFzc2luZyBpdCB0byBzZXRfcnR0aV9lbnRyeS4KCSogdHlwZWNrMi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWxsb3cgY29udmVyc2lvbiBvZiAwCglvZiBhbnkgc2l6ZSB0byBhIHBvaW50ZXIuCgoxOTk4LTA3LTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChUSV9VU0VTX1RFTVBMQVRFX1BBUk1TKTogUmVtb3ZlLgoJKGJ1aWxkX3RlbXBsYXRlX2RlY2xfb3ZlcmxvYWQpOiBSZW1vdmUuCgkoc2V0X21hbmdsZWRfbmFtZV9mb3JfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShpbm5lcm1vc3RfYXJncyk6IFJlbW92ZSBpc19zcGVjIHBhcmFtZXRlci4KCShtb3N0X3NwZWNpYWxpemVkLCBtb3N0X3NwZWNpYWxpemVkX2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9ucy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBZGQgZW50ZXJpbmdfc2NvcGUgcGFyYW1ldGVyLgoJKG1heWJlX3Byb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKGZpbmlzaF90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuICAKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IENsZWFuIHVwIHByb2Nlc3Npbmcgb2YgbWVtYmVyIHRlbXBsYXRlCglzcGVjaWFsaXphdGlvbnMuCgkqIGRlY2wuYyAocHVzaHRhZyk6IEZpeAlmb3JtYXR0aW5nLgoJKGxvb2t1cF90YWcpOiBJbXByb3ZlIGhhbmRsaW5nIG9mIHBzZXVkby1nbG9iYWwgbGV2ZWxzLgoJKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEFkanVzdCBjYWxsIHRvIGxvb2t1cF90ZW1wbGF0ZV9jbGFzcy4KCShzaGFkb3dfdGFnKTogVXNlIG1heWJlX3Byb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbi4KCSh4cmVmX3RhZyk6IEltcHJvdmUgaGFuZGxpbmcgb2YgbWVtYmVyIGZyaWVuZHMuICAKCShzdGFydF9mdW5jdGlvbik6IENhbGwgcHVzaF9uZXN0ZWRfY2xhc3MgYmVmb3JlCglwdXNoX3RlbXBsYXRlX2RlY2wuICBEb24ndCBjYWxsIHB1c2hfdGVtcGxhdGVfZGVjbCBmb3IKCXNwZWNpYWxpemF0aW9ucy4KCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBEb24ndCBjYWxsIHhyZWZfdGFnIGZvcgoJdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMuICBIYW5kbGUgVU5JT05fVFlQRXMgbGlrZSBSRUNPUkRfVFlQRXMuCgkoZ3Jva2NsYXNzZm4pOiBVc2Ugc2V0X21hbmdsZWRfbmFtZV9mb3JfZGVjbC4KCShhcmdfYXNzb2NfY2xhc3MpOiBBZGp1c3QgY2FsbCB0byBpbm5lcm1vc3RfYXJncy4KCShtYXJrX3VzZWQpOiBEb24ndCBjYWxsIGluc3RhbnRpYXRlX2RlY2wgZm9yIGEgVEVNUExBVEVfREVDTC4KCSogZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9uYW1lKTogSW1wcm92ZSBwcmludGluZyBvZiB0ZW1wbGF0ZQoJZnVuY3Rpb24gbmFtZXMuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBEb24ndCBjb21wYXJlIHR5cGVzIG9mIGRlY2xzIHRvIGRldGVybWluZQoJZnJpZW5kc2hpcCwgdW5sZXNzIGZsYWdfZ3VpZGluZ19kZWNscy4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IFBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIGNhbm5vdCBiZSBmcmllbmRzLiAgCgkoZG9fZnJpZW5kKTogVXNlIHNldF9tYW5nbGVkX25hbWVfZm9yX2RlY2wuICBDYWxsCglwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCBpbnN0ZWFkIG9mIHB1c2hfdGVtcGxhdGVfZGVjbC4KCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IFJlbW92ZSBwcm90b3R5cGUuICBHaXZlIGl0CglleHRlcm5hbCBsaW5rYWdlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZmVyKTogQWRqdXN0IGNhbGwgdG8gaW5uZXJtb3N0X2FyZ3MuCgkoYnVpbGRfdGVtcGxhdGVfZGVjbF9vdmVybG9hZCk6IFJlbW92ZS4KCShzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS55ICguZmluaXNoX3RlbXBsYXRlX3R5cGUpOiBOZXcgbm9uLXRlcm1pbmFsLgoJKHRlbXBsYXRlX2RlZik6IFVzZSBmaW5pc2hfdGVtcGxhdGVfZGVjbC4gIFVzZSB0ZW1wbGF0ZV9leHRkZWYKCWluc3RlYWQgb2YgZXh0ZGVmLgoJKHRlbXBsYXRlX2V4dGRlZiwgdGVtcGxhdGVfZGF0YWRlZik6IE5ldyBub24tdGVybWluYWxzLCBjb250YWluaW5nCglvbmx5IHRob3NlIHJ1bGVzIGZvciB0aGluZ3Mgd2hpY2ggY2FuIGJlIHRlbXBsYXRlcy4KCShkYXRhZGVmKTogVGlkeS4KCSh0ZW1wbGF0ZV90eXBlLCBzZWxmX3RlbXBsYXRlX3R5cGUpOiBVc2UgLmZpbmlzaF90ZW1wbGF0ZV90eXBlLgoJKG5hbWVkX2NsYXNzX2hlYWQpOiBVc2UgbWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uLgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBSZW1vdmUgY29udGV4dCBwYXJhbWV0ZXIuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogUmVtb3ZlIG91dGVyX2FyZ3MgcGFyYW1ldGVyLgoJKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBSZW1vdmUuCgkoYWRkX291dGVybW9zdF90ZW1wbGF0ZV9hcmdzKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogUmV0dXJuIHRoZSBzcGVjaWFsaXphdGlvbi4KCSh1bnJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHRzdWJzdF90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoJKG1vc3Rfc3BlY2lhbGl6ZWQsIG1vc3Rfc3BlY2lhbGl6ZWRfY2xhc3MpOiBQcm90b3R5cGUgaGVyZSBhcwoJc3RhdGljLiAKCShvcmlnaW5hbF90ZW1wbGF0ZSk6IFJlbmFtZSB0byBtb3N0X2dlbmVyYWxfdGVtcGxhdGUuCgkodHN1YnN0X3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZ1bmN0aW9uLgoJKHNldF9tYW5nbGVkX25hbWVfZm9yX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCShUTVBMX0FSR1NfREVQVEgpOiBOZXcgbWFjcm8uCgkoVE1QTF9BUkdTX0hBVkVfTVVMVElQTEVfTEVWRUxTKTogQWRqdXN0LgoJKFRNUExfQVJHU19MRVZFTCk6IE5ldyBtYWNyby4KCShTRVRfVE1QTF9BUkdTX0xFVkVMKTogTGlrZXdpc2UuCgkoVE1QTF9BUkcpOiBMaWtld2lzZS4KCShTRVRfVE1QTF9BUkcpOiBMaWtld2lzZS4KCShUTVBMX0FSR1NfREVQVEgpOiBMaWtld2lzZS4KCShmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBVc2UgZmluaXNoX3RlbXBsYXRlX2RlY2wuCgkobWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQKCWZyb20gdHN1YnN0LgoJKGlubGluZV9uZWVkc190ZW1wbGF0ZV9wYXJtcyk6IFVzZSBUTVBMX1BBUk1TX0RFUFRILgoJKG1heWJlX2JlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogVXNlIG5ldyBtYWNyb3MuCgkoaXNfbWVtYmVyX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoaXNfbWVtYmVyX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkoYWRkX3RvX3RlbXBsYXRlX2FyZ3MpOiBMaWtld2lzZS4gIERlYWwgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2YKCWFyZ3MuIAoJKG1heWJlX3Byb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbik6IE5ldyBmdW5jdGlvbi4KCShyZXRyaWV2ZV9zcGVjaWFsaXphdGlvbik6IEFkZCBjb25zaXN0ZW5jeSBjaGVjay4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBSZXR1cm4gZnVsbCBhcmd1bWVudCBsaXN0LgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogVHdlYWsgZnJpZW5kIGhhbmRsaW5nLiAgVXNlIGZ1bGwKCWFyZ3VtZW50IGxpc3RzLiAgU2ltcGxpZnkuCgkoY3VycmVudF90ZW1wbGF0ZV9hcmdzKTogVXNlIG5ldyBtYWNyb3MuCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBDaGFuZ2UgaWxsLW5hbWVkIG1haW5hcmdzIHRvIHNwZWNhcmdzLgoJQ2hlY2sgdGhhdCBhIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gYWN0dWFsbHkgc3BlY2lhbGl6ZXMgYXQgbGVhc3QKCW9uZSBwYXJhbWV0ZXIuICAgSW1wcm92ZSBmcmllbmQgaGFuZGxpbmcuICBNb2RpZnkgZm9yIGZ1bGwKCXRlbXBsYXRlIGFyZ3VtZW50cy4KCShjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogRG9uJ3QgbWFuZ2xlIHRoZSBuYW1lcyBvZgoJc3BlY2lhbGl6YXRpb25zLiAKCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBZGQgZW50ZXJpbmdfc2NvcGUgcGFyYW1ldGVyLiAgVXNlIGl0IHRvCglhdm9pZCBmaW5kaW5nIGEgdGVtcGxhdGUgdHlwZSB3aGVuIGFuIGluc3RhbnRpYXRpb24gaXMgcmVxdWlyZWQuCglTaW1wbGlmeS4gIFVzZSBmdWxsIHRlbXBsYXRlIGFyZ3VtZW50cy4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uKTogVXNlIHVucmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24uICBVc2UgbmV3CgltYWNyb3MuICBVc2UgZnVsbCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgkodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IFN1YnN0aXR1dGUsIHVzaW5nIHRzdWJzdF90ZW1wbGF0ZV9wYXJtcywKCWludG8gdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0bwoJcmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogU2ltcGxpZnkuICBVc2UgZnVsbCB0ZW1wbGF0ZQoJYXJndW1lbnRzLiAgQWRqdXN0IGNhbGxzIHRvIGdldF9jbGFzc19iaW5kaW5ncy4gIFVzZQoJU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRSB3aGVyZSBuZWVkZWQuICBJbXByb3ZlIGZyaWVuZCBoYW5kbGluZy4KCShpbm5lcm1vc3RfYXJncyk6IFVzZSBuZXcgbWFjcm9zLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tIHRzdWJzdC4KCSh0c3Vic3QpOiBVc2UgdHN1YnN0X2FnZ3JfdHlwZSwgdHN1YnN0X3RlbXBsYXRlX3Bhcm1zLCBuZXcgY2FsbGluZwoJY29udmVudGlvbnMgZm9yIGxvb2t1cF90bWVwbGF0ZV9jbGFzcy4gIFJlZmluZSBoYW5kbGluZyBvZiBwYXJ0aWFsCglpbnN0YW50aWF0aW9ucy4gICBSZW1vdmUgY2FsbHMgdG8gY29tcGxldGVfdGVtcGxhdGVfYXJncy4KCVNpbXBsaWZ5LiAgQWRkIGNvbnNpc3RlbmN5IGNoZWNrcy4gIFVzZSBzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsCglhbmQgc2V0X21hbmdsZWRfbmFtZV9mb3JfdGVtcGxhdGVfZGVjbC4KCSh0c3Vic3RfY29weSk6IFVzZSB0c3Vic3RfYWdncl90eXBlLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVXNlIGZ1bGwgdGVtcGxhdGUgYXJndW1lbnRzLgoJKG1vcmVfc3BlY2lhbGl6ZWQpOiBJbXByb3ZlIGZvcm1hdHRpbmcuCgkobW9yZV9zcGVjaWFsaXplZF9jbGFzcyk6IEFkanVzdCBjYWxscyB0byBnZXRfY2xhc3NfYmluZGluZ3MuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBEb24ndCBjYWxsIGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MuCgkobW9zdF9zcGVjaWFsaXplZCk6IERvbid0IG92ZXJ3cml0ZSBpbnB1dDsgY3JlYXRlIGEgbmV3IGxpc3QuCgkobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IFVzZSBtb3N0X2dlbmVyYWxfdGVtcGxhdGUuCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBVc2UgdW5yZWdpc3Rlcl9zcGVjaWFsaXphdGlvbi4KCVVzZSBmdWxsIHRlbXBsYXRlIGFyZ3VtZW50cy4gIAoJKGluc3RhbnRpYXRlX2RlY2wpOiBVc2UgZnVsbCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgkoc2V0X21hbmdsZWRfbmFtZV9mb3JfdGVtcGxhdGVfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBVc2UKCW1heWJlX3Byb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbi4KCShmaW5pc2hfbWVtYmVyX2NsYXNzX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF90ZW1wbGF0ZV9kZWNsKTogTGlrZXdpc2UuCgkoZmluaXNoX3RlbXBsYXRlX3R5cGUpOiBMaWtld2lzZS4gIAoJKHR5cGVjay5jKTogRG9uJ3QgY3Jhc2ggYWZ0ZXIgaXNzdWluZyBhIGNvbXBpbGVyX2Vycm9yLgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogQWRqdXN0OyB3ZSByZW1vdmVkIGEgcy9yIGNvbmZsaWN0LgoJCjE5OTgtMDctMjcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogSGFuZGxlIGRlZmF1bHQtaW5pdGlhbGl6YXRpb24uCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFBhc3MgMSB0byBwb3BjbGFzcy4KCgkqIHBhcnNlLnkgKGRpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IEFkZCBwcmVjZWRlbmNlIGRlY2xhcmF0aW9uCgl0byBub3R5cGVfdW5xdWFsaWZpZWRfaWQgY2FzZS4KCSogTWFrZWZpbGUuaW4gKEVYUEVDVCk6IEFkanVzdC4KCgkqIHRyZWUuYyAob3ZsX21lbWJlcik6IEZpeCBmb3Igc2luZ2xlIGZ1bmN0aW9uIGluIE9WTC4KCjE5OTgtMDctMjcgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogRml4IGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwgYW5kCglzdHJpbmcgbGl0ZXJhbCBsb29wcy4KCjE5OTgtMDctMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IE9LLCBkbyByZXR1cm4gdGhlIGZyb21fb2JqIHZhbHVlCgl1bmxlc3MgZ290X29iamVjdCBkZXBlbmRzIG9uIHRlbXBsYXRlIHBhcm1zLgoKCSogcGFyc2UueSAobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBQdWxsIG91dCB0aGUgVFlQRV9NQUlOX1ZBUklBTlQuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBbHNvIGNvbXBsYWluIGFib3V0IGxvY2FsIGVudW1zLgoKCSogY3AtdHJlZS5oOiBBZGQgcHJvdG90eXBlIGZvciBzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZS4KCSogZGVjbC5jIChzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZV93aXRoX3Njb3BlKTogTWFrZSBzdGF0aWMsCglwcm90b3R5cGUuCgkqIHNlYXJjaC5jIChjb3ZhcmlhbnRfcmV0dXJuX3ApOiBMaWtld2lzZS4KCSogZXhjZXB0LmMgKGJ1aWxkX3Rlcm1pbmF0ZV9oYW5kbGVyLCBhbGxvY19laF9vYmplY3QpOiBMaWtld2lzZS4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBPbmx5IHB1bGwgb3V0IHRoZSB0eXBlIG9mIGEgZGVzdHJ1Y3RvcgoJaWYgaXQncyBhIHRlbXBsYXRlIHR5cGUgcGFybS4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogTmV2ZXIgcmV0dXJuIHRoZSBmcm9tX29iaiB2YWx1ZS4KCjE5OTgtMDctMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrX29sZCk6IENhbGwgc3RhcnRfZGVjbF8xIGZvcgoJY2F0Y2ggcGFybS4KCSogZGVjbC5jIChzdGFydF9kZWNsXzEpOiBBdm9pZCBkdXBsaWNhdGUgZXJyb3IuCgoJKiBpbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBPbmx5IHBlcmZvcm0gdGhlIGluaXRpYWxpemF0aW9uIGlmCglpdCB3aWxsIGRvIHNvbWV0aGluZy4KCjE5OTgtMDctMjMgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHBhcnNlLnkgKGJhc2VfY2xhc3MpOiBDaGVjayBmb3IgaW52YWxpZCBiYXNlIGNsYXNzLgoKMTk5OC0wNy0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF90ZW1wbGF0ZSk6IEZvbGQgaW4uLi4KCShpbXBvcnRfZXhwb3J0X2NsYXNzKTogLi4udG8gaGVyZS4gIEhhbmRsZSBkbGxpbXBvcnQvZXhwb3J0LgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlKTogUGFzcyBhdF9lb2YgdG8gaW1wb3J0X2V4cG9ydF92dGFibGUuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9jbGFzcyk6IFNwbGl0IG91dC4uLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IEZyb20gaGVyZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ2FsbCBpbXBvcnRfZXhwb3J0X2NsYXNzIGlmIGF0X2VvZi4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiAjaWYgMCBteXN0ZXJpb3VzIGNvZGUgSSB3cm90ZSBhbmQgaGF2ZSAKCWZvcmdvdHRlbiB3aHkuCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuKTogSWYgdGhpcyBpcyBmb3IgYSBjbGFzcyB0eXBlLCBzZXQKCURFQ0xfQ09OVEVYVC4KCjE5OTgtMDctMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluYy9leGNlcHRpb246IENoYW5nZSB0ZXJtaW5hdGUgYW5kIHVuZXhwZWN0ZWQgdG8gKCkuCgoJKiBwYXJzZS55IChuYW1lZF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGVfZGVmbik6IEEKCW5hbWVkX2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSBmb2xsb3dlZCBieSAneycgb3IgJzonIGlzIGEgZGVmbi4KCjE5OTgtMDctMjEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoY2Fub25pY2FsX3R5cGVfdmFyaWFudCk6IE5ldyBmbiB0byBoYW5kbGUgYXJyYXlzLgoJKiBjcC10cmVlLmggKENBTk9OSUNBTF9UWVBFX1ZBUklBTlQpOiBSZW1vdmUuCgkqIHB0LmMgKHVuaWZ5LCBkZWZhdWx0IGNhc2UpOiBBbHNvIGZvbGQgYXJnLiAgRml4IGFycmF5IGJvdW5kcyBjYXNlLgoJKiBtZXRob2QuYyAocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogVXNlIGJ1aWxkX292ZXJsb2FkX3ZhbHVlIGZvcgoJYXJyYXlzLgoKMTk5OC0wNy0yMCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmMgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkoR0VUX0VOVklST05NRU5UKTogTmV3IG1hY3JvLgoJKGluaXRfcGFyc2UpOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHJlYWxfeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWxzLgoJKHJlYWxfeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGxpdGVyYWxzLgoKMTk5OC0wNy0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBMb29rIGZvciBjbGFzcyB2YWx1ZSBldmVuIGlmIHdlIGRvbid0CgloYXZlIGEgZ2xvYmFsIHZhbHVlLiAgRG8gaW1wbGljaXQgZGVjbGFyYXRpb24gaWYgcGFyc2luZyBpcyAyLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NhbGxfZXhwcik6IFBhc3MgMiBpZiB3ZSdyZSBkb2luZyBLb2VuaWcKCWxvb2t1cC4KCjE5OTgtMDctMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBwdXQgb3V0IGRlYnVnZ2luZwoJaW5mb3JtYXRpb24gZm9yIHR5cGVzIHRoYXQgdXNlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBEb24ndCBwdXQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IKCWNvbXBpbGVyLWdlbmVyYXRlZCB0eXBlZGVmcy4KCQoJKiBlcnJvci5jIChkdW1wX3R5cGVfcmVhbCk6IERvbid0IGNyYXNoIHdoZW4gcHJlc2VudGVkIHdpdGgKCWludFFJX3R5cGVfbm9kZSBvciB0aGUgbGlrZS4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfdHJhbnNsYXRpb25fdW5pdCk6IEZpeCBzcGVsbGluZyBlcnJvciBpbgoJY29tbWVudC4KCjE5OTgtMDctMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFB1bGwgb3V0IHNpbmdsZSBmdW5jdGlvbiBoZXJlLgoJKHNlbGVjdF9kZWNsKTogTm90IGhlcmUuCgkodW5xdWFsaWZpZWRfbmFtZXNwYWNlX2xvb2t1cCk6IFVzZSBDUF9ERUNMX0NPTlRFWFQuCgoJKiBkZWNsLmMgKHF1YWxpZnlfbG9va3VwKTogVHdlYWsgYWdhaW4uCgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBtZXNzIHdpdGggdGhlIGNvbnRleHQgb2YgdGhlCglpbnN0YW50aWF0aW9uLgoJKiBkZWNsMi5jIChjdXJyZW50X2RlY2xfbmFtZXNwYWNlKTogUmVtb3ZlIHNwZWNpYWwgaGFuZGxpbmcgZm9yCgl0ZW1wbGF0ZXMuCgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IEZpeCBnZXR0aW5nIGNvbXBsZXRlIGFyZ3MgZm9yCglhIG1lbWJlciB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4KCgkqIHRyZWUuYyAob3ZsX21lbWJlcik6IFVzZSBkZWNsc19tYXRjaCB0byBjb21wYXJlIGZ1bmN0aW9ucy4KCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IENoZWNrIHRoZSBjb250ZXh0IG9mIGEgZnVuY3Rpb24uCgoJKiBwYXJzZS55IChwcmltYXJ5KTogVXNlIG5vdHlwZV91bnF1YWxpZmllZF9pZCBpbnN0ZWFkIG9mIElERU5USUZJRVIKCWluIEtvZW5pZyBsb29rdXAgc3VwcG9ydCBydWxlcy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9jYWxsX2V4cHIpOiBIYW5kbGUgdGhlIG5ldyBjYXNlcy4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBIYW5kbGUgb3ZlcmxvYWRlZCBtZXRob2RzLgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IERvbid0IGNhbGwgYnVpbGRfc3RhdGljX25hbWUgZm9yIGV4dGVybiAiQyIuCgoxOTk4LTA3LTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9vYmplY3RfY2FsbF9leHByKTogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZS4KCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4gIEluc3RlYWQsIGNvbnZlcnQKCVRZUEVfREVDTHMgdG8gSURFTlRJRklFUnMgaGVyZSwgaW4gdGhlIHByZXNlbmNlIG9mIHRlbXBsYXRlcy4KCjE5OTgtMDctMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocXVhbGlmeV9sb29rdXApOiBIYW5kbGUgdGVtcGxhdGVzLgoKCSogZGVjbDIuYyAoZG9fdXNpbmdfZGlyZWN0aXZlKTogRG9uJ3QgcGFzcyBhbmNlc3Rvci4KCSogZGVjbC5jIChwdXNoX3VzaW5nX2RpcmVjdGl2ZSk6IENhbGN1bGF0ZSBhbmNlc3Rvci4KCgkqIGRlY2wyLmMgKGRvX25vbm1lbWJlcl91c2luZ19kZWNsKTogQWxsb3cgZm9yIHR5cGUgc2hhZG93aW5nLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogTW92ZSB0eXBlIHNoYWRvd2luZyBoYW5kbGluZyBmcm9tIGhlcmUuLi4KCShkdXBsaWNhdGVfZGVjbHMpOiAuLi50byBoZXJlLgoJKiBkZWNsLmMgKHNldF9pZGVudGlmaWVyX2xvY2FsX3ZhbHVlX3dpdGhfc2NvcGUpOiBOZXcgZm4uCgkocHVzaGRlY2wpOiBVc2UgaXQuCgkoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUsIGxvb2t1cF90eXBlX2N1cnJlbnRfbGV2ZWwpOiBOZXcgZm5zLgoJKiBkZWNsMi5jIChkb19sb2NhbF91c2luZ19kZWNsKTogSGFuZGxlIHR5cGVzIGFuZCBiaW5kaW5nIGxldmVsCglzdHVmZiBwcm9wZXJseS4KCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IERvbid0IGNhbGwgbWFya191c2VkIG9uIGFuIE9WRVJMT0FELgoJKiBkZWNsLmMgKHNlbGVjdF9kZWNsKTogRXh0cmFjdCBhIGxvbmUgZnVuY3Rpb24gZnJvbSBhbiBPVkVSTE9BRC4KCShsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTm90IGhlcmUgYW55bW9yZS4KCgkqIGRlY2wyLmMgKGRvX2NsYXNzX3VzaW5nX2RlY2wpOiBNYWtlIHN1cmUgd2UgZ2V0IGFuIGlkZW50aWZpZXIuCgkqIGNsYXNzLmMgKGhhbmRsZV91c2luZ19kZWNsKTogSWdub3JlIFRZUEVfREVDTHMuCgoJKiBkZWNsLmMgKHF1YWxpZnlfbG9va3VwKTogTmV3IGZuLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBVc2UgaXQuCgoxOTk4LTA3LTE2ICBNYXJ0aW4gdi4gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbDIuYyAoYWRkX3VzaW5nX25hbWVzcGFjZSk6IFdoZW4gZGlyZWN0bHkgdXNpbmcgYSBuYW1lc3BhY2UKCXRoYXQgd2FzIGluZGlyZWN0IGJlZm9yZSwgcHJvbW90ZSBpdC4KCgkqIGNwLXRyZWUuaCAoTE9PS1VQX1BSRUZFUl9UWVBFUywgTE9PS1VQX1BSRUZFUl9OQU1FU1BBQ0VTLAoJTE9PS1VQX1BSRUZFUl9CT1RILCBMT09LVVBfTkFNRVNQQUNFU19PTkxZLCBMT09LVVBfVFlQRVNfT05MWSwKCUxPT0tVUF9RVUFMSUZJRVJTX09OTFksIExPT0tVUF9URU1QTEFURVNfRVhQRUNURUQpOiBOZXcgbWFjcm9zLgoJKiBkZWNsLmMgKHNlbGVjdF9kZWNsKTogUmVwbGFjZSB0d28gZmxhZyBwYXJhbWV0ZXJzIGJ5IG9uZS4KCSh1bnF1YWxpZmllZF9uYW1lc3BhY2VfbG9va3VwKTogTGlrZXdpc2UsIHBhc3MgZmxhZy4KCShsb29rdXBfZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX25hbWVfcmVhbCk6IENvbXB1dGUgZmxhZ3MsIHBhc3MgdGhlbS4KCShsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBDYWxsIHdpdGggemVyby1mbGFnLgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IEFkZCBmbGFnIHBhcmFtZXRlciwgY29tcGxhaW4gb25seQoJYWNjb3JkaW5nIHRvIGZsYWdzLgoJKGxvb2t1cF91c2luZ19uYW1lc3BhY2UsIHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKToKCUFkZCBmbGFnIHBhcmFtZXRlciwgcGFzcyB0aGVtIHRocm91Z2guCgkqIGxleC5jIChkb19zY29wZWRfaWQpOiBDYWxsIHdpdGggemVyby1mbGFnLgoKMTk5OC0wNy0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBVc2UgY29tcHR5cGVzLgoKMTk5OC0wNy0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfb2JqZWN0X2NhbGxfZXhwcik6IE1vdmUgdGVzdCBmb3IgdGhlCglmdW5jdGlvbiBjYWxsZWQgYmVpbmcgYSBUWVBFX0RFQ0wgdG8gLi4uCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSGVyZS4KCjE5OTgtMDctMTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGFyZ19hc3NvY19jbGFzcyk6IEFsc28gbG9vayBhdCB0ZW1wbGF0ZSBhcmd1bWVudHMsIGlmIGFueS4KCShhcmdfYXNzb2MpOiBIYW5kbGUgZXJyb3JfbWFya19ub2RlIGFuZCBtdWx0aXBsZSBsZXZlbHMgb2YgVFJFRV9MSVNULgoKCSogbGV4LmMgKGxvb2tpbmdfZm9yX3R5cGVuYW1lKTogRG9uJ3QgaW5pdGlhbGl6ZS4KCgkqIGRlY2wyLmMgKGFtYmlndW91c19kZWNsKTogQ2xhcmlmeSBlcnJvciBtZXNzYWdlLgoKCSogZGVjbC5jIChwdXNoX3VzaW5nX2RpcmVjdGl2ZSk6IEl0ZXJhdGUgb3ZlciBuYW1lc3BhY2VzIHVzZWQKCWluZGlyZWN0bHkuCgoxOTk4LTA3LTE1ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsMi5jIChhZGRfdXNpbmdfbmFtZXNwYWNlKTogSXRlcmF0ZSBvdmVyIG5hbWVzcGFjZXMgdXNlZAoJaW5kaXJlY3RseS4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFjY2VwdCBuYW1lc3BhY2UgYWxpYXNlcyBhcyBsb2NhbHMuCgkoY2F0X25hbWVzcGFjZV9sZXZlbHMpOiBJZ25vcmUgYWxpYXNlcy4KCShkdXBsaWNhdGVfZGVjbHMpOiBJZ25vcmUgZHVwbGljYXRlIGFsaWFzZXMuCgkqIGRlY2wyLmMgKGRvX25hbWVzcGFjZV9hbGlhcyk6IFByb2Nlc3MgYmxvY2sgbGV2ZWwgbmFtZXNwYWNlCglhbGlhc2VzLiBTdG9yZSBhbGlhcyB3aXRoIHB1c2hkZWNsLiBSZW1vdmUgb2RyIGVycm9ycy4KCSogcGFyc2UueSAobmFtZXNwYWNlX2FsaWFzKTogTmV3IG5vbi10ZXJtaW5hbC4KCShleHRkZWYpOiBVc2UgaXQuCgoxOTk4LTA3LTE1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChhcmdfYXNzb2NfdHlwZSk6IEhhbmRsZSBNRVRIT0RfVFlQRSBsaWtlIEZVTkNUSU9OX1RZUEUuCglIYW5kbGUgVEVNUExBVEVfVFlQRV9QQVJNLgoJKGFyZ19hc3NvYyk6IFJld3JpdGUuCgoJKiBwdC5jIChjb21wbGV0ZV90ZW1wbGF0ZV9hcmdzKTogRG9uJ3QgbG9vayBhdCB0aGUgY29udGV4dCB1bmxlc3MKCXdlIGhhdmUgdG8uCgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogRml4IG5hbWVzcGFjZSBoYW5kbGluZy4KCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IEV4dHJhY3QgYSBsb25lIGZ1bmN0aW9uIGZyb20gYW4KCU9WRVJMT0FELgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBIYW5kbGUgZ2V0dGluZyBhIG5hbWVzcGFjZQoJZm9yIGJhc2V0eXBlIGluIGEgZGVzdHJ1Y3RvciBjYWxsLgoJKGNoZWNrX2R0b3JfbmFtZSk6IEhhbmRsZSBlbnVtcy4KCgkqIHBhcnNlLnkgKHVzaW5nX2RpcmVjdGl2ZSk6IE5ldyBub250ZXJtaW5hbC4KCShleHRkZWYsIHNpbXBsZV9zdG10KTogVXNlIGl0LgoKMTk5OC0wNy0xNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKGFkZF9mdW5jdGlvbik6IE1vdmUgZXJyb3IgbWVzc2FnZSAuLi4KCShhcmdfYXNzb2NfbmFtZXNwYWNlKTogLi4uIGZyb20gaGVyZS4KCjE5OTgtMDctMTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5hbWVzcGFjZV9xdWFsaWZpZXIpOiBGaXggbXVsdGlwbGUgbGV2ZWwgaGFuZGxpbmcuCgkqIGRlY2wyLmMgKG5hbWVzcGFjZV9hbmNlc3Rvcik6IFVzZSBDUF9ERUNMX0NPTlRFWFQuCgkoYXJnX2Fzc29jKTogRG9uJ3Qgc2tpcCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBmdW5jdGlvbi4KClR1ZSBKdWwgMTQgMjA6MDk6MjIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc2VhcmNoLmMgKG15X3RyZWVfY29ucyk6IENsZWFuIHVwLgoKMTk5OC0wNy0xNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChqb3VzdCk6IERvbid0IHdhcm4gYWJvdXQgImNvbmZ1c2luZyIgY29udmVyc2lvbnMgdG8gdGhlCglzYW1lIHR5cGUuCgoxOTk4LTA3LTE0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY2xhc3MuYyAocHVzaF9uZXN0ZWRfY2xhc3MpOiBDb21wbGFpbiBhYm91dCBuYW1lc3BhY2VzLgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBFbnRlciB0aGUgb2JqZWN0J3MgbmFtZXNwYWNlLgoJKGNwX2ZpbmlzaF9kZWNsKTogTGVhdmUgaXQuCgkoZ3Jva2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoY2hlY2tfZGVjbF9uYW1lc3BhY2UpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX2ZpbGUpOiBDYWxsIGl0LgoJKiBwYXJzZS55IChjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IFNldCBjb21wbGV4aXR5CglvZiBuYW1lc3BhY2UtcXVhbGlmaWVkIGlkcyB0byAtMSwgZW50ZXIgdGhlIG5hbWVzcGFjZS4KCgkqIG1ldGhvZC5jIChidWlsZF90ZW1wbGF0ZV9kZWNsX292ZXJsb2FkKTogRXhwZWN0IF9ERUNMIGFzIGZpcnN0CglwYXJhbWV0ZXIuIFB1dCBjb250ZXh0IHRlbXBvcmFyaWx5IGludG8gY3VycmVudF9uYW1lc3BhY2UuCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQ2hhbmdlIGNhbGxlci4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IENhbGwgbWFya191c2VkIGFuZAoJY29udmVydF9mcm9tX3JlZmVyZW5jZSBmb3IgbmFtZXNwYWNlIG1lbWJlcnMuCgpNb24gSnVsIDEzIDIzOjI1OjI4IDE5OTggIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBzZWFyY2guYyAobXlfdHJlZV9jb25zKTogVGhlIGJpdGZpZWxkIGlzIGF0IGluZGV4IDIuCgpNb24gSnVsIDEzIDE3OjIxOjAxIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBsYW5nLW9wdGlvbnMuaDogRm9ybWF0IGNoYW5nZWQgdG8gd29yayB3aXRoIG5ldyAtLWhlbHAgc3VwcG9ydAoJaW4gZ2NjL3RvcGxldi5jCgkKMTk5OC0wNy0xMiAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogQ2hhbmdlIGNhbGxzIG9mIGRvX2lkZW50aWZpZXIuCglEbyBLb2VuaWcgbG9va3VwIGluIENBTExfRVhQUi4KCShhcmdfYXNzb2MpOiBIYW5kbGUgZXJyb3JfbWFyay4KCSogbGV4LmMgKGlzX2dsb2JhbCk6IE5ldyBmdW5jdGlvbi4KCShkb19pZGVudGlmaWVyKTogRXhwZWN0IGFyZ3VtZW50cyBmb3IgS29lbmlnIGxvb2t1cC4KCSogcGFyc2UueSAocHJpbWFyeSk6IEFkZCBydWxlcyBmb3IgY2FsbHMgb2YgdW5xdWFsaWZpZWQgZnVuY3Rpb24gY2FsbHMuCgkoZG9faWQpOiBDaGFuZ2UgY2FsbCBvZiBkb19pZGVudGlmaWVyLgoJKiBwdC5jIChmaW5pc2hfc3RtdF9leHByKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfaWRfZXhwcik6IExpa2V3aXNlLgoJKGZpbmlzaF9jYWxsX2V4cHIpOiBBZGQgaW50ZWdlciBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUKCWFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAuCgoJKiBkZWNsLmMgKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogTmV3IGZpZWxkIHVzaW5nX2RpcmVjdGl2ZXMuCgkocHVzaF91c2luZ19kZWNsKTogTm90IHNvcnJ5IGFueW1vcmUuCgkocHVzaF91c2luZ19kaXJlY3RpdmUpOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX3RhZyk6IFVzZSBDUF9ERUNMX0NPTlRFWFQgdG8gaXRlcmF0ZS4KCSh1bnF1YWxpZmllZF9uYW1lc3BhY2VfbG9va3VwKTogTmV3IGZ1bmN0aW9uLCBjb2RlIGZyb20gLi4uCgkobG9va3VwX25hbWVfcmVhbCk6IC4uLiBoZXJlLgoJKiBkZWNsMi5jIChsb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogUGFzcyB1c2luZyBsaXN0IGluc3RlYWQgb2YKCWluaXRpYWwgc2NvcGUuCgkodmFsaWRhdGVfbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZG9fbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IFVzZSB0aGVtLgoJKGRvX2xvY2FsX3VzaW5nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZG9fdXNpbmdfZGlyZWN0aXZlKTogU3VwcG9ydCBibG9jay1sZXZlbCBkaXJlY3RpdmVzLgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IFN1cHBvcnQgdXNpbmcgZGVjbGFyYXRpb25zIGFuZAoJZGlyZWN0aXZlcy4KCShuYW1lc3BhY2VfcXVhbGlmaWVyLCBuYW1lc3BhY2VfdXNpbmdfZGVjbCk6IE5ldyBub24tdGVybWluYWxzLgoKCSogeHJlZi5jIChjbGFzc25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoR05VX3hyZWZfaGllcik6IENoYW5nZSBjbGFzcyBhbmQgYmFzZSBwYXJhbWV0ZXJzIHRvIHRyZWUuCgkqIGRlY2wuYyAoeHJlZl9iYXNleXBlcyk6IENoYW5nZSBjYWxsZXIuCgkqIGZyaWVuZC5jIChtYWtlX2ZyaWVuZF9jbGFzcyk6IExpa2V3aXNlLgoKMTk5OC0wNy0xMiAgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKCSogdHlwZWNrLmMgKGNvbXB0eXBlcywgY2FzZSBURU1QTEFURV9URU1QTEFURV9QQVJNKTogQWRkIHBhcmFtZXRlciAKCWNvbXBhcmlzb24uCgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtLCBjYXNlIFRFTVBMQVRFX0RFQ0wpOiBJZiBpdCBpcyBhIAoJdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLCByZWNvcmQgaXRzIHVzZS4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtLCBjYXNlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBUcmF2ZXJzZSAKCWl0cyB0ZW1wbGF0ZSBhcmd1bWVudHMgaWYgZXhpc3RzLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZ1bmN0aW9uIGVxdWl2YWxlbnQKCXRvIGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyB3aGVuIElTX1RNUExfUEFSTSBpcyB0cnVlLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSBpdC4gIFJlbW92ZSB0aGUgSVNfVE1QTF9QQVJNIHBhcmFtZXRlciwKCWFsbCBjYWxsZXJzIGNoYW5nZWQuCgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEFjY2VzcyBBUkdMSVNUIHByb3Blcmx5IHdoZW4gY3JlYXRpbmcgYQoJbmV3IHZlY3Rvci4gIE9ubHkgYWNjZXB0IGltcGxpY2l0IFRZUEVfREVDTCBhcyB2YWxpZCBhcmd1bWVudCBmb3IKCWEgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVyIHdoZW4gaXQgaXMgYSBiYXNlIGNsYXNzIG9mCgljdXJyZW50X2NsYXNzX3R5cGUuICBEb24ndCBkaXNwbGF5IGVycm9yIG1lc3NhZ2Ugd2hlbiBDT01QTEFJTiBpcwoJZmFsc2UuCgoxOTk4LTA3LTEyICBLbGF1cyBLYWVtcGYgKGtrYWVtcGZAcHJvZ2lzLmRlKQoKIAkqIHJlcG8uYyAoZ2V0X2Jhc2VfZmlsZW5hbWUpOiBVc2UgZmlsZV9uYW1lX25vbmRpcmVjdG9yeS4KIAkob3Blbl9yZXBvX2ZpbGUpOiBEaXR0by4KCSogY3AtdHJlZS5oIChmaWxlX25hbWVfbm9uZGlyZWN0b3J5KTogQWRkIHByb3RvdHlwZS4KCjE5OTgtMDctMTIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBQdWxsIHRoZSBpZGVudGlmaWVyIG91dCBvZiBkZWNsYXJhdG9yLgoJVXNlIGNwX2Vycm9yIGFuZCBmcmllbmRzLgoJKiBkZWNsMi5jIChxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IEZpeCBjYWxsIHRvIAoJcHVycG9zZV9tZW1iZXIuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGNhbGwgY29tcGxldGVfdHlwZSBvbiBhIG5hbWVzcGFjZS4KCShncm9rdmFyZGVjbCk6IFVzZSBERUNMX0NMQVNTX1NDT1BFX1AuCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IENoZWNrIGZvciBlcnJvcl9tYXJrX25vZGUgc29vbmVyLgoJKiBjbGFzcy5jICh3YXJuX2hpZGRlbik6IEZpeCBmb3IgT1ZFUkxPQUQuCglGcm9tIGdyYWhhbXNAcmNwLmNvLnVrOgoJKiBjcC10cmVlLmggKERFRkFSR19OT0RFX0NIRUNLKTogTmV3IG1hY3JvLgogCShERUZBUkdfTEVOR1RILCBERUZBUkdfUE9JTlRFUik6IFVzZSBpdC4KClN1biBKdWwgMTIgMDE6MjA6NTcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZysrLjEgKC10cmFkaXRpb25hbCk6IFJlbW92ZSBkdXBsaWNhdGVkIGRvY3VtZW50YXRpb24uCgoxOTk4LTA3LTExICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogbWV0aG9kLmMgKGZsdXNoX3JlcGVhdHMpOiBBZGQgbnJlcGVhdHMgcGFyYW1ldGVyLgoJKGlzc3VlX25yZXBlYXRzKTogTGlrZXdpc2UuCgkoaXNfYmFja19yZWZlcmVuY2VhYmxlX3R5cGUpOiBOZXcgZnVuY3Rpb24uICBEb24ndCBiYWNrLXJlZmVyZW5jZQoJVEVNUExBVEVfVFlQRV9QQVJNcyBhcyB3ZWxsIGFzIHNpbXBsZSB0eXBlcyBsaWtlIGludGVnZXJzLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZV93aXRoX0djb2RlKTogTGlrZXdpc2UuCgkobGFzdHR5cGUpOiBSZW1vdmUuCgkobnJlcGVhdHMpOiBMaWtld2lzZS4KCShOcmVwZWF0cyk6IExpa2V3aXNlLgoJKHN0YXJ0X3NxdWFuZ2xpbmcpOiBEb24ndCBjbGVhciB0aGUgdmFyaWFibGVzIHJlbW92ZWQgYWJvdmUuCgkoZW5kX3NxdWFuZ2xpbmcpOiBMaWtld2lzZS4KCShmbHVzaF9yZXBlYXRzKTogVGlkeS4gIFVzZSBucmVwZWF0cyBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4KCU5yZXBlYXRzIGdsb2JhbC4KCShpc3N1ZV9ucmVwZWF0cyk6IExpa2V3aXNlLCBidXQgd2l0aCBucmVwZWF0cyBnbG9iYWwuICBVc2UKCWlzX2JhY2tyZWZlcmVuY2VhYmxlX3R5cGUuCgkoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBUaWR5LiAgQWRkIGNvbW1lbnQuICBVc2UKCWJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZS4KCShidWlsZF91bmRlcnNjb3JlX2ludCk6IENvbW1lbnQuCgkoYnVpbGRfb3ZlcmxvYWRfc2NvcGVfcmVmKTogVXNlIGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZS4KCShidWlsZF9vdmVybG9hZF9pbnQpOiBMaWtld2lzZS4KCShidWlsZF90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtX25hbWVzKTogVGlkeS4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogVXNlIGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZS4KCShidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogQWRkIGNvbW1lbnRzLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZV93aXRoX0djb2RlKTogU3BsaXQgb3V0IGZyb20KCWJ1aWxkX21hbmdsZWRfbmFtZS4KCShidWlsZF9tYW5nbGVkX25hbWVfZm9yX3R5cGUpOiBVc2UgaXQuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lKTogUmV3b3JrIHRvIHVzZSBidWlsZF9tYW5nbGVkX25hbWVfZm9yX3R5cGUKCWFuZCB0byBub3QgdXNlIGdsb2JhbCBucmVwZWF0cy9OcmVwZWF0cy4gIFRpZHkuCgkocHJvY2Vzc19tb2RpZmllcnMpOiBUaWR5LgoJKGNoZWNrX2J0eXBlKTogVXNlIGlzX2JhY2tyZWZlcmVuY2VhYmxlX3R5cGUuICBBZGQgY29tbWVudC4KCVJlbmFtZSBgbm9kZScgdG8gYHR5cGUnLgoJKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IFNldCBudW1lcmljX291dHB1dF9uZWVkX2JhciBoZXJlLgoJVXNlIGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZS4gIFRpZHkuCgkoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogVGlkeS4gIERvbid0IHVzZSBOcmVwZWF0cy4gIFVzZQoJYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBEb24ndCBsb29rIGF0IERFQ0xfVEVNUExBVEVfSU5GTwoJZm9yIFRZUEVfREVDTHMuCgoxOTk4LTA3LTA4ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAod2Fybl9sb25nX2xvbmcpOiBEZWZpbmUuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBZGQgZmxhZyBgd2Fybl9sb25nX2xvbmcnIGFzIGd1YXJkIGZvcgoJd2FybmluZyAiQU5TSSBDKysgZG9lcyBub3Qgc3VwcG9ydCBgbG9uZyBsb25nJyIuCgkqIGRlY2wyLmMgKHdhcm5fbG9uZ19sb25nKTogRGVmaW5lLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFBhcnNlIC1XbG9uZy1sb25nLCAtV25vLWxvbmctbG9uZyBvcHRpb25zLgoKMTk5OC0wNy0wNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jICh4cmVmX3RhZyk6IEhhbmRsZSBhdHRyaWJ1dGVzIGJldHdlZW4gJ2NsYXNzJyBhbmQgbmFtZS4KCSogcGFyc2UueSAoYWdncik6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW4gKEVYUEVDVEVEKTogQWRqdXN0LgoKCSogY3AtdHJlZS5oOiBEZWNsYXJlIGZsYWdfb3B0aW9uYWxfZGlhZ3MgYW5kIHdhcm5fbXVsdGljaGFyLgoJKiBkZWNsMi5jOiBEZWZpbmUgdGhlbS4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgdGhlbS4KCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZm9wdGlvbmFsLWRpYWdzLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgbXVsdGlwbGUgbWVhbmluZ3Mgb2YgCgluYW1lIGlmIC1mbm8tb3B0aW9uYWwtZGlhZ3MuCgkqIGRlY2wuYyAocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBMaWtld2lzZS4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBDaGVjayB3YXJuX211bHRpY2hhci4KCjE5OTgtMDctMDYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX3RhZyk6IFVzZSBDUF9ERUNMX0NPTlRFWFQuCgoJKiB0cmVlLmMgKG1ha2VfYmluZm8pOiBGaXggbGVuZ3RoLgoKMTk5OC0wNi0zMCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBibGlzcy5uYWJpLm5ldD4KCiAgICAgICAgKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBSZW1vdmUgd2Fybl90ZW1wbGF0ZV9kZWJ1Z2dpbmcuCiAgICAgICAgKiBsYW5nLW9wdGlvbnMuaDogRGl0dG8uCgpNb24gSnVuIDI5IDIwOjE3OjQwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGV4Y2VwdC5jIChidWlsZF9laF90eXBlX3R5cGVfcmVmKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgc3VzcCcuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9jayk6IExpa2V3aXNlIGZvciB2YXJpYWJsZXMKCWBmYWxzZV9sYWJlbF9ydHgnLCBgY2FsbF9ydHgnIGFuZCBgcmV0dXJuX3ZhbHVlX3J0eCcuCgoxOTk4LTA2LTI5ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9zcmNsb2MpOiBNYWtlIHN1cmUgd2UgYWxsb2NhdGUgdGhpcyBub2RlIG9uIHRoZQoJcGVybWFuZW50IG9ic3RhY2suCgpTYXQgSnVuIDI3IDIzOjM0OjE4IDE5OTggIEZyZWQgRmlzaCAgPGZuZkBuaW5lbW9vbnMuY29tPgoKCSogZysrc3BlYy5jIChORUVEX01BVEhfTElCUkFSWSk6IERlZmluZSB0byAxIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBJbml0aWFsaXplIG5lZWRfbWF0aCB3aXRoIE5FRURfTUFUSF9MSUJSQVJZLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogT25seSBhZGQgLWxtIGF1dG9tYXRpY2FsbHkgaWYgbmVlZF9tYXRoIGlzCglub256ZXJvLgoKU2F0IEp1biAyNyAxMjoyMjo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgogICAgICAgICogTWFrZS1sYW5nLmluIChnKyspOiBEZXBlbmQgb24gbWtzdGVtcC5vLiAgTGluayBpbiBta3N0ZW1wLm8KClNhdCBKdW4gMjcgMDc6MzY6MDkgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKEVYUFJfSCk6IE5ldyBkZXBlbmRlbmN5IHZhcmlhYmxlLgoJKGRlY2wyLm8pOiBEZXBlbmQgb24gJChFWFBSX0gpLgoJKHR5cGVjay5vKTogTGlrZXdpc2UuCgkoaW5pdC5vKTogTGlrZXdpc2UuCgkoZXhwci5vKTogTGlrZXdpc2UuCgoxOTk4LTA2LTI1ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZW51bSk6IFB1dCBsb2NhbCBlbnVtcyBvbiBwZXJtYW5lbnRfb2JzdGFjay4KCjE5OTgtMDYtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGNfZ2V0X2FsaWFzX3NldCk6IERlY2xhcmUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgbGFuZ19nZXRfYWxpYXNfc2V0LgoKMTk5OC0wNi0yNSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChtYXJrX2FsbF9ydW50aW1lX21hdGNoZXMpOiBBZGQgZnVuY3Rpb24gcHJvdG90eXBlLgoJKiBleGNlcHQuYyAobWFya19hbGxfcnVudGltZV9tYXRjaGVzKTogU2V0IFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQKCWZsYWcgZm9yIGFsbCBmdW5jdGlvbiBkZWNscyB3aGljaCBhcmUgaW4gdGhlIGV4Y2VwdGlvbiB0YWJsZS4gCgkqIGV4Y2VwdGlvbi5jYyAoX19jcGx1c190eXBlX21hdGNoZXIpOiBDaGVjayBmb3IgQ0FUQ0hfQUxMX1RZUEUgbWF0Y2guCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogQ2FsbCBtYXJrX2FsbF9ydW50aW1lX21hdGNoZXMgdG8gbWFrZSBzdXJlCgljb2RlIGlzIGVtaXR0ZWQgZm9yIGFueSByZWZlcmVuY2VkIHJ0dGkgZnVuY3Rpb24uCgoxOTk4LTA2LTI1ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IFVzZSBuZXcgfCBzeW50YXggdG8gZWxpbWluYXRlCglzdHJpbmcgY29uY2F0ZW5hdGlvbi4KCjE5OTgtMDYtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoQ1BfREVDTF9DT05URVhUKTogTmV3IG1hY3JvLgoJKiBkZWNsMi5jIChpc19uYW1lc3BhY2VfYW5jZXN0b3IsIGxvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBVc2UgaXQuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IExpa2V3aXNlLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfb3JfcmVmZXJlbmNlX3R5cGUpOiBEb24ndCBzZXQKCURFQ0xfQ09OVEVYVC4KCjE5OTgtMDYtMjQgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCglTZXQgREVDTF9DT05URVhUIGZvciBnbG9iYWxzIHRvIE5VTExfVFJFRSBpbnN0ZWFkIG9mIGdsb2JhbF9uYW1lc3BhY2UuCgkqIGNwLXRyZWUuaCAoRlJPQl9DT05URVhUKTogTmV3IG1hY3JvLgoJKERFQ0xfTUFJTl9QKTogOjptYWluIHNob3VsZCBoYXZlIGEgREVDTF9DT05URVhUIG9mIE5VTExfVFJFRS4KCSogZGVjbC5jIChuYW1lc3BhY2VfYmluZGluZyk6IFJlcGxhY2UgTlVMTF9UUkVFIHdpdGgKCWdsb2JhbF9uYW1lc3BhY2UuCgkoc2V0X25hbWVzcGFjZV9iaW5kaW5nLCBwb3BfbmFtZXNwYWNlLCBsb29rdXBfbmFtZV9yZWFsKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGlzX25hbWVzcGFjZV9hbmNlc3RvciwgbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6CglMaWtld2lzZS4KCSogZGVjbC5jIChwdXNodGFnKTogVXNlIEZST0JfQ09OVEVYVC4KCShwdXNoZGVjbCwgbWFrZV90eXBlbmFtZV90eXBlLCBkZWZpbmVfZnVuY3Rpb24sIGdyb2tkZWNsYXJhdG9yKToKCUxpa2V3aXNlLgoJKiBkZWNsMi5jIChzZXRfZGVjbF9uYW1lc3BhY2UsIGRvX25hbWVzcGFjZV9hbGlhcyk6IExpa2V3aXNlLgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCwgbG9va3VwX3RlbXBsYXRlX2NsYXNzLCB0c3Vic3QpOgoJTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlY2xfbmFtZXNwYWNlKTogUmV0dXJuIGdsb2JhbF9uYW1lc3BhY2UgaWYgbm8gY29udGV4dC4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogRXhwZWN0IG51bGwgYXMgY29udGV4dC4KCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogRG8gbm90aGluZyBmb3IgbnVsbAoJY29udGV4dHMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogQWxsb3cgZm9yIG51bGwgaWRfY29udGV4dC4KCjE5OTgtMDYtMjUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2lzX3RodW5rIGZvciB0aGUKCUFTTV9PVVRQVVRfTUlfVEhVTksgY2FzZSBhcyB3ZWxsLgoKMTk5OC0wNi0yMyAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IEdldCBhIG1hdGNoX2luZm8gcG9pbnRlcgoJaW5zdGVhZCBvZiBhbiBleGNlcHRpb24gdGFibGUgZW50cnkgYXMgYSBwYXJhbWV0ZXIuCgoxOTk4LTA2LTIzICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBEb24ndCBjYWxsIHN0YXJ0X2NhdGNoX2hhbmRsZXIuCgkqIGV4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBSZW1vdmUgY29lcmNlZCBmaWVsZCBmcm9tIGRlY2xhcmF0aW9uLgoJKGJ1aWxkX2VoX3R5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGFkZHJlc3Mgb2YgYQoJcnR0aSBmdW5jdGlvbiBmb3IgdGhlIG5ldyBzdHlsZSBleGNlcHRpb24gdGFibGVzLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFNwbGl0IGZ1bmN0aW9uLCB0aGlzIGNvbnRhaW5zIHRoZQoJY29tbW9uIHBhcnQuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBOZXcgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgcmVzdAoJb2YgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrIHVuZGVyIG9sZCBzdHlsZSBleGNlcHRpb25zLgoJKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2tfb2xkKTogTmV3IGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHJlc3QKCW9mIGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayB1bmRlciBuZXcgc3R5bGUgZXhjZXB0aW9ucy4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogT25seSBwb3AgdGhlIGZhbHNlIGxhYmVsIG9mZiB0aGUgc3RhY2sgdW5kZXIKCXRoZSBvbGQgc3R5bGUgb2YgZXhjZXB0aW9ucy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90cnlfYmxvY2spOiBEb24ndCBjYWxsIHN0YXJ0X2NhdGNoX2hhbmRsZXIuCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBBZGQgb3JpZ2luYWxfdmFsdWUgZmllbGQuCgkoX19jcGx1c190eXBlX21hdGNoZXIpOiBQZXJmb3JtIHR5cGUgbWF0Y2hpbmcgb24gdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbgoJdmFsdWUsIGFuZCBpZiB3ZSBoYXZlIGEgbWF0Y2gsIHNldCB0aGUgY3VycmVudCB2YWx1ZS4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogU2V0IHRoZSBvcmlnaW5hbCBleHBjZXRpb24gdmFsdWUuCgoxOTk4LTA2LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGpvdXN0KTogRml4IGNvbmZ1c2luZyBjb252ZXJzaW9uIHdhcm5pbmcuCgoJKiBjYWxsLmMgKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogQWRkIHBsYWNlbWVudCBwYXJtLiAgQ2hlY2sKCUxPT0tVUF9TUEVDVUxBVElWRUxZLgoJKiBjcC10cmVlLmgsIGRlY2wyLmMsIGluaXQuYzogQWRqdXN0LgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBpdC4KCgkqIHB0LmMgKHRzdWJzdCk6IERpYWdub3NlIGNyZWF0aW5nIHZvaWQgZmllbGRzIG9yIHZhcmlhYmxlcy4KCk1vbiBKdW4gMjIgMDg6NTA6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgoKCSogY3AtdHJlZS5oIChjaGVja19kdG9yX25hbWUpOiBBZGQgcHJvdG90eXBlLgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYHB0cl90eXBlX25vZGUnLCBgcGFybScgYW5kIGBydmFsJy4KCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyBzcGVjaWZpZXIKCWluIGNhbGwgdG8gZnByaW50Zi4KCShsYW5nX3ByaW50X3hub2RlKTogTGlrZXdpc2UuCgoJKiB0eXBlY2syLmMgKGVudW1fbmFtZV9zdHJpbmcpOiBDYXN0IGFyZ3VtZW50IHRvIHNwcmludGYgdG8gbG9uZwoJYW5kIHVzZSAlbGQgc3BlY2lmaWVyLgoKCSogeHJlZi5jIChHTlVfeHJlZl9lbmRfc2NvcGUpOiBVc2UgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMKCXNwZWNpZmllciBpbiBjYWxsIHRvIGZwcmludGYuCgkoR05VX3hyZWZfbWVtYmVyKTogQ2FzdCBhcmd1bWVudCB0byBzcHJpbnRmIHRvIGludC4KCkZyaSBKdW4gMTkgMjM6MjI6NDIgMTk5OCAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCiAgICAgICAgKiB0eXBlY2syLmMgKHBvcF9pbml0X2xldmVsKTogV2FybiBhYm91dCBpbXBsaWNpdCB6ZXJvIGluaXRpYWxpemF0aW9uCiAgICAgICAgb2Ygc3RydWN0IG1lbWJlcnMuCgpUaHUgSnVuIDE4IDA5OjMyOjMyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLXRyZWUuaDogUHJvdG90eXBlIGZ1bmN0aW9uIGBjaGVja19qYXZhX21ldGhvZCcuCgoxOTk4LTA2LTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTWFrZSBjb25mbGljdGluZyB1c2Ugb2YgaWQgYSBwZWR3YXJuLgoJKiBkZWNsLmMgKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogTGlrZXdpc2UuCgoxOTk4LTA2LTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogSXNzdWUgYW4gZXJyb3Igd2hlbiBwcmVzZW50ZWQKCXdpdGggYW4gaW50ZWdlciAocmVhbCkgY29uc3RhbnQgdGhhdCBjYW5ub3QgYmUgc2ltcGxpZmllZCB0byBhbgoJSU5UX0NTVCAoUkVBTF9DU1QpLgoKCSogY3AtdHJlZS5oIChjX2dldF9hbGlhc19zZXQpOiBSZW1vdmUgZGVjbGFyYXRpb24gYWRkZWQgaW4KCTE5OTgtMDYtMTMgY2hhbmdlIHRoYXQgc2hvdWxkIG5ldmVyIGhhdmUgYmVlbiBjaGVja2VkIGluLgoKMTk5OC0wNi0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBDaGFuZ2UgJSBpbiBmb3JtYXQgc3RyaW5ncwoJdG8gJSUuCgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogRG9uJ3QgYnVpbGRfc3RhdGljX25hbWUgZm9yIGRlY2xzIHRoYXQKCWFyZW4ndCBhdCBuYW1lc3BhY2Ugc2NvcGUuCgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBDYXRjaCBkZWZhdWx0LWluaXRpYWxpemF0aW9uIG9mCglyZWZlcmVuY2VzLgoKMTk5OC0wNi0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGVycmZuLmMgKGNwX3RoaW5nKTogSGFuZGxlIHRoZSBgJSUnIGZvcm1hdHRpbmcgc2VxdWVuY2UuCgoxOTk4LTA2LTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQ29tcGxhaW4gYWJvdXQgZ2V0dGluZyBhIG5hbWVzcGFjZQoJb3IgY2xhc3MgdGVtcGxhdGUuCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogUmVtb3ZlIGNoZWNrIGZvciBuYW1lc3BhY2VzLgoJKiB0eXBlY2syLmMgKGluY29tcGxldGVfdHlwZV9lcnJvcik6IExpa2V3aXNlLgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9hcmcpOiBBZGQgUFRZUEVOQU1FIGV4cGFuc2lvbi4KCjE5OTgtMDYtMTYgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCBidWlsZCBleHRlcm5hbCBhc3NlbWJsZXIgbmFtZXMgZm9yIAoJVFlQRU5BTUVzIGluIG90aGVyIG5hbWVzcGFjZXMgYXMgdGhlcmUgaXMgbm8gZGVjbGFyYXRvci4KCSogZXJyb3IuYyAoY3BfZmlsZV9vZiwgY3BfbGluZV9vZik6IERvbid0IGV4dHJhY3QgZmlsZSBvciBsaW5lIG51bWJlcgoJaW5mbyBmcm9tIERFQ0xfQ09OVEVYVCBpZiBpdCBpcyBOVUxMLgoKMTk5OC0wNi0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjaGVja19kdG9yX25hbWUpOiBTcGxpdCBvdXQuCgkoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBVc2UgaXQuCgoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBGaXggaGFuZGxpbmcgb2YgcG9pbnRlcnMgdG8gbWVtYmVycy4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogSnVzdCByZXR1cm4gbm90aGluZyBmcm9tIGEgY29uc3RydWN0b3IuCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBDb21wbGFpbiBhYm91dCByZXR1cm5pbmcgYSB2b2lkCglleHByZXNzaW9uIGZyb20gYSBkZXN0cnVjdG9yLgoKMTk5OC0wNi0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2Vzcyk6IEFjY2VwdCBhIEJJTkZPIGV4cGxhaW5pbmcgaG93IHRvIGdldAoJZnJvbSB0aGUgZW50aXR5IHdob3NlIGFjY2Vzc2VkIGlzIGJlaW5nIGFsdGVyZWQgdG8gdGhlIHR5cGUgZG9pbmcKCXRoZSBhbHRlcmluZy4KCShoYW5kbGVfdXNpbmdfZGVjbCk6IE5ldyBmdW5jdGlvbiBjb250YWluaW5nIGNvZGUgc3BsaXQgb3V0IGZyb20gLi4uCgkoZmluaXNoX3N0cnVjdF8xKTogSGVyZS4KCgkqIGNwLXRyZWUuaCAoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogRGVjbGFyZS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSwgYnVpbGRfZGVsZXRlKTogVXNlIGl0LgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogVXNlIGNvbXBsZXRlX3R5cGUsIHJhdGhlciB0aGFuCglleHBhbmRpbmcgaXQgaW5saW5lLgoJKGNvbXBsZXRlX3R5cGVfb3JfZWxzZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9jb21wb25lbnRfcmVmKTogVXNlIGl0LgoJKHBvaW50ZXJfaW50X3N1bSk6IE1ha2Ugc3VyZSB0aGUgdHlwZSBwb2ludGVkIHRvIGlzIGNvbXBsZXRlLgoJKHBvaW50ZXJfZGlmZik6IExpa2V3aXNlLgoKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IFRyYXZlcnNlIHRoZSBUWVBFX0NPTlRFWFQgZm9yCgl0eXBlcy4gCgoJKiBzZWFyY2guYyAoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBOb3RlIHRoYXQgbWVtYmVyIHRlbXBsYXRlcwoJY2Fubm90IG92ZXJyaWRlIHZpcnR1YWwgZnVuY3Rpb25zLgoKMTk5OC0wNi0xMiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSWYgREVDTEFSQVRPUiB0dXJuZWQgaW50bwoJYW4gZXJyb3JfbWFya19ub2RlIGZyb20gbG9va3VwX3RlbXBsYXRlX2Z1bmN0aW9uLCByZXR1cm4gdGhlIHNhbWUuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQWxzbyBtYWtlIHN1cmUgVEVNUExBVEVfSUQgaXNuJ3QgYW4KCWVycm9yX21hcmtfbm9kZSwgYmVmb3JlIHdlIHRyeSB0byByZWFkIGl0cyBvcGVyYW5kcy4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IElmIHdlIGdvdCBhbiBlcnJvcl9tYXJrX25vZGUgZnJvbQoJY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24sIGp1c3QgcmV0dXJuIGl0IHJpZ2h0IGJhY2suCgoxOTk4LTA2LTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IHRyZWF0IHRlbXBsYXRlLWlkcyB0aGF0IGRvbid0CglzcGVjaWZ5IGFueSB0ZW1wbGF0ZSBhcmd1bWVudHMgYXMgZXF1aXZhbGVudCB0byBvcmRpbmFyeQoJaWRlbnRpZmllcnMuICBVc2UgT0ZGU0VUX1JFRiBpbnN0ZWFkIG9mIFNDT1BFX1JFRiB0byByZWZlciB0bwoJcG9pbnRlci10by1tZW1iZXJzIGZvciBtZW1iZXIgdGVtcGxhdGVzLiAgVGlkeSBzbGlnaHRseS4KCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0lEX0VYUFIpOiBSZXZpc2UgZG9jdW1lbnRhdGlvbi4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogSGFuZGxlIHRlbXBsYXRlLWlkcyBsaWtlIG9yZGluYXJ5CglpZGVudGlmaWVycywgZm9yIHRoZSBtb3N0IHBhcnQsIGJ1dCBzdG9yZSBhIFRFTVBMQVRFX0lEX0VYUFIgaW4gdGhlCglvZmZzZXQgcGFydCBvZiB0aGUgT0ZGU0VUX1JFRi4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogQ2hhbmdlIGNoZWNrIGZvciB1bmtub3duIHR5cGVzIHRvCglsb29rIGZvciBPRkZTRVRfUkVGcywgbm90IFNDT1BFX1JFRnMuCgoxOTk4LTA2LTExICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogVXNlIGl0LgoKMTk5OC0wNi0xMSAgQmVuamFtaW4gS29zbmlrICA8YmtvekBlbG1vLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogQWRkIHN1cHBvcnQgZm9yIG5lc3RlZCBjbGFzc2VzIHVzaW5nCiAJbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGFzIGZyaWVuZHMuCgoxOTk4LTA2LTEwICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbC5jIChjb252ZXJ0X2RlZmF1bHRfYXJnKTogTWFrZSBnbG9iYWwsIG5vdCBzdGF0aWMuCgkoY29udmVydF9hcmdfZm9yX2VsbGlwc2lzKTogU3BsaXQgb3V0IGZyb20gLi4uCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGVyZS4KCSogY3AtdHJlZS5oIChjb252ZXJ0X2RlZmF1bHRfYXJnKTsgRGVjbGFyZS4KCShjb252ZXJ0X2FyZ190b19lbGxpcHNpcyk6IExpa2V3aXNlLgoJKGRvX21lbWJlcl9pbml0KTogUmVtb3ZlLgoJKiBpbml0LmMgKGRvX21lbWJlcl9pbml0KTogUmVtb3ZlOyB0aGlzIGNvZGUgaXMgZGVhZC4KCShleHBhbmRfbWVtYmVyX2luaXQpOiBSZW1vdmUgbXVjaCBvZiB0aGlzIGNvZGU7IGl0IGlzIGRlYWQuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFVzZSBjb252ZXJ0X2RlZmF1bHRfYXJnIGFuZAoJY29udmVydF9hcmdfZm9yX2VsbGlwc2lzLCByYXRoZXIgdGhhbiBkdXBsaWNhdGluZyBoZXJlLgoJCgkqIGNhbGwuYyAoY29udmVydF9saWtlKTogRG9uJ3QgZmFpbCBzaWxlbnRseSBpZiAKCWJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uIGZhaWxzLiAgQWx3YXlzIHJldHVybiBlcnJvcl9tYXJrX25vZGUgCglmb3IgZmFpbHVyZS4KCjE5OTgtMDYtMTAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChjb3ZhcmlhbnRfcmV0dXJuX3ApOiBDb21wbGFpbiBhYm91dCBhbWJpZ3VvdXMgYmFzZS4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRGlhZ25vc2UgcmVmIHRvIG5lc3RlZCB0eXBlLgoKMTk5OC0wNi0xMCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogQ2hlY2sgdGhhdCBJTklUIGlzbid0IGFuIGVycm9yX21hcmtfbm9kZQoJYmVmb3JlIGdpdmluZyBlcnJvciBhYm91dCBpbnZhbGlkIHR5cGUgZm9yIGRlZmF1bHQgYXJnLgoKMTk5OC0wNi0xMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEZpeCB0aGlua28uCgoxOTk4LTA2LTEwICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgYXJnYy9hcmd2IGludGVyZmFjZS4KCSogY3AtdHJlZS5oIChsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgYXJnYy9hcmd2IGludGVyZmFjZS4KCSogbGFuZy1zcGVjcy5oIChkZWZhdWx0X2NvbXBpbGVycyk6IE9ubHkgY2FsbCBjcHAgaWYgLUUsIC1NIG9yIC1NTSBpcwoJc3BlY2lmaWVkIGZvciBjcHBsaWItZW5hYmxlZCBjb21waWxlcnMuCgkqIGxleC5jIChsYW5nX2luaXQpOiBEb24ndCBjaGVja19uZXdsaW5lIGZvciBjcHBsaWIuCgkoaW5pdF9wYXJzZSk6IERvbid0IGluaXRpYWxpemUgY3BwbGliIGhlcmUuCgoxOTk4LTA2LTEwICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBNYWtlIHN1cmUgRklFTEQgaGFzIGEgbGFuZ19zcGVjaWZpYwoJcGllY2UgYmVmb3JlIGNoZWNraW5nIERFQ0xfTVVUQUJMRV9QLgoKMTk5OC0wNi0xMCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiB0cmVlLmMgKGRlYnVnX2JpbmZvKTogTWFrZSBwcmludGYgZm9ybWF0IG1hdGNoIGFyZ3VtZW50cy4KCgkqIGVycm9yLmMgKE9CX1BVVEkpOiBNYWtlIHByaW50ZiBmb3JtYXQgbWF0Y2ggYXJndW1lbnRzLgoKMTk5OC0wNi0xMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogSGFuZGxlIGRlZmF1bHQtaW5pdGlhbGl6YXRpb24uCgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBIYW5kbGUgdGhyb3dpbmcgTlVMTC4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBVc2UgcmVzb2x2ZV9vZmZzZXRfcmVmLgoKCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogT25seSBzdHJpcCBhbiBhbm9ueW1vdXMgdW5pb24KCWZvciBhIEZJRUxEX0RFQ0wuCgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBUd2Vhay4KCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IFJlc3RvcmUgY29kZSBmb3IgY29udmVyc2lvbgoJZnJvbSBjbGFzcyB0eXBlcy4KCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IFVzZSBpdC4gIENsZWFuIHVwLgoKCSogdHlwZWNrLmMgKGNvbXBfcHRyX3R0eXBlc19yZWFsKTogRml4IGN2LXF1YWwgY29tcGFyaXNvbnMuCgoxOTk4LTA2LTEwICBCcmFua28gQ2liZWogIDxicmFua28uY2liZWpAaGVybWVzLnNpPgoKICAgICAgICAqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCB3YXJuIGFib3V0IHZvaWQgZXhwcmVzc2lvbnMgb24KICAgICAgICByZXR1cm4gc3RhdGVtZW50cyBpbiBmdW5jdGlvbnMgcmV0dXJuaW5nIHZvaWQuCgoxOTk4LTA2LTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoZm5fdHlwZV91bmlmaWNhdGlvbik6IFJldmlzZSBkb2N1bWVudGF0aW9uLiAgVGlkeS4KCSh0eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgoxOTk4LTA2LTA5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3RyeV9ibG9jayk6IFJlbmFtZSBleHBhbmRfc3RhcnRfY2F0Y2gsIGFuZCBkZWxldGUKCWV4cGFuZF9lbmRfY2F0Y2guCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IFJlbmFtZSBleHBhbmRfc3RhcnRfY2F0Y2gsIGFuZCBkZWxldGUKCWV4cGFuZF9lbmRfY2F0Y2guCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2VoX3NwZWMpOiBSZW5hbWUgZXhwYW5kX3N0YXJ0X2NhdGNoLCBhbmQgZGVsZXRlCglleHBhbmRfZW5kX2NhdGNoLgoKMTk5OC0wNi0wOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9tZW1iZXIpOiBOZXcgZm4uCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFVzZSBpdC4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogVXNlIGl0LgoKTW9uIEp1biAgOCAyMDo0NTo1MiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZGVjbDIubyk6IERlcGVuZCBvbiBkd2FyZjJvdXQuaCBhbmQgZHdhcmZvdXQuaC4KCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZSBmb3IgYG1heWJlX3ByaW50X3RlbXBsYXRlX2NvbnRleHQnIGFuZAogCWBtYXliZV9tYWtlX29uZV9vbmx5Jy4KCgkqIGRlY2wuYyAoYXV0b19mdW5jdGlvbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGRlY2wnLgoKCSogZGVjbDIuYzogSW5jbHVkZSBkd2FyZjJvdXQuaCBhbmQgZHdhcmZvdXQuaC4KCgkqIGxleC5jOiBSZW1vdmUgcmVkdW5kYW50IGRlY2xhcmF0aW9ucyBvZiBgc2V0X2Zsb2F0X2hhbmRsZXInIGFuZAogCWBhc21fb3V0X2ZpbGUnLgoKMTk5OC0wNi0wOCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBSZW1vdmUgTkVXX0VIX01PREVMIGNvbXBpbGUgCgl0aW1lIGZsYWcuICBDYWxsIF9fY3BfZWhfaW5mbyBpbnN0ZWFkIG9mIF9fY3BfZXhjZXB0aW9uX2luZm8uCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBSZW1vdmUgTkVXX0VIX01PREVMIGZsYWcuCgkoX19jcF9leGNlcHRpb25faW5mbyk6IFJldHVybiBvZmZzZXQgaW50byBjcF9laF9pbmZvIHN0cnVjdHVyZSB0byAKCW1hdGNoIHdoYXQgdXNlIHRvIGJlIHRoZSBzdGFydCBvZiB0aGlzIHN0cnVjdHVyZS4KCShfX2NwX2VoX2luZm8pOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJuIGEgcG9pbnRlciB0byBjcF9laF9pbmZvIHN0cnVjdC4KCShfX2NwbHVzX3R5cGVfbWF0Y2hlciwgX19jcF9wdXNoX2V4Y2VwdGlvbik6IFJlbW92ZSBORVdfRUhfTU9ERUwKCWNvbXBpbGUgdGltZSBmbGFnLgoJKF9fdW5jYXRjaF9leGNlcHRpb24sIF9fY2hlY2tfZWhfc3BlYywgc3RkOjp1bmNhdWdodF9leGNlcHRpb24pOiBDYWxsIAoJX19jcF9laF9pbmZvIGluc3RlYWQgb2YgX19jcF9leGNlcHRpb25faW5mby4KCjE5OTgtMDYtMDggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBEaXNhYmxlIGlubGluaW5nIG9mIGV4dGVybiBpbmxpbmVzCgl3aXRoIHN0YXRpYyB2YXJpYWJsZXMuCgoxOTk4LTA2LTA4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogQ29ycmVjdCBwcmV2aW91cyBjaGFuZ2UgdG8gdXNlIGJ1aWxkLAoJbm90IGJ1aWxkX21pbi4KCjE5OTgtMDYtMDcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogSGFuZGxlIHBvaW50ZXItdG8tbWVtYmVycyB3aGVyZSB0aGUKCW1lbWJlciBpcyBhIHRlbXBsYXRlLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgoxOTk4LTA2LTA3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGV4LmMgKGxhbmdfaW5pdF9vcHRpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGxhbmdfaW5pdCk6IFJlbW92ZSBmbGFnX2V4Y2VwdGlvbnMgPT0gMiBoYWNrLgoJCjE5OTgtMDYtMDUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChlbnZlbG9wZV9hZGRfZGVjbCk6IFR3ZWFrIGZvciBpbXBsaWNpdCB0eXBlbmFtZS4KCgkqIGNhbGwuYyAoam91c3QpOiBBbHNvIHdhcm4gYWJvdXQgY29uZnVzaW5nIGNvbnZlcnNpb24gb3AvY29uc3RydWN0b3IKCW92ZXJsb2FkIHJlc29sdXRpb24uCgoJKiBzcGV3LmMgKHl5bGV4KTogQWxzbyByZXR1cm4gdGhlIFRZUEVfREVDTCBpZiBnb3Rfb2JqZWN0LgoJRG9uJ3QgY2xlYXIgZ290X29iamVjdCBhZnRlciAnficuCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVHdlYWsgZGVzdHJ1Y3RvciBoYW5kbGluZy4KCShidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfY29weSwgY2FzZSBNRVRIT0RfQ0FMTF9FWFBSKTogRG9uJ3QgbWVzcyB3aXRoCglUWVBFX01BSU5fVkFSSUFOVCBmb3IgZGVzdHJ1Y3RvcnMuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfb2JqZWN0X2NhbGxfZXhwcik6IENvbXBsYWluIGFib3V0IGNhbGxpbmcgYQoJVFlQRV9ERUNMLgoKMTk5OC0wNi0wNSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBnKytzcGVjLmMgKGxhbmdfc3BlY2lmaWNfcHJlX2xpbmssIGxhbmdfc3BlY2lmaWNfZXh0cmFfb2ZpbGVzKToKCURlZmluZSAtIHVwZGF0ZSBuZWVkZWQgYnkgZ2NjLmMgY2hhbmdlLgoKMTk5OC0wNi0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoY3BfcHJpbnRlcnMpOiBVc2UgJ28nIGluc3RlYWQgb2YgJ18nIGZvciB0aGUgbnVsbCBlbnRyeS4KCjE5OTgtMDYtMDUgIE1hcnRpbiB2LiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBjcC10cmVlLmggKERFQ0xfTkFNRVNQQUNFX0FMSUFTLCBPUklHSU5BTF9OQU1FU1BBQ0UpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBBZGQgbmFtZXNwYWNlc19vbmx5IHBhcmFtZXRlci4KCUlmIHNldCwgcmV0dXJuIG9ubHkgTkFNRVNQQUNFX0RFQ0xzLgoJKHNlbGVjdF9kZWNsKTogTGlrZXdpc2UuCgkoaWRlbnRpZmllcl90eXBlX3ZhbHVlKTogR2l2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlci4KCShsb29rdXBfbmFtZV9ub25jbGFzcyk6IExpa2V3aXNlLgoJKGxvb2t1cF9uYW1lKTogTGlrZXdpc2UuCgkoZmluZF9iaW5kaW5nKTogU2tpcCBuYW1lc3BhY2UgYWxpYXNlcy4KCShiaW5kaW5nX2Zvcl9uYW1lKTogTGlrZXdpc2UuCgkocHVzaF9uYW1lc3BhY2UpOiBDaGVjayBmb3IgbmFtZXNwYWNlIGFsaWFzZXMuCgkobG9va3VwX25hbWVfbmFtZXNwYWNlX29ubHkpOiBOZXcgZnVuY3Rpb24uCgkoYmVnaW5fb25seV9uYW1lc3BhY2VfbmFtZXMsIGVuZF9vbmx5X25hbWVzcGFjZV9uYW1lcyk6IE5ldyBmdW5jdGlvbnMuCgkqIGRlY2wyLmMgKHNldF9kZWNsX25hbWVzcGFjZSk6IFNraXAgbmFtZXNwYWNlIGFsaWFzZXMuCgkoZG9fdXNpbmdfZGlyZWN0aXZlKTogTGlrZXdpc2UuCgkoZG9fbmFtZXNwYWNlX2FsaWFzKTogUHJvZHVjZSBuYW1lc3BhY2UgYWxpYXNlcywgZml4IGFsaWFzIAoJcmVkZWNsYXJhdGlvbi4KCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogU3VwcG9ydCBTQ09QRV9SRUYuCgkqIHBhcnNlLnkgKGV4dGRlZik6IFdyYXAgbG9va3VwIHdpdGggbmFtZXNwYWNlX29ubHkgZm9yIG5hbWVzcGFjZQoJYWxpYXNlcyBhbmQgdXNpbmcgZGVjbGFyYXRpb25zLgoKMTk5OC0wNi0wNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IE9ubHkgc2VlIHRocm91Z2ggb25lIFRSRUVfTElTVC4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IENsZWFuIHVwIE5FV19FWFBSIGNhc2UuCgoxOTk4LTA2LTA0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCVN1Z2dlc3RlZCBieSBCcmVuZGFuIEtlaG9lCgkqIGRlY2wyLmMgKGRvX3RvcGxldmVsX3VzaW5nX2RlY2wpOiBXaGVuIGRlY2wgaXMgYSBUWVBFX0RFQ0wsCgl0cmVhdCBpdCBhcyB1c2luZyA6OmRlY2wuCgoJKiBkZWNsMi5jIChhcmdfYXNzb2NfdHlwZSk6IFByb2Nlc3MgdW5rbm93bl90eXBlX25vZGUgYW5kIE9GRlNFVF9UWVBFLgoKCSogdHJlZS5jIChtYXBjYXIpOiBTdXBwb3J0IE5FV19FWFBSLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogU3VwcG9ydCBORVdfRVhQUi4KCjE5OTgtMDYtMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVXNlIG92ZXJsb2FkIG1hY2hpbmVyeSB0byBtYWtlIG5hbWUuCgkqIHNlYXJjaC5jIChjb3ZhcmlhbnRfcmV0dXJuX3ApOiBOZXcgZm4uCgkoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBVc2UgaXQuCgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogRml4IGNoZWNrIGZvciB2b2lkLgoKMTk5OC0wNi0wMSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfRk9SX0pBVkEpOiAgTmV3IG1hY3JvLgoJKiBkZWNsLmMsIGNwLXRyZWUuaCAoamF2YV9ieXRlX3R5cGVfbm9kZSwgamF2YV9zaG9ydF90eXBlX25vZGUsCglqYXZhX2ludF90eXBlX25vZGUsIGphdmFfbG9uZ190eXBlX25vZGUsIGphdmFfZmxvYXRfdHlwZV9ub2RlLAoJamF2YV9kb3VibGVfdHlwZV9ub2RlLCBqYXZhX2NoYXJfdHlwZV9ub2RlLCBqYXZhX2Jvb2xlYW5fdHlwZV9ub2RlKToKCU5ldyAicHJpbWl0aXZlIiB0eXBlcywgd2l0aCBwcmVkZWZpbmVkIG5hbWVzIF9famF2YV9ieXRlIGV0Yy4KCShyZWNvcmRfYnVpbHRpbl9qYXZhX3R5cGUpOiAgTmV3IGZ1bmN0aW9uLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIE1ha2UgSmF2YSB0eXBlcyB3aXRoIHJlY29yZF9idWlsdGluX2phdmFfdHlwZS4KCShwdXNodGFnLCBncm9rZGVjbGFyYXRvcik6ICBTZXQgVFlQRV9GT1JfSkFWQSBpZiBpbiBleHRlcm4gIkpBVkEiLgoJKHhyZWZfYmFzZXlwZXMpOiAgSWYgYmFzZSBjbGFzcyB3YXMgVFlQRV9GT1JfSkFWQSwgc28gaXMgdGhpcyBjbGFzcy4KCShncm9rZm5kZWNsKTogIENhbGwgY2hlY2tfamF2YV9tZXRob2QgZm9yIEphdmEgY2xhc3Nlcy4KCSogbWV0aG9kLmMgKGlzX2phdmFfdHlwZSk6ICBSZW1vdmVkLiAgUmVwbGFjZWQgd2l0aCBUWVBFX0ZPUl9KQVZBLgoJKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6ICBNYXRjaCB0eXBlcyBhZ2FpbnN0IHNwZWNpZmljCglqYXZhX1hYX3R5cGVfbm9kZSB0eXBlcywgcmF0aGVyIHRoYW4gdXNpbmcgaXNfamF2YV90eXBlLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiAgRG9uJ3QgYWRkIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcgoJb3Igb3BlcmF0b3I9IGlmIFRZUEVfRk9SX0pBVkEuCgkocG9wX2xhbmdfY29uZXh0KTogIFJlc3RvcmUgc3RyaWN0X3Byb3RvdHlwIHByb3BlciBpZiBKYXZhLgoJKiBkZWNsMi5jIChhY2NlcHRhYmxlX2phdmFfdHlwZSwgY2hlY2tfamF2YV9tZXRob2QpOiAgTmV3IGZ1bmN0aW9ucy4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiAgQ29weSBUWVBFX0ZPUl9KQVZBIGZyb20gcGF0dGVybi4KCSh0c3Vic3QpOiAgTW92ZSBjb21tb24gc3RhdGVtZW50IGFmdGVyIGlmIHN0YXRlbWVudC4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6ICBJZiBzdHJpY3QsIFRZUEVfRk9SX0pBVkEgbXVzdCBtYXRjaC4KCjE5OTgtMDYtMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBVc2UgZmlyc3RfcnRsX29wLgoKCSogdHJlZS5jIChidWlsZF9jcGx1c19hcnJheV90eXBlXzEpOiBBbHNvIGNoZWNrIGluZGV4X3R5cGUgZm9yCgl0ZW1wbGF0ZSBwYXJtcy4KCjE5OTgtMDUtMzEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IEFsd2F5cyBjb3B5IEJJTkZPX0JBU0VUWVBFUy4KCjE5OTgtMDUtMjkgIHNjb3R0IHNueWRlciAgPHNueWRlckBkMHNnaWYuZm5hbC5nb3Y+CgoJKiB0cmVlLmMgKGxheW91dF9iYXNldHlwZXMpOiBJZiB3ZSBjaGFuZ2UgVFlQRV9TSVpFLCBjaGFuZ2UKCVRZUEVfU0laRV9VTklUIHRvby4KCjE5OTgtMDUtMjkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgaW4tY2xhc3MKCWluaXRpYWxpemF0aW9uIG9mIHN0YXRpYyBjb25zdHMgaWYgd2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIHR5cGUKCW9mIHRoZSB2YXJpYWJsZS4KCjE5OTgtMDUtMjkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9ERVNUUlVDVE9SX1ApOiBOZXcgbWFjcm8uCgkqIG1ldGhvZC5jIChidWlsZF9kZXN0cnVjdG9yX25hbWUpOiBOZXcgZm4uCgkqIGRlY2wyLmMgKG1heWJlX3JldHJvZml0X2luX2NocmcpOiBTcGxpdCBvdXQuLi4KCShncm9rY2xhc3Nmbik6IEZyb20gaGVyZS4gIFJlb3JnYW5pemUuCgkqIGRlY2wuYyAoZ3Jva19jdG9yX3Byb3BlcnRpZXMpOiBNYWtlIHN1cmUgY3RvcnMgZm9yIHR5cGVzIHdpdGggCgl2YmFzZXMgaGF2ZSB0aGUgaW5fY2hyZyBwYXJtLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVwZGF0ZSAKCVRZUEVfVVNFU19WSVJUVUFMX0JBU0VDTEFTU0VTIGZyb20gdHN1YnN0ZWQgYmFzZXMuICBEb24ndCBjYWxsCglncm9rXypfcHJvcGVydGllcy4KCSh0c3Vic3QpOiBDYWxsIGdyb2tfY3Rvcl9wcm9wZXJ0aWVzIGFuZCBtYXliZV9yZXRyb2ZpdF9pbl9jaHJnLgoKMTk5OC0wNS0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBNYWtlIHRlc3QgZm9yIHdoZXRoZXIgb3Igbm90IHN0YXRpYwoJdmFyaWFibGVzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgZWFybHkgbWF0Y2ggaXRzIGNvbW1lbnQuCgoxOTk4LTA1LTI4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBBbHdheXMgcGVkd2FybiBhYm91dCB2YWN1b3VzbHkgcmVkZWNsYXJpbmcgCglhIG1lbWJlci4KCShzdGFydF9mdW5jdGlvbik6IENhbGwgY2hlY2tfZGVmYXVsdF9hcmdzLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBEb24ndCBjYWxsIGNoZWNrX2RlZmF1bHRfYXJncy4KCShjaGVja19kZWZhdWx0X2FyZ3MpOiBVc2UgY3BfZXJyb3JfYXQuCgkqIGxleC5jIChkb19wZW5kaW5nX2RlZmFyZ3MpOiBDYWxsIGNoZWNrX2RlZmF1bHRfYXJncy4KCjE5OTgtMDUtMjcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTWFrZSBzdXJlIGdldF90eXBlX3ZhbHVlIHJldHVybnMKCXNvbWV0aGluZyBiZWZvcmUgd2UgdHJ5IHRvIHVzZSBpdHMgVFlQRV9NQUlOX1ZBUklBTlQuCgkoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgoxOTk4LTA1LTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKGRpZ2VzdF9pbml0KTogQ29tcGxhaW4gYWJvdXQgZ2V0dGluZyBhIFRSRUVfTElTVCB0bwoJaW5pdGlhbGl6ZSBhbiBhcnJheS4KCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IERvbid0IHNldCBERUNMX0NPTlRFWFQgYW5kCglERUNMX1ZJUlRVQUxfUC4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBDbGFyaWZ5IHRlbXBsYXRlIHdhcm5pbmcuCgoxOTk4LTA1LTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChzaGFkb3dfbGFiZWwpOiBEb24ndCB0cmVhdCBkZWNscyBhcyBpZGVudGlmaWVycy4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IENsZWFyIHNoYWRvd2VkX2xhYmVscy4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBSZXNldCBsaW5lbm8gYW5kIGZpbGVuYW1lIGFmdGVyIGNhbGxpbmcKCXJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlLiAKCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCB0cnkgdG8gdXNlIFRZUEVfT0JTVEFDSyBvbiBhbgoJZXJyb3JfbWFya19ub2RlLgoKMTk5OC0wNS0yNyAgS2V2aW4gQnVociAgPGJ1aHJAc3RhdC53aXNjLmVkdT4KCgkqIHBhcnNlLnkgKGJhc2VfY2xhc3MpOiBVc2UgaXNfYWdncl90eXBlLCBub3QgSVNfQUdHUl9UWVBFLgoKMTk5OC0wNS0yNiAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEFjY2VwdCBUWVBFTkFNRV9UWVBFIG5vZGVzLgoJKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IEhhbmRsZSBjYXNlcyB3aGVuIG5vbnR5cGUgdGVtcGxhdGUKCXBhcmFtZXRlcnMgYmVjb21lIGNsYXNzZXMgYWZ0ZXIgc3Vic3RpdHV0aW9uLgoKMTk5OC0wNS0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBVc2UgY29tcHR5cGVzLCByYXRoZXIgdGhhbiA9PSB0byBjb21wYXJlCgl0eXBlcy4gIE1vZGlmeSBmb3IgbmV3IHJlcHJlc2VudGF0aW9uIG9mIHRlbXBsYXRlIGZyaWVuZHMuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IFVuZG8gMTk5OC0wNS0yMSBjaGFuZ2UuICBUd2Vhay4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERlYWwgd2l0aCB0ZW1wbGF0ZSBmcmllbmRzLgoKCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIHRvCglleHBhbmRfbWFpbl9mdW5jdGlvbi4KCjE5OTgtMDUtMjYgIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IENoZWNrIGZvciBERUNMX0xBTkdfU1BFQ0lGSUMgYmVmb3JlCiAJREVDTF9VU0VfVEVNUExBVEUuCgoxOTk4LTA1LTI2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGxhbmd1YWdlX2FzX3N0cmluZzogIEhhbmRsZSBsYW5nX2phdmEuCgoxOTk4LTA1LTI2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3QgY29weSB0aGUgdHlwZV9kZWNsLgoKMTk5OC0wNS0yNiAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY2xhc3MuYyAocHVzaGNsYXNzKTogQWx3YXlzIHN0b3JlIFRZUEVfTUFJTl9WQVJJQU5UIGluCgljdXJyZW50X2NsYXNzX3R5cGUuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBQdXQgdHlwZWRlZnMgb24gdGhlIHR5cGUncyBvYnN0YWNrLgoKCSogcGFyc2UueSAoY29tcGxleF9kaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBVc2UgJDEgdG8gYWNjZXNzCglzY29wZSBvZiBub3R5cGVfcXVhbGlmaWVkX2lkLgoKMTk5OC0wNS0yNiAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmMgKHBhcnNlX29wdGlvbnMseXlfY3VyLHl5X2xpbSk6IEFkZCBmb3IgY3BwbGliLgoJKGluaXRfcGFyc2UpOiBJbml0aWFsaXplIGNwcGxpYiBpbnRlcmZhY2UuCgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBNYWtlIHN1cmUgZGVwZW5kZW5jaWVzIG5ldmVyIGVuZCB3aXRoIGFuCgllbXB0eSBjb250aW51YXRpb24uCgoxOTk4LTA1LTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChwdXNodGFnKTogQXZvaWQgY3Jhc2hpbmcgb24gZXJyb25lb3VzIGlucHV0LgoKMTk5OC0wNS0yNSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IE9ubHkgcHJvZHVjZSBvbmUgdW5pcXVlIG5hbWUgZm9yCglhbm9ueW1vdXMgbmFtZXNwYWNlcy4KCShnZXRfdW5pcXVlX25hbWUpOiBSZW1vdmUuCgoxOTk4LTA1LTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbC5jICh0b3VybmV5KTogRG9uJ3QgZG8gYW55IGV4dHJhIGNvbXBhcmlzb25zLgoKCSogZGVjbDIuYyAoYnVpbGRfYW5vbl91bmlvbl92YXJzKTogRG9uJ3QgY3Jhc2ggb24gZW1wdHkgc3ViLXVuaW9ucy4KCgkqIGNwLXRyZWUuaCAocHJvY2Vzc2luZ190ZW1wbGF0ZV9wYXJtbGlzdCk6IERlY2xhcmUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IERvbid0IGNhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIHdoZW4gd2UKCXNob3VsZG4ndC4gCgkqIHB0LmMgKHByb2Nlc3NpbmdfdGVtcGxhdGVfcGFybWxpc3QpOiBOZXcgdmFyaWFibGUuCgkoVE1QTF9BUkdTX0hBVkVfTVVMVElQTEVfTEVWRUxTKTogTmV3IG1hY3JvLgoJKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBVc2UgaXQuCgkoYWRkX3RvX3RlbXBsYXRlX2FyZ3MpOiBMaWtld2lzZS4KCShpbm5lcm1vc3RfYXJncyk6IExpa2V3aXNlLgoJKHRzdWJzdCk6IExpa2V3aXNlLgoJKGJlZ2luX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IFVzZSBwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0LgoJKGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBMaWtld2lzZS4KCgkqIGNwLXRyZWUuaCAoQU5PTl9VTklPTl9UWVBFX1ApOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoaW5pdGlhbGl6aW5nX2NvbnRleHQpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCShkb19idWlsZF9hc3NpZ25fcmVmKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IExpa2V3aXNlLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGdpdmUgYSBjdi1xdWFsaWZpZWQgdmVyc2lvbiBvZiBhbgoJdW5uYW1lZCB0eXBlIGEgdHlwZWRlZiBuYW1lICJmb3IgbGlua2FnZSBwdXJwb3NlcyIuCgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBsb29rIGF0CglJREVOVElGSUVSX0NMQVNTX1ZBTFVFIHdoZW4gdGhlcmUncyBubyBjdXJyZW50X2NsYXNzX3R5cGUuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50KTogSGFuZGxlIGVycm9yIGNhc2VzIGdyYWNlZnVsbHkuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogSGFuZGxlIHN0YXRpYyBtZW1iZXIgdmFyaWFibGVzCgljb3JyZWN0bHkuCgoJKiBwdC5jICh0c3Vic3QpOiBVc2UgdGhlIHRzdWJzdCdkIHR5cGUgd2hlbiBwcm9kdWNpbmcgbmV3CglURU1QTEFURV9QQVJNX0lOREVYIG5vZGVzLgoKMTk5OC0wNS0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHRyZWUuYyAoY3BfdHJlZV9lcXVhbCk6IEhhbmRsZSBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rpb25zLgoKCSogY2FsbC5jIChtYXliZV9oYW5kbGVfaW1wbGljaXRfb2JqZWN0KTogSGFuZGxlIFFVQUxfQ09OVnMuICBNYWtlCglzdXJlIHRoZSB0eXBlIG9mIHRoZSBSRUZfQklORCBpcyBhIHJlZmVyZW5jZSB0eXBlLgoJKG1heWJlX2hhbmRsZV9yZWZfYmluZCwgY29tcGFyZV9pY3MpOiBSZW5hbWUgcmVmZXJlbmNlX3R5cGUgdG8KCXRhcmdldF90eXBlIGZvciBjbGFyaXR5LgoKCSogcGFyc2UueSAoeGNvbmQpOiBNb3ZlIGNhbGwgdG8gY29uZGl0aW9uX2NvbnZlcnNpb24gLi4uCgkqIHNlbWFudGljcy5jIChmaW5pc2hfZm9yX2NvbmQpOiBIZXJlLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCQoxOTk4LTA1LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogTmFtZXNwYWNlcyBoYXZlIHR5cGUgdm9pZC4KCSogdHlwZWNrMi5jIChpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBDb21wbGFpbiBhYm91dCBuYW1lc3BhY2UKCXVzZWQgYXMgZXhwcmVzc2lvbi4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCjE5OTgtMDUtMjQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBTdXBwb3J0IG5hbWVzcGFjZXMuCgoxOTk4LTA1LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmRlZjogQWRkIFNSQ0xPQy4KCSogY3AtdHJlZS5oOiBBZGQgc3RydWN0IHRyZWVfc3JjbG9jIGFuZCBhY2Nlc3NvciBtYWNyb3MuCgkqIHRyZWUuYyAoYnVpbGRfc3JjbG9jLCBidWlsZF9zcmNsb2NfaGVyZSk6IE5ldyBmbnMuCgkqIHB0LmMgKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogVXNlIGJ1aWxkX3NyY2xvY19oZXJlLgoJKHB1c2hfdGluc3RfbGV2ZWwpOiBVcGRhdGUgbGFzdF90ZW1wbGF0ZV9lcnJvcl90aWNrIGJlZm9yZSBlcnJvcmluZy4KCShpbnN0YW50aWF0ZV9kZWNsKTogUmVzdG9yZSBsaW5lbm8gYW5kIGlucHV0X2ZpbGVuYW1lIGJlZm9yZSAKCWNhbGxpbmcgYWRkX3BlbmRpbmdfdGVtcGxhdGUuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogU2V0IHVwIGxpbmVubyBhbmQgaW5wdXRfZmlsZW5hbWUgZm9yCglwZW5kaW5nIHRlbXBsYXRlcy4KCjE5OTgtMDUtMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobGFuZ19wcmludF9lcnJvcl9mdW5jdGlvbik6IE5ldyBmbi4gIAoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHByaW50X2Vycm9yX2Z1bmN0aW9uIHRvIHVzZSBpdC4KCSogZXJyZm4uYyAoY3BfdGhpbmcpOiBEb24ndCBjYWxsIG1heWJlX3ByaW50X3RlbXBsYXRlX2NvbnRleHQgaGVyZS4KCgkqIGNhbGwuYyAobWF5YmVfaGFuZGxlX3JlZl9iaW5kKTogUHJvcGFnYXRlIElDU19VU0VSX0ZMQUcgYW5kCglJQ1NfQkFEX0ZMQUcuCgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBEb24ndCBzZXQgTE9PS1VQX05PX0NPTlZFUlNJT04gZm9yCgljb3B5LWluaXRpYWxpemF0aW9uLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogVXNlIGludF9maXRzX3R5cGVfcC4KCShidWlsZF92dGFibGUpOiBQYXNzIGEgc2lnbmVkIG9mZnNldCB0byBidWlsZF92dGFibGVfZW50cnkuCgkocHJlcGFyZV9mcmVzaF92dGFibGUsIG1vZGlmeV9vbmVfdnRhYmxlLCBmaXh1cF92dGFibGVfZGVsdGFzMSwKCXNldF9ydHRpX2VudHJ5KTogTGlrZXdpc2UuCgoxOTk4LTA1LTIyICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogIEFkZCBjb21tZW50cyBkb2N1bWVudGluZyB3aGljaCBMQU5HX0ZMQUdTIGFyZSB1c2VkLgoJKENfVFlQRV9WQVJJQUJMRV9TSVpFLCBDX0RFQ0xfVkFSSUFCTEVfU0laRSk6ICBSZW1vdmVkLCBub3QgdXNlZC4KCjE5OTgtMDUtMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBVc2UgZnByaW50ZiBpbnN0ZWFkIG9mIGNwX2Vycm9yLgoKCSogcHQuYyAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogSnVzdCByZXR1cm4gYW4gZXJyb3JfbWFya19ub2RlLgoJQWxzbyBwcmludCB0aGUgZGVjbCB3ZSB3YW50IGluIGVycm9yIG1lc3NhZ2VzLiAgSWYgd2UgY29tcGxhaW4sCglyZXR1cm4gZXJyb3JfbWFya19ub2RlLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBTZXQgbGluZW5vIGFuZCBpbnB1dF9maWxlbmFtZSBzbyAKCWVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgdXNlZnVsLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogSnVzdCByZXR1cm4gYW4gZXJyb3JfbWFya19ub2RlLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRG9uJ3QgbWVzcyB3aXRoIGEgcmV0dXJuZWQKCWVycm9yX21hcmtfbm9kZS4KCgkqIHB0LmMgKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBBZGQgbmV3IGFyZ3VtZW50LgoJKG1heWJlX3ByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBOZXcgZm4uCgkocHVzaF90aW5zdF9sZXZlbCk6IEluY3JlbWVudCB0aW5zdF9sZXZlbF90aWNrLgoJKHBvcF90aW5zdF9sZXZlbCk6IExpa2V3aXNlLgoJKiBlcnJmbi5jIChjcF90aGluZyk6IENhbGwgbWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dC4gIFVzZQoJeHJlYWxsb2MgaW5zdGVhZCBvZiB4bWFsbG9jLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wLCBDT05WRVJUX0VYUFIpOiBQcm9wYWdhdGUgVFJFRV9DT05TVEFOVC4KCjE5OTgtMDUtMjEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9mcmllbmRfY2xhc3MpOiBEb24ndCBjYWxsIHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZQoJaWYgdGhlIHRlbXBsYXRlIHdlIGxvb2tlZCB1cCBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHdlIGFscmVhZHkKCWhhdmUuCgpUaHUgTWF5IDIxIDExOjU0OjQ0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jOiAoaGFuZGxlX3N5c3ZfcHJhZ21hKTogRklMRSogcGFyYW1ldGVyIG5vdCB1c2VkLgoJKGNwcF9yZWFkZXIscGFyc2VfaW4pOiBBZGQgZm9yIGNwcGxpYi4KCShjaGVja19uZXdsaW5lKTogQ2FsbCBoYW5kbGVfc3lzdl9wcmFnbWEgd2l0aCBuZXcgaW50ZXJmYWNlLgoJKGNoZWNrX25ld2xpbmUpOiBDYWxsIEdFVF9ESVJFQ1RJVkVfTElORSwgbm90IGdldF9kaXJlY3RpdmVfbGluZS4KCgkqIGlucHV0LmM6ICh5eV9jdXIseXlfbGltLHl5X2dldF90b2tlbixHRVRDKTogQWRkIGZvciBjcHBsaWIuCgkoc3ViX2dldGNoKTogQ2FsbCBHRVRDIGZvciBjcHBsaWIuCgoJKiBjcC10cmVlLmg6IChnZXRfZGlyZWN0aXZlX2xpbmUpOiBEaWZmZXJlbnQgcHJvdG90eXBlIGZvciBjcHBsaWIuCgkoR0VUX0RJUkVDVElWRV9MSU5FKTogTWFjcm8gd3JhcHBlciBmb3IgZ2V0X2RpcmVjdGl2ZV9saW5lLgoKCSogTWFrZWZpbGUuaW4gKENYWF9PQkpTKTogYWRkIEBleHRyYV9jeHhfb2Jqc0AgZm9yIGNwcGxpYi4KCjE5OTgtMDUtMjEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1heWJlX21ha2Vfb25lX29ubHkpOiBOZXcgZm4uCgkoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBVc2UgaXQuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogTGlrZXdpc2UuCgkqIHB0LmMgKG1hcmtfZGVjbF9pbnN0YW50aWF0ZWQpOiBMaWtld2lzZS4KCjE5OTgtMDUtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wyLmMgKGZpbmRfcmVwcmVzZW50YXRpdmVfbWVtYmVyKTogUmVuYW1lIHRvIC4uLgoJKGJ1aWxkX2Fub25fdW5pb25fdmFycyk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfYW5vbl91bmlvbik6IEZpeCBzdHVwaWRpdHkgb2YgcHJldmlvdXMgY2hhbmdlLgoKMTk5OC0wNS0yMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogSGFuZGxlIGRlZmluaXRpb24gb2Ygc3BlY2lhbGl6YXRpb24gaW4KCWZyaWVuZCBkZWNsYXJhdGlvbi4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEZpeCBMT09LVVBfRVhQUiBoYW5kbGluZy4KCjE5OTgtMDUtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNsYXNzLmMgKGRlbGV0ZV9kdXBsaWNhdGVfZmllbGRzXzEpOiBVc2UgREVDTF9ERUNMQVJFU19UWVBFX1AKCXRvIGxvb2sgZm9yIHR5cGUgZGVjbGFyYXRpb25zLgoJKGZpbmlzaF9zdHJ1Y3QpOiBEZWFsIHdpdGggdGVtcGxhdGVzIG9uIHRoZSBDTEFTU1RZUEVfVEFHUyBsaXN0LgoJKiBjcC10cmVlLmggKERFQ0xfREVDTEFSRVNfVFlQRV9QKTogTmV3IG1hY3JvLgoJKGZpbmlzaF9tZW1iZXJfY2xhc3NfdGVtcGxhdGUpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBQdXQgbWVtYmVyIGNsYXNzIHRlbXBsYXRlcyBvbiB0aGUKCUNMQVNTVFlQRV9UQUdTIGxpc3QsIGp1c3QgYXMgZm9yIG9yZGluYXJ5IG1lbWJlciBjbGFzc2VzLgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogVXNlIERFQ0xfREVDTEFSRVNfVFlQRV9QLgoJKGxvb2t1cF90YWcpOiBMb29rIGZvciBJREVOVElGSUVSX0NMQVNTX1ZBTFVFcywganVzdCBhcyB3aXRoCglJREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRXMuIAoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbCk6IE1vdmUgY29kZSB0byAuLi4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9tZW1iZXJfY2xhc3NfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uICAKCURvbid0IHB1dCBtZW1iZXIgY2xhc3MgdGVtcGxhdGVzIG9uIHRoZSBsaXN0IG9mIGNvbXBvbmVudHMgZm9yIGEKCWNsYXNzLiAKCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBEb24ndCB0cnkgREVDTF9DT05URVhUIG9uIHR5cGVzLgoJSW4gZmFjdCwgZG9uJ3QgdXNlIERFQ0xfQ09OVEVYVCBhdCBhbGwgaGVyZS4KCjE5OTgtMDUtMjAgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChyZWNvcmRfdW5rbm93bl90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBpdCBmb3IgdGhlIHVua25vd24gYW5kIGdsb2JhbCB0eXBlCglub2Rlcy4KCjE5OTgtMDUtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wyLmMgKGZpbmRfcmVwcmVzZW50YXRpdmVfbWVtYmVyKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogVXNlIGl0LgoKCSogY3AtdHJlZS5oIChNQUlOX05BTUVfUCk6IE5ldyBtYWNyby4KCShERUNMX01BSU5fUCk6IExpa3dpc2UuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBBdm9pZCBjcmFzaGluZyBvbiByZWRlZmluaXRpb25zIG9mIGBtYWluJy4KCShncm9rZm5kZWNsKTogVXNlIHRoZSBuZXcgbWFjcm9zLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoZmluc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCldlZCBNYXkgMjAgMDI6MTY6MDEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoc3RhcnRfb2JqZWN0cywgZmluaXNoX29iamVjdHMsIGRvX2R0b3JzLAoJZG9fY3RvcnMpOiBTcGxpdCBvdXQgZnJvbS4uLgoJKGZpbmlzaF9maWxlKTogLi4uaGVyZS4KClR1ZSBNYXkgMTkgMjA6MzY6MjMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuKTogRG9uJ3QgYWJvcnQgb24gcGxhY2Vob2xkZXJzIGZyb20KCXB1c2hfY2xhc3NfZGVjbHMuCgpUdWUgTWF5IDE5IDE1OjE2OjIyIDE5OTggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChpc19lbXB0eV9jbGFzcyk6IFJldHVybiAwIGlmIFRZUEUgaXMgYW4gZXJyb3JfbWFya19ub2RlLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogSGFuZGxlIGFuIEFSUk9XX0VYUFIuCgpUdWUgTWF5IDE5IDE1OjEzOjM5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAoc2F2ZWFibGVfb2JzdGFjayk6IERlY2xhcmUuCgkocHVzaGRlY2wpOiBDb3B5IFRZUEVfREVDTHMgdG8gdGhlIHNhbWUgb2JzdGFjayBhcyB0aGUgdHlwZSB0aGV5CglkZWNsYXJlLCBpZiBuZWNlc3NhcnkuCgpUdWUgTWF5IDE5IDE0OjUwOjI3IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAoY29tcGFyZV9xdWFsKTogUmVtb3ZlLgoJKGlzX3N1YnNlcSk6IFR3ZWFrLgoJKGlzX3Byb3Blcmx5X2Rlcml2ZWRfZnJvbSk6IE5ldyBmdW5jdGlvbi4KCShtYXliZV9oYW5kbGVfcmVmX2JpbmQpOiBMaWtld2lzZS4KCShtYXliZV9oYW5kbGVfaW1wbGljaXRfb2JqZWN0KTogTGlrZXdpc2UuCgkoY29tcGFyZV9pY3MpOiBNb2RpZnkgc3Vic3RhbnRpYWxseSB0byBicmluZyBpbnRvIGNvbmZvcm1hbmNlIHdpdGgKCXRoZSBzdGFuZGFyZC4KCSogY3AtdHJlZS5oIChUWVBFX1BUUk1FTUZVTkNfT0JKRUNUX1RZUEUpOiBOZXcgbWFjcm8uCgkoY29tcF9jdl9xdWFsaWZpY2F0aW9uKTogRGVjbGFyZS4KCShjb21wX2N2X3F1YWxfc2lnbmF0dXJlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb21wX2N2X3F1YWxpZmljYXRpb24pOiBMaWtld2lzZS4KCShjb21wX2N2X3F1YWxfc2lnbmF0dXJlKTogTGlrZXdpc2UuCgpUdWUgTWF5IDE5IDEwOjA1OjAyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChwYXJzZS5vKTogRGVwZW5kIG9uIHRvcGxldi5oLgoKCSogY2xhc3MuYyAodHlwZWNvZGVfcCk6IFJlbW92ZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgoJKiBjcC10cmVlLmggKGN1cnJlbnRseV9vcGVuX2NsYXNzLCBpc19lbXB0eV9jbGFzcywgbWVtYmVyX3ApOgoJQWRkIHByb3RvdHlwZS4KCgkqIGRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2xfdG9wX2xldmVsKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQKCWRlZmluaXRpb24uCgoJKiBlcnJmbi5jIChjcF9lcnJvcik6IENhc3QgZnVuY3Rpb24gcG9pbnRlciBgZXJyb3InIHRvIChlcnJvcmZuICopCiAJaW4gY2FsbCB0byBgY3BfdGhpbmcnLgoJKGNwX3dhcm5pbmcpOiBMaWtld2lzZSBmb3IgZnVuY3Rpb24gcG9pbnRlciBgd2FybmluZycuCgoJKiBleGNlcHQuYyAoZG9fZnVuY3Rpb25fY2FsbCk6IFJlbW92ZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgkoY2FsbF9laF9pbmZvKTogV3JhcCB2YXJpYWJsZSBgdDEnIGluIG1hY3JvIE5FV19FSF9NT0RFTC4KCgkqIG1ldGhvZC5jIChpc19qYXZhX3R5cGUpOiBBZGQgcHJvdG90eXBlIGFuZCBtYWtlIGl0IHN0YXRpYy4KCgkqIHBhcnNlLnk6IEluY2x1ZGUgdG9wbGV2LmguCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYXJnJy4KCShpbnN0YW50aWF0ZV9kZWNsKTogbGlrZXdpc2UgZm9yIGBzYXZlX3RpJy4KCgkqIHRyZWUuYyAocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBMaWtld2lzZSBmb3IgYGJhc2VfYmluZm9zJy4KCQpUdWUgTWF5IDE5IDAyOjQzOjI1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBIYW5kbGUgdGVtcGxhdGVfaWRzLgoJKiBwYXJzZS55IChwcmltYXJ5KTogQWRkIGdsb2JhbF9zY29wZSB0ZW1wbGF0ZV9pZC4KCk1vbiBNYXkgMTggMjM6MjI6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ2V0X3NlbnRyeSk6IFVzZSBlbmRfdGVtcG9yYXJ5X2FsbG9jYXRpb24uCglEb24ndCBkZWNsYXJlIHBlcm1hbmVudF9vYnN0YWNrLgoKTW9uIE1heSAxOCAxMjoyODo0NCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55ICguZmluaXNoX25ld19wbGFjZW1lbnQpOiBOZXcgbm9uLXRlcm1pbmFsLgoJKHVuYXJ5X2V4cHIsIG5ld190eXBlX2lkKTogVXNlIGl0LiAgCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJCk1vbiBNYXkgMTggMTI6MjA6MjcgMTk5OCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZSk6IFNheSB3aGVyZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbgoJb2YgdGhlIHRlbXBsYXRlLXBhcmFtZXRlcidzIGRlZmF1bHQgYXJndW1lbnQgYXBwZWFyZWQuCgpNb24gTWF5IDE4IDAzOjAwOjU3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogVHdlYWsgZW1wdHkgY2xhc3MgaGFuZGxpbmcuCgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IFVzZSBjdXJyZW50bHlfb3Blbl9jbGFzcy4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBEb24ndCBhYm9ydCBvbiBUUkVFX05PTkxPQ0FMX0ZMQUcuCgpNb24gTWF5IDE4IDAxOjQzOjAxIDE5OTggIE1hcnRpbiB2LiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBEb24ndCBsb29rIGF0IElERU5USUZJRVJfTE9DQUxfVkFMVUUgCglmb3IgYSB0eXBlIHVubGVzcyBpdCBpcyBvbmUuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgT1ZMX0NVUlJFTlQgaW4gZXJyb3IgbWVzc2FnZS4KCk1vbiBNYXkgMTggMDE6MjQ6MDggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKHByb2dyYW1fdHJhbnNmb3JtX25hbWUsIG9iamRpcik6IERlZmluZS4KCgkqIE1ha2VmaWxlLmluIChCSVNPTik6IFVzZSBiaXNvbiBmcm9tIHRoZSBidWlsZCB0cmVlIGlmIGl0IGV4aXN0cy4KCShGTEVYKTogU2ltaWxhcmx5LgoKU3VuIE1heSAxNyAxNDo1MjowOCAxOTk4ICBNYXJ0aW4gdi4gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogdHlwZWNrLmMgKHR5cGVfdW5rbm93bl9wKTogUmV0dXJuIHRydWUgZm9yIFRSRUVfTElTVCBhbHNvLgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBvbiB0eXBlZGVmcy4KClN1biBNYXkgMTcgMTQ6NTE6NDEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KClN1biBNYXkgMTcgMTM6NTM6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IENhbGwgc3VzcGVuZF9tb21lbnRhcnkgYXJvdW5kIHRoZSBjcmVhdGlvbgoJb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBzYXZlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgoJKiBwYXJzZS55ICguYnVpbGRfbmV3X3BsYWNlbWVudCk6IE5ldyBub24tdGVybWluYWwuCgkodW5hcnlfZXhwciwgbmV3X3BsYWNlbWVudCk6IFVzZSBpdC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkKU3VuIE1heSAxNyAxMjozMjowOCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBDQU5PTklDQUxfVFlQRV9WQVJJQU5UIHRvIGNvbXBhcmUKCW9sZCBhbmQgbmV3IHR5cGVzLgoKCSogcHQuYyAodHN1YnN0KTogTWFrZSBzdXJlIHRoYXQgQklORk9fVFlQRSBvZiBuZXcgYmluZm9zIGlzIHRoZQoJY2Fub25pY2FsIHR5cGUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvbid0IHVzZSBJU19TSUdOQVRVUkUgb24gYSBuYW1lc3BhY2UuCgpGcmkgTWF5IDE1IDIwOjI4OjAwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IFJldmVydCBwcm9ibGVtIGNoYW5nZS4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBGaXguCgpGcmkgTWF5IDE1IDE1OjM0OjAyIDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCiAgICAgICAgKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IENsZWFuIHVwLCBhZGQgREVDTF9EQVRBX0FSRUEgYml0cy4KCkZyaSBNYXkgMTUgMDA6NDY6MDUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIEJJTkZPX1NJWkUuCgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBVc2UgJ3RlbScuCgpUaHUgTWF5IDE0IDE2OjMwOjQ3IEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2M6IEluY2x1ZGUgZWgtY29tbW9uLmguCgkoc3RydWN0IGNwX2VoX2luZm8pOiBhZGQgZWhfaW5mbyBzdHJ1Y3Qgd2l0aCBORVdfRUhfTU9ERUwuCgkoX19jcGx1c190eXBlX21hdGNoZXIpOiBGaXJzdCBzdGFiIGF0IG5ldyBDKysgcnVudGltZSB0eXBlIG1hdGNoZXIuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbik6IEluaXRpYWxpemUgZWhfaW5mbyBzdHJ1Y3QgYXMgd2VsbC4KCSogZXhjZXB0LmM6IFJlbW92ZSBsb2NhbCBzdHJ1Y3RzIGFuZCBpbmNsdWRlIGVoLWNvbW1vbi5oLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBTZXQgbGFuZ3VhZ2UgYW5kIHZlcnNpb24gY29kZXMuCgkoY2FsbF9laF9pbmZvKTogYWRkIHByZXNlbmNlIG9mIGVoX2luZm8gdG8gcnVudGltZSBkZXNjcmlwdGlvbiBvZiAKCXN0cnVjdCBjcF9laF9pbmZvLgoJKGV4cGFuZF9lbmRfZWhfc3BlYyk6IGNhbGwgc3RhcnRfY2F0Y2hfYmxvY2soKSBhbmQgZW5kX2NhdGNoX2Jsb2NrKCkuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfdHJ5X2Jsb2NrKTogY2FsbCBzdGFydF9jYXRjaF9ibG9jaygpIGFuZCAKCWVuZF9jYXRjaF9ibG9jaygpLgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBjYWxsIHN0YXJ0X2NhdGNoX2Jsb2NrKCkgYW5kIAoJZW5kX2NhdGNoX2Jsb2NrKCkuCgpUaHUgTWF5IDE0IDEyOjI3OjM0IDE5OTggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAob3JpZ2luYWxfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShjb21tb25fdHlwZSk6IFVzZSBpdCB0byBnZXQgdGhlIERFQ0xfT1JJR0lOQUxfVFlQRSBmb3IgVDEgYW5kIFQyLAoJdG8gc2VlIGlmIHRoZXkncmUgYWN0dWFsbHkgdGhlIHNhbWUuCgkqIGNwLXRyZWUuaCAob3JpZ2luYWxfdHlwZSk6IERlY2xhcmUuCgpXZWQgTWF5IDEzIDEyOjU0OjMwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChsZXgubyk6IERlcGVuZCBvbiBvdXRwdXQuaC4KCQoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBjYW5kJy4KCShhZGRfY29udl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShidWlsZF9idWlsdGluX2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZSBmb3IgYHR5cGVzX292ZXJsYXBfcCcuCgoJKiBkZWNsLmMgKHNpZ25hbF9jYXRjaCk6IE1hcmsgcGFyYW1ldGVyIGBzaWcnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGRlY2wyLmMgKG1lcmdlX2Z1bmN0aW9ucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGB0bXAnIGFuZAoJYHRlbXBuJy4KCgkqIGVycm9yLmMgKGV4cHJfYXNfc3RyaW5nKTogTWFyayBwYXJhbWV0ZXIgYHYnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShjb2RlX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKGxhbmd1YWdlX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKHBhcm1fYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkob3BfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkoYXNzb3BfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkoY3ZfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgoJKiBsZXguYzogSW5jbHVkZSBvdXRwdXQuaC4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBDYXN0IGZpcnN0IGFyZ3VtZW50IG9mIGBiemVybycgdG8gYSBjaGFyKi4KCgkqIHNlYXJjaC5jIChkZnNfbm9fb3ZlcmxhcF95ZXQpOiBNYXJrIHBhcmFtZXRlciBgdCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHRpbmZvLmNjIChfX2NsYXNzX3R5cGVfaW5mbzo6ZGNhc3QpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgdmFyaWFibGUKCWBpJyBmcm9tIGludCB0byBzaXplX3QuCgoJKiB0eXBlY2suYyAobGFuZ3VhZ2VfbHZhbHVlX3ZhbGlkKTogTWFyayBwYXJhbWV0ZXIgYGV4cCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KClR1ZSBNYXkgMTIgMjE6Mzc6NDkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9zaW1wbGVfZGVjbCk6IFVzZSBERUNMX0NMQVNTX1NDT1BFX1AgYW5kL29yCglERUNMX05BTUVTUEFDRV9TQ09QRV9QLgoJKGxhbmdfZGVjbF9uYW1lKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24sIHRzdWJzdCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHB1c2hkZWNsLCByZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UsIHN0YXJ0X2RlY2wsIAoJY3BfZmluaXNoX2RlY2wsIHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogVXNlIERFUklWRURfRlJPTV9QLgoKVHVlIE1heSAxMiAwNzoyNDoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKENBTk9OSUNBTF9UWVBFX1ZBUklBTlQpOiBOZXcgbWFjcm8uCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBVc2UgaXQuCgkoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogTGlrZXdpc2UuCgoJKiBlcnJvci5jIChkdW1wX3NpbXBsZV9kZWNsKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IGZyb20gLi4uCgkoZHVtcF9kZWNsKTogVXNlIGl0LgoKTW9uIE1heSAxMSAxMTozODowNyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdHJlZS5jIChsYW5nX3ByaW50X3hub2RlKTogQWRkIG1pc3NpbmcgYGJyZWFrJy4KCgkqIHB0LmMgKHRzdWJzdCk6IFJlbW92ZSBkdXBsaWNhdGUgY2hlY2sgZm9yIElERU5USUZJRVJfTk9ERS4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IEFkanVzdCBmb3IgY2hhbmdlcyB0bwoJZm5fdHlwZV91bmlmaWNhdGlvbi4gCgkoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZV9yZWFsKTogTGlrZXdpc2UuCgkoYWRkX3RlbXBsYXRlX2NvbnZfY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKHVuaWZpY2F0aW9uX2tpbmRfdCk6IE5ldyB0eXBlLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBBZGp1c3QgcHJvdG90eXBlLgoJKHR5cGVfdW5pZmljYWl0b24pOiBMaWtld2lzZS4KCSogcHQuYyAoVU5JRllfQUxMT1dfTk9ORSk6IE5ldyBtYWNyby4KCShVTklGWV9BTExPV19NT1JFX0NWX1FVQUwpOiBMaWtld2lzZS4KCShVTklGWV9BTExPV19MRVNTX0NWX1FVQUwpOiBMaWtld2lzZS4KCShVTklGWV9BTExPV19ERVJJVkVEKTogTGlrZXdpc2UuCgkodW5pZnkpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKG1heWJlX2FkanVzdF90eXBlc19mb3JfZGVkdWN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGNoZWNrX2N2X3F1YWxzX2Zvcl91bmlmeSk6IExpa2V3aXNlLgoJKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IEFkanVzdC4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLiAgVXNlCgltYXliZV9hZGp1c3RfdHlwZXNfZm9yX2RlZHVjdGlvbi4gIEZpeCBtaXNoYW5kbGluZyBvZgoJYmFjay11bmlmaWNhdGlvbiBvZiB0ZW1wbGF0ZSBmdW5jdGlvbnMgcGFzc2VkIGFzIGFyZ3VtZW50cy4gIFBhc3MKCWFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIFVOSUZZX0FMTE9XXyogdG8gdW5pZnkuCgkodW5pZnkpOiBSZW1vdmUgdW51c2VkIE5UUEFSTVMgcGFyYW1ldGVyLiAgVXNlCgljaGVja19jdl9xdWFsc19mb3JfdW5pZnkuICBSZW1vdmUgYm9ndXMgY29kZSB0aGF0IGFsbG93ZWQKCXRvby1nZW5lcm91cyB1bmlmaWNhdGlvbiBpbiBvcmRlciB0byBhZGhlcmUgbW9yZSBjbG9zZWx5IHRvIHN0YW5kYXJkLgoJKGdldF9iaW5kaW5nc19yZWFsKTogQWRqdXN0LgoJKGdldF9jbGFzc19iaW5kaW5ncyk6IExpa2V3aXNlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBPbmx5IHVzZSB0aGUgaW5uZXJtb3N0Cgl0ZW1wbGF0ZSBhcmd1bWVudHMgd2hlbiBtYW5nbGluZy4KCSogcHQuYyAodHN1YnN0X3RlbXBsYXRlX2FyZ3VtZW50X3ZlY3Rvcik6IE5ldyBmdW5jdGlvbi4KCShjb21wbGV0ZV90ZW1wbGF0ZV9hcmdzKTogRGVhbCB3aXRoIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlCglleHRyYV9hcmdzIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBsZXZlbCBvZiBhcmd1bWVudHMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRGVhbCB3aXRoIG1lbWJlciB0ZW1wbGF0ZSBjbGFzc2VzLCB3aGljaAoJbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBsZXZlbCBvZiBhcmd1bWVudHMuCgkodHN1YnN0KTogRG9uJ3QgdHNidXN0IGludG8gdGhlIFRSRUVfVFlQRSBvZiBhbiBJREVOVElGSUVSX05PREUuCglJbXByb3ZlIGhhbmRsaW5nIG9mIG1lbWJlciB0ZW1wbGF0ZSBjbGFzc2VzLiAgVXNlCglERUNMX1BSSU1BUllfVEVNUExBVEUgaW5zdGVhZCBvZiBpbmxpbmUgZXhwYW5zaW9uLiAgVXNlCgl0c3Vic3RfdGVtcGxhdGVfYXJndW1lbnRfdmVjdG9yIHdoZXJlIGFwcHJvcHJpYXRlLgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogQnJlYWsgb3V0IGZyb20gLi4uCgkoaW5zdGFudGlhdGVfZGVjbCk6IEhlcmUuCgkKCSogbGV4LmMgKHl5cHJpbnQpOiBSZW1vdmUgVFlQRU5BTUVfRUxMSVBTSVMuCgkqIHBhcnNlLmg6IFJlZ2VuZXJhdGVkLgoJKiBwYXJzZS5jOiBSZWFsbHkgcmVnZW5lcmF0ZWQuCgkKCSogY3AtdHJlZS5oIChmaW5pc2hfdW5hcnlfb3BfZXhwcik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfaWRfZXhwcik6IExpa2V3aXNlLgoJKGJlZ2luX25ld19wbGFjZW1lbnQpOiBMaWtld2lzZS4KCShmaW5pc2hfbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKGZpbmlzaF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZmluaXNoX3RyYW5zbGF0aW9uX3VuaXQpOiBMaWtld2lzZS4KCShmaW5pc2hfcGFybWxpc3QpOiBMaWtld2lzZS4KCShiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfZGVmYXVsdF9hcmdzKTogTGlrZXdpc2UuCgkoZmluaXNoX2lubGluZV9kZWZpbml0aW9ucyk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChHQ0NfQVNNX0tFWVdPUkQpOiBSZW1vdmUuCgkoVFlQRU5BTUVfRUxMSVBTSVMpOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCglVc2UgbmV3IGZ1bmN0aW9ucyBpbiBzZW1hbnRpY3MuYyBpbiB0aGUgYWN0aW9ucyBmb3IgbWFueSBydWxlcy4KCSogZ3h4LmdwZXJmIChHQ0NfQVNNX0tFWVdPUkQpOiBKdXN0IHVzZSBBU01fS0VZV09SRC4KCSogaGFzaC5oOiBSZWdlbmVyYXRlZC4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9leHByX3N0bXQpOiBBbGxvdyBOVUxMIGV4cHIuCgkoZmluaXNoX3VuYXJ5X29wX2V4cHIpOiBOZXcgZnVuY3Rpb24sIGNvbnRhaW5pbmcKCWNvZGUgcHJldmlvdXNseSBpbiBwYXJzZS55LgoJKGZpbmlzaF9pZF9leHByKTogTGlrZXdpc2UuCgkoYmVnaW5fbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKGZpbmlzaF9uZXdfcGxhY2VtZW50KTogTGlrZXdpc2UuCgkoZmluaXNoX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShmaW5pc2hfdHJhbnNsYXRpb25fdW5pdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9wYXJtbGlzdCk6IExpa2V3aXNlLgoJKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9kZWZhdWx0X2FyZ3MpOiBMaWtld2lzZS4KCShmaW5pc2hfaW5saW5lX2RlZmluaXRpb25zKTogTGlrZXdpc2UuCgpTdW4gTWF5IDEwIDIzOjQzOjEzIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBkZWNheSBhcnJheXMgYW5kIGZ1bmN0aW9ucyB0bwoJcG9pbnRlciB0eXBlIHdoZW4gY29udmVydGluZyB0byBhIGNsYXNzIHR5cGUuCgpTdW4gTWF5IDEwIDIyOjUzOjU2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9OQU1FU1BBQ0VfU0NPUEVfUCk6IE5ldyBtYWNyby4KCShERUNMX0NMQVNTX1NDT1BFX1ApOiBMaWtld2lzZS4KClN1biBNYXkgMTAgMjI6NDg6MjIgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIE9WTF9DVVJSRU5UIG9uIFRSRUVfVkVDX0VMVC4KCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogTGlrZXdpc2UuCgpTdW4gTWF5IDEwIDIyOjQ4OjEyIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHRyZWUuYyAobWFwY2FyKTogQWRkIE9WRVJMT0FEIHN1cHBvcnQuCgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IFdlIG11c3QgdXNlIGJhc2V0eXBlX3BhdGggYmVmb3JlIHdlCglkZXN0cm95IGl0IHdpdGggYSBjYWxsIHRvIGNvbnZlcnRfcG9pbnRlcl90by4KClNhdCBNYXkgIDkgMTQ6NDQ6MzcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoY3VycmVudGx5X29wZW5fY2xhc3MpOiBOZXcgZm4uCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoKRnJpIE1heSAgOCAyMzozMjo0MiAxOTk4ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuZGVmIChPVkVSTE9BRCk6IE5ldyBub2RlLiAgCgkqIGNwLXRyZWUuaCAoQklORElOR19UWVBFLCBTRVRfSURFTlRJRklFUl9HTE9CQUxfVkFMVUUsCglTRVRfSURFTlRJRklFUl9OQU1FU1BBQ0VfVkFMVUUpOiBEZWZpbmUuCgkoTkFNRVNQQUNFX0JJTkRJTkcpOiBSZW1vdmUuCgkoSURFTlRJRklFUl9HTE9CQUxfVkFMVUUsIElERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFKTogVXNlCgluYW1lc3BhY2VfYmluZGluZy4KCShPVkxfRlVOQ1RJT04sIE9WTF9DSEFJTiwgT1ZMX0NVUlJFTlQsIE9WTF9ORVhULCBPVkxfVVNFRCk6CglEZWZpbmUuCgkodHJlZV9vdmVybG9hZCk6IE5ldyBzdHJ1Y3QuCgkoSURFTlRJRklFUl9UWVBFX1ZBTFVFKTogVXNlIGlkZW50aWZpZXJfdHlwZV92YWx1ZS4KCShSRUFMX0lERU5USUZJRVJfVFlQRV9WQUxVRSk6IERlZmluZS4KCShJREVOVElGSUVSX0hBU19UWVBFX1ZBTFVFKTogVXNlIElERU5USUZJRVJfVFlQRV9WQUxVRS4KCShsYW5nX2RlY2xfZmxhZ3MpOiBSZW1vdmUgaW5fbmFtZXNwYWNlLgoJKGxhbmdfZGVjbCk6IFJlbW92ZSBjaGFpbi4KCShERUNMX0NIQUlOLCBERUNMX05BTUVTUEFDRSk6IFJlbW92ZS4KCShmbGFnX2hvbm9yX3N0ZCk6IERlY2xhcmUgZXh0ZXJuLgoJKGlkZW50aWZpZXJfdHlwZV92YWx1ZSwgcHVzaGRlY2xfbmFtZXNwYWNlX2xldmVsLCBwdXNoX3VzaW5nX2RlY2wsCgluYW1lc3BhY2VfYmluZGluZywgc2V0X25hbWVzcGFjZV9iaW5kaW5nLAoJbG9va3VwX2Z1bmN0aW9uX25vbmNsYXNzLCBjYXRfbmFtZXNwYWNlX2xldmVscywKCXNldF9kZWNsX25hbWVzcGFjZSwgbG9va3VwX2FyZ19kZXBlbmRlbnQsIGJpbmRpbmdfaW5pdCwgb3ZsX2NvbnMsCglzY3JhdGNoX292bF9jb25zLCBvdmxfbWVtYmVyLCBidWlsZF9vdmVybG9hZCk6IERlY2xhcmUuCgkoZGVjbF9saXN0X2xlbmd0aCwgZ2V0X25hbWVzcGFjZV9pZCwgY3VycmVudF9uYW1lc3BhY2VfaWQsCglvdmVybG9hZGVkX2dsb2JhbHNfcCk6IFJlbW92ZS4KCShsb29rdXBfdXNpbmdfbmFtZXNwYWNlLCBxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IENoYW5nZQoJcmV0dXJuIHR5cGUuCgkocHVzaF9zY3JhdGNoX29ic3RhY2spOiBOZXcgbWFjcm8uCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFNwZWNpYWwtY2FzZSB0eXBlIG9mIE9WRVJMT0FEIG5vZGUuCgkoYnVpbGRfdXNlcl9jb252ZXJzaW9uc18xKTogSXRlcmF0ZSB1c2luZyBPVkxfTkVYVCBmb3IgY3RvcnMsCgljb252cywgZm5zLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogSXRlcmF0ZSB1c2luZyBPVkxfQ0hBSU4uICAKCVByaW50IERFQ0xfTkFNRSBpbiB3aGVuIHJlcG9ydGluZyBhbWJpZ3VpdGllcy4KCShidWlsZF9vYmplY3RfY2FsbCk6IEl0ZXJhdGUgdXNpbmcgT1ZMX05FWFQgZm9yIGZucywgY29udnMuCgkoYnVpbGRfbmV3X29wKTogQ2FsbCBsb29rdXBfZnVuY3Rpb25fbm9uY2xhc3MuICAKCUl0ZXJhdGUgdXNpbmcgT1ZMX05FWFQuCgkoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBDaGFuZ2UgZGV0ZWN0aW9uIG9mIG1lbWJlcnMuCglEbyBub3Qgd3JhcCBUUkVFX0xJU1QgYXJvdW5kIGZpZWxkcyBhbmQgc2luZ2xlIGdsb2JhbCBmdW5jdGlvbnMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgcHVzaCBhIGNsYXNzIGxldmVsIGlmIHRoZSBjb250ZXh0IGlzIGEKCW5hbWVzcGFjZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBJdGVyYXRlIHVzaW5nIE9WTF9ORVhULgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogQ2hhaW4gb3ZlcmxvYWRlZCBtZW1iZXJzIHVzaW5nCglidWlsZF9vdmVybG9hZC4gIFJlbW92ZSBjb3B5aW5nIG9mIG1ldGhvZC4KCShncm93X21ldGhvZCk6IFdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIG9ic3RhY2ssIGV4cGVjdCBPVkVSTE9BRAoJbm9kZXMuICBDaGFpbiBvdmVybG9hZCBtZW1iZXJzLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IENoYWluIG92ZXJsb2FkIG1lbWJlcnMuICBVbnBhY2sgT1ZFUkxPQUQKCW5vZGVzIGluIGNhbGwgdG8gZ2V0X2Jhc2VsaW5rcy4KCShkdXBsaWNhdGVfdGFnX2Vycm9yKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzIHdoZW4gdW5jaGFpbmluZy4KCShmaW5pc2hfc3RydWN0XzEpOiBJdGVyYXRlIG92ZXIgY3RvciB1c2luZyBPVkxfTkVYVC4gIEhhbmRsZQoJZmRlY2xzIHRoYXQgYXJlIE9WRVJMT0FEIG5vZGVzLgoJKHZhbGlkYXRlX2xocyk6IE5ldyBmdW5jdGlvbi4KCShpbnN0YW50aWF0ZV90eXBlKTogRG8gbm90IGNvcHkgT1ZFUkxPQUQgbm9kZXMuICBSZW1vdmUgZGVhZAoJY29kZS4gVXNlIERFQ0xfTkFNRSBpbiBlcnJvciBtZXNzYWdlcy4gU3BsaXQgY29kZSBiZXR3ZWVuIGdsb2JhbAoJYW5kIG1lbWJlciBmdW5jdGlvbiBwcm9jZXNzaW5nLgoJKiBkZWNsLmMgKGdsb2JhbF90eXBlX25vZGUpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGluX3N0ZCk6IE5ldyBnbG9iYWwuCgkoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBOZXcgZmllbGQgdXNpbmdzLgoJKHJlc3VtZV9iaW5kaW5nX2xldmVsKTogQXNzZXJ0IHRoYXQgd2UgYXJlIG5vdCBpbiBhIGNsYXNzLgoJKHRvcGxldmVsX2JpbmRpbmdzX3ApOiBKdXN0IGNoZWNrIGZvciBuYW1lc3BhY2VfcCBvcgoJcHNldWRvX2dsb2JhbC4KCShyZXN1bWVfbGV2ZWwpOiBSZW1vdmUuCgkoZmluZF9iaW5kaW5nKTogTmV3IGZ1bmN0aW9uLgoJKGJpbmRpbmdfZm9yX25hbWUpOiBDYWxsIGl0LgoJKG5hbWVzcGFjZV9iaW5kaW5nLCBzZXRfbmFtZXNwYWNlX2JpbmRpbmcpOiBOZXcgZnVuY3Rpb25zLgoJKHB1c2hfbmFtZXNwYWNlKTogQXNzb2NpYXRlIGJpbmRpbmcgbGV2ZWwgd2l0aCBuZXcgbmFtZXNwYWNlLAoJcmVzdW1lX2JpbmRpbmdfbGV2ZWwgZm9yIGV4aXN0aW5nIG5hbWVzcGFjZS4gIFJlbW92ZSBvbGQgY29kZS4KCUZha2Ugc3RkIGJ5IGNvdW50aW5nLgoJKHN0b3JlX2JpbmRpbmdzKTogVXNlIFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFLgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogU2F2ZSBjdXJyZW50IG5hbWVzcGFjZS4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIHNhdmVkIG5hbWVzcGFjZS4KCShwb3BfbmFtZXNwYWNlKTogQ2FsbCBzdXNwZW5kX2JpbmRpbmdfbGV2ZWwuICBSZW1vdmUgb2xkIGNvZGUuCgkoY2F0X25hbWVzcGFjZV9sZXZlbHMpOiBOZXcgZnVuY3Rpb24uCgkoc2V0X2lkZW50aWZpZXJfdHlwZV92YWx1ZV93aXRoX3Njb3BlKTogRm9yIG5hbWVzcGFjZSBiaW5kaW5ncywKCXNldCBCSU5ESU5HX1RZUEUsIGFuZCB1c2UgZ2xvYmFsX3R5cGVfbm9kZS4KCVVzZSBSRUFMX0lERU5USUZJRVJfVFlQRV9WQUxVRSBvdGhlcndpc2UuCgkoaWRlbnRpZmllcl90eXBlX3ZhbHVlKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2h0YWcpOiBJZiBubyBjb250ZXh0LCB1c2UgY3VycmVudF9uYW1lc3BhY2UuCgkoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgcHJvY2VzcyBERUNMX0NIQUlOLgoJKHB1c2hkZWNsKTogU2V0IERFQ0xfQ09OVEVYVCB0byBjdXJyZW50X25hbWVzcGFjZSwgaWYgaXQgaXMgbm90CglhbHJlYWR5IHNldC4gTmV2ZXIgcmVzZXQgaXQgdG8gTlVMTF9UUkVFLiAgTG9va3VwIGdsb2JhbCB2YXJpYWJsZXMKCWluIHRoZWlyIG5hbWVzcGFjZS4gIFB1c2ggb3ZlcmxvYWRlZCB0ZW1wbGF0ZXMgaWYgdGhleSBhcmUgb24KCW5hbWVzcGFjZSBsZXZlbC4KCShwdXNoZGVjbF9uYW1lc3BhY2VfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGRlY2xfdG9wX2xldmVsKTogSW1wbGVtZW50IHVzaW5nIHB1c2hkZWNsX25hbWVzcGFjZV9sZXZlbC4KCShwdXNoZGVjbF91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKG92ZXJsb2FkZWRfZ2xvYmFsc19wKTogUmVtb3ZlLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogQ3JlYXRlIE9WRVJMT0FEIG5vZGVzLCBhbmQgaXRlcmF0ZSB0aHJvdWdoCgl0aGVtLiBVc2UgbmFtZXNwYWNlX2JpbmRpbmcgYW5kIHNldF9uYW1lc3BhY2VfdmFsdWUuCgkocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlKTogQ29tcGxhaW4gaWYgdGhlIGRlY2xhcmF0aW9ucyBjb21lCglmcm9tIGRpZmZlcmVudCBuYW1lc3BhY2VzLgoJKGxvb2t1cF90YWcpOiBPbiBuYW1lc3BhY2UgbGV2ZWwsIGxvb2sgaW4gdGhlIEJJTkRJTkdfVFlQRS4KCShsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBQYXNzIHRyZWVfYmluZGluZ3MgZnJvbSBzdGFjay4gIFJlbW92ZQoJb2xkIGNvZGUuCgkoc2VsZWN0X2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX25hbWVfcmVhbCk6IENhbGwgaXQgZm9yIHF1YWxpZmllZCBhbmQgdW5xdWFsaWZpZWQgbG9va3VwLgoJUGFzcyB0cmVlX2JpbmRpbmdzIGZyb20gdGhlIHN0YWNrLgoJSWYgcHJlZmVyX3R5cGUgaXMgMSwgYWxzbyBhY2NlcHQgbmFtZXNwYWNlcy4KCShsb29rdXBfZnVuY3Rpb25fbm9uY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgdGhlIGJpbmRpbmcgbGV2ZWwgb2YgdGhlIGdsb2JhbAoJbmFtZXNwYWNlIHRvIGdsb2JhbF9iaW5kaW5nX2xldmVsLgoJQnVpbGQgYSBwcm9wZXIgdHlwZSBsaXN0IGZvciBfX2J1aWx0aW5fYXBwbHkuCglJbml0aWFsaXplIHN0ZF9ub2RlIHRvICJmYWtlIHN0ZCIgaWYgZmxhZ19ob25vcl9zdGQgaXMgc2V0LgoJSW5pdGlhbGl6ZSBnbG9iYWxfdHlwZV9ub2RlLgoJQWxsb2NhdGVkIGJhZF9hbGxvYyBpbiBuYW1lc3BhY2Ugc3RkIGlmIGZsYWdfaG9ub3Jfc3RkLgoJKGRlZmluZV9mdW5jdGlvbik6IFNldCB0aGUgREVDTF9DT05URVhUIHRvIHRoZSBjdXJyZW50X25hbWVzcGFjZS4KCShzdGFydF9kZWNsKTogQSBuYW1lc3BhY2UgaXMgbm90IGNvbnNpZGVyZWQgYXMgYSBjb250ZXh0IGhlcmUuICBJZgoJdGhlIERFQ0xfQ09OVEVYVCBpcyBhIG5hbWVzcGFjZSwgcHVzaCB0aGUgZGVjbC4KCShjcF9maW5pc2hfZGVjbCk6IENoZWNrIGZvciBuYW1lc3BhY2VzIHVzZWQgYXMgaW5pdGlhbGl6ZXJzLgoJKGdyb2tmbmRlY2wpOiBBZGQgbmFtZXNwYWNlIHBhcmFtZXRlci4gIFJlbW92ZSBwcm9jZXNzaW5nIG9mCglERUNMX0NIQUlOLgoJKGdyb2t2YXJkZWNsKTogQWRkIG5hbWVzcGFjZSBwYXJhbWV0ZXIuCgkoZ3Jva2RlY2xhcmF0b3IpOiBQcm9jZXNzIFNDT1BFcyB0aGF0IGFyZSBuYW1lc3BhY2VzLiAgRm9yCgltYW5nbGluZywgdGVtcG9yYXJpbHkgc2V0IHRoZSBERUNMX0NPTlRFWFQgb24gYW5vbnltb3VzIHN0cnVjdHMuCgkoc3RhcnRfZnVuY3Rpb24pOiBDaGVjayBmb3IgY29udGV4dHMgdGhhdCBhcmUgbmFtZXNwYWNlcy4gIAoJU2V0IGNvbnRleHQgZm9yIGRlY2xhcmF0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gcHVzaGVkLgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBDaGVjayBmb3IgOjptYWluIG9ubHkuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoc3RhcnRfbWV0aG9kKTogQ2hlY2sgZm9yIGNvbnRleHRzIHRoYXQgYXJlIG5hbWVzcGFjZXMuCgkoc3RhcnRfbWV0aG9kKTogUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCSogZGVjbDIuYyAoZmxhZ19ob25vcl9zdGQpOiBEZWNsYXJlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFNldCBpdCBpZiAtZmhvbm9yLXN0ZCBvciAtZm5ldy1hYmkgaXMgZ2l2ZW4uCgkoZGVjbF9uYW1lc3BhY2VfbGlzdCk6IE5ldyBzdGF0aWMgZ2xvYmFsLgoJKGdyb2tfeF9jb21wb25lbnRzKTogSWdub3JlIG5hbWVzcGFjZXMgYXMgdHlwZSBjb250ZXh0cy4KCShjaGVja19jbGFzc2ZuKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKGdyb2tmaWVsZCk6IFJlbW92ZSBERUNMX0NIQUlOIHByb2Nlc3NpbmcuCgkoZmluaXNoX2ZpbGUpOiBDYWxsIGNhdF9uYW1lc3BhY2VfbGV2ZWxzLgoJKG1lcmdlX2Z1bmN0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCShhbWJpZ3VvdXNfZGVjbCk6IFJld3JpdGUuCgkobG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IFByb2R1Y2UgdHJlZV9iaW5kaW5ncy4KCShxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IExpa2V3aXNlLgoJKHNldF9kZWNsX25hbWVzcGFjZSwgZGVjbF9uYW1lc3BhY2UsIGN1cnJlbnRfZGVjbF9uYW1lc3BhY2UsCglwdXNoX2RlY2xfbmFtZXNwYWNlLCBwb3BfZGVjbF9uYW1lc3BhY2UpOiBOZXcgZnVuY3Rpb25zLgoJKGFyZ19sb29rdXApOiBOZXcgc3RydWN0LgoJKGFkZF9mdW5jdGlvbiwgYXJnX2Fzc29jX25hbWVzcGFjZSwgYXJnX2Fzc29jX2NsYXNzLAoJYXJnX2Fzc29jX3R5cGUsIGFyZ19hc3NvY19hcmdzLCBhcmdfYXNzb2MsIGxvb2t1cF9hcmdfZGVwZW5kZW50KToKCU5ldyBmdW5jdGlvbnMuCgkoZ2V0X25hbWVzcGFjZV9pZCwgY3VycmVudF9uYW1lc3BhY2VfaWQpOiBSZW1vdmUuCgkoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IFJld3JpdGUuCgkoZG9fY2xhc3NfdXNpbmdfZGVjbCk6IENvbXBsYWluIGFib3V0IG5hbWVzcGFjZSBxdWFsaWZpZXJzLgoJKGRvX3VzaW5nX2RpcmVjdGl2ZSk6IFNvcnJ5IGlmIG5vdCBvbiBuYW1lc3BhY2UgbGV2ZWwuICBDb21wbGFpbgoJYWJvdXQgdW5rbm93biBuYW1lc3BhY2VzLgoJKiBlcnJvci5jIChkdW1wX2FnZ3JfdHlwZSk6IENoZWNrIGZvciBuYW1lc3BhY2UgY29udGV4dHMuCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogUHVzaCB0ZXJtaW5hdGUgaW50byBzdGQuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBBIG5hbWVzcGFjZSBpcyBub3QgYSBjb250ZXh0LCBoZXJlLgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IFJlbW92ZSBERUNMX0NIQUlOIHByb2Nlc3NpbmcuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IFByb2Nlc3MgT1ZFUkxPQUQgbm9kZXMuCgkqIGxhbmctc3BlY3MuaCAoX19IT05PUl9TVEQpOiBEZWZpbmUgaWYgLWZuZXctYWJpIG9yIC1maG9ub3Itc3RkLgoJKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogTG9vcCB1c2luZyBPVkxfQ0hBSU4uCgkoc2VlX3R5cGVuYW1lKTogU2V0IGxvb2tpbmdfZm9yX3R5cGVuYW1lIHRvIDIuCgkocmVhbF95eWxleCk6IExpa2V3aXNlLgkKCShkb19pZGVudGlmaWVyKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzIGluc3RlYWQgb2YgVFJFRV9MSVNUcy4KCShkb19zY29wZWRfaWQpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCglDaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIGZvciBxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZS4KCShidWlsZF9sYW5nX2RlY2wpOiBEb24ndCBzZXQgaW5fbmFtZXNwYWNlIGFueW1vcmUuCgkqIG1ldGhvZC5jICh0eXBldmVjX3NpemUpOiBOZXcgZ2xvYmFsLgoJKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogUmV0dXJuIGlmIGdsb2JhbF9uYW1lc3BhY2UuCglPdGhlcndpc2UsIGFsd2F5cyBleHBlY3QgYSBkZWNsYXJhdGlvbiBjb250ZXh0LgoJKGJ1aWxkX3F1YWxpZmllZF9uYW1lKTogTGlrZXdpc2UuCglNYWtlIHN1cmUgd2UgZG9uJ3Qgd3JpdGUgYmV5b25kIHR5cGV2ZWNfc2l6ZS4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBMaWtld2lzZS4KCUFsbG9jYXRlIG9uZSBleHRyYSBzbG90IGZvciB0aGUgbmFtZXNwYWNlLgoJKGhhY2tfaWRlbnRpZmllcik6IE1hcmsgY29kZSBkZWFkLgoJUHJvY2VzcyBPVkVSTE9BRCBhbmQgTkFNRVNQQUNFX0RFQ0wgbm9kZXMuCgkqIHBhcnNlLnkgKHByb2dyYW0pOiBQb3AgbmFtZXNwYWNlcyB1bnRpbCBpbiBnbG9iYWwgbmFtZXNwYWNlLgoJKGV4dGRlZik6IEluIGEgdXNpbmctZGVjbGFyYXRpb24sIGRvbid0IGRpc2NhcmQgdGhlIGlkZW50aWZpZXIgaWYKCXRoZXJlIGlzIG5vIGRlY2xhcmF0aW9uLgoJKGxlZnRfY3VybHkpOiBJZ25vcmUgdHlwZSBjb250ZXh0cyB3aGljaCBhcmUgbmFtZXNwYWNlcy4KCSh0eXBlbmFtZV9zdWIyKTogVXNlIElERU5USUZJRVJfVFlQRV9WQUxVRSB0byByZXRyaWV2ZSB0aGUgdHlwZQoJdXNlZCBhcyBzY29wZS4KCSogcHQuYyAodGVtcGxhdGVfY2xhc3NfZGVwdGgpOiBFeHBlY3QgdHlwZXMgdG8gYmUgbmFtZXNwYWNlcy4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBTaW1wbGlmeSBieSBleHBlY3RpbmcgT1ZFUkxPQUQgbm9kZXMuCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogUHVzaCBpbnRvIG5hbWVzcGFjZSBsZXZlbC4KCVJlc2V0IGN0eCBpZiBpdCBpcyBhIG5hbWVzcGFjZS4KCVNldCBERUNMX0NPTlRFWFQgdG8gY3VycmVudF9uYW1lc3BhY2UgaWYgbm90IHNldCBhbHJlYWR5LgoJSWdub3JlIHJlYWwgY29udGV4dHMgdGhhdCBhcmUgbmFtZXNwYWNlcy4KCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBTa2lwIGdsb2JhbF9uYW1lc3BhY2UuCglNYW5nbGUgb3RoZXIgbmFtZXBhY2VzIGFzIGRlY2xhcmF0aW9ucy4KCShsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24pOiBTZXQgdHlwZSBvZiBPVkVSTE9BRCBub2RlcyB0byB1bmtub3duLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFB1c2ggaW50byBuYW1lc3BhY2Ugb2YgY29udGV4dC4KCUlmIHRoZSBjb250ZXh0IGlzIGEgbmFtZXNwYWNlLCBzZXQgaXQgdG8gZ2xvYmFsX25hbWVzcGFjZS4KCVVzZSBpZF9jb250ZXh0IGZvciBtYW5nbGluZy4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogSGFuZGxlIE9WRVJMT0FEIGFuZCBOQU1FU1BBQ0VfREVDTCBub2Rlcy4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uKTogSWdub3JlIG5hbWVzcGFjZSBjb250ZXh0cy4KCVB1c2ggaW50byBuYW1lc3BhY2UgbGV2ZWwuCgkodHN1YnN0KTogSGFuZGxlIE5BTUVTUEFDRV9ERUNMIG5vZGVzLgoJUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCSh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBSZWNvZ25pemUgT1ZFUkxPQUQgaW5zdGVhZCBvZiBUUkVFX0xJU1Qgbm9kZXMuCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfaWRlbnRpZmllcik6IFByaW50IGJpbmRpbmdzLgoJKGxhbmdfcHJpbnRfeG5vZGUpOiBQcmludCBPVkVSTE9BRCBub2Rlcy4KCSogcnR0aS5jIChpbml0X3J0dGlfcHJvY2Vzc2luZyk6IFB1c2ggdHlwZV9pbmZvIGludG8gc3RkLgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzX2hlcmUpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkobG9va3VwX2ZuZmllbGRzXzEsIGdldF92aXJ0dWFsc19uYW1lZF90aGlzLCBnZXRfbWF0Y2hpbmdfdmlydHVhbCwKCWRmc19kZWJ1Z19tYXJrLCBkZnNfcHVzaGRlY2xzLCBkZnNfY29tcHJlc3NfZGVjbHMsIGFkZF9jb252ZXJzaW9ucywKCWxvb2t1cF9mbmZpZWxkc19oZXJlKTogTGlrZXdpc2UuCglQcm9jZXNzIGFsbCBub2RlcywgaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIFRSRUVfQ0hBSU4uCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9vcl9yZWZlcmVuY2VfdHlwZSk6IFNldCBjb250ZXh0Cgl0byBnbG9iYWxfbmFtZXNwYWNlLgoJKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IEV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCSogc3Bldy5jICh5eWxleCk6IFNhdmUgb2xkIHNldHRpbmcgb2YgbG9va2luZ19mb3JfdHlwZW5hbWUuCgkqIHRyZWUuYyAoZGVjbF9saXN0X2xlbmd0aCk6IFJlbW92ZS4KCShiaW5kaW5nX2luaXQpOiBOZXcgZnVuY3Rpb24uCgkoY291bnRfZnVuY3Rpb25zKTogUmV3cml0ZS4KCShpc19vdmVybG9hZGVkX2ZuKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKHJlYWxseV9vdmVybG9hZGVkX2ZuLCBnZXRfZmlyc3RfZm4sIGx2YWx1ZV90eXBlKTogTGlrZXdpc2UuCgkob3ZsX2NvbnMsIHNjcmF0Y2hfb3ZsX2NvbnMsIGJ1aWxkX292ZXJsb2FkLCBidWlsZF9vdmVybG9hZF9hZnRlciwKCW92bF9tZW1iZXIpOiBOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKHR5cGVfdW5rbm93bl9wKTogTGlrZXdpc2UuCgkocmVxdWlyZV9pbnN0YW50aWF0ZWRfdHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBEZWNsYXJlIGNvZGUgZGVhZC4KCShidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBDcmVhdGUgYW5kIGV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBDaGVjayBmb3IgOjptYWluIG9ubHkuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4gIEV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQ2hlY2sgZm9yIFRSRUVfTElTVCBiZWZvcmUgYWNjZXNzaW5nCglUUkVFX1ZBTFVFLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IENoZWNrIGZvciBuYW1lc3BhY2UgYmluZGluZ3MgaW5zdGVhZAoJb2YgZ2xvYmFsIGJpbmRpbmdzLgoJKHB1c2hkZWNsLCBwdXNoX292ZXJsb2FkZWRfZGVjbCwgbG9va3VwX3RhZywgbG9va3VwX25hbWVfcmVhbCwKCWxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwsIHN0YXJ0X2RlY2wsIHhyZWZfdGFnLCAKCWZpbmlzaF9lbnVtKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UuCgkoZGZzX2RlYnVnX21hcmspOiBMaWtld2lzZS4KCSogZGVjbC5jIChwb3BsZXZlbCk6IFVzZSBTRVRfSURFTlRJRklFUl9UWVBFX1ZBTFVFLgoJKHBvcGxldmVsX2NsYXNzLCBwb3BfZnJvbV90b3BfbGV2ZWwpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX21ldGhvZCk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChidWlsZF92dGFibGUpOiBVc2UgU0VUX0lERU5USUZJRVJfR0xPQkFMX1ZBTFVFLgoJKiBkZWNsLmMgKHJlY29yZF9idWlsdGluX3R5cGUpOiBMaWtld2lzZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZywgZ3Jva2ZuZGVjbCk6IExpa2V3aXNlLgoJKiBsZXguYyAoZ2V0X3RpbWVfaWRlbnRpZmllciwgZG9faWRlbnRpZmllciwgZG9fc2NvcGVkX2lkKTogTGlrZXdpc2UuCgkobWFrZV9sYW5nX3R5cGUpOiBMaWtld2lzZS4KCSogcGFyc2UueSAobWFrZV90aHVuayk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCSogdHJlZS5jIChkZWJ1Z19iaW5mbyk6IExpa2V3aXNlLgoJKiBleGNlcHRpb24uY2MsIG5ldy5jYywgbmV3MS5jYywgbmV3Mi5jYywgdGluZm8uY2MsIHRpbmZvLmgsIAoJdGluZm8yLmNjLCBpbmMvbmV3Lmg6IEFkZCBzdGQgcXVhbGlmaWNhdGlvbnMuCgkqIGluYy9uZXc6IFdyYXAgd2l0aCBuYW1lc3BhY2Ugc3RkIGlmIF9fSE9OT1JfU1RELgoJKiBpbmMvdHlwZWluZm86IExpa2V3aXNlLgoKRnJpIE1heSAgOCAwMDo0Mzo1MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgc2Vjb25kX2NvbnYgCglwcm9wZXJseSBmb3IgdGVtcGxhdGVzLgoKVGh1IE1heSAgNyAxNzowOToyNSBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IFNldCBUUkVFX1VTRUQgZmxhZyB0bwoJemVybyBmb3IgYnVpbGRfdHlwZV92YXJpYW50cyBub2RlcyBhcyB3ZWxsLgoKV2VkIE1heSAgNiAxOToyNzowOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBEb24ndCB0c3Vic3QgdGhlIHR5cGUgb2YgYW4gSURFTlRJRklFUl9OT0RFLgoKV2VkIE1heSAgNiAxNjo0OTo0OCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2FsbC5vLCBjbGFzcy5vLCBkZWNsLm8sIGRlY2wyLm8sIGVycmZuLm8sIGVycm9yLm8sCglleGNlcHQubywgZXhwci5vLCBmcmllbmQubywgaW5pdC5vLCBsZXgubywgbWV0aG9kLm8sIHB0Lm8sIHJlcG8ubywKCXJ0dGkubywgc2VhcmNoLm8sIHNlbWFudGljcy5vLCBzaWcubywgdHJlZS5vLCB0eXBlY2subywgdHlwZWNrMi5vLCAKCXhyZWYubyk6IEFkZCB0b3BsZXYuaCBkZXBlbmRlbmNpZXMuCgpXZWQgTWF5ICA2IDE2OjQ0OjU4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGVycmZuLmMgKGNwX2Vycm9yLCBjcF93YXJuaW5nKTogUmVtb3ZlIGRlY2xhcmF0aW9ucyBmb3IKCWVycm9yIGFuZCB3YXJuaW5nIHJlc3BlY3RpdmVseS4KCldlZCBNYXkgIDYgMTQ6Mjg6MTggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXJyb3IuYzogQ29udmVydCB0byB1c2luZyBjdHlwZSBtYWNyb3MgZGVmaW5lZCBpbiBzeXN0ZW0uaC4KCSogbWV0aG9kLmM6IExpa2V3aXNlLgoJKiB4cmVmLmM6IExpa2V3aXNlLgoJKiBsZXguYzogTGlrZXdpc2UuICBBbHNvIHJlbW92ZSByZWR1bmRhbnQgc3lzdGVtIGhlYWRlciBzdHVmZi4KCldlZCBNYXkgIDYgMDY6MzY6NDEgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY2FsbC5jLCBjbGFzcy5jLCBkZWNsLmMsIGRlY2wyLmMsIGVycmZuLmMsIGVycm9yLmMsIGV4Y2VwdC5jLCAKCWV4cHIuYywgZnJpZW5kLmMsIGluaXQuYywgbGV4LmMsIG1ldGhvZC5jLCBwdC5jLCByZXBvLmMsIHJ0dGkuYywgCglzZWFyY2guYywgc2VtYW50aWNzLmMsIHNpZy5jLCB0cmVlLmMsIHR5cGVjay5jLCB0eXBlY2syLmMsIAoJeHJlZi5jOiBBZGQgaW5jbHVkZSBvZiB0b3BsZXYuaC4KCldlZCBNYXkgIDYgMDI6MzM6MzkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChwZXJtX21hbmlwKTogQWxzbyByZWdlbmVyYXRlIHRoZSBSVEwgb2YgYW4gZXh0ZXJuLgoJKGNvcHlfdG9fcGVybWFuZW50KTogVXNlIGVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KClR1ZSBNYXkgIDUgMjM6NTQ6MDQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgZWFjaCBhcnJheQoJZWxlbWVudCBpcyBhIGZ1bGwtZXhwcmVzc2lvbi4KClR1ZSBNYXkgIDUgMTg6MjQ6MTMgRURUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBBZGQgYSBjYWxsIHRvIGJ1aWxkX3R5cGVfdmFyaWFudCAKCXRvIGdldCB0aGUgcmlnaHQgdHlwZS4KClR1ZSBNYXkgIDUgMDE6MjU6MDMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCAuU1VGRklYRVMuCgoJKiBjcC10cmVlLmRlZjogUmVtb3ZlIE5BTUVTUEFDRV9ERUNMLgoKU3VuIE1heSAgMyAwMTozMjoxNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvIGV2YWx1YXRlIGFyZyBldmVuIGlmIGl0IGhhcyBlbXB0eSAKCWNsYXNzIHR5cGUuCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBwdXNoIGEgbWVtYmVyIGZ1bmN0aW9uLgoKVGh1IEFwciAzMCAxODo1OToyMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZysrRkFRLmluZm8pOiBQdXQgLW8gb3B0aW9uIGJlZm9yZSBpbnB1dCBmaWxlLgoKVGh1IEFwciAzMCAxMzowNTozMyBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZ3h4aW50LnRleGk6IEFkZCBpbmZvIGZvciBzcXVhbmdsaW5nIGNvZGVzIEsgYW5kIEIuCgpUdWUgQXByIDI4IDEzOjIyOjAxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHNlbWFudGljcy5jIChiZWdpbl9zdG10X2V4cHIpOiBBdm9pZCBkdXBsaWNhdGluZyB0aGUgZWZmZWN0IG9mCgl0aGUgZXhwcmVzc2lvbiBpbiB0ZW1wbGF0ZXMuCgkoZmluaXNoX3N0bXRfZXhwcik6IExpa2V3aXNlLgoKMTk5OC0wNC0yOCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGFtYmlndW91c19kZWNsKTogRml4IE5BTUUgcGFybSB0byBiZSBhIHRyZWUsIG5vdCBpbnQuCgpNb24gQXByIDI3IDEzOjU4OjEwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBBbHdheXMgY2xlYXIKCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMgYW5kIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4KCShwdXNodGFnKTogUmVtb3ZlIGNoZWNrIG9mIGN1cnJlbnRfY2xhc3NfdHlwZSBhbmQgc29tZSBjb21tZW50cywKCXNpbmNlIG1heWJlX3B1c2hfdG9fdG9wX2xldmVsIG5vIGxvbmdlciBjcmVhdGVzIGNvbmZ1c2lvbi4KClN1biBBcHIgMjYgMTI6MTA6MTggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3AtdHJlZS5oIChDTEFTU1RZUEVfSVNfVEVNUExBVEUpOiBOZXcgbWFjcm8uCgkoREVDTF9DTEFTU19URU1QTEFURV9QKTogTGlrZXdpc2UuCgkoREVDTF9QUklNQVJZX1RFTVBMQVRFKTogTGlrZXdpc2UuCgkoUFJJTUFSWV9URU1QTEFURV9QKTogVXNlIGl0LgoJKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogTmV3IGZ1bmN0aW9uLgoJKHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZSk6IFRha2UgbmV3IHRlbXBsYXRlIHBhcmFtZXRlcnMgYXMKCWlucHV0LiAKCShpc19zcGVjaWFsaXphdGlvbl9vZik6IE5ldyBmdW5jdGlvbi4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBIYW5kbGUgZnJpZW5kIHRlbXBsYXRlIGNsYXNzZXMuCgkoeHJlZl90YWcpOiBMaWtld2lzZS4gIFVzZSBuZXcgY2FsbGluZyBjb252ZW50aW9uIGZvcgoJcmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlLgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IEhhbmRsZSBmcmllbmQgdGVtcGxhdGVzLgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogVXNlIGlzX3NwZWNpYWxpemF0aW9uX29mIHdoZXJlCglhcHByb3ByaWF0ZS4gIERlYWwgd2l0aCBmcmllbmQgY2xhc3MgdGVtcGxhdGVzLgoJKG1ha2VfZnJpZW5kX2NsYXNzKTogTGV0IGEgY2xhc3MgdGVtcGxhdGUgYmUgZnJpZW5kcyB3aXRoIGl0c2VsZi4KCSogcHQuYyAoY29tcF90ZW1wbGF0ZV9hcmdzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKHRzdWJzdF9mcmllbmRfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogVXNlIGl0LgoJKHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZSk6IEFkanVzdCBmb3IgbmV3IGNhbGxpbmcgY29udmVudGlvbi4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBHaXZlIGl0IGV4dGVybmFsIGxpbmthZ2UuCgkoaW5zdGFudGlhdGVfY2xhc3NfdHlwZSk6IFVzZSB0c3Vic3RfZnJpZW5kX2NsYXNzIHRvIGRlYWwKCXdpdGggZnJpZW5kIHRlbXBsYXRlcy4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IFVzZSBjb21wX3RlbXBsYXRlX2FyZ3MsIHJhdGhlciB0aGFuCglleHBhbmRpbmcgaXQgaW5saW5lLgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbCk6IEhhbmRsZSBhIG5lc3RlZCB0ZW1wbGF0ZSB0eXBlIAoJbGlrZSBvdGhlciBjb21wb25lbnQgdHlwZSBkZWNsYXJhdGlvbnMuCgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEhhbmRsZSBvdmVybG9hZGVkCgljb25zdHJ1Y3RvcnMgY29ycmVjdGx5LgoKCSogcHQuYyAobWFieWJlX2dldF90ZW1wbGF0ZV9kZWNsX2Zyb21fdHlwZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFVzZSBpdC4KClRodSBBcHIgMjMgMjE6MTk6MDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBXUkFQUEVSLiAgVVNFUl9DT05WIG5vdyBvbmx5IGhhcyB0d28gb3BzLgoJKiBjcC10cmVlLmg6IEFkZCBXUkFQUEVSIHN1cHBvcnQuCgkqIGNhbGwuYyAoYWRkX2NhbmRpZGF0ZSk6IFNwbGl0IG91dCBmcm9tIGFkZF8qX2NhbmRpZGF0ZSBmbnMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogVGFrZSB0aGUgY2FuZGlkYXRlIGluc3RlYWQgb2YgZnVuY3Rpb24gYW5kIGFyZ3MuCglFbmZvcmNlIGFjY2VzcyBjb250cm9sIGhlcmUuICBFbWl0IG92ZXJsb2FkIHdhcm5pbmdzIGhlcmUuCgkoYWRkX3dhcm5pbmcpOiBOZXcgZm4uCgkoam91c3QpOiBBZGQgV0FSTiBwYXJtLiAgSWYgbm90IHNldCwgY2FsbCBhZGRfd2FybmluZyBpbnN0ZWFkIG9mCglwcmludGluZyBhIHdhcm5pbmcuICBSZWVuYWJsZSBzb21lIHdhcm5pbmdzLgoJKHRvdXJuZXkpOiBQYXNzIGl0LgoJKGNvbnZlcnRfbGlrZSk6IEFkanVzdC4KCShidWlsZF9uZXdfb3ApOiBBZGp1c3QuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBBZGp1c3QuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEFkanVzdC4KCShVU0VSX0NPTlZfRk4pOiBBZGp1c3QuCgkqIHRyZWUuYyAoYnVpbGRfZXhwcl93cmFwcGVyLCBidWlsZF9leHByX3B0cl93cmFwcGVyLCAKCWJ1aWxkX2ludF93cmFwcGVyKTogTmV3IGZucy4KClRodSBBcHIgMjMgMTg6Mjc6NTMgMTk5OCAgTWFyayBQLiBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodW5pZnkpOiBGaXggdHlwbyBpbiBwcmV2aW91cyBjaGFuZ2UuCgpUaHUgQXByIDIzIDA5OjMyOjU4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogRGVjbGFyZSBjYW5vbmljYWxfbmFtZS4KCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IEZpeCBQTUZzLgoKV2VkIEFwciAyMiAxMzoyNDo0OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2V0IFRSRUVfUFJJVkFURSBhbmQgVFJFRV9QUk9URUNURUQgZm9yCgl0aGUgREVDTF9SRVNVTFRzIG9mIGEgbWVtYmVyIFRFTVBMQVRFX0RFQ0wsIG5vdCBqdXN0IHRoZQoJVEVNUExBVEVfREVDTC4KCgkgKiBwdC5jICh0c3Vic3QpOiBEZWNyZWFzZSB0aGUgdGVtcGxhdGUtbGV2ZWwgb2YKCSBURU1QTEFURV9URU1QTEFURV9QQVJNUy4gIExpa2V3aXNlIGZvciB0aGUgREVDTF9JTklUSUFMIG9mIGEKCSBURU1QTEFURV9QQVJNX0lOREVYLgoJICh0ZW1wbGF0ZV9kZWNsX2xldmVsKTogTmV3IGZ1bmN0aW9uLgoJICh1bmlmeSk6IE1ha2Ugc3VyZSB0byByZWNvcmQgdW5pZmljYXRpb25zIGZvciB0ZW1wbGF0ZQoJIHBhcmFtZXRlcnMsIGV2ZW4gd2hlbiB0aGUgcGFyYW1ldGVycyBleGFjdGx5IG1hdGNoIHRoZSBhcmd1bWVudHMuCgkgQ29tYmluZSBkdXBsaWNhdGVkIGNvZGUgZm9yIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1zIGFuZAoJIFRFTVBMQVRFX1RZUEVfUEFSTVMuICBEb24ndCB0cnkgdG8gdW5pZnkgdGVtcGxhdGUgcGFyYW1ldGVycyB0aGF0CgkgYXJlbid0IGZyb20gdGhlIGxldmVsIHdlJ3JlIGN1cnJlbnRseSB3b3JraW5nIG9uLgoKVHVlIEFwciAyMSAyMjowMDowNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBlcnJmbi5jIChjcF90aGluZyk6IFVzZSB4cmVhbGxvYywgbm90IHhtYWxsb2MsIHRvIGNvcHkgbWVtb3J5LgoKCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogU2V0IERFQ0xfSUdOT1JFRCBmb3IgbWVtYmVyCgljbGFzcyB0ZW1wbGF0ZXMsIHRvby4KCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IFJlbWFuZ2xlIHRoZSBuYW1lIG9mIGEgbWVtYmVyIFRZUEVfREVDTC4KClR1ZSBBcHIgMjEgMTg6NTk6MTEgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbmx5IGNoZWNrIERFQ0xfRlJJRU5EX1AgaWYgZnVuY3Rpb24uCgpUdWUgQXByIDIxIDE0OjIyOjAwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNwLXRyZWUuaCAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGludFRJX3R5cGVfbm9kZSwgdW5zaWduZWRfaW50VElfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSGFuZGxlIFRJIHR5cGVzLgoJKiB0eXBlY2suYyAodW5zaWduZWRfdHlwZSwgc2lnbmVkX3R5cGUpOiBIYW5kbGUgVEkgdHlwZXMuCgpTYXQgQXByIDE4IDE1OjI1OjIxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBOZXcgYXJndW1lbnQgaW5fYWRkZWRfbGlicmFyaWVzLgoJTmV3IGxvY2FsIGFkZGVkX2xpYnJhcmllcy4gIEluY3JlbWVudCBjb3VudCB3aGVuIGFkZCBsaWJyYXJ5IHRvCglhcmdsaXN0LgoKRnJpIEFwciAxNyAyMToyNTowMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKHR5cGVfYXNfc3RyaW5nX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkqIHB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IFVzZSBpdC4KCSogZXJyb3IuYyAoZHVtcF9hZ2dyX3R5cGUpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGR1bXBfdHlwZV9wcmVmaXgpOiBMaWtld2lzZS4KCShkdW1wX3R5cGVfc3VmZml4KTogTGlrZXdpc2UuCgkoZHVtcF90eXBlX3JlYWwpOiBDb252ZXJ0IGZyb20gZHVtcF90eXBlLiAgSWYgZGVzaXJlZCwgdGhlCgkiY2Fub25pY2EiIG5hbWUgb2YgYSB0eXBlZGVmLCBpLmUuLCB0aGUgbmFtZSBvZiB0aGUgdW5kZXJseWluZwoJdHlwZSwgY2FuIGJlIHByaW50ZWQuCgkoZHVtcF90eXBlKTogQ2FsbCBkdW1wX3R5cGVfcmVhbC4KCkZyaSBBcHIgMTcgMTQ6MzA6NDUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogLWZuZXctYWJpIGltcGxpZXMgLWZ2dGFibGUtdGh1bmtzLgoKCSogdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogVHdlYWsgcGVkYW50aWMgY2FzZS4KCShjb21wX3RhcmdldF9wYXJtcyk6IFR3ZWFrIHBlZGFudGljIGNhc2UuICBDbGVhbiB1cCBzb21ld2hhdC4KCVJldHVybiAtMSBvciAxIGluc3RlYWQgb2YgMSBvciAyLgoJKGNvbXBwYXJtcyk6IFJlbW92ZSBTVFJJQ1QgaGFuZGxpbmcuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEZpeCBoYW5kbGluZyBvZiBwbWZzLgoKRnJpIEFwciAxNyAxNDowNDoxNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBIYW5kbGUgcmVmZXJlbmNlcyBsaWtlIHBvaW50ZXJzLgoJKGNvbXBfdGFyZ2V0X3Bhcm1zKTogTm90ZSB0aGF0IHJldHVybiBjb2RlIGZyb20gY29tcF90YXJnZXRfdHlwZXMKCWNhbiBiZSBuZWdhdGl2ZSB0byBpbmRpY2F0ZSBmYWlsdXJlLgoKRnJpIEFwciAxNyAwOToxMDo1MiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmFsbC5idWlsZCk6IERvbid0IGRlcGVuZCBvbiAkKERFTUFOR0xFUl9QUk9HKSwKCXdoaWNoIHJlcXVpcmVzIGEgd29ya2luZyB0YXJnZXQgY29tcGlsZXIgdG8gYnVpbGQuCgpGcmkgQXByIDE3IDA4OjU3OjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRyZWUuYyAoYXZvaWRfb3ZlcmxhcCk6IEFkZCBwcm90b3R5cGUuCgoJKiBzcGV3LmMgKG51bV90b2tlbnMpOiBBZGQgcHJvdG90eXBlLgoJKG50aF9ub2tlbiwgYWRkX3Rva2VuLCBjb25zdW1lX3Rva2VuLCBkZWJ1Z195eWNoYXIpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChkZnNfY2hlY2tfb3ZlcmxhcCk6IEFkZCBwcm90b3R5cGUuCgkoZGZzX25vX292ZXJsYXBfeWV0KTogTGlrZXdpc2UuCgoJKiBwdC5jIChvcmlnaW5hbF90ZW1wbGF0ZSk6IEFkZCBwcm90b3R5cGUuCgkoaW5saW5lX25lZWRzX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkocHVzaF9pbmxpbmVfdGVtcGxhdGVfcGFybXNfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkocmV0cmlldmVfc3BlY2lhbGl6YXRpb24sIHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocHJpbnRfY2FuZGlkYXRlcywgcmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwpOiBMaWtld2lzZS4KCShidWlsZF90ZW1wbGF0ZV9kZWNsLCBtYXJrX3RlbXBsYXRlX3Bhcm0pOiBMaWtld2lzZS4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uLCBnZXRfYmluZGluZ3NfcmVhbCk6IExpa2V3aXNlLgoKCSogbWV0aG9kLmMgKHN0YXJ0X3NxdWFuZ2xpbmcpOiBBZGQgcHJvdG90eXBlLgoJKGVuZF9zcXVhbmdsaW5nLCBjaGVja19rdHlwZSwgaXNzdWVfa3R5cGUpOiBMaWtld2lzZS4KCShidWlsZF9vdmVybG9hZGVkX3Njb3BlX3JlZiwgY2hlY2tfYnR5cGUpOiBMaWtld2lzZS4KCShidWlsZF9tYW5nbGVkX3RlbXBsYXRlX3Bhcm1faW5kZXgpOiBMaWtld2lzZS4KCgkqIGxleC5jIChpbml0X2NwcF9wYXJzZSk6IEFkZCBwcm90b3R5cGUuCgkoaGFuZGxlX2NwX3ByYWdtYSwgaGFuZGxlX3N5c3ZfcHJhZ21hKTogTGlrZXdpc2UuCgkocmVkdWNlX2NtcCwgdG9rZW5fY21wKTogTGlrZXdpc2UuCgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogQWRkIHByb3RvdHlwZS4KCShwdXNoX2VoX2luZm8sIGdldF9laF9pbmZvLCBnZXRfZWhfdmFsdWUsIGdldF9laF90eXBlKTogTGlrZXdpc2UuCgkoZ2V0X2VoX2NhdWdodCwgZ2V0X2VoX2hhbmRsZXJzLCBkb19wb3BfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChpc19uYW1lc3BhY2VfYW5jZXN0b3IpOiBBZGQgcHJvdG90eXBlLgoJKG5hbWVzcGFjZV9hbmNlc3RvciwgYWRkX3VzaW5nX25hbWVzcGFjZSk6IExpa2V3aXNlLgoJKGFtYmlndW91c19kZWNsKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGluZGVudCk6IEFkZCBwcm90b3R5cGUuCgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IEFkZCBwcm90b3R5cGUuCgpGcmkgQXByIDE3IDAxOjU3OjEyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogSnVzdCByZXR1cm4gYSBQTUYuCgpGcmkgQXByIDE3IDAwOjQ1OjEyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRG9uJ3Qgc3RyaXAgY3YtcXVhbGlmaWVycwoJd2hlbiBkb2luZyBpbml0aWFsaXphdGlvbnMuCgoJKiBwdC5jICh1bmlmeSk6IFVzZSBjb21wdHlwZXMgdG8gY29tcGFyZSB0eXBlIGFyZ3MuCgpGcmkgQXByIDE3IDAwOjI0OjIyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRml4IGNoZWNrIGZvciB3aGVuIGl0J3Mgc2FmZSB0byBmcmVlCgl0aGUgbmV3IGRlY2wuCgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBEb24ndCBwYXNzIGEgdHlwZWRlZiB0eXBlCgl0byB0eXBlX2FzX3N0cmluZy4KClRodSBBcHIgMTYgMTc6NDc6MzAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcHQuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9pbmRleCk6IEFkZCBwcm90b3R5cGUuCgoJKiBzZWFyY2guYyAobXlfdHJlZV9jb25zKTogRG9uJ3QgY2xlYXIgd29yZHMgb3V0c2lkZSB0aGUKCW5ld2x5IGFsbG9jYXRlZCBub2RlLgoKV2VkIEFwciAxNSAxNTozNDo0NCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IE5vdyByZXR1cm5zIGNoYXIqIGNvbnRhaW5pbmcgdGhlIGZpbGVuYW1lLgoKV2VkIEFwciAxNSAxMzoyMDowNiAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCQkJICBKZWZmIExhdyAgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIGVycmZuLmM6IFJld29yayB0byBhdm9pZCBwcm9ibGVtcyB3aGVuIEhPU1RfV0lERV9JTlQgaXMgbG9uZ2VyCgl0aGFuIGEgcG9pbnRlci4KClN1biBBcHIgMTIgMjI6MzE6MTkgMTk5OCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBVc2UgVFlQRV9QUkVDSVNJT04uCgpGcmkgQXByIDEwIDEyOjE2OjQ5IDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgd2FybiBmb3IgcmVkdW5kYW50IGRlY2xzIGlmCiAJZnJpZW5kOiBsZXQgYWRkX2ZyaWVuZCB0YWtlIGNhcmUgb2YgaXQuCgpUaHUgQXByICA5IDAyOjQwOjQ4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9jb25zdHJ1Y3Rvcik6IERvbid0IHNldAoJVFJFRV9IQVNfQ09OU1RSVUNUT1IgZm9yIGEgc2lnbmF0dXJlIHBvaW50ZXIuCgkqIGN2dC5jIChvY3BfY29udmVydCk6IERvbid0IGZvcmNlIGEgdGVtcG9yYXJ5IGZvciBpbnRlcm5hbCBzdHJ1Y3RzLgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IFdhcm4gYWJvdXQgaW1wbGljaXQgJiBvbiBwbWZzIAoJaGVyZSwgdG9vLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBPbmx5IGFsbG93IHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIAoJcmVhbCBjb25zdHJ1Y3Rvci4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IFNpbXBsaWZ5LgoJKHN0b3JlX2luaXRfdmFsdWUpOiBEb24ndCBwZWR3YXJuIGFib3V0IHVzaW5nIHsgfSBmb3IgcG1mcy4KClRodSBBcHIgIDkgMjI6MTY6NTcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgogICAgICAgICogY3AtdHJlZS5oIChzdGFydF9kZWNsKTogIFVwZGF0ZSBwcm90b3R5cGUuCiAgICAgICAgKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiAgTGlrZSB0aGUgQyB2ZXJzaW9uLCBuZXcgcGFyYW1ldGVycwogICAgICAgIGZvciB0aGUgYXR0cmlidXRlcy4gIENhbGwgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzIGhlcmUsCiAgICAgICAgKHB1c2hkZWNsKTogIExpa2UgQyB2ZXJzaW9uLCBkbyBidWlsZF90eXBlX2NvcHkgaWYgVFlQRV9ERUNMLAogICAgICAgIChncm9rZGVjbGFyYXRvcik6ICBQYXNzIE5VTEwgZm9yIG5ldyBzdGFydF9kZWNsIGFyZ3VtZW50cy4KICAgICAgICAqIHB0LmMgKHRzdWJzdF9leHByKTogIExpa2V3aXNlLgogICAgICAgICogcGFyc2UueTogIE1lcmdlIGNwbHVzX2RlY2xfYXR0cmlidXRlIGNhbGxzIGludG8gc3RhcnRfZGVjbCBjYWxscy4KCSogdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogQ2hlY2sgVFlQRV9NQUlOX1ZBUklBTlQuCgkqIGxleC5jIChidWlsZF9sYW5nX2RlY2wpOiBBZGQgbGFuZ19uYW1lX2phdmEuCgkqIGNsYXNzLmMgKHB1c2hfbGFuZ19jb250ZXh0KTogQWRkIGxhbmdfbmFtZV9qYXZhLgoJKiBtZXRob2QuYyAoYnVpbGRfbWFuZ2xlZF9uYW1lKTogQ2hlY2sgZm9yIGlzX2phdmFfdHlwZS4KClRodSBBcHIgIDkgMjI6MTY6NTcgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENoZWNrIFRZUEVfTUFJTl9WQVJJQU5ULgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IENoZWNrIGZvciBUUkVFX0NPREUgZm9yCglWT0lEX1RZUEUgaW5zdGVhZCBvZiB0eXBlID09ICB2b2lkX3R5cGVfbm9kZS4KCShidWlsZF9tZXRob2RfY2FsbCk6IERpdHRvLgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBEaXR0by4KCShncm9rZGVjbGFyYXRvcik6IERpdHRvLgoJKHN0YXJ0X2RlY2wpOiBEaXR0by4KCShncm9rcGFybXMpOiBEaXR0by4KCShzdGFydF9mdW5jdGlvbik6IERpdHRvLgoJKGZpbmlzaF9mdW5jdGlvbik6IERpdHRvLgoJKHN0YXJ0X21ldGhvZCk6IERpdHRvLgoKVGh1IEFwciAgOSAwMDoxODo0NCAxOTk4ICBEYXZlIEJyb2xsZXkgIChicm9sbGV5QGN5Z251cy5jb20pCgoJKiBsZXguYyAoZmlucHV0KTogTmV3IHZhcmlhYmxlLgoJKGluaXRfY3BwX3BhcnNlKTogIFJlbmFtZWQgZnJvbSBpbml0X3BhcnNlLgoJKGluaXRfcGFyc2UpOiBIYW5kbGUgIVVTRV9DUFBMSUIuICBDYWxsIGluaXRfY3BwX3BhcnNlIHdoZW4gZmluaXNoZWQuCgkoZmluaXNoX3BhcnNlKTogTmV3IGZ1bmN0aW9uLgoJKiBjcC10cmVlLmggKGluaXRfbGV4LCBpbml0X3BhcnNlKTogUmVtb3ZlIGRlY2xhcmF0aW9ucy4KCk1vbiBBcHIgIDYgMDI6MjU6MDUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9jYWxsKTogU3RpbGwgZXZhbHVhdGUgdGhlIGFjdHVhbCBhcmd1bWVudC4KCSogY2xhc3MuYyAoaXNfZW1wdHlfY2xhc3MpOiBVcGRhdGUgZm9yIC1mbmV3LWFiaS4KCgkqIGRlY2wyLmM6IC1mbmV3LWFiaSBpbXBsaWVzIC1mc3F1YW5nbGUuCgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfYXNzaWduX3JlZik6IERvbid0IGRvIGFueXRoaW5nIHRvIGNvcHkKCWFuIGVtcHR5IGNsYXNzLgoJKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBMaWtld2lzZS4KClNhdCBBcHIgIDQgMTg6NDM6NTggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChhdm9pZF9vdmVybGFwKTogUmV0dXJuIGEgdmFsdWUuCgpTYXQgQXByICA0IDEyOjUyOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1ldGhvZC5jIChjaGVja19idHlwZSk6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IHRvIHhyZWFsbG9jLgoJKGNoZWNrX2t0eXBlKTogTGlrZXdpc2UuCgpGcmkgQXByICAzIDAyOjIyOjU5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCglJbXBsZW1lbnQgZW1wdHkgYmFzZSBvcHRpbWl6YXRpb24uCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkZCB2YmFzZSBmaWVsZHMgZWFybGllci4gIFNldCAKCUNMQVNTVFlQRV9TSVpFIG9mIGFuIGVtcHR5IGJhc2UgdG8gMC4gIFR5cGVzIHdpdGggYmFzZXMgY2FuIGJlIGVtcHR5LgoJKiBzZWFyY2guYyAoZGZzX2NoZWNrX292ZXJsYXAsIGRmc19ub19vdmVybGFwX3lldCk6IE5ldyBmbnMuCgkodHlwZXNfb3ZlcmxhcF9wKTogTmV3IGZuLgoJKiB0cmVlLmMgKGF2b2lkX292ZXJsYXApOiBOZXcgZm4uCgkoYnVpbGRfYmFzZV9maWVsZHMpOiBVc2UgaXQgdG8gYXZvaWQgb3ZlcmxhcHBpbmcgZW1wdHkgYmFzZXMuCgkqIGNwLXRyZWUuaCwgZGVjbDIuYywgbGFuZy1vcHRpb25zLmg6IEFkZCAtZm5ldy1hYmkuCgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBTdHJpcCB1bnVzZWQgSU5ESVJFQ1RfUkVGcy4KCglSZS1pbXBsZW1lbnQgYWxsb2NhdGlvbiBvZiBiYXNlIGNsYXNzIHN1Ym9iamVjdHMuCgkqIHRyZWUuYyAodW5zaGFyZV9iYXNlX2JpbmZvcyk6IE5ldyBmbi4KCShsYXlvdXRfYmFzZXR5cGVzKTogVXNlIGl0LiAgTm93IGhhbmRsZXMgb2Zmc2V0cyBvZiBib3RoIHZpcnR1YWwgYW5kCglub24tdmlydHVhbCBiYXNlcywgYWZ0ZXIgbGF5b3V0X3R5cGUuCgkobGF5b3V0X3ZiYXNldHlwZXMpOiBSZW1vdmUuCgkoYnVpbGRfYmFzZV9maWVsZHMpOiBHZW5lcmF0ZSBGSUVMRF9ERUNMcyBmb3IgZWFjaCBub24tdmlydHVhbCBiYXNlLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogU3BsaXQgb3V0IGZyb20gb2xkIGxheW91dF9iYXNldHlwZXMuCgkqIGNsYXNzLmMgKGZpbmlzaF9iYXNlX3N0cnVjdCk6IExvc2Ugb2Zmc2V0IGhhbmRsaW5nIGNvZGUuCglNb3ZlIG5vbnZkdG9yIHdhcm5pbmcgaGVyZS4gIERvbid0IG1lc3Mgd2l0aCB0X2JpbmZvIGFueW1vcmUuCgkoZmluaXNoX3N0cnVjdF8xKTogRG9uJ3QgbWVzcyB3aXRoIHRfYmluZm8gYW55bW9yZS4gIFVzZSBmbnMgYWJvdmUuCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoKVGh1IEFwciAgMiAxNDoyNToxMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmg6IExvc2UgQ0xBU1NUWVBFX1ZCQVNFX1NJWkUsIHNvbWUgdW51c2VkIHN0dWZmLgoJKiBkZWNsLmMsIGRlY2wyLmMsIHB0LmMsIHB0cmVlLmMsIGxleC5jOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZHVwbGljYXRlX3RhZ19lcnJvcik6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IFNldCBDTEFTU1RZUEVfU0laRSwgQ0xBU1NUWVBFX01PREUsIENMQVNTVFlQRV9BTElHTi4KCSogdHJlZS5jIChsYXlvdXRfdmJhc2V0eXBlcyk6IFVwZGF0ZSBmcm9tIGxheW91dF9yZWNvcmQsIHJlbW92ZQoJdmFyX3NpemUgc3VwcG9ydCwgdXNlIENMQVNTVFlQRV9TSVpFIGluc3RlYWQgb2YgQ0xBU1NUWVBFX1ZCQVNFX1NJWkUuCgkobGF5b3V0X2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoKV2VkIEFwciAgMSAxODoyMjoyNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjbGFzcy5jLCBNYWtlIHN1cmUgc3lzdGVtLmggaXMgaW5jbHVkZWQganVzdCBhZnRlciBjb25maWcuaC4KCURlbGV0ZSBsaW5nZXJpbmcgc3RkaW8gYW5kIGVycm5vIHJlZmVyZW5jZXMgdG9vLgoJKiBkZWNsLmMsIGVycmZuLmMsIHBhcnNlLnksIHB0cmVlLmMgc2VhcmNoLmMsIHhyZWYuYzogTGlrZXdpc2UuCgkKV2VkIEFwciAgMSAxNTozODozNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogRml4IGFjY2VzcyBjb250cm9sIGZvciBsb2NhbCBjbGFzc2VzLgoKCSogY2xhc3MuYyAoaXNfZW1wdHlfY2xhc3MpOiBOZXcgZm4uCgkqIGNhbGwuYyAoYnVpbGRfY2FsbCk6IERvbid0IHBhc3MgZW1wdHkgY2xhc3Mgb2JqZWN0cyB0byBhIGZ1bmN0aW9uLgoKV2VkIEFwciAgMSAxNDo1ODozNSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvIG5hbWUgcmVzb2x1dGlvbiBmb3IgZGVmYXVsdAoJYXJndW1lbnRzIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcyBpbiB0aGUgc2NvcGUgb2YgdGhlIHRlbXBsYXRlcy4KClR1ZSBNYXIgMzEgMTM6NDM6NTcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2FsbC5jOiBJbmNsdWRlIHN5c3RlbS5oLiAgUmVtb3ZlIGluY2x1ZGVzLCBkZWNsYXJhdGlvbnMgYW5kCglkZWZpbmVzIHByb3ZpZGVkIGJ5IHN5c3RlbS5oLgoJKiBjbGFzcy5jLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLCBlcnJmbi5jIGVycm9yLmM6IExpa2V3aXNlLgoJKiBleGNlcHQuYywgZXhwci5jIGZyaWVuZC5jLCBnKytzcGVjLmMsIGluaXQuYywgaW5wdXQuYzogTGlrZXdpc2UuCgkqIGxleC5jLCBwYXJzZS55LCBwdC5jLCBwdHJlZS5jIHJlcG8uYyBydHRpLmMsIHNlYXJjaC5jOiBMaWtld2lzZS4KCSogc2VtYW50aWNzLmMsIHNpZy5jLCBzcGV3LmMsIHRyZWUuYywgdHlwZWNrLmM6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMsIHhyZWYuYzogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluOiBEZXBlbmRlbmNpZXMgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4KCSogTWFrZS1sYW5nLmluOiBMaWtld2lzZS4KCk1vbiBNYXIgMzAgMTI6MTU6MDAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKIAkqIHB0LmMgKGZuX3R5cGVfdW5pZmljYXRpb24pOiBBbGxvdyBpbmNvbXBsZXRlIHVuaWZpY2F0aW9uIHdpdGhvdXQgCglhbiBpbW1lZGlhdGUgZXJyb3IgbWVzc2FnZS4KCk1vbiBNYXIgMzAgMDg6NTU6NDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChtZW1iZXJfcCk6IE5ldyBmbi4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBPbmx5IHNldCBERUNMX1NUQVRJQ19GVU5DVElPTl9QIGZvcgoJaW5pdGlhbGl6aW5nIGNsYXNzIG1lbWJlcnMuCgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfUEFSTV9JTkRFWCk6IENsYXNzICd4Jy4KCSogcHRyZWUuYyAobGFuZ19wcmludF94bm9kZSk6IEhhbmRsZSBURU1QTEFURV9QQVJNX0lOREVYLgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEhhbmRsZSBub24tc2NvcGVkIGRlc3RydWN0b3JzLCB0b28uCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgoJKiBwdC5jIChwcmludF90ZW1wbGF0ZV9jb250ZXh0KTogU3BsaXQgb3V0Li4uCgkocHVzaF90aW5zdF9sZXZlbCk6IC4uLmZyb20gaGVyZS4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBEb24ndCBwYXNzIGEgdHlwZSB0byBkZWNsX2Z1bmN0aW9uX2NvbnRleHQuCgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBBbHdheXMgaGFuZCBvZmYKCWNvbnZlcnNpb25zIHRvIGNsYXNzIHR5cGUuCgpTdW4gTWFyIDI5IDIwOjAxOjU5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBMb2NhbCBjbGFzc2VzIGhhdmUgdGhlIHNhbWUgYWNjZXNzIGFzIHRoZQoJZW5jbG9zaW5nIGZ1bmN0aW9uLgoKU3VuIE1hciAyOSAwMDo0NzozMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0eXBlY2suYyAoZXhwYW5kX3RhcmdldF9leHByKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgoJKiBzZWFyY2guYzogUHV0IHZhcmlvdXMgcHJvdG90eXBlcyBpbnNpZGUgI2lmZGVmIE1JX01BVFJJWC4KCgkqIHJlcG8uYyAoc2F2ZV9zdHJpbmcpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCgkqIG1ldGhvZC5jICh0aHVua19wcmludGFibGVfbmFtZSk6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoKCSogbGV4LmMgKHl5bmV4dGNoKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgoJKiBleHByLmMgKHRyZWVfZXh0cmFjdF9hZ2dyX2luaXQpOiAjaWYgMCBvdXQuCgoJKiBleGNlcHQuYyAoZG9fdW53aW5kKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgkoZWFzeV9leHBhbmRfYXNtKTogTGlrZXdpc2UuCgoJKiBjdnQuYyAoYnVpbGRfY29udmVyc2lvbl90eXBlXzEpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCgkqIGNwLXRyZWUuaCAocHVzaF9leHByZXNzaW9uX29ic3RhY2spOiBEZWNsYXJlLgoKCSogY2FsbC5jIChzb3VyY2VfdHlwZSk6ICNpZiAwIG91dC4KCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2Vzcyk6IFJlbW92ZSB1bnVzZWQgbGFiZWwuICBBZGQgYnJhY2VzCglhcm91bmQgZW1wdHkgZWxzZSBjbGF1c2UuCgoJKiBsZXguYyAoeXlwcmludCk6IEZpeCBhcmd1bWVudCB0byBwcmludGYuCgpTYXQgTWFyIDI4IDE3OjQzOjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHRzdWJzdCk6IENsZWFyIFRSRUVfVVNFRCBmb3IgbmV3IEZVTkNUSU9OX0RFQ0xzLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBNYWtlIHN1cmUgdGVtcGxhdGUKCWFyZ3VtZW50cyBhcmUgcGVybWFuZW50LgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IERvbid0IGdvIGxvb2tpbmcgYXJvdW5kIGluCgl0ZW1wbGF0ZSB0eXBlcy4KCgkqIHNlbWFudGljcy5jOiBBZGQgcm91dGluZXMgdG8gaGFuZGxlIGV4cHJlc3Npb25zLCBhbmQgc29tZQoJZGVjbGFyYXRpb24gcHJvY2Vzc2luZy4KCSogcGFyc2UueTogVXNlIHRoZW0uCgkoY3VycmVudF9jbGFzc19kZXB0aCk6IE1vdmUgZGVjbGFyYXRpb24gdG8gY3AtdHJlZS5oLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogY3AtdHJlZS5oOiBVc2UgdGhlbS4KCShjdXJyZW50X2NsYXNzX2RlcHRoKTogRGVjbGFyZS4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBVc2UgYmVnaW5fc3RtdF9leHByIGFuZCBmaW5pc2hfc3RtdF9leHByLgoKRnJpIE1hciAyNyAyMDoyMzoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBCZSBhIGJpdCBtb3JlIGV4cGxpY2l0IHdpdGggdGVtcGxhdGUKCXR5cGUgYXJndW1lbnRzLCB3aGVuIHZlcmJvc2UuCgkKRnJpIE1hciAyNyAxODoxNjo0MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbmMvZXhjZXB0aW9uOiBSZW9yZGVyIGNsb3NpbmcgYnJhY2VzLgoKRnJpIE1hciAyNyAxMzoyMjoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChyZWRlY2xhcmVfY2xhc3NfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uCgkqIGNwX3RyZWUuaCAocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogRGVjbGFyZSBpdC4KCSogZGVjbC5jICh4cmVmX3RhZyk6IFVzZSBpdC4KClRodSBNYXIgMjYgMTE6MTY6MzAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBDaGVjayBJU19BR0dSX1RZUEUsIG5vdCAKCVRZUEVfTEFOR19TUEVDSUZJQy4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUmVtb3ZlIGNvbnN0IGFuZCB2b2xhdGlsZSBmcm9tIHR5cGUgYWZ0ZXIKCXNldHRpbmcgY29uc3RwIGFuZCB2b2xhdGlsZXAuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBEb24ndCB3YXJuIGFib3V0IGJvb2wgYml0ZmllbGQgbGFyZ2VyCgl0aGFuIG9uZSBiaXQuCgpUaHUgTWFyIDI2IDEwOjI1OjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IFNUUklQX05PUFMgd2hlcmUgYXBwcm9wcmlhdGUuCgpUaHUgTWFyIDI2IDEwOjI0OjA1IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBDb21wbGFpbiBhYm91dCBhbWJpZ3VvdXMgb3BlcmF0b3IoKSwKCXJhdGhlciB0aGF0IGNyYXNoaW5nLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogTGlrZXdpc2UuCgpUaHUgTWFyIDI2IDEwOjIzOjI0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGN2dC5jIChwZXJmb3JtX3F1YWxpZmljYXRpb25fY29udmVyc2lvbnMpOiBVc2UgY29tcF90YXJnZXRfdHlwZXMKCWluc3RlYWQgb2YgY29tcF9wdHJfdHR5cGVzLgoKV2VkIE1hciAyNSAxNjoxMDo1MCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKGVuZm9yY2VfYWNjZXNzKTogRGVjbGFyZS4KCSogY2FsbC5jIChlbmZvcmNlX2FjY2Vzcyk6IE1ha2UgaXQgZXh0ZXJuLCBub3Qgc3RhdGljLgoJKiBjbGFzcy5jIChhbHRlcl9hY2Nlc3MpOiBVc2UgZW5mb3JjZV9hY2Nlc3M7IG1vZGlmeSBjb2RlIGZvciBJU08KCWNvbXBsaWFuY2UsIHJhdGhlciB0aGFuIEFSTSBydWxlcy4KCldlZCBNYXIgMjUgMTI6MTA6NDUgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIGNwLXRyZWUuaDogRml4IHR5cG8uCgpXZWQgTWFyIDI1IDAyOjAxOjAyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBPbmx5IGRvIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTiB0aGluZwoJaWYgKGFnZ3JlZ2F0ZV92YWx1ZV9wICh0eXBlKSkuCgoJKiBkZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBIYW5kbGUgVFlQRU5BTUVfVFlQRS4KClR1ZSBNYXIgMjQgMTY6MTI6MDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHJlZS5jIChtYXBjYXIpOiBXaGVuIGRlYWxpbmcgd2l0aCBhIERFQ0wsIHVzZSBpdCdzIGNvbnN0YW50Cgl2YWx1ZSwgaWYgYW55LgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBtYW5nbGUgdGhlIG5hbWVzIG9mIHRlbXBsYXRlCgljbGFzc2VzIHdob3NlIGFyZ3VtZW50cyBhcmUgdW5rbm93bi4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogSGFuZGxlIEdPVE9fU1RNVCBjb3JyZWN0bHkuCgpUdWUgTWFyIDI0IDEyOjIxOjU1IDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBUWVBFX1BSRUNJU09OIGZvciBib29scyB0byAxLgoKVHVlIE1hciAyNCAxMjoyMTo0OCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgogICAgICAgICogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgVFlQRV9NQVhfVkFMVUUgZm9yCiAgICAgICAgYm9vbGVhbl90eXBlX25vZGUgdG8gMS4KClR1ZSBNYXIgMjQgMTA6MjM6NDcgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbCcuCgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogTmV3IGZ1bmN0aW9uLCBjcmVhdGVkIGJ5Cgljb252ZXJ0aW5nIHVzZXNfdGVtcGxhdGVfcGFybXMuCgkodHJlZV9mbl90KTogTmV3IHR5cGVkZWYuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IFVzZSBpdC4KCShtYXJrX3RlbXBsYXRlX3Bhcm0pOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgbGlzdCBvZiBhIHBhcnRpYWwKCXNwZWNpYWxpemF0aW9uIHVzZXMgYWxsIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKCSogTWFrZS1sYW5nLmluIChjKytmaWx0KTogRG9uJ3QgZGVsZXRlIGN4eG1haW4uYyBhZnRlciB3ZSdyZSBkb25lCgl3aXRoIGl0OyB3ZSBtaWdodCB3YW50IGl0IGZvciBkZWJ1Z2dpbmcuCgkqIGNwLXRyZWUuaCAodHlwZV91bmlmaWNhdGlvbik6IENoYW5nZSBpbnRlcmZhY2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFNraXAgbmVzdGVkIHRlbXBsYXRlIHR5cGVzLCBqdXN0IGxpa2UKCW9yZGluYXJ5IG5lc3RlZCB0eXBlcy4KCShpbnN0YW50aWF0ZV90eXBlKTogVXNlIG5ldyBpbnRlcmZhY2UgdG8gdHlwZV91bmlmaWNhdGlvbi4KCSogbGV4LmMgKGluaXRfbGV4KTogQWRkIF9fc3ogYXMgb3BuYW1lIGZvciBzaXplb2YuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9zY29wZV9yZWYpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogSGFuZGxlIGNvbXBsZXggZXhwcmVzc2lvbnMuICBTZXQKCW51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGlmIG5lY2Vzc2FyeS4KCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IEhhbmRsZSBub24tUEFSTV9ERUNMIG5vZGVzOyB0aGlzCglyb3V0aW5lIGlzIG5vdyB1c2VkIGJ5IGJ1aWxkX292ZXJsb2FkX2ludC4gIFJlbW92ZSBzb21lCglhc3NpZ25tZW50cyB0byBudW1lcmljX291dHB1dF9uZWVkX2Jhci4gIFVzZQoJYnVpbGRfb3ZlcmxvYWRfc2NvcGVfcmVmLgoJKGJ1aWxkX3F1YWxpZmllZF9uYW1lKTogTm90ZSB0aGF0IHNvbWUgdGVtcGxhdGUgbWFuZ2xlZCBuYW1lcyBlbmQKCXdpdGggZGlnaXRzLCBhbmQgc2V0IG51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGFwcHJvcHJpYXRlbHkuICBVc2UKCWJ1aWxkX3VuZGVyc2NvcmVfaW50LgoJKiBwdC5jICh1bmlmeSk6IENoYW5nZSBpbnRlcmZhY2UuCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogVXNlIG5ldyBpbnRlcmZhY2VzLgoJKHRzdWJzdCk6IERlYWwgZ3JhY2VmdWxseSB3aXRoIHNpdHVhdGlvbnMgaW4gd2hpY2ggdGhlIGFyZ3VtZW50Cgl2ZWN0b3IgaXMgbm90IGZ1bGx5IGZpbGxlZC4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogVXNlIG5ldyBpbnRlcmZhY2VzLgoJKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4gIFJlbW92ZSBOT1BfRVhQUiBoYWNrLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuICBEZWFsIHdpdGggdW5pZmljYXRpb24gb2YgY29tcGxleCBleHByZXNpb25zLgoKTW9uIE1hciAyMyAxMjoyNDozNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjb21wbGV0ZV90ZW1wbGF0ZV9hcmdzKTogSW5pdGlhbGl6ZSBza2lwIHByb3Blcmx5LgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBSZXZlcnQuCgkobWFrZV9pbXBsaWNpdF90eXBlbmFtZSk6IFJlbW92ZS4KCShsb29rdXBfbmFtZV9yZWFsKTogRG9uJ3QgY2FsbCBpdC4gIENhbGwgbG9va3VwX2ZpZWxkIGlmIHdlIHNlZSBhCglUWVBFX0RFQ0wgZnJvbSBhIHRlbXBsYXRlIGJhc2UuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBEbyBpbXBsaWNpdCB0eXBlbmFtZSBzdHVmZi4KClN1biBNYXIgMjIgMDA6NTA6NDIgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KICAgICAgICAgICAgICAgICAgICAgICAgICBHZW9mZiBOb2VyICAgIDxub2VyQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogVmFyaW91cyBmaXhlcyBmb3IgYnVpbGRpbmcgY3lnd2luMzIgbmF0aXZlIHRvb2xjaGFpbnMuCgkqIE1ha2UtbGFuZy5pbjogTGlrZXdpc2UuCgpGcmkgTWFyIDIwIDE4OjA3OjM5IDE5OTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+CgoJKiBwdC5jICh0c3Vic3QsIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBTaW1wbGlmeS4KCkZyaSBNYXIgMjAgMTA6NDI6MDcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogUmV3cml0ZSByZW1vdmVkIGNvZGUuCgkobWFrZV90eXBlbmFtZV90eXBlKTogQ2FsbCBpdCBpZiB0aGUgdHlwZSB3ZSBsb29rIHVwIGNvbWVzIGZyb20KCWEgYmFzZSB0aGF0IHVzZXMgdGVtcGxhdGUgcGFybXMuCgoJKiBwdC5jIChjb21wbGV0ZV90ZW1wbGF0ZV9hcmdzKTogUmV3cml0ZS4KCSh0c3Vic3QsIEZVTkNUSU9OX0RFQ0wpOiBVc2UgaXQuCgpGcmkgTWFyIDIwIDA4OjEyOjQzIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHNlbWFudGljcy5jIChmaW5pc2hfYXNtX3N0bXQpOiBGaXggY29tYmluZSBzdHJpbmdzLiBDYWxsCgljX2V4cGFuZF9hc21fb3BlcmFuZHMgKCkgaWYgb3V0cHV0X29wZXJhbmRzLCBpbnB1dF9vcGVyYW5kcyBvcgoJY2xvYmJlcnMgaXMgbm90IE5VTExfVFJFRS4KCkZyaSBNYXIgMjAgMDA6MTA6MTkgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2JpbmRpbmdzKTogRGVhbCB3aXRoIHNwZWNpYWxpemF0aW9ucyBvZiBmdW5jdGlvbiB0ZW1wbGF0ZXMKCXdpdGggcmV0dXJuIHR5cGUgY29udGFpbmluZyBwYXJhbWV0ZXJzIGZyb20gb3V0ZXIgY2xhc3MgCgl0ZW1wbGF0ZXMuCgkodHN1YnN0LCBURU1QTEFURV9URU1QTEFURV9QQVJNKTogV2hlbiByZWR1Y2luZyBwYXJhbWV0ZXIgbGV2ZWwsCglzdWJzdGl0dXRlIGFyZ3VtZW50cyBhbmQgY29tcG9zZSBhIG5ldyB0eXBlLgoKVGh1IE1hciAxOSAxOTowMTo0OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh0c3Vic3QpOiBDbGVhciBERUNMX1BFTkRJTkdfSU5MSU5FX0lORk8gZm9yIG5ldwoJRlVOQ1RJT05fREVDTHMuCgpUaHUgTWFyIDE5IDExOjUxOjU4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobWFrZV9pbXBsaWNpdF90eXBlbmFtZSk6IExvc2UgdXNlbGVzcyBjb2RlLgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogSGFuZGxlIEEqIC0+IGNvbnN0IEEqIHByb3Blcmx5LgoKCSogcHQuYyAoZ2V0X2JpbmRpbmdzX3JlYWwpOiBSZW5hbWUgZnJvbSBnZXRfYmluZGluZ3MuICBBZGQgCgljaGVja19yZXR0eXBlIHBhcm0uCgkoZ2V0X2JpbmRpbmdzKTogUGFzcyAxLgoJKGdldF9iaW5kaW5nc19vdmVybG9hZCk6IFBhc3MgMC4KCldlZCBNYXIgMTkgMDk6MDg6MTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBXaGVuIHJldmVydGluZyBhIHN0YXRpYwoJbWVtYmVyIGZ1bmN0aW9uLCBhbHNvIHJlbW92ZSB0aGUgYHRoaXMnIHBhcmFtZXRlciBmcm9tCglsYXN0X2Z1bmN0aW9uX3Bhcm1zLgoKVGh1IE1hciAxOSAwMjoyNzo0OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfY29weSwgQ09OU1RfREVDTCk6IERvbid0IGJvdGhlciB0c3Vic3RpbmcKCWEgZnVuY3Rpb24gY29udGV4dC4KCgkqIGRlY2wuYyAoc3RvcmVfYmluZGluZ3MpOiBVc2UgZnJlZV9iaW5kaW5nX3ZlY3MuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogTGlrZXdpc2UuCgpXZWQgTWFyIDE4IDEyOjQxOjQzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobWFrZV9pbXBsaWNpdF90eXBlbmFtZSk6IE9ubHkgY2hhbmdlIHRoZSB0eXBlIG9mIGEgCglUWVBFTkFNRV9UWVBFLgoKV2VkIE1hciAxOCAxMDowOTo1MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBzZW1hbnRpY3MuYzogTmV3IGZpbGUsIGNvbnRhaW5pbmcgcm91dGluZXMgdG8gcGVyZm9ybSB0aGUKCXNlbWFudGljIHBoYXNlIG9mIHBhcnNpbmcuCgkqIHBhcnNlLnk6IFVzZSBpdC4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBzZW1hbnRpY3MuYy4KCVByb3ZpZGUgbWFjcm9zIHRvIGFjY2VzcyBfU1RNVCB0cmVlIG5vZGVzLgoJKiBjcC10cmVlLmRlZjogQWRkIEFTTV9TVE1UIHRyZWUgbm9kZS4KCSogTWFrZWZpbGUuaW4sIE1ha2UtbGFuZy5pbjogQWRkIGRlcGVuZGVuY2llcyBvbiBhbmQgZm9yCglzZW1hbnRpY3MuYy4KCQpXZWQgTWFyIDE4IDAwOjI0OjEwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IE9ubHkgY2hlY2sgcHJpbWFyeSB0ZW1wbGF0ZXMuCgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IENvbXBsYWluIGFib3V0IGRlZmF1bHQgYXJncwoJaW4gZXhwbGljaXQgc3BlY2lhbGl6YXRpb24uCgoJKiBwYXJzZS55IChub21vZHNfaW5pdGRjbDApOiBBbHNvIGNhbGwgY3BfZmluaXNoX2RlY2wgZm9yIGEgCgljb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yLgoKVHVlIE1hciAxNyAxNDo0NDo1NCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0eXBlY2syLmMgKGJ1aWxkX3hfYXJyb3cpOiBEb24ndCBjcmFzaCB3aGVuIGFuIGFnZ3JlZ2F0ZSB0eXBlCgloYXMgbm8gb3ZlcmxvYWRlZCBvcGVyYXRvciAtPi4KCgkqIGNhbGwuYyAoYnVpbGRfZmllbGRfY2FsbCk6IERvbid0IGNyYXNoIHdoZW4gcHJlc2VudGVkIHdpdGggYQoJZmllbGQgdGhhdCBpcyBhY3R1YWxseSBhIG5lc3RlZCB0eXBlLgoKCSogZGVjbC5jIChwdXNodGFnKTogRGVhbCB3aXRoIGZyaWVuZCBjbGFzcyBpbmplY3Rpb24gaW4gbG9jYWwKCWNsYXNzZXMuCgoJKiBjYWxsLmMgKGJ1aWxkX29iamVjdF9jYWxsKTogRG9uJ3QgY3Jhc2ggaWYgT0JKIGlzIGEKCXBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uLgoKVHVlIE1hciAxNyAxMTo0MDoyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBDb21wbGFpbiBhYm91dCB0ZW1wbGF0ZSB3aXRoIEMgbGlua2FnZSwKCWFub255bW91cyB0ZW1wbGF0ZSBjbGFzcy4KCk1vbiBNYXIgMTYgMTI6MTA6MzkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAocHVzaGNsYXNzKTogT25seSB1c2UgdGhlIG1pX21hdHJpeCBzdHVmZiAjaWZkZWYgTUlfTUFUUklYLgoJKiBzZWFyY2guYzogTGlrZXdpc2UuCgoJKiBsZXguYyAoZG9fcGVuZGluZ19kZWZhcmdzKTogT25seSBjYWxsIAoJbWF5YmVfe2JlZ2luLGVuZH1fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcgZm9yIEZVTkNUSU9OX0RFQ0xzLgoKCSogcGFyc2UueSAoaW5pdGRjbDBfaW5uYXJkcyk6IE1vdmUgbWF5YmVhc20gYmFjayBpbnRvIGluaXRkY2wwIGV0IGFsLgoKTW9uIE1hciAxNiAxMDo0NzoyMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55OiBEZWFsIHdpdGggQ09OU1RSVUNUT1JTIGluIG5ld19pbml0aWFsaXplcnMuCgpNb24gTWFyIDE2IDEwOjU0OjIxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogRGVhbCB3aXRoIEJJTkRfRVhQUiBpbiBhIHdheSB0aGF0IG1vcmUKCWNsb3NlbHkgbWltaWNzIHRoZSBiZWhhdmlvciBpbiBwYXJzZS55LgoJKHRzdWJzdF9leHByKTogUmV0dXJuIHRoZSByZXN1dGluZyBCTE9DSyB3aGVuIG1ha2luZyBhIHRzdWJzdCdpbmcKCWludG8gYSBjb21wb3VuZCBzdGF0ZW1lbnQuCgkKU3VuIE1hciAxNSAwMjowNzoyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKFRFTVBMQVRFX1BBUk1TX0ZPUl9JTkxJTkUpOiBOZXcgbWFjcm8uCgkqIHB0LmMgKGlubGluZV9uZWVkc190ZW1wbGF0ZV9wYXJtcyk6IE5ldyBmbi4KCShvcmlnaW5hbF90ZW1wbGF0ZSk6IE5ldyBmbi4KCShwdXNoX2lubGluZV90ZW1wbGF0ZV9wYXJtc19yZWN1cnNpdmUpOiBOZXcgZm4uCgkobWF5YmVfYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBVc2UgdGhlbS4KCShtYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShpc19tZW1iZXJfb3JfZnJpZW5kX3RlbXBsYXRlKTogUmVuYW1lIHRvIGlzX21lbWJlcl90ZW1wbGF0ZS4KCU1lbWJlciBmdW5jdGlvbnMgb2YgbG9jYWwgY2xhc3NlcyBhcmUgbmV2ZXIgbWVtYmVyIHRlbXBsYXRlcy4KClN1biBNYXIgMTUgMDE6MTQ6MjIgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wgdGhhdCB3YXMKCWFkZGVkIGluIHRoZSBjbGFzcyBzY29wZSB0byBjYXRjaCByZWRlZmluaXRpb24gZXJyb3IuCgoJKiBwdC5jIChyZWR1Y2VfdGVtcGxhdGVfcGFybV9sZXZlbCk6IEFsc28gY29weSAKCXRoZSBERUNMX1RFTVBMQVRFX1BBUk1TIGZpZWxkLgoKU3VuIE1hciAxNSAxMDo1NDowOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh0c3Vic3QpOiBDbGVhciBUWVBFX1JFRkVSRU5DRV9UTyB3aGVuIGNyZWF0aW5nIGEKICAgICAgICByZWR1Y2VkLWxldmVsIHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVyLgoKU3VuIE1hciAxNSAxMjoyNjowMiAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjcC10cmVlLmggKHN0cnVjdCBsYW5nX2RlY2xfZmxhZ3MpOiBBZGQgbmVlZHNfZmluYWxfb3ZlcnJpZGVyLgoJKERFQ0xfTkVFRFNfRklOQUxfT1ZFUlJJREVSX1ApOiBOZXcgbWFjcm8uCgkqIGNsYXNzLmMgKG92ZXJyaWRlX29uZV92dGFibGUpOiBTZXQgREVDTF9ORUVEU19GSU5BTF9PVkVSUklERVJfUC4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgaXQuCgkqIHR5cGVjazIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBVc2UgdHdvIGxvb3BzIHRvIGVtaXQKCWFic3RyYWN0IHZpcnR1YWwgZnVuY3Rpb25zIGFuZCB2aXJ0dWFsIGZ1bmN0aW9ucyB3aGljaCBuZWVkIGEKCWZpbmFsIG92ZXJyaWRlciBzZXBhcmF0ZWx5LgoJClRodSBNYXIgMTIgMDk6Mzk6NDAgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogbGFuZy1zcGVjcy5oOiBQcm9wZXJseSBwdXQgYnJhY2tldHMgYXJvdW5kIGFycmF5IGVsZW1lbnRzIGluIAoJaW5pdGlhbGl6ZXIuCgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENvcnJlY3RseSBwbGFjZSBwYXJlbnMgYXJvdW5kCgkmJiBhbmQgfHwgaW4gZXhwcmVzc2lvbi4KClRodSBNYXIgMTIgMDk6MjY6MDQgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY2FsbC5jIChkZWZhdWx0X3Bhcm1fY29udmVyc2lvbnMpOiBSZW1vdmUgcHJvdG90eXBlIGRlZmluaXRpb24uCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlc3VsdC4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgY29udmVyc2lvbi4KCgkqIGRlY2wyLmMgKGFtYmlndW91c19kZWNsKTogQWRkIGV4cGxpY2l0IHBhcmFtZXRlciBkZWZpbml0aW9uIGZvciBuYW1lLgoKCSogZXhjZXB0LmMgKGRvX3Vud2luZCk6ICNpZiAwIGRlZmluaXRpb24gb2YgdW51c2VkIHZhcmlhYmxlcyBmY2FsbAoJYW5kIG5leHRfcGMuCgoJKiBleHByLmMgKGV4dHJhY3Rfc2NhbGFyX2luaXQpOiAjaWYgMCBwcm90b3R5cGUgYW5kIGZ1bmN0aW9uIAoJZGVmaW5pdGlvbi4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbml0X3R5cGUuCgkoYnVpbGRfbmV3XzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHQuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgbmV3dGFnOwoJY2FzdCBjYWxsZWQgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHRvIHZvaWQuCgkoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgbmFtZSBhbmQgZm4uCgoJKiB0cmVlLmMgKGdldF90eXBlX2RlY2wpOiBBZGQgZGVmYXVsdCByZXR1cm4gdG8gc2h1dCB1cCBjb21waWxlciBmcm9tCgljb21wbGFpbmluZyBjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfY29uZGl0aW9uYWxfZXhwcik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcnZhbC4KClRodSBNYXIgMTIgMDk6MTI6MTUgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY2FsbC5jIChkZWZhdWx0X3Bhcm1fY29udmVyc2lvbnMpOiBSZW1vdmUgcHJvdG90eXBlIGRlZmluaXRpb24uCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlc3VsdC4KCShidWlsZF9vdmVyX2NhbGwpOiBBZGQgZGVmYXVsdCBjYXNlIGluIGVudW1lcmF0aW9uIHN3aXRjaC4KClRodSBNYXIgMTIgMDg6Mzk6MTMgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQ2hhbmdlIGoncyB0eXBlIHRvIHNpemVfdC4KCgkqIHRyZWUuYyAobGF5b3V0X3ZiYXNldHlwZXMpOiByZWNvcmRfYWxpZ24gYW5kIGRlc2lyZWRfYWxpZ24gYXJlIG9mCgl0eXBlIHVuc2lnbmVkIGludDsgY29uc3Rfc2l6ZSBhbmQgbm9udmlydHVhbF9jb25zdF9zaXplIGxpa2V3aXNlLgoKV2VkIE1hciAxMSAwNzoyNToyMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChuZXdfaW5pdGlhbGl6ZXIpOiBNYWtlIHN1cmUgYWxsIGluaXRpYWxpemVycyBhcmUKCWxpc3RzLgoKVHVlIE1hciAxMCAwNzozMjozNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBNYXJrIHRpbmZvIGZ1bmN0aW9ucyBmb3IKCWN2LXF1YWxpZmllZCB2ZXJzaW9ucyBvZiBjbGFzcyB0eXBlcyBhcyBERUNMX05PVF9SRUFMTFlfRVhURVJOLgoKRnJpIE1hciAgNiAyMzoyNzozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZXRob2QuYzogRml4IHR5cG8uCgpGcmkgTWFyICA2IDEwOjA2OjU5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCiAgICAgICAgKiBtZXRob2QuYzogSW5jbHVkZSAic3lzdGVtLmgiIHRvIGdldCBzdGRsaWIuaCwgc3RkaW8uaCwKICAgICAgICBjdHlwZS5oLCBzdHJpbmcuaCwgZXRjLgogICAgICAgIChpc3N1ZV9ucmVwZWF0cyk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24gc3dpdGNoLgogICAgICAgIChjaGVja19idHlwZSk6IExpa2V3aXNlLgogICAgICAgIChwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBMaWtld2lzZS4KCSAKICAgICAgICAqIE1ha2VmaWxlLmluIChtZXRob2Qubyk6IERlcGVuZCBvbiBzeXN0ZW0uaC4KCldlZCBNYXIgIDQgMjI6MjY6NTMgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBsZXguYyAoZG9fc2NvcGVkX2lkKTogRml4IHBhcmVudGhlc2l6aW5nLgoKV2VkIE1hciAgNCAxMjoxMTo1MyAxOTk4ICBNaWNoYWVsIFRpZW1hbm4gIDx0aWVtYW5uQGF4b24uY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuX2R5bmFtaWMpOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbgoJRkxBR19SVFRJIGlzIHVuc2V0LCBpbml0aWFsaXplIHR5cGUgaW5mbyBtYWNoaW5lcnkgYW5kIGNvbnRpbnVlCgl3aXRoIEZMQUdfUlRUSSBlbmFibGVkLgoJKGdldF90eXBlaWQpOiBEaXR0by4KCldlZCBNYXIgIDQgMTE6NDc6NTUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogJkQ6OmkgaGFzIHR5cGUgQjo6KiBpZiBpIGNvbWVzCglmcm9tIEIuCgpXZWQgTWFyICA0IDExOjI4OjA4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IERlYWwgbW9yZSBncmFjZWZ1bGx5IHdpdGgKCWludmFsaWQgZGVjbGFyYXRpb25zLgoKVHVlIE1hciAgMyAwMTozODoxNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLCBpbml0LmMsIHJ0dGkuYywgdHlwZWNrLmMsIHR5cGVjazIuYywKCWNwLXRyZWUuaDogQ2xlYW4gdXAgbW9yZSBvbGQgb3ZlcmxvYWRpbmcgY29kZSwgb2xkIFJUVEkgY29kZSwgYW5kCglzb21lIGZvcm1hdHRpbmcgcXVpcmtzLgoKCSogY2FsbC5jLCBjbGFzcy5jLCBjcC10cmVlLmgsIGN2dC5jLCBkZWNsLmMsIGluaXQuYywgbGV4LmMsCgltZXRob2QuYywgcHQuYywgcHRyZWUuYywgdHlwZWNrLmM6IFJlbW92ZSBzdXBwb3J0IGZvciAKCS1mbm8tYW5zaS1vdmVybG9hZGluZyBhbmQgb3ZlcmxvYWRpbmcgTUVUSE9EX0NBTExfRVhQUi4KCSogY2xhc3MuaDogUmVtb3ZlLgoJKiBNYWtlZmlsZS5pbjogQWRqdXN0LgoKCSogcHQuYyAodW5pZnkpOiBEb24ndCBhbGxvdyByZWR1Y2VkIGN2LXF1YWxzIHdoZW4gc3RyaWN0LgoKCSogY2FsbC5jLCBjbGFzcy5jLCBwdC5jLCBjcC10cmVlLmg6IFJlbW92ZSBuc3Vic3RzIHBhcm0gZnJvbQoJKnR5cGVfdW5pZmljYXRpb24qIGFuZCB1bmlmeS4KCk1vbiBNYXIgIDIgMTI6MTE6MDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZXhwbGljaXRfdGVtcGxhdGVfdHlwZSk6IFJlbW92ZSBURU1QTEFURSBrZXl3b3JkLgoJKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IEFuZCBhZGQgaXQgYmVmb3JlIHRoaXMgdXNlLgoJKHR5cGVuYW1lX3N1YjApOiBBbmQgdGhpcyB1c2UuICBBbHNvIGFkZCB1c2Ugd2l0aG91dCB0aGUga2V5d29yZC4KCSh0eXBlbmFtZV9zdWIxKTogTGlrZXdpc2UuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGUgCglhbnl0aGluZyBpZiBvdXIgdHlwZSB1c2VzIHRlbXBsYXRlIHBhcm1zLgoKTW9uIE1hciAgMiAxMTowNDo1OSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgY2FsbCB0ZW1wb3JhcnlfYWxsb2NhdGlvbiBmb3IgYQoJbmVzdGVkIGZ1bmN0aW9uLgoKU3VuIE1hciAgMSAyMTowNjozNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IG1lc3Mgd2l0aCBmcmllbmRzIGlmCglvdXIgdHlwZSB1c2VzIHRlbXBsYXRlIHBhcm1zLgoKU2F0IEZlYiAyOCAxMjowNjo0NCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChuZXN0ZWRfbmFtZV9zcGVjaWZpZXIpOiBVc2UgZXhwbGljaXRfdGVtcGxhdGVfdHlwZS4KCSh0eXBlbmFtZV9zdWIpOiBBbGxvdyBhIHRlbXBsYXRlX3R5cGUsIGFuIGV4cGxpY2l0X3RlbXBsYXRlX3R5cGUsCglvciBhbiBpbXBsaWNpdCB0ZW1wbGF0ZSB0eXBlIGF0IHRoZSBlbmQuCgkqIGxleC5jICh5eXByaW50KTogSGFuZGxlIGEgUFRZUEVOQU1FIGJlaW5nIGEgVEVNUExBVEVfREVDTC4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBIYW5kbGUgdGVtcGxhdGUtaWQgd2hlcmUgdGhlIG5hbWUKCWlzIGEgVEVNUExBVEVfREVDTC4KCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlIAoJZGVzdHJ1Y3RvciBjYWxsLgoJKiBwdC5jICh0c3Vic3RfY29weSwgTUVUSE9EX0NBTExfRVhQUik6IERvbid0IGFzc3VtZSBhIG1lbWJlciAKCWRlc3RydWN0b3IgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUuCgoJKiBjcC10cmVlLmggKFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IEFkZCAndGVtcGxhdGUnIGNhc2UuCgkoZXhwbGljaXRfdGVtcGxhdGVfdHlwZSk6IE5ldyBydWxlLgoJKHR5cGVuYW1lX3N1Yik6IFVzZSBpdC4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBIYW5kbGUgZ2V0dGluZyBhIHRlbXBsYXRlLWlkIGZvciBOQU1FLgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCkZyaSBGZWIgMjcgMTE6MTc6NTAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoYWRkX3RvX3RlbXBsYXRlX2FyZ3MpOiBGaXggdGhpbmtvLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCBpdCBsYXRlci4KCgkqIHB0LmMgKGdldF9jbGFzc19iaW5kaW5ncyk6IEFkZCBvdXRlcl9hcmdzIHBhcm0uCgkobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUGFzcyBpdC4KCShtb3JlX3NwZWNpYWxpemVkX2NsYXNzKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogR2V0IGNvbnRleHQgZnJvbSB0ZW1wbGF0ZSBpZiBub25lCgl3YXMgc3BlY2lmaWVkLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IERvbid0IGRvIGFueXRoaW5nIHdpdGggYQoJcGFydGlhbCBzcGVjaWFsaXphdGlvbi4KCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogVXNlIElTX0FHR1JfVFlQRSBpbnN0ZWFkIG9mCglBR0dSRUdBVEVfVFlQRV9QLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTWVtYmVyIGNsYXNzIHRlbXBsYXRlcyBoYXZlIGFscmVhZHkgYmVlbgoJY2hlY2tlZCBmb3IgbmFtZSBjbGFzaGVzLgoJKiBkZWNsLmMgKHB1c2hkZWNsX3dpdGhfc2NvcGUpOiBIYW5kbGUgcHVzaGluZyBhdCBjbGFzcyBsZXZlbC4KCkZyaSBGZWIgMjcgMDI6MjU6MTYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0LCBURU1QTEFURV9ERUNMKTogU3VwcG9ydCBtZW1iZXIgY2xhc3MgdGVtcGxhdGVzLgoJKHRzdWJzdCwgKl9QQVJNKTogU3VwcG9ydCBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUgY2xhc3Nlcy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExvb2sgdXAgdGhlIHBhdHRlcm4gZnJvbSB0aGUKCW9yaWdpbmFsIHRlbXBsYXRlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEhhbmRsZSBnZXR0aW5nIGEgdGVtcGxhdGUgZm9yIGQxLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvcnJlY3Qgc2V0dGluZyBvZiAncHJpbWFyeScuCgkocmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwpOiBBZGQgJ2xldmVscycgcGFybS4KCShmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBTdXBwb3J0IG1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMuCgkodGVtcGxhdGVfY2xhc3NfZGVwdGgpOiBIYW5kbGUgbXVsdGlwbGUgbGV2ZWxzLgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbF8xLCBmbi5kZWYyKTogUmVtb3ZlIG1lbWJlciB0ZW1wbGF0ZSBjYXNlLgoJKGNvbXBvbmVudF9kZWNsKTogQWRkIG1lbWJlciB0ZW1wbGF0ZSBjYXNlcy4KCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogV2Ugbm93IGhhbmRsZSBtZW1iZXIgdGVtcGxhdGUKCWNsYXNzZXMuCgkqIGRlY2wuYyAocHVzaHRhZyk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGVzLgoJKiBtZXRob2QuYyAoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiBEb24ndCB0b3VjaAoJSURFTlRJRklFUl9HTE9CQUxfVkFMVUUuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IElmIG5hbWUgaXNuJ3QgYW4gaWRlbnRpZmllciwganVzdCAKCXJldHVybiBpdC4KCSogc3Bldy5jICh5eWxleCk6IEhhbmRsZSBQVFlQRU5BTUUgbGlrZSBUWVBFTkFNRS4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IERvIGFkanVzdCBmb3IgY29udmVyc2lvbnMgdG8KCWFuZCBmcm9tIHZpcnR1YWwgYmFzZS4KCldlZCBGZWIgMjUgMDk6NTE6MjkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogR2l2ZSBoYXJkIGVycm9yIGZvciBjb252ZXJzaW9uCglmcm9tIHZpcnR1YWwgYmFzZS4KCgkqIGNwLXRyZWUuaDogVHdlYWsgZm9ybWF0dGluZy4KCldlZCBGZWIgMjUgMDA6MzU6MzMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IEhhbmRsZSByZWRlY2xhcmF0aW9uIGVycm9yLgoKCSogY3AtdHJlZS5oIChJREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRSk6IE5ldyBtYWNyby4KCShJREVOVElGSUVSX05BTUVTUEFDRV9CSU5ESU5HUyk6IE5ldyBtYWNyby4KCShOQU1FU1BBQ0VfQklORElORyk6IE5ldyBtYWNyby4KCShJREVOVElGSUVSX0dMT0JBTF9WQUxVRSk6IFVzZSBOQU1FU1BBQ0VfQklORElORy4KCSogKi5jOiBVc2UgdGhlbS4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFVzZSBpbm5lcm1vc3RfYXJncy4KCgkqIGRlY2wuYyAoZ2V0X3VuaXF1ZV9uYW1lKTogVHdlYWsgZnJvbSBlYXJsaWVyIGluIHRoZSBuYW1lLgoKVHVlIEZlYiAyNCAyMjoxNTowNCAxOTk4ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuZGVmOiBBZGQgQ1BMVVNfQklORElORyBub2RlLgoJKiBjcC10cmVlLmggKHRyZWVfYmluZGluZyk6IG5ldyBzdHJ1Y3QKCShCSU5ESU5HX1NDT1BFLCBCSU5ESU5HX1ZBTFVFKTogbmV3IG1hY3JvcwoJKGN1cnJlbnRfbmFtZXNwYWNlLCBnbG9iYWxfbmFtZXNwYWNlKTogZGVjbGFyZSBleHRlcm4KCShzdHJ1Y3QgbGFuZ19kZWNsX2ZsYWdzKTogbmV3IGZpZWxkIGluX25hbWVzcGFjZQoJKERFQ0xfTkFNRVNQQUNFX1VTSU5HLCBERUNMX05BTUVTUEFDRV9VU0VSUyk6IG5ldyBtYWNyb3MKCShERUNMX05BTUVTUEFDRSwgU0VUX0RFQ0xfTkFNRVNQQUNFKTogbmV3IG1hY3JvcwoJKFRSRUVfSU5ESVJFQ1RfVVNJTkcpOiBuZXcgbWFjcm8KCSogZGVjbDIuYyAoY3VycmVudF9uYW1lc3BhY2UsIGdsb2JhbF9uYW1lc3BhY2UpOiBEZWNsYXJlLiAgVGhlCgl2YWx1ZSBpcyBhIE5BTUVTUEFDRV9ERUNMIG5vdywgbm90IGEgVFJFRV9MSVNULgoJKGlzX25hbWVzcGFjZV9hbmNlc3RvciwgbmFtZXNwYWNlX2FuY2VzdG9yKTpuZXcgc3RhdGljIGZ1bmN0aW9ucy4KCShhZGRfdXNpbmdfbmFtZXNwYWNlLCBhbWJpZ3VvdXNfZGVjbCk6IGxpa2V3aXNlLgoJKGxvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBuZXcgc3VwcG9ydCBmdW5jdGlvbiBmb3IgbG9va3VwX25hbWUuCgkocXVhbGlmaWVkX2xvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBuZXcgc3VwcG9ydCBmdW5jdGlvbiBmb3IKCWRvX3Njb3BlZF9pZCBhbmQgbG9va3VwX25hbWVzcGFjZV9uYW1lCgkoZ2V0X25hbWVzcGFjZV9pZCk6IG1hcmsgYXMgb2Jzb2xldGUuCgkoY3VycmVudF9uYW1lc3BhY2VfaWQpOiBMaWtld2lzZS4KCShkb19uYW1lc3BhY2VfYWxpYXMpOiBJbXBsZW1lbnQuCgkoZG9fdXNpbmdfZGlyZWN0aXZlKTogSW1wbGVtZW50IGFzIGNhbGwgdG8gYWRkX3VzaW5nX25hbWVzcGFjZS4KCSogZGVjbC5jIChiaW5kaW5nX2Zvcl9uYW1lKTogbmV3IGZ1bmN0aW9uLgoJKHB1c2hfbmFtZXNwYWNlLCBwb3BfbmFtZXNwYWNlKTogaW1wbGVtZW50LgoJKHB1c2hfZGVjbCk6IGRvbid0IGluc3RhbGwgYSBGVU5DVElPTl9ERUNMIGluIHRoZSBnbG9iYWwgYnJhbmNoLgoJKGxvb2t1cF9uYW1lc3BhY2VfbmFtZSk6IGltcGxlbWVudCB1c2luZyBxdWFsaWZpZWQgbG9va3VwLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBGb3IgZ2xvYmFsIHNjb3BpbmcsIGxvb2t1cCBpbgoJZ2xvYmFsX25hbWVzcGFjZS4gRm9yIG5hbWVzcGFjZSBzY29waW5nLCBsb29rdXAgaW4gZ2l2ZW4KCW5hbWVzcGFjZS4gRm9yIHVuc2NvcGVkIGxvb2t1cCwgaXRlcmF0ZSBvdmVyIG5hbWVzcGFjZSwKCWNvbnNpZGVyaW5nIHVzaW5nIGRpcmVjdGl2ZXMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBpbml0aWFsaXplIGdsb2JhbF9uYW1lc3BhY2UuCgkoZ3Jva3ZhcmRlY2wpOiBCdWlsZCBhc3NlbWJsZXIgbmFtZSBhcyBzdGF0aWMgbmFtZSBmb3IgZ2xvYmFscy4KCShncm9rZGVjbGFyYXRvcik6IFJlbW92ZSBvbGQgbmFtZXNwYWNlIG1hbmdsaW5nLgoJKHhyZWZfdGFnKTogV2hlbiBpbnN0YWxsaW5nIGEgZ2xvYmFsIGJpbmRpbmcgZm9yIHRoZQoJdGFnLCBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBpZGVudGlmaWVyLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBtYW5nbGUgbmFtZXNwYWNlcy4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IExpa2V3aXNlLgoJKiBsZXguYyAoYnVpbGRfbGFuZ19kZWNsKTogc2V0IG5hbWVzcGFjZSBmb3IgbmV3IGRlY2xhcmF0aW9uIHRvCgljdXJyZW50X25hbWVzcGFjZS4KCShkb19zY29wZWRfaWQpOiBmaW5kIGdsb2JhbCBuYW1lcyBpbiBnbG9iYWwgb3IgY3VycmVudAoJbmFtZXNwYWNlLCBvciB1c2luZyBxdWFsaWZpZWQgbmFtZXNwYWNlIGxvb2t1cCwgZGVwZW5kaW5nIG9uCgljb250ZXh0LgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogV2hlbiBzY29wZSBpcyBuYW1lc3BhY2UsIHVzZQoJYnVpbGRfeF9mdW5jdGlvbl9jYWxsIGluc3RlYWQuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IFdoZW4gc2NvcGUgaXMgbmFtZXNwYWNlLCBjb2xsYXBzZSBwcm9jZXNzaW5nCgl0byBsb29rdXBfbmFtZXNwYWNlX25hbWUgaW5zdGVhZC4KCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogU3VwcG9ydCBOQU1FU1BBQ0VfREVDTC4KCSogZGVjbC5jIChwdXNoZGVjbCk6IEJpbmQgZ2xvYmFscyB0byBjdXJyZW50IG5hbWVzcGFjZS4KCShwdXNoX292ZXJsb2FkZWRfZGVjbCk6IExpa2V3aXNlLgoJKGxvb2t1cF90YWcpOiBMaWtld2lzZS4KCShsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsKTogTGlrZXdpc2UuCgkoeHJlZl90YWcpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IExpa2V3aXNlLgoJKGlkZW50aWZpZXJfdHlwZWRlY2xfdmFsdWUpOiBMaWtld2lzZS4KCShyZWFsX3l5bGV4KTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IExpa2V3aXNlLgoJKiBwYXJzZS55ICh1bnNjb3BlZCk6IExpa2V3aXNlLgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGNhbGxfdm9pZF9mbik6IExpa2V3aXNlLgoJKiBzaWcuYyAoYnVpbGRfc2lndGFibGUpOiBMaWtld2lzZS4KCSogcHRyZWUuYyAobGFuZ19wcmludF94bm9kZSk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgMjQgMDE6NDA6MjQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBpbnN0YW50aWF0ZSBpZiBwZWRhbnRpYwoJYW5kIHRoZSBhcmdzIHVzZSB0ZW1wbGF0ZSBwYXJtcy4KCgkqIHB0LmMgKHB1c2hfdGluc3RfbGV2ZWwpOiBJZiB0aGUgaW5zdGFudGlhdG9uIHVzZXMgdGVtcGxhdGUgcGFybXMsCglmYWlsIHNpbGVudGx5LgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogRG8gY2FsbCBjb21wbGV0ZV90eXBlIGZvciBiYXNldHlwZXMKCXRoYXQgaW52b2x2ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKVHVlIEZlYiAyNCAwMDozNjo0MyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IEZpeCBsYWJlbGVkIGluaXQgY2hlY2suCgpNb24gRmViIDIzIDA1OjA4OjU1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMsIGNhbGwuYywgZGVjbC5jLCBtZXRob2QuYywgY3AtdHJlZS5oOiBSZW1vdmUgdW51c2VkIE5BUkdTCglhcmd1bWVudCB0byB0c3Vic3QgYW5kIGZyaWVuZHMuCgoJKiBwdC5jICh0c3Vic3QsIEZVTkNUSU9OX0RFQ0wpOiBUaWR5LgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEhhbmRsZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uCgl0ZW1wbGF0ZXMgbGlrZSBub24tdGVtcGxhdGVzLiAgSGFuZGxlIGZyaWVuZCB0ZW1wbGF0ZXMgbGlrZSBub3JtYWwKCWZ1bmN0aW9uIHRlbXBsYXRlcy4KCSogcHQuYyAodHN1YnN0LCAqX1BBUk0pOiBEb24ndCB1c2Ugb3JpZ19sZXZlbC4KCShnZXRfYmluZGluZ3MpOiBEb24ndCBjYWxsIGFkZF90b190ZW1wbGF0ZV9hcmdzLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkodHN1YnN0LCBGVU5DVElPTl9ERUNMKTogQ2FsbCBhZGRfdG9fdGVtcGxhdGVfYXJncyBhcyBhcHByb3ByaWF0ZS4KCSogcHRyZWUuYyAocHJpbnRfbGFuZ190eXBlKTogUHJpbnQgaW5kZXgvbGV2ZWwgZm9yIHRlbXBsYXRlIHBhcm1zLgoKTW9uIEZlYiAyMyAwMjo1MjoyOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBNYWtlLWxhbmcuaW4gKGNjMXBsdXMpOiBOb3RlIHRoYXQgY2MxcGx1cyBkZXBlbmRzIG9uCgljcC9jcC10cmVlLmggYW5kIGNwL2NwLXRyZWUuZGVmLgoJCgkqIGNwLXRyZWUuZGVmIChURU1QTEFURV9DT05TVF9QQVJNKTogUmVtb3ZlLgoJKFRFTVBMQVRFX1BBUk1fSU5ERVgpOiBOZXcgdHJlZSBjb2RlLCB1c2VkIHRvIGluZGljYXRlIGEKCXBvc2l0aW9uIGluIGEgdGVtcGxhdGUgcGFyYW1ldGVyIGxpc3QuCgkqIGNwLXRyZWUuaCAodGVtcGxhdGVfcGFybV9pbmRleCk6IE5ldyBzdHJ1Y3R1cmUsIHVzZWQgYXMgdGhlIHRyZWUKCXN0cnVjdHVyZSBmb3IgYSBURU1QTEFURV9QQVJNX0lOREVYLgoJKFRFTVBMQVRFX1BBUk1fSURYKTogTmV3IG1hY3JvLgoJKFRFTVBMQVRFX1BBUk1fTEVWRUwpOiBMaWtld2lzZS4KCShURU1QTEFURV9QQVJNX0RFU0NFTkRBTlRTKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfUEFSTV9PUklHX0xFVkVMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfUEFSTV9ERUNMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfVFlQRV9QQVJNX0lOREVYKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfVFlQRV9PUklHX0xFVkVMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfVFlQRV9ERUNMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfQ09OU1RfSURYKTogUmVtb3ZlLgoJKFRFTVBMQVRFX0NPTlNUX0xFVkVMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfQ09OU1RfU0VUX0lORk8pOiBMaWtld2lzZS4KCShURU1QTEFURV9UWVBFX1NFVF9JTkZPKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfVFlQRV9JRFgpOiBSZWRlZmluZSBpbiB0ZXJtcyBvZiBURU1QTEFURV9QQVJNX0lOREVYCglub2RlLgoJKFRFTVBMQVRFX1RZUEVfTEVWRUwpOiBMaWtld2lzZS4KCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IENhbGwgY29tcF90ZW1wbGF0ZV9wYXJtcywgcmF0aGVyIHRoYW4KCWV4cGFuZGluZyBpdCBpbmxpbmUuCgkoZHVwbGljYXRlX2RlY2xzKTogSWYgdHdvIHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBhcmUgYmVpbmcgbWVyZ2VkLAoJdGhlbiB0aGVpciBURU1QTEFURV9JTkZPcyBzaG91bGQgYmUgbWVyZ2VkIGFzIHdlbGwuCgkoZ3Jva2ZuZGVjbCk6IFNhdmUgdGVtcGxhdGUtaWQgaW5mb3JtYXRpb24gd2hlbiBkZWNsYXJpbmcgYSBmcmllbmQKCXdpdGggZXhwbGljaXQgdGVtcGxhdGUgYXJndW1lbnRzLiAgUGFzcyBhcmd1bWVudHMgdG8KCWNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uIHZpYSBjb3JyZWN0IGNvbnZlbnRpb247IGF0IHNvbWUKCXBvaW50IGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uIGNoYW5nZWQsIGJ1dCB0aGVzZSBjYWxsLXNpdGVzCglkaWQgbm90LgoJKGdyb2tkZWNsYXJhdG9yKTogVGlkeSB1cCBzbGlnaHRseS4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IFRpZHkgdXAgc2xpZ2h0bHkuICBEb24ndCBhc3N1bWUgdGhhdAoJdHdvIHRlbXBsYXRlIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIERFQ0xfQVNTRU1CTEVSX05BTUUgdGhlIHNhbWUsCglzaW5jZSB0aGUgbmFtZXMgYXJlIG5vdCB5ZXQgbWFuZ2xlZC4KCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogVXNlIFRFTVBMQVRFX1BBUk1fSU5ERVggaW5zdGVhZCBvZgoJVEVNUExBVEVfQ09OU1RfUEFSTS4gCgkoZHVtcF9leHByKTogTGlrZXdpc2UuICBVc2UgdGhlIFRFTVBMQVRFX1BBUk1fREVDTCB0byBnZXQgYXQgdGhlCglkZWNsIGZvciBhIG5vbi10eXBlIHBhcmFtZXRlciwgcmF0aGVyIHRoYW4gcHJpbnRpbmcgYDx0cGFybSAuLi4+Jy4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEhhbmRsZSBURU1QTEFURV9ERUNMIGZyaWVuZHMuCgkoZG9fZnJpZW5kKTogRGVhbCB3aXRoIHRlbXBsYXRlIGZyaWVuZHMuCgkqIGxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBDYWxsCgltYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZywgcmF0aGVyIHRoYW4KCWNvbmRpdGlvbmFsbHkgY2FsbGluZyBiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZy4KCShwcm9jZXNzX25leHRfaW5saW5lKTogTGlrZXdpc2UuICBDYWxsCgltYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcsIHJhdGhlciB0aGFuCgljb25kaXRpb25hbGx5IGNhbGxpbmcgZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLgoJKGRvX3BlbmRpbmdfZGVmYXJncyk6IExpa2V3aXNlLgoJKGRvX2lkZW50aWZpZXIpOiBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mCglURU1QTEFURV9DT05TVF9QQVJNLiAgCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX3RlbXBsYXRlX3Bhcm1faW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBVc2UgaXQuCgkoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IExpa2V3aXNlLgoJKiBwdC5jIChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBBbGxvdyBmcmllbmQgZGVjbGFyYXRpb25zLgoJKHRlbXBsYXRlX2NsYXNzX2RlcHRoKTogTmV3IGZ1bmN0aW9uLgoJKGlzX21lbWJlcl90ZW1wbGF0ZSk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lLi4uCgkoaXNfbWVtYmVyX29yX2ZyaWVuZF90ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4KCShlbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZS4uLgoJKG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZykuCgkoYnVpbGRfdGVtcGxhdGVfcGFybV9pbmRleCk6IE5ldyBmdW5jdGlvbi4KCShyZWR1Y2VfdGVtcGxhdGVfcGFybV9sZXZlbCk6IE5ldyBmdW5jdGlvbi4KCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBNb2RpZnkgdG8gdXNlIGJ1aWxkX3RlbXBsYXRlX3Bhcm1faW5kZXguCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogRGVhbCB3aXRoIGZyaWVuZCB0ZW1wbGF0ZXMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IFVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQgb2YKCVRFTVBMQVRFX0NPTlNUX1BBUk0uCgkodHN1YnN0X2ZyaWVuZF9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbi4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IEdlbmVyYXRlIHRoZSBERUNMX0ZSSUVORExJU1QKCWZvciBhIG5ldyBpbnN0YW50aWF0aW9uIGJ5IHVzaW5nIHRzdWJzdF9mcmllbmRfZnVuY3Rpb24gcmF0aGVyCgl0aGFuIGp1c3QgdHN1YnN0LgoJKHRzdWJzdCk6IERvbid0IHRzdWJzdCBpbnRvIGEgdHlwZSB3aGljaCBpcyBhIFRFTVBMQVRFX0RFQ0wuCglVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mIFRFTVBMQVRFX0NPTlNUX1BBUk0sIGFuZCB0aGUKCWFwcHJvcHJpYXRlIG5ldyBtYWNyb3MuICBVc2UgcmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwgdG8KCWdlbmVyYXRlIGxvd2VyLWxldmVsIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBIYW5kbGUgdHN1YnN0J2luZyBpbnRvCglURU1QTEFURV9ERUNMUyB0aGF0IGRlY2xhcmUgVEVNUExBVEVfVEVNUExBVEVfUEFSTVMuICBEb24ndCBmb3JnZXQKCXRvIHRzdWJzdCB0aGUgREVDTF9DT05URVhUIGFuZCBERUNMX0NMQVNTX0NPTlRFWFQgb2YgbmV3bHkgY3JlYXRlZAoJdGVtcGxhdGVzLiAgU2ltaWxhcmx5IGZvciB0aGUgdGVtcGxhdGUgcGFyYW1ldGVycyBmb3IgYSBuZXcKCXRlbXBsYXRlLgoJKHRzdWJzdF9jb3B5KTogVGlkeSB1cCBzbGlnaHRseS4gIFVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQKCW9mIFRFTVBMQVRFX0NPTlNUX1BBUk0uICBIYW5kbGUgVFlQRV9ERUNMcyBieSB0c3Vic3RpbmcgaW50byB0aGVtLgoJKHVuaWZ5KTogVXNlIFRFTVBMQVRFX1BBUk1fSU5ERVggaW5zdGVhZCBvZiBURU1QTEFURV9DT05TVF9QQVJNLiAgCgkoZ2V0X2JpbmRpbmdzKTogQ2FsbCBhZGRfdG9fdGVtcGxhdGVfYXJncyBpZiBuZWNlc3NhcnkuCgkoaW5zdGFudGlhdGVfZGVjbCk6IEhhbmRsZSBpbnN0YW50aWF0aW9ucyBvZiBmcmllbmQgdGVtcGxhdGVzLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkXzEpOiBEb24ndCB0cmVhdCB0aGUgVFlQRV9GSUVMRFMgb2YgYQoJVEVNUExBVEVfVFlQRV9QQVJNIGFzIGEgbGlzdCBvZiBmaWVsZHM7IGl0J3Mgbm90IQoJKiBzcGV3LmMgKHl5bGV4KTogRG8gYSBsaXR0bGUgbWFudWFsIGNvbnN0YW50IHByb3BvZ2F0aW9uIHRvCgljbGFyaWZ5IHRoZSBjb2RlLgoJClN1biBGZWIgMjIgMTk6NTM6MjkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXJyb3IuYzogSW5jbHVkZSBzeXMvdHlwZXMuaC4KClRodSBGZWIgMTkgMTQ6NDk6MDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWV0aG9kLmMgKGJ1aWxkX21hbmdsZWRfbmFtZSk6IFN0YXJ0IENQUCBkaXJlY3RpdmVzIGluIGNvbHVtbiB6ZXJvLgoKVGh1IEZlYiAxOSAxMDozNjo0OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFNvcnJ5IGFib3V0IG5vbi10cml2aWFsCglsYWJlbGVkIGluaXRpYWxpemVycy4KCSogcGFyc2UueSAoaW5pdGxpc3QpOiBSZWVuYWJsZSBsYWJlbGVkIGluaXRpYWxpemVycy4KClRodSBGZWIgMTkgMTA6MTU6NTUgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcykgQWRkIGEgbmV3IHBhcmFtZXRlciwgaXNfdG1wbF9wYXJtLAoJYWxsIGNhbGxlcnMgY2hhbmdlZC4gIFJlbHkgb24gdGhlIG5ldyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBhcmcgCgliZWluZyBhIFRSRUVfTElTVCB3aGVuIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSB3b3JraW5nIGluc2lkZQoJdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLiAgQ2xlYW4gdXAgaXNfdHlwZSB0ZXN0LgoJClRodSBGZWIgMTkgMTA6MDQ6MTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IFByZXNlcnZlIFRSRUVfQ09OU1RBTlQuCgkqIHR5cGVjazIuYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEFsbG93IGNvbnZlcnNpb25zCgliZXR3ZWVuIHBvaW50ZXJzIGFuZCByZWZyZXJlbmNlcy4KCjE5OTgtMDItMTkgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBPbmx5IHdhcm4gYWJvdXQgaW5jci9kZWNyIGEgcG9pbnRlcgoJaWYgcGVkYW50aWMgfHwgd2Fybl9wb2ludGVyX2FyaXRoLgoKVGh1IEZlYiAxOSAwOTozNzoyMSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCjE5OTgtMDItMTggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHN0cmlwX2F0dHJzKTogUmVtb3ZlIGRlY2wuCgoxOTk4LTAyLTE4ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IENhbGwgbWVyZ2VfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZXMuCglVcGRhdGUgb2xkZGVjbCdzIGF0dHJpYnV0ZXMgdG9vLgoJKHN0cmlwX2F0dHJzKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBDYWxsIG1lcmdlX21hY2hpbmVfdHlwZV9hdHRyaWJ1dGVzLgoKVHVlIEZlYiAxNyAxNDowNzo1MiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChpbml0ZGNsMF9pbm5hcmRzKTogTmV3IGdyYW1tYXIgc3ltYm9sLgoJKG5vbW9kc19pbml0ZGVjbHMsIG5vbW9kc19pbml0ZGNsMCk6IENoYW5nZSB0eXBlIGZyb20gaXR5cGUgdG8KCW5vbmUsIHNpbmNlIHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgbmV2ZXIgdXNlZC4KCShwYXJzZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGRhdGFkZWYpOiBSZW1vdmUgcmVkdW5kYW50IGFjdGlvbnMuCgkoaW5pdGRjbDAsIG5vdHlwZV9pbml0ZGNsMCwgbm9tb2RzX2luaXRkY2wwKTogVXNlIGluaXRkY2wwX2lubmFyZHMuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJClR1ZSBGZWIgMTcgMTE6NTQ6MTYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBVc2UgZ2V0ZGVjbHMoKSB0byBjaGVjayBmb3IgZGVjbC4KClNhdCBGZWIgMTQgMTE6NTA6NTEgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZS1sYW5nLmluIChERU1BTkdMRVJfSU5TVEFMTF9OQU1FLCBERU1BTkdMRVJfQ1JPU1NfTkFNRSk6IE5ldyAKCW1hY3Jvcy4KCShjKysuaW5zdGFsbC1jb21tb24pOiBJbnN0YWxsIGMrK2ZpbHQgcHJvcGVybHkgYXMgbmF0aXZlIG9yIGFzIGNyb3NzCgl2YXJpYW50LgoJKGMrKy51bmluc3RhbGwpOiBBZGQgYysrZmlsdC4KCkZyaSBGZWIgMTMgMTQ6NTU6MzcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogRml4IG11bHRpLWxldmVsIHB0ciBjb252ZXJzaW9ucy4KCkZyaSBGZWIgMTMgMTQ6MDY6MjIgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBQcm9wYWdhdGUgZXJyb3JfbWFya19ub2RlIHVwLgoKRnJpIEZlYiAxMyAxMzoyNDozMiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IElmIHRoZSBjb25kaXRpb24gaXNuJ3QgYSBkZWNsYXJhdGlvbiwgCglzdGFydCB0aGUgY29udHJvbGxlZCBibG9jayBhZnRlciB0aGUgdGVzdC4KCkZyaSBGZWIgMTMgMDI6MjY6MTAgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENvbnZlcnQgYnVpbHRpbiBhYnMsIGxhYnMgYW5kIGZhYnMgdG8KCXRyZWUtY29kZXMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZWVuYWJsZSBhYnMsIGxhYnMgYW5kIGZhYnMgYXMKCWJ1aWx0aW5zLgoKRnJpIEZlYiAxMyAwMTozNjo0MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBBIEJBU0VfQ09OViByZXBsYWNlcyBhbiBSVkFMVUVfQ09OVi4KCkZyaSBGZWIgMTMgMDA6MjE6NTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBBZGQgYWNjZXNzX3Byb3RlY3RlZF92aXJ0dWFsX25vZGUuCgkqIGNsYXNzLmMgKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgaXQuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBVc2UgaXQuCgkqIHBhcnNlLnkgKGJhc2VfY2xhc3NfYWNjZXNzX2xpc3QpOiBMaWtld2lzZS4KCgkqIE1ha2UtbGFuZy5pbiAoREVNQU5HTEVSX1BST0cpOiBBZGQgJChleGVleHQpLgoJKGMrKy5pbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgYysrZmlsdC4KClRodSBGZWIgMTIgMTI6NDY6NTEgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzaGFkb3dfdGFnKTogR2l2ZSBlcnJvciBmb3IgdHlwZWRlZi1pbmcgYnVpbHQtaW4gdHlwZXMuCgpXZWQgRmViIDExIDIzOjI4OjA1IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBVc2UgY29tcHR5cGVzIHdoZW4gY29tcGFyaW5nCglUWVBFX01BSU5fVkFSSUFOVFMgdG8gaGFuZGxlIG5vbi1jYW5vbmljYWwgYXJyYXkvaW5kZXggdHlwZXMuCgpXZWQgRmViIDExIDE2OjQyOjA0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IFVzZSByZWFsbHlfb3ZlcmxvYWRlZF9mbi4KCShyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IE1vdmUgY2hlY2sgaGVyZSBmcm9tIGlzX292ZXJsb2FkZWRfZm4uIAoJKGdldF9maXJzdF9mbik6IFVzZSByZWFsbHlfb3ZlcmxvYWRlZF9mbiBhbmQgaXNfb3ZlcmxvYWRlZF9mbi4KCldlZCBGZWIgMTEgMTU6NTQ6MTggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBUeXBlLWNoZWNrIHBvaW50ZXItdG8tbWVtYmVyCgljb252ZXJzaW9ucy4KCk1vbiBGZWIgIDkgMjI6MjM6MzEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3AtdHJlZS5oIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBSZXR1cm4gdGhlIGRlY2wgcGFzc2VkIGluLCBvciBhbgoJZXF1aXZhbGVudCBkdXBsaWNhdGUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcHVzaF90ZW1wbGF0ZV9kZWNsLgoJKGR1cGxpY2F0ZV9kZWNscyk6IFdoZW4gZHVwbGljYXRpbmcgYSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiwgbWVyZ2UKCXRoZSBERUNMX1RFTVBMQVRFX1JFU1VMVHMgYXMgd2VsbC4KCShtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogRG9uJ3QgdHJ5IHRvIGRpdmUgaW50byB0eXBlbmFtZSB0eXBlcyB0bwoJZmluZCBhIGNvbnRleHQgZm9yIG1ha2luZyBhIG5ldyBpbXBsaWNpdCB0eXBlbmFtZS4KCShzdGFydF9kZWNsKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBwdXNoX3RlbXBsYXRlX2RlY2wuCgkoZ3Jva2RlY2xhcmF0b3IpOiBDb21wbGFpbiBhYm91dCBkZWNsYXJhdGlvbnMgbGlzdCBgY29uc3Qgb3BlcmF0b3IKCWludCcuICBTaW5jZSB3ZSBkb24ndCBjb3JyZWN0bHkgaGFuZGxlIGluLWNsYXNzIGluaXRpYWxpemF0aW9ucyBvZgoJbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMsIGNvbXBsYWluIGFib3V0IHRoaXMgKG5vdyBpbGxlZ2FsKQoJcHJhY3RpY2UuICBJc3N1ZSBhbiBlcnJvciBmb3IgaW5pdGlhbGl6YXRpb25zIG9mIG5vbi1jb25zdCBzdGF0aWNzCglzaW5jZSB0aGF0IGlzIGlsbGVnYWwgYXMgd2VsbCwgYW5kIHNpbmNlIHdlIGRvbid0IGhhbmRsZSB0aGF0IGNhc2UKCWNvcnJlY3RseSBlaXRoZXIuCgkoc3RhcnRfZnVuY3Rpb24pOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHB1c2hfdGVtcGxhdGVfZGVjbC4KCShzdGFydF9tZXRob2QpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogTGlrZXdpc2UuICBTaW5jZSB0aGUgY2hhbmdlIHRvCglncm9rZGVjbGFyYXRvciBlbnN1cmVzIHRoYXQgYWxsIGluaXRpYWxpemVkIGZpZWxkcyBhcmUgaW4gZmFjdAoJc3RhdGljLCByZW1vdmUgYSByZWR1bmRhbnQgdGVzdCBmb3IgVFJFRV9QVUJMSUMuCgkqIHBhcnNlLnkgKGluaXRsaXN0KTogRGlzYWJsZSBsYWJlbGVkIGluaXRpYWxpemVycyBzaW5jZSB0aGV5IGRvCglub3Qgd29yayBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBzaW5jZSB0aGV5IGRvIG5vdCB1c2UgdGhlCglzYW1lIHN5bnRheCBhcyB0aGUgQyBmcm9udCBlbmQuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFJldHVybiB0aGUgZGVjbCBwYXNzZWQgaW4sIG9yIGFuCgllcXVpdmFsZW50IGR1cGxpY2F0ZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBXaGVuIHNlYXJjaGluZyBpbiBhIG5lc3RlZCBjb250ZXh0LAoJdXNlIHRoZSByaWdodCBhcmd1bWVudHMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IEhhbmRsZSB0aGUgREVDTF9JTklUSUFMIGZvciBhIENPTlNUX0RFQ0wuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogQXNzaWduIHRoZSBjb3JyZWN0IHR5cGUgdG8gdGhlCglyZXN1bHQgb2YgYnVpbGRfdmZuX3JlZi4KCQpUdWUgRmViIDEwIDIzOjU2OjQ2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IEZpeCB0eXBvLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQWxsb3cgb2xkLXN0eWxlIHNwZWNpYWxpemF0aW9uCglvZiBjbGFzcyB0ZW1wbGF0ZSBtZW1iZXJzLgoKVHVlIEZlYiAxMCAyMDozNjo1MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgkJCSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBERUNMX1VTRV9URU1QTEFURSBpbnN0ZWFkCgl3aGVuIGRlY2lkaW5nIHRvIG92ZXJyaWRlIERFQ0xfQVNTRU1CTEVSX05BTUUuCgpUdWUgRmViIDEwIDE1OjMwOjU1IEVTVCAxOTk4IEFuZHJldyBNYWNMZW9kIDxhbWFjbGVvZEB0b3JwZWRvLnRvLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZCAtZnNxdWFuZ2xlIHRvIG9wdGlvbiBwcm9jZXNzaW5nIGxpc3QuCgkqIGNwLXRyZWUuaCAoZmxhZ19kb19zcXVhbmdsaW5nKTogQWRkIGRlY2xhcmF0aW9uLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mc3F1YW5nbGUgYW5kIC1mbm8tc3F1YW5nbGUuCgkqIG1ldGhvZC5jOiBBZGQgbWFjcm9zIGFuZCBzdGF0aWMgdmFyaWFibGVzIGZvciBzcXVhbmdsaW5nLgoJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBSZW5hbWUgdG8gYnVpbGRfbWFuZ2xlZF9uYW1lLCBhZGQgbG9naWMgZm9yIEIgCgljb21wcmVzc2lvbiwgYW5kIHNwbGl0IGludG8gcHJvY2Vzc19tb2RpZmllcnMgYW5kIAoJcHJvY2Vzc19vdmVybG9hZF9pdGVtLgoJKHByb2Nlc3NfbW9kaWZpZXJzKTogTmV3IGZ1bmN0aW9uLCB0byBoYW5kbGUgY29uc3RhbnQsIHJlZmVyZW5jZSwgCglhbmQgcG9pbnRlciB0eXBlcy4gCgkocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogTmV3IGZ1bmN0aW9uLCBoYW5kbGVzIGlzc3VlIG9mIHR5cGUgY29kZXMuCgkoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IE5ldyBmdW5jdGlvbiwgc3RhcnQgc3F1YW5nbGluZyBhbmQgY2FsbCAKCWJ1aWxkX21hbmdsZWRfbmFtZS4KCShBTExPQ0FURV9UWVBFVkVDLCBERUFMTE9DQVRFX1RZUEVWRUMpOiBSZW1vdmUgbWFjcm8gYW5kIGV4cGFuZCBpbmxpbmUuCgkoc3RhcnRfc3F1YW5nbGluZyk6IE5ldyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHNxdWFuZ2xpbmcgc3RydWN0cy4KCShlbmRfc3F1YW5nbGluZyk6IE5ldyBmdW5jdGlvbiB0byBkZXN0cm95IHNxdWFuZ2xpbmcgc3RydWN0cy4KCShucmVwZWF0cyk6IFJlbmFtZSB2YXJpYWJsZSB0byBOcmVwZWF0cy4KCShpc3N1ZV9ucmVwZWF0cyk6IE5ldyBmdW5jdGlvbiBmb3IgaXNzdWluZyAnbicgdHlwZSByZXBlYXRzLgoJKGNoZWNrX2t0eXBlKTogTmV3IGZ1bmN0aW9uIHRvIGNoZWNrIGZvciB0eXBlIEsgbmFtZSBjb21wcmVzc2lvbi4KCShidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IEFkZCBhIGNoZWNrIGZvciBLIG5hbWUgY29tcHJlc3Npb24uCgkoYnVpbGRfcXVhbGlmaWVkX25hbWUpOiBBZGQgYSBjaGVjayBmb3IgSyBuYW1lIGNvbXByZXNzaW9uIGFuZCBkb24ndAoJdXNlIERFQ0xfQVNTRU1CTEVSX05BTUUgd2hlbiBzcXVhbmdsaW5nIGlzIG9uLgoJKGNoZWNrX2J0eXBlKTogTmV3IGZ1bmN0aW9uLCBjaGVja3MgZm9yIEIgdHlwZSBjb21wcmVzc2lvbi4KCShidWlsZF9zdGF0aWNfbmFtZSwgYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogSW5pdGlhdGUgc3F1YW5nbGluZy4KCShidWlsZF90eXBlbmFtZV9vdmVybG9hZCwgYnVpbGRfb3ZlcmxvYWRfd2l0aF90eXBlKTogSW5pdGlhdGUgCglzcXVhbmdsaW5nCgpTdW4gRmViICA4IDIzOjQ3OjM4IDE5OTggIHNjb3R0IHNueWRlciAgPHNzc0BkMGxpbnV4MDEuZm5hbC5nb3Y+CgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IEF2b2lkIG5hbWUgYnVmZmVyIG92ZXJmbG93LgoKU2F0IEZlYiAgNyAxNjo0ODo1NCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogQ2FsbCBjcF9maW5pc2hfZGVjbCBmb3IgdmFycyBldmVuIGlmIHdlCglkb24ndCBkZWZpbmUgdGhlbSB5ZXQuCgoJKiBwYXJzZS55IChub21vZHNfaW5pdGRjbDApOiBBZGQgY29uc3RydWN0b3JfZGVjbGFyYXRvciBjYXNlLgoKRnJpIEZlYiAgNiAyMTozMjoyNSAxOTk4ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogY29uZmlnLWxhbmcuaW4gKGRpZmZfZXhjbHVkZXMpOiBVc2UgYmFzZW5hbWUgb25seS4KClRodSBGZWIgIDUgMTk6MTA6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdGluZm8yLmNjOiBBZGQgdGluZm8gZm9yIHNpZ25lZCBjaGFyLgoKVGh1IEZlYiAgNSAxNDozODoyMyAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBIYW5kbGUgcHJvdGVjdGVkIGNvbnN0cnVjdG9ycyBpbiBkZXJpdmVkCgljbGFzc2VzIGFzIGFjY2Vzc2libGUuCgpXZWQgRmViICA0IDAxOjI2OjQ5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIsIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTiBjb2RlKToKCUNhbGwgY29udmVydF9mcm9tX3JlZmVyZW5jZSBzb29uZXIuCgpUdWUgRmViICAzIDIzOjUwOjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IE9idGFpbiB0aGUgY29uc3RhbnQgdmFsdWVzIGZyb20gY29uc3RhbnQKCWRlY2xzIGV2ZW4gaWYgdGhlIGRlc3RpbmF0aW9uIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIHR5cGUgb2YgdGhlCglkZWNsLiAKCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTWFrZSBzdXJlIHRoYXQgc3RhdGljIGlubGluZXMgd2l0aAoJZGVmaW5pdGlvbnMgYXJlIG5vdCBtYXJrZWQgREVDTF9FWFRFUk5BTCBiZWZvcmUgcmV0dXJuaW5nLgoKVHVlIEZlYiAgMyAyMjo0Mzo0MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmM6IExvc2UgYXJnX2xvb2tpbmdfZm9yX3RlbXBsYXRlLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCSogcGFyc2UueTogTG9zZSBwcm9jZXNzaW5nX3RlbXBsYXRlX2FyZywgdGVtcGxhdGVfYXJnMQoJKHByaW1hcnkpOiBMaWtld2lzZS4KCSogc3Bldy5jICh5eWxleCk6IFNldCBsYXN0aWRkZWNsIGZvciBQVFlQRU5BTUVzLCB0b28uCgpUdWUgRmViICAzIDIyOjA0OjAxIDE5OTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBGaXggdHlwZSBvZiBkZWZhdWx0IGFyZ3VtZW50cyBmb3IgdGVtcGxhdGUKCXRlbXBsYXRlIHBhcmFtZXRlcnMgYW5kIG5vbnR5cGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IEhhbmRsZSBpbnZhbGlkIGRlZmF1bHQgdGVtcGxhdGUgCgl0ZW1wbGF0ZSBhcmd1bWVudHMgaGVyZS4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX3Bhcm0pOiBVc2UgdGVtcGxhdGVfYXJnIGluc3RlYWQgb2YgUFRZUEVOQU1FIAoJZm9yIGRlZmF1bHQgdGVtcGxhdGUgdGVtcGxhdGUgYXJndW1lbnQuCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IE1lcmdlIGRlZmF1bHQgdGVtcGxhdGUgYXJndW1lbnQgCgljb2Rlcy4gIENhbiB0cmVhdCBSRUNPUkRfVFlQRSBhcyB0ZW1wbGF0ZSBuYW1lIGlmIGl0IGlzIGltcGxpY2l0bHkKCWNyZWF0ZWQuICBGaXggYXJndW1lbnQgaW5kZXggaW4gZXJyb3IgbWVzc2FnZS4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IE1lcmdlIHRlbXBsYXRlIGFyZ3VtZW50IGNvbXBhcmlzb24gY29kZXMgaW4gCglURU1QTEFURV9URU1QTEFURV9QQVJNIGFuZCBSRUNPUkRfVFlQRS4KClR1ZSBKYW4gIDYgMDE6NDI6NDQgMTk5OCAgTXVtaXQgS2hhbiA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGxleC5jIChmaWxlX25hbWVfbm9uZGlyZWN0b3J5KTogQWxzbyBjaGVjayBmb3IgJy8nLgoKTW9uIEZlYiAgMiAxMToyNDoyMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChwcmltYXJ5KTogRGVhbCB3aXRoIHN0YXRlbWVudC1leHByZXNzaW9ucyBpbgoJdGVtcGxhdGVzLiAKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgQklORF9FWFBSLgoJKiB0cmVlLmMgKG1hcGNhcik6IExpa2V3aXNlLgoKCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlX3JlYWwpOiBQYXNzIGV4dHJhIHBhcmFtZXRlciB0bwoJZm5fdHlwZV91bmlmaWNhdGlvbi4gCgkqIGNwLXRyZWUuaCAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkZCBwYXJhbWV0ZXIuCgkqIHB0LmMgKGZuX3R5cGVfdW5pZmljYXRpb24pOiBBZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXIgdG8gZGVhbCB3aXRoCglzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4KCShnZXRfYmluZGluZ3MpOiBEZWFsIHdpdGggc3RhdGljIG1lbWJlciBmdW5jdGlvbnMuCgoJKiBjcC10cmVlLmggKERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QKTogTmV3IG1hY3JvLgkKCShyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IERlY2xhcmUuCgkqIGRlY2wuYyAocmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBSZW1vdmUgZGVjbGFyYXRpb24uICBDaGFuZ2UKCWxpbmthZ2UgZnJvbSBpbnRlcm5hbCB0byBleHRlcm5hbC4KCShjcF9maW5pc2hfZGVjbCk6IERlYWwgd2l0aCB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjbGFzc2VzIGxvY2FsIHRvCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgZm9yZ2V0IHRvIGVtaXQgaW5jcmVtZW50L2RlY3JlbWVudAoJZXhwcmVzc2lvbnMgaW4gaW5pdGlhbGl6ZXJzIGZvciBmaWxlLXNjb3BlIHZhcmlhYmxlcy4KCSogcGFyc2UueSAodHlwZW5hbWVfc3ViMik6IElmIHRoZSB0eXBlbmFtZSBkb2Vzbid0IG5hbWVzIGEKCXRlbXBsYXRlLCByYXRoZXIgdGhhbiBhIHR5cGUsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucyBvZgoJc3RhdGljIG1lbWJlciBmdW5jdGlvbnMuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIG9mZnNldCByZWZlcmVuY2VzIHRvIGxpc3RzIG9mCgltZW1iZXIgZnVuY3Rpb25zLgoJKiBzZWFyY2guYyAobm90ZV9kZWJ1Z19pbmZvX25lZWRlZCk6IERvbid0IGNyYXNoIHdoZW4gaGFuZGVkIGEKCXR5cGUgd2hpY2ggaXMgYmVpbmcgZGVmaW5lZC4KCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBEb24ndCBjcmFzaCB3aGVuIGhhbmRlZCBOVUxMX1RSRUU7Cgl0aGF0IGNhbiBoYXBwZW4gd2l0aCBzb21lIGlsbGVnYWwgY29kZS4KCk1vbiBGZWIgIDIgMDA6NTc6MzggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbC5jICh1c2VyX2hhcnNobmVzcyk6IEluaXRpYWxpemUgYGNvZGUnIHRvIDAuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBJbml0aWFsaXplIGBjYW5kaWRhdGVzJywgYGNwJyBhbmQgYGxlbicgdG8gMC4KCShudWxsX3B0cl9jc3RfcCk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgJiYgd2l0aGluIHx8LgoJKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCSh6X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBJbml0aWFsaXplIGBhcmdzJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZSBmb3IgYG1lbV9hcmdzJy4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZSBmb3IgYG1lbV9hcmdsaXN0Jy4gIEFkZCBgcmV0dXJuJyBmcm9tCglkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24gc3dpdGNoLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZAoJYW1iaWd1b3VzIGBlbHNlJy4KCShidWlsZF9jbGFzc19pbml0X2xpc3QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBJbml0aWFsaXplIGB3aWR0aCcgdG8gMC4KCShpbnN0YW50aWF0ZV90eXBlKTogSW5pdGlhbGl6ZSBgbmFtZScgdG8gTlVMTF9UUkVFLiAgQWRkCglleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX2FnZ3IpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cwoJYGVsc2UnLgoKCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogRWxpbWluYXRlIHVudXNlZCBwYXJhbWV0ZXIsIGFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKHJlY29yZF9idWlsdGluX3R5cGUpOiBJbml0aWFsaXplIGB0ZGVjbCcgdG8gTlVMTF9UUkVFLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBgdmJfb2ZmX2lkZW50aWZpZXInIHRvIE5VTExfVFJFRS4KCShjcF9maW5pc2hfZGVjbCk6IEluaXRpYWxpemUgYHR0eXBlJyB0byBOVUxMX1RSRUUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kICYmIHdpdGhpbiB8fC4gIEFkZAoJZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCgkoZ3Jva3Bhcm1zKTogSW5pdGlhbGl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoJKHhyZWZfdGFnKTogUmVtb3ZlIHVudXNlZCBsYWJlbAlganVzdF9yZXR1cm4nLgoJKGZpbmlzaF9lbnVtKTogSW5pdGlhbGl6ZSBgbWlubm9kZScgYW5kIGBtYXhub2RlJyB0byBOVUxMX1RSRUUuCgkoZmluaXNoX2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBgY29uZCcgYW5kIGB0aGVuY2xhdXNlJyB0byBOVUxMX1RSRUUuCgkoaGFja19pbmNvbXBsZXRlX3N0cnVjdHVyZXMpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQKCXVzZWQgYXMgdHJ1dGggdmFsdWUuCgoJKiBkZWNsMi5jIChjb2VyY2VfZGVsZXRlX3R5cGUpOiBIaWRlIGRlZmluaXRpb24gb2YgYGUzJy4KCgkqIGVycm9yLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPi4KCShkdW1wX2V4cHIpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGknIHRvIHNpemVfdC4gIFJlbW92ZSB1bnVzZWQKCWxhYmVsIGBlcnJvcicuIAoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBkJy4KCShleHBhbmRfdGhyb3cpOiBMaWtld2lzZSBmb3IgYGxhYmVsJy4KCgkqIGZyaWVuZC5jIChhZGRfZnJpZW5kcyk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzCglgZWxzZScuCgoJKiBpbml0LmMgKHNvcnRfbWVtYmVyX2luaXQpOiBJbml0aWFsaXplIGBsYXN0X2ZpZWxkJyB0byBOVUxMX1RSRUUuCgkoc29ydF9iYXNlX2luaXQpOiBMaWtld2lzZSBmb3IgYGJpbmZvJy4KCShleHBhbmRfbWVtYmVyX2luaXQpOiBMaWtld2lzZSBmb3IgYHJ2YWwnLgoJKGJ1aWxkX21lbWJlcl9jYWxsKTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMKCXRydXRoIHZhbHVlLgoJKGJ1aWxkX29mZnNldF9yZWYpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCgkoYnVpbGRfbmV3KTogSW5pdGlhbGl6ZSBgbmVsdHMnIHRvIE5VTExfVFJFRS4gIEluaXRpYWxpemUKCWBvbGRfaW1tZWRpYXRlX3NpemVfZXhwYW5kJyB0byAwLgoJKGJ1aWxkX25ld18xKTogSW5pdGlhbGl6ZSBgbmVsdHMnIGFuZCBgYWxsb2Nfbm9kZScgdG8gTlVMTF9UUkVFLgoJKGJ1aWxkX3ZlY19kZWxldGVfMSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGJsb2NrJy4KCShleHBhbmRfdmVjX2luaXQpOiBJbml0aWFsaXplIGBpdHlwZScgdG8gTlVMTF9UUkVFLgoKCSogbGV4LmM6IEluY2x1ZGUgPHN0cmluZ3MuaD4gaWYgd2UgZG9uJ3QgaGF2ZSA8c3RyaW5nLmg+LiAgUHJvdGVjdAoJZGVjbGFyYXRpb24gb2YgYGluZGV4JyBhbmQgYHJpbmRleCcgd2l0aCBhdXRvY29uZiBtYWNyb3MuCgkocmVpbml0X3BhcnNlX2Zvcl9leHByKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKCWBsb29rX2Zvcl9zZW1pY29sb24nIGFuZCBgbG9va19mb3JfbGJyYWMnLgoJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IEluaXRpYWxpemUgYGFyZ3MnIHRvIE5VTExfVFJFRS4KCShyZWFkZXNjYXBlKTogSW5pdGlhbGl6ZSBgZmlyc3RkaWcnIHRvIDAuCgkocmVhbF95eWxleCk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgYXNzaWdubWVudCB1c2VkIGFzIHRydXRoIHZhbHVlLiAKCgkqIG1ldGhvZC5jOiBJbmNsdWRlIDxzdHJpbmdzLmg+IGlmIHdlIGRvbid0IGhhdmUgPHN0cmluZy5oPi4KCVByb3RlY3QgZGVjbGFyYXRpb24gb2YgYGluZGV4JyB3aXRoIGF1dG9jb25mIG1hY3JvLgoKCSogcGFyc2UueSAocHJpbWFyeSk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCUluaXRpYWxpemUgYHR5cGUnIHRvIE5VTExfVFJFRS4KCShzdHJ1Y3RzcCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGlkJy4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQKCWFtYmlndW91cyBgZWxzZScuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSW5pdGlhbGl6ZSBgdGVtcGxhdGUnIHRvIE5VTExfVFJFRS4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5hbWUnIGFuZCBgZScuCgkodHN1YnN0KTogTGlrZXdpc2UgZm9yIGBpJy4gIEluaXRpYWxpemUgYGxhc3QnIHRvIE5VTExfVFJFRS4KCShkb19wb3BsZXZlbCk6IEluaXRpYWxpemUgYHNhdmVkX3dhcm5fdW51c2VkJyB0byAwLgoJKHR5cGVfdW5pZmljYXRpb24pOiBSZW1vdmUgdW51c2VkIHZhcmFibGUgYHBhcm0nLgoJKHVuaWZ5KTogTGlrZXdpc2UgZm9yIGBqJy4KCgkqIHJlcG8uYyAoaW5pdF9yZXBvKTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMKCXRydXRoIHZhbHVlLgoJKGZpbmlzaF9yZXBvKTogUmVtb3ZlIHVudXNlZCB2YXJhYmxlIGBwJy4KCQoJKiBzZWFyY2guYyAoZ2V0X2JpbmZvKTogSW5pdGlpemUgYHR5cGUnIHRvIE5VTExfVFJFRS4KCShnZXRfYmFzZV9kaXN0YW5jZSk6IExpa2V3aXNlLgoJKGxvb2t1cF9maWVsZCk6IEluaXRpYWxpemUgYHJ2YWxfYmluZm9faCcsIGB0eXBlJywgYGJhc2V0eXBlX3BhdGgnCglhbmQgYG5ld192JyB0byBOVUxMX1RSRUUuCgkobG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UgZm9yIGBydmFsX2JpbmZvX2gnLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMKCXRydXRoIHZhbHVlLgoJKGdldF90ZW1wbGF0ZV9iYXNlKTogSW5pdGlhbGl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoKCSogc2lnLmMgKGFwcGVuZF9zaWduYXR1cmVfZmllbGRzKTogSW5pdGlhbGl6ZSBgbGFzdF9tZnB0cicgdG8KCU5VTExfVFJFRS4KCShidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBMaWtld2lzZSBmb3IKCWBsYXN0X3Joc19maWVsZCcsIGBwZm4nIGFuZCBgdnRfb2ZmJy4KCShidWlsZF9zaWd0YWJsZSk6IExpa2V3aXNlIGZvciBgaW5pdCcuCgoJKiB0cmVlLmMgKGJyZWFrX291dF9jYWxscyk6IEluaXRpYWxpemUgYHQyJyB0byBOVUxMX1RSRUUuCgkocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBMaWtld2lzZSBmb3IgYGRlbHRhJy4KCShoYXNoX3RyZWVfY29ucyk6IEluaXRpYWxpemUgaGFzaGNvZGUgdG8gMC4KCShjYW5fZnJlZSk6IExpa2V3aXNlIGZvciBgc2l6ZScuCgkoY3BfdHJlZV9lcXVhbCk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCQoJKiB0eXBlY2suYyAoY29udmVydF9zZXF1ZW5jZSk6IEhpZGUgcHJvdG90eXBlLgoJKGNvbW1vbl90eXBlKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoJKGNvbXBfdGFyZ2V0X3R5cGVzKTogTGlrZXdpc2UuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSW5pdGlhbGl6ZSBgY3R5cGVwdHInIHRvIE5VTExfVFJFRS4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cwoJYGVsc2UnLgoJKGNvbnZlcnRfYXJndW1lbnRzKTogSW5pdGlhbGl6ZSBgY2FsbGVkX3RoaW5nJyB0byAwLgoJKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogSW5pdGlhbGl6ZSBgc2F2ZXcnIGFuZCBgc2F2ZWUnIHRvIDAuCgoJKiB0eXBlY2syLmMgKGluY29tcGxldGVfdHlwZV9lcnJvcik6IEluaXRpYWxpemUgYGVycm1zZycgdG8gMC4KCShkaWdlc3RfaW5pdCk6IEluaXRpYWxpemUgYG9sZF90YWlsX2NvbnRlbnRzJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfeF9hcnJvdyk6IExpa2V3aXNlIGZvciBgbGFzdF9ydmFsJy4KCgkqIHhyZWYuYyAoR05VX3hyZWZfZGVjbCk6IEluaXRpYWxpemUgYGNscycgdG8gMC4KClN1biBGZWIgIDEgMTI6NDU6MzQgMTk5OCBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIHNldF9zaXpldHlwZS4KCSogZGVjbDIuYyAoc2l6ZXR5cGUpOiBEb24ndCBkZWNsYXJlLgoJKiB0eXBlY2suYyAoY19zaXplb2YpOiBDb252ZXJ0IHJlc3VsdCBvZiAqX0RJVl9FWFBSIHRvIHNpemV0eXBlLgoJKGNfc2l6ZW9mX25vd2FybiwgYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9hZGRyLCB1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGV4cGFuZF9jbGFzc19kZXNjKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGdldF92ZmllbGRfb2Zmc2V0KTogTGlrZXdpc2UuCgpUaHUgSmFuIDI5IDEwOjM5OjMwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IE1vdmUgY2hlY2sgZm9yIGlzX292ZXJsb2FkZWRfZm4KCWVhcmx5IHRvIGF2b2lkIGJvZ3VzIGVycm9yLiAgSGFuZGxlIG92ZXJsb2FkZWQgZnVuY3Rpb24KCW5hbWVzIHByb3ZpZGVkIGFzIHRlbXBsYXRlIGFyZ3VtZW50cyBjb3JyZWN0bHkuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogRG9uJ3QgbWlzaGFuZGxlIG92ZXJsb2FkZWQgZnVuY3Rpb25zIHdoZW4KCWRlYWxpbmcgd2l0aCB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IElzc3VlIGFuIGVycm9yIG1lc3NhZ2UsIHJhdGhlciB0aGFuCgljcmFzaGluZywgd2hlbiB0aGUgVFlQRV9ERUNMIHByb3ZpZGVkIGlzIG5vdCBhIHRlbXBsYXRlIHR5cGUuCgpXZWQgSmFuIDI4IDIzOjE0OjQ0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBEb24ndCBqdXN0IHJldHVybiBhIGtub3duIHR5cGUgaWYKIAlpdCdzIHdyb25nLgoKV2VkIEphbiAyOCAxMTowNDowNyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogUmVtb3ZlIGhhbmRsaW5nIG9mIEZVTkNUSU9OX0RFQ0wKCXNpbmNlIHRoYXQgY29kZSBjb3VsZCBuZXZlciBiZSByZWFjaGVkLgoJCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEF2b2lkIGFib3J0aW5nIGluIHRoZSBtaWRzdCBvZiBwcmludGluZyBhbgoJZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBpbGxlZ2FsIHRlbXBsYXRlIGRlY2xhcmF0aW9uLgoKCSogcGFyc2UueSAoc3RydWN0c3ApOiBQcmludCBhbiBlcnJvciBtZXNzYWdlLCByYXRoZXIgdGhhbiBjcmFzaGluZywKCXdoZW4gYSBjbGFzcy1oZWFkIGRvZXMgbm90IG5hbWUgYSBjbGFzcy4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6ICBBbGxvdyBSRUFMX1RZUEUgYW5kIENPTVBMRVhfVFlQRQoJdGVtcGxhdGUgYXJndW1lbnRzIGFzIGEgZysrIGV4dGVuc2lvbi4KCQoJKiBjcC10cmVlLmRlZiAoQUxJR05PRl9FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogZGVjbDIuYyAoZ3Jva19hbGlnbm9mKTogSWYgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLCBqdXN0IHN0b3JlCgl0aGUgZXhwcmVzc2lvbi4KCSogdHlwZWNrLmMgKGNfYWxpZ25vZik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBBTElHTk9GX0VYUFIuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGNwX3RyZWVfZXF1YWwpOiBMaWtld2lzZS4KCSogcHQuYyAodXNlc190ZW1wbGF0ZV9wYXJtcyk6IENvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYQoJU0laRU9GX0VYUFIvQUxJR05PRl9FWFBSIHVzZXMgdGVtcGxhdGUgcGFyYW1ldGVycyBzbyB0aGF0IGNvbnN0YW50Cglmb2xkaW5nIGNhbiBiZSBkb25lLgoJCgkqIGNwLXRyZWUuaCAoZ3Jva19lbnVtX2RlY2xzKTogUmVtb3ZlIHR5cGUgcGFyYW1ldGVyLgoJKiBkZWNsLmMgKGdyb2tfZW51bV9kZWNscyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IENhbGwgZ3Jva19lbnVtX2RlY2xzCgl1bmNvbmRpdGlvbmFsbHksIHNpbmNlIGl0IHdpbGwgZG8gbm90aGluZyBpZiB0aGVyZSBpcyBubwoJY3VycmVudF9sb2NhbF9lbnVtLiAgVXNlIHRoZSBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBVc2UgdGhlIG5ldyBjYWxsaW5nIHNlcXVlbmNlIGZvcgoJZ3Jva19lbnVtX2RlY2xzLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IE1ha2UgbWVtYmVyIGZ1bmN0aW9ucyBvZiBsb2NhbCBjbGFzc2VzCglpbiBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBoYXZlIGNvbWRhdCBsaW5rYWdlIGhlcmUuLi4KCShncm9rZGVjbGFyYXRvcik6IFJhdGhlciB0aGFuIGhlcmUuCgkKV2VkIEphbiAyOCAxMDo1NTo0NyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBVc2UgZGVjbF9jb25zdGFudF92YWx1ZS4KClR1ZSBKYW4gMjcgMTY6NDI6MjEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IFVzZSBpdC4KCShhZGRfdGVtcGxhdGVfY29udl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShqb3VzdCk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8gbW9yZV9zcGVjaWFsaXplZC4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IEhhbmRsZSBhIHNpbmdsZSBGVU5DVElPTl9ERUNMLgoJKGlzX2xvY2FsX2NsYXNzKTogUmVtb3ZlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBDaGVjayBUSV9QRU5ESU5HX1NQRUNJQUxJWkFUSU9OX0ZMQUcuCgkqIGNwLXRyZWUuaCAoaXNfbG9jYWxfY2xhc3MpOiBSZW1vdmUuCgkocGVyZm9ybV9hcnJheV90b19wb2ludGVyX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBBZGQuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBSZXR1cm4gYSB0cmVlLCBub3QgYW4gaW50LgoJKG1vcmVfc3BlY2lhbGl6ZWQpOiBUYWtlIGFkZGl0aW9uYWwgYXJndW1lbnQuCgkoZ2V0X2JpbmRpbmdzKTogTGlrZXdpc2UuCgkoVElfUEVORElOR19TUEVDSUFMSVpBVElPTl9GTEFHKTogTmV3IG1hY3JvLgoJKiBjdnQuYyAocGVyZm9ybV9xdWFsaWZpY2F0aW9uX2NvbnZlcnNpb25zKTogVXNlIGNvbXBfcHRyX3R0eXBlcy4KCShwZXJmb3JtX2FycmF5X3RvX3BvaW50ZXJfY29udmVyc2lvbik6IFJlbW92ZS4KCSogZGVjbC5jIChzYXZlZF9zY29wZSk6IEFkZCBwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uLAoJcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uIGZpZWxkcy4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IFNhdmUgdGhlbS4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIHRoZW0uCgkoZ3Jva2ZuZGVjbCk6IFVzZSBuZXcgcmV0dXJuIHZhbHVlIGZyb20KCWNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLiAKCShzdGFydF9kZWNsKTogRG9uJ3QgY2hlY2sgZmxhZ19ndWlkaW5nX2RlY2xzIGJlZm9yZSBwdXNoaW5nCglkZWNscy4gCgkoY3BfZmluaXNoX2RlY2wpOiBSZW1vdmUgcHJldmlvdXMgKGJvZ3VzKSBjaGFuZ2UuCgkoZ3Jva19kZWNsYXJhdG9yKTogVXNlIGRlY2xfZnVuY3Rpb25fY29udGV4dCByYXRoZXIgdGhhbgoJaXNfbG9jYWxfY2xhc3MuIAoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8gZ2V0X2JpbmRpbmdzLgoJKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGV0IGJ1aWxkX3hfY29tcG9uZW50X3JlZiBjaGVjayAKCXZhbGlkaXR5IG9mIGFyZ3VtZW50cyByYXRoZXIgdGhhbiBkb2luZyBpdCBoZXJlLgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogUmVtb3ZlIGNvZGUgZm9vbGluZyB3aXRoCglwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uLCBwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24KCWZsYWdzLCBhcyB0aGF0IGlzIG5vdyBkb25lIGluIHttYXliZV9wdXNoX3RvcCxwb3BfZnJvbX1fdG9wX2xldmVsLiAKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBNYW5nbGUgbG9jYWwgY2xhc3NlcyBpbgoJdGVtcGxhdGUgZnVuY3Rpb25zIGNvcnJlY3RseS4KCSogcGFyc2UueSAoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogTW92ZSB0byBwdC5jLgoJKiBwdC5jIChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBNb3ZlZCBoZXJlIGZyb20gcGFyc2UueS4KCShwcmludF9jYW5kaWRhdGVzKTogTmV3IGZ1bmN0aW9uLgoJKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IENoYW5nZSBpbnRlcmZhY2UuICBQcm9wZXJseSBsb29rIGZvcgoJbW9zdCBzcGVjaWFsaXplZCB2ZXJzaW9ucyBvZiB0ZW1wbGF0ZSBjYW5kaWRhdGVzLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRnVsbHkgcHJvY2VzcyBleHBsaWNpdAoJaW5zdGFudGlhdGlvbnMuIAoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IEF2b2lkIGxvb2tpbmcgYXQgQ0xBU1NUWVBFIGZpZWxkcyBpbgoJRlVOQ1RJT05fREVDTFMuIAoJKGRldGVybWluZV9vdmVybG9hZGVkX2Z1bmN0aW9uKTogUmVtb3ZlLgoJKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IENoYW5nZSBuYW1lIGZyb20KCWNvbnZlcnRfbm9udHlwZV9wYXJhbWV0ZXIuICBVc2UgZGV0ZXJtaW5lX292ZXJsb2FkZWRfZnVuY3Rpb24KCWluc3RlYWQgb2YgaW5zdGFudGlhdGVfdHlwZS4KCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBIYW5kbGUgdHlwZSBjb250ZXh0cyBhcyB3ZWxsIGFzCglmdW5jdGlvbiBjb250ZXh0cy4KCShjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkobW9yZV9zcGVjaWFsaXplZCk6IFRha2UgZXhwbGljdCB0ZW1wbGF0ZSBhcmd1bWVudHMgYXMgYQoJcGFyYW1ldGVyLiAKCShtb3N0X3NwZWNpYWxpemVkKTogTGlrZXdpc2UuCgkoZ2V0X2JpbmRpbmdzKTogTGlrZXdpc2UuICBDaGVjayB0aGF0IHJldHVybiB0eXBlcyBtYXRjaCBiZWZvcmUKCXByb2NsYWltaW5nIGEgZnVuY3Rpb24gYSBtYXRjaC4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBSZW1vdmUgY29kZSBzZWFyY2hpbmcgZm9yIGZ1bmN0aW9uIHRvCglpbnN0YW50aWF0ZTsgdGhhdCBpcyBub3cgZG9uZSBpbiBjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbi4KCShhZGRfbWF5YmVfdGVtcGxhdGUpOiBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvIGdldF9iaW5kaW5ncy4KCSogdHJlZS5jIChyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IFVzZSBpc19vdmVybG9hZGVkX2ZuIHRvIHNpbXBsaWZ5CglpbXBsZW1lbnRhdGlvbi4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBDaGVjayBmb3IgaW52YWxpZCBhcmd1bWVudHMuCgpUdWUgSmFuIDI3IDAxOjQ0OjAyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIsIEFHR1JfSU5JVF9FWFBSKTogRG9uJ3QgY2hlY2sgdGhhdCAKCXJldHVybl90YXJnZXQgYW5kIGNhbGxfdGFyZ2V0IGFyZSBlcXVpdmFsZW50LgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogSnVzdCBhY2NlcHQgZnVuY3Rpb24gcGFybXMgdGhhdAoJZG9uJ3QgdXNlIGFueSB0ZW1wbGF0ZSBwYXJtcy4KClN1biBKYW4gMjUgMDM6MzA6MDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFdoZW4gYmFpbGluZyBvbiBhIGNvbWRhdCB2YXJpYWJsZSwgYWxzbwoJdW5zZXQgREVDTF9OT1RfUkVBTExZX0VYVEVSTi4KCgkqIHBhcnNlLnkgKHR5cGVuYW1lX3N1YiopOiBGaXggc3RkOjouCgpTYXQgSmFuIDI0IDEyOjEzOjU0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEZpeCB0eXBlIGRlZmF1bHQgdGVtcGxhdGUgYXJncy4KCShkdW1wX3R5cGUpOiBIYW5kIFRFTVBMQVRFX0RFQ0wgb2ZmIHRvIGR1bXBfZGVjbC4KCkZyaSBKYW4gMjMgMTg6MzQ6MzcgMTk5OCAgTXVtaXQgS2hhbiA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGxleC5jIChESVJfU0VQQVJBVE9SKTogRGVmaW5lIHRvIGJlICcvJyBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKGZpbGVfbmFtZV9ub25kaXJlY3RvcnkpOiBVc2UuCgpXZWQgSmFuIDIxIDEwOjI5OjU3IDE5OTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+CgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBEb24ndCBhY2Nlc3MgZWxlbWVudHMgb2YgQVJHTElTVAoJdGhhdCBhcmUgbm90IHJlYWxseSBwcmVzZW50LiAgU3Vic3RpdHV0ZSBkZWZhdWx0IGFyZ3VtZW50cyBpbiAKCXRlbXBsYXRlIHRlbXBsYXRlIGFyZ3VtZW50cy4gIENvcnJlY3RseSBjb252ZXJ0IFRFTVBMQVRFX0RFQ0wgdG8gCglURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IFRFTVBMQVRFX0RFQ0wgYW5kIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0gCglhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQgc3BlY2lhbGx5IGhlcmUuCgkqIHBhcnNlLnkgKHRlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBGaXggY29weSBlcnJvci4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdhcm4gYWJvdXQgbWlzc2luZyBgdHlwZW5hbWUnIGZvciBuZXN0ZWQKCXR5cGUgY3JlYXRlZCBmcm9tIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkqIHBhcnNlLnkgKGJhZF9wYXJtKTogTGlrZXdpc2UKCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShwdXNoX25lc3RlZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfVEVNUExBVEVfUEFSTSk6IE5ldyB0cmVlIGNvZGUuCgkqIGNwLXRyZWUuaCAoREVDTF9URU1QTEFURV9URU1QTEFURV9QQVJNX1ApOiBOZXcgbWFjcm8uCgkoY29weV90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtKTogRGVjbGFyZS4KCSogZGVjbC5jIChhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUpOiBOZXcgdmFyaWFibGUuCgkobG9va3VwX25hbWVfcmVhbCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJVHJ5IHRvIHJldHVybiBURU1QTEFURV9ERUNMIG9yIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0KCW5vZGUgaWYgYXJnX2xvb2tpbmdfZm9yX3RlbXBsYXRlIGlzIG5vbnplcm8uCgkocHVzaGRlY2wpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShncm9rX29wX3Byb3BlcnRpZXMsIHhyZWZfdGFnLCB4cmVmX2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkqIGRlY2wyLmMgKGNvbnN0cnVjdG9yX25hbWVfZnVsbCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBlcnJvci5jIChkdW1wX3R5cGUpOiBBZGQgVEVNUExBVEVfREVDTCBhbmQgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShkdW1wX3R5cGVfcHJlZml4LCBkdW1wX3R5cGVfc3VmZml4KSBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShkdW1wX2RlY2wpOiBIYW5kbGUgdW5uYW1lZCB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlcnMuCglIYW5kbGUgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCShkdW1wX2Z1bmN0aW9uX25hbWUpOiBIYW5kbGUgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogaW5pdC5jIChpc19hZ2dyX3R5cGVkZWYsIGlzX2FnZ3JfdHlwZSwgZ2V0X2FnZ3JfZnJvbV90eXBlZGVmKTogCglIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogbWV0aG9kLmMgKGJ1aWxkX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcyk6IEhhbmRsZSBURU1QTEFURV9ERUNMLgoJKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lLCBidWlsZF9vdmVybG9hZF9uYW1lKTogCglIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogcGFyc2UueSAobWF5YmVfaWRlbnRpZmllcik6IE5ldyBub250ZXJtaW5hbC4KCSh0ZW1wbGF0ZV90eXBlX3Bhcm0pOiBVc2UgaXQuCgkodGVtcGxhdGVfdGVtcGxhdGVfcGFybSwgdGVtcGxhdGVfYXJnMSk6IE5ldyBub250ZXJtaW5hbC4KCSh0ZW1wbGF0ZV9wYXJtKTogQWRkIHRlbXBsYXRlX3RlbXBsYXRlX3Bhcm0gcnVsZXMuCgkodGVtcGxhdGVfYXJnKTogU2V0IHByb2Nlc3NpbmdfdGVtcGxhdGVfYXJnLgoJKHRlbXBsYXRlX2FyZzEpOiBSdWxlcyBtb3ZlZCBmcm9tIHRlbXBsYXRlX2FyZy4KCShwcmltYXJ5LCBub25uZXN0ZWRfdHlwZSk6IFNldCBhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUgaWYgd2UgYXJlCglwcm9jZXNzaW5nIHRlbXBsYXRlIGFyZ3VtZW50cy4KCSogcHQuYyAoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBIYW5kbGUgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMsIGNvbXBfdGVtcGxhdGVfYXJncyk6IExpa2V3aXNlLgoJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSwgbG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IEhhbmRsZSBURU1QTEFURV9ERUNMIGFuZCAKCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkoY3VycmVudF90ZW1wbGF0ZV9hcmdzKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkodHN1YnN0LCB0c3Vic3RfY29weSwgdW5pZnkpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogc2VhcmNoLmMgKGRmc193YWxrLCBkZnNfcmVjb3JkX2luaGVyaXRhbmNlKTogCglIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogdHJlZS5jIChjb3B5X3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBOZXcgZnVuY3Rpb24uCgkobWFwY2FyKTogSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCk1vbiBKYW4gMTkgMjI6NDA6MDMgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QgYWxsb3cgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mIHN0YXRpYwoJZGF0YSBtZW1iZXJzLgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSGFuZGxlIHVzZXItZGVmaW5lZAoJdGVtcGxhdGUgY29udmVyc2lvbiBvcGVyYXRvcnMgY29ycmVjdGx5LgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBJc3N1ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZQoJb2JqZWN0IGluIGEgQ09NUE9ORU5UX1JFRiBpcyBhIFRFTVBMQVRFX0RFQ0wuCgkKCSogdHlwZWNrLmMgKGluY29tcGxldGVfdHlwZV9lcnJvcik6IEhhbmRsZSBURU1QTEFURV9UWVBFX1BBUk1zLgoJCgkqIGNsYXNzLmMgKGlzX2xvY2FsX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKiBjcC10cmVlLmggKGlzX2xvY2FsX2NsYXNzKTogRGVjbGFyZSBpdC4KCShsYXN0X3RyZWUpOiBMaWtld2lzZS4KCShiZWdpbl90cmVlKTogTGlrZXdpc2UuCgkoZW5kX3RyZWUpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogQ2hlY2sgZm9yIE5VTEwgd2hlcmUgbmVjZXNhcnkuCglDb25zaWRlciBGVU5DVElPTl9ERUNMUyB0byBkZWNsYXJlIG9iamVjdHMgd2l0aCB0b3AtbGV2ZWwgYmluZGluZywKCXdoZW4gY2FsbGluZyBtYWtlX2RlY2xfcnRsLgoJKGdyb2tkZWNsYXJhdG9yKTogR2l2ZSBtZW1iZXJzIG9mIGxvY2FsIGNsYXNzZXMgaW50ZXJuYWwgbGlua2FnZS4KCShzdGFydF9mdW5jdGlvbik6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiBsYXN0X3RyZWUuCgkoZmluaXNoX2Z1bmN0aW9uKTogU2V0IGZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zIGFyb3VuZCBjYWxsIHRvCglyZXN0X29mX2NvbXBpbGF0aW9uIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgbWVtYmVyIGZ1bmN0aW9uIGluIGEKCWxvY2FsIGNsYXNzLgoJKHN0YXJ0X21ldGhvZCk6IENhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIGZvciBtZW1iZXIgZnVuY3Rpb25zIG9mCglsb2NhbCBjbGFzc2VzIGluIHRlbXBsYXRlIGZ1bmN0aW9ucy4KCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogRG9uJ3QgZ2l2ZSBleHRlcm5hbCBsaW5rYWdlIHRvCglpbnN0YW50aWF0aW9ucyBvZiB0ZW1wbGF0ZXMgd2l0aCBpbnRlcm5hbCBsaW5rYWdlLgoJKiBwYXJzZS55IChsYXN0X3RyZWUpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkodGVtcGxhdGVfdHlwZSk6IFBhc3MgZXh0cmEgcGFyYW1ldGVyIHRvIGxvb2t1cF90ZW1wbGF0ZV9jbGFzcy4KCShzZWxmX3RlbXBsYXRlX3R5cGUpOiBMaWtld2lzZS4KCShzdHJ1Y3RzcCk6IE1vdmUgY2FsbCB0byByZXNldF9zcGVjaWFsaXphdGlvbiBpbnRvIGxlZnRfY3VybHkuCgkobGVmdF9jdXJseSk6IENhbGwgcmVzZXRfc3BlY2lhbGl6YXRpb24sIGFuZCBiZWdpbl90cmVlLgoJKiBwdC5jIChzYXZlZF90cmVlcyk6IE5ldyB2YXJpYWJsZS4KCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBDaGFuZ2UgcHJvdG90eXBlLiAgVXNlCglhZGRpdGlvbmFsIGZ1bmN0aW9uIGNvbnRleHQgdG8gbmFtZSBsb2NhbCBjbGFzc2VzIGluIHRlbXBsYXRlcwoJY29ycmVjdGx5LiAKCShjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogUGFzcyB0aGUgY29udGV4dC4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBIYW5kbGUgbG9jYWwgY2xhc3NlcyBhbmQgdGVtcGxhdGVzLCBhbmQKCW1lbWJlciBmdW5jdGlvbnMgZm9yIHN1Y2ggY2xhc3Nlcy4KCShjb252ZXJ0X25vbnR5cGVfcGFyYW1ldGVyKTogRml4IGhhbmRsaW5nIG9mIHBvaW50ZXItdG8tbWVtYmVyCgljb25zdGFudHMuIAoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEhhbmRsZSBsb2NhbCBjbGFzc2VzIGluIHRlbXBsYXRlcy4KCSh0c3Vic3QpOiBMaWtld2lzZS4gIERvbid0IGFzc3VtZSB0aGF0IHRlbXBsYXRlIGluc3RhbnRpYXRpb25zCgloYXZlIGV4dGVybmFsIGxpbmthZ2U7IHBheSBhdHRlbnRpb24gdG8gdGhlIHRlbXBsYXRlIGRlY2xhcmF0aW9uLiAKCShtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogTGlrZXdpc2UuCgkoYmVnaW5fdHJlZSk6IE5ldyBmdW5jdGlvbi4KCShlbmRfdHJlZSk6IExpa2V3aXNlLgoJCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBEb24ndCBjYWxsIGNvbXBsZXRlX3R5cGUgZm9yIGJhc2V0eXBlcwoJdGhhdCBpbnZvbHZlIHRlbXBsYXRlIHBhcmFtZXRlcnM7IHRoYXQgY2FuIGxlYWQgdG8gaW5maW5pdGUKCXJlY3Vyc2lvbiB1bm5lY2Vzc2FyaWx5LgoKCSogcHQuYyAocmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBEbyBub3QgcmVnaXN0ZXIgc3BlY2lhbGl6YXRpb25zCgl0aGF0IGFyZW4ndCByZWFkeSB0byBiZSByZWdpc3RlcmVkIHlldC4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEhhbmRsZSBleHBsaWNpdCBzcGVjaWFsaXphdGlvbiBvZgoJY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4KCShidWlsZF90ZW1wbGF0ZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfdGVtcGxhdGVfZGVsYyk6IEhhbmRsZSBvdXQtb2YtY2xhc3Mgc3BlY2lhbGl6YXRpb25zIG9mCgltZW1iZXIgdGVtcGxhdGVzLgoJCiAgICAgICAgKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFNldCB1cCB0aGUgdGVtcGxhdGUKICAgICAgICBpbmZvcm1hdGlvbiBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIHNwZWNpYWxpemF0aW9uLgogICAgICAgIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBGaXggdGhpbmtvLgogICAgICAgICh0c3Vic3QpOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zIG9mIG1lbWJlciB0ZW1wbGF0ZXMgY29ycmVjdGx5LgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogUmVtb3ZlIGNhbGxzIHRvCgljaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiBmcm9tIGhlcmUuCgkoZmluaXNoX3N0cnVjdCk6IEFuZCBpbnNlcnQgdGhlbSBoZXJlLgoJKiBjcC10cmVlLmggKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IE5ldyBmdW5jdGlvbi4KCShwZXJmb3JtX2FycmF5X3RvX3BvaW50ZXJfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGJlZ2luX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShlbmRfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IFJlbmFtZWQgZnJvbQoJZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLiAKCShjb21wX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZ1bmN0aW9uLgoJKHByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IE5ldyB2YXJpYWJsZS4KCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IE5ldyBmdW5jdGlvbi4KCShwZXJmb3JtX2FycmF5X3RvX3BvaW50ZXJfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbnNpZGVyIHRlbXBsYXRlIGZ1bmN0aW9ucwoJYWxpa2UgdW5sZXNzIHRoZXkgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXJzLiAgUmVmaW5lIGhhbmRsaW5nIG9mCglpbnN0YW50aWF0aW9uL3NwZWNpYWxpemF0aW9uIG1pc21hdGNoZXMuCgkoc3RhcnRfZGVjbCk6IERvbid0IGNhbGwgcHVzaGRlY2wgZm9yIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucywKCXNpbmNlIHRoZXkgZG9uJ3QgYWZmZWN0IG92ZXJsb2FkaW5nLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UKCShncm9rZm5kZWNsKTogQ2FsbCBjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiBhIGxpdHRsZSBsYXRlci4KCURvbid0IGNhbGwgZHVwbGljYXRlX2RlY2xzIGZvciBtZW1iZXJtIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucy4KCShncm9rZGVjbGFyYXRvcik6IERvbid0IHVwZGF0ZSB0ZW1wbGF0ZV9jb3VudCBmb3IgY2xhc3NlcyB0aGF0IGFyZQoJdGhlbXNlbHZlcyBzcGVjaWFsaXphdGlvbnMuICBSZW1vdmUgdXNlIG9mIGAyJyBhcyBwYXJhbWV0ZXIgdG8KCWdyb2tmbmRlY2wgc2luY2UgdGhhdCB2YWx1ZSBpc24ndCB1c2VkLgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogU2F2ZSBhbmQgcmVzdG9yZQoJcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uIGFyb3VuZCBjYWxscyB0byBncm9rZmllbGQuCgkqIHBhcnNlLnkgKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShjb21wb25lbnRfZGVjbF8xKTogVXNlIGl0LgoJKGZuLmRlZjIpOiBMaWtld2lzZS4KCSh0ZW1wbGF0ZV9hcmdfbGlzdF9vcHQpOiBOZXcgbm9udGVybWluYWwuCQoJKHRlbXBsYXRlX3R5cGUpOiBVc2UgaXQuCgkoc2VsZl90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCgkodGVtcGxhdGVfaWQpOiBMaWtld2lzZS4KCShvYmplY3RfdGVtcGxhdGVfaWQpOiBMaWtld2lzZS4KCShub3R5cGVfdGVtcGxhdGVfZGVjbGFyYXRvcik6IExpa3dpc2UuCgkoYmVnaW5fZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGVuZF9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IFVzZSB0aGVtLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBZGQgcGFyYW1ldGVycy4KCShwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBOZXcgdmFyaWFibGUuCgkoY29udmVydF9ub250eXBlX3BhcmFtZXRlcik6IE5ldyBmdW5jdGlvbi4KCShkZXRlcm1pbmVfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGJlZ2luX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShlbmRfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKHJldHJpZXZlX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShwcm9jZXNzaW5nX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogUmVtb3ZlZC4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zIG9mIG1lbWJlcgoJZnVuY3Rpb25zIG9mIHRlbXBsYXRlIGNsYXNzIGluc3RhbnRpYXRpb25zLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogUmVmaW5lIHRvIGNvbmZvcm0gdG8gc3RhbmRhcmQuCgkoY29tcF90ZW1wbGF0ZV9wYXJtcyk6IE5ldyBmdW5jdGlvbi4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBDYWxsIGNvbnZlcnRfbm9udHlwZV9wYXJhbWV0ZXIuCgkodHN1YnN0KTogUmVmaW5lIGhhbmRsaW5nIG9mIG1lbWJlciB0ZW1wbGF0ZXMuICBVc2UKCXJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uLiAKCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IFVzZSByZXRyaWV2ZV9zcGVjaWFsaXphdGlvbi4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UuCgkodHlwZV91bmlmaWNhdGlvbik6IEltcHJvdmUgaGFuZGxpbmcgb2YgZXhwbGljdCB0ZW1wbGF0ZQoJYXJndW1lbnRzLiAKCSogdHJlZS5jIChtYXBjYXIpOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlLCByYXRoZXIgdGhhbiBhYm9ydGluZywKCW9uIFZBUl9ERUNMUywgRlVOQ1RJT05fREVDTFMsIGFuZCBDT05TVF9ERUNMUy4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogQ2FsbCBkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24sIHJhdGhlcgoJdGhhbiBkZXRlcm1pbmVfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24uCgpNb24gSmFuIDE5IDEzOjE4OjUxIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBBIFRBUkdFVF9FWFBSIGhhcyBzaWRlIGVmZmVjdHMuCgpGcmkgSmFuIDE2IDExOjQwOjUwIDE5OTggIEJydW5vIEhhaWJsZSAgPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgogICAgICAgICogZXJyb3IuYyAoZHVtcF9kZWNsKTogRm9yIGVudW0gdGFncywgb3V0cHV0IHRoZSB0YWcsIG5vdCBpdHMgdmFsdWUuCgoxOTk4LTAxLTEzICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE9ubHkgY2FsbCBpbml0X3J0dGlfcHJvY2Vzc2luZwoJRkxBR19SVFRJIGlzIHNldC4KCk1vbiBKYW4gMTIgMDE6MzU6MTggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IFNwbGl0IG91dCBmcm9tIGJ1aWxkX25ldy4KCShidWlsZF9uZXcpOiBKdXN0IHJldHVybiBhIE5FV19FWFBSLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogSGFuZGxlIE5FV19FWFBSLgoKCSogZGVjbDIuYyAoZ2V0X3RlbXBfcmVndmFyKTogVHdlYWsuCgoJKiBjcC10cmVlLmggKFRSRUVfQ0FMTFNfTkVXKTogQ29tbWVudCBvdXQuCgkqIGNsYXNzLmMgKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IFJlbW92ZSB1c2UuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoKV2VkIEphbiAgNyAyMzo0NzoxMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fZWhfYWxsb2MsIF9fZWhfZnJlZSk6IE5ldyBmbnMuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbiwgX19jcF9wb3BfZXhjZXB0aW9uKTogVXNlIHRoZW0uCgkoX191bmNhdGNoX2V4Y2VwdGlvbik6IENhbGwgdGVybWluYXRlIGhlcmUgaWYgbm8gZXhjZXB0aW9uLgoJKiBleGNlcHQuYyAoYnVpbGRfdGVybWluYXRlX2hhbmRsZXIpOiBOZXcgZm4uCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogVXNlIGl0LgoJKGV4cGFuZF9leGNlcHRpb25fYmxvY2tzKTogTGlrZXdpc2UuCgkoYWxsb2NfZWhfb2JqZWN0KTogTmV3IGZuLgoJKGV4cGFuZF90aHJvdyk6IFVzZSBpdC4gIFByb3RlY3QgZXhjZXB0aW9uIGluaXQgd2l0aCB0ZXJtaW5hdGUuCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IFJlbW92ZSBjb2RlIHRoYXQgaWdub3JlcyB0cml2aWFsIAoJbWV0aG9kcy4KCk1vbiBEZWMgMjIgMTE6MzY6MjcgMTk5NyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgogCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogQWRkIGRlZmF1bHQgY2FzZSBpbiBlbnVtZXJhdGlvbgoJc3dpdGNoLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCSogdHJlZS5jIChyZWFsX2x2YWx1ZV9wKTogTGlrZXdpc2UuCgkobHZhbHVlX3ApOiBMaWtld2lzZS4KCShjcF90cmVlX2VxdWFsKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCSogdHlwZWNrMi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogTGlrZXdpc2UuCgpTdW4gRGVjIDIxIDE1OjU5OjAwIDE5OTcgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBZGQgc3VwcG9ydCBmb3IgLVd1bmtub3duLXByYWdtYXMuCgpUaHUgRGVjIDE4IDE0OjUxOjUwIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IE1ha2Ugc3VyZSB0byBkaWdlc3RfaW5pdCBpZgoJcG9zc2libGUuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1ha2UgdGhlIG5ld2RlY2wgdmlydHVhbCBpZiB0aGUKCW9sZGRlY2wgd2FzLCBqdXN0IGFzIGlzIGRvbmUgd2l0aCBvdGhlciBhdHRyaWJ1dGVzIG9mIG9sZGRlY2wuCgpUaHUgRGVjIDE4IDE0OjQzOjE5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IElnbm9yZSBvcDAgd2hlbiB0YWtpbmcgdGhlIAoJYWRkcmVzcyBvZiBhbiBPRkZTRVRfUkVGLgoKCSogY3AtdHJlZS5kZWY6IEFkZCBBR0dSX0lOSVRfRVhQUi4KCSogZXJyb3IuYywgdHJlZS5jLCB0eXBlY2suYzogUmVwbGFjZSB1c2VzIG9mIE5FV19FWFBSIHdpdGgKCUFHR1JfSU5JVF9FWFBSIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogTGlrZXdpc2UuICBTaW1wbGlmeS4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUmVtb3ZlIGNhbGwgdG8gcmVnaXN0ZXJfZXhjZXB0aW9uX3RhYmxlLgoKV2VkIERlYyAxNyAxNzowODo1MiAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IGRvIGluamVjdGlvbiB3aGVuCiAJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGlzIHRydWUsIGFzIHBvbGx1dGVzIGN1cnJlbnRfYmluZGluZ19sZXZlbCAKICAgICAgICBmb3IgYmFzZSBjbGFzc2VzLgoKV2VkIERlYyAxNyAyMToxNzozOSAxOTk3ICBQZXRlciBTY2htaWQgPHNjaG1pZEBsdG9pLmlhcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogcHQuYyAobWF5YmVfZm9sZF9ub250eXBlX2FyZyk6IEFkZCBwcm90b3R5cGUuCgpUdWUgRGVjIDE2IDEwOjMxOjIwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobWFwY2FyKTogSGFuZGxlIFRSWV9DQVRDSF9FWFBSIGV0IGFsLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBMaWtld2lzZS4KCk1vbiBEZWMgMTUgMTI6MjI6MDQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IFJlbW92ZSAiaW5saW5lIGNhbGxlZCBiZWZvcmUKCWRlZmluaXRpb24iIHBlZHdhcm4uCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBVc2UgbWF5YmVfZm9sZF9ub250eXBlX2FyZy4KClN1biBEZWMgMTQgMjI6MzQ6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IEZpeCBiYXNlIGNvbnZlcnNpb24gb2YgcG0ncy4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IENoYW5nZSBfX251bGwgdG8gdHlwZSB2b2lkKiB3aXRoIAoJYSB3YXJuaW5nLgoKU3VuIERlYyAxNCAyMDozODozNSAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBEb24ndCBjYWxsCglidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xIHdpdGggYSBOVUxMIGV4cHIsIHNpbmNlIGl0IHdpbGwKCWNyYXNoLiAKCgkqIHB0LmMgKHVuaWZ5KTogRG9uJ3QgdHJ5IHRvIHVuaWZ5IGFycmF5IGJvdW5kcyBpZiBlaXRoZXIgYXJyYXkgaXMKCXVuYm91bmRlZC4KCkZyaSBEZWMgMTIgMTY6MDk6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyZm4uYyAoY3BfcGVkd2FybiwgY3BfcGVkd2Fybl9hdCwgY3BfZXJyb3JfYXQsIGNwX3dhcm5pbmdfYXQpOiAKCVJlcGxhY2UgZXh0ZXJuIGRlY2xzIHdpdGggY2FzdHMuCgoJKiBkZWNsLmMgKGV4cGFuZF9zdGFydF9lYXJseV90cnlfc3RtdHMpOiBEb24ndCBtZXNzIHdpdGggYSBzZXF1ZW5jZS4KCVVwZGF0ZSBsYXN0X3Bhcm1fY2xlYW51cF9pbnNuLgoJKHN0b3JlX2FmdGVyX3Bhcm1zKTogUmVtb3ZlLgoJKiBjcC10cmVlLmg6IEFkanVzdC4KClRodSBEZWMgMTEgMjI6MTg6MzcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoY29tZGF0X2xpbmthZ2UpOiBBbHNvIHNldCBERUNMX0NPTURBVC4KCShmaW5pc2hfZmlsZSk6IENoZWNrIERFQ0xfQ09NREFUIGluc3RlYWQgb2Ygd2Vha3xvbmVfb25seS4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBtYWtlX2RlY2xfb25lX29ubHkgaW5zdGVhZCBvZgogCWNvbWRhdF9saW5rYWdlIGZvciB3aW4zMiB0d2Vhay4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMb3NlIGhhbmRsaW5nIG9mIHRlbXBsYXRlcyBpbiBwZW5kaW5nX3N0YXRpY3MuCgpUaHUgRGVjIDExIDIxOjEyOjA5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTG9zZSBjYWxsIHRvIGV4cGFuZF9idWlsdGluX3Rocm93LgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBSZW1vdmUuCgkqIGNwLXRyZWUuaDogUmVtb3ZlIHB0cl9wdHJfdHlwZV9ub2RlLgoJKiBkZWNsLmM6IExpa2V3aXNlLgoKVGh1IERlYyAxMSAyMDo0MzozMyAxOTk3ICBUZWVtdSBUb3JtYSAgPHRvdEB0cmVtYS5jb20+CgkKCSogZGVjbC5jIChwdHJfcHRyX3R5cGVfbm9kZSk6IERlZmluZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgaXQuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogZXhjZXB0aW9uLmNjIChfX2NwX2V4Y2VwdGlvbl9pbmZvKTogVXNlIF9fZ2V0X2VoX2luZm8uCgkoX19jcF9wdXNoX2V4Y2VwdGlvbik6IERpdHRvLgoJKF9fY3BfcG9wX2V4Y2VwdGlvbik6IERpdHRvLgoKCUZyb20gU2NvdHQgU255ZGVyIDxzbnlkZXJAZDBzZ2lmLmZuYWwuZ292PjoKICAgICAgICAqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBnZXRfc2F2ZWRfcGNfcmVmIGluc3RlYWQgb2YKCXNhdmVkX3BjLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBSZW1vdmVkIHNhdmVkX3BjIGluaXRpYWxpemF0aW9uLgoKV2VkIERlYyAxMCAxMTowNDo0NSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRGVmZXIgYWxsIHRlbXBsYXRlcyBidXQgaW5saW5lIGZ1bmN0aW9ucy4KCk1vbiBEZWMgIDggMjM6MTc6MTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBEb24ndCBmb2xkIGEgbGlzdCBvZiBwYXJhbWV0ZXJzLgoKCSogZGVjbC5jIChjb3B5X2FyZ3NfcCk6IEhhbmRsZSBjb3B5IGVsaXNpb24gZm9yIHR5cGVzIHdpdGggdmlydHVhbAogCWJhc2VzLgogIAkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogTGlrZXdpc2UuCgpTdW4gRGVjICA3IDIyOjM4OjEyIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IENvcHkgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cywKCW5vdCBqdXN0IHRoZSBsaXN0IGNvbnRhaW5pbmcgdGhlbSwgdG8gdGhlIHBlcm1hbmVudCBvYnN0YWNrLgoKU3VuIERlYyAgNyAxNTo1MzowNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogc3VzcGVuZF9tb21lbnRhcnkgZm9yIHRoZQoJdGVybWluYXRlIGhhbmRsZXIuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgTE9PS1VQX0VYUFIuCgpTdW4gRGVjICA3IDE1OjQ1OjA3IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogQ29weSB0aGUgY2FzdC10byB0eXBlIHRvIHRoZQoJcGVybWFuZW50IG9ic3RhY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSB0ZW1wbGF0ZSBkZWNsLgoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9jb25zdF9jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IExpa2V3aXNlLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQ29lcmNlIHNvbWUgZXhwcmVzc2lvbnMsIGV2ZW4KCXdoZW4gcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLgoKU3VuIERlYyAgNyAwMTo0NjozMyAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQsIHBvaW50ZXJfZGlmZik6IFN5bW1ldHJpYwoJaGFuZGxpbmcgb2YgcG9pbnRlciBkaWZmZXJlbmNlIGV4cHJlc3Npb25zLgoKCSogdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogQ29tcGFyaXNvbiBvZiBmdW5jdGlvbi9tZXRob2QgdHlwZXMKCWlzIGluZGVwZW5kZW50IG9mIG5wdHJzLgoKU3VuIERlYyAgNyAwMTo0MDoyNyAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh0c3Vic3QpOiBBdm9pZCBjcmVhdGluZyBwb2ludGVyIHRvIHJlZmVyZW5jZSBhbmQKCXJlZmVyZW5jZSB0byByZWZlcmVuY2UgdHlwZXMuCgpTYXQgRGVjICA2IDAxOjI5OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGRvX2lkKTogTmV3IG5vbnRlcm1pbmFsLgoJKHRlbXBsYXRlX2lkKTogVXNlIGl0LgoKRnJpIERlYyAgNSAwMToxNzozNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9pZCk6IGRvX2lkZW50aWZpZXIgZm9yIFBGVU5DTkFNRXMsIHRvby4KCSogc3Bldy5jICh5eWxleCk6IERvbid0IGRvX2lkZW50aWZpZXIgaGVyZS4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEV4cGFuZCB0aGUgbmFtZSBmb3IgYSBtZXRob2QgY2FsbC4KCSogcGFyc2UueSAob2JqZWN0X3RlbXBsYXRlX2lkKTogRG9uJ3QgdHJ5IHRvIHRha2UgdGhlIERFQ0xfTkFNRS4KCldlZCBEZWMgIDMgMjA6MDI6MzkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBVc2UgYSBUQVJHRVRfRVhQUiBpbnN0ZWFkIG9mIFNBVkVfRVhQUiBmb3IKIAlhbGxvY19leHByLgogIAkqIGNhbGwuYyAoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBBZGp1c3QuCgoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExvc2UgcmV0aHJvdyByZWdpb24uCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IERvbid0IGV4cGFuZF9sZWZ0b3Zlcl9jbGVhbnVwcy4KCldlZCBEZWMgIDMgMTM6MjQ6MDQgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogUmVtb3ZlIHRyZWVfY29ucyBjYWxsIChwbGFjZXMgcmVkdW5kYW50IGluZm8gaW50bwogCURFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTikuIAkKCldlZCBEZWMgIDMgMTE6NDQ6NTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuKTogSGFuZGxlIGdldHRpbmcgYSBmbiB0ZW1wbGF0ZS4KCShyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUnMgYmV0dGVyLgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFR3ZWFrLgoJKGRldGVybWluZV9leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFR3ZWFrLgoKCSogdHJlZS5jLCBjcC10cmVlLmggKGdldF90YXJnZXRfZXhwcik6IE5ldyBmbi4KCldlZCBEZWMgIDMgMDg6NDc6MjcgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEZpeCBtaXNzcGVsbGluZyBpbgoJZGlhZ25vc3RpYzogYHByZWNlZWRlZCcuCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IEZpeCBtaXNzcGVsbGluZyBpbiBkaWFnbm9zdGljOgoJYGNvbnZlcnNpb25hJy4KCjE5OTctMTItMDIgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGRldGVybWluZV9leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEF2b2lkIGFuIGludGVybmFsCgllcnJvciBmb3IgYmFkIHNwZWNpYWxpemF0aW9ucy4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEhhbmRsZSBTQ09QRV9SRUYuCgpUdWUgRGVjICAyIDE5OjE4OjUwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNsYXNzLmMgKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogRW5hYmxlIGV2ZW4gbW9yZSBjb21wbGV4IE1JCgl2dGFibGUgbmFtZXMuCgpUdWUgRGVjICAyIDAxOjM3OjE5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYyAoX19jaGVja19laF9zcGVjKTogT3B0aW1pemUgYSBiaXQuCgoJKiBleGNlcHRpb24uY2MgKF9fY3BfcG9wX2V4Y2VwdGlvbik6IExvc2UgaGFuZGxlciBhcmcuCgkqIGV4Y2VwdC5jIChkb19wb3BfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgkocHVzaF9laF9jbGVhbnVwKTogTGV0IHRoZSBjbGVhbnVwIG1lY2hhbmlzbSBzdXBwbHkgdGhlIGhhbmRsZXIuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLgoKRnJpIE5vdiAyOCAwMTo1ODoxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IENvbXBsYWluIGFib3V0IHVzaW5nIGEgCgl0ZW1wbGF0ZS1pZCBmb3IgYSBub24tc3BlY2lhbGl6YXRpb24uCgpGcmkgTm92IDI4IDEyOjM1OjE5IDE5OTcgIFNjb3R0IENocmlzdGxleSAgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KCgkqIHJlcG8uYzogUHJvdG90eXBlIHJpbmRleCBvbmx5IGlmIG5lZWRlZC4KCSogeHJlZi5jOiBMaWtld2lzZS4KCkZyaSBOb3YgMjggMDE6NTY6MzUgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCiAgICAgICAgKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KClRodSBOb3YgMjcgMDA6NTk6NDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbnN0X2Nhc3QpOiBIYW5kbGUgcmVmZXJlbmNlcyBoZXJlIGluc3RlYWQgb2YKCWhhbmRpbmcgb2ZmIHRvIGNvbnZlcnRfdG9fcmVmZXJlbmNlLgoKCSogZXhjZXB0LmM6IExvc2UgVW5leHBlY3RlZCwgU2V0VGVybWluYXRlLCBTZXRVbmV4cGVjdGVkLAogCVRlcm1pbmF0ZUZ1bmN0aW9uQ2FsbC4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogTGlrZXdpc2UuICBUZXJtaW5hdGUgZXQgYWwgYXJlIG5vdwogCXRoZSBmbnMsIG5vdCBBRERSX0VYUFJzLgoJKHZhcmlvdXMpOiBMb3NlIHJlZHVuZGFudCBhc3NlbWJsZV9leHRlcm5hbCBjYWxscy4KCShkb191bndpbmQpOiBzL0J1aWx0aW5SZXR1cm5BZGRyZXNzL2J1aWx0aW5fcmV0dXJuX2FkZHJlc3NfZm5kZWNsLy4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbF9mbGFncyk6IEFkZCBjb21kYXQuCgkoREVDTF9DT01EQVQpOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUHJvcGFnYXRlIGl0LgoJKGNwX2ZpbmlzaF9kZWNsKTogSGFuZGxlIGl0LgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBKdXN0IHNldCBERUNMX0NPTURBVCBvbiBWQVJfREVDTHMuCgoJKiBjbGFzcy5jOiBSZW1vdmUgc3RhdGljIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KIAkoYWRkX3ZpcnR1YWxfZnVuY3Rpb24pOiBUYWtlIHBvaW50ZXJzIHRvIHBlbmRpbmdfdmlydHVhbHMKCWFuZCBwZW5kaW5nX2hhcmRfdmlydHVhbHMuCgkoZmluaXNoX3N0cnVjdF8xKTogUGFzcyB0aGVtLiAgRGVjbGFyZSBwZW5kaW5nX2hhcmRfdmlydHVhbHMuCgpXZWQgTm92IDI2IDIwOjI4OjQ5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogSWYgd2Ugc3VwcG9ydCBvbmVfb25seSBidXQgbm90Cgl3ZWFrIHN5bWJvbHMsIG1hcmsgaW5zdGFudGlhdGVkIHRlbXBsYXRlIHZ0YWJsZXMgb25lX29ubHkuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogTGlrZXdpc2UgZm9yIHRpbmZvIGZ1bmN0aW9ucy4KCShmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBBbHNvIHdyaXRlIG91dCB2dGFibGVzIGZyb20gZXhwbGljaXRseSAKCWluc3RhbnRpYXRlZCB0ZW1wbGF0ZSBjbGFzc2VzLgoJKiBwdC5jIChtYXJrX2NsYXNzX2luc3RhbnRpYXRlZCk6IFJldmVydCBsYXN0IGNoYW5nZS4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBDYWxsIG1hcmtfdXNlZCBvbiB0aGUgZGVzdHJ1Y3Rvci4KCldlZCBOb3YgMjYgMTU6MTM6NDggMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbGV4LmMgKGxhbmdfaW5pdCk6IEVuYWJsZSBmbGFnX2V4Y2VwdGlvbnMgYnkgZGVmYXVsdCBpZiBubwoJY29tbWFuZCBsaW5lIHN3aXRjaCB3YXMgc3BlY2lmaWVkLgoKMTk5Ny0xMS0yNiAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgYHZvaWQnIHRlbXBsYXRlIHBhcmFtZXRlcnMgaW4KCXNwZWNpYWxpemF0aW9ucy4KCldlZCBOb3YgMjYgMDE6MTE6MjQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBIYW5kbGUgdGVtcGxhdGUgY2FzZSBoZXJlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdF8xKTogTm90IGhlcmUuCgoJKiB0eXBlY2syLmMgKGRpZ2VzdF9pbml0KTogTWFrZSBjb3BpZXMgd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogcmVzb2x2ZV9vZmZzZXRfcmVmLgoKCSogZXhjZXB0LmM6IENhbGwgdGVybWluYXRlIHdpdGhvdXQgY2FjaGluZyBzbyBtYW55IGJpdHMuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRml4IGNhdGNoaW5nIGEgcmVmZXJlbmNlCgl0byBwb2ludGVyLgoKVHVlIE5vdiAyNSAxMToyODoyMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IENvcHkgc2l6ZSB0byB0aGUgc2F2ZWFibGUgb2JzdGFjay4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogU3RpY2sgYSBDTEVBTlVQX1BPSU5UX0VYUFIgaW5zaWRlIHRoZQogCVRSWV9DQVRDSF9FWFBSIGZvciBub3cuCgpNb24gTm92IDI0IDEyOjE1OjU1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogRG9uJ3QgYXNzdW1lIGEgRlVOQ1RJT05fREVDTAoJaGFzIERFQ0xfTEFOR19TUEVDSUZJQy4KCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBBZGQgaGFuZGxlcnMgZmllbGQuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbik6IEluaXRpYWxpemUgaXQuCgkoX19jcF9wb3BfZXhjZXB0aW9uKTogRGVjcmVtZW50IGl0LiAgRG9uJ3QgcG9wIHVubGVzcyBpdCdzIDAuCgkoX190aHJvd19iYWRfZXhjZXB0aW9uKTogUmVtb3ZlLgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogQWRkIGhhbmRsZXJzIGZpZWxkLgoJKGdldF9laF9oYW5kbGVycyk6IE5ldyBmbi4KCShwdXNoX2VoX2NsZWFudXApOiBJbmNyZW1lbnQgaGFuZGxlcnMuCgpGcmkgTm92IDIxIDEyOjIyOjA3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfZWhfc3BlYyk6IFVzZSB0aGUgdHJ5L2NhdGNoIGNvZGUuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogTGlrZXdpc2UuICBDYWxsIF9fY2hlY2tfZWhfc3BlYyBpbnN0ZWFkIG9mCglkb2luZyBldmVyeXRoaW5nIGlubGluZS4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogdGhyb3dfdHlwZV9tYXRjaCBub3cgdGFrZXMKIAljb25zdCB2b2lkIHBvaW50ZXJzLgoJKiBleGNlcHRpb24uY2MgKF9fY2hlY2tfZWhfc3BlYyk6IE5ldyBmbi4KCSogaW5jL2V4Y2VwdGlvbjogTmVpdGhlciB0ZXJtaW5hdGUgbm9yIHVuZXhwZWN0ZWQgcmV0dXJuLgoJKiBkZWNsLmM6IE1ha2UgY29uc3RfcHRyX3R5cGVfbm9kZSBwdWJsaWMuCgkqIHRpbmZvMi5jYyAoX190aHJvd190eXBlX21hdGNoX3J0dGkpOiBUYWtlIHRoZSB0eXBlaW5mb3MgY29uc3RseS4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBXZSBvbmx5IG5lZWQgdGhlIHJldGhyb3cKIAlyZWdpb24gZm9yIG5vbi1zamxqIGV4Y2VwdGlvbnMuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLiAgVXNlIG91dGVyX2NvbnRleHRfbGFiZWxfc3RhY2suCgpUaHUgTm92IDIwIDE0OjQwOjE3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoQ1hYX0xJQjJGVU5DUyk6IEFkZCBuZXcgb3AgbmV3IGFuZCBvcCBkZWxldGUgb2Jqcy4KCSh2YXJpb3VzLm8pOiBMaWtld2lzZS4KCSogaW5jL25ldzogQWRkIHBsYWNlbWVudCBkZWxldGVzLiAgQWRkIHRocm93IHNwZWNzIGZvciBkZWZhdWx0IG5ldy4KCSogbmV3LmNjIChzZXRfbmV3X2hhbmRsZXIpOiBNb3ZlIGhlcmUgZnJvbSBsaWJnY2MyLgoJKiBuZXcxLmNjIChuZXcgKG5vdGhyb3cpKTogQ2F0Y2ggYSBiYWRfYWxsb2MgdGhyb3duIGZyb20gdGhlIGhhbmRsZXIuCgkobmV3KTogTW92ZSBmcm9tIGxpYmdjYzIuICBUaHJvdyBiYWRfYWxsb2MuCgkqIG5ldzIuY2M6IE1vdmUgdGhlIHJlc3Qgb2YgdGhlIG9wIG5ld3MgYW5kIG9wIGRlbGV0ZXMgZnJvbSBsaWJnY2MyLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXBkYXRlIGV4Y2VwdGlvbiBzcGVjcyBvbiBuZXcgYW5kCglkZWxldGUuCgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogRG9uJ3QgbWVzcyB3aXRoIGdsb2JhbCAKCXBsYWNlbWVudCBkZWxldGUuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IENoZWNrIGZvciBudWxsIHRocm93IHNwZWMsIG5vdCBub3Rocm93X3QuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbXBsYWluIGFib3V0IGRpZmZlcmVudCBleGNlcHRpb25zCglmcm9tIGFuIGludGVybmFsIGRlY2xhcmF0aW9uLgoKCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IEZpeCBjaGVjayBmb3IgbWVtYmVyIGZucyBhZ2Fpbi4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IEludGVyZmFjZSBoYWNrZXJ5IGFmZmVjdHMKCXZpcnR1YWwgc3ludGhlc2l6ZWQgbWV0aG9kcy4KCldlZCBOb3YgMTkgMTg6MjQ6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QganVzdCBjb21wbGFpbiBhYm91dCBhIG1pc21hdGNoZWQgCglzY29wZSwgZml4IGl0LgoKCSogZGVjbC5jIChtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogSGFuZGxlIGNhc2Ugd2hlcmUgdCBpcyBub3QKIAlhY3R1YWxseSBmcm9tIGNvbnRleHQuCgkqIHRyZWUuYyAoZ2V0X3R5cGVfZGVjbCk6IExvc2UgaWRlbnRpZmllciBjYXNlLgoJKiBzcGV3LmMgKHl5bGV4KTogTG9zZSB1c2VsZXNzIGNhbGwgdG8gaWRlbnRpZmVyX3R5cGVkZWNsX3ZhbHVlLgoJKiBwYXJzZS55IChub25uZXN0ZWRfdHlwZSk6IEp1c3QgdXNlIGxvb2t1cF9uYW1lLgoJKGNvbXBsZXhfdHlwZV9uYW1lKTogSnVzdCB1c2UgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUuCgpXZWQgTm92IDE5IDExOjQ1OjA3IDE5OTcgIE1pY2hhZWwgVGllbWFubiAgPHRpZW1hbm5AYXhvbi5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9uYW1lKTogVGVzdCBERUNMX0xBTkdfU1BFQ0lGSUMgaW4gY2FzZQoJVCB3YXMgYnVpbHQgaW4gQyBsYW5ndWFnZSBjb250ZXh0IChmb3IgZXhhbXBsZSwgYnkKCW91dHB1dF9mdW5jX3N0YXJ0X3Byb2ZpbGVyKS4KCldlZCBOb3YgMTkgMTA6Mzk6MjcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogTmV3IGZuLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBVc2UgaXQuICBVc2UgY3VycmVudF9jbGFzc190eXBlIGFzIHRoZSBjb250ZXh0LgoKTW9uIE5vdiAxNyAyMzo0MjowMyAxOTk3ICBCcnVubyBIYWlibGUgPGhhaWJsZUBpbG9nLmZyPgoKCSogcHQuYyAoZG9fcG9wbGV2ZWwpOiBEb24ndCBwcm9oaWJpdCBqdW1wcyBpbnRvIHRoaXMgY29udG91ci4KCk1vbiBOb3YgMTcgMDI6MDE6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFdhcm4gYWJvdXQgbm9uLXRlbXBsYXRlIGZyaWVuZHMgaW4gdGVtcGxhdGVzLgoKCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IEZpeCBoYW5kbGluZyBvZiBpbmhlcml0ZWQgZGVsZXRlLgoKCSogc2VhcmNoLmMgKGRmc19yZWNvcmRfaW5oZXJpdGFuY2UpOiBJZ25vcmUgdGVtcGxhdGUgdHlwZSBwYXJtcy4KClNhdCBOb3YgMTUgMDA6MzA6NTEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBGaXggY29weSBlcnJvci4KCShidWlsZF9vcF9uZXdfY2FsbCk6IE5ldyBmbi4KCShidWlsZF9vcF9kZWxldGVfY2FsbCk6IE5ldyBmbi4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIHRoZW0uCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIHRoZW0uICBTdXBwb3J0IHBsYWNlbWVudCBkZWxldGUuCgkoYnVpbGRfeF9kZWxldGUpOiBVc2UgYnVpbGRfb3BfZGVsZXRlX2NhbGwuCgkoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBMaWtld2lzZS4KCShjb2VyY2VfZGVsZXRlX3R5cGUpOiBEb24ndCBjb21wbGFpbiBhYm91dCBwbGFjZW1lbnQgZGVsZXRlLgoKVGh1IE5vdiAxMyAwMTo1MjozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogUmVtb3ZlIHVudXNlZCAnb2JqJyBwYXJtLgoJKiBjcC10cmVlLmgsIHR5cGVjay5jOiBBZGp1c3QuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IE1ha2UgdGhlIGNsZWFudXAgbGFzdCBsb25nZXIuCgkoZXhwYW5kX3ZlY19pbml0KTogQ2FsbCBkb19wZW5kaW5nX3N0YWNrX2FkanVzdC4KCldlZCBOb3YgMTIgMTE6MDQ6MzMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogRml4IHR5cG8uCgkobWFya19jbGFzc19pbnN0YW50aWF0ZWQpOiBJZiB3ZSBzdXBwb3J0IG9uZV9vbmx5IGJ1dCBub3Qgd2VhayAKCXN5bWJvbHMsIGRvbid0IG1hcmsgdGhpcyBhcyBrbm93bi4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogSGFuZGxlIHZlYyBkZWxldGUgaW4gRUggY2xlYW51cC4KCldlZCBOb3YgMTIgMDg6MTE6NTUgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgY29tcGxldGVfdHlwZSBiZWZvcmUgY2hlY2tpbmcKIAlmb3IgZGVzdHJ1Y3Rvci4KClN1biBOb3YgIDkgMDE6Mjk6NTUgMTk5NyAgSmltIFdpbHNvbiAgKHdpbHNvbkBjeWdudXMuY29tKQoKCSogZGVjbC5jIChhZGRfYmxvY2tfY3VycmVudF9sZXZlbCk6IERlbGV0ZS4KCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlXzEpOiBEZWxldGUgYnVpbGRfYmxvY2sgYW5kCglhZGRfYmxvY2tfY3VycmVudF9sZXZlbCBjYWxscy4KCldlZCBOb3YgMTIgMDA6NDg6MTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBIYW5kbGUgZnJlZWluZyBhbGxvY2F0ZWQgbWVtb3J5IHdoZW4gdGhlCgljb25zdHJ1Y3RvciB0aHJvd3MuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEZpeCBmbGFncyBhcmcuCgoJKiBwdC5jIChkb190eXBlX2luc3RhbnRpYXRpb24pOiBEb24ndCB0cnkgdG8gaW5zdGFudGlhdGUKCW1lbWJlciB0ZW1wbGF0ZXMuCgkobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IElmIHdlIHN1cHBvcnQgb25lX29ubHkgYnV0IG5vdAoJd2VhayBzeW1ib2xzLCBtYXJrIHRoaXMgb25lX29ubHkuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogRG9uJ3QgZGVmZXIgaGFuZGxpbmcgb2YgdnRhYmxlcwoJaWYgTVVMVElQTEVfU1lNQk9MX1NQQUNFUy4KClR1ZSBOb3YgMTEgMTI6MDI6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMb3NlIGNhbGwgdG8gX19zanBvcG50aHJvdy4KClR1ZSBOb3YgMTEgMDI6NTM6NDQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQGxhc2hlci5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGRvX3BvcF9leGNlcHRpb24pOiBSZXR1cm4gYSB2YWx1ZS4KCk1vbiBOb3YgMTAgMjA6MjU6MzEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBIYW5kbGUgZ2V0dGluZyBhCiAJVEVNUExBVEVfSURfRVhQUiBhcm91bmQgYSBURU1QTEFURV9ERUNMLiAgRG9uJ3QgbG9vayBmb3IgYSBmaWVsZAogCWlmIHdlIGdvdCB0ZW1wbGF0ZSBwYXJtcy4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFJlbWVtYmVyIHRoZSBURU1QTEFURV9JRF9FWFBSLAogCW5vdCBqdXN0IHRoZSBhcmdzLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IFR3ZWFrIGxhc3QgY2hhbmdlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IFVzZSBnZXRfZmlyc3RfZm4gaW5zdGVhZCBvZiBUUkVFX1ZBTFVFLgoJKG1heWJlX2ZvbGRfbm9udHlwZV9hcmcpOiBTcGxpdCBvdXQgZnJvbSB0c3Vic3RfY29weS4KCSogdHJlZS5jIChnZXRfZmlyc3RfZm4pOiBKdXN0IHJldHVybiBhIFRFTVBMQVRFX0lEX0VYUFIuCgpNb24gTm92IDEwIDIwOjA4OjM4IDE5OTcgIEtyaWFuZyBMZXJkc3V3YW5ha2lqIDxsZXJkc3V3YUBzY2YtZnMudXNjLmVkdT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSGFuZGxlIGV4cGxpY2l0IHRlbXBsYXRlIGFyZ3VtZW50cyBpbiAKCWZ1bmN0aW9uIGNhbGxzLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTG9va3VwIGZ1bmN0aW9uIG5hbWUgaWYgaXQgCgloYXNuJ3QgYmVlbiBkb25lLgoKCSogcHQuYyAodHN1YnN0KTogSW5zdGFudGlhdGUgdGVtcGxhdGUgZnVuY3Rpb25zIHByb3Blcmx5IHdoZW4gCgl0ZW1wbGF0ZSBwYXJhbWV0ZXIgZG9lcyBub3QgYXBwZWFyIGluIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQgcmV0dXJuIAoJdHlwZS4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlcyByZXF1aXJlZCBieSB0c3Vic3QuCgpNb24gTm92IDEwIDIwOjA4OjM4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBUd2VhayBjb25kaXRpb25zIGZvciBwZWR3YXJuIGluCiAJcHJldmlvdXMgY2hhbmdlLgoKTW9uIE5vdiAxMCAyMDowODoyOSAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVHdlYWsgZXJyb3IgbWVzc2FnZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJZiAtV3JldHVybi10eXBlLCB3YXJuIGV2ZXJ5dGltZSBhCglyZXR1cm4gdHlwZSBkZWZhdWx0cyB0byBgaW50JywgZXZlbiBpZiB0aGVyZSBhcmUgc3RvcmFnZS1jbGFzcwoJc3BlY2lmaWVycy4KCk1vbiBOb3YgMTAgMDM6MDQ6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUNvbXBsZXRlIG5lc3RlZCBleGNlcHRpb24gc3VwcG9ydC4KCSogZXhjZXB0LmMgKGRvX3BvcF9leGNlcHRpb24pOiBTcGxpdCBvdXQuLi4KCShwdXNoX2VoX2NsZWFudXApOiBGcm9tIGhlcmUuICBIYW5kbGUgdGhlIEVIIHJlZ2lvbiBieSBoYW5kLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEFkZCBhIG5ldyBsZXZlbCBmb3IgdGhlIGNhdGNoIHBhcm0uCglNb3ZlIHRoZSByZXRocm93IHJlZ2lvbiBvdXRzaWRlIHRoZSB0d28gY2xlYW51cCByZWdpb25zLgoJUHJvdGVjdCB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSBjYXRjaCBwYXJtIHdpdGggdGVybWluYXRlLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4gIEVuZCB0aGUgcmVnaW9uIGZvciB0aGUgZWhfY2xlYW51cC4KCSogZXhjZXB0aW9uLmNjIChfX2NwX3BvcF9leGNlcHRpb24pOiBOb3cgdGFrZXMgdHdvIHBhcm1zLiAgSGFuZGxlCglwb3BwaW5nIG9mZiB0aGUgbWlkZGxlIG9mIHRoZSBzdGFjay4KCSogdHJlZS5jIChsdmFsdWVfcCwgcmVhbF9sdmFsdWVfcCk6IEhhbmRsZSBUUllfQ0FUQ0hfRVhQUiwgCglXSVRIX0NMRUFOVVBfRVhQUiwgYW5kIFVOU0FWRV9FWFBSLgoJKGJ1aWxkX2NwbHVzX25ldyk6IE9ubHkgd3JhcCBDQUxMX0VYUFJzLgoJKiBpbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBIYW5kbGUgYSBUUllfQ0FUQ0hfRVhQUiBhcm91bmQgCgl0aGUgY29uc3RydWN0b3IgY2FsbC4KClN1biBOb3YgIDkgMTg6MDA6MjYgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmRpc3RkaXIpOiBNYWtlIGluYyBzdWJkaXJlY3RvcnkuCgpGcmkgTm92ICA3IDExOjU3OjI4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUHV0IGJhY2sgc29tZSBjb2RlLgoKVGh1IE5vdiAgNiAxMToyODoxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFJlbW92ZSByZWR1bmRhbnQgY29kZS4KCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBEb24ndCBsZXQgdGhlIGJhY2tlbmQgZGVmZXIgZ2VuZXJpYyB0aHVua3MuCgpXZWQgTm92ICA1IDIzOjUyOjUwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBTcGxpdCBvdXQuLi4KCShwdXNoX2VoX2luZm8pOiBGcm9tIGhlcmUuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBVc2UgaXQuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTW92ZSByZWdpb24gc3RhcnQgYmFjay4KClR1ZSBOb3YgIDQgMTM6NDU6MTAgMTk5NyAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChNVUxUSUJZVEVfQ0hBUlMpOiAjdW5kZWYgaWYgY3Jvc3MgY29tcGlsaW5nLgoJKHJlYWxfeXlsZXgpOiBSZWNvcmQgd2lkZSBzdHJpbmdzIHVzaW5nIHRhcmdldCBlbmRpYW5uZXNzLCBub3QgaG9zdC4KCjE5OTctMTEtMDMgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHJlcG8uYyAocmluZGV4KTogQWRkIGRlY2wgdW5jb25kaXRpb25hbGx5LgoJKGdldF9iYXNlX2ZpbGVuYW1lLCBvcGVuX3JlcG9fZmlsZSk6IERvbid0IGNhc3QgcmluZGV4LgoJKiB4cmVmLmMgKHJpbmRleCk6IEFkZCBkZWNsIHVuY29uZGl0aW9uYWxseS4KCShpbmRleCk6IFJlbW92ZSB1bnVzZWQgZGVjbC4KCShvcGVuX3hyZWZfZmlsZSk6IERvbid0IGNhc3QgcmluZGV4LgoKU3VuIE5vdiAgMiAxNTowNDoxMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogUHJvcGFnYXRlIHRoZSByZXN1bHQgdHlwZSBwcm9wZXJseS4KCjE5OTctMTEtMDEgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdykgWyFEV0FSRjJfVU5XSU5EX0lORk9dOiBSZXBsYWNlCglyZW1haW5pbmcgdXNlIG9mIHNhdmVkX3Rocm93X3R5cGUgd2l0aCBhIGNhbGwgdG8gZ2V0X2VoX3R5cGUuCgoxOTk3LTEwLTMxICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoRklMRV9OQU1FX05PTkRJUkVDVE9SWSk6IERlbGV0ZSBtYWNyby4KCShmaWxlX25hbWVfbm9uZGlyZWN0b3J5KTogTmV3IGZ1bmN0aW9uLCBkb2luZyB0aGUgc2FtZSBhcyB0aGUgbWFjcm8uCgkoc2V0X3R5cGVkZWNsX2ludGVyZmFjZV9pbmZvKTogVXNlIGl0IGluc3RlYWQgb2YgdGhlIG1hY3JvLgoJKGNoZWNrX25ld2xpbmUpOiBMaWtld2lzZS4KCShoYW5kbGVfY3BfcHJhZ21hKTogTGlrZXdpc2UuCgoJKiByZXBvLmMgKGdldF9iYXNlX2ZpbGVuYW1lKTogQ2FzdCByZXN1bHQgb2YgcmluZGV4IHRvIGNoYXIqLgoJKG9wZW5fcmVwb19maWxlKTogTGlrZXdpc2UuCgkqIHhyZWYuYyAob3Blbl94cmVmX2ZpbGUpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9jaGFyKTogTWFrZSBpdHMgYXJnIGludCwgbm90IGNoYXIuCgoJKiBleGNlcHQuYyAocHVzaF9laF9pbmZvKTogUGFzcyB0aGUgbnVtYmVyIG9mIGZpZWxkcyAtIDEgZG93biwgbm90Cgl0aGUgZXhhY3QgbnVtYmVyIG9mIGZpZWxkcy4KCkZyaSBPY3QgMzEgMDE6NDc6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCVN1cHBvcnQgZm9yIG5lc3RlZCBleGNlcHRpb25zLgoJKiB0aW5mbzIuY2MgKF9faXNfcG9pbnRlcik6IE5ldyBmbi4KCSogZXhjZXB0aW9uLmNjIChzdHJ1Y3QgY3BfZWhfaW5mbyk6IERlZmluZS4KCShfX2NwX2V4Y2VwdGlvbl9pbmZvLCBfX3VuY2F0Y2hfZXhjZXB0aW9uKTogTmV3IGZucy4KCShfX2NwX3B1c2hfZXhjZXB0aW9uLCBfX2NwX3BvcF9leGNlcHRpb24pOiBOZXcgZm5zLgoJKiBleGNlcHQuYzogTG9zZSBzYXZlZF90aHJvd197dHlwZSx2YWx1ZSxjbGVhbnVwLGluX2NhdGNofS4KIAlMb3NlIGVtcHR5X2ZuZGVjbC4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogTGlrZXdpc2UuICBfX2VoX3BjIGlzIG5vdyBleHRlcm5hbC4KCShwdXNoX2VoX2luZm8pOiBOZXcgZm4uCgkoZ2V0X2VoX3tpbmZvLHZhbHVlLHR5cGUsY2F1Z2h0fSk6IE5ldyBmbnMuCgkocHVzaF9laF9jbGVhbnVwKTogSnVzdCBjYWxsIF9fY3BfcG9wX2V4Y2VwdGlvbi4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBVc2UgcHVzaF9laF9pbmZvLiAgU3RhcnQgdGhlIGVoIHJlZ2lvbgoJc29vbmVyLgoJKGV4cGFuZF9lbmRfZWhfc3BlYyk6IFVzZSBwdXNoX2VoX2luZm8uCgkoZXhwYW5kX3Rocm93KTogQ2FsbCBfX2NwX3B1c2hfZXhjZXB0aW9uIHRvIHNldCB1cCB0aGUgZXhjZXB0aW9uIGluZm8uCglKdXN0IHBhc3MgdGhlIGRlc3RydWN0b3Igb3IgMCBhcyB0aGUgY2xlYW51cC4gIENhbGwgX191bmNhdGNoX2V4Y2VwdGlvbgoJd2hlbiB3ZSByZXRocm93LgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogRG9uJ3QgcmVmZXIgdG8gZW1wdHlfZm5kZWNsLgoKVGh1IE9jdCAyMyAwMjowMTozMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogU0VUX0RFQ0xfSU1QTElDSVRfSU5TVEFOVElBVElPTiBvbiBuZXcgZGVjbC4KCjE5OTctMTAtMjIgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcywgYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKToKCUFkZCBzdGF0aWMgdG8gZGVmaW5pdGlvbnMuCgkqIHB0LmMgKGFkZF90b190ZW1wbGF0ZV9hcmdzLCBub3RlX3RlbXBsYXRlX2hlYWRlciwKCXByb2Nlc3NpbmdfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24sIHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHtkZXRlcm1pbmUsY2hlY2t9X2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogVXNlIGEgc2luZ2xlIHN0cmluZyBmb3IKCWVycm9yIG1lc3NhZ2VzLgoKTW9uIE9jdCAyMCAxMjowNjozNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBDYWxsIGRvX3BlbmRpbmdfc3RhY2tfYWR1c3QuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLgoJKGV4cGFuZF9lbmRfZWhfc3BlYyk6IExpa2V3aXNlLgoKTW9uIE9jdCAyMCAxMTo0NDoyMCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEhhbmRsZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMKCWNvcnJlY3RseS4gCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fbmFtZSk6IEZpeCBwcmludGluZyBvZiBzcGVjaWFsaXphdGlvbnMgb2YKCW1lbWJlciBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IG1lbWJlciB0ZW1wbGF0ZXMuCgkqIGNwLXRyZWUuaCAocHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbik6IE1ha2UgZ2xvYmFsLgoJKiBwdC5jIChwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBTYXZlIGFuZCByZXN0b3JlCglwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uIHRvIGF2b2lkIGNvbmZ1c2lvbi4KCQpNb24gT2N0IDIwIDEwOjUyOjIyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBHaXZlIG51bGxfbm9kZSB1bmtub3duKiB0eXBlLgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBIYW5kbGUgVU5LTk9XTl9UWVBFLgoJKGNvbW1vbl90eXBlKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGFyZ3NfYXNfc3RyaW5nKTogUmVjb2duaXplIG51bGxfbm9kZS4KClN1biBPY3QgMTkgMDk6MTM6MDEgMTk5NyAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHR5cGVjay5jIChyYXRpb25hbGl6ZV9jb25kaXRpb25hbF9leHByKTogSGFuZGxlIHtNSU4sTUFYfV9FWFBSLgoJKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogQ2FsbCBpdCBmb3Ige01JTixNQVh9X0VYUFIuCgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCB1c2luZ19laF9mb3JfY2xlYW51cHMuCgoJKiBNYWtlLWxhbmcuaW4gKGcrKyk6IEluY2x1ZGUgcHJlZml4Lm8uCgpUaHUgT2N0IDE2IDE1OjMxOjA5IDE5OTcgIEp1ZHkgR29sZGJlcmcgPGp1ZHlnb2xkQHNhbndhZnAuY29tPgoKCSogcHQuYyAoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSW5pdGlhbGl6ZSAiZHVtbXkiCgl0byBrZWVwIFB1cmlmeSBxdWlldC4KClRodSBPY3QgMTYgMDA6MTQ6NDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSGFuZGxlIFRFTVBMQVRFX0NPTlNUX1BBUk1zIGhlcmUuCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogTm90IGhlcmUuCgpXZWQgT2N0IDE1IDAwOjM1OjI4IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3R5cGVfcGF0aG5hbWUpOiBSZW1vdmUuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBGaXggcHJvYmxlbSB3aXRoIGNvbXBsZXggTUkgdnRhYmxlIG5hbWVzLgoKMTk5Ny0xMC0xNCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcGFyc2UueSAodW5hcnlfZXhwcik6IEdpdmUgYSBwZWR3YXJuIGlmIHNvbWVvbmUgdHJpZXMgdG8gdXNlIHRoZQoJJiZsYWJlbCBHTlUgZXh0ZW5zaW9uLgoKVHVlIE9jdCAxNCAxMjowMTowMCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBVbnNldCBERUNMX0FTU0VNQkxFUl9OQU1FIGJlZm9yZSBzZXR0aW5nIGl0LAoJc28gYXMgdG8gYXZvaWQgaW5jb3JyZWN0IG1hbmdsaW5ncy4KCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IERvbid0IG1hbmdsZSByZXR1cm4gdHlwZXMKCWZvciBjb25zdHJ1Y3RvcnMuCgkKVHVlIE9jdCAxNCAxMTo0NjoxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHNjcmF0Y2hhbGxvYywgYnVpbGRfc2NyYXRjaF9saXN0LCBtYWtlX3NjcmF0Y2hfdmVjLAoJc2NyYXRjaF90cmVlX2NvbnMpOiBEZWZpbmUgYXMgbWFjcm9zIGZvciBub3cuCgkqIGNhbGwuYywgY2xhc3MuYywgY3Z0LmMsIGRlY2wuYywgZGVjbDIuYywgZXhjZXB0LmMsIGV4cHIuYywgaW5pdC5jLCAKCWxleC5jLCBtZXRob2QuYywgcGFyc2UueSwgcHQuYywgcnR0aS5jLCBzZWFyY2guYywgdHJlZS5jLCB0eXBlY2suYywKCXR5cGVjazIuYzogVXNlIHRoZW0gYW5kIHRoZSBleHByZXNzaW9uX29ic3RhY2sgdmFyaWFudHMuCgpNb24gT2N0IDEzIDE3OjQxOjI2IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RvcmVfcmV0dXJuX2luaXQpOiBBbGxvdyBjbGFzc2VzIHdpdGggZXhwbGljaXQgY3RvcnMgdG8KIAliZSB1c2VkIHdpdGggdGhlIG5hbWVkIHJldHVybiB2YWx1ZXMgZXh0ZW5zaW9uLgoKRnJpIE9jdCAxMCAxMjoyMToxMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRml4IHByZXZpb3VzIGNoYW5nZS4KClRodSBPY3QgIDkgMTI6MDg6MjEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRml4IHRoaW5rby4KCShpbnN0YW50aWF0ZV9kZWNsKTogUmVhbGx5IHVzZSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IFVzZSBzaW1wbGUgY29uc3RydWN0b3JfbmFtZSBmb3IKCWVycm9yIG1lc3NhZ2VzLgoKV2VkIE9jdCAgOCAyMjo0NDo0MiAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZXRob2QuYyAoYnVpbGRfdW5kZXJzY29yZV9pbnQpOiBEb24ndCB1c2UgQU5TSSBzcGVjaWZpYwoJZmVhdHVyZXMuCgpXZWQgT2N0ICA4IDAwOjE4OjIyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IENoZWNrIERFQ0xfUkVBTExZX0VYVEVSTgoJZm9yIG91ciBrZXkgbWV0aG9kOyBpdCBtaWdodCBoYXZlIGJlZW4gaW5saW5lZCBieSAtTzMuCgpUdWUgT2N0ICA3IDIzOjAwOjEyIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogRG8gbm90IHRyeSB0byBjYWxsIGxvb2t1cF9maWVsZCBmb3IKCW5vbi1hZ2dyZWdhdGUgdHlwZXMuCgpUdWUgT2N0ICA3IDIyOjUyOjEwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9yZWludGVycHJldF9jYXN0KTogVHdlYWsuCgpUdWUgT2N0ICA3IDIyOjQ1OjMxIDE5OTcgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBjb252ZXJ0aW5nIGEgdm9pZCBwb2ludGVyCgl0byBmdW5jdGlvbiBwb2ludGVyIHdpdGggYSByZWludGVycHJldF9jYXN0IHByb2R1Y2VzIGEgd2FybmluZwoJaWYgLXBlZGFudGljIGlzIGlzc3VlZAoKVHVlIE9jdCAgNyAyMjo0Mzo0MyAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvbid0IHdhcm4gYWJvdXQgcmV0dXJuaW5nIGEKCXJlZmVyZW5jZS10eXBlIHZhcmlhYmxlIGFzIGEgcmVmZXJlbmNlLgoKVHVlIE9jdCAgNyAyMToxMToyMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfc3RhdGljX25hbWUpOiBGaXggdHlwby4KCjE5OTctMTAtMDcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBzdXJlIERFQ0xfTEFOR19TUEVDSUZJQyBpcyBzZXQgb24KCU9MRERFQ0wgYmVmb3JlIHdlIHRyeSB0byBkbyBERUNMX1VTRV9URU1QTEFURS4KClR1ZSBPY3QgIDcgMDA6NDg6MzYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCB3YXJuIGFib3V0IHRlbXBsYXRlIGluc3RhbmNlcy4KCgkqIHR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogTG9zZSBhbmNpZW50IGNvZGUgdGhhdCB1bnNldHMKCURFQ0xfRVhURVJOQUwuCgoJKiBwdC5jIChkb19kZWNsX2luc3RhbnRpYXRpb24pOiBMb3NlIHN1cHBvcnQgZm9yIGluc3RhbnRpYXRpbmcKCW5vbi10ZW1wbGF0ZXMuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogRml4IGhhbmRsaW5nIG9mIG51bGwgZXhwbGljaXQKIAl0ZW1wbGF0ZSBhcmdzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKTW9uIE9jdCAgNiAyMzo0NDozNCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBtZXRob2QuYyAoYnVpbGRfdW5kZXJzY29yZV9pbnQpOiBGaXggdHlwby4KCjE5OTctMTAtMDYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAocHJpbnRfbGFuZ19zdGF0aXN0aWNzKTogI2lmIDAgY2FsbCB0bwoJcHJpbnRfaW5saW5lX29ic3RhY2tfc3RhdGlzdGljcyB1bnRpbCBpdHMgZGVmaW5pdGlvbiBpcyBjaGVja2VkIGluLgoKTW9uIE9jdCAgNiAwOToyNzoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE1vdmUgZHVtcF90cmVlX3N0YXRpc3RpY3MgdG8gZW5kLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IExvb2sgZm9yIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4KCSh0c3Vic3QpOiBTZXQgREVDTF9JTVBMSUNJVF9JTlNUQU5USUFUSU9OIG9uIHBhcnRpYWwgaW5zdGFudGlhdGlvbnMKCW9mIG1lbWJlciB0ZW1wbGF0ZXMuCgpXZWQgT2N0ICAxIDA4OjQxOjM4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChnKytGQVEuKik6IE5ldyBydWxlcy4KCShDT05GTElDVFMpOiBVcGRhdGUuCgkqIGcrK0ZBUS50ZXhpOiBNb3ZlZCBmcm9tIGxpYmcrKy4KCgkqIHBhcnNlLnkgKFBGVU5DTkFNRSk6IE9ubHkgc3BlY2lmeSB0aGUgdHlwZSBvbmNlLgoKMTk5Ny0xMC0wMSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGFzaGVyLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IENsZWFuIHVwIHRoZSBjb2RlIHRvIGZ1bGx5IGJlaGF2ZSB0aGUgd2F5Cgl0aGUgYy1sZXguYyBwYXJzZXIgZG9lcyBmb3IgY29tcGxleCBhbmQgcmVhbCBudW1iZXJzLgoKVHVlIFNlcCAzMCAwODo1MTozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogUmVmb3JtYXQuCgpUdWUgU2VwIDMwIDAwOjE4OjI2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IElmIGF0X2VvZiwgZGV0ZXJtaW5lIG91ciBsaW5rYWdlLgoKMTk5Ny0wOS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IFRyZWF0IGAkJyBqdXN0IGxpa2UgYF8nLCBleGNlcHQgaXNzdWUgYQoJZGlhZ25vc3RpYyBpZiAhZG9sbGFyc19pbl9pZGVudCBvciBpZiBwZWRhbnRpYy4KCgkqIGxhbmctc3BlY3MuaCAoQGMrKyk6IC1hbnNpIG5vIGxvbmdlciBpbXBsaWVzIC0kLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKToKCS10cmFkaXRpb25hbCBhbmQgLWFuc2kgbm93IGRvIG5vdCBtZXNzIHdpdGgKCWRvbGxhcnNfaW5faWRlbnQuCgpNb24gU2VwIDI5IDE5OjU3OjUxIDE5OTcgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCgoJKiBNYWtlZmlsZS5pbiAocGFyc2UubywgZGVjbC5vKTogQWxzbyBkZXBlbmQgb24KCSQoc3JjZGlyKS8uLi9leGNlcHQuaCAkKHNyY2RpcikvLi4vb3V0cHV0LmguCgkoZGVjbDIubyk6IEFsc28gZGVwZW5kIG9uICQoc3JjZGlyKS8uLi9leHByLmggLi4vaW5zbi1jb2Rlcy5oCgkkKHNyY2RpcikvLi4vZXhjZXB0LmggJChzcmNkaXIpLy4uL291dHB1dC5oLgoJKHR5cGVjay5vLCBpbml0Lm8pOiBBbHNvIGRlcGVuZCBvbiAkKHNyY2RpcikvLi4vZXhwci5oCgkuLi9pbnNuLWNvZGVzLmguCgoJKiBjYWxsLmMsIGNwLXRyZWUuaCwgZGVjbC5jLCB0cmVlLmM6IEZpbmlzaCBwcm90b3R5cGluZy4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBNYWtlIGl0IHN0YXRpYy4gCgoJKiBkZWNsMi5jLCBpbml0LmMsIHR5cGVjay5jOiBJbmNsdWRlICJleHByLmgiLgoJKGV4cGFuZF9leHByKTogVXNlIHByb3BlciB2YWx1ZXMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbi4KCk1vbiBTZXAgMjkgMTE6MDU6NTQgMTk5NyAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBsYW5nLW9wdGlvbnMuaDogbmV3IC1Xb2xkLXN0eWxlLWNhc3QgZmxhZy4KCSogY3AtdHJlZS5oICh3YXJuX29sZF9zdHlsZV9jYXN0KTogbmV3IHZhcmlhYmxlLgoJKiBkZWNsMi5jICh3YXJuX29sZF9zdHlsZV9jYXN0KTogZGl0dG8uCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogc3VwcG9ydCAtV29sZC1zdHlsZS1jYXN0LgoJKHJlcGFyc2VfYWJzZGNsX2FzX2Nhc3RzKTogcHJvZHVjZSBvbGQtc3R5bGUtY2FzdCB3YXJuaW5nLgoKTW9uIFNlcCAyOSAwOToyMDo1MyAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogQWxsb3cgZXhwYW5kX2FnZ3JfaW5pdCB0byBzZXQKIAlUUkVFX1VTRUQsIHJlc2V0IHZhbHVlIGJhc2VkIG9uIGFscmVhZHlfdXNlZC4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogUmV2ZXJ0IGNoYW5nZS4KCQpNb24gU2VwIDI5IDA4OjU3OjUzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCwgZGVjbC5jLCBkZWNsMi5jLCBwdC5jOgogCUxvc2UgREVDTF9DX1NUQVRJQyBhbmQgREVDTF9QVUJMSUMuICBEb24ndCBwcmV0ZW5kIHN0YXRpY3MgYXJlIHB1YmxpYy4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZCBtaXNzaW5nIDsuCgpTYXQgU2VwIDI3IDE2OjIyOjQ4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBEaXNhYmxlIGluamVjdGlvbiBmb3IgYWxsIHRlbXBsYXRlLWRlcml2ZWQKIAlkZWNscy4KCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mZ3VpZGluZy1kZWNscy4KCSogcGFyc2UueSAobm90eXBlX3RlbXBsYXRlX2RlY2xhcmF0b3IpOiBOZXcgbm9udGVybWluYWwuCgkoZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yKTogVXNlIGl0LgoJKGNvbXBsZXhfZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkob2JqZWN0X3RlbXBsYXRlX2lkKTogQWNjZXB0IGFueSBraW5kIG9mIGlkZW50aWZpZXIgYWZ0ZXIgVEVNUExBVEUuCgkobm90eXBlX3F1YWxpZmllZF9pZCk6IERvbid0IGFkZCB0ZW1wbGF0ZSBkZWNsYXJhdG9ycyBoZXJlLgoKU2F0IFNlcCAyNyAxNjoyMTo1OCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgogICAgICAgICogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogQWRkIGV4cGxpY2l0X3RhcmdzIHBhcmFtZXRlci4KICAgICAgICAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVXNlIGl0LgogICAgICAgIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBMaWtld2lzZS4KICAgICAgICAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KICAgICAgICAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCiAgICAgICAgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCiAgICAgICAgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKICAgICAgICAqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IEFkZCBzcGVjaWFsaXphdGlvbiBwYXNzIHRvCiAgICAgICAgZGV0ZXJtaW5lIHdoaWNoIG1ldGhvZHMgd2VyZSBzcGVjaWFsaXppbmcgd2hpY2ggb3RoZXIgbWV0aG9kcy4KICAgICAgICAoaW5zdGFudGlhdGVfdHlwZSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoKICAgICAgICAqIGNwLXRyZWUuZGVmIChURU1QTEFURV9JRF9FWFBSKTogTmV3IHRyZWUgY29kZS4KCiAgICAgICAgKiBjcC10cmVlLmggKG5hbWVfbWFuZ2xpbmdfdmVyc2lvbik6IE5ldyB2YXJpYWJsZS4KCShmbGFnX2d1aWRpbmdfZGVjbHMpOiBMaWtld2lzZS4KICAgICAgICAoYnVpbGRfdGVtcGxhdGVfZGVjbF9vdmVybG9hZCk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAoYmVnaW5fc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KICAgICAgICAocmVzZXRfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KICAgICAgICAoZW5kX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCiAgICAgICAgKGRldGVybWluZV9leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgogICAgICAgIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgogICAgICAgIChsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24pOiBMaWtld2lzZS4KICAgICAgICAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkZCBleHBsaWNpdF90YXJncyBwYXJhbWV0ZXIuCiAgICAgICAgKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCiAgICAgICAgKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEFkZCBzbWFydHMgZm9yIGV4cGxpY2l0CiAgICAgICAgc3BlY2lhbGl6YXRpb25zLgogICAgICAgIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLCBhbmQgZnVuY3Rpb24KICAgICAgICBzcGVjaWFsaXphdGlvbnMuCiAgICAgICAgKGdyb2tmbmRlY2wpOiBDYWxsIGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLgoKICAgICAgICAqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZm5hbWUtbWFuZ2xpbmctdmVyc2lvbi4KICAgICAgICAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KICAgICAgICAoY2hlY2tfY2xhc3Nmbik6IEhhbmRsZSBzcGVjaWFsaXphdGlvbnMuCgogICAgICAgICogZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9uYW1lKTogUHJpbnQgc3BlY2lhbGl6YXRpb24gYXJndW1lbnRzLgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IERvbid0IGNhbGwgcHVzaGRlY2wgZm9yIHRlbXBsYXRlIAogICAgICAgIGluc3RhbnRpYXRpb25zLiAKCiAgICAgICAgKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCgogICAgICAgICogbGFuZy1vcHRpb25zLmg6IEFkZCAtZm5hbWUtbWFuZ2xpbmctdmVyc2lvbiwgLWZndWlkaW5nLWRlY2xzLCAKCWFuZCAtZm5vLWd1aWRpbmctZGVjbHMuCgogICAgICAgICogbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IFJldHVybiBQRlVOQ05BTUUgZm9yIHRlbXBsYXRlIGZ1bmN0aW9uCiAgICAgICAgbmFtZXMuCgogICAgICAgICogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IFVzZSBpdC4KICAgICAgICAoYnVpbGRfdW5kZXJzY29yZV9pbnQpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgKGJ1aWxkX292ZXJsb2FkX2ludCk6IFVzZSBpdC4gIEFkZCBsZXZlbHMgZm9yIHRlbXBsYXRlCiAgICAgICAgcGFyYW1ldGVycy4KICAgICAgICAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IExpa2V3aXNlLiAgQWxzbywgaGFuZGxlIFRZUEVOQU1FX1RZUEVzLgogICAgICAgIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZXMpOiBIYW5kbGUgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXJzLgogICAgICAgIChidWlsZF90ZW1wbGF0ZV9kZWNsX292ZXJsb2FkKTogTmV3IGZ1bmN0aW9uLgoKICAgICAgICAqIHBhcnNlLnkgKFlZU1RZUEUpOiBOZXcgbnR5cGUgbWVtYmVyLgogICAgICAgIChuZXN0ZWRfbmFtZV9zcGVjaWZpZXIpOiBVc2UgaXQuCiAgICAgICAgKG5lc3RlZF9uYW1lX3NwZWNpZmllcl8xKTogTGlrZXdpc2UuCiAgICAgICAgKFBGVU5DTkFNRSk6IE5ldyB0b2tlbi4KICAgICAgICAodGVtcGxhdGVfaWQsIG9iamVjdF90ZW1wbGF0ZV9pZCk6IE5ldyBub24tdGVybWluYWxzLgogICAgICAgICh0ZW1wbGF0ZV9wYXJtX2xpc3QpOiBOb3RlIHNwZWNpYWxpemF0aW9ucy4KICAgICAgICAodGVtcGxhdGVfZGVmKTogTGlrZXdpc2UuCiAgICAgICAgKHN0cnVjdHNwKTogTGlrZXdpc2UuCiAgICAgICAgKGZuLmRlZjIpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucy4KICAgICAgICAoY29tcG9uZW50X2RlY2xfMSk6IExpa2V3aXNlLgogICAgICAgIChkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBIYW5kbGUgdGVtcGxhdGUtaWRzLgogICAgICAgIChjb21wb25lbnRfZGVjbF8xKTogTGlrZXdpc2UuCiAgICAgICAgKGRpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IEhhbmRsZSB0ZW1wbGF0ZS1pZHMuCiAgICAgICAgKHByaW1hcnkpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUiwgYW5kIHRlbXBsYXRlLWlkcy4KCiAgICAgICAgKiBwdC5jIChwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9ucyk6IE5ldyB2YXJpYWJsZS4KICAgICAgICAodGVtcGxhdGVfaGVhZGVyX2NvdW50KTogTGlrZXdpc2UuCiAgICAgICAgKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAocHJvY2Vzc2luZ19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgogICAgICAgIChub3RlX3RlbXBsYXRlX2hlYWRlcik6IExpa2V3aXNlLgogICAgICAgIChpc19tZW1iZXJfdGVtcGxhdGUpOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zLgogICAgICAgIChlbmRfdGVtcGxhdGVfZGVjbCk6IENhbGwgcmVzZXRfc3BlY2lhbGl6YXRpb24uCiAgICAgICAgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLgogICAgICAgICh0c3Vic3QpOiBMaWtld2lzZS4KICAgICAgICAodHN1YnN0X2NvcHkpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KICAgICAgICAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zLgogICAgICAgIChpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UuCiAgICAgICAgKGZuX3R5cGVfdW5pZmljYXRpb24pOiBIYW5kbGUgZXhwbGljaXRfdGFyZ3MuCiAgICAgICAgKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4gIEFsbG93IGluY29tcGxldGUgdW5pZmljYXRpb24KICAgICAgICB3aXRob3V0IGFuIGVycm9yIG1lc3NhZ2UsIGlmIGFsbG93X2luY29tcGxldGUuCiAgICAgICAgKGdldF9iaW5kaW5ncyk6IFVzZSBuZXcgY2FsbGluZyBzZXF1ZW5jZSBmb3IgZm5fdHlwZV91bmlmaWNhdGlvbi4KCiAgICAgICAgKiBzcGV3LmMgKHl5bGV4KTogSGFuZGxlIFBGVU5DTkFNRS4KCiAgICAgICAgKiB0cmVlLmMgKGlzX292ZXJsb2FkZWRfZm4pOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KICAgICAgICAocmVhbGx5X292ZXJsb2FkZWRfZm4pOiBMaWtld2lzZS4KICAgICAgICAoZ2V0X2ZpcnN0X2ZuKTogSGFuZGxlIGZ1bmN0aW9uIHRlbXBsYXRlcy4KCiAgICAgICAgKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVXNlIHJlYWxseV9vdmVybG9hZGVkX2ZuLgogICAgICAgIEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgogICAgICAgIChidWlsZF94X3VuYXJ5X29wKTogTGlrZXdpc2UuCiAgICAgICAgKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCiAgICAgICAgKG1hcmtfYWRkcmVzc2FibGUpOiBUZW1wbGF0ZXMgd2hvc2UgYWRkcmVzcyBpcyB0YWtlbiBhcmUgbWFya2VkICAKICAgICAgICBhcyB1c2VkLiAKCjE5OTctMDktMjUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgX19idWlsdGluX2NvbnN0YW50X3AgYXMKCWFjY2VwdGluZyBhbnkga2luZCBvZiB0eXBlLCBub3Qgb25seSBpbnQuCgpGcmkgU2VwIDI2IDAwOjIyOjU2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IE5vdGljZSB2aXJ0dWFsIGJhc2VzIHdoZW4gc29ycnlpbmcKCWFib3V0IGNvdmFyaWFudCByZXR1cm5zLgoKCSogcGFyc2UueSAobWVtYmVyX2luaXQpOiBBbHNvIGltcGx5IHR5cGVuYW1lIGhlcmUuICBSZW1vdmUgYW5jaWVudAoJZXh0ZW5zaW9uIGZvciBpbml0aWFsaXppbmcgYmFzZSBtZW1iZXJzLgoKVGh1IFNlcCAyNSAxMToxMToxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJSGFuZGxlIG11bHRpLWxldmVsIHR5cGVuYW1lcyBhbmQgaW1wbGljaXQgdHlwZW5hbWUgaW4gYmFzZSBsaXN0LgoJKiBwYXJzZS55ICh0eXBlbmFtZV9zdWJ7LFswLTJdfSk6IE5ldyBydWxlcy4KCShzdHJ1Y3RzcCwgcnVsZSBUWVBFTkFNRV9LRVlXT1JEKTogVXNlIHR5cGVuYW1lX3N1Yi4KCShub25uZXN0ZWRfdHlwZSk6IE5ldyBydWxlLgoJKGNvbXBsZXRlX3R5cGVfbmFtZSk6IFVzZSBpdC4KCShiYXNlX2NsYXNzLjEpOiBVc2UgdHlwZW5hbWVfc3ViIGFuZCBub25uZXN0ZWRfdHlwZS4KCShuZXN0ZWRfbmFtZV9zcGVjaWZpZXIpOiBEb24ndCBlbGlkZSBzdGQ6OiBoZXJlLgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSBnZXR0aW5nIGEgdHlwZSBmb3IgTkFNRS4KCShsb29rdXBfbmFtZV9yZWFsKTogVHVybiBzdGQ6OiBpbnRvIDo6IGhlcmUuCgoJUnZhbHVlIGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBpbiBMb25kb24uCgkqIGNhbGwuYyAoaXNfc3Vic2VxKTogRG9uJ3QgY29uc2lkZXIgbHZhbHVlIHRyYW5zZm9ybWF0aW9ucy4KCShidWlsZF9jb252KTogTFZBTFVFX0NPTlYgYW5kIFJWQUxVRV9DT05WIGdldCBJREVOVElUWV9SQU5LLgoJKGpvdXN0KTogUmVlbmFibGUgPzoga2x1ZGdlLgoKMTk5Ny0wOS0yMiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFVwIHdhcm5pbmcgb2Ygbm8gcmV0dXJuIHR5cGUgdG8gYmUgYQoJcGVkd2Fybi4KCk1vbiBTZXAgMjIgMTQ6MTU6MzQgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBEb24ndCBzZXQgVFJFRV9VU0VELgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogTWFyayBkZWNscyB1c2VkIGlmIHR5cGUgaGFzIFRSRUVfVVNFRAoJc2V0LGRvbid0IGNsZWFyIFRSRUVfVVNFRCB3aG9sZXNhbGUuCgpTYXQgU2VwIDIwIDE1OjMxOjAwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRG8gcmVxdWlyZV9jb21wbGV0ZV90eXBlIGJlZm9yZQoJYnVpbGRfY3BsdXNfbmV3LgoKVGh1IFNlcCAxOCAxNjo0Nzo1MiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogQ2FsbCBjb21wbGV0ZV90eXBlIGluIGFsbCBjYXNlcy4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogSnVzdCB3YXJuIGFib3V0IGZsb3dpbmcgb2ZmIHRoZSBlbmQuCgpXZWQgU2VwIDE3IDEwOjMxOjI1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogRG9uJ3QgYmFzaCBhIHBlcm1hbmVudCBsaXN0IG5vZGUgaWYgd2UncmUKCWluIGEgZnVuY3Rpb24uCgoxOTk3LTA5LTE3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogRml4IHMvciBjb25mbGljdCBjb3VudCB0byAxOC4KClR1ZSBTZXAgMTYgMTQ6MDY6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBHaXZlIGJldHRlciBlcnJvciBmb3Igc3ludGFjdGljYWxseQogCWNvcnJlY3QsIGJ1dCBzZW1hbnRpY2FsbHkgaW52YWxpZCwgdXNlIG9mIHVuZGVjbGFyZWQgdGVtcGxhdGUuCgoJKiBjYWxsLmMgKGNvbXBhcmVfcXVhbCk6IEhhbmRsZSBwbWZzLgoKCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogbGFzdF9wYXJtX2NsZWFudXBfaW5zbiBpcyB0aGUgaW5zbgogCWFmdGVyIHRoZSBleGNlcHRpb24gc3BlYy4KCk1vbiBTZXAgMTUgMTE6NTI6MTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChudWxsX3B0cl9jc3RfcCk6IEludGVnZXIgdHlwZSwgbm90IGludGVncmFsIHR5cGUuCgoJKiBjYWxsLmMgKGpvdXN0KTogRGlzYWJsZSB3YXJuaW5ncyB1bnRpbCB0aGV5IGNhbiBiZSBtb3ZlZCB0byB0aGUKCXJpZ2h0IHBsYWNlLgoKRnJpIFNlcCAxMiAxNjoxMToxMyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluLCBjb25maWctbGFuZy5pbjogIENvbnZlcnQgdG8gYXV0b2NvbmYuCgpUaHUgU2VwIDExIDE3OjE0OjU1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFkZCBpbXBsaWNpdCAndHlwZW5hbWUnIHRvIHR5cGVzIGZyb20KCWJhc2UgY2xhc3Nlcy4KCgkqIHB0LmMgKG1vc3Rfc3BlY2lhbGl6ZWRfY2xhc3MpOiBGaXggdHlwby4KCSh0c3Vic3QpOiBNb3ZlIGNvbnN0YW50IGZvbGRpbmcgdG8gVFJFRV9WRUMgY2FzZS4KClRodSBTZXAgMTEgMTA6MDg6NDUgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoZG9fcG9wbGV2ZWwpOiBEb24ndCB3YXJuIGFib3V0IHVudXNlZCBsb2NhbCB2YXJpYWJsZXMKCXdoaWxlIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCBzaW5jZSB3ZSBkb24ndCBhbHdheXMga25vdyB3aGV0aGVyCglvciBub3QgdGhleSB3aWxsIG5lZWQgY29uc3RydWN0aW5nL2Rlc3RydWN0aW5nLgoKCSogcHQuYyAodXNlc190ZW1wbGF0ZV9wYXJtcyk6IENoZWNrIHRoZSB2YWx1ZXMgb2YgYW4gZW51bWVyYXRpb24KCXR5cGUgdG8gbWFrZSBzdXJlIHRoZXkgZG9uJ3QgZGVwZW5kIG9uIHRlbXBsYXRlIHBhcm1zLgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBEb24ndCBsb29rdXAgdGhlIGZpZWxkIGlmIHRoZQoJY29udGV4dCB1c2VzIHRlbXBsYXRlIHBhcm1zLCBldmVuIGlmIHdlJ3JlIG5vdAoJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGF0IHRoZSBtb21lbnQuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBdm9pZCBsb29raW5nIGF0IHRoZQoJVFlQRV9MQU5HX0RFQ0wgcG9ydGlvbiBvZiBhIHR5cGVuYW1lIHR5cGUsIHNpbmNlIHRoZXJlIHdvbid0IGJlCglvbmUuIAoJKHRzdWJzdCk6IERvIGNvbnN0YW50IGZvbGRpbmcgYXMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSB0aGF0Cglhcmd1bWVudHMgcGFzc2VkIHRvIGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyByZWFsbHkgYXJlIGNvbnN0YW50cy4gCgpXZWQgU2VwIDEwIDExOjIxOjU1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6ICNpZm5kZWYgRFdBUkYyX1VOV0lORF9JTkZPLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE9ubHkgcmVnaXN0ZXIgZXhjZXB0aW9uIHRhYmxlcyBpZiB3ZQoJbmVlZCB0by4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgX19idWlsdGluX1tmc11wLgoKVHVlIFNlcCAgOSAxOTo0OTozOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh1bmlmeSk6IEp1c3QgcmV0dXJuIDAgZm9yIGEgVFlQRU5BTUVfVFlQRS4KClR1ZSBTZXAgIDkgMTc6NTc6MjUgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogQXZvaWQgY3Jhc2hpbmcgd2hlbiBwcmVzZW50ZWQgd2l0aCBhCiAJdW5pbml0aWFsaXplZCBjb25zdGFudCwgYXMgY2FuIG9jY3VyIHdpdGggYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuCgkoZHVtcF9leHByKTogTWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGVub3VnaCBsZXZlbHMgb2YKIAljdXJyZW50X3RlbXBsYXRlX3Bhcm1zIGJlZm9yZSB3ZSBzdGFydCBkaXZpbmcgdGhyb3VnaCB0aGVtLgoKMTk5Ny0wOS0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IEhlZWQgRkxBR19WT0xBVElMRSBzaW1pbGFyIHRvCgljLXR5cGVjay5jLgoKVHVlIFNlcCAgOSAwOTozNjozOSAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQ2FsbCBidWlsZF9kZWxldGUgZm9yIGFsbCAKCWV4Y2VwdGlvbiB0eXBlcywgbm90IGp1c3Qgb2JqZWN0cyB3aXRoIGRlc3RydWN0b3JzLgoKTW9uIFNlcCAgOCAwMjozMzoyMCAxOTk3ICBKb2R5IEdvbGRiZXJnICA8am9keWdAaWR0Lm5ldD4KCgkqIGRlY2wuYyAoY3VycmVudF9sb2NhbF9lbnVtKTogUmVtb3ZlIHN0YXRpYy4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBTYXZlIGFuZCByZXN0b3JlIHZhbHVlIG9mIGN1cnJlbnRfbG9jYWxfZW51bQoJaW4gY2FzZSB0ZW1wbGF0ZSBpcyBleHBhbmRlZCBpbiBlbnVtIGRlY2wuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpIDogVXNlIG5ldyB0c3Vic3RfZW51bSBzaWduYXR1cmUuCgkodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCk1vbiBTZXAgIDggMDE6MjE6NDMgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBUYWtlIGEgZnVuY3Rpb24gYXMKCWFyZ3VtZW50LCBub3QgYSBzZXQgb2YgdGVtcGxhdGUgYXJndW1lbnRzLiAgVXNlIHRoZSB0ZW1wbGF0ZQoJcGFyYW1ldGVycywgcmF0aGVyIHRoYW4gdGhlIGFyZ3VtZW50cy4gIEhhbmRsZSBub24tdHlwZSBwYXJhbWV0ZXJzCgljb3JyZWN0bHkuICBQdXNoIGEgYmluZGluZyBsZXZlbCBmb3IgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCBtdWx0aXBsZQoJbWVtYmVyIHRlbXBsYXRlcyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXIgbmFtZXMgY2FuIGJlIGRlY2xhcmVkLgoJKGVuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFBvcCB0aGUgYmluZGluZyBsZXZlbC4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBNYXJrIG1lbWJlciB0ZW1wbGF0ZXMgYXMgc3RhdGljIHdoZW4KCWFwcHJvcHJpYXRlLiAKCgkqIGxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBQYXNzIHRoZSBmdW5jdGlvbiwgbm90IGl0cyB0ZW1wbGF0ZQoJYXJndW1lbnRzLCB0byBiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZy4KCShwcm9jZXNzX25leHRfaW5saW5lKTogTGlrZXdpc2UuCgkoZG9fcGVuZGluZ19kZWZhcmdzKTogTGlrZXdpc2UuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBPYnRhaW4gdGhlIGNvcnJlY3QgZGVjbGFyYXRpb24gZm9yIGEKCVRFTVBMQVRFX0NPTlNUX1BBUk0uIAoKCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY29udl9jYW5kaWRhdGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlcywgYXMgZG9uZSBpbiB0aGUgb3RoZXIKCWJ1aWxkXyBmdW5jdGlvbnMuCgkKU2F0IFNlcCAgNiAxMDoyMDoyNyAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHJlcGxhY2VfZGVmYWcpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KCSogbGV4LmMgKGRvX3BlbmRpbmdfZGVmYXJncyk6IERlYWwgd2l0aCBtZW1iZXIgdGVtcGxhdGVzLgoJCgkqIHB0LmMgKGlzX21lbWJlcl90ZW1wbGF0ZSk6IEF2b2lkIGNyYXNoaW5nIHdoZW4gcGFzc2VkIGEKCW5vbi1mdW5jdGlvbiBhcmd1bWVudC4KCkZyaSBTZXAgIDUgMTc6Mjc6MzggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZ3Jvd19tZXRob2QpOiBSZW1vdmUgY2hlY2sgZm9yIHJlZGVjbGFyYXRpb24uCgpGcmkgU2VwICA1IDAxOjM3OjE3IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwLXRyZWUuaCAoSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TKTogTmV3IG1hY3JvLgoJKERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TKTogTGlrZXdpc2UuCgkoUFJJTUFSWV9URU1QTEFURV9QKTogVXNlIGl0LgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IFVzZSBpdC4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCQoJKiBjcC10cmVlLmggKERFQ0xfTlRQQVJNUyk6IENoYW5nZSBuYW1lIGZyb20gREVDTF9OVF9QQVJNUyB0bwoJREVDTF9OVFBBUk1TIHRvIGNvbmZvcm0gdG8gdXNhZ2UgZWxzZXdoZXJlLgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IExpa2V3aXNlLgoJKiBwdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKGdldF9iaW5kaW5ncyk6IExpa2V3aXNlLgoJCgkqIGNsYXNzLmMgKGdyb3dfbWV0aG9kKTogVXNlIERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUCBpbnN0ZWFkIG9mCglpc19tZW1iZXJfdGVtcGxhdGUuCgoJKiBwdC5jICh1bmlmeSk6IFVuZG8gY2hhbmdlcyB0byBhbGxvdyBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUKCXBhcmFtZXRlcnMuIAoJKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoTGlrZXdpc2UpLgoJCgkqIGRlY2wuYyAocmVwbGFjZV9kZWZhcmcpOiBDaGVjayB0aGF0IHRoZSB0eXBlIG9mIHRoZSBkZWZhdWx0CglwYXJhbWV0ZXIgZG9lcyBub3QgaW52bG92ZSBhIHRlbXBsYXRlIHR5cGUgYmVmb3JlIGNvbXBsYWluaW5nCglhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24uCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBEZWFsIHdpdGggdGVtcGxhdGUgY29uc3RhbnQgcGFyYW1ldGVycyBpbgoJbWVtYmVyIHRlbXBsYXRlcyBjb3JyZWN0bHkuCgoJKiBwdC5jIChpc19tZW1iZXJfdGVtcGxhdGUpOiBEZWFsIHdpdGggY2xhc3Mgc3BlY2lhbGl6YXRpb25zCgljb3JyZWN0bHkuIAoJKHRzdWJzdCk6IEhhbmRsZSAicGFydGlhbCBpbnN0YW50aWF0aW9uIiBvZiBtZW1iZXIgdGVtcGxhdGVzCgljb3JyZWN0bHkuIAoKV2VkIFNlcCAgMyAxMjozMDoyNCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogQ2hhbmdlIGNhbGxpbmcgc3F1ZW5jZSB0byBhbGxvdyBmb3IKCW11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKHRzdWJzdF9leHByKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFVzZSBpdC4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBVc2UgaXQuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogVXNlIGl0LgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IFVzZSBpdC4KCQoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiAgQWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGZvcgoJdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlLiAgQ2FsbCBmbl90eXBlX3VuaWZpY2F0aW9uIGlzdGVhZCBvZgoJdHlwZV91bmlmaWNhdGlvbi4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZXMuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCQoJKiBjbGFzcy5jIChncm93X21ldGhvZCk6IERvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpbmRpY2F0aW5nCiAJdGhhdCB0d28gbWVtYmVyIHRlbXBsYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGFtYmlndW91cy4KCShmaW5pc2hfc3RydWN0KTogVHJlYXQgbWVtYmVyIHRlbXBsYXRlIGZ1bmN0aW9ucyBqdXN0IGxpa2UgbWVtYmVyCiAJZnVuY3Rpb25zLgoJCgkqIGNwLXRyZWUuaCAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogQWRkIGRlY2xhcmF0aW9uLgoJKGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGlzX21lbWJlcl90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKHRzdWJzdCk6IENoYW5nZSBwcm90b3R5cGUuCgkodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCSh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoZ2V0X2JpbmRpbmdzKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogSGFuZGxlIG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZQoJcGFyYW1ldGVycy4gCgkocHVzaGRlY2wpOiBIYW5kbGUgdGVtcGxhdGUgdHlwZSBwYXJhbXMganVzdCBsaWtlIG90aGVyIHR5cGUKCWRlY2xhcmF0aW9ucy4gCgkocHVzaF9jbGFzc19sZXZlbF9iaW5kaW5nKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZQoJY2xhc3NfYmluZGluZ19sZXZlbCBpcyBOVUxMLgoJKGdyb2tmbmRlY2wpOiBJZiBjaGVja19jbGFzc2ZuKCkgcmV0dXJucyBhIG1lbWJlcl90ZW1wbGF0ZSwgdXNlCgl0aGUgcmVzdWx0IG9mIHRoZSB0ZW1wbGF0ZSwgbm90IHRoZSB0ZW1wbGF0ZSBpdHNlbGYuCgkKCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLiAgQ2hlY2sgdG8gc2VlCgl0aGF0IHRoZSBlbnRpdHkgZGVjbGFyZWQgdG8gYmUgYSBtZW1iZXIgdGVtcGxhdGUgY2FuIGJlIG9uZS4KCShjaGVja19jbGFzc2ZuKTogQWxsb3cgcmVkZWNsYXJhdGlvbiBvZiBtZW1iZXIgdGVtcGxhdGUgZnVuY3Rpb25zCgl3aXRoIGRpZmZlcmVudCB0eXBlczsgdGhlIG5ldyBmdW5jdGlvbnMgY2FuIGJlIHNwZWNpYWxpemF0aW9ucyBvcgoJZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuCgkKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogSGFuZGxlIG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZQoJcGFyYW1ldGVycy4gCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogVXBkYXRlIHRvIGhhbmRsZSBmdW5jdGlvbgl0ZW1wbGF0ZXMuCgoJKiBsZXguYyAoZG9fcGVuZGluZ19pbmxpbmVzKTogU2V0IHVwIHRlbXBsYXRlIHBhcmFtZXRlciBjb250ZXh0Cglmb3IgbWVtYmVyIHRlbXBsYXRlcy4KCShwcm9jZXNzX25leHRfaW5saW5lKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuIChidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogQWRqdXN0IGZvciBtdWx0aXBsZSBsZXZlbHMKCW9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkKCSogcGFyc2UueSAoZm4uZGVmMik6IEFkZCBtZW1iZXIgdGVtcGxhdGVzLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KCgkqIHB0LmMgKGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTmV3IGZ1bmN0aW9uLgoJKGVuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGlzX21lbWJlcl90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCShjdXJyZW50X3RlbXBsYXRlX3Bhcm1zKTogUmV0dXJuIGEgdmVjdG9yIG9mIGFsbCB0aGUgdGVtcGxhdGUKCXBhcm1zLCBub3QganVzdCB0aGUgaW5uZXJtb3N0IGxldmVsIG9mIHBhcm1zLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IERlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgbWVtYmVyCgl0ZW1wbGF0ZXMuIAoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBNb2RpZnkgcHJvY2Vzc2luZyB0byBURU1QTEFURV9UWVBFX1BBUk0gYW5kCglURU1QTEFURV9DT05TVF9QQVJNIHRvIGRlYWwgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUKCWFyZ3VtZW50cy4gICBBZGQgcHJvY2Vzc2luZyBvZiBURU1QTEFURV9ERUNMIHRvIHByb2R1Y2UgbmV3CglURU1QTEFURV9ERUNMcyBmcm9tIG9sZCBvbmVzLgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGVzLgoKCSogc2VhcmNoLmMgKGxvb2t1cF9mbmZpZWxkc18xKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZSBjb252ZXJzaW9uCglvcGVyYXRvcnMuIAoKCSogdHJlZS5jIChjcF90cmVlX2VxdWFsKTogQ2hlY2sgdGhlIGxldmVscywgYXMgd2VsbCBhcyB0aGUKCWluZGljZXMsIG9mIFRFTVBMQVRFX0NPTlNUX1BBUk1zLgoKCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IENoZWNrIHRoZSBsZXZlbHMsIGFzIHdlbGwgYXMgdGhlIGluZGljZXMsCglmbyBURU1QTEFURV9UWVBFX1BBUk1zLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFRyZWF0IG1lbWJlciB0ZW1wbGF0ZXMgbGlrZSBtZW1iZXIKCWZ1bmN0aW9ucy4gCgkKV2VkIFNlcCAgMyAxMTowOToyNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQWx3YXlzIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uCiAJYmVmb3JlIGNoZWNraW5nIGZvciByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGxvY2FsLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IElmIHN0cmljdCBhbmQgdGhlIGZ1bmN0aW9uIHBhcm0gZG9lc24ndAoJdXNlIHRlbXBsYXRlIHBhcm1zLCBqdXN0IGNvbXBhcmUgdHlwZXMuCgpXZWQgU2VwICAzIDEwOjM1OjQ5IDE5OTcgIEtsYXVzIEVzcGVubGF1YiAgPGtlc3BlbmxhQHN0dWRlbnQuaW5mb3JtYXRpay51bmktdWxtLmRlPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkZWRfdmFsdWUpOiBSZXBsYWNlIGRpcmVjdCBjYWxsCgl0byB0aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3Igd2l0aCBSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwgbWFjcm8uCgpXZWQgU2VwICAzIDAwOjAyOjUzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QKIAlvZiBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucy4KClR1ZSBTZXAgIDIgMTI6MDk6MTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBEb24ndCBlbGlkZSBfX0ZVTkNUSU9OX18uCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBBZGQgaW5fdGVtcGxhdGUgcGFybS4KCShidWlsZF9vdmVybG9hZF9pbnQpOiBMaWtld2lzZS4KCShidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogUGFzcyBpdC4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgYmFzaCBhIHByZXZpb3VzIHRlbXBsYXRlCiAJZGVmaW5pdGlvbiB3aXRoIGEgcmVkZWNsYXJhdGlvbi4KCgkqIHB0LmMgKHVuaWZ5KTogZmxvYXQgZG9lc24ndCBtYXRjaCBkb3VibGUuCgoJKiBwdC5jIChkb190eXBlX2luc3RhbnRpYXRpb24pOiBIYW5kbGUgZ2V0dGluZyBhIF9UWVBFIG9yIGEKIAlUWVBFX0RFQ0wuICBIYW5kbGUgZ2V0dGluZyBub24tdGVtcGxhdGUgdHlwZXMuCgkqIHBhcnNlLnkgKGV4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBVc2UgdHlwZXNwZWMgaW5zdGVhZCBvZgoJYWdnciB0ZW1wbGF0ZV90eXBlLgoKVHVlIFNlcCAgMiAxMDoyNzowOCAxOTk3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMxKTogQ2xlYW4gdXAgcHRyLT5pbnQgY2FzdCB3YXJuaW5ncy4KCk1vbiBTZXAgIDEgMTM6MTk6MDQgMTk5NyAgRXVnZW5lIE1hbWNoaXRzIDxldWdpbkBpcHMucmFzLnJ1PgoKCSogY2FsbC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBBZGQgbWlzc2luZyBUUkVFX1RZUEUuCgkoY29tcGFyZV9pY3MpOiBMaWtld2lzZS4KCk1vbiBTZXAgIDEgMTM6MTk6MDQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChqb3VzdCk6IFdhcm4gYWJvdXQgY2hvb3Npbmcgb25lIGNvbnZlcnNpb24gb3Agb3ZlcgogCWFub3RoZXIgYmVjYXVzZSBvZiAndGhpcycgYXJndW1lbnQgd2hlbiB0aGUgb3RoZXIgcmV0dXJuIHR5cGUgaXMKIAliZXR0ZXIuCgkoc291cmNlX3R5cGUpOiBOZXcgZm4uCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IFN0cmlwIGxlYWRpbmcgUkVGX0JJTkQgZnJvbSBmaXJzdCBvcGVyYW5kCgl0byBidWlsdGluIG9wZXJhdG9yLgoKCSogZGVjbDIuYyAobWFya192dGFibGVfZW50cmllcyk6IE1hcmsgYWJvcnRfZm5kZWNsIGFzIHVzZWQgd2hlbiB3ZQoJdXNlIGl0cyBSVEwuCgpUaHUgQXVnIDI4IDA5OjQ1OjIzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAobnVsbF9wdHJfY3N0X3ApOiBSZW1vdmUgc3VwcG9ydCBmb3IgKHZvaWQqKTAuCgpXZWQgQXVnIDI3IDAyOjAzOjM0IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHR5cGVjay5jIChleHBhbmRfdGFyZ2V0X2V4cHIpOiBNYWtlIGRlZmluaXRpb24gbWF0Y2ggZGVjbGFyYXRpb24uCgoJKiBjbGFzcy5jIChnZXRfYmFzZWZuZGVjbHMpOiBNYWtlIGRlZmluaXRpb24gbWF0Y2ggZGVjbGFyYXRpb24uCgpNb24gQXVnIDI1IDE0OjMwOjAyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGlucHV0LmMgKHN1Yl9nZXRjaCk6IEV2ZW50dWFsbHkgZ2l2ZSB1cCBhbmQgcmVsZWFzZSB0aGUgaW5wdXQgZmlsZS4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBJZiAjcCBpL2ksIHB1dCBpbmxpbmUgc3RhdGljcyBpbiB0aGUKCXJpZ2h0IHBsYWNlLgoKCSogY2FsbC5jIChqb3VzdCk6IFR3ZWFrIG1lc3NhZ2UuCgpTYXQgQXVnIDIzIDE4OjAyOjU5IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGVycm9yLmMgKHR5cGVfYXNfc3RyaW5nKTogUHV0IGNvbnN0L3ZvbGF0aWxlIG9uIHRlbXBsYXRlIHR5cGUKCXBhcmFtZXRlcnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpTYXQgQXVnIDIzIDE3OjQ3OjIyIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGwuYyAoc3RyaWN0bHlfYmV0dGVyKTogTWFrZSBhcmd1bWVudHMgdW5zaWduZWQgaW50cy4KClRodSBBdWcgMjEgMTg6NDg6NDQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBSZWZlciB0byBfX2NvbXBsZXggaW5zdGVhZCBvZiBjb21wbGV4LgoKVGh1IEF1ZyAyMSAyMjoyNTo0NiAxOTk3ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IERvbid0IHVzZSBnZXRjIGRpcmVjdGx5LgoKV2VkIEF1ZyAyMCAxNzoyNTowOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGlzX3N1YnNlcSk6IERvbid0IHRyeSB0byBiZSBjbGV2ZXIuCgpXZWQgQXVnIDIwIDAzOjEzOjM2IDE5OTcgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCgoJKiBwYXJzZS55LCBwdC5jOiBJbmNsdWRlICJleGNlcHQuaCIuCgkqIGNhbGwuYywgY2xhc3MuYywgY2xhc3MuaCwgY3AtdHJlZS5oLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLAogCWVycm9yLmMsIGV4Y2VwdC5jLCBleHByLmMsIGZyaWVuZC5jLCBnKytzcGVjLmMsIGluaXQuYywgaW5wdXQuYywKIAlsZXguYywgbGV4LmgsIG1ldGhvZC5jLCBwYXJzZS55LCBwdC5jLCByZXBvLmMsIHJ0dGkuYywgc2VhcmNoLmMsCiAJc2lnLmMsIHNwZXcuYywgdHJlZS5jLCB0eXBlY2suYywgdHlwZWNrMi5jLCB4cmVmLmM6IEZpbmlzaAogCXByb3RvdHlwaW5nLgoKV2VkIEF1ZyAyMCAwMTozNDo0MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogSW5zdGVhZCBvZiByZXBsYWNpbmcgcHVyZQoJdmlydHVhbHMgd2l0aCBhIHJlZmVyZW5jZSB0byBfX3B1cmVfdmlydHVhbCwgY29weSB0aGUgZGVjbCBhbmQKCWNoYW5nZSB0aGUgUlRMLgoKVHVlIEF1ZyAxOSAwMjoyNjowNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChsb29rdXBfbmVzdGVkX3R5cGVfYnlfbmFtZSk6IEhhbmRsZSB0eXBlZGVmIHdpZXJkbmVzcy4KCgkqIHR5cGVjazIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBSZXBvcnQgYnVncyB0byBlZ2NzLWJ1Z3NAY3lnbnVzLmNvbS4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCByZXBvX3RlbXBsYXRlX3VzZWQKCWJlZm9yZSBmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wuCgoJKiBjYWxsLmMgKGlzX3N1YnNlcSk6IE5ldyBmbi4KCShjb21wYXJlX2ljcyk6IFVzZSBpdC4KCgkqIHJlcG8uYyAoZmluaXNoX3JlcG8pOiBEb24ndCBjcmFzaCBvbiBubyBhcmdzLgoKCSogcGFyc2UueSAobmFtZWRfY29tcGxleF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGUpOiBIYW5kbGUKIAlleHBsaWNpdCBnbG9iYWwgc2NvcGUuCgkqIGRlY2wyLmMgKGhhbmRsZV9jbGFzc19oZWFkKTogTmV3IGZuLgoKCSogcHQuYyAodW5pZnkpOiBBZGQgQ09OU1RfREVDTCBjYXNlLgoKVGh1IEF1ZyAxNCAxMDowNToxMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKHBlcm1hbmVudF9vYnN0YWNrKTogRml4IGRlY2wgdG8gbm90IGJlIGEgcG9pbnRlci4KCgkqIGNwLXRyZWUuaCAocmVwb3J0X3R5cGVfbWlzbWF0Y2gpOiBBZGQgcHJvdG90eXBlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IFJlbW92ZSBlcnJvbmVvdXMgZm91cnRoCglhcmd1bWVudCB0byByZXBvcnRfdHlwZV9taXNtYXRjaC4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogUmVtb3ZlIGVycm9uZW91cyBzZWNvbmQgYXJnIHRvCgl0b3VybmV5LgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCldlZCBBdWcgMTMgMTk6MTk6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRG9uJ3QgYm90aGVyIHByb2Nlc3NpbmcgYSBmdW5jdGlvbiB3aXRoIG5vCglERUNMX0xBTkdfU1BFQ0lGSUMuCgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IENhbGwgaW5pdF9mdW5jdGlvbl9zdGFydCBpbiB0aGUgbWFjcm8gY2FzZS4KCldlZCBBdWcgMTMgMTA6NDY6MTkgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKCgkqIGRlY2wyLmMgKERFRkFVTFRfVlRBQkxFX1RIVU5LUyk6IERlZmluZSB0byBiZSAwIGlmIG5vdAoJZGVmaW5lZCBhbmQgdXNlZCB0byBzZXQgZmxhZ192dGFibGVfdGh1bmtzLgoKVHVlIEF1ZyAxMiAyMDoxMzo1NyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55OiBEb24ndCBjbGVhciB0aGUgaW5saW5lcyBmcm9tIHRoZWlyIG9ic3RhY2sgdW50aWwgdGhleSd2ZSAKCWFsbCBiZWVuIHByb2Nlc3NlZC4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgZXhjZXB0aW9uCiAJc3BlY2lmaWNhdGlvbiBtaXNtYXRjaCBpZiBmbGFnX2V4Y2VwdGlvbnMgaXMgb2ZmLgoKTW9uIEF1ZyAxMSAxNTowMTo1NiAgMTk5NyAgTWFyYyBMZWhtYW5uIDxwY2dAZ29vZi5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGMrKy5kaXN0Y2xlYW4pOiBSZW1vdmUgZysrLmMgb24gbWFrZSBkaXN0Y2xlYW4uCgpTdW4gQXVnIDEwIDEyOjA2OjA5IDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogY3AtdHJlZS5oOiBSZXBsYWNlIFNURElPX1BST1RPIHdpdGggUFJPVE8gaW4gaW5jbHVkZSBmaWxlcy4KCSogY3Z0LmMsIGVycm9yLmMsIGV4Y2VwdC5jLCBleHByLmMsIGZyaWVuZC5jLCBpbml0LmMsIHJ0dGkuYzoKCUluY2x1ZGUgPHN0ZGlvLmg+IGJlZm9yZSBpbmNsdWRlIGZpbGVzIHRoYXQgZm9ybWVybHkgdXNlZCBTVERJT19QUk9UTy4gCgoJKiBkZWNsLmMsIGcrK3NwZWMuYywgbGV4LmMsIG1ldGhvZC5jLCByZXBvLmM6CglJbmNsdWRlCSJjb25maWcuaCIgZmlyc3QsIGFzIHBlciBhdXRvY29uZiBtYW51YWwuCgpGcmkgQXVnICA4IDExOjQ3OjQ4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogVHdlYWsgd29yZGluZy4KCSogbGV4LmMgKGRvX3BlbmRpbmdfZGVmYXJncyk6IERvbid0IGRpZSBpZiB3ZSBzZWUgYSBkZWZhdWx0IGFyZwoJdGhhdCBpc24ndCBhIERFRkFVTFRfQVJHLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgREVGQVVMVF9BUkcuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZoYW5kbGUtZXhjZXB0aW9ucy4KCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZmhhbmRsZS1leGNlcHRpb25zLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlKTogdnRhYmxlcyBhcmUgYXJ0aWZpY2lhbC4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IExpa2V3aXNlLgoKV2VkIEF1ZyAgNiAxMTowMjozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBBZnRlciBjb252ZXJ0aW5nIHRvIHRoZSB0YXJnZXQgdHlwZSwgc2V0CiAJTE9PS1VQX05PX0NPTlZFUlNJT04uCgoJKiBjYWxsLmMgKGpvdXN0KTogV2FybiBhYm91dCBwb3RlbnRpYWxseSBjb25mdXNpbmcgcHJvbW90aW9uIHJ1bGVzCgl3aXRoIC1Xc2lnbi1wcm9tby4KCSogY3AtdHJlZS5oLCBsYW5nLW9wdGlvbnMuaCwgZGVjbDIuYzogU3VwcG9ydCAtV3NpZ24tcHJvbW8uCgpUdWUgQXVnICA1IDE1OjE1OjA3IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjOiBEZWNsYXJlIF9fdGVybWluYXRlX2Z1bmMgd2l0aCBub3JldHVybiBhdHRyaWJ1dGUuCgpGcmkgQXVnICAxIDAzOjE4OjE1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6IEJyZWFrIG91dCBlYXRfc2F2ZWRfaW5wdXQsIGhhbmRsZSBlcnJvcnMuCgkoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogVXNlIGNvbXBzdG10IGluc3RlYWQgb2YgY29tcHN0bXRfb3JfZXJyb3IuCgpUaHUgSnVsIDMxIDE3OjE0OjA0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfbmV3KTogRG9uJ3Qgc2V0IFRSRUVfQUREUkVTU0FCTEUuCgpGcmkgSnVsICA0IDAxOjQ1OjE2IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIudHh0LCBjcGxpYjIucmVhZHkpOiBJbnN0ZWFkIG9mIGNoZWNraW5nIGZvcgoJZXhpc3RlbmNlIG9mIGNjMXBsdXMgY2hlY2sgd2hldGhlciAkKExBTkdVQUdFUykgY29udGFpbnMgQysrLgoKV2VkIEp1bCAzMCAxMzowNDoyMSAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ldGhvZC5jIChkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogV2hlbiBjb3B5aW5nIGFuIGFub255bW91cwoJdW5pb24gbWVtYmVyIGxvb3AgYXJvdW5kIHRvIGhhbmRsZSBuZXN0ZWQgYW5vbnltb3VzIHVuaW9ucy4gIFVzZQoJdGhlIG9mZnNldCBvZiB0aGUgbWVtYmVyIHJlbGF0aXZlIHRvIHRoZSBvdXRlciBzdHJ1Y3R1cmUsIG5vdCB0aGUKCXVuaW9uLgoKVHVlIEp1bCAyOSAyMToxNzoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHJlc29sdmVfYXJncyk6IE5ldyBmbi4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IFVzZSBpdC4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKTW9uIEp1bCAyOCAxNjowMjozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IHRzdWJzdCBhbGwgZGVmYXVsdCBwYXJtcyBmcm9tIHRlbXBsYXRlcy4KCldlZCBKdWwgMjMgMTM6MzY6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdHJ1Y3QgY3BfZnVuY3Rpb24pOiBBZGQgc3RhdGljX2xhYmVsbm8uCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IFJlc3RvcmUgaXQuCgpUdWUgSnVsIDIyIDE0OjQzOjI5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmXzEpOiBDb252ZXJ0IGZyb20gcmVmZXJlbmNlLgoKVHVlIEp1bCAyMiAxMTowNjoyMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjdXJyZW50X2RlY2xzcGVjcywgcHJlZml4X2F0dHJpYnV0ZXMpOiBJbml0aWFsaXplIHRvCglOVUxMX1RSRUUuCgoJKiBwYXJzZS55IChpbml0ZGNsMCk6IE1ha2Ugc3VyZSBDVVJSRU5UX0RFQ0xTUEVDUyBpcyBub24tbmlsCgliZWZvcmUgd2UgdHJ5IHRvIGZvcmNlIGl0IHRvIGJlIGEgVFJFRV9MSVNULgoJKGRlY2wpOiBNYWtlIHN1cmUgJDEudCBpcyBub24tbmlsLgoKU3VuIEp1bCAyMCAxMTo1MzowNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIHRlbXBsYXRlIGZpcnN0LXBhcnNlIGNvZGVzLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IE9ubHkgd2FybiBhYm91dCB1c2VyLWRlZmluZWQgc3RhdGljcy4KCkZyaSBKdWwgMTggMTc6NTY6MDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgQk9PTEVBTl9UWVBFLgoKCSogY3AtdHJlZS5oOiBMb3NlIFBBUk1fREVGQVVMVF9GUk9NX1RFTVBMQVRFLgoJKiBwdC5jICh0c3Vic3QpOiBEb24ndCBzZXQgaXQuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogVXNlIHVzZXNfdGVtcGxhdGVfcGFybXMuCgpUaHUgSnVsIDE3IDE4OjA2OjMwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFVzZSBzdGF0aWNfbGFiZWxubwogCWluc3RlYWQgb2YgdmFyX2xhYmVsbm8uCgkoYnVpbGRfcXVhbGlmaWVkX25hbWUpOiBOZXcgZm4uCgkoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IFNwbGl0IG91dCBmcm9tIGhlcmUuCgkoYnVpbGRfc3RhdGljX25hbWUpOiBVc2UgYnVpbGRfcXVhbGlmaWVkX25hbWUuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBTdGF0aWNzIGluIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIAoJaGF2ZSBjb21kYXQgbGlua2FnZS4KCShzdGFydF9mdW5jdGlvbik6IEluaXRpYWxpemUgc3RhdGljX2xhYmVsbm8uCgpUaHUgSnVsIDE3IDExOjIwOjE3IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IGFkZCBjaGVjayBvZiB3YXJuX2N0b3JfZHRvcl9wcml2YWN5CgliZWZvcmUgImFsbCBtZW1iZXIgZnVuY3Rpb25zIGluIGNsYXNzIFtdIGFyZSBwcml2YXRlIgoKV2VkIEp1bCAxNiAyMzo0NzowOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZG9fc2NvcGVkX2lkKTogY29udmVydF9mcm9tX3JlZmVyZW5jZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgpXZWQgSnVsIDE2IDEyOjM0OjI5IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAbGlzYS5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogQ2hlY2sgVFJFRV9PUEVSQU5EIGJlZm9yZSBkdW1wX2V4cHJfbGlzdC4KCk1vbiBKdWwgMTQgMDM6MjM6NDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogUHJvbW90ZSBpbmRleAogCWJlZm9yZSBzYXZpbmcgaXQuCgpTdW4gSnVsIDEzIDAwOjExOjUyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IE1vdmUgbm9uLXZpcnR1YWwgZGVzdHJ1Y3RvciB3YXJuaW5nLgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogUmVtb3ZlIG5vbi12aXJ0dWFsIGRlc3RydWN0b3Igd2FybmluZy4KClNhdCBKdWwgMTIgMTI6NDc6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENhbGwgYWRkX2RlZmFyZ19mbiBmb3IgdGhlIGZ1bmN0aW9uCgl0eXBlLCB0b28uCgkqIGxleC5jIChhZGRfZGVmYXJnX2ZuKTogQWRqdXN0LgoJKGRvX3BlbmRpbmdfZGVmYXJncyk6IEFkanVzdC4gIERvbid0IHNraXAgdGhlIGZpcnN0IHBhcm0uCgpGcmkgSnVsIDExIDAxOjM5OjUwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoYnVpbGRfZW51bWVyYXRvcik6IEdsb2JhbCBlbnVtZXJhdG9ycyBhcmUgYWxzbyByZWFkb25seS4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBSZW5hbWVkIGZyb20gYnVpbGRfZHluYW1pY19jYXN0LgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IENhbGwgaXQgYW5kIGNvbnZlcnRfZnJvbV9yZWZlcmVuY2UuCgoJKiBsZXguYyAoYWRkX2RlZmFyZ19mbik6IE5ldyBmbi4KCShzbmFyZl9kZWZhcmcpOiBEb24ndCBhZGQgdG8gZGVmYXJnX3R5cGVzLgoJKGRvX3BlbmRpbmdfZGVmYXJncyk6IExvc2UgZGVmYXJnX3R5cGVzLiAgQWxsIGZucyB3ZSBwcm9jZXNzIG5vdwoJaGF2ZSBkZWZhcmdzLgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBDYWxsIGFkZF9kZWZhcmdfZm4uCgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogRXhwZWN0IDE4IHMvciBjb25mbGljdHMuCgkqIGNwLXRyZWUuZGVmOiBBZGQgREVGQVVMVF9BUkcuCgkqIHNwZXcuYyAoeXlsZXgpOiBDYWxsIHNuYXJmX2RlZmFyZyBhcyBhcHByb3ByaWF0ZS4KCSogcGFyc2UueTogTmV3IHRva2VucyBERUZBUkcgYW5kIERFRkFSR19NQVJLRVIuCgkoZGVmYXJnX2FnYWluLCBwZW5kaW5nX2RlZmFyZ3MsIGRlZmFyZywgZGVmYXJnMSk6IE5ldyBydWxlcy4KCShzdHJ1Y3RzcCk6IFVzZSBwZW5kaW5nX2RlZmFyZ3MuCgkocGFybXMsIGZ1bGxfcGFybSk6IFVzZSBkZWZhcmcuCgkqIGxleC5jIChpbml0X2xleCk6IEluaXRpYWxpemUgaW5saW5lX3RleHRfZmlyc3RvYmouCgkoZG9fcGVuZGluZ19pbmxpbmVzKTogTmV2ZXIgcGFzcyB0aGUgb2JzdGFjayB0byBmZWVkX2lucHV0LgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBDYWxsIGVuZF9pbnB1dCBpbnN0ZWFkIG9mIHJlc3RvcmVfcGVuZGluZ19pbnB1dC4KCShjbGVhcl9pbmxpbmVfdGV4dF9vYnN0YWNrLCByZWluaXRfcGFyc2VfZm9yX2V4cHIsIGRvX3BlbmRpbmdfZGVmYXJncywKCWZpbmlzaF9kZWZhcmcsIGZlZWRfZGVmYXJnLCBzbmFyZl9kZWZhcmcsIG1heWJlX3NuYXJmX2RlZmFyZyk6IE5ldyBmbnMuCgkqIGlucHV0LmMgKGVuZF9pbnB1dCk6IE5ldyBmbi4KCShzdWJfZ2V0Y2gpOiBBdCB0aGUgZW5kIG9mIHNvbWUgZmVkIGlucHV0LCBqdXN0IGtlZXAgcmV0dXJuaW5nIEVPRgoJdW50aWwgc29tZW9uZSBjYWxscyBlbmRfaW5wdXQuCglSZW1vdmUgJ29ic3RhY2snIGZpZWxkIGZyb20gc3RydWN0IGlucHV0X3NvdXJjZS4KCSogZGVjbC5jIChncm9rcGFybXMpOiBIYW5kbGUgREVGQVVMVF9BUkcuCgkocmVwbGFjZV9kZWZhcmcpOiBOZXcgZm4uCgkqIGNwLXRyZWUuaCAoREVGQVJHX0xFTkdUSCwgREVGQVJHX1BPSU5URVIpOiBOZXcgbWFjcm9zLgoKV2VkIEp1bCAgOSAxMzo0NDoxMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBJZiBub3RoaW5nIGVsc2Ugd29ya3MsIHRyeSBiaW5kaW5nCglhbiBydmFsdWUgdG8gYSByZWZlcmVuY2UuCgpXZWQgSnVsICA5IDEzOjA0OjM4IDE5OTcgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogZml4IEp1biAzMCBwYXRjaCAtLSBtb3ZlCglpZm5kZWYgZm9yIEN5Z3dpbjMyIHRvIGluY2x1ZGUgU0lHU0VHVi4KClRodSBKdWwgIDMgMDE6NDQ6MDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogT25seSBjb21wbGFpbiBhYm91dCBwb2ludGVycyB3aXRob3V0Cgljb3B5IHN0dWZmIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RydWN0b3JzLgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBDYWxsIGNvbXBsZXRlX3R5cGUgb24gdGhlIHR5cGVzLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogSWYgdGhlIGZ1bmN0aW9uIHdlIGNob3NlIGRvZXNuJ3QgYWN0dWFsbHkKIAltYXRjaCwgZGllLgoKCSogZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBEb24ndCBzcGVjaWZ5ICdjb25zdCBpbnQnIGZvciB0aGUKIAlhcnRpZmljaWFsIGRlc3RydWN0b3IgcGFybS4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBJZiB3ZSBhcmUgY2FsbGVkIHJlY3Vyc2l2ZWx5LCBub3RoaW5nIAoJZGVjYXlzLgoKTW9uIEp1biAzMCAxNzo1MzoyMSAxOTk3ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKICAgICAgICAqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTdG9wIHRyeWluZyB0byBjYXRjaCBzaWduYWxzCglvdGhlciB0aGFuIFNJR0FCUlQgc2luY2UgdGhlIEN5Z3dpbjMyIGxpYnJhcnkgZG9lc24ndCBzdXBwb3J0Cgl0aGVtIGNvcnJlY3RseSB5ZXQuICBUaGlzIGZpeGVzIGEgc2l0dWF0aW9uIGluIHdoaWNoIGcrKyBjYXVzZXMKCWEgaGFuZyBvbiBTSUdTRUdWcyBhbmQgb3RoZXIgc3VjaCBzaWduYWxzIGluIG91ciBXaW4zMi1ob3N0ZWQKCXRvb2xzLgoKTW9uIEp1biAzMCAxNDo1MDowMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhciwgY2FzZSBDQUxMX0VYUFIpOiBIYW5kbGUgYWxsIHRoZSBwYXJzZSBub2RlIGRhdGEuCgpGcmkgSnVuIDI3IDE1OjE4OjQ5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IEFsd2F5cyByZXR1cm4gdGhlIHZhbHVlIGlmIG91ciAKCXR5cGUgbmVlZHMgY29uc3RydWN0aW5nLgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IENvbnZlcnQgY2xhc3Mgc3RhdGljcyBmcm9tCiAJcmVmZXJlbmNlLCB0b28uCgpUaHUgSnVuIDI2IDExOjQ0OjQ2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoY3BsaWIyLnJlYWR5KTogQWRkICQoTEFOR1VBR0VTKSBkZXBlbmRlbmN5LgoKVGh1IEp1biAxOSAxNjo0OToyOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogTWFrZSBzdXJlIHdlIGNsZWFuIHVwIHRlbXBvcmFyaWVzIGF0Cgl0aGUgZW5kIG9mIHJldHVybiB4OwoKVGh1IEp1biAxOSAxMjoyODo0MyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoY2hlY2tfZm9yX21pc3Npbmdfc2VtaWNvbG9uKTogQWxzbyBjaGVjayBmb3IgQ1ZfUVVBTElGSUVSLgoKVHVlIEp1biAxNyAxODozNTo1NyAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBBZGQgc3VwcG9ydAogCS1mbm8tc2psai1leGNlcHRpb25zIC1mUElDIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiB0aGUgU1BBUkMuCgpNb24gSnVuIDE2IDAxOjI0OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJlcG8uYyAoZXh0cmFjdF9zdHJpbmcpOiBOdWxsLXRlcm1pbmF0ZS4KCgkqIGNwLXRyZWUuaCAoVElfU1BFQ19JTkZPKTogTmV3IG1hY3JvLgoJKENMQVNTVFlQRV9USV9TUEVDX0lORk8pOiBOZXcgbWFjcm8uCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvcnJlY3RseSBkZXRlcm1pbmUgIyBvZiB0ZW1wbGF0ZSBwYXJtcyAKCWZvciBwYXJ0aWFsIHNwZWNzLgoKCSogY2FsbC5jIChjb21wYXJlX2ljcyk6IFJlYWxseSBmaXggJ3RoaXMnIGNvbnZlcnNpb25zLgoKCSogcHQuYyAoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogRG9uJ3QgY3Jhc2ggb24gZXhwbGljaXQgaW5zdCBvZgoJbm9uLXRlbXBsYXRlIGZuLgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogQ29tcGxhaW4gYWJvdXQgbWlzbWF0Y2ggaW4gIyBvZgogCXRlbXBsYXRlIHBhcm1zIGJldHdlZW4gYSBjbGFzcyB0ZW1wbGF0ZSBhbmQgYSBtZW1iZXIgdGVtcGxhdGUuCgpTdW4gSnVuIDE1IDAyOjM4OjIwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IFlvdSBjYW4ndCBjYWxsCiAJZnVuY3Rpb25fY2Fubm90X2lubGluZV9wIGFmdGVyIGZpbmlzaF9mdW5jdGlvbi4KCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBUdXJuIG9uIGZsYWdfaW5saW5lX2Z1bmN0aW9ucyBhbmQgdHVybgogCW9mZiBERUNMX0lOTElORSBiZWZvcmUgaGFuZGluZyBhIHN5bnRoZXNpemVkIG1ldGhvZCB0byB0aGUKIAliYWNrZW5kLgoKVGh1IEp1biAxMiAxNzozNToyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBSZW1vdmUgSnVseSAzMCBjaGFuZ2UgdG8gbmV2ZXIgc2V0CiAJREVDTF9JTkxJTkUgaWYgYXRfZW9mLgoKVGh1IEp1biAxMiAxNToyNTowOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB4cmVmLmMgKEdOVV94cmVmX21lbWJlcik6IEVuc3VyZSB0aGF0IHRoZSBub2RlIGhhcyBhCglkZWNsX2xhbmdfc3BlY2lmaWMgcGFydCBiZWZvcmUgY2hlY2tpbmcgREVDTF9GUklFTkRfUC4KClRodSBKdW4gMTIgMTI6MzY6MDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEaWFnbm9zZSBub24tY2xhc3MgdHlwZXMgdXNlZAoJYXMgYmFzZXMuCgpXZWQgSnVuIDExIDE3OjMzOjQwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogVXNlIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uCglpbnN0ZWFkIG9mIGNvbnZlcnRfYW5kX2NoZWNrLgoKV2VkIEp1biAxMSAxMjozMTozMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh0eXBlc3BlYyk6IERvbid0IHBlZHdhcm4gZm9yIHR5cGVvZi4KClR1ZSBKdW4gMTAgMDA6MjI6MDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcmVwby5jIChmaW5pc2hfcmVwbyk6IE9ubHkgY2hlY2sgY2hhbmdlcyBpZiB3ZSB3b3VsZCB3cml0ZSBhCglyZXBvIGZpbGUuCgoJKiBjYWxsLmMgKGNvbXBhcmVfaWNzKTogRml4IGhhbmRsaW5nIG9mICd0aGlzJyBjb252ZXJzaW9ucy4KCgkqIHB0LmMgKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IFN1cHBvcnQgc3RhdGljIGRhdGEgdG9vLiAgUmVuYW1lCglmcm9tIGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24uCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoJKiBwYXJzZS55OiBBZGp1c3QuCgoJKiByZXBvLmMgKGV4dHJhY3Rfc3RyaW5nKTogTmV3IGZuLgoJKGdldF9iYXNlX2ZpbGVuYW1lKTogVXNlIGl0LgoJKGluaXRfcmVwbyk6IENvbXBhcmUgb2xkIGFyZ3Mgd2l0aCBjdXJyZW50IGFyZ3MuCgpNb24gSnVuICA5IDE0OjI1OjMwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluLCBNYWtlLWxhbmcuaW46IFByb3RlY3QgQy1scyB3aXRoIGEgY29tbWVudAogCWNoYXJhY3RlciwgaWRlYSBmcm9tIFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+LgoKTW9uIEp1biAgOSAwMTo1MjowMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQmUgbW9yZSBwZXJzaXN0ZW50IGluIGxvb2tpbmcgZm9yCiAJcmV0dXJuZWQgdGVtcHMuCgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogVXNlIE5PUF9FWFBSIGZvciBzd2l0Y2hpbmcgZnJvbQogCXBvaW50ZXIgdG8gcmVmZXJlbmNlLgoKCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IERvbid0IGRvIGFueXRoaW5nIGlmIFBBVEggaGFzIG5vIHN0ZXBzLgoKU3VuIEp1biAgOCAwMzowNzowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsLCBidWlsZF9vZmZzZXRfcmVmKToKIAlVc2UgZG9fc2NvcGVkX2lkIGluc3RlYWQgb2YgZG9faWRlbnRpZmllci4KCgkqIGN2dC5jIChjb252ZXJ0KTogUmVtb3ZlIGJvZ29zaXR5LgoKU2F0IEp1biAgNyAyMDo1MDoxNyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogRG8gY2hlY2tzIG9mIEFSR1RZUEUgYW5kCglUQVJHRVRfVFlQRSBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBnZXRfYmluZm8uCgpGcmkgSnVuICA2IDE3OjM2OjM5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBDYWxsIGdldF9iaW5mbyB0byBnZXQgYWNjZXNzIGNvbnRyb2wuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBJZiB3ZSBkb24ndCBzdXBwb3J0IHdlYWtzLCBsZWF2ZQogCXN0YXRpY3MgdW5kZWZpbmVkLgoKRnJpIEp1biAgNiAxNTo1NTo0OSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBBZGQgc3VwcG9ydCBmb3IgbWFjaGluZXMgdGhhdAogCWNhbm5vdCBhY2Nlc3MgZ2xvYmFscyBhZnRlciB0aHJvdydzIGVwaWxvZ3VlIHdoZW4KIAktZm5vLXNqbGotZXhjZXB0aW9ucyBpcyB1c2VkLgoKVGh1IEp1biAgNSAxNjoyODo0MyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55OiAnc3RkOjonIGJlY29tZXMgJzo6Jy4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBSZW1vdmUgJ25hbWVzcGFjZScgd2FybmluZy4KCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IElnbm9yZSAnc3RkOjonLgoJKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZG9fdXNpbmdfZGlyZWN0aXZlKTogSWdub3JlICd1c2luZyBuYW1lc3BhY2Ugc3RkOycuCgkoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IElnbm9yZSAndXNpbmcgc3RkOjp3aGF0ZXZlcicuCgkqIGRlY2wuYyAocHVzaF9uYW1lc3BhY2UpOiBKdXN0IHNvcnJ5LgoJKHBvcF9uYW1lc3BhY2UpOiBOb3AuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWNsYXJlIHN0ZCBuYW1lc3BhY2UuCgpUdWUgSnVuICAzIDE4OjA4OjIzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChwdXNoX2NsYXNzX2RlY2xzKTogQSBuYW1lIHdoaWNoIGFtYmlndW91c2x5IHJlZmVycyB0bwogCXNldmVyYWwgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNhbWUgdGVtcGxhdGUganVzdCByZWZlcnMgdG8gdGhlCiAJdGVtcGxhdGUuCgpUdWUgSnVuICAzIDEyOjMwOjQwIDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAY2lyZGFuLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBmaXggcHJvYmxlbSB3aXRoIHVuc2lnbmVkIGxvbmcKCWVudW1lcmF0ZWQgdmFsdWVzIGJlaW5nIHNtYXNoZWQgdG8gaW50cywgY2F1c2luZyBvdmVyZmxvdwoJd2hlbiBjb21wdXRpbmcgbmV4dCBlbnVtZXJhdGVkIHZhbHVlLiAoZm9yIGVudW0gdmFsdWVzIGFyb3VuZAoJTUFYX1ZBTCkuCgpNb24gSnVuICAyIDE3OjQwOjU2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogT25seSBjYWxsIG1hcmtfdXNlZCBvbiBhIGRlY2wuCgpUaHUgTWF5IDI5IDE1OjU0OjE3IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBNYWtlIHRoZSBjaGVjayBmb3IgYSBwdHIgdG8gZnVuY3Rpb24KCW1vcmUgc3BlY2lmaWMgYmVmb3JlIHBvc3NpYmxlIGRlZmF1bHRfY29udmVyc2lvbiBjYWxsLgoKVGh1IE1heSAyOSAxMzowMjowNiAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBTaW1wbGlmeSBhbmQgZml4IGFuZCBtYWtlCglzdXJlIHdlIGRvbid0IGVuZCBhIHJlZ2lvbiBpbiBhIHNlcXVlbmNlLCBhcyBleHBhbmRfZW5kX2JpbmRpbmdzCglkb2Vzbid0IGxpa2UgaXQuCgpXZWQgTWF5IDI4IDE3OjA4OjAzIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogTWFyayB0ZXJtaW5hdGUgYXMgbm90CglyZXR1cm5pbmcgc28gdGhhdCB0aGUgb3B0aW1pemVyIGNhbiBvcHRpbWl6ZSBiZXR0ZXIuCgpUdWUgTWF5IDI3IDE5OjQ5OjE5IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0KTogRG9uJ3QgZG8gYW55IGV4dHJhIHdvcmssIGlmIHdlIGNhbiBhdm9pZCBpdAoJZWFzaWx5LgoKVHVlIE1heSAyNyAxODoyMTo0NyAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiAqLltjaHldOiBDaGFuZ2UgY3BfY29udmVydCB0byBvY3BfY29udmVydCwgY2hhbmdlIGNvbnZlcnQgdG8KCWNwX2NvbnZlcnQuICBjb252ZXJ0IGlzIG5vdyByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQsIGFuZCBkb2Vzbid0CgloYXZlIHRoZSBzZW1hbnRpY3MgYSBmcm9udGVuZCBwZXJzb24gc2hvdWxkIGV2ZXIgd2FudC4KCkZyaSBNYXkgMjMgMTA6NTg6MzEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBEZWZpbmUgX19FWENFUFRJT05TIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuCglMb3NlIC10cmFkaXRpb25hbCBzdXBwb3J0LgoKVGh1IE1heSAyMiAxNTo0MToyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBVc2UgVFlQRV9QUkVDSVNJT04gKHNpemV0eXBlKS4KCgkqIHBhcnNlLnkgKHNlbGZfcmVmZXJlbmNlKTogRG8gaXQgZm9yIHRlbXBsYXRlcywgdG9vLgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBEb24ndCBvdmVybG9hZF90ZW1wbGF0ZV9uYW1lOyB0aGUgYWxpYXMKCWdlbmVyYXRlZCBieSBidWlsZF9zZWxmX3JlZmVyZW5jZSBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZS4KCgkqIHRyZWUuYyAobGlzdF9oYXNoKTogTWFrZSBzdGF0aWMsIHRha2UgbW9yZSBhcmdzLgoJKGxpc3RfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShsaXN0X2hhc2hfYWRkKTogTWFrZSBzdGF0aWMuCgkobGlzdF9oYXNoX2Nhbm9uKTogTG9zZS4KCShoYXNoX3RyZWVfY29ucyk6IE9ubHkgYnVpbGQgYSBuZXcgbm9kZSBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBpbiB0aGUKCWhhc2h0YWJsZS4KCShoYXNoX3RyZWVfY2hhaW4pOiBVc2UgaGFzaF90cmVlX2NvbnMuCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBKdXN0IGNoZWNrIElERU5USUZJRVJfR0xPQkFMX1ZBTFVFIGluc3RlYWQKCW9mIGNhbGxpbmcgbG9va3VwX25hbWUuCgpXZWQgTWF5IDIxIDE4OjI0OjE5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVFlQRV9WQUxVRVMgZm9yIGFuIGVudW0KCWRvZXNuJ3QgcmVmZXIgdG8gdGhlIENPTlNUX0RFQ0xzLgoKVHVlIE1heSAyMCAyMTowOTozMiAxOTk3ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX3Zhcik6IEVpdGhlciBJTlRfVFlQRV9TSVpFIG9yIDMyLCB3aGljaGV2ZXIKCWlzIGJpZ2dlci4KCShleHBhbmRfY2xhc3NfZGVzYyk6IENvbnZlcnQgdGhlIGxhc3QgYXJndW1lbnQgdG8gYSBzaXpldHlwZS4KClR1ZSBNYXkgMjAgMTM6NTU6NTcgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZ3h4LmdwZXJmIChfX2NvbXBsZXgsIF9fY29tcGxleF9fLCBfX2ltYWcsIF9faW1hZ19fLCBfX3JlYWwsCglfX3JlYWxfXyk6IEFkZCByZXN3b3Jkcy4KCSogaGFzaC5oOiBSZWdlbmVyYXRlLgoJKiBsZXguaCAocmlkKTogQWRkIFJJRF9DT01QTEVYLgoJKFJJRF9MQVNUX01PRElGSUVSKTogU2V0IHRvIFJJRF9DT01QTEVYLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBBZGQgYnVpbGRpbmcgb2YgUklEX0NPTVBMRVguCgkocmVhbF95eWxleCk6IEdlbmVyYWwgY2xlYW51cCBpbiBsaW5lIHdpdGggd2hhdCBjLWxleC5jIGFsc28gaGFzLAoJc2FucyB0aGUgY3J1ZnQgZm9yIHRyYWRpdGlvbmFsOyBhZGQgaGFuZGxpbmcgb2YgU1BFQ19JTUFHLCBjb21wbGV4Cgl0eXBlcywgYW5kIGltYWdpbmFyeSBudW1lcmljIGNvbnN0YW50cy4KCSogcGFyc2UueSAoUkVBTFBBUlQsIElNQUdQQVJUKTogQWRkIHRva2Vucy4KCSh1bmFyeV9leHByKTogQWRkIFJFQUxQQVJUIGFuZCBJTUFHUEFSVCBydWxlcy4KCSogY3AtdHJlZS5oIChjb21wbGV4X3tpbnRlZ2VyLGZsb2F0LGRvdWJsZSxsb25nfV90eXBlX25vZGUpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGNvbXBsZXhfe2ludGVnZXIsZmxvYXQsZG91YmxlLGxvbmd9X3R5cGVfbm9kZSk6IERlZmluZQoJdHlwZXMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgdXAgdGhlIHR5cGVzLgoJKGdyb2tkZWNsYXJhdG9yKTogQWRkIGhhbmRsaW5nIG9mIFJJRF9DT01QTEVYLiAgU2V0IGFuZCB1c2UKCURFRkFVTFRFRF9JTlQgaW5zdGVhZCBvZiBFWFBMSUNJVF9JTlQgd2hlbiB3ZSBkZWZhdWx0IHRvIGludCB0eXBlLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEFkZCBSRUFMUEFSVF9FWFBSIGFuZCBJTUFHUEFSVF9FWFBSIGNhc2VzLgoJKiBjdnQuYyAoY3BfY29udmVydCk6IEhhbmRsZSBDT01QTEVYX1RZUEUuCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9wcmVmaXgsIGR1bXBfdHlwZSwgZHVtcF90eXBlX3N1ZmZpeCk6IEFkZAoJQ09NUExFWF9UWVBFIGNhc2UuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uYW1lKTogQWRkIGhhbmRsaW5nIG9mIHRoZSBkaWZmZXJlbnQKCUNPTVBMRVhfVFlQRXMsIHByZWZpeGluZyB0aGVtIHdpdGggYEonLgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBEb24ndCBsZXQgdGhlbSB1c2UgYSBDT01QTEVYX1RZUEUKCWFzIGEgdGVtcGxhdGUgcGFybS4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zLCB0c3Vic3QsIHVuaWZ5KTogQWRkIENPTVBMRVhfVFlQRSBjYXNlLgoJKiB0cmVlLmMgKGx2YWx1ZV9wKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgkobWFwY2FyKTogSGFuZGxlIENPTVBMRVhfQ1NULgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IEhhbmRsZSBDT01QTEVYX1RZUEUuCgkoY29tbW9uX3R5cGUpOiBBZGQgY29kZSBmb3IgY29tcGxleCB0eXBlcy4KCShidWlsZF91bmFyeV9vcCk6IEFkZCBSRUFMUEFSVF9FWFBSIGFuZCBJTUFHUEFSVF9FWFBSIGNhc2VzLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCShtYXJrX2FkZHJlc3NhYmxlKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgpNb24gTWF5IDE5IDEyOjI2OjI3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IERvbid0IHBhc3MgdGhlIE1JTlVTX0VYUFIgZm9yIGFuIGFycmF5IGRvbWFpbiB0bwoJdHN1YnN0X2V4cHIsIGFzIGl0IG1pZ2h0IHRyeSB0byBkbyBvdmVybG9hZCByZXNvbHV0aW9uLgoKU2F0IE1heSAxNyAxMDo0ODozMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IE9vcHMuCgpGcmkgTWF5IDE2IDE0OjIzOjU3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmOiBBZGQgVEFHX0RFRk4uCgkqIHB0LmMgKHRzdWJzdF9lbnVtKTogTmV3IGZuLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIGl0LgoJKHRzdWJzdF9leHByKTogU3VwcG9ydCBUQUdfREVGTi4KCSh0c3Vic3QpOiBTdXBwb3J0IGxvY2FsIGVudW1zLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZmluaXNoX2VudW0pOiBMaWtld2lzZS4KCShzdGFydF9lbnVtKTogSWYgdGhpcyBpcyBhIGxvY2FsIGVudW0sIHN3aXRjaCB0byBwZXJtYW5lbnRfb2JzdGFjay4KCldlZCBNYXkgMTQgMTk6MDg6MjggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogU2V0IGxhc3RfcGFybV9jbGVhbnVwX2luc24gaGVyZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBQdXQgdGhlIGJhc2UgaW5pdCBjb2RlIGZvciBjb25zdHJ1Y3RvcnMganVzdAoJYWZ0ZXIgdGhlIHBhcm0gY2xlYW51cCBpbnNucy4KCShzdHJ1Y3QgY3BfZnVuY3Rpb24pOiBBZGQgbGFzdF9wYXJtX2NsZWFudXBfaW5zbi4KCShwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBMaWtld2lzZS4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoJClR1ZSBNYXkgMTMgMTU6NTE6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgQklUX05PVF9FWFBSLgoKV2VkIE1heSAgNyAxMToxNzo1OSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuaykgW0FTTV9PVVRQVVRfTUlfVEhVTktdOiBCdWlsZCB1cCB0aGUgUlRMCglmb3IgVEhVTktfRk5ERUNMIGJlZm9yZSB3ZSBzd2l0Y2ggdG8gdGVtcG9yYXJ5IGFsbG9jYXRpb24uCgpNb24gTWF5ICA1IDE0OjQ2OjUzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogSGFuZGxlIG51bGwgYXJnMiBmb3IgPzouCgpUaHUgTWF5ICAxIDE4OjI2OjM3IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IEVuc3VyZSB0aGF0IHdlIGZsb3cgdGhyb3VnaAoJdGhlIGVuZCBvZiB0aGUgZXhjZXB0aW9uIHJlZ2lvbiBmb3IgdGhlIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uLgoJTW92ZSBleGNlcHRpb24gcmVnaW9uIGZvciB0aGUgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gaW4sIHNvIHRoYXQKCWl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgcGFybSBjbGVhbnVwLiAgUmVtb3ZlIHNvbWUgb2Jzb2xldGUgY29kZS4KCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgpUdWUgQXByIDI5IDE1OjM4OjU0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogRml4IG5vdGhyb3cgaGFuZGxpbmcuCgpUdWUgQXByIDI5IDE0OjI5OjUwIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBEb24ndCB3YXJuIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbgoJbGlzdCBmb3IgYW4gYXJ0aWZpY2lhbCBtZW1iZXIuCgpGcmkgQXByIDI1IDE3OjQ3OjU5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZG9fY2FzZSk6IEhhbmRsZSAhU1RBUlQgY2FzZSBmb3IgdGhlIGVycm9yIG1zZy4KCkZyaSBBcHIgMjUgMTE6NTU6MjMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYywgbGFuZy1vcHRpb25zLmg6IE5ldyBvcHRpb24gLVdlZmZjKysuCgkqIGNsYXNzLmMsIGRlY2wuYywgaW5pdC5jLCB0eXBlY2suYzogTW92ZSBFZmZlY3RpdmUgQysrIHdhcm5pbmdzCgl0byAtV2VmZmMrKy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IENoYW5nZSBOT19MSU5LQUdFX0hFVVJJU1RJQ1MKCXRvIE1VTFRJUExFX1NZTUJPTF9TUEFDRVMuCgpXZWQgQXByIDIzIDE4OjA2OjUwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rLCBnZW5lcmljIGNhc2UpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9pc190aHVuay4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rLCBtYWNybyBjYXNlKTogU2V0IHVwIERFQ0xfUkVTVUxULgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvbid0IGNvbXBsYWluIGFib3V0IHJldHVybmluZyB2b2lkCgl0byB2b2lkIGluIGFuIGFydGlmaWNpYWwgZnVuY3Rpb24uCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogQ2hhbmdlIHNldHRpbmdzIG9mIFJFQURPTkxZL1ZPTEFUSUxFLCAKCWRvbid0IHNldCBERUNMX1JFU1VMVCwgc2V0IERFQ0xfQVJUSUZJQ0lBTC4KCShlbWl0X3RodW5rLCBnZW5lcmljIGNvZGUpOiBBbHNvIHNldCB1cCBERUNMX0xBTkdfU1BFQ0lGSUMuIAoKV2VkIEFwciAyMyAxNDo0MzowNiAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIHN1cG9wcnQgZm9yIHNldGptcC9sb25nam1wIGJhc2VkCglleGNlcHRpb24gaGFuZGxpbmcuCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLgoJKGV4cGFuZF9leGNlcHRpb25fYmxvY2tzKTogTGlrZXdpc2UuCgkoZXhwYW5kX3Rocm93KTogTGlrZXdpc2UuCgkqIGV4Y2VwdGlvbi5jYyAoX19kZWZhdWx0X3Rlcm1pbmF0ZSk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogVXNlIG5ldyBtZXRob2Qgb2YgZXhwciBsZXZlbAoJY2xlYW51cHMsIGluc3RlYWQgb2YgY2xlYW51cHNfdGhpc19jYWxsIGFuZCBmcmllbmRzLgoJKGVtaXRfYmFzZV9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfdmJhc2VfaW5pdF8xKTogTGlrZXdpc2UuCgkoZXhwYW5kX3ZlY19pbml0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShleHBhbmRfc3RhdGljX2luaXQpOiBMaWtld2lzZS4KCShzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoJCgkqIE1ha2UtbGFuZy5pbiAoZXhjZXB0aW9uLm8pOiBPayB0byBjb21waWxlIHdpdGggLU8gbm93LgoKCSogZGVjbC5jIChtYXliZV9idWlsZF9jbGVhbnVwXzEpOiBXZSBubyBsb25nZXIgaGF2ZSB0byB1bnNhdmUsIGFzCgl3ZSBrbm93IGl0IHdpbGwgYmUgZG9uZSBsYXRlciBieSB0aGUgYmFja2VuZC4KCgkqIGRlY2wyLmMgKGxhbmdfZl9vcHRpb25zKTogUmVtb3ZlIHN1cHBvcnQgZm9yIHNob3J0IHRlbXBzLgoJKiBsYW5nLW9wdGlvbnMuaDogTGlrZXdpc2UuCgkKV2VkIEFwciAyMyAwNDoxMjowNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhcmFyZ3NfZnVuY3Rpb25fcCk6IE5ldyBmbi4KCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBSZXBsYWNlIGJyb2tlbiBnZW5lcmljIGNvZGUgd2l0aCBjb2RlIHRvCglnZW5lcmF0ZSBhIGhlYXZ5d2VpZ2h0IHRodW5rIGZ1bmN0aW9uLgoKVHVlIEFwciAyMiAwMjo0NToxOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBwZWR3YXJuIGFib3V0IGZsb2F0aW5nLXBvaW50IHBhcm1zLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IGlubGluZSBubyBsb25nZXIgaW1wbGllcyBzdGF0aWMuCgoJKiBzcGV3LmMgKHl5bGV4KTogQWx3YXlzIHJldHVybiB0aGUgVFlQRV9ERUNMIGlmIHdlIGdvdCBhIHNjb3BlLgoKTW9uIEFwciAyMSAxNTo0MjoyNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChjaGVja19mb3Jfb3ZlcnJpZGUpOiBUaGUgc2lnbmF0dXJlIG9mIGFuIG92ZXJyaWRpbmcKCWZ1bmN0aW9uIGlzIG5vdCBjaGFuZ2VkLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBNb3ZlIHNldHRpbmcgb2YgY29udiBpbnRvIHRoZSBsb29wLgoJTm90ZTogdGhpcyBjaGFuZ2UsIGFsb25nIHdpdGggdGhlIHJlbGF0ZWQgY2hhbmdlcyBvZiB0aGUgMTh0aCB0aHJ1Cgl0aGUgMjB0aCBvZiBBcHJpbCwgZml4IGFuIGluZmluaXRlIGxvb3AgcHJvYmxlbSBpbiBjb252ZXJzaW9ucy4KClN1biBBcHIgMjAgMTY6MjQ6MjkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogUmVhbGx5IGlnbm9yZSBydmFsdWUKCWNvbnZlcnNpb25zIHdoZW4gbG9va2luZyBmb3IgYSBSRUZFUkVOQ0VfVFlQRS4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBFdmlzY2VyYXRlLCB1c2UgYnVpbGRfdW5hcnlfb3AuCgkqIGNwLXRyZWUuaCAoVFJFRV9SRUZFUkVOQ0VfRVhQUik6ICNpZiAwLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IERvbid0IHNldCBUUkVFX1JFRkVSRU5DRV9FWFBSLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogU2VlIHRocm91Z2ggYSBDT05WRVJUX0VYUFIgYXJvdW5kIHRoZQoJQUREUl9FWFBSIGZvciBvbiBhIHRlbXBvcmFyeS4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFNlZSB0aHJvdWdoIGEgQ09OVkVSVF9FWFBSIGFyb3VuZAoJdGhlIEFERFJfRVhQUiBmb3IgYSBsb2NhbCB2YXJpYWJsZS4KCkZyaSBBcHIgMTggMTI6MTE6MzMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSWYgd2UncmUgdHJ5aW5nIHRvCgljb252ZXJ0IHRvIGEgUkVGRVJFTkNFX1RZUEUsIG9ubHkgY29uc2lkZXIgbHZhbHVlIGNvbnZlcnNpb25zLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogUHJpbnQgY2FuZGlkYXRlcy4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogVHJ5IGEgdGVtcCBiaW5kaW5nIGlmIHRoZSBsdmFsdWUgY29udiBpcyBCQUQuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBCaW5kaW5nIGEgdGVtcG9yYXJ5IG9mIGEgcmVmZXJlbmNlLXJlbGF0ZWQgdHlwZQoJaXMgQkFELgoKVGh1IEFwciAxNyAxNDozNzoyMiAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBpbmMvdHlwZWluZm8gKHR5cGVfaW5mbzo6YmVmb3JlKTogQWRkIGN2LXF1YWxpZmllci1zZXEuCgkqIHRpbmZvMi5jYyAodHlwZV9pbmZvOjpiZWZvcmUpOiBMaWtld2lzZS4KCk1vbiBBcHIgMTQgMTI6Mzg6MTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogT29wcy4KCkZyaSBBcHIgMTEgMDI6MTg6MzAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogVHJ5IHRvIGZpbmQgYSByZWZlcmVuY2UgY29udmVyc2lvbgoJYmVmb3JlIGJpbmRpbmcgYSBjb25zdCByZWZlcmVuY2UgdG8gYSB0ZW1wb3JhcnkuCgpXZWQgQXByICAyIDEyOjUxOjM2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYyAoX19kZWZhdWx0X3VuZXhwZWN0ZWQpOiBDYWxsIHRlcm1pbmF0ZSBieSBkZWZhdWx0LAoJc28gdGhhdCBpZiB0aGUgdXNlciBvdmVycmlkZXMgdGVybWluYXRlLCB0aGUgY29ycmVjdCBmdW5jdGlvbiB3aWxsCgliZSBjYWxsZWQuCgkKV2VkIE1hciAxOSAxNDoxNDo0NSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChsZWZ0X2N1cmx5KTogQXZvaWQgdHJ5aW5nIHRvIHVzZSBhbnkgZmllbGRzIG9mCgllcnJvcl9tYXJrX25vZGUsIGFzIHRoZXJlIGFyZW4ndCBhbnkuCgpUaHUgTWFyIDEzIDE2OjMzOjIyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQXZvaWQgYnJlYWtpbmcgb24gb3ZlcmxvYWRlZCBtZXRob2RzCglhcyBkZWZhdWx0IGFyZ3VtZW50cy4KCldlZCBNYXIgMTIgMTM6NTU6MTAgMTk5NyAgSGFucy1QZXRlciBOaWxzc29uICA8SGFucy1QZXRlci5OaWxzc29uQGF4aXMuc2U+CgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBJbml0aWFsaXplIHRoZSB2YXJpYWJsZSAiZHVtbXkiLgoKTW9uIE1hciAxMCAxNToxMzoxNCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IE1ha2Ugc3VyZSBUWVBFIGlzbid0IGFuIGVycm9yX21hcmtfbm9kZQoJYmVmb3JlIHdlIHRyeSB0byB1c2UgVFlQRV9TSVpFIGFuZCBUUkVFX0NPTlNUQU5UIG9uIGl0LgoKRnJpIE1hciAgNyAxMzoxOTozNiAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGNvbXBfcHRyX3R0eXBlcywgbW9yZV9zcGVjaWFsaXplZCk6IEFkZCBkZWNsLgoJKGRlYnVnX2JpbmZvKTogRGVsZXRlIGRlY2wsIG5vdCBuZWVkZWQuCgoJKiB0cmVlLmMgKGZuYWRkcl9mcm9tX3Z0YWJsZV9lbnRyeSwgZnVuY3Rpb25fYXJnX2NoYWluLAoJcHJvbW90ZXNfdG9fYWdncl90eXBlKTogRGVsZXRlIGZucy4KCSogY3AtdHJlZS5oIChGTkFERFJfRlJPTV9WVEFCTEVfRU5UUlksCglTRVRfRk5BRERSX0ZST01fVlRBQkxFX0VOVFJZLCBGVU5DVElPTl9BUkdfQ0hBSU4sCglQUk9NT1RFU19UT19BR0dSX1RZUEUpOiBEZWxldGUgYWx0ZXJuYXRlcyB0byAjaWYgMS4KCgkqIGRlY2wuYyAocGVuZGluZ19pbnZhbGlkX3hyZWZ7LF9maWxlLF9saW5lfSk6IERlbGV0ZSB1bnVzZWQgdmFycy4KCgkqIGZyaWVuZC5jIChpc19mcmllbmRfdHlwZSk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChpc19mcmllbmRfdHlwZSk6IERlbGV0ZSBkZWNsLgoKCSogZGVjbC5jIChvcmlnaW5hbF9yZXN1bHRfcnR4LCBkb3VibGVfZnR5cGVfZG91YmxlLAoJZG91YmxlX2Z0eXBlX2RvdWJsZV9kb3VibGUsIGludF9mdHlwZV9pbnQsIGxvbmdfZnR5cGVfbG9uZywKCWZsb2F0X2Z0eXBlX2Zsb2F0LCBsZG91YmxlX2Z0eXBlX2xkb3VibGUsIGxhc3RfZHRvcl9pbnNuKTogTWFrZSBzdGF0aWMuCgkqIHR5cGVjay5jIChvcmlnaW5hbF9yZXN1bHRfcnR4LCB3YXJuX3N5bnRoKTogRGVsZXRlIGV4dGVybiBkZWNscy4KCgkqIGRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2x7LF90b3BfbGV2ZWx9KTogTWFrZSBzdGF0aWMsIGFkZGluZwoJZndkIGRlY2xzLgoJKiBjcC10cmVlLmggKHB1c2hfb3ZlcmxvYWRlZF9kZWNseyxfdG9wX2xldmVsfSk6IERlbGV0ZSBkZWNscy4KCgkqIGRlY2wuYyAocHVzaGRlY2xfbm9uY2xhc3NfbGV2ZWwpOiAjaWYgMCwgdW51c2VkLgoJKiBjcC10cmVlLmggKHB1c2hkZWNsX25vbmNsYXNzX2xldmVsKTogI2lmIDAgZGVjbC4KCgkqIGxleC5jIChyZWluaXRfbGFuZ19zcGVjaWZpYyk6ICNpZiAwLCB1bnVzZWQuCgkqIGNwLXRyZWUuaCAocmVpbml0X2xhbmdfc3BlY2lmaWMpOiAjaWYgMCBkZWNsLgoKCSogZGVjbC5jIChyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IE1ha2Ugc3RhdGljLCBhZGRpbmcgZndkIGRlY2wuCgkqIGNwLXRyZWUuaCAocmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBEZWxldGUgZGVjbC4KCgkqIGNsYXNzLmMgKHJvb3RfbGFuZ19jb250ZXh0X3ApOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAocm9vdF9sYW5nX2NvbnRleHRfcCk6IERlbGV0ZSBkZWNsLgoKCSogZGVjbC5jIChzZXRfY3VycmVudF9sZXZlbF90YWdzX3RyYW5zcGFyZW5jeSk6ICNpZiAwLCB1bnVzZWQuCgkqIGNwLXRyZWUuaCAoc2V0X2N1cnJlbnRfbGV2ZWxfdGFnc190cmFuc3BhcmVuY3kpOiAjaWYgMCBkZWNsLgoKCSogbGV4LmMgKHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoc2V0X3ZhcmRlY2xfaW50ZXJmYWNlX2luZm8pOiBEZWxldGUgZGVjbC4KCgkqIGNhbGwuYyAoZmluZF9zY29wZWRfdHlwZSk6IE1ha2Ugc3RhdGljLgoJKiBjcC10cmVlLmggKGZpbmRfc2NvcGVkX3R5cGUpOiBEZWxldGUgZGVjbC4KCgkqIHNlYXJjaC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fdmJhc2UpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjb252ZXJ0X3BvaW50ZXJfdG9fdmJhc2UpOiBEZWxldGUgZGVjbC4KCgkqIGRlY2wuYyAoY29uc3RfcHRyX3R5cGVfbm9kZSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGNvbnN0X3B0cl90eXBlX25vZGUpOiBEZWxldGUgZGVjbC4KCgkqIHR5cGVjay5jIChjb21tb25fYmFzZV90eXBlKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoY29tbW9uX2Jhc2VfdHlwZXMpOiBEZWxldGUgZXJyb25lb3VzIGRlY2wuCgoJKiBwdC5jIChjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoY2xhc3N0eXBlX21hbmdsZWRfbmFtZSk6IERlbGV0ZSBkZWNsLgoKCSogbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjaGVja19uZXdsaW5lKTogRGVsZXRlIGRlY2wuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9hcnJheV9yZWYpOiBEZWxldGUgZm4sIHNhbWUgaWRlYSBhcwoJZ3Jva19hcnJheV9kZWNsLgoJKiBjcC10cmVlLmggKGJ1aWxkX3hfYXJyYXlfcmVmKTogRGVsZXRlIGRlY2wuCgoJKiBsZXguYyAoY29weV9kZWNsX2xhbmdfc3BlY2lmaWMpOiBEZWxldGUgZm4sIHNhbWUgaWRlYSBhcwoJY29weV9sYW5nX2RlY2wuCgkqIGNwLXRyZWUuaCAoY29weV9kZWNsX2xhbmdfc3BlY2lmaWMpOiAjaWYgMCBkZWNsLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfdnRhYmxlX2VudHJ5KTogRGVsZXRlIGRlY2wuCgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wb2ludGVyKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfdmJhc2VfcG9pbnRlcik6IERlbGV0ZSBkZWNsLgoKCSogc2lnLmMgKGJ1aWxkX3NwdHJfcmVmKTogQWRkIGZvcndhcmQgZGVjbCBhbmQgbWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfc3B0cl9yZWYpOiBEZWxldGUgZGVjbC4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogQWRkIGZvcndhcmQgZGVjbCBhbmQgbWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogRGVsZXRlIGRlY2wuCgoJKiBjYWxsLmMgKGJ1aWxkX29iamVjdF9jYWxsKTogTWFrZSBzdGF0aWMuCgkqIGNsYXNzLmMgKGNoZWNrX2Zvcl9vdmVycmlkZSwgY29tcGxldGVfdHlwZV9wLCBtYXJrX292ZXJyaWRlcnMpOgoJTGlrZXdpc2UuCgkqIGRlY2wuYyAoY3BfZnVuY3Rpb25fY2hhaW4pOiBMaWtld2lzZS4KCSogbGV4LmMgKHNldF90eXBlZGVjbF9pbnRlcmZhY2VfaW5mbywgcmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6CglMaWtld2lzZS4KCSogcHQuYyAoY29tcF90ZW1wbGF0ZV9hcmdzLCBnZXRfY2xhc3NfYmluZGluZ3MsIHB1c2hfdGluc3RfbGV2ZWwpOgoJTGlrZXdpc2UuCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb21wX3B0cl90dHlwZXNfe2NvbnN0LHJlYWwscmVpbnRlcnByZXR9KTogTGlrZXdpc2UuCgkoY29tcF90YXJnZXRfcGFybXMpOiBMaWtld2lzZS4KCgkqIGluaXQuYyAoYnVpbGRfYnVpbHRpbl9jYWxsKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfYnVpbHRpbl9jYWxsKTogRGVsZXRlIGRlY2wuCgoJKiB0eXBlY2suYyAoYmluYXJ5X29wX2Vycm9yKTogRGVsZXRlIGRlY2wuCgkqIGNwLXRyZWUuaCAoYmluYXJ5X29wX2Vycm9yKTogTGlrZXdpc2UuCgpUaHUgTWFyICA2IDE2OjEzOjUyIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDb21wYXJlIGFnYWluc3QgZXJyb3JfbWFya19ub2RlCglkaXJlY3RseSwgcmF0aGVyIHRoYW4gdGhlIEVSUk9SX01BUksgdHJlZSBjb2RlLgoJKiBjdnQuYyAoY3BfY29udmVydCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHByaW50X2JpbmRpbmdfbGV2ZWwpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBMaWtld2lzZS4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkoZGVjbF9jb25zdGFudF92YWx1ZSk6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBMaWtld2lzZS4KCShoYWNrX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3QgZGVjbCBUWVBFIGFzIHJlZ2lzdGVyIHRyZWUuCgpTdW4gTWFyICAyIDAyOjU0OjM2IDE5OTcgIEJydW5vIEhhaWJsZSAgPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgoJKiBwdC5jICh1bmlmeSk6IFN0cmlwIE5PUF9FWFBSIHdyYXBwZXJzIGJlZm9yZSB1bmlmeWluZyBpbnRlZ2VyIHZhbHVlcy4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEFkZCBuZXcgZXJyb3IgbWVzc2FnZS4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEltcGxlbWVudCBuYW1lIG1hbmdsaW5nIGZvcgoJZmxvYXRpbmctcG9pbnQgdGVtcGxhdGUgYXJndW1lbnRzLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2ludCwgaWNhdCwgZGljYXQpOiBGaXggbWFuZ2xpbmcgb2YgdGVtcGxhdGUKCWFyZ3VtZW50cyB3aG9zZSBhYnNvbHV0ZSB2YWx1ZSBkb2Vzbid0IGZpdCBpbiBhIHNpZ25lZCB3b3JkLgoKTW9uIE1hciAgMyAxMjoxNDo1NCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYzogTmV3IGZpbGU7IHB1dCBhbGwgb2YgdGhlIGZyaWVuZCBzdHVmZiBpbiBoZXJlLgoJKiBpbml0LmM6IEluc3RlYWQgb2YgaGVyZS4KCSogTWFrZWZpbGUuaW4gKENYWF9PQkpTKTogQWRkIGZyaWVuZC5vLgoJKGZyaWVuZC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IEFkZCAkKHNyY2RpcikvY3AvZnJpZW5kLmMuCgpTdW4gTWFyICAyIDExOjA0OjQzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogQ29tcGxhaW4gaWYgdGhlIHNjb3BlIGlzbid0IGEKCWJhc2UuCgpXZWQgRmViIDI2IDExOjMxOjA2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGxlZnRfY3VybHkpOiBEb24ndCBjcmFzaCBvbiBlcnJvbmVvdXMgdHlwZS4KCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogRml4IHR5cGUgb2YgcmVmLgoKVHVlIEZlYiAyNSAxMjo0MTo0OCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X3ZiYXNlXzEpOiBSZW5hbWVkIGZyb20gZ2V0X3ZiYXNlLgoJKGdldF92YmFzZSk6IFdyYXBwZXIsIG5vdyBub24tc3RhdGljLgoJKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IE5vdyBzdGF0aWMuCgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IEFjY2VwdCBhIGJpbmZvIGZvciBCQVNFVFlQRS4KCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBQYXNzIG9uZS4KCShidWlsZF9wYXJ0aWFsX2NsZWFudXBfZm9yKTogVXNlIGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbC4KCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBQYXNzIGEgYmluZm8uCgpNb24gRmViIDI0IDE1OjAwOjEyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogT25seSBzeW50aGVzaXplIG5vbi10cml2aWFsIGNvcHkgY3RvcnMuCgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogTG9zZSBvdGhlciByZWZlcmVuY2UgdG8gZmxhZy4KCgkqIGNhbGwuYyAoYnVpbGRfZmllbGRfY2FsbCk6IERvbid0IGxvb2sgZm9yIFtjZF10b3JfaWRlbnRpZmllci4KCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IFJlbW92ZSBtZWFuaW5nbGVzcyB1c2Ugb2YKCUxPT0tVUF9IQVNfSU5fQ0hBUkdFLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwgaW5zdGVhZAoJb2YgYnVpbGRfZGVsZXRlIGZvciBydW5uaW5nIHZiYXNlIGR0b3JzLgoJKiBpbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IENhbGwgb3ZlcmxvYWQgcmVzb2x1dGlvbiBjb2RlIGluc3RlYWQgb2YKCWR1cGxpY2F0aW5nIGl0IGJhZGx5LgoKVGh1IEZlYiAyMCAxNToxMjoxNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENhbGwgbWFya191c2VkIGJlZm9yZSB0cnlpbmcgdG8gZWxpZGUKCXRoZSBjYWxsLgoKCSogZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBEb24ndCBzZXQgREVDTF9BUlRJRklDSUFMLgoKV2VkIEZlYiAxOSAxMToxODo1MyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBBbHdheXMgcGVkd2FybiBmb3IgYSBjYXN0IHRvCglub24tcmVmZXJlbmNlIHVzZWQgYXMgYW4gbHZhbHVlLgoKV2VkIEZlYiAxOSAxMDozNTozNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogQ29udmVydCBmcm9tIDAgdG8gYSBwbWYgcHJvcGVybHkuCgpUdWUgRmViIDE4IDE1OjQwOjU3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGhhbmRsZXIpOiBGaXggdGVtcGxhdGUgdHlwby4KClN1biBGZWIgMTYgMDI6MTI6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAobGFuZ19kZWNsX25hbWUpOiBOZXcgZm4uCgkqIHRyZWUuYyAobGFuZ19wcmludGFibGVfbmFtZSk6IFVzZSBpdC4KCkZyaSBGZWIgMTQgMTY6NTc6MDUgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZysrc3BlYy5jOiBJbmNsdWRlIGNvbmZpZy5oIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGJ6ZXJvICNkZWZpbmVzCglmcm9tIHRoZSBjb25maWcgZmlsZS4KClR1ZSBGZWIgMTEgMTM6NTA6NDggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogbmV3MS5jYzogSW5jbHVkZSBhIGRlY2xhcmF0aW9uIGZvciBtYWxsb2MsIHRvIGF2b2lkIHdhcm5pbmcsIGFuZAoJYXZvaWQgbG9zc2luZyBvbiBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBvbmUgKG9uZXMgdGhhdCBkZWZpbmUgbWFsbG9jCglpbiB4bS5oKS4KCk1vbiBGZWIgMTAgMjI6NTE6MTMgMTk5NyAgQnJ1bm8gSGFpYmxlCTxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogZGVjbDIuYyAobWF4X3RpbnN0X2RlcHRoKTogTmV3IHZhcmlhYmxlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFBhcnNlICItZnRlbXBsYXRlLWRlcHRoLU5OIiBjb21tYW5kIGxpbmUKCW9wdGlvbi4KCSogcHQuYyAobWF4X3RpbnN0X2RlcHRoKTogVmFyaWFibGUgbW92ZWQuCgkqIGxhbmctb3B0aW9ucy5oOiBEZWNsYXJlICItZnRlbXBsYXRlLWRlcHRoLU5OIiBjb21tYW5kIGxpbmUgb3B0aW9uCglhcyBsZWdhbC4KCkZyaSBGZWIgIDcgMTU6NDM6MzQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IEFsbG93IGEgYmFzZSBjbGFzcyB0aGF0IGRlcGVuZHMgb24KCXRlbXBsYXRlIHBhcm1zIHRvIGJlIGluY29tcGxldGUuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IFN1cHBvcnQgdHlwZWlkKHR5cGUpLgoJKiBydHRpLmMgKGdldF90eXBlaWQpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCShleHBhbmRfc2lfZGVzYywgZXhwYW5kX2NsYXNzX2Rlc2MpOiBGaXggc3RyaW5nIGxlbmd0aC4KCShleHBhbmRfcHRyX2Rlc2MsIGV4cGFuZF9hdHRyX2Rlc2MsIGV4cGFuZF9nZW5lcmljX2Rlc2MpOiBMaWtld2lzZS4KClR1ZSBGZWIgIDQgMTE6Mjg6MjQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodW5pZnksIGNhc2UgVEVNUExBVEVfQ09OU1RfUEFSTSk6IFVzZSBjcF90cmVlX2VxdWFsLgoKCSogcHQuYyAodHN1YnN0KTogUHV0IGl0IGJhY2sgZm9yIC1mbm8tYW5zaS1vdmVybG9hZGluZy4KCk1vbiBGZWIgIDMgMTg6NDE6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBMb3NlIG9ic29sZXRlIGNvZGUgdGhhdAoJc21hc2hlcyB0b2dldGhlciB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBsYXRlIGRlY2xzIG9mIHRoZSBzYW1lCglzaWduYXR1cmUuCgpUaHUgSmFuIDMwIDE5OjE4OjAwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IERvbid0IHJlY3Vyc2UgZm9yIHRoZSB0eXBlIG9mIGEgVFlQRU5BTUVfVFlQRS4KCldlZCBKYW4gMjkgMTE6NDA6MzUgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBOZXh0IHJvdXRlLCBwZWR3YXJuIGFib3V0IGRpZmZlcmVudAoJZXhjZXB0aW9ucyBpZiAtcGVkYW50aWMgKm9yKiBvbGRkZWNsICFERUNMX0lOX1NZU1RFTV9IRUFERVIuCgpUdWUgSmFuIDI4IDIwOjQzOjI5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoSEFTX0RFRkFVTFRfSU1QTEVNRU5UQVRJT04pOiBEZWxldGUgbWFjcm8uCgkoc3RydWN0IGxhbmdfdHlwZSk6IERlbGV0ZSBoYXNfZGVmYXVsdF9pbXBsZW1lbnRhdGlvbiBtZW1iZXIuCglJbmNyZWFzZSBkdW1teSB0byAyMS4KCSogZGVjbC5jIChzdGFydF9tZXRob2QpOiBEZWxldGUgdXNhZ2UuCgoJKiBjcC10cmVlLmggKGJ1aWxkX2NhbGwsIG51bGxfcHRyX2NzdF9wLCBpbl9mdW5jdGlvbl9wLAoJc3RvcmVfYWZ0ZXJfcGFybXMsIHN0YXJ0X2RlY2xfMSwgYXV0b19mdW5jdGlvbik6IEFkZCBkZWNscy4KCShnZXRfYXJnbGlzdF9sZW5faW5fYnl0ZXMsIGRlY2xhcmVfaW1wbGljaXRfZXhjZXB0aW9uLAoJaGF2ZV9leGNlcHRpb25zX3AsIG1ha2VfdHlwZV9kZWNsLCB0eXBlZGVjbF9mb3JfdGFnLAoJc3RvcmVfaW5fcGFybXMsIHBvcF9pbXBsaWNpdF90cnlfYmxvY2tzLCBwdXNoX2V4Y2VwdGlvbl9jbGVhbnVwLAoJYnVpbGRfY29tcG9uZW50X3R5cGVfZXhwciwgY3BsdXNfZXhjZXB0aW9uX25hbWUsCgl7bWFrZSxjbGVhcn1fYW5vbl9wYXJtX25hbWUsIGRvbnRfc2VlX3R5cGVuYW1lKTogUmVtb3ZlZCBkZWNscy4KCSogY2FsbC5jIChidWlsZF90aGlzKTogTWFrZSBzdGF0aWMuCgkoaXNfY29tcGxldGUpOiBMaWtld2lzZS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBMaWtld2lzZS4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoc3RyaXBfdG9wX3F1YWxzKTogTGlrZXdpc2UuCgkobm9uX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbnYpOiBMaWtld2lzZS4KCSh1c2VyX2hhcnNobmVzcyk6IExpa2V3aXNlLgoJKHJhbmtfZm9yX2lkZWFsKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoc3RhcnRfZGVjbF8xKTogRGVsZXRlIGZvcndhcmQgZGVjbC4KCShwdXNoX2RlY2xfbGV2ZWwpOiBNYWtlIHN0YXRpYy4KCShyZXN1bWVfYmluZGluZ19sZXZlbCk6IE1ha2Ugc3RhdGljLgoJKG5hbWVzcGFjZV9iaW5kaW5nc19wKTogTWFrZSBzdGF0aWMuCgkoZGVjbGFyZV9uYW1lc3BhY2VfbGV2ZWwpOiBNYWtlIHN0YXRpYy4KCShsb29rdXBfbmFtZV9yZWFsKTogTWFrZSBzdGF0aWMuCgkoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBzdGF0aWMuICBUYWtlIHJlZ2lzdGVyIG9mZiBORVdERUNMIGFuZAoJT0xEREVDTCBwYXJtIGRlY2xzLgoJKiBkZWNsMi5jIChnZXRfc2VudHJ5KTogTWFrZSBzdGF0aWMuCgkodGVtcF9uYW1lX3ApOiBEZWxldGUgZm4uCgkqIGV4Y2VwdC5jIChhdXRvX2Z1bmN0aW9uKTogRGVsZXRlIGRlY2wuCgkqIGxleC5jIChoYW5kbGVfe2NwLHN5c3Z9X3ByYWdtYSk6IE1ha2Ugc3RhdGljLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSkgW0hBTkRMRV9TWVNWX1BSQUdNQV06IEFkZCBmb3J3YXJkIGRlY2wuCgkqIG1ldGhvZC5jIChkb19idWlsZF97Y29weV9jb25zdHJ1Y3Rvcixhc3NpZ25fcmVmfSk6IE1ha2Ugc3RhdGljLgoJKiBwdC5jICh0c3Vic3RfZXhwcl92YWx1ZXMpOiBNYWtlIHN0YXRpYy4KCSogcnR0aS5jIChjb21iaW5lX3N0cmluZ3MpOiBEZWxldGUgZGVjbC4KClR1ZSBKYW4gMjggMTY6NDA6NDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogSGFuZGxlIGdldHRpbmcgYSB0eXBlZGVmLgoKCSogY2FsbC5jIChidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IENvbXBsYWluIGFib3V0IHZvaWQgYXJnLgoKVHVlIEphbiAyOCAxNToyNTowOSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEdpdmUgcGVkd2FybiBvZiBkaWZmZXJlbnQgZXhjZXB0aW9ucwoJaWYgLXBlZGFudGljLCBpbnN0ZWFkIG9mIG9sZGRlY2wgIURFQ0xfSU5fU1lTVEVNX0hFQURFUi4KCk1vbiBKYW4gMjcgMTk6MjE6MjkgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IERvbid0IGV4cGFuZCB0aGUgY2xlYW51cCB0cmVlIGhlcmUsCglzaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoZSBydGwgb3V0LiAgRml4ZXMgcHJvYmxlbSB3aXRoCgktZyAtTyBvbiBTUEFSQy4KCk1vbiBKYW4gMjcgMTY6MjQ6MzUgMTk5NyAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+CgoJKiBNYWtlLWxhbmcuaW46IEFkZCAkKGV4ZWV4dCkgYXMgbmVjZXNzYXJ5LgoKTW9uIEphbiAyNyAxMzoyMDozOSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChoYW5kbGVyX3NlcSk6IE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY2F0Y2ggY2xhdXNlLgoKU2F0IEphbiAyNSAxMjowMDowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFJlc3RvcmUgPzogaGFjay4KCgkqIGRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTW9yZSB3YXJuaW5ncy4KClNhdCBKYW4gMjUgMDg6NTA6MDMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbiBzZWNvbmQgdGhvdWdodCwgZG8gaXQgYXMgYSBwZWR3YXJuCglzdGlsbCBidXQgb25seSBpZiAhREVDTF9JTl9TWVNURU1fSEVBREVSIChvbGRkZWNsKS4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU2NhbGUgYmFjayB0byBhIHdhcm5pbmcsIGFuZCBvbmx5IGRvCgknZW0gaWYgLXBlZGFudGljLgoKRnJpIEphbiAyNCAxNzo1Mjo1NCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IHBlZHdhcm4gbWlzbWF0Y2hlZCBleGNlcHRpb24KCXNwZWNpZmljYXRpb25zLgoKVGh1IEphbiAyMyAxODoxODo1NCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IERvbid0IGRpc3BsYXkgdGhlIGludmlzaWJsZQoJYXJndW1lbnQgZm9yIGNvbnRyb2xsaW5nIHZpcnR1YWwgYmFzZXMuCgpUaHUgSmFuIDIzIDE2OjQ4OjEwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIG5ldzogQWRkIG5vdGhyb3cgbmV3IGFuZCBkZWxldGUsIGJhZF9hbGxvYyBhbmQgdGhyb3cgc3BlY2lmaWNhdGlvbnMKCWZvciBkZWxldGUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgdGhyb3cgc3BlY2lmaWNhdGlvbiBmb3IgZGVsZXRlLgoJKiBuZXcuY2MgKG5vdGhyb3cpOiBEZWZpbmUuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogUmVtb3Zpbmcgd2FybmluZyB0aGF0IHRocm93IGFuZCBmcmllbmRzIGFyZQoJa2V5d29yZHMuCgkqIG5ldzEuY2MgKG9wZXJhdG9yIG5ldyAoc2l6ZV90IHN6LCBjb25zdCBub3Rocm93X3QmKSk6IERlZmluZS4KCSogbmV3Mi5jYyAob3BlcmF0b3IgbmV3W10gKHNpemVfdCBzeiwgY29uc3Qgbm90aHJvd190Jik6IERlZmluZS4KCSogTWFrZS1sYW5nLmluOiBBZGQgbmV3ezEsMn0ue2NjLG99LgoKVGh1IEphbiAyMyAxNjozOTowNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogRml4IHJldHVybiB0eXBlIG9mIHN5bnRoIG9wPS4KCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBBZGQgd2FybmluZ3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtYmVycwoJYW5kIGJhc2VzLgoKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IEFkZCB3YXJuaW5nIGZvciBub24tcG9seW1vcnBoaWMgdHlwZQoJd2l0aCBkZXN0cnVjdG9yIHVzZWQgYXMgYmFzZSB0eXBlLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBBZGQgd2FybmluZyBmb3Igb3A9IHJldHVybmluZyB2b2lkLgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQWRkIHdhcm5pbmcgZm9yIG9wPSByZXR1cm5pbmcgYW55dGhpbmcKCW90aGVyIHRoYW4gKnRoaXMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBZGQgd2FybmluZyBmb3IgY2xhc3Mgd2l0aCBwb2ludGVycwoJYnV0IG5vdCBjb3B5IGN0b3Igb3IgY29weSBvcD0uCgoJKiBjcC10cmVlLmggKFRJX1BFTkRJTkdfVEVNUExBVEVfRkxBRyk6IE5ldyBtYWNyby4KCSogcHQuYyAoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBVc2UgaXQgaW5zdGVhZCBvZiBMQU5HX0ZMQUdfMC4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IElmIC1mZXh0ZXJuYWwtdGVtcGxhdGVzLCBhZGQgdGhpcwoJaW5zdGFudGlhdGlvbiB0byBwZW5kaW5nX3RlbXBsYXRlcy4KCgkqIGRlY2wyLmMgKGNvcHlfYXNzaWdubWVudF9hcmdfcCk6IERpc2FibGUgb2xkIGhhY2sgdG8gc3VwcG9ydAoJQm9vY2ggY29tcG9uZW50cy4KClR1ZSBKYW4gMjEgMTg6MzI6MDQgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBQZWR3YXJuIGVudW0gdG8gcG9pbnRlciBjb252ZXJzaW9ucy4KCk1vbiBKYW4gMjAgMTc6NTk6NTEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogSGFuZGxlIGdldHRpbmcgcmVmZXJlbmNlcy4gIFRhY2sKCW9uIFJWQUxVRV9DT05WIGhlcmUuICBEbyBpdCBmb3Igbm9uLWNsYXNzIHR5cGVzLCB0b28uCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBQYXNzIHJlZmVyZW5jZXMgdG8gc3RhbmRhcmRfY29udmVyc2lvbi4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogRGlzYWJsZSBvbmUgPzoga2x1ZGdlLgoJKGNvbnZlcnRfbGlrZSk6IEhhbmRsZSBSVkFMVUVfQ09OVnMgZm9yIG5vbi1jbGFzcyB0eXBlcy4KCShqb3VzdCk6IERpc2FibGUgdGhlIG90aGVyID86IGtsdWRnZS4KCk1vbiBKYW4gMjAgMTQ6NTM6MTMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBjb2RlIHRvIGJ1aWxkIHVwIGNvbW1vbgoJZnVuY3Rpb24gdHlwZXMgYmVmb3JlaGFuZCwgdG8gYXZvaWQgY3JlYXRpb24gdGhlbiByZW1vdmFsIG9mCgl0aGluZ3MgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZS4KCk1vbiBKYW4gMjAgMTQ6NDM6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBBbHNvIHplcm8gb3V0IERFQ0xfSU5DT01JTkdfUlRMIGZvcgoJdGhlIGFyZ3VtZW50cy4KCgkqIGVycm9yLmMgKGR1bXBfZXhwciwgVEVNUExBVEVfQ09OU1RfUEFSTSk6IERvbid0IHJlcXVpcmUKCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMuCgpGcmkgSmFuIDE3IDEwOjI1OjQyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBEb24ndCByZXR1cm4gYSBmdW5jdGlvbiwgY2hlY2sgd2FudF90eXBlLgoKVGh1IEphbiAxNiAxODoxNDozNSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IE1ha2Ugc3VyZSBQTEFDRU1FTlQgaGFzIGEgdHlwZS4KClRodSBKYW4gMTYgMTc6NDA6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBTdXBwb3J0IG5ldyAobm90aHJvdykuCgpXZWQgSmFuIDE1IDEyOjM4OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBBbHNvIGRvIHB1c2hfdG9fdG9wX2xldmVsIGJlZm9yZSBzZXR0aW5nCgl1cCBERUNMX0lOSVRJQUwuCgoJKiBjcC10cmVlLmggKFBBUk1fREVGQVVMVF9GUk9NX1RFTVBMQVRFKTogTmV3IG1hY3JvLgoJKiBwdC5jICh0c3Vic3QpOiBEZWZlciBpbnN0YW50aWF0aW9uIG9mIGRlZmF1bHQgYXJncy4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBVbnRpbCBoZXJlLgoKV2VkIEphbiAxNSAxMDowODoxMCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogTWFrZSBzdXJlIHdlIGhhdmUgYW4KCUlERU5USUZJRVJfQ0xBU1NfVkFMVUUgYmVmb3JlIHdlIHRyeSB0byByZXR1cm4gaXQuCgpUaHUgSmFuICA5IDA3OjE5OjAxIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGUgdW51c2VkIHZhciBQQVJNLgoJKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogRGVsZXRlIHVudXNlZCB2YXIgUC4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCSogZGVjbC5jIChidWlsdGluX3R5cGVfdGRlc2NzX3thcnIsIGxlbiwgbWF4fSk6ICNpZiAwIG91dCBzdGF0aWMKCXZhciBkZWZpbml0aW9ucywgd2hpY2ggYXJlIG5ldmVyIHVzZWQuCgkoc2hhZG93X3RhZyk6IERlbGV0ZSB1bnVzZWQgdmFyIEZOLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogRGVsZXRlIHVudXNlZCB2YXIgT1JJR0lOQUxfVEFSR0VULgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IERlbGV0ZSB1bnVzZWQgdmFyIEFMTE9DX1RFTVAuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEZWxldGUgdW51c2VkIHZhciBDT05URVhULgoJKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBEZWxldGUgdW51c2VkIHZhciBOQU1FLgoJKHN5bnRoZXNpemVfbWV0aG9kKTogRGVsZXRlIHVudXNlZCB2YXIgQkFTRS4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRGVsZXRlIHVudXNlZCB2YXIgQ09ERV9UWVBFX05PREUuCgkqIHJ0dGkuYyAoYnVpbGRfaGVhZG9mKTogRGVsZXRlIHVudXNlZCB2YXIgVlBUUi4KCShnZXRfdHlwZWlkKTogRGVsZXRlIHVudXNlZCB2YXIgVC4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBEZWxldGUgdW51c2VkIHZhcnMgT1JJR19PUDEKCWFuZCBPUklHX09QMi4KCShidWlsZF9wdHJtZW1mdW5jKTogRGVsZXRlIHVudXNlZCB2YXJzIFUgYW5kIE5JTkRFWC4KCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBEZWxldGUgdW51c2VkIHZhciBCSU5GTy4KCldlZCBKYW4gIDggMTM6MDk6NTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IFVzZSBJREVOVElGSUVSX0NMQVNTX1ZBTFVFIHRvIGxvb2sgdXAKCXRoaW5ncyBpbiBhIHR5cGUgYmVpbmcgZGVmaW5lZC4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IFJldmVyc2UgdGhlIHZhbHVlcyBzbyB0aGF0IHRoZXkgYXJlIGluCgl0aGUgY29ycmVjdCBvcmRlci4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgaW5pdGlhbGl6ZQoJQklORk9fQkFTRVRZUEVTIHVudGlsIHRoZSB2ZWN0b3IgaXMgZmlsbGVkIG91dC4KCSh1bmlmeSk6IERvbid0IGFib3J0IG9uIGNvbmZsaWN0aW5nIGJpbmRpbmdzLCBqdXN0IGZhaWwuCgkoaW5zdGFudGlhdGVfZGVjbCk6IERvIHB1c2hfdGluc3RfbGV2ZWwgYmVmb3JlIGFueSB0c3Vic3RpbmcuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgZ2V0dGluZyBhCglURU1QTEFURV9DT05TVF9QQVJNIGZvciBhIHBvaW50ZXIuCgpUdWUgSmFuICA3IDE0OjAwOjU4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogRG9uJ3QgZ2l2ZSAnbm90IGEgYmFzZScgZXJyb3IgZm9yCgl0ZW1wbGF0ZXMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogQ2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wgbGF0ZXIuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJldHVybiBhIHZhbHVlLgoKCSogcGFyc2UueSAoZXh0ZW5zaW9uKTogTmV3IHJ1bGUgZm9yIF9fZXh0ZW5zaW9uX18uCgkoZXh0ZGVmLCB1bmFyeV9leHByLCBkZWNsLCBjb21wb25lbnRfZGVjbCk6IFVzZSBpdC4KClR1ZSBKYW4gIDcgMDk6MjA6MjggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYmFzZV9iaW5mbyk6IFJlbW92ZSB1bnVzZWQgYmFzZV9oYXNfdmlydHVhbCBtZW1iZXIuCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgpUdWUgRGVjIDMxIDIwOjI1OjUwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IEZpeCBib2d1cyBjb2RlIGdlbmVyYXRpb24KCXByb2JsZW0gd2hlcmUgdGhlIGdlbmVyYXRlZCBjb2RlIHVzZXMgdGhlIHdyb25nIGluZGV4IGludG8gdGhlCglydW50aW1lIGJ1aWx0IHZ0YWJsZSBvbiB0aGUgc3RhY2suICBPbGQgY29kZSBjb3VsZCBjbG9iYmVyIHJhbmRvbQoJc3RhY2sgdmFsdWVzLgoKVHVlIERlYyAzMSAxNToxNjo1NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBNYWtlIHN1cmUgdGhlIHBhcnRpYWwgRUggY2xlYW51cHMKCWxpdmUgb24gdGhlIGZ1bmN0aW9uX29ic3RhY2suCgpGcmkgRGVjIDI3IDEwOjMxOjQwIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogTWFrZS1sYW5nLmluIChnKytzcGVjLm8pOiBEb24ndCB1c2UgJDwgd2l0aCBhbiBleHBsaWNpdCB0YXJnZXQ7Cgl0aGlzIGlzbid0IHBvcnRhYmxlIHRvIHNvbWUgdmVyc2lvbnMgb2YgYG1ha2UnIChlLmcuIFNvbGFyaXMgMi41LjEpLgoKVHVlIERlYyAyNCAxMDoyNDowMyAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogQXZvaWQgQU5TSSBzdHlsZSBpbml0aWFsaXphdGlvbi4KClN1biBEZWMgMjIgMDQ6MjI6MDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogVHdlYWsgYXJnIHR5cGVzIGZvciBhIEZVTkNUSU9OX1RZUEUuCgpGcmkgRGVjIDIwIDE3OjA5OjI1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCBncm9rX3tjdG9yLG9wfV9wcm9wZXJ0aWVzLgoKRnJpIERlYyAyMCAxMjoxNzoxMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKytzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogUHV0IG1pc3NpbmcgaHlwaGVuIGluIGZyb250IG9mCglhcmd1bWVudHMgd2UgY29tcGFyZSBhZ2FpbnN0LiAgU3RhcnQgdGhlIGNvdW50IG9mIEkgYXQgMSwgbm90IDAsCglzaW5jZSBhcmd2WzBdIGlzIHN0aWxsIHRoZSBjb21tYW5kLgoKVGh1IERlYyAxOSAxMTo1Mzo1NyAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IEFjY2VwdCAuY3AgYXMgYW4gQysrIGV4dGVuc2lvbi4KCk1vbiBEZWMgMTYgMjI6NDM6MzEgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChwdHJfcmVhc29uYWJseV9zaW1pbGFyKTogQWRkIGRlY2wuCgpUaHUgRGVjIDEyIDE1OjAwOjM1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBDaGFuZ2UgU1BFQ0JJVFMgcGFybSB0byBiZSB0aGUgU1BFQ0JJVFNfSU4KCXBvaW50ZXIuICBOZXcgbG9jYWwgU1BFQ0JJVFMgd2l0aCB0aGUgcGFybSdzIHZhbHVlLgoJKGdyb2tkZWNsYXJhdG9yKTogUGFzcyAmc3BlY2JpdHMgZG93bi4KCgkqIHBhcnNlLnkgKGV4cHJfbm9fY29tbWFzKTogTWFrZSBzdXJlICQkIGlzIG5vdCBhbiBlcnJvcl9tYXJrX25vZGUKCWJlZm9yZSB3ZSB0cnkgdG8gZG8gQ19TRVRfRVhQX09SSUdJTkFMX0NPREUgb24gaXQuCgoJKiBzZWFyY2guYyAoZW52ZWxvcGVfYWRkX2RlY2wpOiBDaGVjayB0aGF0IHRoZSBDTEFTU1RZUEVfQ0lEIG9mCglDT05URVhUIGlzIG5vdCAwIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIFRZUEVfREVSSVZFU19GUk9NLgoKCSogZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcl9zdG10KTogT25seSBleHBhbmQgdGhlIGV4cHIgaWYgRVhQIGlzCglub3QgYW4gZXJyb3JfbWFya19ub2RlLgoKU2F0IERlYyAgNyAxNzoyMDoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfTUFJTl9ERUNMKTogVXNlIFRZUEVfU1RVQl9ERUNMLgoJKiAqLmM6IFVzZSBUWVBFX01BSU5fREVDTCBpbnN0ZWFkIG9mIFRZUEVfTkFNRSB3aGVyZSBhcHByb3ByaWF0ZS4KCQpGcmkgRGVjICA2IDE0OjQwOjA5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBXaGVuIGdpdmluZyBhbiBhbm9ueW1vdXMgc3RydWN0IGEgbmFtZSwKCXJlcGxhY2UgVFlQRV9OQU1FIGluc3RlYWQgb2YgVFlQRV9JREVOVElGSUVSIChzbyBUWVBFX1NUVUJfREVDTCBpcwoJbm90IGFmZmVjdGVkKS4KCgkqIHR5cGVjazIuYyAoYnVpbGRfbV9jb21wb25lbnRfcmVmKTogSWYgY29tcG9uZW50IGlzIGEgcG9pbnRlcgoJdG8gZGF0YSBtZW1iZXIsIHJlc29sdmUgdGhlIE9GRlNFVF9SRUYgbm93LgoKCSogY2FsbC5jIChjb252ZXJ0X2xpa2UpOiBEb24ndCBnbyBpbnRvIGluZmluaXRlIHJlY3Vyc2lvbi4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSB0c3Vic3RfZXhwciBmb3Igbm9uLXR5cGUgYXJncy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFNldCBERUNMX0FSVElGSUNJQUwgb24gdGhlIHZwdHIuCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IEFuZCBvbiB0aGUgdmJhc2UgcHRyLgoKVGh1IERlYyAgNSAwMjoxMToyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKEJPT0xfVFlQRV9TSVpFKTogRGVmaW5lIGluIHRlcm1zIG9mIFBPSU5URVJfU0laRSBvcgoJQ0hBUl9UWVBFX1NJWkUgc28gYm9vbCBpcyBhbHdheXMgdGhlIHNhbWUgc2l6ZSBhcyBhbm90aGVyIHR5cGUuCgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBTZXQgREVDTF9JR05PUkVEX1AgZm9yIERXQVJGLCB0b28uCgpUdWUgRGVjICAzIDIzOjE4OjM3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogUmVtb3ZlIHN5bnRoZXNpemVkIG1ldGhvZHMgZnJvbQoJVFlQRV9NRVRIT0RTIG9mIGFuIGFub255bW91cyB1bmlvbiwgY29tcGxhaW4gYWJvdXQgbWVtYmVyCglmdW5jdGlvbnMuCgkqIGRlY2wuYyAoc2hhZG93X3RhZyk6IFdpcGUgb3V0IG1lbW9yeSBvZiBzeW50aGVzaXplZCBtZXRob2RzIGluCglhbm9ueW1vdXMgdW5pb25zLgoJKGZpbmlzaF9mdW5jdGlvbik6IEp1c3QgY2xlYXIgdGhlIERFQ0xfUlRMIG9mIG91ciBhcmd1bWVudHMuCgpGcmkgTm92IDI5IDIxOjU0OjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRW1pdCBEV0FSRiBkZWJ1Z2dpbmcgaW5mbyBmb3Igc3RhdGljIGRhdGEKCW1lbWJlcnMuCgoJKiBwdC5jICh0c3Vic3QpOiBJZiB0IGlzIGEgc3R1YiBkZWNsLCByZXR1cm4gdGhlIHN0dWIgZGVjbCBmb3IgdHlwZS4KCldlZCBOb3YgMjcgMTQ6NDc6MTUgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERvbid0IGRpZSBpZiBDT01QT05FTlQgaXNuJ3QgYQoJSURFTlRJRklFUl9OT0RFLgoKV2VkIE5vdiAyNyAxNjowNToxOSAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGcrKy1jcm9zcyQoZXhlZXh0KSk6IEZpeCB0eXBvLgoKV2VkIE5vdiAyNyAwODoxNDowMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJTWFrZSB0aGUgZysrIGRyaXZlciBub3cgYmUgYSBzdGFuZGFsb25lIHByb2dyYW0sIHJhdGhlciB0aGFuIG9uZQoJdGhhdCB0cmllcyB0byBydW4gdGhlIGdjYyBkcml2ZXIgYWZ0ZXIgbXVuZ2luZyB1cCB0aGUgb3B0aW9ucy4KCSogTWFrZS1sYW5nLmluIChnKysuYywgZysrc3BlYy5vKTogTmV3IHJ1bGVzLgoJKGcrKy5vKTogTmV3IHJ1bGUsIGJhc2VkIG9uIGdjYy5vIHdpdGggLURMQU5HX1NQRUNJRklDX0RSSVZFUgoJYWRkZWQuCgkoZysrJChleGVleHQpKTogTmV3IHJ1bGUsIGJhc2VkIG9uIHhnY2MgcnVsZS4KCShnKystY3Jvc3MkKGV4ZWV4dCkpOiBOb3cganVzdCBjb3BpZXMgZysrJChleGVleHQpIG92ZXIuCgkqIGcrK3NwZWMuYzogTmV3IGZpbGUuCgkqIGcrKy5jOiBSZW1vdmVkIGZpbGUuCgpUdWUgTm92IDI2IDE5OjAxOjA5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBBcnJhbmdlIGZvciBhbnkgdGVtcG9yYXJ5IHZhbHVlcwoJdGhhdCBoYXZlIGJlZW4ga2VlcCBpbiByZWdpc3RlcnMgdW50aWwgbm93IHRvIGJlIHB1dCBpbnRvIG1lbW9yeS4KCk1vbiBOb3YgMjUgMTU6MTY6NDEgMTk5NiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluIChjKysuc3RhZ2VbMTIzNF0pOiBEZXBlbmQgdXBvbiBzdGFnZVsxLTRdLXN0YXJ0LCBzbwoJdGhhdCBtYWtlIC1qMyBib290c3RyYXAgd29ya3MgYmV0dGVyLgoKU3VuIE5vdiAyNCAwMjowOTozOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBEbyBwdXNoZGVjbCBmb3IgYW5vbiB0YWdzLgoKVGh1IE5vdiAyMSAxNjozMDoyNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRml4IGxvZ2ljLgoJKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogQXZvaWQgdW51c2VkIHdhcm5pbmcgb24gYWRkcmVzcyBvZiBJTklUX0VYUFIuCgpXZWQgTm92IDIwIDE4OjQ3OjMxIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZysrLmMgKG1haW4pOiBNYWtlIHN1cmUgYXJnbGlzdCBoYXMgYSBmaW5hbCBOVUxMIGVudHJ5LiAgQWRkCglQRVhFQ1VURV9MQVNUIHRvIHRoZSBmbGFncyBwYXNzZWQgdG8gcGV4ZWN1dGUsIGFzIG90aGVyd2lzZQoJc3RkaW4vc3Rkb3V0IG9mIHRoZSBpbnZva2VkIHByb2dyYW0gYXJlIHJlZGlyZWN0ZWQgdG8KCW5vd2hlcmVzdmlsbGUuCgpUdWUgTm92IDE5IDE2OjEyOjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW1wbGljaXRseV9kZWNsYXJlKTogU2V0IERFQ0xfQVJUSUZJQ0lBTC4KClR1ZSBOb3YgMTkgMTU6NDg6MTkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBIYW5kbGUgb2JqLnZmbiBiZXR0ZXIuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogU2V0IFRSRUVfVFlQRSBvbiByZXN1bHQgZnJvbQoJYnVpbGRfdmZuX3JlZi4KClR1ZSBOb3YgMTkgMTM6MTQ6MzMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbHNvIGhhbmRsZSBhbmFjaHJvbmlzdGljCglpbXBsaWNpdCBjb252ZXJzaW9ucyBmcm9tICg6OiopKCkgdG8gY3Ygdm9pZCouCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBMaWtld2lzZS4KCk1vbiBOb3YgMTggMTc6MDU6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBGaXggYm9ndXMgd2FybmluZy4KCk1vbiBOb3YgMTggMTY6MTA6NDMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IEF2b2lkIHRoaW5raW5nIGEgUE9JTlRFUl9UWVBFCgkoTUVUSE9EX1RZUEUpIGlzIGEgVFlQRV9QVFJNRU1GVU5DX1AuCgpUaHUgTm92IDE0IDIzOjE4OjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFN1cHBvcnQgRFdBUkYyX0RFQlVHLgoJKiBzZWFyY2guYyAoZGZzX2RlYnVnX21hcmspOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocHVzaHRhZywgZmluaXNoX2VudW0pOiBMaWtld2lzZS4KCSogbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBVc2UgZGVidWdfKiBpbnN0ZWFkIG9mIGNhbGxpbmcgKm91dAoJZnVuY3Rpb25zIGRpcmVjdGx5LgoKVGh1IE5vdiAxNCAxNToyMTo0NiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi5yZWFkeSk6IEFkZCBlbHNlIGNsYXVzZSB0byBhdm9pZCBwcm9ibGVtcwoJb24gc29tZSBwaWNreSBob3N0cy4KCldlZCBOb3YgMTMgMTI6MzI6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQSBjbGFzcyBoYXMgYSBub24tdHJpdmlhbCBjb3B5Cgljb25zdHJ1Y3RvciBpZiBpdCBoYXMgdmlydHVhbCBmdW5jdGlvbnMuCgoJKiBjdnQuYyAoY3BfY29udmVydCk6IEFsd2F5cyBjYWxsIGEgY29uc3RydWN0b3IuCgoJKiBjYWxsLmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogU3RpbGwgdGFjayBvbiBhIFJFRl9CSU5ECglmb3IgYmFkIGNvbnZlcnNpb25zLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBQcm9wYWdhdGUgSUNTX0JBRF9GTEFHLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogUGFzcyBMT09LVVBfT05MWUNPTlZFUlRJTkcuCgkoY19leHBhbmRfcmV0dXJuKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBMaWtld2lzZSBmb3IgeyB9LgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IEtlZXAgdGhlIENPTlNUUlVDVE9SIGhhbmRsaW5nLgoJKiBjdnQuYyAoY3BfY29udmVydCk6IEhhbmRsZSBmYWlsdXJlIGJldHRlci4KCldlZCBOb3YgMTMgMTE6NTE6MjAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZysrLmMgKG1haW4pOiBBbHNvIHNldCBQRVhFQ1VURV9TRUFSQ0gsIHRvIG1ha2UgdGhlIGludm9jYXRpb24KCW9mIEdDQyBiZSBwYXRoLXJlbGF0aXZlLiAKCldlZCBOb3YgMTMgMTE6Mjc6MTYgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChnKystY3Jvc3MpOiBHKystY3Jvc3MgZG9lc24ndCBuZWVkIHZlcnNpb24ubywgYnV0CglpdCBkb2VzIG5lZWQgY2hvb3NlLXRlbXAubyBhbmQgcGV4ZWN1dGUuby4KCldlZCBOb3YgMTMgMDc6NTM6MzggMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZysrLmMgKGVycm9yKSBbIUhBVkVfVlBSSU5URl06IFB1dCBlcnJvciBiYWNrIGZvciB0aGUgb25seSB0aW1lCgl0aGF0IHdlIHN0aWxsIHVzZSBpdC4KCShQX3RtcGRpciwgUl9PSywgV19PSywgWF9PSykgW19fTVNET1NfX106IERlbGV0ZSB1bm5lY2Vzc2FyeSBtYWNyb3MuCgpXZWQgTm92IDEzIDAyOjAwOjI2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2RlZmF1bHRfaW5pdCk6IEF2b2lkIGNhbGxpbmcgY29uc3RydWN0b3JzIHRvIAoJaW5pdGlhbGl6ZSByZWZlcmVuY2UgdGVtcHMuCgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBGaXguCgpUdWUgTm92IDEyIDE5OjEwOjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogU2ltcGxpZnkgZm9yIGZsYWdfYW5zaV9vdmVybG9hZGluZy4KCShjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoQ09OVl9OT05DT05WRVJUSU5HKTogTG9zZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IExvc2UgYWxsb3dfbm9uY29udmVydGluZyBwYXJtLgoJKiAqLmM6IEFkanVzdC4KCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogQXNzdW1lIExPT0tVUF9PTkxZQ09OVkVSVElORy4KClR1ZSBOb3YgMTIgMTY6Mjk6MDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY2FudWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFJldmVyc2UgYXJncyB0byBleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2suCgpUdWUgTm92IDEyIDE1OjI2OjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogRG9uJ3QgY3Jhc2ggb24gbm9uLWNvbnN0cnVjdG9yCglUQVJHRVRfRVhQUi4KClR1ZSBOb3YgMTIgMTQ6MDA6NTAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZysrLmM6IEluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkoVlBST1RPLCBQVlBST1RPLCBWQV9TVEFSVCk6IERlbGV0ZS4KCShjaG9vc2VfdGVtcF9iYXNlX3RyeSwgY2hvb3NlX3RlbXBfYmFzZSwgcGVycm9yX2V4ZWMsCglydW5fZG9zKSBbX19NU0RPU19fXTogRGVsZXRlIGZucy4KCShwZmF0YWxfd2l0aF9uYW1lKTogRGVsZXRlIGZuLgoJKHRlbXBfZmlsZW5hbWUpOiBEZWNsYXJlIGxpa2UgaW4gZ2NjLmMuCgkocGV4ZWN1dGUsIHB3YWl0LCBjaG9vc2VfdGVtcF9iYXNlKTogRGVjbGFyZSBmcm9tIGdjYy5jLgoJKGVycm9yX2NvdW50LCBzaWduYWxfY291bnQpOiBEZWZpbmUuCgkoZXJyb3IpOiBEZWxldGUgYm90aCBkZWZpbml0aW9ucy4KCShQRVhFQ1VURV97RklSU1QsTEFTVCxTRUFSQ0gsVkVSQk9TRX0pOiBEZWZpbmUgZnJvbSBnY2MuYy4KCShwZmF0YWxfcGV4ZWN1dGUpOiBBZGQgZm4gZnJvbSBnY2MuYy4KCShtYWluKTogUmVuYW1lIGxvY2FsIFZFUkJPU0UgdmFyIHRvIFZFUkJPU0VfRkxBRy4gIFJld3JpdGUgdGhlCgljb2RlIHRvIHVzZSB0aGUgcGV4ZWN1dGUgc3R1ZmYgYWxzbyB1c2VkIGJ5IGdjYy5jLgoJKE1JTl9GQVRBTF9TVEFUVVMpOiBEZWZpbmUuCgkqIE1ha2UtbGFuZy5pbiAoZysrKTogQWRkIGRlcGVuZGVuY3kgb24gYW5kIGxpbmtpbmcgd2l0aAoJY2hvb3NlLXRlbXAubyBhbmQgcGV4ZWN1dGUuby4KCgkqIGNwLXRyZWUuaDogSW5jbHVkZSBnYW5zaWRlY2wuaC4KCShTVERJT19QUk9UTyk6IERlbGV0ZSAjdW5kZWYvI2RlZmluZS4KCSogY3Z0LmMgKE5VTEwpOiBEZWxldGUgI3VuZGVmLyNkZWZpbmUuCgkqIGV4cHIuYyAoTlVMTCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKE5VTEwpOiBMaWtld2lzZS4KCSogcnR0aS5jIChOVUxMKTogTGlrZXdpc2UuCgkqIHhyZWYuYyAoTlVMTCk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbik6IEFkZCBwcm90b3R5cGUuCgkqIGNhbGwuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBEZWxldGUgcHJvdG90eXBlLiAgQ29ycmVjdAoJZGVjbCBvZiBGTEFHUyBhcmcgdG8gYmUgYW4gaW50LgoJKiBjdnQuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KClR1ZSBOb3YgMTIgMTI6MTY6MjAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBUUllfQkxPQ0sgYW5kIEhBTkRMRVIuCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBTdXBwb3J0IHRlbXBsYXRlcy4KCSogcGFyc2UueSAodHJ5X2Jsb2NrLCBoYW5kbGVyX3NlcSk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFN1cHBvcnQgVFJZX0JMT0NLIGFuZCBIQU5ETEVSLgoKTW9uIE5vdiAxMSAxMzo1NzozMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjdXJyZW50X3RlbXBsYXRlX2FyZ3MpOiBOZXcgZm4uCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogVXNlIGl0LgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIGl0LgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBEZXJlZmVyZW5jZSByZWYgdmFycy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBHZW5lcmFsaXplIGhhbmRsaW5nIG9mIFRZUEVOQU1FX1RZUEVzIGluCgl0aGUgZGVjbC1zcGVjaWZpZXItc2VxLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBEb24ndCBmb3JjZSB0aGUgdHlwZSBvZiBhIGNvbnZlcnNpb24KCW9wIHRvIGJlIGNvbXBsZXRlLiAgRG9uJ3Qgd2FybiBhYm91dCBjb252ZXJ0aW5nIHRvIHRoZSBzYW1lIHR5cGUKCWZvciB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgY2FsbCBpbnN0YW50aWF0ZV9kZWNsIG9uIHN5bnRoZXNpemVkCgltZXRob2RzLgoKTW9uIE5vdiAxMSAxMzoyMDozNCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IFJlbW92ZSBwcmV2aW91cyBib2d1c25lc3MuCglEb24ndCBnaXZlIGVycm9ycyBpZiBmb3JjZSBpcyBzZXQuCgpGcmkgTm92ICA4IDE3OjM4OjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgZW1pdCBkZWJ1ZyBpbmZvLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogTG9zZSBvYnNvbGV0ZSBjb2RlLgoJKGdyb2tkZWNsYXJhdG9yKTogU3RpbGwgZG8gdGhlIGxvbmcgbG9uZyB0aGluZyBhZnRlciBjb21wbGFpbmluZy4KCSogc2VhcmNoLmMgKG5vdGVfZGVidWdfaW5mb19uZWVkZWQpOiBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSBpbiBhIAoJdGVtcGxhdGUuCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IEZvciBub24tbG9jYWwgY2xhc3NlcywKCXB1c2hfdG9fdG9wX2xldmVsIGZpcnN0LgoKRnJpIE5vdiAgOCAxMTo1MjoyOCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IEFkZCBub19lcnJvciBwYXJhbWV0ZXIuCgkoYnVpbGRfcHRybWVtZnVuYyk6IENhbGwgZ2V0X2RlbHRhX2RpZmZlcmVuY2Ugd2l0aCBub19lcnJvciBzZXQ7Cgl3ZSBkb24ndCB3YW50IGVycm9yIG1lc3NhZ2VzIHdoZW4gY29udmVydGluZyB1bnJlbGF0ZWQKCXBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9ucy4KClRodSBOb3YgIDcgMTE6MTY6MjQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogSW1wcm92ZSB0aGUgd29yZGluZyBvbiBlcnJvciBtZXNzYWdlcyB0aGF0CglpbnZvbHZlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KClR1ZSBOb3YgIDUgMTc6MTI6MDUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IE1vdmUgY29kZSBmb3IgY29udmVyc2lvbnMgZnJvbQoJKDo6KikoKSB0byB2b2lkKiBvciAoKikoKSB1cCBhIGJpdCwgc28gdGhhdCB3ZSBjYW4gY29udmVydCBmcm9tCglNRVRIT0RfVFlQRXMgYXMgd2VsbC4KClR1ZSBOb3YgIDUgMTQ6NTQ6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChnZXRfdGluZm9fZm4pOiBNYWtlIHN1cmUgJ3R5cGUnIGlzIHBlcm1hbmVudC4KCVRoZXJlIGFyZSBubyAnbWVtYmVyJyB0eXBlcy4KCShnZXRfdGluZm9fZm5fZHluYW1pYyk6IERpYWdub3NlIHR5cGVpZCBvZiBvdmVybG9hZGVkIGZuLgoJKGJ1aWxkX3hfdHlwZWlkKTogSGFuZGxlIGVycm9ycy4KCk1vbiBOb3YgIDQgMTc6NDM6MTIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBIYW5kbGUgYW5hY2hyb25pc3RpYyBpbXBsaWNpdAoJY29udmVyc2lvbnMgZnJvbSAoOjoqKSgpIHRvIHZvaWQqIG9yICgqKSgpLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogTGlrZXdpc2UuCgkoY3BfY29udmVydF90b19wb2ludGVyX2ZvcmNlKTogUmVtb3ZlIGNwX2NvbnZlcnRfdG9fcG9pbnRlcgoJY29udmVyc2lvbnMgZnJvbSBoZXJlLgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBZGQgLVd7bm8tLH1wbWYtY29udmVyc2lvbnMuCgkqIGxhbmctb3B0aW9ucy5oOiBMaWtld2lzZS4KCSogZGVjbDIuYyAod2Fybl9wbWYycHRyKTogRGVmaW5lLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBBbGxvdyBwbWZzIGRvd24gaW50bwoJY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24uCgpTdW4gTm92ICAzIDA5OjQzOjAwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBGaXggZm9yIHJldHVybmluZyBvdmVybG9hZGVkIGZuLgoKRnJpIE5vdiAgMSAwODo1MzoxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKERJUkVDVF9CSU5EKTogQ2hhbmdlIGZyb20gSU5ESVJFQ1RfQklORC4KCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogUGFzcyBESVJFQ1RfQklORC4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IERvbid0IG1hcmsgJ3RoaXMnIGFkZHJlc3NhYmxlLiAgVXNlCglESVJFQ1RfQklORC4KCSogY2FsbC5jIChjb252ZXJ0X2xpa2UpOiBEb24ndCBwYXNzIElORElSRUNUX0JJTkQuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IEFsbG93ICZ0aGlzIGlmIGZsYWdfdGhpc19pc192YXJpYWJsZS4KClRodSBPY3QgMzEgMTc6MDg6NDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBTdXBwb3J0IFRBUkdFVF9FWFBSLCB1bmlmeSB3aXRoCglzaW1pbGFyIGNvZGUgaW4gYnVpbGRfdXBfcmVmLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogRHJhc3RpY2FsbHkgc2ltcGxpZnkuCgpNb24gT2N0IDI4IDEyOjQ1OjA1IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHR5cGVjay5jIChzaWduZWRfb3JfdW5zaWduZWRfdHlwZSk6IElmIHRoZSBnaXZlbiB0eXBlIGFscmVhZHkKCWFzIHRoZSBjb3JyZWN0IHNpZ25lZG5lc3MsIHRoZW4ganVzdCByZXR1cm4gaXQuCgoJKiB0eXBlY2suYyAoe3VuLH1zaWduZWRfdHlwZSk6IElmIGNhbid0IGRvIGFueXRoaW5nLCBjYWxsCglzaWduZWRfb3JfdW5zaWduZWRfdHlwZS4KClRodSBPY3QgMjQgMTQ6MjE6NTkgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChjb3B5X2Fzc2lnbm1lbnRfYXJnX3ApOiBEb24ndCBidXkgdGhlIGZhcm0gaWYKCWN1cnJlbnRfY2xhc3NfdHlwZSBpcyBOVUxMLgoKV2VkIE9jdCAyMyAwMDo0MzoxMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AZ2VyYmlsLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBdm9pZCBlbXB0eSBzdHJ1Y3RzIGJ5IGFkZGluZyBhIGZpZWxkCglzbyBsYXlvdXRfdHlwZSBnZXRzIHRoZSBtb2RlIHJpZ2h0LgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERyYXN0aWNhbGx5IHNpbXBsaWZ5LgoKTW9uIE9jdCAyMSAyMjozNDowMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IEhhbmRsZSBvdmVybG9hZGVkIG1ldGhvZHMuCgpGcmkgT2N0IDE4IDE2OjAzOjQ4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQSBUQVJHRVRfRVhQUiBoYXMgc2lkZS1lZmZlY3RzLgoKVGh1IE9jdCAxNyAxMTozMTo1OSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF90b19wb2ludGVyX2ZvcmNlKTogQWRkIGNvZGUgdG8gc3VwcG9ydCBwb2ludGVyIHRvCgltZW1iZXIgZnVuY3Rpb24gdG8gcG9pbnRlciB0byBmdW5jdGlvbiBjb252ZXJzaW9ucy4KCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBBZGQgY29kZSB0byBhbGxvdyBmYWtlZCB1cCBvYmplY3RzLAoJaWdub3JpbmcgdGhlbSBpZiB0aGV5IGFyZSBub3QgdXNlZCwgYW5kIGdpdmluZyBhbiBlcnJvciwgaWYgdGhleQoJYXJlIG5lZWRlZC4KCSogdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogRm9sZCBlMSB0byBpbXByb3ZlCgljb2RlLCBhbmQgc28gdGhhdCB3ZSBjYW4gZ2l2ZSBhbiBlcnJvciwgaWYgd2UgbmVlZGVkIGFuIG9iamVjdCwKCWFuZCBvbmUgd2FzIG5vdCBwcm92aWRlZC4KCShidWlsZF9jX2Nhc3QpOiBEb24ndCBjYWxsIGRlZmF1bHRfY29udmVyc2lvbiB3aGVuIHdlIHdhbnQgdG8KCWNvbnZlcnQgdG8gcG9pbnRlciB0byBmdW5jdGlvbiBmcm9tIGEgTUVUSE9EX1RZUEUuCgpNb24gT2N0IDE0IDAwOjI4OjUxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoY3BsaWIyLnJlYWR5KTogRml4IGxvZ2ljLgoKCSogZGVjbC5jIChzaGFkb3dfdGFnKTogT25seSBjb21wbGFpbiBhYm91dCBub24tYXJ0aWZpY2lhbCBmdW5jdGlvbgoJbWVtYmVycy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkZCBzeW50aGVzaXplZCBtZXRob2RzIHRvIFRZUEVfTUVUSE9EUy4KCkZyaSBPY3QgMTEgMTY6MTI6NDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IFByZS10d2VhayBjYWxsX3RhcmdldCBsaWtlCglleHBhbmRfaW5saW5lX2Z1bmN0aW9uIHdvdWxkLgoKCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IElmIGV4dGVybl9wLCBjYWxsCgltYXJrX2lubGluZV9mb3Jfb3V0cHV0LgoKVGh1IE9jdCAxMCAxNTo1ODowOCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBBZGQgY29kZSB0byBoYW5kbGUgaW50ZXJtZWRpYXRlCglwbWQgY29udmVyc2lvbnMuCgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBGaXggd29yZGluZywgYXMgd2UgY2FuIGJlIHVzZWQKCWZvciBwb2ludGVyIHRvIGRhdGEgbWVtYmVycy4KClR1ZSBPY3QgIDggMTI6NDM6NTEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBJZiB0aGUgZnVuY3Rpb24gZGVjbCBpc24ndCBhIG1lbWJlciBvZiB0aGlzCgl0ZW1wbGF0ZSwgcmV0dXJuIGEgY29weSBvZiB0aGUgZGVjbCAoaW5jbHVkaW5nIGNvcHlpbmcgdGhlCglsYW5nLXNwZWNpZmljIHBhcnQpIHNvIHdlIGRvbid0IGhvc2Ugb3Vyc2VsdmVzIGxhdGVyLgoKVGh1IE9jdCAgMyAxNjoyNDoyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogUmVtb3ZlIERXQVJGLXNwZWNpZmljIHRhZyBoYW5kbGluZy4KCSogZGVjbC5jIChwdXNodGFnKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uKTogQWx3YXlzIGNsZWFyIERFQ0xfQVJHVU1FTlRTIG9uIGZ1bmN0aW9uIGRlY2xzIHdpdGgKCW5vIHNhdmVkIFJUWC4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBFbWl0IERXQVJGIGRlYnVnZ2luZyBpbmZvIGZvciBzdGF0aWMgZGF0YQoJbWVtYmVycy4KCldlZCBPY3QgIDIgMjE6NTg6MDEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1ha2Ugc3VyZSB0aGUgb2xkIERFQ0xfTEFOR19TUEVDSUZJQwoJaXNuJ3QgdGhlIHNhbWUgYXMgdGhlIG5ldyBvbmUgYmVmb3JlIHdlIHdoYWNrIGl0LgoKTW9uIFNlcCAzMCAxMzozODoyNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jLCBjcC10cmVlLmgsIGN2dC5jLCBkZWNsLmMsIGRlY2wyLmMsIGd4eC5ncGVyZiwgaGFzaC5oLAoJbGV4LmMsIG1ldGhvZC5jLCBwYXJzZS55LCB0eXBlY2suYywgdHlwZWNrMi5jOiBSZW1vdmUKCXdhcm5fdHJhZGl0aW9uYWwgYW5kIHdhcm5fc3RyaWN0X3Byb3RvdHlwZXM7IHJlbW92ZSBhbmNpZW50Cgknb3ZlcmxvYWQnIGNvZGU7IHJlbW92ZSByZWZlcmVuY2VzIHRvIGZsYWdfdHJhZGl0aW9uYWwuCgpNb24gU2VwIDMwIDEyOjU4OjQwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGlucHV0LmMgKHN1Yl9nZXRjaCk6IEhhbmRsZSA4LWJpdCBjaGFyYWN0ZXJzIGluIHN0cmluZyBsaXRlcmFscy4KClN1biBTZXAgMjkgMDM6MTI6MDEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChtYXBjYXIpOiBIYW5kbGUgQ09OU1RSVUNUT1JzLgoJKGNvcHlfdG9fcGVybWFuZW50KTogSGFuZGxlIGV4cHJlc3Npb25fb2JzdGFjayBwcm9wZXJseS4KCgkqIE1ha2UtbGFuZy5pbiAoY3BsaWIyLnR4dCk6IEFsc28gZGVwZW5kIG9uIHRoZSBoZWFkZXJzLgoKCSogcnR0aS5jIChnZXRfdGluZm9fdmFyKTogRG9uJ3QgYXNzdW1lIHRoYXQgUE9JTlRFUl9TSVpFID09CglJTlRfVFlQRV9TSVpFLgoJKGV4cGFuZF9jbGFzc19kZXNjKTogVXNlIFVTSXR5cGUgZm9yIG9mZnNldCBmaWVsZC4KCSogdGluZm8uaCAoc3RydWN0IF9fY2xhc3NfdHlwZV9pbmZvKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50KTogVFlQRV9QUkVDSVNJT04gc2hvdWxkIGJlIGFwcGxpZWQKCXRvIHR5cGVzLgoKU2F0IFNlcCAyOCAxNDo0NDo1MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEEgQ09ORF9FWFBSIGludm9sdmluZyB2b2lkIG11c3QgYmUgYQoJYnVpbHRpbi4KCkZyaSBTZXAgMjcgMTY6NDA6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfY29tcG9uZW50X3JlZik6IE5ldyBmbi4KCShidWlsZF9vYmplY3RfcmVmKTogVXNlIGl0LgoJKiBwYXJzZS55IChwcmltYXJ5KTogVXNlIGl0LgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IFVzZSBpdC4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogdmFyaWFibGUtc2l6ZWQgYXJyYXlzIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KCSogZXJyb3IuYyAoZHVtcF90eXBlX3N1ZmZpeCk6IEhhbmRsZSB2YXJpYWJsZSBhcnJheXMuCgpGcmkgU2VwIDI3IDEzOjE0OjA1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZXhjZXB0aW9uLm8pOiBQdXQgYmFjayBjb21waWxpbmcgaXQgd2l0aCAtZlBJQy4KCkZyaSBTZXAgMjcgMDM6MDA6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRG9uJ3QgdHJ5IHRvIGxvb2sgdXAgYW55dGhpbmcgaW4gYQoJVFlQRU5BTUVfVFlQRS4KCgkqIHRpbmZvMi5jYyAoX190aHJvd190eXBlX21hdGNoX3J0dGkpOiBPb3BzLgoKVGh1IFNlcCAyNiAyMjoxMTowNSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGV4Y2VwdGlvbi5vKTogVXNlIC1mbm8tUElDIGZvciBub3cuCgpUaHUgU2VwIDI2IDEwOjU5OjAwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogUGFzcyB0aW5mbyBmbnMgcmF0aGVyIHRoYW4KCWNhbGxpbmcgdGhlbS4KCShnZXRfdGluZm9fZm5fZHluYW1pYyk6IEV4dHJhY3RlZCBmcm9tIGJ1aWxkX3R5cGVpZC4KCSogdGluZm8yLmNjIChfX2R5bmFtaWNfY2FzdCk6IEFkanVzdC4KCQoJKiBydHRpLmMgKGJ1aWxkX3R5cGVpZCk6IFVzZSByZXNvbHZlc190b19maXhlZF90eXBlX3AuCgkoYnVpbGRfeF90eXBlaWQpOiBMaWtld2lzZS4KCgkqIHBhcnNlLnk6IENhbGwgYnVpbGRfeF90eXBlaWQgaW5zdGVhZCBvZiBidWlsZF90eXBlaWQuCgkqIGNwLXRyZWUuZGVmOiBBZGQgVFlQRUlEX0VYUFIuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSGFuZGxlIHR5cGVpZC4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMaWtld2lzZS4KCSogcnR0aS5jIChidWlsZF94X3R5cGVpZCk6IFRocm93IGJhZF90eXBlaWQgZnJvbSBoZXJlLgoJKGJ1aWxkX3R5cGVpZCk6IE5vdCBoZXJlLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgYnVpbGRfeF90eXBlaWQuCgpXZWQgU2VwIDI1IDE3OjI2OjE2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoY29udmVydF9saWtlKTogUHVsbCBvdXQgY29uc3RhbnQgdmFsdWVzLgoKCSogdHJlZS5jIChtYXBjYXIpOiBVc2UgYnVpbGRfY3BsdXNfYXJyYXlfdHlwZSwgbm90IGJ1aWxkX2FycmF5X3R5cGUuCgpXZWQgU2VwIDI1IDE3OjI4OjUzIDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDcmVhdGUgc2hvcnQgaW50IHR5cGVzIGJlZm9yZQoJY3JlYXRpbmcgc2l6ZV90IGluIGNhc2UgYSBtYWNoaW5lIGRlc2NyaXB0aW9uIG5lZWRzIHRvIHVzZQoJdW5zaWduZWQgc2hvcnQgZm9yIHNpemVfdC4KClR1ZSBTZXAgMjQgMTg6MTg6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChleGNlcHRpb24ubyk6IFR1cm4gb2ZmIHBpYy4KCgkqIHRpbmZvMi5jYyAoX190aHJvd190eXBlX21hdGNoX3J0dGkpOiBGaXggY3YtdmFyaWFudHMgb2YgdGhlIHNhbWUKCXR5cGUsIG11bHRpLWxldmVsIHB0ciBjb252ZXJzaW9ucy4KCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuKTogUmVuYW1lZCBhbmQgZ2VuZXJpY2l6ZWQgZnJvbSB0aHJvd19iYWRfY2FzdC4KCSh0aHJvd19iYWRfY2FzdCk6IFVzZSBpdC4KCSh0aHJvd19iYWRfdHlwZWlkKTogTmV3IGZuLgoJKGJ1aWxkX3R5cGVpZCk6IFRocm93IGJhZF90eXBlaWQgYXMgbmVlZGVkLgoJVXNlIGJ1aWxkX2NhbGwuCgkoc3ludGhlc2l6ZV90aW5mb19mbik6IEhhbmRsZSBmdW5jdGlvbnMgYW5kIGFycmF5cyBiZWZvcmUgY2hlY2tpbmcKCWZvciBjdi1xdWFscy4KCgkqIFJlbW92ZSAuaCBmcm9tIHN0YW5kYXJkIEMrKyBoZWFkZXJzLCBhZGQgbmV3LmgsIG1vdmUgaW50byBpbmMKCXN1YmRpcmVjdG9yeS4KCgkqIGV4Y2VwdGlvbio6IFJlbW92ZSBwb2ludGVyIGZyb20gb2JqZWN0LCBjb25zdHJ1Y3RvcnMuICBBZGQKCWRlZmF1bHQgZXhjZXB0aW9uOjp3aGF0IHRoYXQgdXNlcyB0eXBlX2luZm86Om5hbWUuICBBZGQKCV9fdGhyb3dfYmFkX3R5cGVpZC4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogRG9uJ3QgYWRkIGEgY29va2llIHRvIG5ldyAodm9pZCAqKSBUWzJdLgoKTW9uIFNlcCAyMyAxNToyMTo1MyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW46IEJ1aWxkaW5nIEMrKyBjb2RlIGRlcGVuZHMgb24gY2MxcGx1cy4KCk1vbiBTZXAgMjMgMTI6Mzg6NDAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdHJ1Y3Qgc2F2ZWRfc2NvcGUpOiBEZWNsYXJlIFBST0NFU1NJTkdfVEVNUExBVEVfREVDTCBhcwoJYSBIT1NUX1dJREVfSU5ULCBub3QgYSB0cmVlLgoKTW9uIFNlcCAyMyAxMjozNjowMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2M6IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPi4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmNsZWFuKTogUmVtb3ZlIGNwbGliMi4qLgoKTW9uIFNlcCAyMyAwOTo0MjoxOSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2xfMSwgY29tcG9uZW50X2Nvc3RydWN0b3JfZGVjbGFyYXRvciBjYXNlKToKCVBhc3MgYXR0cmlidXRlcy9wcmVmaXhfYXR0cmlidXRlcyBpbiB0cmVlIGxpc3QuCgpNb24gU2VwIDIzIDAxOjE4OjUwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRpbmZveywyfS5jYzogI2luY2x1ZGUgPHN0ZGRlZi5oPiBpbnN0ZWFkIG9mIDxzdGRsaWIuaD4uCgpTdW4gU2VwIDIyIDA1OjMxOjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgZG8gZGVmZXJyZWQgbG9va3VwIGluIGEgdGVtcGxhdGUKCWhlYWRlci4KCgkqIHR5cGVjazIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IE9vcHMuCgoJKiBuZXcue2gsY2N9LCBleGNlcHRpb24ue2gsY2N9LCB0eXBlaW5mby5oLCB0aW5mb3syLmNjLC5jYywuaH06IAoJTmV3IGZpbGVzIGZvciBDKysgbGFuZy1zdXBwb3J0IGxpYnJhcnkuCgkqIE1ha2UtbGFuZy5pbiAoQ1hYX0VYVFJBX0hFQURFUlMpOiBEZWZpbmUuCgkoQ1hYX0xJQjJGVU5DUyk6IERlZmluZS4KCUFuZCBydWxlcyBmb3IgYnVpbGRpbmcgdGhlIEMrKyBsYW5nLXN1cHBvcnQgY29kZS4KCSogY29uZmlnLWxhbmcuaW4gKGhlYWRlcnMpOiBEZWZpbmUuCgkobGliMmZ1bmNzKTogRGVmaW5lLgoKU2F0IFNlcCAyMSAxOToxNzoyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElmIENPTlNUUlVDVE9SIGhhcyBhIHR5cGUsIGNhbGwKCWRpZ2VzdF9pbml0LgoJKiBwdC5jICh0c3Vic3RfY29weSk6IENvbXB1dGUgdHlwZSBmb3IgQ09OU1RSVUNUT1IuCgkqIHR5cGVjazIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IENoZWNrIGZvciBpbml0aWFsaXppbmcgcG1mIHdpdGggeyB9CgloZXJlLgoJKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IE5vdCBoZXJlLgoKVGh1IFNlcCAxOSAxNjo0MTowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChiZWdpbl90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBJbmNyZW1lbnQKCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCBoZXJlLgoJKGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBOb3QgaGVyZS4KCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBObyBuZWVkIHRvIGFkZCAxIHRvIGl0IG5vdy4KCSogKi5jOiBVc2UgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGluc3RlYWQgb2YgY3VycmVudF90ZW1wbGF0ZV9wYXJtcwoJdG8gY2hlY2sgZm9yIGJlaW5nIGluIGEgdGVtcGxhdGUuCgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIFNDT1BFX1JFRi4gIEZpeCBDT05TVFJVQ1RPUi4KCSh0c3Vic3RfY29weSk6IEhhbmRsZSBDT05TVFJVQ1RPUi4KCShpbnN0YW50aWF0ZV9kZWNsKTogU2V0IHVwIGNvbnRleHQgcHJvcGVybHkgZm9yIHZhcmlhYmxlcy4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBIYW5kbGUgQ09OU1RSVUNUT1IuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZXZlcnNlIENMQVNTVFlQRV9UQUdTLgoKV2VkIFNlcCAxOCAxMzozMDoyMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZW51bSB0cmVlX25vZGVfa2luZCkgW0dBVEhFUl9TVEFUSVNUSUNTXTogUHV0IHRoZSBlbnVtIGJhY2suCgpXZWQgU2VwIDE4IDA0OjI0OjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogQ2FsbCBjb21kYXRfbGlua2FnZSBiZWZvcmUgc2V0dGluZyB0aGUKCVRSRUVfQ09ERS4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogVXNlIG1ha2VfZGVjbF9vbmVfb25seS4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENoZWNrIHN1cHBvcnRzX29uZV9vbmx5IGluc3RlYWQgb2YKCVNVUFBPUlRTX1dFQUsuCgpTYXQgU2VwIDE0IDA4OjM0OjQxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IFRpZ2h0ZW4gY2hlY2tpbmcgZm9yIGFjY2VzcyBkZWNscy4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogUmVzb2x2ZSByZWZlcmVuY2VzIHRvCgljdXJyZW50X2NsYXNzX3R5cGUuICBTZXQgQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04uCgkobG9va3VwX25hbWVfcmVhbCk6IFR5cGVzIHRoYXQgZGVwZW5kIG9uIGEgdGVtcGxhdGUgcGFyYW1ldGVyIGdldAoJYW4gaW1wbGljaXQgJ3R5cGVuYW1lJyB1bmxlc3MgdGhleSdyZSBpbiB0aGUgY3VycmVudCBzY29wZS4KCShzdGFydF9kZWNsXzEpOiBXZSBkb24ndCBjYXJlIGFib3V0IGluY29tcGxldGUgdHlwZXMgdGhhdCBkZXBlbmQKCW9uIGEgdGVtcGxhdGUgcGFybS4KCShncm9rZGVjbGFyYXRvcik6IFJlc29sdmUgJ3R5cGVuYW1lJ3MgaW4gdGhlIHR5cGUgc3BlY2lmaWVyIHRoYXQKCXJlZmVyIHRvIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFJlbW92ZSAnaW5saW5lIGNhbGxlZCBiZWZvcmUKCWRlZmluaXRpb24nIGRpYWdub3N0aWMuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb3duZ3JhZGUgJ3VzZWQgYmVmb3JlIGRlY2xhcmVkCglpbmxpbmUnIHRvIGEgd2FybmluZywgb25seSB3aXRoIC1XaW5saW5lLgoKRnJpIFNlcCAxMyAxNzozMTo0MCAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEZpeCBpbmNsdWRlIHBhdGhzLCBhZGQgQERBU0hfQ19GTEFHQCB0byBjb21waWxlLgoKV2VkIFNlcCAxMSAyMjozODoxMyAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBjcy5wdXJkdWUuZWR1PgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFdoZW4gY2FsbGluZyBhIHNpZ25hdHVyZQoJZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYXMgaW4gb3RoZXIgY2FzZXMsIGxldCBpbnN0YW5jZV9wdHIgc2ltcGx5CgliZSBpbnN0YW5jZS4KCldlZCBTZXAgMTEgMjI6MTQ6NDQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBDbGVhbnVwIGFuZCB1c2UgZG9fcG9wbGV2ZWwgKCkuCgpXZWQgU2VwIDExIDIyOjEwOjQ4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBBZGQgYSBwdXNobGV2ZWwgc28gdGhhdCAtZwoJd29ya3Mgb24gaHBwYSBhbmQgU1BBUkMuCgpXZWQgU2VwIDExIDEwOjE4OjA2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBDYXRjaCBQVFIgYmVpbmcgYW4gZXJyb3JfbWFya19ub2RlLgoKTW9uIFNlcCAgOSAxOTo1MToxNCAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBjcy5wdXJkdWUuZWR1PgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBDaGVjayBmaXJzdCB3aGV0aGVyIERFQ0xfQ09OVEVYVCBleGlzdHMKCWJlZm9yZSB0ZXN0aW5nIHdoZXRoZXIgaXQncyBhIHNpZ25hdHVyZS4KClN1biBTZXAgIDggMTY6MDY6NTcgMTk5NiAgR2VyYWxkIEJhdW1nYXJ0bmVyICA8Z2JAY3MucHVyZHVlLmVkdT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgc2lnbmF0dXJlCglwb2ludGVycyBhbmQgcmVmZXJlbmNlcyBub3QgYmVpbmcgYW4gYWdnciB0eXBlLgoJKGJ1aWxkX3RoaXMpOiBJZiBhIHNpZ25hdHVyZSBwb2ludGVyIG9yIHJlZmVyZW5jZSB3YXMgcGFzc2VkIGluLAoJanVzdCByZXR1cm4gaXQuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSWYgaW5zdGFuY2UgaXMgYSBzaWduYXR1cmUgcG9pbnRlciwgc2V0CgliYXNldHlwZSB0byB0aGUgc2lnbmF0dXJlIHR5cGUgb2YgaW5zdGFuY2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwpOiBEZWxldGVkIGJhc2V0eXBlIGFuZAoJaW5zdGFuY2UgcGFyYW1ldGVycywgdGhleSBjYW4gYmUgZm91bmQgYXMgdGhlIERFQ0xfQ09OVEVYVCBvZgoJZnVuY3Rpb24gYW5kIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgaW4uCgkqIGNwLXRyZWUuaDogQ2hhbmdlZCBkZWNsYXJhdGlvbiBvZiBidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGVkIGZpcnN0IHR3byBhcmd1bWVudHMgaW4gY2FsbAoJb2YgYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEFkZGVkIGNhbGwgdG8gYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsLgoKVGh1IFNlcCAgNSAxNjo1MToyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3QgdGFjayBhIG5vbl9sdmFsdWVfZXhwciBvbnRvIGEKCXRhcmdldF9leHByLgoKVGh1IFNlcCAgNSAxMDowNTozOCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBVc2UgJSNULCBub3QgJSNELCBmb3IgZXJyb3IuCgpXZWQgU2VwICA0IDE3OjE2OjA5IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF90cnlfc3RtdHMpOiBNb3ZlIHRvIGV4Y2VwdC5jIGluIHRoZSBiYWNrZW5kLgoJKGV4cGFuZF9lbmRfdHJ5X3N0bXRzKTogUmVtb3ZlLgoKCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogVXNlIGFkZF9wYXJ0aWFsX2VudHJ5ICgpIGluc3RlYWQKCW9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyBsaXN0cy4KCShlbWl0X2Jhc2VfaW5pdCk6IERpdHRvLgoKV2VkIFNlcCAgNCAxMjoxNDozNiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBBbHdheXMgbWFrZSBzdXJlIFVTRSBhbmQKCUNMT0JCRVIgaW5zbnMgdGhhdCBjYW1lIGF0IHRoZSBlbmQgc3RpbGwgZG8sIHRoZSBiYWNrZW5kIHJlbGllcwoJdXBvbiB0aGlzLgoKV2VkIFNlcCAgNCAwNzo0NDo0OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFdlIGNhbiBvbmx5IHVzZSBhIFRBUkdFVF9FWFBSIG9mIHRoZQoJcmlnaHQgdHlwZS4KClR1ZSBTZXAgIDMgMTk6MjY6MDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLCBkb24ndCBjb21wbGFpbgoJYWJvdXQgdGVtcCB3aXRob3V0IHRhcmdldCBkZWNsLgoKVHVlIFNlcCAgMyAxMDoyMjo1NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgY29yZSBkdW1wIHdoZW4gdm9pZCgpIGlzIGdpdmVuLgoKVHVlIFNlcCAgMyAwMjozODo1NiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNvcHlfYXJnc19wKTogRG9uJ3QgY3Jhc2guCgpGcmkgQXVnIDMwIDE0OjI2OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IEFuZCBzdXBwb3J0IHRlbXBsYXRlIGFyZ3MgaW5zaWRlIHRoZSBleGNlcHRpb24KCXNwZWNpZmljYXRpb24uCgoJKiBwdC5jICh0c3Vic3QpOiBBZGQgc3VwcG9ydCBmb3IgZXhjZXB0aW9uIHNwZWNpZmljYXRpb25zIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgpGcmkgQXVnIDMwIDEwOjAxOjU1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmIChERUNMX1NUTVQpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgZmllbGQsIG9ubHkgMwoJZmllbGRzIG5vdy4KCSogY3AtdHJlZS5oIChzdGFydF9kZWNsKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKG1ha2VfY2FsbF9kZWNsYXJhdG9yKTogQWRkIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKHNldF9xdWFsc19hbmRfc3BlYyk6IEFkZCByb3V0aW5lLgoJKiBsZXguYyAoc2V0X3F1YWxzX2FuZF9zcGVjKTogTGlrZXdpc2UuCgkqIGRlY2wuaCAoZ3Jva2RlY2xhcmF0b3IpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglncm9rZGVjbGFyYXRvci4KCShncm9rdHlwZW5hbWUpOiBMaWtld2lzZS4KCShzdGFydF9kZWNsKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZSB0aGUKCXRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLiAgRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjCglmaWVsZCBpbiBERUNMX1NUTVQuCgkoY3BfZmluaXNoX2RlY2wpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgZmllbGQgaW4gREVDTF9TVE1ULgoJKGdyb2tmbmRlY2wpOiBSZW1vdmUgdXNlbGVzcyBzZXQgb2YgcmFpc2VzLgoJKGdyb2tkZWNsYXJhdG9yKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZQoJdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIHN0YXJ0X2RlY2wuICBQdWxsIHRoZSB0aHJvdyBzcGVjIG91dAoJb2YgdGhlIGNhbGwgZGVjbGFyYXRvci4KCShncm9rcGFybXMpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZQoJdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4KCShncm9rYml0ZmllbGQpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKGdyb2tvcHR5cGVuYW1lKTogTGlrZXdpc2UuCgkoZmluaXNoX2ZpbGUpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglzdGFydF9mdW5jdGlvbi4gIEFkZCB0aHJvdyBzcGVjIHRvIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IEFkZCB0aHJvdyBzcGVjIHRvCgltYWtlX2NhbGxfZGVjbGFyYXRvci4gIEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCXN0YXJ0X2RlY2wuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJZ3Jva2RlY2xhcmF0b3IuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBBZGQgdGhyb3cgc3BlYyB0byBtYWtlX2NhbGxfZGVjbGFyYXRvci4KCUVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gc3RhcnRfZnVuY3Rpb24uCgkoc3RhcnRfYW5vbl9mdW5jKTogTGlrZXdpc2UuCgkqIGxleC5jIChtYWtlX2NhbGxfZGVjbGFyYXRvcik6IEFkZCB0aHJvdyBzcGVjIHBhcmFtZXRlci4KCShzZXRfcXVhbHNfYW5kX3NwZWMpOiBOZXcgcm91dGluZS4KCShjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBBZGQgdGhyb3cgc3BlYyB0byBtYWtlX2NhbGxfZGVjbGFyYXRvci4KCUVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2ZpZWxkLgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyCgl0byBzdGFydF9mdW5jdGlvbi4KCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlcgoJdG8gZ3Jva2RlY2xhcmF0b3IuCgkodHN1YnN0KTogQWRkIHRocm93IHNwZWMgdG8gbWFrZV9jYWxsX2RlY2xhcmF0b3IuCgkodHN1YnN0X2V4cHIpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIHN0YXJ0X2RlY2wuCgkoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCWdyb2tkZWNsYXJhdG9yLiAgRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJc3RhcnRfZnVuY3Rpb24uCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIKCXRvIHN0YXJ0X2Z1bmN0aW9uLgoJKiBwYXJzZS55IChkYXRhZGVmKTogUmVtb3ZlIG5vbi13aW5uaW5nIG9wdGltaXphdGlvbi4KCShkZWNsKTogTGlrZXdpc2UuCgkoZm5kZWYpOiBSZW1vdmUgYW1iaWd1b3VzIGVycm9yIHByb2R1Y3Rpb25zIHVuY292ZXJlZCBieSBncmFtbWVyCglmaXhpbmcuCgkoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IEFkZCBleGNlcHRpb25fc3BlY2lmaWNhdGlvbl9vcHQgaGVyZS4KCShjb21wb25lbnRfY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGRpcmVjdF9hZnRlcl90eXBlX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGRpcmVjdF9hYnN0cmFjdF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZm4uZGVmMSk6IFJlbW92ZSBleGNlcHRpb25fc3BlY2lmaWNhdGlvbl9vcHQuCgkoZm4uZGVmMik6IExpa2V3aXNlLgoJKGNvbmRpdGlvbik6IExpa2V3aXNlLgoJKGluaXRkY2wwKTogTGlrZXdpc2UuCgkoaW5pdGRjbCk6IExpa2V3aXNlLgoJKG5vdHlwZV9pbml0ZGNsMCk6IExpa2V3aXNlLgoJKG5vbW9kc19pbml0ZGNsMCk6IExpa2V3aXNlLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KCShjb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGFmdGVyX3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IwKTogTGlrZXdpc2UuCgkoYWZ0ZXJfdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKG5vdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoKV2VkIEF1ZyAyOCAwMTo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IEFsc28gdXNlIGFuIElOSVRfRVhQUiB3aGVuCglpbml0aWFsaXppbmcgYW55dGhpbmcgZnJvbSBhbiBydmFsdWUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENhbGwgc3RhYmlsaXplX3JlZmVyZW5jZSB3aGVuIGJ1aWxkaW5nCglhbiBJTklUX0VYUFIgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBjb3B5IGN0b3IuCgoJKiBjYWxsLmMgKGpvdXN0KTogRXh0ZW5kIHRoZSBwcmV2aW91cyBjaGFuZ2UgdG8gYWxsIGNvbXBhcmlzb25zLgoKCSogZGVjbDIuYywgbWV0aG9kLmMsIGxleC5jOiBVc2UgTUFLRV9ERUNMX09ORV9PTkxZIGFuZCAKCU5PX0xJTktBR0VfSEVVUklTVElDUy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRW1pdCBhbnkgc3RhdGljcyB0aGF0IHdlcmVuJ3QgYWxyZWFkeS4KCgkqIHR5cGVjay5jIChidWlsZF9zdGF0aWNfY2FzdCk6IEltcGxlbWVudC4KCSogdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBIYW5kbGUgZ2V0dGluZyBhIFRBUkdFVF9FWFBSLgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IFVzZSBjYW5fY29udmVydF9hcmcgaW5zdGVhZCBvZgoJaW1wbGljaXRfY29udmVyc2lvbiBkaXJlY3RseS4KCShjb3B5X2FyZ3NfcCk6IE5ldyBmbi4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgdGVtcCB3aXRoCglzdGF0aWNfY2FzdC4KCShidWlsZF91cF9yZWZlcmVuY2UpOiBIYW5kbGUgVEFSR0VUX0VYUFJzLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IEVsaWRlIHVubmVjZXNzYXJ5IHRlbXBzLgoJKGNhbl9jb252ZXJ0Kik6IFVzZSBuZXcgb3ZlcmxvYWRpbmcgY29kZS4KClR1ZSBBdWcgMjcgMTM6MTI6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jOiBNb3ZlIFRZUEVfUFRSKl9NQUNST1MgLi4uCgkqIGNwLXRyZWUuaDogVG8gaGVyZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBJbXBsZW1lbnQuCgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFVzZSBUWVBFX1BUUk9CX1AgaW5zdGVhZCBvZgoJcHRyX2NvbXBsZXRlX29iLgoJKGpvdXN0KTogSWYgd2UncmUgY29tcGFyaW5nIGEgZnVuY3Rpb24gdG8gYSBidWlsdGluIGFuZCB0aGUgd29yc3QKCWNvbnZlcnNpb24gZm9yIHRoZSBidWlsdGluIGlzIHdvcnNlIHRoYW4gdGhlIHdvcnN0IGNvbnZlcnNpb24gZm9yIHRoZQoJZnVuY3Rpb24sIHRha2UgdGhlIGZ1bmN0aW9uLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbnN0X2Nhc3QpOiBJbXBsZW1lbnQuCgkoY29tcF9wdHJfdHR5cGVzX2NvbnN0KTogTGlrZSBjb21wX3B0cl90dHlwZXMsIGZvciBjb25zdF9jYXN0LgoJKGNvbXBfcHRyX3R0eXBlc19yZWludGVycHJldCk6IExpa2UgY3B0LCBmb3IgcmVpbnRlcnByZXRfY2FzdC4KClR1ZSBBdWcgMjcgMTM6MTQ6NTggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IERvbid0IHRyeSB0byBkZXJlZmVyZW5jZSBleHBydHlwZQoJdG9vIGVhcmx5LiBNYWtlIHN1cmUgd2UgZXhwbG9kZSBpZiBleHBydHlwZSB0dXJucyBvdXQgdG8gYmUgYQoJTlVMTF9UUkVFIHdoZW4gaXQgc2hvdWxkbid0IGJlLgoKVHVlIEF1ZyAyNyAxMDo1NjoyMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmg6IE5ldyByb3V0aW5lIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJKiBsZXguYyAobWFrZV9jYWxsX2RlY2xhcmF0b3IpOiBEZWZpbmUgaXQuCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogVXNlIGl0LgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogTGlrZXdpc2UuCgkoc3RhcnRfYW5vbl9mdW5jKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogcGFyc2UueTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdCk6IExpa2V3aXNlLgoJCk1vbiBBdWcgMjYgMTc6NDA6MDMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva3R5cGVmaWVsZCk6IFJlbW92ZSB1bnVzZWQgY29kZS4KCk1vbiBBdWcgMjYgMTc6MDA6MzMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZ3h4LmdwZXJmOiBDaGFuZ2UgVFlQRV9RVUFMIGludG8gQ1ZfUVVBTElGSUVSLgoJKiBwYXJzZS55OiBMaWtld2lzZS4gIENoYW5nZSBtYXliZV90eXBlX3F1YWwgaW50byBtYXliZV9jdl9xdWFsaWZpZXIuCglDaGFuZ2UgdHlwZV9xdWFscyBpbnRvIGN2X3F1YWxpZmllcnMuICBDaGFuZ2Ugbm9uZW1wdHlfdHlwZV9xdWFscyBpbnRvCglub25lbXB0eV9jdl9xdWFsaWZpZXJzLgoJKiBoYXNoLmg6IFJlYnVpbGQuCgkKCSogbGV4LmMgKG1ha2VfcG9pbnRlcl9kZWNsYXJhdG9yKTogQ2hhbmdlIHR5cGVfcXVhbHMgaW50bwoJY3ZfcXVhbGlmaWVycy4KCShtYWtlX3JlZmVyZW5jZV9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkKVGh1IEF1ZyAyMiAwMTowOToyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogT25seSBjaGVjayBpbnRlcmZhY2VfKiBmb3IgdGVtcGxhdGVzCgl3aXRoIGZsYWdfYWx0X2V4dGVybmFsX3RlbXBsYXRlcy4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQ2hlY2sgZm9yIGNvbXBhcmlzb24gb2YgZGlmZmVyZW50IGVudW0gdHlwZXMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRml4IGFyZyAjIG91dHB1dC4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSGFuZGxlIHByZS1mb3VuZCBUWVBFX0RFQ0wuCgpXZWQgQXVnIDIxIDAwOjEzOjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQ2hlY2sgZm9yIGVycm9uZW91cyBhcmdzLgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgbWlzc2luZyBhcmdzIHRvIGNwX2Vycm9yLgoKCSogdHJlZS5jIChlcnJvcl90eXBlKTogRG9udCBwcmludCByZWZlcmVuY2UtdG8tYXJyYXkuCgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IERvbid0IHNheSBjb250cmF2YXJpYW5jZSBmb3IKCXJlbW92aW5nIGNvbnN0LgoKVHVlIEF1ZyAyMCAxMzoyMzowMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERpYWdub3NlIGJhZCBjb252cyBmb3IgYHRoaXMnLgoKCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFNldCBERUNMX0FSVElGSUNJQUwKCW9uIF9jdG9yX2FyZy4KCgkqIGNhbGwuYyAoY29udmVydF9saWtlKTogSGFuZGxlIGJhZCBjb252cy4KCShidWlsZF9vdmVyX2NhbGwpOiBIYW5kbGUgYmFkIGNvbnZzIGJldHRlci4KCgkqIGRlY2wyLmM6IC1mYW5zaS1vdmVybG9hZGluZyBpcyBub3cgdGhlIGRlZmF1bHQuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IENoZWNrIGZvciBlcnJvbmVvdXMgYXJncy4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUHJvcGFnYXRlCglUWVBFX1VTRVNfTVVMVElQTEVfSU5IRVJJVEFOQ0UuCgpUdWUgQXVnIDIwIDEzOjA5OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoZW5mb3JjZV9hY2Nlc3MpOiBBZGQgc3RhdGljIHRvIHJvdXRpbmUuCgpTdW4gQXVnIDE4IDE0OjM1OjU0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEZpeCBiYWQgaGFuZGxpbmcuCgkoY29tcGFyZV9pY3MpOiBMaWtld2lzZS4KClNhdCBBdWcgMTcgMjE6NTQ6MTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogT29wcy4KClNhdCBBdWcgMTcgMTY6Mjg6MTEgMTk5NiAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGcrKy5jOiBVcGRhdGUgdGVzdCBmb3Igd2luMzIgKCYmICEgY3lnd2luMzIpLgoKU2F0IEF1ZyAxNyAwMzo0NTozMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcF9wdHJfdHR5cGVzX3JlYWwpOiBIYW5kbGUgT0ZGU0VUX1RZUEVzIHByb3Blcmx5LgoJKHB0cl9yZWFzb25hYmx5X3NpbWlsYXIpOiBOZXcgZm4uCgkqIGNhbGwuYyAoQkFEX1JBTkspOiBOZXcgcmFuay4KCShJQ1NfQkFEX0ZMQUcpOiBOZXcgbWFjcm8uCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IEhhbmRsZSBhbG1vc3QtcmlnaHQgcG9pbnRlciBjb252ZXJzaW9ucy4KCShyZWZlcmVuY2VfYmluZGluZyk6IEhhbmRsZSBiYWQgcnZhbHVlIGJpbmRpbmdzLgoJKGFkZF8qX2NhbmRpZGF0ZSk6IFN0dWZmLgoJKGJ1aWxkX292ZXJfY2FsbCk6IFBhc3MgYmFkIGNvbnZlcnNpb25zIHRvIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLgoJKGNvbXBhcmVfaWNzKTogSGFuZGxlIGJhZCBjb252cy4KCShqb3VzdCk6IExpa2V3aXNlLgoKRnJpIEF1ZyAxNiAxNTowMjoxOSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogVXNlIHB0cmRpZmZfdHlwZV9ub2RlIGluc3RlYWQgb2YKCWludGVnZXJfdHlwZV9ub2RlIHdoZW4gY29tcHV0aW5nIHBvaW50ZXIgb2Zmc2V0cy4KCkZyaSBBdWcgMTYgMDE6Mjg6MzIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChsdmFsdWVfdHlwZSk6IE5ldyBmbi4KCShlcnJvcl90eXBlKTogTmV3IGZuLgoJKiBjYWxsLmMgKG9wX2Vycm9yKTogVXNlIGVycm9yX3R5cGUuCgkoYWRkX2NvbnZfY2FuZGlkYXRlKTogVXNlIGx2YWx1ZV90eXBlLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoYXJnc19hc19zdHJpbmcpOiBVc2UgZXJyb3JfdHlwZS4KClRodSBBdWcgMTUgMTc6Mjc6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IEV2YWx1YXRlIERFQ0xfSU5JVElBTCBvZiBhIFZBUl9ERUNMIGhlcmUuCgkodHN1YnN0KTogTm90IGhlcmUuCgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogV2l0aCAtYW5zaSwgX19udWxsJ3MgdHlwZSBpcyB0aGUKCXNpZ25lZCBpbnRlZ3JhbCB0eXBlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHMgYXMgYSBwb2ludGVyLgoJSW50cm9kdWNlIGEgbmV3IHZhcmlhYmxlIG51bGxfbm9kZSBmb3IgaXQuCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoJKiBjYWxsLmMgKG51bGxfcHRyX2NzdF9wKTogQWRqdXN0LgoKVGh1IEF1ZyAxNSAxNzowOTo1NCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZG9fdW53aW5kKTogTWFyayAlaTcgYXMgdXNlZCBvbiB0aGUgU1BBUkMgc28gd2UgY2FuCglvcHRpbWl6ZS4KClRodSBBdWcgMTUgMDE6MzY6NDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogSWdub3JlICNwcmFnbWEgaW50ZXJmYWNlIGZvciB0aW5mbwoJZm5zIG9mIGNsYXNzZXMgd2l0aG91dCB2aXJ0dWFsIGZ1bmN0aW9ucy4KCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IEhhbmRsZSBgdGhpcycgc3BlY2lhbGx5LgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgpUdWUgQXVnIDEzIDEyOjE2OjEwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogRml4IGhhbmRsaW5nIG9mIF9fbnVsbC4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogTmV3IGZuLgoJKGltcG9ydF9leHBvcnRfdnRhYmxlKTogVXNlIGl0LgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IFVzZSBpdC4KCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBVc2UgaXQuCgpNb24gQXVnIDEyIDAwOjA5OjE4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGVuZF90ZW1wbGF0ZV9kZWNsKTogSWYgd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBwYXJtcywgcmV0dXJuLgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9oZWFkZXIpOiBBY2NlcHQgJ3RlbXBsYXRlIDw+Jy4KCgkqIGVycmZuLmM6IEFsbG93IDUgYXJncy4KClN1biBBdWcgMTEgMTU6MjA6NTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChtYWtlX3RlbXBfdmVjKTogTmV3IGZuLgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBIYW5kbGUgcGFydGlhbCBzcGVjcy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKG1vcmVfc3BlY2lhbGl6ZWQpOiBVc2UgZ2V0X2JpbmRpbmdzLgoJKG1vcmVfc3BlY2lhbGl6ZWRfY2xhc3MpOiBOZXcgZm4uCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogTmV3IGZuLgoJKG1vc3Rfc3BlY2lhbGl6ZWRfY2xhc3MpOiBOZXcgZm4uCgkoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IExpc3QgY2FuZGlkYXRlcyBmb3IgYW1iaWd1b3VzIGNhc2UuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTG9zZSByZWZlcmVuY2UgdG8gREVDTF9URU1QTEFURV9NRU1CRVJTLgoJKHNoYWRvd190YWcpOiBDYWxsIHB1c2hfdGVtcGxhdGVfZGVjbCBmb3IgcGFydGlhbCBzcGVjaWFsaXphdGlvbnMuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKERFQ0xfVEVNUExBVEVfU1BFQ0lBTElaQVRJT05TKTogUmVwbGFjZXMKCURFQ0xfVEVNUExBVEVfTUVNQkVSUy4KCSogY2FsbC5jIChwcmludF96X2NhbmRpZGF0ZXMpOiBSZWR1Y2UgZHVwbGljYXRpb24uCgpGcmkgQXVnICA5IDE0OjM2OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFsbG93IC1mYW5zaS1vdmVybG9hZGluZy4KClRodSBBdWcgIDggMTc6MDQ6MTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZ2V0X2JpbmRpbmdzKTogTmV3IGZuLgoJKG1vc3Rfc3BlY2lhbGl6ZWQpOiBMaWtld2lzZS4KCShkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogVXNlIHRoZW0uCgkoYWRkX21heWJlX3RlbXBsYXRlKTogTmV3IGZuLgoJKiBjcC10cmVlLmggKERFQ0xfTUFZQkVfVEVNUExBVEUpOiBOZXcgbWFjcm8uCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogSGFuZGxlIGd1aWRpbmcgZGVjbHMuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCgkqIGRlY2wyLmMgKG1hcmtfdXNlZCk6IERvIHN5bnRoZXNpcyBoZXJlLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTm90IGhlcmUuCgkoYnVpbGRfb3Zlcl9jYWxsKTogT3IgaGVyZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IE9yIGhlcmUuCgkqIHRyZWUuYyAoYm90X21hbmlwKTogQ2FsbCBtYXJrX3VzZWQgb24gZnVuY3Rpb25zIHVzZWQgaW4gZGVmYXVsdAoJYXJncy4KClRodSBBdWcgIDggMTc6NDg6MTYgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBEZWxldGUgY29kZSB0aGF0IGRpc2FibGVkIHZ0YWJsZQoJaGV1cmlzdGljIG9uIHN5c3RlbXMgd2l0aCBBU01fT1VUUFVUX0VYVEVSTkFMLgoKV2VkIEF1ZyAgNyAxMjo0NDoxMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIHN0YXRpYyBjYWxsIGNvbnRleHQKCWJldHRlci4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogU2V0IHRoZSBERUNMX0NPTlRFWFQgb2YgdGhlIHJlc3VsdCB0bwoJdGhlIGZ1bmN0aW9uLCBub3QgaXRzIG91dGVyIGJsb2NrLgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogUGFzcyBmaWVsZHMgb24gdG8gYnVpbGRfb3BmbmNhbGwKCXJlZ2FyZGxlc3Mgb2YgVFlQRV9PVkVSTE9BRFNfQ0FMTF9FWFBSLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogUGFzcyBvbiB0byBidWlsZF9uZXdfbWV0aG9kX2NhbGwgc29vbmVyLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBKdXN0IHJldHVybiB3aGF0IGluc3RhbnRpYXRlX3R5cGUKCWdpdmVzIHVzLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgcHV0IGEgUE9JTlRFUl9UWVBFIHRvCglNRVRIT0RfVFlQRSBvbiBhbiBleHByZXNzaW9uLiAgQWxzbyBtYWtlIGEgY29weSBvZiByaHMgaW5zdGVhZCBvZgoJbW9kaWZ5aW5nIGl0LgoKVHVlIEF1ZyAgNiAxMjo1ODo0NiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGNvbXBhcmVfaWNzKTogSGFuZGxlIHF1YWxfY29udiBhZnRlciBsdmFsdWVfY29udi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBEb24ndCB0YWtlIGVudW1zIGZvciArKy4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBIYW5kbGUgbm9uLWFnZ3JlZ2F0ZXMgYW5kIGZpZWxkIGNhbGxzLgoJTW92ZSBuZXcgb3ZlcmxvYWRpbmcgY29kZSBmcm9tLi4uCgkqIGN2dC5jOiBIZXJlLgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBEb24ndCBjaGVjayBkZWZhdWx0IGFyZ3MgaW4gdGVtcGxhdGVzLgoKTW9uIEF1ZyAgNSAxNzoxNzowNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfbmV3X29wKTogRml4IGFyZ3MgdG8gYnVpbGRfdW5hcnlfb3AuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IERvbid0IGNhbGwgdHlwZV9wcm9tb3Rlc190byBvbiBmbG9hdC4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIGRlZmF1bHQgYXJnLgoKCSogY3Z0LmMgKGJ1aWxkX25ld19vcCk6IFBhc3Mgbm9uLW92ZXJsb2FkZWQgY2FzZXMgb24gcmF0aGVyIHRoYW4KCXJldHVybmluZyBOVUxMX1RSRUUuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9iaW5hcnlfb3ApOiBBdm9pZCBkb2luZyBleHRyYSB3b3JrLgoJKGJ1aWxkX3hfdW5hcnlfb3ApOiBMaWtld2lzZS4KCShidWlsZF94X2NvbmRpdGlvbmFsX2V4cHIpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGJ1aWxkX292ZXJfY2FsbCk6IFJldHVybi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBGaXggTUVNQkVSX1JFRi4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCk1vbiBBdWcgIDUgMTc6MDc6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBQdXQgYnVnIGZpeCBpbnRvIGNvZGUgYnV0IGxlYXZlCglkaXNhYmxlZCBmb3Igbm93IHNvIHdlIGNhbiBiZSBidWcgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHJlbGVhc2VzCgl0aGF0IGRvIHJlcGVhdHMgaW5jb3JyZWN0bHkuICBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gZW5hYmxlIGl0LgoKTW9uIEF1ZyAgNSAxMzo0NjoyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF9saWtlKTogRG9uJ3QgY2FsbCBidWlsZF9jcGx1c19uZXcgdHdpY2UuCgoJKiBjYWxsLmMsIGNwLXRyZWUuaCwgY3Z0LmMsIGRlY2wyLmMsIGluaXQuYywgbWV0aG9kLmMsIHB0LmMsIHR5cGVjay5jOgoJQ29udHJvbCBuZXcgb3ZlcmxvYWRpbmcgY29kZSB3aXRoIC1mYW5zaS1vdmVybG9hZGluZy4KClN1biBBdWcgIDQgMTU6Mjk6MTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX292ZXJfY2FsbCk6IENhbGwgYnVpbGRfY3BsdXNfbmV3LgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogSWYgYm90aCBvcGVyYW5kcyBhcmUgVEFSR0VUX0VYUFJzLCB3cmFwCgl0aGUgQ09ORF9FWFBSIGluIGEgVEFSR0VUX0VYUFIgc28gdGhleSB1c2UgdGhlIHNhbWUgc2xvdC4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBQcm9wYWdhdGUgSU5ESVJFQ1RfQklORCB0byAKCXJlY3Vyc2l2ZSBjYWxscy4KCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBQcm9wYWdhdGUKCVRZUEVfTkVFRFNfe0NPTlNUUlVDVElORyxERVNUUlVDVE9SfS4KClNhdCBBdWcgIDMgMTQ6MDU6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGpvdXN0KTogTW9yZSA/OiBrbHVkZ2luZy4gIFNpZ2guCgkoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgdHJ5IHRvIHN5bnRoZXNpemUgZ2xvYmFsIGZucy4KCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBVc2UgYmluZm8gbWFya2luZy4KClNhdCBBdWcgIDMgMTI6MzM6NDIgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoYnVpbGRfbWlfbWF0cml4KTogVXNlIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGNpZAoJd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IG1pX3NpemUuCgpTYXQgQXVnICAzIDAxOjI3OjQxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogRG8gY29uc2lkZXIgdHlwZSBjb252ZXJzaW9uIG9wcwoJZm9yIHRoZSBmaXJzdCBwYXJtcyBvZiArPSBldCBhbC4KCShzdHJpcF90b3BfcXVhbHMpOiBOZXcgZm4uCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBVc2UgaXQgaW5zdGVhZCBvZiBUWVBFX01BSU5fVkFSSUFOVC4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IEJlIGNhcmVmdWwgYWJvdXQgYXJyYXlzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEhhbmRsZSB2dGFibGUgb3B0aW1pemF0aW9uLgoKRnJpIEF1ZyAgMiAwMToyNjo1OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKExPT0tVUF9OT19URU1QX0JJTkQpOiBOZXcgZmxhZy4KCSogY3Z0LmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogVXNlIGl0LgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBVc2UgaXQuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlLCBDT05EX0VYUFIpOiBVc2UgaXQuCgoJKiBjdnQuYyAoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBDaGVjayBmb3IgZXJyb3IgYXJncy4KCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBKdXN0IGNoZWNrIERFUklWRURfRlJPTV9QLCBub3QgVU5JUVVFTFkuCgoJKiBneHguZ3BlcmY6IEFkZCBfX251bGwuCgkqIGhhc2guaDogUmVnZW5lcmF0ZS4KCSogbGV4Lmg6IEFkZCBSSURfTlVMTC4KCSogbGV4LmMgKGluaXRfbGV4KTogQ3JlYXRlIG51bGxfcG9pbnRlcl9ub2RlIGhlcmUsIHN0aWNrIGl0IGluCglSSURfTlVMTC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFN0aWxsIHNldCBpdHMgdHlwZSBoZXJlLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogRG9uJ3QgcHJvZHVjZSBudWxsX3BvaW50ZXJfbm9kZS4KCShjb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBMaWtld2lzZS4KCShudWxsX3B0cl9jc3RfcCk6IENoZWNrIGZvciBudWxsX3BvaW50ZXJfbm9kZTsgb25seSBhY2NlcHQgKHZvaWQqKTAKCWlmICghIHBlZGFudGljKS4KCSogY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFVzZSBudWxsX3B0cl9jc3RfcC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4gIERvbid0IHByb2R1Y2UKCW51bGxfcG9pbnRlcl9ub2RlLgoKCSogZXJyb3IuYyAoYXJnc19hc19zdHJpbmcpOiBIYW5kbGUgbGlzdHMgb2YgYWN0dWFsIGFyZ3MsIHRvby4KCSogY3Z0LmMgKG51bGxfcHRyX2NzdCk6IFN1cHBvcnQgKHZvaWQqKTAgZm9yIG5vdy4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSW1wcm92ZSBkaWFnbm9zdGljcy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuICBNb3ZlIGNhbGwgYmVmb3JlIGRlZiBkaWFnbm9zdGljLi4uCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGVyZS4KCgkqIGN2dC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBEb24ndCBjb21wbGFpbiBhYm91dCBubyBtYXRjaCBpZgoJTE9PS1VQX1NQRUNVTEFUSVZFTFkuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRml4ICd0aGlzJyBmb3IgdmlydHVhbCBmbi4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgZGlhZ25vc3RpYy4KClRodSBBdWcgIDEgMTY6NDU6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBFeHBlY3QgJ3RoaXMnIGFuZCAnaW5fY2hyZycgZm9yCgljb25zdHJ1Y3RvcnMgdG8gYmUgcGFzc2VkIGluLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBQYXNzIHRoZW0gaW4uCgkoY29udmVydF9saWtlKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBIYW5kbGUgb3ZlcmxvYWRlZCBjb252ZXJzaW9ucy4KCShidWlsZF9vdmVyX2NhbGwpOiBQYXNzIHRoZSByaWdodCBhcmdzIHRvIGJ1aWxkX3Zmbl9yZWYuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCBwbWYgY29udnMuCgkoam91c3QpOiBIYW5kbGUgY29tcGFyaW5nIHN0YXRpY3MgYW5kIG5vbi1zdGF0aWNzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IE5ldyBmbi4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgaXQgaWYgTkVXX09WRVIuCgpUaHUgQXVnICAxIDE2OjA2OjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgdXNlICVPIG9uIElERU5USUZJRVJfT1BOQU1FX1BzLCB1c2UKCSVEIGluc3RlYWQuCgpUaHUgQXVnICAxIDE1OjI0OjAyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBVc2UgbWF5YmVfYnVpbGRfY2xlYW51cF9hbmRfZGVsZXRlCglpbnN0ZWFkIG9mIGp1c3QgbWF5YmVfYnVpbGRfY2xlYW51cCBzbyB0aGF0IHdlIGRlYWxsb2NhdGUgdGhlCgl0aHJvd24gb2JqZWN0LgoKVGh1IEF1ZyAgMSAxNToxODowMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBNYWtlIG5vbi1zdGF0aWMgZm9yIHB0LmMncyB1c2UuCgkqIGNwLXRyZWUuaCAoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogQWRkIGRlY2wuCgpUaHUgQXVnICAxIDExOjUzOjUxIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIGNvbXBsZXRlX3R5cGUuIEFsc28sIGlmCgl3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCB3ZSBqdXN0IGluc3RhbnRpYXRlZCBhIHRlbXBsYXRlCgljbGFzcyB3aXRoIGEgdnRhYmxlLCBjYWxsIGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbC4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IERvbid0IGV4cGxvZGUgKG9yIGV4cGxvZGUgbW9yZSBncmFjZWZ1bGx5CglhcyBhcHByb3ByaWF0ZSkgaWYgdGhlIG9iamVjdCBiZWluZyBkdW1wZWQgaGFzIGEgbnVsbCB0eXBlLgoJKGR1bXBfZXhwcik6IExpa2V3aXNlLgoKCSogc2VhcmNoLmMgKGJ1aWxkX21pX21hdHJpeCk6IEVuc3VyZSB0aGF0IG1pX3NpemUgaXMgbGFyZ2UgZW5vdWdoLAoJYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBub2RlcyB0aGF0IHdlJ2xsIG5lZWQgYmVmb3JlIGFsbG9jYXRpbmcKCXRoZSBhcnJheS4KCShsb29rdXBfZm5maWVsZHMpOiBGaXggY29tbWVudC4KCShicmVhZHRoX2ZpcnN0X3NlYXJjaCk6IEZpeCBjb21tZW50LgoKV2VkIEp1bCAzMSAwOTo1NzowNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFByb3BhZ2F0ZSBUWVBFX1BBQ0tFRCBhbmQKCVRZUEVfQUxJR04uCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBDYWxsIGNwbHVzX2RlY2xfYXR0cmlidXRlcyBoZXJlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IE5vdCBoZXJlLgoJKiBjcC10cmVlLmg6IEFkanVzdC4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBOZXcgcGFyYW1ldGVyIFNUUklDVC4KCSh1bmlmeSk6IElmIFNUUklDVCwgZG9uJ3QgYWxsb3cgY3YgYWRkaXRpb24gb3IgYmFzZSBkZWR1Y3Rpb24uCgkqIGNhbGwuYywgY2xhc3MuYywgY3Z0LmMsIGNwLXRyZWUuaDogQWRqdXN0LgoKVHVlIEp1bCAzMCAxMzowNjoxMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X3RlbXBsYXRlX2Jhc2V7X3JlY3Vyc2l2ZX0pOiBOZXcgZm5zLgoJKiBwdC5jIChtb3JlX3NwZWNpYWxpemVkKTogTmV3IGZuLgoJKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBVc2UgaXQuCgkodW5pZnkpOiBIYW5kbGUgYmFzZSBkZWR1Y3Rpb24uCgkqIGN2dC5jIChqb3VzdCk6IFVzZSBtb3JlX3NwZWNpYWxpemVkLgoJRG9uJ3QgYXJiaXRyYXJpbHkgY2hvb3NlIGJldHdlZW4gbm9uLWJ1aWx0aW4gY2FuZGlkYXRlcy4KCShidWlsZF9vdmVyX2NhbGwpOiBDYWxsIHJlcXVpcmVfY29tcGxldGVfdHlwZS4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBTdGF0aWNzIGFyZSBzdGF0aWMgZXZlbiBpbiBhICNwcmFnbWEKCWludGVyZmFjZSBmaWxlLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBEaXNhYmxlIHZ0YWJsZSBoZXVyaXN0aWMgb24KCXN5c3RlbXMgd2l0aCBBU01fT1VUUFVUX0VYVEVSTkFMLgoKCSogY3Z0LmMgKGNvbXBhcmVfaWNzKTogRml4IGNvbXBhcmlzb24gb2YgUE1FTV9DT05WIGFuZCBCQVNFX0NPTlYuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IE5vIHN0ZCBjb252IHRvIGVudW0gdHlwZS4KCgkqIGN2dC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogRml4IG9yZGVyIG9mIGFyZ3MgdG8gREVSSVZFRF9GUk9NX1AKCWZvciBwdG0ncy4KCgkqIGN2dC5jIChyZWZlcmVuY2VfYmluZGluZyk6IEJpbmQgZGlyZWN0bHkgdG8gYSBiYXNlIHN1Ym9iamVjdCBvZgoJYSBjbGFzcyBydmFsdWUuCgoJKiBjdnQuYyAoYnVpbGRfbmV3X29wKTogRW5mb3JjZSBhY2Nlc3MgY29udHJvbC4KClR1ZSBKdWwgMzAgMDk6MjI6NTMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFdoZW4gc2Nhbm5pbmcgdGhlCgl1bmlvbiBmb3IgYSBuYW1lZCBmaWVsZCwgc2tpcCB0aGluZ3MgdGhhdCBhcmVuJ3QgRklFTERfREVDTHMuCgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBEb24ndCBzY2FuIGZuZGVjbCdzIHJ0bCBpZgoJd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZTsganVzdCBhc3N1bWUgdGhlIGZ1bmN0aW9uIGNhbid0CgliZSBpbmxpbmVkLgoKTW9uIEp1bCAyOSAxNTo0ODozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBTdGljayBhIGR1bW15IGNvbnZlcnNpb24gaW4gaWYKCWl0IGZhaWxlZC4KCgkqIGN2dC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSGFuZGxlIG92ZXJsb2FkZWQKCWNvbnZlcnNpb24gb3BzLgoKCSogY3Z0LmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBEb24ndCBjb25zaWRlciB0eXBlIGNvbnZlcnNpb24KCW9wZXJhdG9ycyBmb3IgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiBvcGVyYXRvcj0uCgpNb24gSnVsIDI5IDE1OjMzOjU1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBPbmx5IGNhbGwgbGF5b3V0X3R5cGUgaWYgd2UncmUgbm90CglleHBhbmRpbmcgYSB0ZW1wbGF0ZS4KCk1vbiBKdWwgMjkgMTQ6NDA6MzggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbXBhcmVfaWNzKTogT29wcy4KCgkqIGN2dC5jIChvcF9lcnJvcik6IE9vcHMuCgoJKiBjcC10cmVlLmRlZjogQWRkIFJWQUxVRV9DT05WLCByZW5hbWUgRVhBQ1RfQ09OViB0byBJREVOVElUWV9DT05WLgoJKiBjdnQuYzogQWRkIElERU5USVRZX1JBTksgYmVmb3JlIG90aGVycy4gIFVzZSByZWFsX2x2YWx1ZV9wLgoJKGJ1aWxkX2NvbnYpOiBVc2UgdGhlbS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogVXNlIHRoZW0uCgkoY29udmVydF9saWtlKTogSGFuZGxlIHRoZW0uCgkoYnVpbGRfbmV3X29wKTogSGFuZGxlIGJ1aWx0aW4gQ09ORF9FWFBSIGFnYWluLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBTdHJpcCBjdi1xdWFscy4gIEZpeCBvb3BzLiAgSW5jbHVkZSBlbnVtcwoJaW4gbGlzdHMgb2YgdHlwZXMgZm9yIENPTkRfRVhQUi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBBZGQgZW51bSBjYW5kaWRhdGVzIGZvciBDT05EX0VYUFIuCgpNb24gSnVsIDI5IDEyOjA1OjQwIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogQWx3YXlzIGF0dGVtcHQgdG8gYnVpbGQgYSBjYWxsIHRvCgl0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgZXZlbiBpZiB3ZSdyZSB1c2luZyBhIGRlZmF1bHQgb25lLgoJKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKTW9uIEp1bCAyOSAxMToyNTowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBBIFJFRl9CSU5EIGdldHMgdGhlIHJlZmVyZW5jZSB0eXBlLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShjb252ZXJ0X2xpa2UpOiBMaWtld2lzZS4KCShjb21wYXJlX2ljcyk6IExpa2V3aXNlLgoJKGNvbXBhcmVfcXVhbCk6IExpa2V3aXNlLgoJKHByaW50X3pfY2FuZGlkYXRlcyk6IEhhbmRsZSBubyBjYW5kaWRhdGVzLgoJKGJ1aWxkX25ld19vcCk6IERvbid0IGhhbmRsZSBidWlsdGluIENPTkRfRVhQUiBmb3Igbm93LgoKU2F0IEp1bCAyNyAxMToyNzo0NyAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBJbml0IGxvY2FsIHZhciBpbiBhbiBBTlNJIHdheS4KCkZyaSBKdWwgMjYgMDE6MDc6MjIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGpvdXN0KTogSWYgdGhlIGNhbmRpZGF0ZXMgYXJlIHRoZSBzYW1lLCBhcmJpdHJhcmlseSBwaWNrIG9uZS4KCgkqIGN2dC5jIChidWlsZF9idWlsdGluX2NhbmRpZGF0ZSk6IE9vcHMuCgkoYnVpbGRfbmV3X29wKTogT29wcy4KCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFBhc3MgQ09ORF9FWFBSIG9uLgoJKiBjdnQuYyAoYnVpbGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBSZW9yZ2FuaXplLCBzdXBwb3J0IENPTkRfRVhQUi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGV7LHN9KTogTGlrZXdpc2UuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IExpa2V3aXNlLgoJKHByaW50X3pfY2FuZGlkYXRlcywgb3BfZXJyb3IsIGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKHR5cGVfZGVjYXlzX3RvKTogTmV3IGZuLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBKdXN0IHNheSA/OiBmb3IgQ09ORF9FWFBSLgoKVGh1IEp1bCAyNSAwOTozMzozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IENhbGwgbGF5b3V0X3R5cGUgcmF0aGVyIHRoYW4gYnVpbGRpbmcKCWEgbmV3IGFycmF5IHR5cGUuCgoJKiBjdnQuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogUG9pbnRlciBhcml0aG1ldGljIGNhbmRpZGF0ZXMKCW9ubHkgdXNlIHB0cmRpZmZfdC4KCldlZCBKdWwgMjQgMTI6NDU6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmM6IEFsd2F5cyBjb21waWxlIHRoZSBuZXcgb3ZlcmxvYWRpbmcgY29kZSAoYnV0IGRvbid0IHVzZSBpdCkuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IEFkZCBhIEJBU0VfQ09OViB3aGVuIGNvbnZlcnRpbmcgdG8KCXRoZSBzYW1lIGNsYXNzIHR5cGUuCgkoY29udmVydF9saWtlKTogSGFuZGxlIEJBU0VfQ09OVi4KClR1ZSBKdWwgMjMgMTI6NDY6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX25ld19vcCk6IFN1cHBvcnQge01BWCxNSU59X0VYUFIuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogTGlrZXdpc2UuCgoJTkVXX09WRVIgY2hhbmdlczoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFRyeSBhbiBvcGVyYXRvciBmdW5jdGlvbgoJd2hlbmV2ZXIgd2UgY2FsbCBhbiBvYmplY3Qgb2YgY2xhc3MgdHlwZS4KCSogbWV0aG9kLmMgKGJ1aWxkX29wZm5jYWxsKTogUGFzcyBDQUxMX0VYUFJzIHRocm91Z2guCgkqIGN2dC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogRG8gY29uc3QtcmVmIGNhc2UgZmlyc3QuCgkoYWRkX2NvbnZfY2FuZGlkYXRlLCBidWlsZF9vYmplY3RfY2FsbCwgb3BfZXJyb3IpOiBOZXcgZm5zLgoJKHB0cl9jb21wbGV0ZV9vYiwgVFlQRV9QVFJPQl9QKTogdm9pZCBpcyBub3QgYW4gb2JqZWN0IHR5cGUuCgkoe2FkZCxidWlsZH1fYnVpbHRpbl9jYW5kaWRhdGV7LHN9LCBwcmludF96X2NhbmRpZGF0ZXMpOiBEaXNwbGF5IAoJYnVpbHRpbiBjYW5kaWRhdGVzLgoJKGJ1aWxkX25ld19vcCk6IEhhbmRsZSBDQUxMX0VYUFIuICBEb24ndCB0cnkgdG8gZGVjYXkgdm9pZC4KCUZhbGwgYmFjayBvbiBwcmVpbmNyZW1lbnQgaGFuZGxpbmcuICBVc2Ugb3BfZXJyb3IuICAKCUhhbmRsZSB3YXJuX3N5bnRoLgoJKGNvbnZlcnRfbGlrZSk6IFBhc3MgSU5ESVJFQ1RfQklORC4gIERvbid0IHRyeSB0byBkbyBhbnl0aGluZyB3aXRoIAoJYW4gZXJyb3JfbWFya19ub2RlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEhhbmRsZSBQUk9NT1RFX1BST1RPVFlQRVMgYW5kIGVsbGlwc2lzIHByb21vdGlvbnMKCXByb3Blcmx5LgoKTW9uIEp1bCAyMiAxNjoyMTo1NSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogSGFuZGxlIENPTlRJTlVFX1NUTVQuCgpNb24gSnVsIDIyIDE1OjM4OjU4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmXzEpOiBVc2UgYnVpbGRfY29tcG9uZW50X3JlZgoJaW5zdGVhZCBvZiBvcGVuIGNvZGluZyBpdCBoZXJlLgoKTW9uIEp1bCAyMiAxMjoxODo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IERvbid0IGxpbmsgd2l0aCAtbGcrKy4KCglORVdfT1ZFUiBjaGFuZ2VzOgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEb24ndCB1c2UgY29udmVydF9mcm9tX3JlZmVlbmNlIG9uCglyZXN1bHQgb2YgYnVpbGRfdHlwZV9jb252ZXJzaW9uLgoJKGNwX2NvbnZlcnQpOiBPbmx5IGNhbGwgYnVpbGRfbWV0aG9kX2NhbGwgZm9yIGN0b3JzIGlmCglidWlsZF90eXBlX2NvbnZlcnNpb24gZmFpbGVkLgoJKHB0cl9jb21wbGV0ZV9vYik6IE5ldyBmdW5jdGlvbi4KCShUWVBFX1BUUnssT0IsTUVNfV9QKTogTmV3IG1hY3Jvcy4KCSh7YWRkLGJ1aWxkfV9idWlsdGluX2NhbmRpZGF0ZXssc30pOiBOZXcgZnVuY3Rpb25zLgoJKHByaW50X3pfY2FuZGlkYXRlcyk6IEhhbmRsZSBidWlsdGlucy4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogRG9uJ3QgdXNlIGNvbnZlcnNpb24gZm5zIGZvciAKCWNvbnZlcnRpbmcgdG8gYSBiYXNlIHR5cGUuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFNldCBJQ1NfVVNFUl9GTEFHIG9uIEFNQklHX0NPTlZzLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uKTogVXNlIGNvbnZlcnRfZnJvbV9yZWZlcmVuY2UuCgkoYnVpbGRfbmV3X29wKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEZpeCBoYW5kbGluZyBvZiBtZXRob2RzLgoJKGNvbXBhcmVfaWNzKTogSGFuZGxlIEFNQklHX0NPTlYgcHJvcGVybHkuCgkqIHR5cGVjazIuYzogSW5jcmVtZW50IGFib3J0IGNvdW50LgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBGb3J3YXJkIG1vc3QgcmVxdWVzdHMgdG8gYnVpbGRfbmV3X29wLgoJKiBjcC10cmVlLmggKElTX09WRVJMT0FEX1RZUEUpOiBUd2Vhay4KCkZyaSBKdWwgMTkgMTc6NTk6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByLCBjYXNlIENPTlNUUlVDVE9SLCBjYXNlIENBU1RfRVhQUik6IFRha2Ugb3V0CglpbnZhbGlkIHNlY29uZCBhcmd1bWVudCB0byBkdW1wX2V4cHJfbGlzdC4KCkZyaSBKdWwgMTkgMTQ6MDQ6MDUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogTWFrZSBzdXJlIHdlIGRvIG9iai0+WDo6aSBjb3JyZWN0bHkuCgpUaHUgSnVsIDE4IDE0OjQ4OjIzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBBU01fT1VUUFVUX0VYVEVSTkFMLCBub3QKCUFTU0VNQkxFX0VYVEVSTkFMLgoKTW9uIEp1bCAxNSAxNzo0ODo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IE5ldyBwZWR3YXJuIGZvciB1c2luZyB7IH0KCXRvIGluaXRpYWxpemUgYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbi4KCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMxKTogQXZvaWQgdXNlIG9mIGRpZ2VzdF9pbml0IHNvIHRoYXQKCXdlIGNhbiBhdm9pZCB0aGUgbmV3IGVycm9yLgoKTW9uIEp1bCAxNSAxNTo0MjowMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYzEpOiBOZXcgZnVuY3Rpb24gdG8gaGlkZSBkZXRhaWxzIG9mCglwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbnMgYmV0dGVyLgoKTW9uIEp1bCAxNSAxNDoyMzowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IFJlc29sdmUgT0ZGU0VUX1JFRnMgdGhhdCBhcmUKCW1ldGhvZHMgaW50byB0aGUgYWN0dWFsIG1ldGhvZCwgYXMgd2Uga25vdyB0aGUgaW1wbGllZCBvYmplY3QgaXMKCW5vdCB1c2VkLgoKTW9uIEp1bCAxNSAxMzowODoyOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtYXliZWNvbW1hX3dhcm4pOiBPbmx5IGVtaXQgdGhlIHBlZHdhcm4gaWYgd2UncmUgbm90CglpbnNpZGUgYSBzeXN0ZW0gaGVhZGVyLgoKRnJpIEp1bCAxMiAxNjozMDowNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDYWxsIGNvbXBsZXRlX3R5cGUgb24gdGhlCglpbnN0YW5jZSB0eXBlLgoKVGh1IEp1bCAxMSAxNzoxNjo0MCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEFsd2F5cyBidWlsZCB1cCBhbiBPRkZTRVRfUkVGCglmb3Igb2JqX3B0ci0+ZnVuYyBzbyB0aGF0IHdlIGNhbiBrbm93IHdoaWNoIG9iamVjdCB0byB1c2UgaW4gYQoJbWV0aG9kIGNhbGwuCgpXZWQgSnVsIDEwIDE5OjM2OjM3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jKTogUmVtb3ZlIHNvcnJ5LCBub3cgd2UgY2FuIGNhc3QKCWFyb3VuZCB0aGluZ3MuICBBbHNvIGltcHJvdmUgbWFpbnRhaW5hYmlsaXR5LgoKV2VkIEp1bCAxMCAxODoyMDoxMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDaGVjayBmb3Igb3ZlcmZsb3cgd2hlbiBldmFsdWF0aW5nIGFuCglhcnJheSBkaW1lbnNpb24uCgpXZWQgSnVsIDEwIDE3OjI2OjE5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogRG9uJ3QgY2hlY2sgZm9yIGFtYmlndWl0eSB3aXRoIGNvbnN0cnVjdG9yCglpZiBORVdfT1ZFUi4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBQYXNzIGZ1bmN0aW9uIG92ZXJsb2FkCglxdWVzdGlvbnMgdG8gbmV3IG92ZXJsb2FkaW5nIGNvZGUgaWYgTkVXX09WRVIuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogT25seSBjaGVjayBmb3IgdHlwZSBjb252ZXJzaW9uIG9wcwoJaWYgd2UncmUgZG9pbmcgY29weS1pbml0aWFsaXphdGlvbiAoaS5lLiBMT09LVVBfT05MWUNPTlZFUlRJTkcpLgoJRG9uJ3QgY2hlY2sgZm9yIGFtYmlndWl0eSB3aXRoIGNvbnN0cnVjdG9yIGlmIE5FV19PVkVSLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEZXJlZmVyZW5jZSB0aGUgcmVzdWx0IG9mIGEgdHlwZQoJY29udmVyc2lvbiBvcGVyYXRvci4KCShidWlsZF9jb252KTogUHJvcGFnYXRlIElDU19VU0VSX0ZMQUcuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IENhbGwgaW5zdGFudGlhdGVfdHlwZS4KCVBhc3MgTE9PS1VQX09OTFlDT05WRVJUSU5HIGluc3RlYWQgb2YgTE9PS1VQX05PUk1BTC4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogRml4IGN2LXF1YWxzIG9uIGFyZ3R5cGUuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogQ2FsbCBpdC4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSWYgTE9PS1VQX09OTFlDT05WRVJUSU5HLCBkb24ndAoJY29uc2lkZXIgbm9uLWNvbnZlcnRpbmcgY29uc3RydWN0b3JzLgoJQ2FsbCBwcmludF96X2NhbmRpZGF0ZXMuCglSZXR1cm4gYW4gQU1CSUdfQ09OViBmb3IgYW4gYW1iaWd1b3VzIGNvbnZlcnNpb24uCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBIYW5kbGUgQU1CSUdfQ09OVi4KCShjb252ZXJ0X2xpa2UpOiBGaXggdGVzdCBmb3IgYnVpbGRpbmcgVEFSR0VUX0VYUFIuCglDYWxsIGluc3RhbnRpYXRlX3R5cGUuCglIYW5kbGUgQU1CSUdfQ09OViBhbmQgTFZBTFVFX0NPTlYuCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGFuZGxlIDAgYXJncyBhbmQgZWxsaXBzaXMuCgkqIGNwLXRyZWUuZGVmOiBBZGQgQU1CSUdfQ09OVi4KClR1ZSBKdWwgIDkgMTc6NDg6NDggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogSWYgd2UgZmluZCBtZW0gaW4gb2JqIHdoZW4gcGFyc2luZwoJYG9iai0+bWVtJywgbWFrZSBzdXJlIHdlIHJldHVybiB0aGUgcmlnaHQgdmFsdWUuCgpUdWUgSnVsICA5IDE2OjExOjI4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKVHVlIEp1bCAgOSAxMjo0NjozNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX2JpbmRpbmdzKTogTWFrZSBzdGF0aWMuCgpNb24gSnVsICA4IDE2OjQyOjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogRG9uJ3QgY2hlY2sgdHlwZSBjb252ZXJzaW9ucyBpZgoJTkVXX09WRVIuCgoJKiBjdnQuYyAoel9jYW5kaWRhdGUpOiBQdXQgYmFjayB0ZW1wbGF0ZSBmaWVsZC4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogU2V0IGl0LgoJKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShqb3VzdCk6IFVzZSBpdC4KCShjb21wYXJlX3F1YWwpOiBIYW5kbGUgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gbWVtYmVycy4KCShjb21wYXJlX2ljcyk6IEhhbmRsZSByZWZlcmVuY2UgYmluZGluZ3MuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByb3BhZ2F0ZSBERUNMX09ORV9PTkxZLgoKTW9uIEp1bCAgOCAxNjoxODo1NiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogVXNlIGNvbXB0eXBlcyBpbnN0ZWFkIG9mIGNvbXBhcmluZwoJcG9pbnRlcnMsIHNvIHdlIGNhbiBoYW5kbGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCkZyaSBKdWwgIDUgMTY6NTE6NTMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogV2UgaGF2ZSB0byBjYWxsIGNvbXBsZXRlX3R5cGUKCWhlcmU7IGxldCdzIG1ha2UgaXQgZXhwbGljaXQgaW5zdGVhZCBvZiBhIHNpZGUgZWZmZWN0IG9mIGFuCgllcnJvciBjaGVjay4KCldlZCBKdWwgIDMgMTY6Mjk6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKHpfY2FuZGlkYXRlKTogUmVtb3ZlIHRlbXBsYXRlIGZpZWxkLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogSGFuZGxlIGJpbmRpbmcgdG8gdGVtcG9yYXJ5LgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogSGFuZGxlIGFydGlmaWNpYWwgY29uc3RydWN0b3IgcGFybXMuCglIYW5kbGUgZnVuY3Rpb25zIHdpdGggdG9vIGZldyBwYXJtcy4KCShhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgY29uc3RydWN0b3JzLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogU3VwcG9ydCB0ZW1wbGF0ZXMuCgkoY29tcGFyZV9pY3MpOiBGaXggcmVmZXJlbmNlLCBpbmhlcml0YW5jZSBoYW5kbGluZy4KCk1vbiBKdWwgIDEgMjI6NTg6MTggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsLmM6IEFkZCBzaWduZWRfc2l6ZV96ZXJvX25vZGUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBCdWlsZCBpdC4KCSogY2xhc3MuYyAocHJlcGFyZV9mcmVzaF92dGFibGUpOiBVc2UgaXQgaW5zdGVhZCBvZiBzaXplX3plcm9fbm9kZQoJd2hlbiB3ZSdyZSB0cnlpbmcgdG8gbWFrZSBhIG5lZ2F0aXZlIGRlbHRhLgoKTW9uIEp1bCAgMSAxNzo1NjoxOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJU3RvcCBkb2luZyB0aGlzIGRhbW4gaW5kZXg9PXN0cmNociB2YXJpYWJsZSBuYW1lIGNvbmZ1c2lvbi4KCSogY2xhc3MuYyAoYWRkX3ZpcnR1YWxfZnVuY3Rpb24pOiBDaGFuZ2UgbG9jYWwgdmFyIElOREVYIHRvIGJlCgluYW1lZCBJRFguCgkoYWRkX21ldGhvZCk6IExpa2V3aXNlLgoJKiBsZXguYyAocHJpbnRfcGFyc2Vfc3RhdGlzdGljcyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkc19oZXJlKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UuCgkoZ2V0X2Jhc2VsaW5rcyk6IExpa2V3aXNlLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCgkoYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF94X2FycmF5X3JlZik6IENoYW5nZSBJTkRFWCBwYXJtIHRvIGJlIG5hbWVkIElEWC4KCShnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYyk6IExpa2V3aXNlLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBDaGFuZ2UgbG9jYWwgdmFyIElOREVYIHRvIGJlIElEWC4KCShjX2V4cGFuZF9zdGFydF9jYXNlKTogTGlrZXdpc2UuCgpTYXQgSnVuIDI5IDE0OjA1OjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBNb3ZlIHVzZXItZGVmaW5lZCB0eXBlIGNvbnZlcnNpb24KCWhhbmRsaW5nIHRvIGJlZm9yZSBleHRyYWN0aW9uIG9mIFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFLgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogVXNlIGJ1aWxkX3R5cGVfY29udmVyc2lvbiB0byBjb252ZXJ0IHRvCgl0aGUgcmVmZXJlbmNlIHR5cGUgZGlyZWN0bHkuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCB2b2lkKiBjYXNlLCBub24tY29udmVyc2lvbnMuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBGaXggZXhwciA9PSAwIGNhc2UsIG5vbi1jb252ZXJzaW9ucy4KCShjb252ZXJ0X2xpa2UpOiBTdXBwb3J0IFJFRl9CSU5ELgoJKGNvbXBhcmVfcXVhbCk6IFNwbGl0IG91dCBmcm9tIGNvbXBhcmVfaWNzLgoJKGNvbXBhcmVfaWNzKTogVXNlIGl0LCBoYW5kbGUgaWNzZXMgd2l0aCBvbmx5IGEgcXVhbF9jb252LgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBEb24ndCBjcmFzaCBpZiBkZWNsIGlzIE5VTEwuCgpGcmkgSnVuIDI4IDExOjUyOjUxIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1jb25maWcuaW46IE5ldyBmaWxlLCBjb25maWd1cnkgZm9yIE1hYyBNUFcuCgkqIG1wdy1tYWtlLnNlZDogTmV3IGZpbGUsIG1ha2VmaWxlIGVkaXRpbmcgZm9yIE1QVy4KClRodSBKdW4gMjcgMTU6MTg6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIHJlcG9fdGVtcGxhdGVfdXNlZC4KCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBPbmx5IGxvb2t1cCBjb252ZXJzaW9ucyBpbgoJY29tcGxldGUgdHlwZXMuCgpUaHUgSnVuIDI3IDEyOjU5OjUzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmOiBSZW5hbWVkIGZyb20gdHJlZS5kZWYsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoCglnY2MncyB0cmVlLmRlZi4KCSogY3AtdHJlZS5oLCBsZXguYzogSW5jbHVkZSBjcC10cmVlLmRlZi4KCSogTWFrZWZpbGUuaW4gKENYWF9UUkVFX0gpOiBSZWZlcmVuY2UgY3AtdHJlZS5kZWYuCgpXZWQgSnVuIDI2IDE4OjI5OjQ3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlXzEpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgpNb24gSnVuIDI0IDE3OjE3OjMyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdGFydF9hbm9uX2Z1bmMpOiBNYWtlIHN1cmUgYW5vbnltb3VzIGZ1bmN0aW9ucyBhcmUKCW5ldmVyIGV4dGVybmFsLgoKRnJpIEp1biAyMSAxNToxMDo1OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IElmIGZ1bmN0aW9uX2RlcHRoID4gMSwgc2V0IG5lc3RlZC4KCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IFJldmVydCBCb2IncyBjaGFuZ2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEZpeCBoYW5kbGluZyBvZiBuYW1lZCBiaXRmaWVsZCB3aWR0aHMuCgpUaHUgSnVuIDIwIDIzOjM1OjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogSGFuZGxlIHR5cGVzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFdpdGggLWZleHRlcm5hbC10ZW1wbGF0ZXMsIGp1c3QgYWRkIHRoZSBjbGFzcwoJdG8gcGVuZGluZ190ZW1wbGF0ZXMgaW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIGl0IG5vdy4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBIYW5kbGUgdHlwZXMgaW4gcGVuZGluZ190ZW1wbGF0ZXMuCgpUaHUgSnVuIDIwIDE0OjA4OjQwIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogSGFuZGxlIGNvbnN0YW50IGRlY2xzIGFwcHJvcHJpYXRlbHkuCglHaXZlIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2Ugbm93IGluc3RlYWQgb2Ygc3Bld2luZyBjb3JlCglsYXRlci4KClRodSBKdW4gMjAgMTM6MDE6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYzogRG9uJ3QgdHVybiBvbiB0aHVua3MgYnkgZGVmYXVsdCBmb3Igbm93LgoKV2VkIEp1biAxOSAxMTozNzowNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IEhhbmRsZSBlcnJvcl9tYXJrX25vZGUuCgkoY29tbW9uX3R5cGUsIE9GRlNFVF9UWVBFKTogSGFuZGxlIHRlbXBsYXRlX3R5cGVfcGFybXMuCgpUdWUgSnVuIDE4IDEwOjAyOjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBJZiBhdF9lb2YsIGNhbGwgaW1wb3J0X2V4cG9ydF9kZWNsCglyZWdhcmRsZXNzIG9mIERFQ0xfSU5MSU5FLgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBTZXQgVFJFRV9BRERSRVNTQUJMRSBvbiBDT05TVFJVQ1RPUnMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBDb3B5IFRZUEVfU0laRS4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogU3VwcG9ydCB0ZW1wbGF0ZXMuCgkqIHRyZWUuZGVmOiBTdXBwb3J0IERZTkFNSUNfQ0FTVF9FWFBSLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoKTW9uIEp1biAxNyAxNToyMzozNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCShidWlsZF9jb25zdF9jYXN0KTogTGlrZXdpc2UuCgkqIHRyZWUuZGVmOiBTdXBwb3J0IENPTlNUL1NUQVRJQ19DQVNUX0VYUFIuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGlrZXdpc2UuCgpTdW4gSnVuIDE2IDEyOjMzOjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IERvbid0IHRydXN0CglUUkVFX1NZTUJPTF9SRUZFUkVOQ0VEIGZvciB2dGFibGVzIG9mIGxvY2FsIGNsYXNzZXMuCgpGcmkgSnVuIDE0IDE4OjEzOjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSGFuZGxlIG9wZXJhdG9yIFQuCgpXZWQgSnVuIDEyIDE3OjUyOjQwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogTW92ZSBjcmVhdGlvbiBvZiBQQVJNUyBpbnNpZGUgdGVzdCBvZgoJVFlQRV9IQVNfREVTVFJVQ1RPUiwgc2luY2UgaXQncyBuZXZlciB1c2VkIG91dHNpZGUgb2YgdGhhdCBibG9jay4KClR1ZSBKdW4gMTEgMTU6MDk6MTggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERvbid0IGFzc3VtZSB0aGF0Cgl0aGUgYXJndW1lbnRzIHRvID86IGFyZSBhbHdheXMgcG9pbnRlcnMgb3IgcmVjb3Jkcy4KClR1ZSBKdW4gMTEgMTM6NTY6MjMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogU3RpbGwgZW1pdCBzdGF0aWMvd2Vhay9jb21kYXQKCWNvcGllcyBvZiBpbmxpbmUgdGVtcGxhdGUgZnVuY3Rpb25zIHdpdGggLWZuby1pbXBsaWNpdC10ZW1wbGF0ZXMuCgpUdWUgSnVuIDExIDExOjQyOjEzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBEZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGJhc2V0eXBlCglwYXRoIHRvIHRoZSBkZXN0cnVjdG9yIHdlJ3JlIGNhbGxpbmcuCgpGcmkgSnVuICA3IDE1OjMwOjEwIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogQWx3YXlzIGNvcHkgdGhlIElOVEVHRVJfQ1NUIHVzZWQgdG8KCWluaXRpYWxpemUgdGhlIGVudW0sIGJlY2F1c2Ugd2UgcmVhbGx5IGFuZCB0cnVseSBkb24ndCBrbm93IHdoZXJlCglpdCBjYW1lIGZyb20uCgkoc3RhcnRfZW51bSk6IERvbid0IGNvcHkgaW50ZWdlcl96ZXJvX25vZGUgYmVjYXVzZQoJYnVpbGRfZW51bWVyYXRvciB3aWxsIGRvIGl0LgoKRnJpIEp1biAgNyAxMToxMTowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IERvIGFjY2VzcyBjb250cm9sIG9uIGJhc2UgZGVzdHJ1Y3RvcnMuCgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IFNldCB1cAoJSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgZm9yIG1lbWJlciBmdW5jdGlvbnMgc28gcHVzaGRlY2wgZG9lc24ndAoJaG9zZSB1cy4KCkZyaSBKdW4gIDcgMTA6Mzc6MzMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IElmIHdlIGhhdmUgYWxyZWFkeSBleHRlbmRlZCB0aGUKCWxpZmV0aW1lIG9mIHRoZSB0ZW1wb3JhcnksIGRvbid0IHRyeSBpdCBhZ2Fpbi4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvbid0IHRyeSBhbmQgY29udmVydCB0aGUgcmV0dXJuCgl2YWx1ZSB0d2ljZSB3aGVuIHdlIHdhbnQgYSByZWZlcmVuY2UsIG9uY2UgaXMgZW5vdWdoLgoJClR1ZSBKdW4gIDQgMTU6NDE6NDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2V4cHIsIGNhc2UgREVDTF9TVE1UKTogRG9uJ3QgcGFzcwoJTE9PS1VQX09OTFlDT05WRVJUSU5HIGF0IGFsbCBmb3Igbm93LgoKCSogc2VhcmNoLmMgKGFkZF9jb252ZXJzaW9ucyk6IFB1dCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBpbgoJVFJFRV9WQUxVRSwgdGhlIGJhc2V0eXBlIGluIFRSRUVfUFVSUE9TRS4KCSogY3Z0LmMgKGJ1aWxkX3R5cGVfY29udmVyc2lvbik6IEFkanVzdC4KCSogY3Z0LmMgKGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uKTogQWRqdXN0LgoJKiBjYWxsLmMgKHVzZXJfaGFyc2huZXNzKTogQWRqdXN0LgoKTW9uIEp1biAgMyAxNTozMDo1MiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFByZXRlbmQgdGhpcyBpcyBhIEZVTkNUSU9OX0RFQ0wgZm9yIHRoZQoJYmFja2VuZCdzIGJlbmVmaXQuCgpNb24gSnVuIDEwIDE4OjU4OjE5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBBZGQgYSBkdW1teSByZWdpb24sIGlmIHdlCglnZXQgYW4gZXJyb3IsIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGNvcmUgZHVtcGluZyBsYXRlci4KCkZyaSBNYXkgMzEgMTQ6NTY6MTMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChPRkZTRVRfUkVGKTogUmVtb3ZlLgoJKiB0cmVlLmRlZiAoQ1BfT0ZGU0VUX1JFRik6IFJlbmFtZSB0byBPRkZTRVRfUkVGLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogQ2xlYW51cCBjYWxsZXJzIG9mIGV4cGFuZF9leHByLgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IExpa2V3aXNlLgoJKGJ1aWxkX25ldyk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoZXhwYW5kX3RhcmdldF9leHByKTogTGlrZXdpc2UuCgpGcmkgTWF5IDMxIDE0OjIyOjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IERvbid0IHVzZSBUUkVFX1ZBTFVFIG9uIGEKCVRBUkdFVF9FWFBSLgoKV2VkIE1heSAyOSAxNzowNDozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogUmVkbyBob3cgYW5kIHdoZW4gdGVtcG9yYXJpZXMgYXJlCgljcmVhdGVkLgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBEb24ndCB0cnkgYW5kIGJlIHNtYXJ0IGFib3V0CglydW5uaW5nIGNsZWFudXBzLgoKV2VkIE1heSAyOSAxNjowMjowOCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogQWRkIE5VTExfVFJFRSB0byBhbGwgY2FsbHMgdG8gYnVpbGQKCShUQVJHRVRfRVhQUi4uLiksIG5vdyB0aGF0IGl0IGhhcyA0IGFyZ3VtZW50cy4KCSogdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBMaWtld2lzZS4KClRodSBNYXkgMjMgMTY6NDA6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByLCBjYXNlIENBU1RfRVhQUik6IEhhbmRsZSBUKCkgcHJvcGVybHkuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG9uJ3QgY2FsbCBwdXNoL3BvcF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKiBkZWNsLmMgKHN0cnVjdCBzYXZlZF9zY29wZSk6IFJlbW92ZSBuYW1lZF9sYWJlbHMsCgl7YmFzZSxtZW1iZXJ9X2luaXRfbGlzdC4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IERvbid0IHNldCB0aGVtLiAgQ2FsbAoJcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0IGlmIGFwcHJvcHJpYXRlLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IExpa2V3aXNlLgoKCSogbWV0aG9kLmMgKGRvX2J1aWxkX2Fzc2lnbl9yZWYpOiBSZW1vdmUgb2Jzb2xldGUgY2hlY2sgb2YKCVRZUEVfSEFTX0FTU0lHTl9SRUYgKGJhc2V0eXBlKS4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IERpYWdub3NlIHVzZXIgZGVmaW5pdGlvbiBvZgoJaW1wbGljaXRseS1kZWNsYXJlZCBtZXRob2RzLgoKVGh1IE1heSAyMyAxMjoxMzowOCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogQWRkIGNvZGUgdG8gZ2l2ZQoJbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlcyBpbnN0ZWFkIG9mIGNyYXNoaW5nLgoJKGRvX2J1aWxkX2Fzc2lnbl9yZWYpOiBEb24ndCBzeW50aGVzaXplIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGZvcgoJY2xhc3NlcyBjb250YWluaW5nIHJlZmVyZW5jZSBvciBjb25zdCBtZW1iZXJzLgoKCSogY2xhc3MuYyAoc3RydWN0IGJhc2VfaW5mbyk6IFJlbW92ZSBjYW50X3N5bnRoX2NvcHlfY3RvcgoJYW5kIGNhbnRfc3ludGhfYXNuX3JlZi4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBSZW1vdmUgdGhlIGNvZGUgdGhhdCB0cmllcyB0byBjb25kaXRpb25hbGl6ZQoJc3ludGhlc2lzIG9mIGNvcHkgY29uc3RydWN0b3JzICYgYXNzaWdubWVudCBvcGVyYXRvcnMgYmFzZWQgb24KCWFjY2VzcyBwZXJtaXNzaW9ucy4gSW5zdGVhZCwgbGV0IGl0IGZhaWwgd2hlbiBpdCB0cmllcyB0bwoJc3ludGhlc2l6ZSB0aGUgY29weSBjb25zdHJ1Y3Rvci4gVGhpcyB3aWxsIGdpdmUgbWVhbmluZ2Z1bCBlcnJvcgoJbWVzc2FnZXMgaW5zdGVhZCBvZiBzaWxlbnRseSBnZW5lcmF0aW5nIGNvZGUgdG8gcGVyZm9ybSBhIGJpdGNvcHkuCgpXZWQgTWF5IDIyIDExOjQ1OjE5IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBSZW1vdmUgb2xkLW4tY3J1ZnR5ICNpZiAwIGNvZGUgZm9yCglkZXRlcm1pbmluZyB0eXBlcyBmb3IgY29uc3RhbnQgdmFsdWVzLgoKCSogZGVjbC5jIChzdHJ1Y3QgbmFtZWRfbGFiZWxfbGlzdCk6IFVzZSBpbnN0ZWFkIG9mIHN0dWZmaW5nCglyYW5kb20gaXRlbXMgaW50byBhIFRSRUVfTElTVCBub2RlLgoJKG5hbWVkX2xhYmVsX3VzZXMpOiBVc2UgdGhlIG5ldyBzdHJ1Y3QuCgkocG9wbGV2ZWwpOiBMaWtld2lzZS4KCShsb29rdXBfbGFiZWwpOiBMaWtld2lzZS4KCShkZWZpbmVfbGFiZWwpOiBBZGQgYW4gZXJyb3IgbWVzc2FnZSB0byB0ZWxsIHRoZSB1c2VyIHRoZSBsaW5lCgl3aGVyZSB0aGUgZ290byBpcyBsb2NhdGVkIGluIGFkZGl0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUKCWdvdG8uCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2UgTlVMTCBpbnN0ZWFkIG9mIE5VTExfVFJFRSB0byBpbml0aWFsaXplCgluYW1lZF9sYWJlbF91c2VzLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJCgkoc3RhcnRfZGVjbCk6IENvbXBsYWluIGFib3V0IGRlZmluaW5nIGEgc3RhdGljIGRhdGEgbWVtYmVyCglpbiBhIGRpZmZlcmVudCB0eXBlIGZyb20gd2hpY2ggaXQgd2FzIGRlY2xhcmVkLgoKV2VkIE1heSAyMiAwOTozMzoyMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBBZGp1c3QuCgpUdWUgTWF5IDIxIDExOjIxOjU2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBBbHdheXMgY29udmVydCAndGhpcycgdG8gdGhlCglhcHByb3ByaWF0ZSB0eXBlLgoKCSogc2VhcmNoLmMgKGFkZF9jb252ZXJzaW9ucyk6IFB1dCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBpbgoJVFJFRV9WQUxVRSwgdGhlIHR5cGUgaW4gVFJFRV9QVVJQT1NFLgoJKiBjdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogQWRqdXN0LgoJKiBjYWxsLmMgKHVzZXJfaGFyc2huZXNzKTogQWRqdXN0LgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBDYWxsIHRlbXBvcmFyeV9hbGxvY2F0aW9uIGFuZAoJcGVybWFuZW50X2FsbG9jYXRpb24gYXJvdW5kIHRoZSBBU01fT1VUUFVUX01JX1RIVU5LIGNhc2UsIHRvby4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZSk6IEhhbmRsZSB0d2Vha2luZyBvZgoJVFlQRV9NQUlOX1ZBUklBTlQgaGVyZS4KCSogdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogTm90IGhlcmUuCgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IE9ubHkgdHJ5IHRvIGNvbXBsZXRlIGFuIGFycmF5IHR5cGUgaWYKCWl0IGhhcyBhIGRvbWFpbi4KCk1vbiBNYXkgMjAgMTQ6NTU6NTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IENhbGwgY29tcGxldGVfdHlwZS4KCShncm9rZGVjbGFyYXRvcik6IENhbGwgY29tcGxldGVfdHlwZSBmb3IgUEFSTV9ERUNMcy4KCkZyaSBNYXkgMTcgMTY6NDE6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZS1zZXQKCUNMQVNTVFlQRV9HT1RfU0VNSUNPTE9OIGFmdGVyIGNhbGxpbmcgZmluaXNoX3N0cnVjdF8xLgoKRnJpIE1heSAxNyAxNDo1Njo1NSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGNwX2V4cGFuZF9kZWNsX2NsZWFudXApOiBSZW1vdmUsIHRoZSBiYWNrZW5kIGlzIG5vdwoJc21hcnQgZW5vdWdoIHRvIGRvIGl0IHJpZ2h0LgoJKiB0cmVlLmMgKGNwX2V4cGFuZF9kZWNsX2NsZWFudXApOiBMaWtld2lzZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFVzZSBleHBhbmRfZGVjbF9jbGVhbnVwIGluc3RlYWQgb2YKCWNwX2V4cGFuZF9kZWNsX2NsZWFudXAuCgkoc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgoJKGhhY2tfaW5jb21wbGV0ZV9zdHJ1Y3R1cmVzKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2NsZWFudXApOiBMaWtld2lzZS4KCkZyaSBNYXkgMTcgMTM6MTM6NTEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY29uZCBVTlNBVkVfRVhQUik6IE1vdmUgZnJvbSB0aGUgQysrCglmcm9udGVuZCB0byB0aGUgYmFja2VuZCB3aGVyZSBpdCBiZWxvbmdzLgoJKiB0cmVlLmMgKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCgkodW5zYXZlX2V4cHJfbm93KTogTGlrZXdpc2UuCgkqIHRyZWUuZGVmIChVTlNBVkVfRVhQUik6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCgkodW5zYXZlX2V4cHJfbm93KTogTGlrZXdpc2UuCgpGcmkgTWF5IDE3IDExOjAyOjQxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBNYWtlIHN1cmUgdGhlIHBhcnRpYWwgRUggY2xlYW51cHMgbGl2ZQoJb24gdGhlIGZ1bmN0aW9uX29ic3RhY2suCgpUaHUgTWF5IDE2IDE1OjI5OjMzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZXhwci5jIChkb19jYXNlKTogRG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIG51bGwgVFJFRV9UWVBFcwoJd2hlbiBjaGVja2luZyBmb3IgcG9pbnRlciB0eXBlcy4KClRodSBNYXkgMTYgMTM6Mzg6NTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZW1vdmUgb2Jzb2xldGUgY2hlY2sgZm9yCglhY2Nlc3MgZGVjbGFyYXRpb25zLgoKVGh1IE1heSAxNiAxMzozNDoxNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGwpOiBTaW1wbGlmeSBjYWxscyB0bwoJYnVpbGRfb3ZlcmxvYWRfY2FsbCBieSByZW1vdmluZyBsYXN0IHBhcmFtZXRlci4KCShidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoKVGh1IE1heSAxNiAxMzoxNTo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGRlZmF1bHRfcGFybV9jb252ZXJzaW9ucyk6IEZhY3RvciBvdXQgY29tbW9uIGNvZGUuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoKV2VkIE1heSAxNSAxNDo0NjoxNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQWxsb3cgaW1wbGljaXQgJiBvbiBNRVRIT0RfVFlQRXMsCglidXQgcGVkd2FybiBhcyB0aGUgY29kZSBpcyBib2d1cy4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBVc2UgYnVpbGRfYWRkcl9mdW5jIGluc3RlYWQgb2YKCWRlZmF1bHRfY29udmVyc2lvbi4gIERvbid0IGFsbG93IHBvaW50ZXItdG8tbWV0aG9kIGZ1bmN0aW9ucyBkb3duCgloZXJlLgoJKGJ1aWxkX3VuYXJ5X29wKTogVXNlIHJlYWwgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zIGluc3RlYWQgb2YKCWZha2Ugb25lcy4KCShidWlsZF9wdHJtZW1mdW5jKTogVXNlIGJ1aWxkX2FkZHJfZnVuYyBpbnN0ZWFkIG9mIGJ1aWxkX3VuYXJ5X29wLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBSZW1vdmVkIHNvbWUgb2Jzb2xldGUgY29kZS4KCSogZGVjbDIuYyAocmVwYXJzZV9hYnNkY2xfYXNfZXhwcik6IFBhc3MgY3VycmVudF9jbGFzc19yZWYgdG8KCWJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBpbnN0ZWFkIG9mIGN1cnJlbnRfY2xhc3NfcHRyLiAgT25seSBjYWxsCglkaWdlc3RfaW5pdCBvbmNlIG9uIGFuIGluaXRpYWxpemVyLCB3ZSBkbyB0aGlzIGp1c3QgY2hlY2tpbmcKCVRSRUVfVFlQRS4KCShidWlsZF9leHByX2Zyb21fdHJlZSk6IFBhc3MgY3VycmVudF9jbGFzc19yZWYgdG8KCWJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBpbnN0ZWFkIG9mIGN1cnJlbnRfY2xhc3NfcHRyLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogTGlrZXdpc2UuCgkqIHBhc2UueTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBPRkZTRVRfUkVGcyBiZXR0ZXIuCgkqIHB0LmMgKHVuaWZ5KTogSGFuZGxlIHBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9ucyBiZXR0ZXIuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQ2xlYXIgb3V0IGN1cnJlbnRfY2xhc3NfcmVmIGp1c3QgbGlrZQoJd2UgZG8gZm9yIGN1cnJlbnRfY2xhc3NfcHRyLgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogSGFuZGxlIHZpcnR1YWwgYmFzZXMgYmV0dGVyLgoKVHVlIE1heSAxNCAxNjozNzozNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogVXNlIHRoZSBkZWx0YSBmb3IKCXRoZSBvcmlnaW5hbCBiYXNldHlwZSBmb3IgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIHdpdGggdGh1bmtzLgoJKGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IFdlIHN0aWxsIG5lZWQgdG8gYWRqdXN0ICd0aGlzJwoJd2l0aCB0aHVua3MuCgpUdWUgTWF5IDE0IDE2OjI3OjI1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfYWRkcl9mdW5jKTogTmV3IHJvdXRpbmUuICBVc2VkIHRvIGdldCB0aGUgYHJlYWwnCglhZGRyZXNzIG9mIGEgZnVuY3Rpb24gb3IgYSBtZXRob2QuICBOZWVkZWQgdG8gYXZvaWQgZ2V0dGluZyBhCglwb2ludGVyLXRvLW1lbWJlciBmdW5jdGlvbi4KCShidWlsZF9jYWxsKTogTmV3IHJvdXRpbmUgdG8gYnVpbGQgQ0FMTF9FWFBScy4KCShidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBpdC4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fYWdncik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBVc2UgYnVpbGRfYWRkcl9mdW5jLgoJKiBjcC10cmVlLmggKGJ1aWxkX2NhbGwsIGJ1aWxkX2FkZHJfZnVuYyk6IERlY2xhcmUgdGhlbS4KClR1ZSBNYXkgMTQgMTI6NDc6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChMT09LVVBfQUdHUik6IFJlbW92ZSwgdW51c2VkLgoJKiBwYXJzZS55OiBSZW1vdmUgdXNlcyBvZiBMT09LVVBfQUdHUi4KClR1ZSBNYXkgMTQgMTI6MDc6NTEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogKi5bY2h5XTogUmVuYW1lIGN1cnJlbnRfY2xhc3NfZGVjbCB0byBjdXJyZW50X2NsYXNzX3B0ciwgYW5kCglDX0NfRCB0byBjdXJyZW50X2NsYXNzX3JlZi4KCk1vbiBNYXkgMTMgMTY6NTU6MjMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFRpZ2h0ZW4gdXAgcG9pbnRlciBjb252ZXJzaW9ucy4KClNhdCBNYXkgMTEgMDQ6MzM6NTAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IFN1cnJvdW5kIERFQ0xfT05FX09OTFkgd2l0aCBpZmRlZi4KCShmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoKRnJpIE1heSAxMCAxMTowOTo1NyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF9mbl9wdHIpOiBXZSBkb24ndCB1c2UgdGh1bmtzIGZvciBwbWZzLgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBTZXQgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXIgaW4gZGVmYXVsdAoJY29kZS4KClRodSBNYXkgIDkgMTg6MTg6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYzogVHVybiBvbiB0aHVua3MgYnkgZGVmYXVsdCB3aGVyZSBzdXBwb3J0ZWQuCgpUdWUgTWF5ICA3IDIwOjM5OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9tYXliZSk6IFJlbW92ZWQuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogSW52ZXJ0IG1lYW5pbmcgb2YgbGFzdCBhcmcgdG8KCWJlIHJlcXVpcmVfY29tcGxldGUuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVXNlIGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbAoJaW5zdGVhZCBvZiBidWlsZF9vdmVybG9hZF9jYWxsX21heWJlLgoKTW9uIE1heSAgNiAwMToyMzozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IHRyeSB0byBlbWl0IGZ1bmN0aW9ucyB0aGF0IGhhdmVuJ3QKCWJlZW4gY29tcGlsZWQuCgpGcmkgTWF5ICAzIDA5OjMwOjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IE9vcHMuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG8gc2F2ZSBwcmV2aW91c19jbGFzc18qLgoJQWxzbyBzdG9yZSB0aGUgYmluZGluZ3MgZnJvbSBwcmV2aW91c19jbGFzc192YWx1ZXMuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSB0aGVtLgoKVGh1IE1heSAgMiAyMTo1Njo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBPbmx5IHdyaXRlIG91dCB2dGFibGUgaWYgaXRzCglzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShmaW5pc2hfZmlsZSk6IFJlLWpvaW4gc3ludGhlc2lzL3Z0YWJsZSBsb29wIHdpdGggaW5saW5lIGVtaXNzaW9uCglsb29wLCBkaXNhYmxlIGlubGluaW5nIHdoZW4gYW4gaW5saW5lIGlzIG91dHB1dC4KClRodSBNYXkgIDIgMTc6MjA6MDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBTZXR1cCBzYXZlZF9pbl9jYXRjaC4KCShwdXNoX2VoX2NsZWFudXApOiBSZXNldCBfX2VoX2luX2NhdGNoLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFNldCBfX2VoX2luX2NhdGNoLgoKVGh1IE1heSAgMiAxNjoyMToxNyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAocHVzaF9laF9jbGVhbnVwKTogQWRkIHRyYWNraW5nIGZvciB3aGV0aGVyIG9yIG5vdCB3ZQoJaGF2ZSBhbiBhY3RpdmUgZXhjZXB0aW9uIG9iamVjdC4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBpdCB0byBtYWtlIHN1cmUgYSByZXRocm93IHdpdGhvdXQgYW4KCWV4Y2VwdGlvbiBvYmplY3QgaXMgY2F1Z2h0LgoKVGh1IE1heSAgMiAxMToyNjo0MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogQ2xlYXIgb3V0IGNsYXNzLWxldmVsIGJpbmRpbmdzCgljYWNoZS4KCldlZCBNYXkgIDEgMTE6MjY6NTIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBBbHNvIHVzZSBzZW50cmllcyBmb3IgdmFycyB3aXRoCglERUNMX09ORV9PTkxZIG9yIERFQ0xfV0VBSyBzZXQgKHNob3VsZCBhbnkgc3VjaCBoYXBwZW4gdG8gYmUKCWNyZWF0ZWQpLgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBEaXNhYmxlICNwcmFnbWEKCWludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBpZiBTVVBQT1JUU19PTkVfT05MWSA+IDEuCgpUdWUgQXByIDMwIDExOjI1OjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogV3JhcCBkZWZhdWx0IGNhc2UgaW4KCXRlbXBvcmFyeS9wZXJtYW5lbnRfYWxsb2NhdGlvbi4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVXNlIERFQ0xfT05FX09OTFkuCgkoZW1pdF90aHVuayk6IENhbGwgYXNzZW1ibGVfZW5kX2Z1bmN0aW9uLgoKTW9uIEFwciAyOSAxNTozODoyOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBERUNMX09ORV9PTkxZLgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IERpc2FibGUgdnRhYmxlIGhhY2sgaWYKCVNVUFBPUlRTX09ORV9PTkxZID4gMS4KCk1vbiBBcHIgMjkgMTQ6MzI6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogUFJFSU5DUkVNRU5UX0VYUFIgYW5kCglQUkVERUNSRU1FTlRfRVhQUnMgdGFrZSB0d28gYXJndW1lbnRzLCBub3Qgb25lLgoKTW9uIEFwciAyOSAwMDoyNzo1MyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBEb24ndCBidWlsZCB0aHVua3MgZm9yIGFic3RyYWN0Cgl2aXJ0dWFscy4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogRml4IGhhbmRsaW5nIG9mIF9fUFJFVFRZX0ZVTkNUSU9OX18gbGlrZSBDCglmcm9udGVuZC4KClNhdCBBcHIgMjcgMTY6NDU6MzUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3J0dGlfZW50cnkpOiBVc2Ugc2l6ZV96ZXJvX25vZGUuCgkoYnVpbGRfdnRhYmxlKTogTGlrZXdpc2UuCgpTYXQgQXByIDI3IDE0OjQ4OjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogUGFzcyBzaXplX3plcm9fbm9kZSB0byBzZXRfcnR0aV9lbnRyeS4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IExpa2V3aXNlLgoKRnJpIEFwciAyNiAxMzoxNDoxNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IENhbGwgbWFya191c2VkIG9uIHRoZSB0YXJnZXQgZnVuY3Rpb24uCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRG9uJ3Qgd2FybiBhYm91dCBwZW5kaW5nIHRlbXBsYXRlcy4KClRodSBBcHIgMjUgMTQ6NTU6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBGaXggbGlzdCB3YWxraW5nIGxvZ2ljLgoKCSogdHlwZWNrMi5jIChjaGVja19mb3JfbmV3X3R5cGUpOiBPbmx5IHdhcm4gaWYgLXBlZGFudGljLgoKV2VkIEFwciAyNCAxNTo0MToxNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFJlbW92ZSBvbGQgY29kZSBmb3IKCWRvbnRfYWxsb3dfdHlwZV9kZWZpbml0aW9ucy4KCSogY3AtdHJlZS5oOiBMaWtld2lzZS4KCSogc3Bldy5jOiBNYWtlIHN1cmUgY3AtdHJlZS5oIGlzIGluY2x1ZGVkIGJlZm9yZSBwYXJzZS5oLCBzbyB0aGUKCWRlZmluaXRpb24gb2YgZmxhZ2dlZF90eXBlX3RyZWUgaXMgZm91bmQgYmVmb3JlIGl0IGlzIHVzZWQuCgkqIGxleC5jOiBMaWtld2lzZS4KCSogcGFyc2UueTogQWRkZWQgdGhlIGZ0eXBlIG1lbWJlciB0byB0aGUgdHlwZSB1bmlvbiwgYW5kIGNoYW5nZWQgYQoJbnVtYmVyIG9mIHJ1bGVzIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIHR0eXBlLiBBZGRlZCBjYWxscyB0bwoJY2hlY2tfZm9yX25ld190eXBlKCkgYXMgYXBwcm9wcmlhdGUuCgkqIHR5cGVjazIuYyAoY2hlY2tfZm9yX25ld190eXBlKTogTmV3IGZ1bmN0aW9uIGZvciBjaGVja2luZwoJaWYgYSBuZXdseSBkZWZpbmVkIHR5cGUgYXBwZWFycyBpbiB0aGUgc3BlY2lmaWVkIHRyZWUuCgkqIGNwLXRyZWUuaDogQWRkIG5ldyB0eXBlIGZsYWdnZWRfdHlwZV90cmVlLiBBZGQgYSBwcm90b3R5cGUKCWZvciBjaGVja19mb3JfbmV3X3R5cGUoKS4KCldlZCBBcHIgMjQgMDA6MzY6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBPbmx5IHVzZSBhIHNlbnRyeSBpZiB0aGUgZGVjbCBpcyBwdWJsaWMuCgoJKiBwdC5jICh0c3Vic3RfZXhwciwgREVDTF9TVE1UKTogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBpbml0aWFsaXplciwKCWRvbid0IHBhc3MgTE9PS1VQX09OTFlDT05WRVJUSU5HLgoKVHVlIEFwciAyMyAxNzoxODo0NyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21tb25fdHlwZSk6IEZpeCB0aGUgQVJSQVlfVFlQRSBjYXNlIHNvIGl0Cglwcm9wZXJseSBrZWVwcyB0cmFjayBvZiBjb25zdCBhbmQgdm9sYXRpbGUgdHlwZSBtb2RpZmllcnMuCgpUdWUgQXByIDIzIDEwOjUyOjU2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoY3BfdHJlZV9lcXVhbCk6IEMrKyB2ZXJzaW9uIG9mIHNpbXBsZV9jc3RfZXF1YWwuCgkqIHB0LmMgKGNvbXBfdGVtcGxhdGVfYXJncyk6IFVzZSBpdC4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuLCBidWlsZF9keW5hbWljX2Nhc3QsIGV4cGFuZF8qX2Rlc2MpOiBDYWxsCglhc3NlbWJsZV9leHRlcm5hbCBmb3IgYXJ0aWZpY2lhbCBmdW5jdGlvbiBkZWNscy4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBPb3BzLgoKTW9uIEFwciAyMiAxNzoyODoyNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBQdXQgc3RhdGljIGRhdGEgbWVtYmVyIHRlbXBsYXRlcwoJaW50byBjb21tb24gc3RvcmFnZSwgb3IgbWFrZSB0aGVtIHdlYWssIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkKCWFyZSBkeW5hbWljYWxseSBvciBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgoJKGdldF9zZW50cnkpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX2ZpbGUpOiBEbyBpbXBvcnRfZXhwb3J0X2RlY2wgZm9yIHN0YXRpYyBkYXRhIG1lbWJlcnMgYmVmb3JlCglidWlsZGluZyB0aGUgaW5pdC9maW5pIGZ1bmN0aW9ucy4gIERvbid0IGluaXQvZmluaSBhIHZhcmlhYmxlIHRoYXQncwoJRVhURVJOQUwuICBVc2UgYSBzZW50cnkgZm9yIHZhcmlhYmxlcyBpbiBjb21tb24uICBGaXggbWlzbWF0Y2hpbmcKCXB1c2gvcG9wX3RlbXBfc2xvdHMuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBJZiBERUNMX05PVF9SRUFMTFlfRVhURVJOLCBkbyB0aGUKCWV4cGFuZF9zdGF0aWNfaW5pdCB0aGFuZy4KCSogbWV0aG9kLmMgKGdldF9pZF8yKTogTmV3IGZ1bmN0aW9uLgoKTW9uIEFwciAyMiAxNTozMjo0NSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGVtcHR5X3Bhcm1zKTogTWFrZSBzdXJlIHdlIHVzZSBDKystc3R5bGUgcHJvdG90eXBlcwoJd2hlbiB3ZSdyZSBkZWNsYXJpbmcgbWVtYmVyIGZ1bmN0aW9ucy4KClN1biBBcHIgMjEgMTA6MDg6MjIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IDE2IHMvciBjb25mbGljdHMuCgkqIHBhcnNlLnkgKHNlbGZfdGVtcGxhdGVfdHlwZSk6IE5ldyBub250ZXJtaW5hbC4KClRodSBBcHIgMTggMDg6NTY6NTQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBIYW5kbGUgZ2V0dGluZyBhIFRZUEVfREVDTCBmb3IgYQoJbmFtZS4KCSogcGFyc2UueSAoYmFzZV9jbGFzcy4xKTogQWxsb3cgJ3R5cGVuYW1lIGZvbzo6YmFyJy4KCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogUmVtb3ZlICNwcmFnbWEgY29kZSB0aGF0IHBsYXlzIHdpdGggdGhlCglpbnB1dCBzdHJlYW0sIHNpbmNlIHdlIG5vdyBkZWFsIHdpdGggdG9rZW5zLiAgQ2xlYXIgbmV4dGNoYXIgd2hlbgoJd2UncmUgZG9uZS4KCShoYW5kbGVfY3BfcHJhZ21hKTogVXNlIHJlYWxfeXlsZXguCgkoaGFuZGxlX3N5c3ZfcHJhZ21hKTogRG9uJ3QgZG8gc2tpcGxpbmUgaGVyZS4gIE9ubHkgY2FsbCByZWFsX3l5bGV4CglpbiBvbmUgcGxhY2UuCgoJKiBsZXguYyAoY2hlY2tfZm9yX21pc3Npbmdfc2VtaWNvbG9uKTogSGFuZGxlIFNFTEZOQU1FLgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBGaXggIiNwcmFnbWEgaW1wbGVtZW50YXRpb24iLgoKV2VkIEFwciAxNyAxNjo1MTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55OiBOZXcgdG9rZW4gU0VMRk5BTUUgZm9yIHBvdGVudGlhbCBjb25zdHJ1Y3Rvci4KCSogc3Bldy5jICh5eWxleCk6IEhhbmRsZSBpdC4KCSogbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IFByb2R1Y2UgaXQuCgoJKiBwYXJzZS55IChjb21wbGV0ZV90eXBlX25hbWUpOiBJbiA6OiBjYXNlLCBkb24ndCBwdXNoIGNsYXNzIGJpbmRpbmcuCgkoY29tcGxleF90eXBlX25hbWUpOiBMaWtld2lzZS4KCldlZCBBcHIgMTcgMTU6MDI6NDAgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBIYW5kbGUgcG9pbnRlciB0byBtZW1iZXIKCWZ1bmN0aW9ucy4KCldlZCBBcHIgMTcgMTI6Mjg6MjYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBOZXcgZnVuY3Rpb24sIHdpdGggZGVjbCwgZG9pbmcgdGhlIGNjMXBsdXMKCXByYWdtYXMuCgkoY2hlY2tfbmV3bGluZSk6IFB1dCB0aGUgdnRhYmxlL3VuaXQvaW1wbGVtZW50YXRpb24vaW50ZXJmYWNlIHByYWdtYQoJY29kZSBpbnRvIGhhbmRsZV9jcF9wcmFnbWEsIHJlcGxhY2luZyBpdCB3aXRoIGEgY2FsbC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBHaXZlIGludCByZXR1cm4gdHlwZSwgYW5kIHRha2UgRklOUFVUIGFuZCBUT0tFTgoJYXJncy4gIEdldCB0aGUgbmV4dCB0b2tlbiBhZnRlciBoYW5kbGluZyB0aGUgcHJhZ21hIHRva2VuLgoKV2VkIEFwciAxNyAxMDoyODozNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogQXZvaWQgZG9pbmcgYmFzZSBhbmFseXNpcyBvbiBwbWZzLgoJKGNvbnZlcnRfdG9fcG9pbnRlcl9mb3JjZSk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBGaXggYXJyYXkgbmV3IHdpdGhvdXQgLWZjaGVjay1uZXcuCgpUdWUgQXByIDE2IDEzOjQ0OjU4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCwgY2FsbC5jLCBjbGFzcy5jLCBkZWNsLmMsIHBhcnNlLnksIHB0LmMsIHJ0dGkuYywKCXRyZWUuYzogTG9zZSBUWVBFX05FU1RFRF9OQU1FLgoKCSogcGFyc2UueSAobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBEb24ndCB0cmVhdCBub24taWRlbnRpZmllcnMKCWFzIGlkZW50aWZpZXJzLgoKCSogdHJlZS5kZWY6IEFkZCBWRUNfSU5JVF9FWFBSLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogSGFuZGxlIGl0LgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBSVExfRVhQUiBuYXN0aW5lc3MgYW5kCgl0aGUgZXh0cmEgZmlsZS1zY29wZSBzeW1ib2wgbmFzdGluZXNzLgoKTW9uIEFwciAxNSAxNjoyMToyOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IFRodW5rcyBhcmUgc3RhdGljLgoJKGVtaXRfdGh1bmspOiBVc2UgQVNNX09VVFBVVF9NSV9USFVOSyBpZiBpdCdzIGRlZmluZWQuCgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogRW1pdCB0aHVua3MgYXMgbmVlZGVkLgoJKGZpbmlzaF9maWxlKTogRG9uJ3QgZW1pdCB0aGVtIGhlcmUuCgpTdW4gQXByIDE0IDExOjM0OjM5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogSGFuZGxlIG51bGwgcG9pbnRlcnMuCgkoaWZub25udWxsKTogTmV3IGZ1bmN0aW9uLgoKRnJpIEFwciAxMiAwOTowODoyNyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBSZW1lbWJlciB0aGUgb3JpZ2luYWwgYmFzZXR5cGUgd2UKCXdlcmUgY2FsbGVkIHdpdGguIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIG9mIHRyeWluZwoJKGluY29ycmVjdGx5KSB0byBjYWxsIGEgbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb24gdGhyb3VnaCBhCglub24taW5oZXJpdGVkIGNsYXNzLgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogTWFyayB0aGUgbmV3IGZpeHVwIGFzCglERUNMX0FSVElGSUNJQUwuCgpUaHUgQXByIDExIDAzOjU3OjA5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIGEgVEFSR0VUX0VYUFIgZm9yIGFsbG9jX2V4cHIuCgoJKiBjbGFzcy5jIChzZXRfcnR0aV9lbnRyeSk6IEZpeCBmb3IgdGh1bmtzLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogU3RpbGwgZW1pdCB0eXBlaW5mbyBmbnMgZm9yCgljdi12YXJpYW50cyBvZiBidWlsdGluIHR5cGVzLgoKCSogcnR0aS5jIChleHBhbmRfY2xhc3NfZGVzYyk6IFNldCB1cCBiYXNlX2luZm9fdHlwZV9ub2RlIGhlcmUuCgkoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBJbnN0ZWFkIG9mIGhlcmUuCgpXZWQgQXByIDEwIDE0OjE3OjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBEbyBpbml0IHJlZ2FyZGxlc3Mgb2YgLWZydHRpLgoJKGJ1aWxkX3R5cGVpZCk6IE9ubHkgY29tcGxhaW4gYWJvdXQgdGFraW5nIGR5bmFtaWMgdHlwZWlkIHdpdGhvdXQKCS1mcnR0aS4KCgkqIGRlY2wyLmM6IGZsYWdfcnR0aSBkZWZhdWx0cyB0byAxLgoKCSogcnR0aS5jIChnZXRfdGluZm9fdmFyKTogVGhlIGdlbmVyYWwgY2xhc3MgY2FzZSBpcyBub3cgc21hbGxlci4KCShpbml0X3J0dGlfcHJvY2Vzc2luZyk6IFBhY2sgdGhlIGxhdHRlciB0aHJlZSBmaWVsZHMgb2YgYmFzZV9pbmZvCglpbnRvIDMyIGJpdHMuCgpXZWQgQXByIDEwIDEzOjUwOjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogRG9uJ3QgZHVtcCBpZiBuYW1lIGlzIE5VTExfVFJFRS4KCldlZCBBcHIgMTAgMTI6NTY6MDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKG1ha2VfbWVtb2l6ZWRfdGFibGVfZW50cnkpOiBVbmRlZmVyIHRoZSBwb3AsIGlmIG5lY2Vzc2FyeS4KCShwdXNoX21lbW9pemVkX2NvbnRleHQpOiBTcGxpdCBvdXQgY29kZSB0byB1bmRlZmVyIHBvcF90eXBlX2xldmVsIHRvCgkoY2xlYXJfbWVtb2l6ZWRfY2FjaGUpOiBoZXJlLgoJKHBvcF9tZW1vaXplZF9jb250ZXh0KTogV2UgY2FuIG9ubHkgaGFuZGxlIG9uZSBsYXllciBvZiBkZWZlcnJhbCBvZgoJcG9wX3R5cGVfbGV2ZWwgc28gY2xlYXIgdGhlIGNhY2hlLCBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBsZXZlbC4KClR1ZSBBcHIgIDkgMjM6MDY6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChpbml0X3J0dGlfcHJvY2Vzc2luZyk6IEJ1aWxkIHVwIGJhc2VfaW5mb190eXBlX25vZGUuCgkoZXhwYW5kX2NsYXNzX2Rlc2MpOiBVc2Ugb25lIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYmFzZV9pbmZvCglzdHJ1Y3RzLCBwYXNzZWQgdXNpbmcgYSBDT05TVFJVQ1RPUi4KClR1ZSBBcHIgIDkgMTQ6MjA6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IFJlbW92ZSBibG9jayBleHRlcm4gZm9yCglmbGFnX2Fzc3VtZV9ub25udWxsX29iamVjdHMgaGVyZS4KCShidWlsZF92Zm5fcmVmKTogU3BsaXQgb3V0IGZ1bmN0aW9uYWxpdHkgaW50byBidWlsZF92dGJsX3JlZi4KCShidWlsZF92dGJsX3JlZik6IE5ldyByb3V0aW5lLgoJKGJ1aWxkX3Z0YWJsZSk6IFNldCB1cCBydHRpIGluZm8gaGVyZS4KCShhZGRfdmlydHVhbF9mdW5jdGlvbik6IE5vdGUgaW4gQ0xBU1NUWVBFX1JUVEkgdGhlIGJlc3QKCXBsYWNlIHdoZXJlIHdlIGNhbiBnZXQgdGhlIHJ0dGkgcG9pbnRlcnMgZnJvbSB0byBhdm9pZCBoYXZpbmcgdG8KCXNlYXJjaCBhcm91bmQgZm9yIGEgcGxhY2UuCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuICBOZXZlciBjcmVhdGUgdG90YWxseSBuZXcgdnRhYmxlcwoJd2l0aCB0b3RhbGx5IG5ldyB2dGFibGUgcG9pbnRlcnMgZm9yIHJ0dGkuICBEaXNhYmxlIGNvZGUgdG8gbGF5b3V0Cgl2dGFibGUgcG9pbnRlcnMgYmV0dGVyIHVudGlsIHdlIHdhbnQgdG8gYnJlYWsgYmluYXJ5Cgljb21wYXRpYmlsaXR5LgoJKiBydHRpLmMgKGJ1aWxkX2hlYWRvZl9zdWIpOiBOZXcgcm91dGluZSB0byBjb252ZXJ0IGRvd24gdG8gYQoJc3ViLW9iamVjdCB0aGF0IGhhcyBhbiBydHRpIHBvaW50ZXIgaW4gdGhlIHZ0YWJsZS4KCShidWlsZF9oZWFkb2YpOiBVc2UgaXQuICBBbHNvLCB1c2UgYnVpbGRfdnRibF9yZWYgbm93IHRvIGJlIG1vcmUKCW1haW50YWluYWJsZS4KCShidWlsZF9keW5hbWljX2Nhc3QpOiBNYWtlIHN1cmUgd2UgaGF2ZSBzYXZlZCBpdCwgaWYgd2UgbmVlZCB0by4KCSogc2VhcmNoLmMgKGRmc19pbml0X3ZiYXNlX3BvaW50ZXJzKTogRGlzYWJsZSBjb2RlIHRoYXQgZGVhbHMgd2l0aAoJYSBtb3JlIGVmZmljaWVudCB2dGFibGUgbGF5b3V0LCBlbmFibGUgbGF0ZXIuCgkqIGNhbGwuYyAoZmxhZ19hc3N1bWVfbm9ubnVsbF9vYmplY3RzKTogTW92ZWQgZGVjbGFyYXRpb24gdG8KCSogY3AtdHJlZS5oOiBoZXJlLiAgRGVjbGFyZSBidWlsZF92dGJsX3JlZi4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgTlVMTF9UUkVFIGluc3RlYWQgb2YgMCBpbgoJZnVuY3Rpb24gY2FsbHMgdGhhdCB3YW50IGEgdHJlZS4KClR1ZSBBcHIgIDkgMTI6MTA6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBIYW5kbGUgZG93bmNhc3RpbmcgdG8gWCogZ2l2ZW4KCW90aGVyIFggc3Vib2JqZWN0cyBpbiB0aGUgbW9zdCBkZXJpdmVkIHR5cGUuICBBY2suCgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IE5vIG5lZWQgdG8gc3RyaXAgY3YtcXVhbHMgaGVyZSwKCWdldF90eXBlaWQgd2lsbCBkbyBpdCBmb3IgdXMuCgkoZ2V0X3R5cGVpZF8xKTogQnJlYWsgb3V0IGNhbGwtYnVpbGRpbmcgZm9yIGV4cGFuZF8qX2Rlc2MgdG8gdXNlLgoJKGdldF90eXBlaWQpOiBDYWxsIGl0LgoJKGV4cGFuZF8qX2Rlc2MpOiBMaWtld2lzZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IHNldCBUWVBFX0JVSUxUX0lOIG9uIGNoYXIgKgoJYW5kIHZvaWQgKi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExvc2UgYnVpbHRpbl90eXBlX3RkZXNjcyBsb3NzYWdlLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBSZW1vdmUgb2Jzb2xldGUgY29kZS4KCk1vbiBBcHIgIDggMTc6MjM6MjMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBXaGVuIGNhbGxpbmcgc2V0X25lc3RlZF90eXBlbmFtZSwgdXNlCglUWVBFX05FU1RFRF9OQU1FIChjdXJyZW50X2NsYXNzX3R5cGUpIGluc3RlYWQgb2YKCWN1cnJlbnRfY2xhc3NfbmFtZS4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBMaWtld2lzZS4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogVXNlIE5VTExfVFJFRSBpbnN0ZWFkIG9mIDAgaW4gdGhlIGNhbGwgdG8KCXNldF9uZXN0ZWRfdHlwZW5hbWUuCgpTdW4gQXByICA3IDEwOjQ0OjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEhhbmRsZSBhcnJheXMuCgoJKiBjcC10cmVlLmggKERFQ0xfUkVBTExZX0VYVEVSTik6IE5ldyBtYWNyby4KClNhdCBBcHIgIDYgMTM6NTY6MjcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jICh0aHJvd19iYWRfY2FzdCk6IFVzZSBlbnRyeSBwb2ludCBfX3Rocm93X2JhZF9jYXN0LgoJKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogTG9zZSBiYWRfY2FzdF90eXBlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IFVzZSB0aHJvd19iYWRfY2FzdC4KCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEhhbmRsZSBlbnVtcyBhbmQgcG1mcy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3Qgc3ludGhlc2l6ZSBhcnRpZmljaWFsIGZ1bmN0aW9ucwoJdGhhdCBhcmUgZXh0ZXJuYWwgYW5kIG5vdCBpbmxpbmUuCgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IElmIGF0X2VvZiwgY2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wuCgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEhhbmRsZSBoYXZpbmcgbmV3IGlubGluZXMgYWRkZWQgdG8KCXNhdmVkX2lubGluZXMgYnkgc3ludGhlc2lzLgoKCSogcnR0aS5jIChnZXRfYmFkX2Nhc3Rfbm9kZSk6IERvbid0IHJlcXVpcmUgPHR5cGVpbmZvPi4KCkZyaSBBcHIgIDUgMTc6MDI6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCVJUVEkgcmV3cml0ZSB0byBpbml0aWFsaXplIG5vZGVzIGFzIG5lZWRlZCwgbm90IHJlcXVpcmUgdGhhdAoJdXNlcnMgI2luY2x1ZGUgPHR5cGVpbmZvPiwgY29tcGxldGUgZnVuY3Rpb25hbGl0eSBhbmQgcmVkdWNlIHdhc3RlZCAKCXNwYWNlLgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogTmV3IGZuLgoJKGJ1aWxkX3R5cGVpZCk6IFRoZSB2dGFibGUgZW50cnkgaXMgbm93IGEgZnVuY3Rpb24uCgkoZ2V0X3RpbmZvX3Zhcik6IE5ldyBmbi4KCShnZXRfdGluZm9fZm4pOiBMaWtld2lzZS4KCShnZXRfdHlwZWlkKTogVXNlIGl0LgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IERlY2xhcmUgYW5kIHVzZSBlbnRyeSBwb2ludCBfX2R5bmFtaWNfY2FzdC4KCShidWlsZF8qX2Rlc2MpOiBSZW5hbWUgdG8gZXhwYW5kXypfZGVzYyBhbmQgcmV3cml0ZSB0byB1c2UgZW50cnkKCXBvaW50cyBfX3J0dGlfKi4KCShhZGRfdW5pbnN0YW50aWF0ZWRfZGVzYywgZ2V0X2RlZl90b19mb2xsb3csIGJ1aWxkX3RfZGVzYyk6IExvc2UuCgkoc3ludGhlc2l6ZV90aW5mb19mbik6IE5ldyBmbi4KCSogbWV0aG9kLmMgKGJ1aWxkX3RfZGVzY19vdmVybG9hZCk6IExvc2UuCgkoYnVpbGRfb3ZlcmxvYWRfd2l0aF90eXBlKTogTW9yZSBnZW5lcmljLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBpbml0X3J0dGlfcHJvY2Vzc2luZy4KCSogY2xhc3MuYyAoc2V0X3J0dGlfZW50cnkpOiBVc2UgZ2V0X3RpbmZvX2ZuLgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogTWFyayB0aGUgcnR0aSBmdW5jdGlvbi4KCShmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBEb24ndCBidWlsZF90X2Rlc2MuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogSGFuZGxlIHRpbmZvIGZ1bmN0aW9ucy4KCShmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoaW5saW5lX2NvbnZlcnNpb24pOiBOZXcgZm4uCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogVXNlIGl0LgoJKiBjcC10cmVlLmg6IEFkZCBkZWNscy4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBBbHNvIGNvbnZlcnQgY29tcG9uZW50X3JlZnMgZnJvbQoJcmVmZXJlbmNlcy4KCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBVc2UgdGhlIHR5cGUsIG5vdCB0aGUgbmFtZSwgaW4KCWRlY2xzcGVjcy4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogRml4IHdlYWsgdnRhYmxlcy4KCkZyaSBBcHIgIDUgMTM6MzA6MTcgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2VfcmVjdXJzaXZlKTogRml4IGFjY2VzcyBjaGVja3MgZm9yCglwcm90ZWN0ZWQgYmFzZXMuCgpGcmkgQXByICA1IDExOjAyOjA2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBEZWxldGUgdW5uZWVkZWQgZGVjbCwgaXQncyBpbgoJY3AtdHJlZS5oLgoJKGNvbnZlcnRfaGFyc2huZXNzKTogQWRkIHByb3RvdHlwZXMgd3JhcHBlZCBieSBQUk9UTy4KCSogZGVjbDIuYyAoZ3Jva19mdW5jdGlvbl9pbml0KTogTGlrZXdpc2UuCgkoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IENoYW5nZSB0byB2b2lkIHJldHVybiB0eXBlLgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBSZW1vdmUgZGVjbCBvZiBtYWtlX3RodW5rLgoJKG1lcmdlX292ZXJyaWRlcyk6IEZpeCBvcmRlciBvZiBhcmcgZGVmaW5pdGlvbnMuCgkoZmluaXNoX3Z0YmxzKTogTGlrZXdpc2UuCgkoZml4dXBfdnRhYmxlX2RlbHRhcyk6IExpa2V3aXNlLgoJKG1vZGlmeV9hbGxfZGlyZWN0X3Z0YWJsZXMpOiBMaWtld2lzZS4KCShtb2RpZnlfYWxsX2luZGlyZWN0X3Z0YWJsZXMpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlX3JlY3Vyc2l2ZSk6IExpa2V3aXNlLgoJKGdldF9hYnN0cmFjdF92aXJ0dWFsc18xKTogTGlrZXdpc2UuCgkoZml4dXBfdmlydHVhbF91cGNhc3Rfb2Zmc2V0cyk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkc18xKTogQWRkIHByb3RvdHlwZXMgd3JhcHBlZCBieSBQUk9UTy4KCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogRml4IG9yZGVyIG9mIGFyZyBkZWZpbml0aW9ucy4KCShleHBhbmRfYWdncl9pbml0XzEpOiBBZGQgcHJvdG90eXBlcyB3cmFwcGVkIGJ5IFBST1RPLgoJKiBjcC10cmVlLmggKG1ha2VfdGh1bmspOiBBZGQgZGVjbC4KCShvdmVybG9hZF90ZW1wbGF0ZV9uYW1lLCBwdXNoX3RlbXBsYXRlX2RlY2wpOiBBZGQgZGVjbHMuCgkoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IENoYW5nZSB0byB2b2lkIHJldHVybiB0eXBlLgoJKHZlY19iaW5mb19tZW1iZXIpOiBBZGQgZGVjbC4KClRodSBBcHIgIDQgMTM6MzM6MTAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUsIGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQsCgljb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbiwgcG9pbnRlcl9pbnRfc3VtLCBwb2ludGVyX2RpZmYsCgl1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IEFkZCBwcm90b3R5cGVzIHdyYXBwZWQgYnkgUFJPVE8uCgkoY29udmVydF9zZXF1ZW5jZSk6ICNpZiAwIGZuIGRlY2wsIHNpbmNlIGRlZmluaXRpb24gYWxzbyBpcy4KClRodSBBcHIgIDQgMTE6MDA6NTMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBNYWtlIHN1cmUgd2Ugc3RyaXAgcXVhbGlmaWVycyBvbgoJY2FzdCB0byBwb2ludGVyIHR5cGVzIGZvciB0eXBlIHNlYXJjaGluZy4KCldlZCBBcHIgIDMgMTc6MTA6NTcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogVXNlIGNwX2Vycm9yLCBub3QgZXJyb3IsIGluIHRoZQoJY2FzZSB3aGVyZSBCSU5GTyA9PSAwLgoKV2VkIEFwciAgMyAxMjowMTowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRml4IHdvcmRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgc28KCWNvbnN0cnVjdG9ycyBjb21lIG91dCByaWdodC4KClR1ZSBBcHIgIDIgMTY6MDY6NTkgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogRG9uJ3Qgd2FybiBhYm91dCBoaWRkZW4KCWNvbnN0cnVjdG9ycyB3aGVuIGJvdGggdGhlIHR5cGUgYW5kIHRoZSBmdW5jdGlvbiBhcmUgZGVjbGFyZWQKCWluIGEgc3lzdGVtIGhlYWRlciBmaWxlLgoKTW9uIEFwciAgMSAwOTowMzoxMyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFByb3BhZ2F0ZSB0aGUgVFlQRV9QQUNLRUQKCWZsYWcgZm9yIHRoZSB0eXBlIHRvIHRoZSB0eXBlJ3MgZmllbGRzLgoKU2F0IE1hciAzMCAxMjoxNDozMyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjb21wbGV4X3Bhcm1saXN0LCBFTExJUFNFUyk6IFRha2Ugb3V0IEFSTS1iYXNlZCB3YXJuaW5nLgoKRnJpIE1hciAyOSAxNTo1MTozNiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJhc2VfaW5mbywgZmluaXNoX2Jhc2Vfc3RydWN0KTogUmVwbGFjZSAKCW5lZWRzX3ZpcnR1YWxfZHRvciB3aXRoIGJhc2VfaGFzX3ZpcnR1YWwuCgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IFJlbW92ZSB0aGUgb2xkIGNvZGUgdGhhdCB0cmllZCB0byBtYWtlIGRlZmF1bHQKCWRlc3RydWN0b3JzIHZpcnR1YWwuIFVzZSBiYXNlX2hhc192aXJ0dWFsIHdoZW4gY2hlY2tpbmcgaWYgd2UgbmVlZAoJdG8gYWRkIGEgdnRhYmxlIGVudHJ5IGZvciB0aGUgcnR0aSBjb2RlLgoKRnJpIE1hciAyOSAxNDowMjozNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBDb21wbGFpbiBhYm91dCB0ZW1wbGF0ZSBkZWNsIHdpdGgKCWluYXBwcm9wcmlhdGUgZGVjbGFyYXRpb24uCgpGcmkgTWFyIDI5IDEyOjE1OjM1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfdW5hcnlfb3ApOiBSZW1vdmUgYm9ndXMgY2hlY2sgZm9yIHRha2luZwoJdGhlIGFkZHJlc3Mgb2YgYSBtZW1iZXIgZnVuY3Rpb24uCgpGcmkgTWFyIDI5IDExOjU2OjAyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbnN0cnVjdG9yX2RlY2xhcmF0b3IpOiBPbmx5IHB1c2ggdGhlIGNsYXNzIGlmCgl3ZSBhcmUgbm90IGFscmVhZHkgaW4gdGhlIGNsYXNzLgoKRnJpIE1hciAyOSAwOTo0MTowMiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBSZW1vdmUgY3VycmVudF9jYWxsX2lzX2luZGlyZWN0IG5vbnNlbnNlLgoJQWRkIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gSU5JVF9DVU1VTEFUSVZFX0FSR1MuCgpUaHUgTWFyIDI4IDE2OjQxOjM5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc2hhZG93X3RhZyk6IEZpeCBlcnJvciBhYm91dCBhbm9uIHVuaW9uIHdpdGggbWV0aG9kcy4KCgkqIHBhcnNlLnkgKHNlbGZfcmVmZXJlbmNlKTogT25seSBnZW5lcmF0ZSBhIHNlbGYtcmVmZXJlbmNlIGlmIHRoaXMKCWlzIGEgbm9uLXRlbXBsYXRlIGNsYXNzLgoJKG9wdC5jb21wb25lbnRfZGVjbF9saXN0KTogT25seSB1c2UgaXQgaWYgaXQgd2FzIGdlbmVyYXRlZC4KCgkqIHBhcnNlLnkgKGNvbXBvbmVudF9kZWNsXzEpOiBVc2UgY29uc3RydWN0b3JfZGVjbGFyYXRvci4KCShmbi5kZWYyKTogTGlrZXdpc2UuCgkobm90eXBlX2NvbXBvbmVudF9kZWNsYXJhdG9yMCk6IExpa2V3aXNlLgoKVGh1IE1hciAyOCAxNToxMTozNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF94X3VuYXJ5X29wKTogQWRkIGNoZWNrcyBmb3IgdGFraW5nIHRoZSBhZGRyZXNzCglvZiBhIFRBUkdFVF9FWFBSIG9yIG9mIGEgbWVtYmVyIGZ1bmN0aW9uLCBhbmQgZ2l2ZSBhcHByb3ByaWF0ZQoJd2FybmluZ3MuCgpUaHUgTWFyIDI4IDE0OjQ5OjI2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEFsbG93IHRlbXBsYXRlIHR5cGUgcGFybXMgdG8gYmUKCXVzZWQgYXMgdHlwZXMgZm9yIHRlbXBsYXRlIGNvbnN0IHBhcm1zLgoKV2VkIE1hciAyNyAxNTo1MToxOSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IEVuc3VyZSB0aGUgZWggY2xlYW51cHMgYXJlIG9uIHRoZQoJZnVuY3Rpb25fb2JzdGFjay4KCldlZCBNYXIgMjcgMTA6MTQ6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogQmUgZXZlbiBtb3JlIHBpY2t5IGFib3V0IHRoZQoJYW1iaWd1b3VzIGxvb2t1cCB3YXJuaW5nLgoJKGdyb2tkZWNsYXJhdG9yKTogVHdlYWsgU0NPUEVfUkVGIGNvbnN0cnVjdG9yIGRlY2xhcmF0b3JzIGhlcmUuCgkqIHBhcnNlLnkgKGNvbnN0cnVjdG9yX2RlY2xhcmF0b3IpOiBSYXRoZXIgdGhhbiBoZXJlLgoKCSogcGFyc2UueSAoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IE5ldyBub250ZXJtaW5hbC4KCShmbi5kZWYxKTogVXNlIGl0LgoJKGV4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KClR1ZSBNYXIgMjYgMTM6NDE6MzMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUFkZCBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBjbGFzcyBuYW1lIGF0IGNsYXNzIHNjb3BlLgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBSZXN0cmljdCBwZWR3YXJuIGFib3V0IGFtYmlndW91cyBsb29rdXAuCgkqIHBhcnNlLnkgKHNlbGZfcmVmZXJlbmNlKTogTmV3IG5vbnRlcm1pbmFsLgoJKG9wdC5jb21wb25lbnRfZGVjbF9saXN0KTogVXNlIGl0LgoJKGZuLmRlZjEpOiBBZGQgbmVzdGVkX25hbWVfc3BlY2lmaWVyIHR5cGVfbmFtZSBjYXNlcy4KCSogY2xhc3MuYyAoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX3N0cnVjdCk6IEhhbmRsZSBhY2Nlc3NfZGVmYXVsdCBsYXRlciwgbW92ZSBzZWxmLXJlZmVyZW5jZQoJZGVjbCB0byB0aGUgZW5kLgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBIYW5kbGUgZ2V0dGluZyBhIFRZUEVfREVDTC4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgoJKiBwdC5jIChkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogU2VwYXJhdGUgaGFuZGxpbmcgb2YgbWVtYmVyCglmdW5jdGlvbnMgYW5kIG5vbi1tZW1iZXIgZnVuY3Rpb25zIHByb3Blcmx5LgoKTW9uIE1hciAyNSAxNDoyMzoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBJbXByb3ZlIGVycm9yIGZvciAndm9sYXRpbGUgY2xhc3MgSycuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBDaGVjayB0aGUgcmlnaHQgc2xvdCBmb3IgZGVzdHJ1Y3RvcnMuCgoJKiBkZWNsLmMgKHN0YXJ0X2VudW0pOiBDb21wbGFpbiBhYm91dCBlbnVtIHRlbXBsYXRlcy4KCk1vbiBNYXIgMjUgMTM6MjU6MzEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBPZmZzZXQgcG9pbnRlcnMgdG8gbWVtYmVyIGRhdGEgYnkgb25lLgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBMaWtld2lzZS4KCk1vbiBNYXIgMjUgMTM6MzA6NDIgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQ2hlY2sgZm9yIGEgcmV0dXJuZWQgbG9jYWwKCWFycmF5IG5hbWUsIHNpbWlsYXIgdG8gdGhlIGNoZWNrIGZvciBhbiBBRERSX0VYUFIuCgpNb24gTWFyIDI1IDEzOjA3OjE5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBEb24ndCBidWlsZCBjbGVhbnVwcyBmb3Igc3RhdGljCgl2YXJpYWJsZXMgaGVyZS4KCkZyaSBNYXIgMjIgMTc6NTc6NTUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogRml4IGVycm9yIG1lc3NhZ2VzIHRvIGJlIG1vcmUKCWFjY3VyYXRlLgoJKiBjcC10cmVlLmggKGFzc29wX2FzX3N0cmluZyk6IFBhcmFsbGVsIHRvIG9wX2FzX3N0cmluZywgYnV0IGZvcgoJYXNzaWdubWVudCBvcGVyYXRvcnMuCgkqIGVycm9yLmMgKGFzc29wX2FzX3N0cmluZyk6IExpa2V3aXNlLiAgQWRkIHN1cHBvcnQgZm9yIGAlUScgZm9yCglhc3NpZ25tZW50IG9wZXJhdG9ycy4KCkZyaSBNYXIgMjIgMTM6NDg6MjkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENhbGwgYmFkX3NwZWNpZmllcnMgZm9yIHR5cGVkZWZzLiAgQWxzbwoJZ2l2ZSBhbiBlcnJvciBpZiBpbml0aWFsaXplZC4gIFBlZHdhcm4gYWJvdXQgbmVzdGVkIHR5cGUgd2l0aCB0aGUKCXNhbWUgbmFtZSBhcyBpdHMgZW5jbG9zaW5nIGNsYXNzLgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIFRZUEVfREVDTCk6IFNldCBERUNMX0NPTlRFWFQuCgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogQmUgc3VyZSB0byBpbnN0YW50aWF0ZSB0aGUKCU1BSU5fVkFSSUFOVCBvZiB0aGUgdHlwZS4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogSW5zdGFudGlhdGUgcGVuZGluZyB0ZW1wbGF0ZXMgYmVmb3JlCglwcm9jZXNzaW5nIHN0YXRpYyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IERvbid0IGluc3RhbnRpYXRlIGZ1bmN0aW9ucyBhdCB0b3BsZXZlbAoJdW5sZXNzIGF0X2VvZi4KCkZyaSBNYXIgMjIgMDk6MzA6MTcgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBiZWF1dHkuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBJZiBlcnJvcl9tYXJrX25vZGUgaXMgcGFzc2VkCglpbiBhcyBhbiBleHByZXNzaW9uLCBxdWl0IHdoaWxlIHdlJ3JlIGFoZWFkLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpZiBgZnJpZW5kJwoJaXMgY29tYmluZWQgd2l0aCBhbnkgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXJzLgoKV2VkIE1hciAyMCAxNDo1MTo1NSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IERvbid0IGNyYXNoIG9uCglkZWZpbml0aW9uIG9mIG5vbmV4aXN0ZW50IG5lc3RlZCB0eXBlLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsLCBjYXNlIFRZUEVfREVDTCk6IEZpeCBkZWNpc2lvbiBmb3Igd2hldGhlciBvcgoJbm90IHRvIHNheSAndHlwZWRlZicuCgpXZWQgTWFyIDIwIDAwOjExOjQ3IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfdHlwZSk6IE1ha2Ugc2VhcmNoX3Nsb3QgYSB0cmVlLCBub3QgYSBjaGFyKi4KCSogc2VhcmNoLmMgKGRmc193YWxrLCBkZnNfaW5pdF92YmFzZV9wb2ludGVycywKCWV4cGFuZF91cGNhc3RfZml4dXBzKTogUmVtb3ZlIGNhc3Qgb2YgQ0xBU1NUWVBFX1NFQVJDSF9TTE9ULgoJKGRmc19maW5kX3ZiYXNlcyk6IFJlbW92ZSBjYXN0IGZvciBDTEFTU1RZUEVfU0VBUkNIX1NMT1QgaW5pdC4KClR1ZSBNYXIgMTkgMTc6NTY6MDMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGJ1aWxkX3Rocm93KTogU3VwcG9ydCBtaW5pbWFsIHBhcnNlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IFN1cHBvcnQgVEhST1dfRVhQUi4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMaWtld2lzZS4KCgkqIHB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IEFsd2F5cyBhbGxvY2F0ZQoJc2NyYXRjaF9maXJzdG9iai4KClR1ZSBNYXIgMTkgMTY6MzQ6MzEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBiZWF1dHkuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBHaXZlIGFuIGFwcHJvcHJpYXRlIGVycm9yCgl3aGVuIHRyeWluZyB0byBjYXN0IGZyb20gYW4gaW5jb21wbGV0ZSB0eXBlLgoKVHVlIE1hciAxOSAxNjowMDozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IGJvdGhlciBzZXR0aW5nIHVwCglDTEFTU1RZUEVfVEFHUyBleHBsaWNpdGx5LCBhcyB0aGUgbmVzdGVkIHR5cGVzIHdpbGwgYWRkCgl0aGVtc2VsdmVzLgoKVHVlIE1hciAxOSAxNTo0ODo0MyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzaGFkb3dfdGFnKTogUmVtb3ZlIG9sZCBlcnJvciBjaGVjayBmb3IgdXNhZ2Ugb2YKCWFuIGVudW0gd2l0aG91dCBhIHByZXZpb3VzIGRlY2xhcmF0aW9uLgoJKHhyZWZfdGFnKTogQWRkIGVycm9yIG1lc3NhZ2UgYWJvdXQgdXNhZ2Ugb2YgZW51bXMgd2l0aG91dCBhCglwcmV2aW91cyBkZWNsYXJhdGlvbi4KClR1ZSBNYXIgMTkgMDk6MjE6MzUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBPbmx5IGRvIG5hbWUgY29uc2lzdGVuY3kgY2hlY2sgaWYgd2UncmUKCXBhcnNpbmcuCgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBEb24ndCBjcmFzaCBpZiB3ZSBnZXQgYSBtZW1iZXIgZGVmbgoJdGhhdCBkb2Vzbid0IG1hdGNoLgoKCSogZGVjbC5jICh4cmVmX3RhZ19mcm9tX3R5cGUpOiBOZXcgZnVuY3Rpb24gdG8gZG8gYW4geHJlZiB3aXRob3V0CglhbHdheXMgaGF2aW5nIHRvIGZpZ3VyZSBvdXQgY29kZV90eXBlX25vZGUuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgaXQgZm9yIGZyaWVuZCBjbGFzc2VzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFVzZSBpdC4KCgkqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogUHVsbCBvdXQgYSBzaW5nbGUgcGFybSBiZWZvcmUKCXBhc3NpbmcgaXQgdG8gYnVpbGRfY19jYXN0LgoKVHVlIE1hciAxOSAwOTowNzoxNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogZXhwci5jIChkb19jYXNlKTogR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIGEgcG9pbnRlciBpcwoJZ2l2ZW4gYXMgYSBjYXNlIHZhbHVlLgoKTW9uIE1hciAxOCAyMTo1Nzo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3QgcHVsbCBzaW5nbGUgVEVNUExBVEVfREVDTCBvdXQgb2YKCWFuIG92ZXJsb2FkIGxpc3QuCgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogUmVhbGx5LCBub3csIGludGVyZmFjZSBoYWNrZXJ5Cglkb2VzIG5vdCBhcHBseSB0byBzeW50aGVzaXplZCBtZXRob2RzLgoKTW9uIE1hciAxOCAxODoyMDo1NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQ3RvcnMgYW5kIGR0b3JzIG5vdyBoYXZlIHNwZWNpYWwgbmFtZXMKCXdpdGggcmVzcGVjdCB0byBsb29rdXBzLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogTGlrZXdpc2UuCgkoZ3Jvd19tZXRob2QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBMaWtld2lzZS4KCSh3YXJuX2hpZGRlbik6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBMaWtld2lzZS4KCShjb252ZXJ0X3RvX2FnZ3IpOiBMaWtld2lzZS4KCShjcF9jb252ZXJ0KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfZGVmYXVsdF9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX25ldyk6IExpa2V3aXNlLgoJKGJ1aWxkX2RlbGV0ZSk6IExpa2V3aXNlLgoJKiBsZXguYyAoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZF8xKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzX2hlcmUpOiBMaWtld2lzZS4KCShsb29rdXBfZmllbGQpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHMpOiBMaWtld2lzZS4KCShnZXRfdmlydHVhbF9kZXN0cnVjdG9yKTogTGlrZXdpc2UuCgkoZGZzX2RlYnVnX21hcmspOiBMaWtld2lzZS4KCShkZnNfcHVzaGRlY2xzKTogTGlrZXdpc2UuCgkoZGZzX2NvbXByZXNzX2RlY2xzKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCShidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChDTEFTU1RZUEVfRklSU1RfQ09OVkVSU0lPTik6IExpa2V3aXNlLgoJKENUT1JfTkFNRSk6IE5ldy4KCShEVE9SX05BTUUpOiBOZXcuCgkqIGRlY2wuYyAoY3Rvcl9pZGVudGlmaWVyKTogTmV3LgoJKGR0b3JfaWRlbnRpZmllcik6IE5ldy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCB0aGVtLgoKTW9uIE1hciAxOCAxODowMDo1MSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERvbid0IGdldCBjb25mdXNlZCBieSBmaWVsZHMgd2hvc2UKCWNvbnRleHQgaGFzIG5vIHR5cGUgbmFtZSwgbGlrZSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbnMuCgpNb24gTWFyIDE4IDEzOjE5OjAzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgdHlwZWRlZiB3aXRob3V0IGRlY2xhcmF0b3IuCgoJKiBwdC5jICh0c3Vic3QpOiBIYW5kbGUgU0NPUEVfUkVGIGluIGRlY2xhcmF0b3IuCgoJKiBwYXJzZS55IChiYWRfcGFybSk6IENhdGNoIGFub3RoZXIgY2FzZSBvZiBtaXNzaW5nIGB0eXBlbmFtZScuCgoJKiBsZXguYyAoeXlwcmludCk6IEhhbmRsZSBUWVBFX0RFQ0xzLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IERvbid0IHRyeSB0byBiZSBjbGV2ZXIuCgoJKiBsZXguYzogTG9zZSBjb21waWxlcl9lcnJvcl93aXRoX2RlY2wuCgkqIHR5cGVjazIuYzogTG9zZSBlcnJvcl93aXRoX2FnZ3JfdHlwZS4KCShpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBVc2UgY3BfKiBpbnN0ZWFkIG9mIG9sZCBmdW5jdGlvbnMuCgkocmVhZG9ubHlfZXJyb3IpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChsb29rdXBfbmVzdGVkX2ZpZWxkKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogVXBkYXRlLgoKCSogdHJlZS5jIChtaW5fdHJlZV9jb25zKTogQ2FsbCBjb3B5X3RvX3Blcm1hbmVudCBmb3IgdGhlIHB1cnBvc2UKCWFuZCB2YWx1ZS4KCk1vbiBNYXIgMTggMTE6MjU6NTIgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBiZWF1dHkuY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFdoZW4gZGVsZXRpbmcgYSBwb2ludGVyIHRvIGFuCglhcnJheSwgYnVpbGQgYSBuZXcgcG9pbnRlciB0byB0aGUgdHJlZSBwYXN0IGFueSBBUlJBWV9UWVBFCglub2Rlcy4KCk1vbiBNYXIgMTggMTA6MTE6NDYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogSW5pdGlhbGl6ZSBsb2NhbCB2YXIgVFlQRSB0byBOVUxMX1RSRUUuCgpGcmkgTWFyIDE1IDExOjAzOjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBPbmx5IGNhbGwgaW1wb3J0X2V4cG9ydF9kZWNsIGlmIGF0X2VvZgoJYW5kICEgREVDTF9JTkxJTkUuCgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IHNldCBuZXN0ZWQgYmFzZWQgb24KCWhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0LgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBDaGVjayBmb3IgbmVzdGVkIGZ1bmN0aW9uLgoJKHBlbmRpbmdfaW5saW5lcyk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBJZiBhIHVuYXJ5IG9wIGFscmVhZHkgaGFzIGEKCXR5cGUsIGp1c3QgcmV0dXJuIGl0LgoKCSogZGVjbDIuYyAoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogVXNlIEFESlVTVF9WVEFCTEVfTElOS0FHRS4KCgkqIGRlY2wyLmMgKHdhbGtfdnRhYmxlcyk6IHZhcmRlY2xfZm4gcmV0dXJucyBpbnQ7IHJldHVybiAxIGlmIGl0IGRvZXMuCgkoZmluaXNoX2ZpbGUpOiBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHdhbGtfdnRhYmxlcy4KCShmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBSZXR1cm4gaW50LgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IExpa2V3aXNlLgoJKHBydW5lX3Z0YWJsZV92YXJkZWNsKTogTGlrZXdpc2UuCgkqIGxleC5jIChzZXRfdmFyZGVjbF9pbnRlcmZhY2VfaW5mbyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IEFkanVzdCByZXR1cm4gdHlwZXMuCgoJKiBjbGFzcy5jIChkZWxldGVfZHVwbGljYXRlX2ZpZWxkc18xKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQKCWR1cGxpY2F0ZSBuZXN0ZWQgdHlwZXMgaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBSZW1vdmUgY2hlY2sgZm9yIGR1cGxpY2F0ZS4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRG9uJ3QgY2hlY2sgZm9yIHR5cGVkZWYgb2YgYW5vbnltb3VzIHR5cGUuCgpUaHUgTWFyIDE0IDEwOjAwOjE5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogTG9zZSBTSUdOQVRVUkVfR1JPS0tJTkdfVFlQRURFRi4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBMb3NlIHNwZWNpYWwgaGFuZGxpbmcgb2YgY2xhc3MtbGV2ZWwKCXR5cGVkZWYuICBMb3NlIFNJR05BVFVSRV9HUk9LS0lOR19UWVBFREVGLiAgU2V0CglTSUdOQVRVUkVfSEFTX09QQVFVRV9UWVBFREVDTFMgbGF0ZXIuCgoJKiBjdnQuYyAoY29udmVydF9wb2ludGVyX3RvX3JlYWwpOiBSZXRhaW4gY3YtcXVhbHMgaW4gY29udmVyc2lvbi4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogU3RyaXAgY3YtcXVhbHMgZnJvbSBkZXN0cnVjdG9yIG5hbWUgdHlwZXMuCgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBGaXggaGFuZGxpbmcgb2YgYW5vbnltb3VzIHVuaW9uCgltZW1iZXJzLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2Fub24pOiBQcm9wYWdhdGUgVFJFRV97UFJJVkFURSxQUk9URUNURUR9Cglmcm9tIGFub255bW91cyB1bmlvbnMgdG8gdGhlaXIgbWVtYmVycy4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBGb3Igc3RhdGljIG1lbWJlciBmdW5jdGlvbnMsCgloYW5kIG9mZiB0byBidWlsZF9tZW1iZXJfY2FsbC4KCldlZCBNYXIgMTMgMTQ6MDM6MzQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBIYW5kbGUgT0ZGU0VUX1JFRnMuCgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IEZpeCBpbml0ID09IDAgY2FzZS4KClR1ZSBNYXIgMTIgMTQ6MzY6MDIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBQZWR3YXJuIGFib3V0IGluaXQgYW5kIGFycmF5IG5ldy4KCShleHBhbmRfdmVjX2luaXQpOiBIYW5kbGUgbGlzdHMsIHVzZSBjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbi4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IFBhc3MgTE9PS1VQX05PX0NPTlZFUlNJT04KCXdoZW4gY29udmVydGluZyB0byBhbiBhZ2dyZWdhdGUgdHlwZS4KCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBQYXNzIGl0IHRocm91Z2guCgoJKiB0eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IEhhbmRsZSB1c2VyLWRlZmluZWQKCWNvbnZlcnNpb25zIHRvIHNsaWdodGx5IGRpZmZlcmVudCB0eXBlcy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGb3JjZSBhbiBhcnJheSB0eXBlIGluIGEgcGFybSB0byBiZQoJcGVybWFuZW50LgoKCSogZGVjbDIuYyAoZG9fdXNpbmdfZGlyZWN0aXZlKTogU29ycnkuCgkoZG9fbmFtZXNwYWNlX2FsaWFzKTogTGlrZXdpc2UuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogV2FybiBhYm91dCB1c2luZyB0aGUgYG5hbWVzcGFjZScga2V5d29yZC4KClN1biBNYXIgMTAgMjI6MjY6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZGF0YWRlZik6IE1vdmUgY2FsbCB0byBub3RlX2xpc3RfZ290X3NlbWljb2xvbiB1cC4KCkZyaSBNYXIgIDggMTE6NDc6MjYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHJlZS5jICh1bnNhdmVfZXhwcik6IERvbid0IHVuc2F2ZSwgVU5TQVZFX0VYUFJzLgoKRnJpIE1hciAgOCAxMToyOTowNiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogVGhlIGV4Y2VwdGlvbiByZWdpb25zIGhhdmUgdG8gYmUKCW5lc3RlZCwgbm90IG92ZXJsYXBwaW5nLiAgV2Ugc3RhcnQgdGhlIGV4Y2VwdGlvbiByZWdpb24gZm9yIGEKCWRlY2wsIGFmdGVyIGl0IGhhcyBiZWVuIGZ1bGx5IGJ1aWx0LCBhbmQgYWxsIHRlbXBvcmFyaWVzIGZvciBpdAoJaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCgpUaHUgTWFyICA3IDE3OjQ2OjA2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAodmVjX2JpbmZvX21lbWJlcik6IERvbid0IGNvcmUgZHVtcCBpZiB3ZSBoYXZlIG5vIGJhc2VzLgoKVGh1IE1hciAgNyAxNDoxMTo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmRlZjogQWRkIFJFVFVSTl9JTklULgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogSGFuZGxlIFJFVFVSTl9JTklULgoJKiBkZWNsLmMgKHN0b3JlX3JldHVybl9pbml0KTogSGFuZGxlIG1pbmltYWxfcGFyc2VfbW9kZS4KCgkqIHRyZWUuYyAoY3BfYnVpbGRfdHlwZV92YXJpYW50KTogSnVzdCByZXR1cm4gYW4gZXJyb3JfbWFya19ub2RlLgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IERvbid0IHRyeSB0byBnZXQgdGhlIGZpbGUgYW5kIGxpbmUKCW9mIGFuIGlkZW50aWZpZXIuCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBIYW5kbGUgVFlQRU5BTUVfVFlQRS4KCldlZCBNYXIgIDYgMTg6NDc6NTAgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHBvcGxldmVsKTogTWFrZSBzdXJlIHdlIGNsZWFyIG91dCBhbmQgcmVzdG9yZSBvbGQgbG9jYWwKCW5vbi1WQVJfREVDTCB2YWx1ZXMgYnkgZGVmYXVsdCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLgoKV2VkIE1hciAgNiAwOTo1NzozNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBVc2UgREVDTF9BU1NFTUJMRVJfTkFNRSBpbgoJcmVmZXJyaW5nIHRvIGFkZHJlc3NlcyBvZiB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFN1cHBvcnQgU0laRU9GX0VYUFIuCgoJKiBpbml0LmMgKGRvX2ZyaWVuZCk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGNoZWNrX2NsYXNzZm4uCgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQWZ0ZXIgZ2l2aW5nIGFuIGVycm9yLCBzZXQgdmFsdWUgdG8KCWVycm9yX21hcmtfbm9kZS4KClR1ZSBNYXIgIDUgMTY6MDA6MTUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChoYWNrX2RlY2xfZnVuY3Rpb25fY29udGV4dCk6IEtsdWRnZSBhcm91bmQgREVDTF9DT05URVhUCglsb3NzYWdlIGZvciBsb2NhbCBjbGFzc2VzLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEV2aWwsIHBhaW5mdWwgaGFjayBmb3IgbG9jYWwgY2xhc3Nlcy4KCShncm9rZm5kZWNsKTogU2V0IERFQ0xfQ0xBU1NfQ09OVEVYVCBhbmQgREVDTF9OT19TVEFUSUNfQ0hBSU4gaGVyZS4KCVVzZSBoYWNrX2RlY2xfZnVuY3Rpb25fY29udGV4dC4KCShncm9rZGVjbGFyYXRvcik6IERvbid0IHNldCBERUNMX05PX1NUQVRJQ19DSEFJTiBoZXJlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogVXNlIGhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0LgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBMaWtld2lzZS4KCSogbGV4LmMgKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4KCShkb19wZW5kaW5nX2lubGluZXMpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBVbnNldCBERUNMX1NUQVRJQ19GVU5DVElPTl9QIHdoZW4gd2UncmUKCWRvbmUgd2l0aCBpdC4KCk1vbiBNYXIgIDQgMjI6Mzg6MzkgMTk5NiAgR2VyYWxkIEJhdW1nYXJ0bmVyICA8Z2JAYWxleGFuZGVyLmNzLnB1cmR1ZS5lZHU+CgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfb3JfcmVmZXJlbmNlX3R5cGUpOiBBbGlnbgoJc2lnbmF0dXJlIHBvaW50ZXJzL3JlZmVyZW5jZXMgb24gOC1ieXRlIGJvdW5kYXJpZXMgc28gdGhleSBjYW4gYmUKCWdyYWJiZWQgMiB3b3JkcyBhdCBhIHRpbWUgb24gYSBTcGFyYy4KClR1ZSBNYXIgIDUgMTA6MjE6MDEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IFJlcXVpcmluZyBhIHN0YXRpYyBjaGFpbiBpcyBub3cgYQoJaGFyZCBlcnJvci4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFNldCBERUNMX05PX1NUQVRJQ19DSEFJTiBvbiBuZXN0ZWQKCWZ1bmN0aW9ucy4KCk1vbiBNYXIgIDQgMjA6MDM6MzMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKCSogZGVjbC5jIChwb3BfZnJvbV90b3BfbGV2ZWwpOiBBbHdheXMgcG9wIHByZXZpb3VzX2NsYXNzX3R5cGUuCgoJKiBwYXJzZS55OiBIYW5kbGUgbXVsdGlwbGUgZGVjbHMgaW4gYSBmb3ItaW5pdC1zdGF0ZW1lbnQuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogTGlrZXdpc2UuCgoJKiBwdC5jICh0c3Vic3QpOiBVc2UgdHN1YnN0X2V4cHIgZm9yIHRoZSBzZWNvbmQgb3BlcmFuZCBvZiBhbgoJQVJSQVlfUkVGLgoKCSogZGVjbC5jIChtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IERvbid0IHNhdmUgcHJldmlvdXNfY2xhc3NfdHlwZS4KCShwb3BsZXZlbF9jbGFzcyk6IFNldCBpdCBoZXJlLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFBvcCBpdCBoZXJlIGlmIHdlJ3JlIHJldHVybmluZyB0byBjbGFzcyBzY29wZS4KCSogY2xhc3MuYyAocHVzaGNsYXNzKTogRG9uJ3Qgc2V0IGl0IGhlcmUuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogU2F2ZSBjdXJyZW50X3RlbXBsYXRlX3Bhcm1zLAoJYW5kIGNsZWFyIGl0IGlmICFwc2V1ZG8uCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSBpdC4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUHVzaCB0aGUgZHVtbXkgZWFjaCB0aW1lIHdlIHdhbGsgdGhlIGxpc3QKCW9mIHZ0YWJsZXMuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBTdXBwb3J0IExPT0tVUF9FWFBSIGFuZCBhY3R1YWxseSBkbwoJc29tZXRoaW5nIGZvciBDQVNUX0VYUFIuCgkKTW9uIEZlYiAxOSAxNDo0OToxOCAxOTk2ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogV2FybiBhYm91dCBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIHRoZQoJYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIHRvIGJvb2wsIGFzIGl0IGlzIGFsd2F5cyB0cnVlLgoKRnJpIEZlYiAyMyAyMzowNjowMSAxOTk2ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBGaXggd2FybmluZyBmb3IgbG9jYWwgZXh0ZXJucyByZXR1cm5lZC4KCk1vbiBNYXIgIDQgMTU6MDM6MTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChtYXBjYXIpOiBQcm9wYWdhdGUgY29uc3QgYW5kIHZvbGF0aWxlIHByb3Blcmx5LgoKCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBCZSBzdXJlIHRvIGluc3RhbnRpYXRlIHRoZQoJTUFJTl9WQVJJQU5UIG9mIHRoZSB0eXBlLgoKCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogQ2xhc3MgaW50ZXJmYWNlIGhhY2tlcnkgZG9lcyBub3QKCWFwcGx5IHRvIHN5bnRoZXNpemVkIG1ldGhvZHMuCgpNb24gTWFyICA0IDE0OjA1OjIzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvbXBfdGVtcGxhdGVfYXJncyk6IFVzZSBjb21wdHlwZXMgcmF0aGVyIHRoYW4ganVzdAoJY2hlY2tpbmcgZm9yIFRFTVBMQVRFX1RZUEVfUEFSTSBlcXVpdmFsZW5jZS4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBDYWxsIGNvbXBsZXRlX3R5cGUgYmVmb3JlCgljaGVja2luZyBUWVBFX09WRVJMT0FEU19DQUxMX0VYUFIuCgpNb24gTWFyICA0IDE4OjQ4OjMwIDE5OTYgIE1hbmZyZWQgSG9sbHN0ZWluICAgPG1hbmZyZWRAbHRzLnNlbC5hbGNhdGVsLmRlPgoKCSogZysrLmMgKG1haW4pOiBDaGVjayBhbHNvIGZvciBuZXcgZGVmaW5lIEFMVF9MSUJNLgoKRnJpIE1hciAgMSAxMzowOTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IElmIHdlIGRvbid0IGhhdmUgYSBwYXR0ZXJuCgl5ZXQsIHRoYXQncyBPSy4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBJZiB3ZSBzZWUgYSBsb2NhbCBjbGFzcywgYmFpbC4KCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IE1ha2Ugc3VyZSB0aGVyZSdzIGEgdHlwZSBiZWZvcmUKCWNoZWNraW5nIGl0cyBjb2RlLgoKCSogcHQuYyAoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IEF2b2lkIGNyYXNoaW5nIG9uIGludmFsaWQgZGVjbHMuCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogTGlrZXdpc2UuCgoJKiBwYXJzZS55IChuYW1lZF9jbGFzc19oZWFkKTogU2V0CglDTEFTU1RZUEVfVEVNUExBVEVfU1BFQ0lBTElaQVRJT04gaGVyZSBpZiB3ZSBoYXZlIGJhc2V0eXBlcy4KCgkqIGRlY2wuYyAoeHJlZl90YWcpOiBEaWFnbm9zZSByZWRlY2xhcmF0aW9uIG9mIHRlbXBsYXRlCgl0eXBlLXBhcmFtZXRlciBuYW1lLgoKCSogZXJyb3IuYyAoZHVtcF90eXBlKTogSGFuZGxlIGFub255bW91cyB0ZW1wbGF0ZSB0eXBlIHBhcm1zLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBVc2UgVFlQRV9NQUlOX0RFQ0wgaW5zdGVhZCBvZgoJVFlQRV9TVFVCX0RFQ0wuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgpUaHUgRmViIDI5IDE2OjI2OjAxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUsIGNhc2Uge0FSUkFZLElORElSRUNUfV9SRUYsCgljYXNlIEFERFJfRVhQUik6IERvbid0IG1vZGlmeSByaHMgaWYgYSBzdWJpbnN0YW50aWF0aW9uIGZhaWxzLgoKVGh1IEZlYiAyOSAwODoyMDoyNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IFRha2UgdGhlIE1BSU5fVkFSSUFOVCBvZiB0aGUgdHlwZQoJYmVmb3JlIHRyeWluZyB0byBnZXQgaXRzIFNUVUJfREVDTC4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX3R5cGVfcGFybSk6IElmIHRoZXkgZGlkbid0IHVzZSAnY2xhc3MnLAoJcHJldGVuZCB0aGV5IGRpZCBhZnRlciBnaXZpbmcgYW4gZXJyb3IuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBEaWFnbm9zZSB1c2Ugb2YgbG9jYWwgY2xhc3MuCgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBVc2UgaW5zdGFudGlhdGVfdHlwZS4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBURU1QTEFURV9ERUNMcy4KCgkqIHBhcnNlLnkgKG5hbWVkX2NsYXNzX2hlYWQpOiBEaWFnbm9zZSBtaXNtYXRjaGluZyB0eXBlcyBhbmQgdGFncy4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBUeXBlIGRlY2xzIGFuZCBjbGFzcyB0ZW1wbGF0ZXMgY2xhc2ggd2l0aAoJYXJ0aWZpY2lhbCB0eXBlIGRlY2xzLCBub3QgaGlkZSB0aGVtLgoKCSogZGVjbC5jIChyZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOiBEaWFnbm9zZSByZWRlZmluaXRpb24gb2YKCXRlbXBsYXRlcyBwcm9wZXJseS4KCShkdXBsaWNhdGVfZGVjbHMpOiBEaWFnbm9zZSBkaXNhbGxvd2VkIG92ZXJsb2FkcyBmb3IgdGVtcGxhdGUKCWZ1bmN0aW9ucywgdG9vLgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQ2FsbCBjb21wbGV0ZV90eXBlIGJlZm9yZSBjaGVja2luZyBmb3IgYQoJZGVzdHJ1Y3Rvci4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSB0c3Vic3RfZXhwciBvbiB0aGUgZWx0cyBvZiBhIFZFQy4KCgkqIGRlY2wuYyAoeHJlZl90YWcpOiBBIFRFTVBMQVRFX1RZUEVfUEFSTSBpcyBhIG1hdGNoLgoKV2VkIEZlYiAyOCAwOToyODo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IERvbid0IGNoZWNrIGZvciBvcGVyYXRvcisrKGludCkgaW4KCWEgdGVtcGxhdGUuCgoJKiB0cmVlLmMgKHBlcm1fbWFuaXApOiBSZXR1cm4gYSBjb3B5IG9mIHZhcmlhYmxlIGFuZCBmdW5jdGlvbgoJZGVjbHMgd2l0aCBleHRlcm5hbCBsaW5rYWdlLgoKCSogdHJlZS5kZWY6IENoYW5nZSBzb21lIG9mIHRoZSBtaW4gdHJlZSBjb2RlcyB0byB0eXBlICIxIi4KCSogcHQuYyAodXNlc190ZW1wbGF0ZV9wYXJtcyk6IEhhbmRsZSAnZSdzLCByZXR1cm4gMSBmb3IgTE9PS1VQX0VYUFJzLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50KTogRW1pdCBzb21ldGhpbmcgYXJiaXRyYXJ5IGZvcgoJYW55dGhpbmcgYnV0IGFuIElOVEVHRVJfQ1NUIGlmIHdlJ3JlIGluIGEgdGVtcGxhdGUuCgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogQ2FsbCBjb21wbGV0ZV90eXBlIGJlZm9yZSBkZWNpZGluZwoJd2hldGhlciBvciBub3QgdG8gbGF5IG91dCB0aGUgZGVjbC4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQ2hlY2sgZm9yIERFQ0xfSU5JVElBTCBiZWZvcmUgdXNpbmcgaXQuCgpUdWUgRmViIDI3IDE2OjM1OjMyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoYnVpbGRfeF9hcnJvdyk6IENhbGwgY29tcGxldGVfdHlwZS4KCgkqIHB0LmMgKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogQnJva2VuIG91dC4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBJZiAtZmV4dGVybmFsLXRlbXBsYXRlcywgY2FsbCBpdCBmb3IgYWxsCgl0aGUgbWV0aG9kcyBvZiBpbXBsZW1lbnRlZCB0eXBlcy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IEluc3RlYWQgb2YgaW5zdGFudGlhdGluZyB0aGVtIGhlcmUuCgkoaW5zdGFudGlhdGVfZGVjbCk6IEhhbmRsZSAtZmV4dGVybmFsLXRlbXBsYXRlcyBlYXJsaWVyLgoKVHVlIEZlYiAyNyAxNTo1MTozMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYywgbGV4LmMsIGRlY2wuYywgY2xhc3MuYywgY3AtdHJlZS5oOiBEb24ndCB3cmFwIHRoZQoJbWVtb2l6ZWQgbG9va3VwIHN0dWZmIGluc2lkZSBHQVRIRVJfU1RBVElTVElDUy4KClR1ZSBGZWIgMjcgMTA6Mzg6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQ29tcGxhaW4gYWJvdXQgYXJyYXkgb2YgaW5jb21wbGV0ZSB0eXBlCgloZXJlLgoJKGdyb2tkZWNsYXJhdG9yKTogTm90IGhlcmUuCgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9wYXJtKTogRXhwYW5kIGZ1bGxfcGFybSBpbmxpbmUgc28gd2UgY2FuIHNldAoJdGhlIHJ1bGUncyBwcmVjZWRlbmNlLgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBJZiB3ZSdyZSBpbiBhIHRlbXBsYXRlLCBqdXN0IGRvIHRzdWJzdF9jb3B5LgoJKHRzdWJzdCk6IHRzdWJzdF9leHByIHRoZSBERUNMX0lOSVRJQUwgb2YgRklFTERfREVDTHMuCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IERvbid0IGNoZWNrIGZvciBpbnRlZ2VyIGNvbnN0YW50IGhlcmUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENoZWNrIGhlcmUuCgoJKiBkZWNsLmMgKGRlZmluZV9sYWJlbCk6IE1ha2UgdGhlIG1pbiBkZWNsIGdvIG9uIHBlcm1hbmVudF9vYnN0YWNrLgoKCSogcHQuYyAodW5pZnkpOiBEb24ndCBoYW5kbGUgQ09OU1RfREVDTHMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IERvbid0IGNoZWNrIERFQ0xfSU5JVElBTCBvbiBhIENPTlNUX0RFQ0wuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG8gcHVsbCB0aGUgREVDTF9JTklUSUFMIG91dCBvZiBhCglDT05TVF9ERUNMIGZvciBhIHRlbXBsYXRlIHBhcm0uCgpNb24gRmViIDI2IDEyOjQ4OjE4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDb21wbGFpbiBhYm91dCBhcnJheSBvZiBpbmNvbXBsZXRlIHR5cGUKCWhlcmUuCgkoc3RhcnRfZGVjbF8xKTogTm90IGhlcmUuCgoJKiBwdC5jICh0c3Vic3QpOiBIYW5kbGUgcG9pbnRlci10by1mdW5jdGlvbiBkZWNsYXJhdG9ycy4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBJZiBwZWRhbnRpYywgZGlhZ25vc2UgbG9jYWwgY2xhc3MKCW1ldGhvZHMgdGhhdCByZXF1aXJlIGEgc3RhdGljIGNoYWluLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBObyBsb25nZXIgc3RhdGljLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgkqIHB0LmMgKHRzdWJzdCk6IENhbGwgaXQgZm9yIG9wZXJhdG9ycy4KCVVzZSB0c3Vic3RfY29weSBmb3IgVFJFRV9WRUNzLgoKCSogcGFyc2UueSAodGVtcGxhdGVfYXJnKTogVGhlIGV4cHIgaGFzIHByZWNlZGVuY2UgbGlrZSAnPicuCgpGcmkgRmViIDIzIDE0OjUxOjUyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IERvbid0IGNvZXJjZSBhbiBleHByZXNzaW9uIHVzaW5nCgl0ZW1wbGF0ZSBwYXJtcy4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogQWxzbyBjaGVjayBERUNMX0lOSVRJQUwgaW4gQ09OU1RfREVDTHMuCgkodHN1YnN0KTogRG9uJ3QgdXNlIGJ1aWxkX2luZGV4XzJfdHlwZSBpZiB0aGUgbWF4X3ZhbHVlIHVzZXMgdGVtcGxhdGUKCXBhcm1zLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50KTogRW1pdCBzb21ldGhpbmcgYXJiaXRyYXJ5IGZvciBhbgoJZXhwcmVzc2lvbiB1c2luZyB0ZW1wbGF0ZSBwYXJtcy4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2Nsb3NlX2JyYWNrZXQpOiBOZXcgbm9uLXRlcm1pbmFsIHRvIGNhdGNoIHVzZQoJb2YgJz4+JyBpbnN0ZWFkIG9mICc+ID4nIGluIHRlbXBsYXRlIGNsYXNzIG5hbWVzLgoJKHRlbXBsYXRlX3R5cGUpOiBVc2UgaXQuCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBDYXVzZXMgb25lIG1vcmUgci9yIGNvbmZsaWN0LgoKCSogdHJlZS5kZWY6IEFkZCBDQVNUX0VYUFIuCgkqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogVXNlIENBU1RfRVhQUiBpbnN0ZWFkIG9mCglDT05WRVJUX0VYUFIgZm9yIG1pbmltYWxfcGFyc2VfbW9kZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBMaWtld2lzZS4KCkZyaSBGZWIgMjMgMTA6MzY6NDYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKFNldFRlcm1pbmF0ZSwgU2V0VW5leHBlY3RlZCk6IFB1dCBiYWNrIGdsb2JhbCB2YXJzLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBQdXQgYmFjayBkZWNsL2luaXQgb2YKCXNldF91bmV4cGVjdGVkX2ZuZGVjbCBhbmQgc2V0X3Rlcm1pbmF0ZV9mbmRlY2wsIG5lZWRlZCB0byBnZXQgdGhlCglmbnMgZnJvbSBsaWJzdGRjKysuCgoJKiBkZWNsLmMgKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogRGVsZXRlIEFDQ0VQVF9BTlkgYml0ZmllbGQuCgkoZGVjbGFyZV91bmluc3RhbnRpYXRlZF90eXBlX2xldmVsLCB1bmluc3RhbnRpYXRlZF90eXBlX2xldmVsX3ApOgoJRGVsZXRlIHVudXNlZCBmbnMuCgkqIGNwLXRyZWUuaCAoZGVjbGFyZV91bmluc3RhbnRpYXRlZF90eXBlX2xldmVsLAoJdW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbF9wKTogRGVsZXRlIHByb3RvdHlwZXMuCgpUaHUgRmViIDIyIDE5OjM2OjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogQWRkIGRlZmF1bHQgcmV0dXJuLgoKVGh1IEZlYiAyMiAxNjo0NzoyNCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChmbmRlY2xfYXNfc3RyaW5nKTogRGVsZXRlIHVudXNlZCBhcmcgQ05BTUUuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IsCglidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwpOiBGaXggY2FsbHMuCgoJKiBjbGFzcy5jICh0aGVfbnVsbF92dGFibGVfZW50cnkpOiBEZWxldGUgdmFyIGRlZmluaXRpb24uCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogRGVsZXRlIHRyZWUgdGhlX251bGxfdnRhYmxlX2VudHJ5IGluaXQuCgkqIGRlY2wuYyAobm9fcHJpbnRfe2Z1bmN0aW9ucywgYnVpbHRpbnN9KTogRGVjbGFyZSBhcyBzdGF0aWMuCgkoX190cF9kZXNjX3R5cGVfbm9kZSk6ICNpZiAwIHZhciBkZWZpbml0aW9uLgoJKGluaXRfdHlwZV9kZXNjKTogI2lmIDAgaW5pdCBvZiBfX3RwX2Rlc2NfdHlwZV9ub2RlLgoJKHZiX29mZl9pZGVudGlmaWVyKTogTW92ZSB2YXIgZGVjbCBpbnRvIGluaXRfZGVjbF9wcm9jZXNzaW5nLgoJKGN1cnJlbnRfZnVuY3Rpb25fYXNzaWduc190aGlzKTogRGVjbGFyZSBhcyBzdGF0aWMuCgkoaW50X2Z0eXBlX3B0cl9wdHJfaW50LCB2b2lkX2Z0eXBlX3B0cl9pbnRfaW50KTogRGVsZXRlIHZhciBkZWNscy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlbGV0ZSBpbml0IG9mIHZvaWRfZnR5cGVfcHRyX3B0cl9pbnQuCglNb3ZlIGRlY2xzIG9mIHN0cmluZ19mdHlwZV9wdHJfcHRyIGFuZCBpbnRfZnR5cGVfc3RyaW5nX3N0cmluZyBoZXJlLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogRGVsZXRlIGRlZmluaXRpb24vbW9kIG9mIGxvY2FsIHZhciBFTFRfU0laRS4KCSogaW5pdC5jIChCSV9oZWFkZXJfdHlwZSwgQklfaGVhZGVyX3NpemUpOiBEZWNsYXJlIGFzIHN0YXRpYy4KCSogcHQuYyAodGVtcGxhdGVfY2xhc3Nlcyk6IERlbGV0ZSB1bnVzZWQgdmFyLgoJKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogRGVsZXRlIGRlY2wgZm9yIG5vbi1leGlzdGVudCBmbi4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEZWxldGUgdmFycyBDT0RFIGFuZCBUQUdfQ09ERS4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IERlbGV0ZSB1bnVzZWQgdmFyIFRBUkdTLgoJKiBjcC10cmVlLmggKHZiX29mZl9pZGVudGlmaWVyLCBjdXJyZW50X2Z1bmN0aW9uX2Fzc2lnbnNfdGhpcyk6CglEZWxldGUgZGVjbHMuCgkoX190cF9kZXNjX3R5cGVfbm9kZSk6ICNpZiAwIHZhciBkZWNsLgoJKGZuZGVjbF9hc19zdHJpbmcpOiBGaXggcHJvdG90eXBlLgoKVGh1IEZlYiAyMiAxNTo1NjoxOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmRlZjogQWRkIEdPVE9fU1RNVC4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBTdXBwb3J0IGdvdG8gYW5kIGxhYmVscy4KCSogZGVjbC5jIChkZWZpbmVfbGFiZWwpOiBTdXBwb3J0IG1pbmltYWwgcGFyc2luZy4KCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBMaWtld2lzZS4KClRodSBGZWIgMjIgMTU6MzA6MTIgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogeHJlZi5jIChHTlVfeHJlZl9tZW1iZXIpOiBPbmx5IGRlZmluZS9zZXQgdmFyIEkgaWYKCVhSRUZfU0hPUlRfTUVNQkVSX05BTUVTIGlzIGRlZmluZWQsIHRvIG1hdGNoIHdoZW4gaXQncyBhY3R1YWxseQoJdXNlZC4KCShHTlVfeHJlZl9lbmRfc2NvcGUpOiBEZWxldGUgdW51c2VkIGZpZnRoIGFyZyBUUk5TLgoJKEdOVV94cmVmX2VuZCk6IEZpeCBjYWxsLgoJKiBkZWNsLmMgKHBvcGxldmVsLCBwb3BsZXZlbF9jbGFzcywgZmluaXNoX21ldGhvZCk6IEZpeCBjYWxscy4KCSogY3AtdHJlZS5oIChHTlVfeHJlZl9lbmRfc2NvcGUpOiBGaXggcHJvdG90eXBlLgoKCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERlbGV0ZSB1bnVzZWQgdmFycyBJLCBBLCBULAoJVDIsIGFuZCBDTkFNRS4KCShsYXlvdXRfdmJhc2V0eXBlcyk6IERlbGV0ZSB1bnVzZWQgdmFyIE5PTlZJUlRVQUxfVkFSX1NJWkUuCgkobWFwY2FyKTogRGVsZXRlIHVudXNlZCB2YXIgQ09ERS4KCShidWlsZF9jcGx1c19uZXcpOiBEZWxldGUgdW51c2VkIGFyZyBXSVRIX0NMRUFOVVBfUC4KCShicmVha19vdXRfY2xlYW51cHMpOiBGaXggY2FsbC4KCShib3RfbWFuaXApOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlLCBjb252ZXJ0X3RvX3JlZmVyZW5jZSwgY3BfY29udmVydCk6CglMaWtld2lzZS4KCSogdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlLCBidWlsZF9tb2RpZnlfZXhwciwKCWNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoYnVpbGRfY3BsdXNfbmV3KTogRml4IHByb3RvdHlwZS4KCgkqIHJlcG8uYyAob3Blbl9yZXBvX2ZpbGUpOiBEZWxldGUgdW51c2VkIHZhciBRLgoJKHJlcG9fY29tcGlsZV9mbGFncywgcmVwb190ZW1wbGF0ZV9kZWNsYXJlZCwKCXJlcG9fdGVtcGxhdGVfZGVmaW5lZCwgcmVwb19jbGFzc19kZWZpbmVkLCByZXBvX2lubGluZV91c2VkLAoJcmVwb192dGFibGVfdXNlZCwgcmVwb190aW5mb191c2VkKTogI2lmIDAgdW51c2VkIGZucy4KCShyZXBvX2dldF9pZCwgcmVwb192dGFibGVfdXNlZCk6IERlY2xhcmUgYXMgc3RhdGljLiAKCSogY3AtdHJlZS5oIChtYXJrX3tkZWNsLGNsYXNzfV9pbnN0YW50aWF0ZWQsIGZpbmlzaF9yZXBvKTogQWRkCglwcm90b3R5cGVzLgoKVGh1IEZlYiAyMiAxNDo1MzozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwZW5kaW5nX2lubGluZXMpOiBBZGQgZnVuY3Rpb25fdHJ5X2Jsb2NrIGNhc2UuCgoJKiBwdC5jICh1bmlmeSk6IEZpeCBmb3IgdGVtcGxhdGUgY29uc3QgcGFybXMuCgpUaHUgRmViIDIyIDEzOjI0OjE1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChleHRyYWN0X2ludGVyZmFjZV9pbmZvKTogRGVsZXRlIGZvcndhcmQgZGVjbC4KCShkZWZhdWx0X2NvcHlfY29uc3RydWN0b3JfYm9keSwgZGVmYXVsdF9hc3NpZ25fcmVmX2JvZHkpOiBEZWxldGUKCWRlY2xzIGZvciBub24tZXhpc3RlbnQgZnVuY3Rpb25zLgoJKHN5bnRoX2ZpcnN0b2JqLCBpbmxpbmVfdGV4dF9maXJzdG9ianMpOiBEZWxldGUgdW51c2VkIHZhcnMuCgkoaW5pdF9sZXgpOiBEZWxldGUgc2V0dGluZyB0aGVtLgoJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IERlbGV0ZSB1bnVzZWQgdmFycyBGVU5DX0JVRiwKCUZVTkNfTEVOLCBhbmQgQ09NUExFWC4gIERlbGV0ZSBjb2RlIHNldHRpbmcgQ09NUExFWC4gIERlbGV0ZSBvbGQKCSNpZiAwJ2Qgc3ludGggY29kZS4KCSh0b3BsZXZlbCwgZXhwcmVzc2lvbl9vYnN0YWNrKTogRGVsZXRlIHVudXNlZCBleHRlcm4gZGVjbHMuCgkodHJlZV9ub2RlX2tpbmQpOiBEZWxldGUgdW51c2VkIGVudW0uCgkodHJlZV9ub2RlX2NvdW50cywgdHJlZV9ub2RlX3NpemVzKTogV3JhcCB3aXRoICNpZmRlZgoJR0FUSEVSX1NUQVRJU1RJQ1MuCgkodHJlZV9ub2RlX2tpbmRfbmFtZXMpOiBEZWxldGUgdW51c2VkIGV4dGVybiBkZWNsLgoJKHN5bnRoX29ic3RhY2spOiBEZWxldGUgdW51c2VkIHZhci4KCShpbml0X2xleCk6IERvbid0IHNldCBpdC4KCShpbml0X3BhcnNlKTogQWRkIGRlY2wgYmVmb3JlIHVzZS4KCShyZWR1Y2VfY291bnQpOiBPbmx5IGRlZmluZSAjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MgJiYgUkVEVUNFX0xFTkdUSC4KCShjdXJyZW50X3VuaXRfe25hbWUsIGxhbmd1YWdlfSk6IERlbGV0ZSB1bnVzZWQgdmFycy4gCgkoY2hlY2tfbmV3bGluZSk6IERvbid0IGJvdGhlciBzZXR0aW5nIHRoZW0sIGp1c3QgYWNjZXB0IHRoZSAjcHJhZ21hLgoJKiBjcC10cmVlLmggKGluaXRfcmVwbywgcGVla195eWxleCk6IEFkZCBwcm90b3R5cGVzLgoJKGN1cnJlbnRfdW5pdF97bmFtZSwgbGFuZ3VhZ2V9KTogRGVsZXRlIGRlY2xzLgoKCSogc2VhcmNoLmM6IFdyYXAgYWxsIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbnMsIG1hY3JvcywgYW5kCgl2YXJpYWJsZXMgaW5zaWRlICNpZmRlZiBHQVRIRVJfU1RBVElTVElDUy4KCShsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGluaXRfc2VhcmNoX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShyZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MpOiBXcmFwIHdob2xlIGZ1bmN0aW9uLgoJKiBsZXguYyAocmVpbml0X2xhbmdfc3BlY2lmaWMpOiBXcmFwIGNhbGwgdG8gcmVpbml0X3NlYXJjaF9zdGF0aXN0aWNzLgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBPbmx5IGNhbGwgcG9wX21lbW9pemVkX2NvbnRleHQgaWYKCUdBVEhFUl9TVEFUSVNUSUNTIGlzIGRlZmluZWQuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZSBmb3IgcHVzaF9tZW1vaXplZF9jb250ZXh0LgoJKiBjbGFzcy5jIChwdXNoY2xhc3MsIHBvcGNsYXNzKTogTGlrZXdpc2UuCgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9NVEFCTEVfRU5UUlkpOiBNb3ZlIGRlZmluaXRpb24gZnJvbSBoZXJlLi4uCgkqIHNlYXJjaC5jIChDTEFTU1RZUEVfTVRBQkxFX0VOVFJZKTogLi4uIHRvIGhlcmUuCgoJKiBjdnQuYyAoY3BfY29udmVydCk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFyIEZPUk0uCgkqIGNwLXRyZWUuaCAoY2FuX2NvbnZlcnQsIGNhbl9jb252ZXJ0X2FyZywgcmVhbF9sdmFsdWVfcCk6IEFkZAoJcHJvdG90eXBlcy4KClRodSBGZWIgMjIgMTM6MTk6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZG9fcG9wbGV2ZWwpOiBPb3BzOyByZWFsbHkgcmV0dXJuIHdoYXQgd2UgZ2V0IGZyb20KCXBvcGxldmVsIHRoaXMgdGltZS4KClRodSBGZWIgMjIgMTE6NDE6NDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChpc19hZ2dyX3R5cGUpOiBBZGQgcHJvdG90eXBlLgoKCSogY3AtdHJlZS5oICh7cHVzaCxwb3B9X2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBBZGQgZGVjbHMuCgkqIG1ldGhvZC5jICh7cHVzaCxwb3B9X2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBEZWxldGUgZGVjbHMuCgkqIGV4Y2VwdC5jIChzdGFydF9laF91bndpbmRlciwgZW5kX2VoX3Vud2luZGVyKTogRGVjbGFyZSBhcyB2b2lkLgoJKFNldFVuZXhwZWN0ZWQsIFNldFRlcm1pbmF0ZSk6IERlbGV0ZSB1bnVzZWQgdmFycy4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogRG9uJ3Qgc2V0IFNldFVuZXhwZWN0ZWQgb3IKCVNldFRlcm1pbmF0ZS4gIERvbid0IHNldCBTRVRfVU5FWFBFQ1RFRF9GTkRFQ0wgb3IgU0VUX1RFUk1JTkFURV9GTkRFQ0wuCgkob3V0cHV0X2V4Y2VwdGlvbl90YWJsZV9lbnRyeSk6IERlbGV0ZSB1bnVzZWQgYXJyYXkgTEFCRUwuCgkoZXhwYW5kX2ludGVybmFsX3Rocm93KTogRGVsZXRlIHVudXNlZCB2YXIgUEFSQU1TLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IERlbGV0ZSB1bnVzZWQgdmFyIENMRUFOVVAuCgkoZW1pdF9leGNlcHRpb25fdGFibGUpOiBEZWxldGUgdW51c2VkIHZhciBFSF9OT0RFX0RFQ0wuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBEZWxldGUgdW51c2VkIHZhcnMgVU5XSU5EX0FORF9USFJPVyBhbmQKCUdPVE9fVU5XSU5EX0FORF9USFJPVy4gIERvbid0IHNldCB0aGVtLgoJKGVuZF9laF91bndpbmRlcik6IEFkZCB0b3AgZGVjbC4KCShwb3BfcnRsX2Zyb21fcGVybSk6IERlbGV0ZSB1bnVzZWQgZGVjbCBvZiBQRVJNQU5FTlRfT0JTVEFDSy4KCShleGNlcHRpb25fc2VjdGlvbiwgcHVzaF9ydGxfcGVybSwgZG9fZnVuY3Rpb25fY2FsbCwKCWxhbmdfaW50ZXJpbV9laCwgcHVzaF9laF9jbGVhbnVwLCBlaF9vdXRlcl9jb250ZXh0LAoJZXhwYW5kX2VuZF9laF9zcGVjLCBlbmRfZWhfdW53aW5kZXIpOiBEZWNsYXJlIGFzIHN0YXRpYy4KCShzYXZlZF9wYywgc2F2ZWRfdGhyb3dfdHlwZSwgc2F2ZWRfdGhyb3dfdmFsdWUsIHNhdmVkX2NsZWFudXAsCgl0aHJvd191c2VkKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoZXhwYW5kX2VuZF9laF9zcGVjKTogRGVsZXRlIHByb3RvdHlwZS4KCgkqIHNlYXJjaC5jIChkZnNfbWFyaywgZGZzX21hcmtfdnRhYmxlX3BhdGgsCglkZnNfdW5tYXJrX3Z0YWJsZV9wYXRoLCBkZnNfbWFya19uZXdfdnRhYmxlLAoJZGZzX3VubWFya19uZXdfdnRhYmxlLCBkZnNfY2xlYXJfc2VhcmNoX3Nsb3QsCglkZnNfc2VhcmNoX3Nsb3Rfbm9uZW1wdHlfcCwgYmZzX21hcmtlZHAsIGJmc191bm1hcmtlZHAsCgliZnNfbWFya2VkX3Z0YWJsZV9wYXRocCwgYmZzX3VubWFya2VkX3Z0YWJsZV9wYXRocCwKCWJmc19tYXJrZWRfbmV3X3Z0YWJsZXAsIGJmc191bm1hcmtlZF9uZXdfdnRhYmxlcCk6ICNpZiAwIHVudXNlZAoJZnVuY3Rpb25zLgoJKG5fZmllbGRzX3NlYXJjaGVkLCBuX2NhbGxzX2xvb2t1cF9maWVsZCwgbl9jYWxsc19sb29rdXBfZmllbGRfMSwKCW5fY2FsbHNfbG9va3VwX2ZuZmllbGRzLCBuX2NhbGxzX2xvb2t1cF9mbmZpZWxkc18xLAoJbl9jYWxsc19nZXRfYmFzZV90eXBlLCBuX291dGVyX2ZpZWxkc19zZWFyY2hlZCwgbl9jb250ZXh0c19zYXZlZCk6CglPbmx5IGRlZmluZSAjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MuCgkocmVpbml0X3NlYXJjaF9zdGF0aXN0aWNzKTogT25seSBpbml0IHNvbWUgdmFycyBpZiBHQVRIRVJfU1RBVElTVElDUwoJaXMgZGVmaW5lZC4KCSh2YmFzZV9kZWNsKTogRGVsZXRlIHZhciBkZWZpbml0aW9uLgoJKGluaXRfc2VhcmNoKTogRGVsZXRlIG9sZCBkZWNsLgoJKGluaXRfdmJhc2VfcG9pbnRlcnMpOiBEZWxldGUgYnVpbGRpbmcgb2YgVkJBU0VfREVDTCwgc2luY2UgaXQncwoJbmV2ZXIgYWN0dWFsbHkgdXNlZC4KCShleHBhbmRfaW5kaXJlY3RfdnRibHNfaW5pdCk6IERlbGV0ZSBpbml0IG9mIFZCQVNFX0RFQ0wuCgkoZ2V0X2Jhc2VfZGlzdGFuY2VfcmVjdXJzaXZlKTogRGVsZXRlIHVudXNlZCBmb3VydGggYXJnCglCQVNFVFlQRV9QQVRILiAgRml4IGNhbGwgLgoJKGdldF9iYXNlX2Rpc3RhbmNlKTogRml4IGNhbGwuCgkocHVzaF9jbGFzc19kZWNscyk6IERlbGV0ZSB1bnVzZWQgdmFyIElELgoJKG1ha2VfbWVtb2l6ZWRfdGFibGVfZW50cnkpOiBEZWNsYXJlIGFzIHN0YXRpYy4KCShicmVhZHRoX2ZpcnN0X3NlYXJjaCk6IERlY2xhcmUgYXMgc3RhdGljLgoJKHRyZWVfaGFzX2FueV9kZXN0cnVjdG9yX3ApOiBEZWNsYXJlIGFzIHN0YXRpYy4KCShwb3BfY2xhc3NfZGVjbHMpOiBEZWxldGUgdW51c2VkIGFyZyBwb3BfY2xhc3NfZGVjbHMuCgkqIGNsYXNzLmMgKHBvcGNsYXNzKTogRml4IGNhbGwgdG8gcG9wX2NsYXNzX2RlY2xzLgoJKiBjcC10cmVlLmggKG1ha2VfbWVtb2l6ZWRfdGFibGVfZW50cnksIGJyZWFkdGhfZmlyc3Rfc2VhcmNoLAoJdHJlZV9oYXNfYW55X2Rlc3RydWN0b3JfcCk6IERlbGV0ZSBwcm90b3R5cGVzLgoKCSogcnR0aS5jIChidWlsZF9wdG1mX2Rlc2MpOiBEZWxldGUgdW51c2VkIGFyZyBUWVBFLgoJKGJ1aWxkX3RfZGVzYyk6IEZpeCBjYWxsLiAgRGVsZXRlIHVudXNlZCB2YXJzIEVMRU1TIGFuZCBUVC4KCShidWlsZF9keW5hbWljX2Nhc3QpOiBEZWxldGUgdW51c2VkIGxvY2FsIHZhcnMgVE1QMSBhbmQgUkVUVkFMLgoJKGJ1aWxkX3VzZXJfZGVzYyk6IERlbGV0ZSB1bnVzZWQgdmFyIFQuCgkoYnVpbGRfY2xhc3NfZGVzYyk6IERlbGV0ZSB1bnVzZWQgdmFycyBUIGFuZCBPRkYuCgkoYnVpbGRfdF9kZXNjKTogRGVsZXRlIHVudXNlZCB2YXIgTkFNRV9TVFJJTkcuCgkoYnVpbGRfaGVhZG9mKTogTWFrZSBzdGF0aWMuCgkoZ2V0X2JhZF9jYXN0X25vZGUpOiBMaWtld2lzZS4KCShnZXRfZGVmX3RvX2ZvbGxvdyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGluaXRfdHlwZV9kZXNjKTogQWRkIHByb3RvdHlwZS4KCShidWlsZF9oZWFkb2YpOiBSZW1vdmUgcHJvdG90eXBlLgoKVGh1IEZlYiAyMiAwMDo1NDoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBPbmx5IGxvb2sgZm9yIG1hdGNoaW5nIGRlY2xzIGF0IGZpbGUgc2NvcGUgZm9yCglub24tbWVtYmVyIGZ1bmN0aW9ucy4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogSGFuZGxlIHNjb3BlZCBkZXN0cnVjdG9yCgljYWxscyBpbiB0ZW1wbGF0ZXMuCgoJKiBkZWNsLmMgKCpfdG9wX2xldmVsKTogQWxzbyBzYXZlIHByZXZpb3VzX2NsYXNzX3ZhbHVlcy4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogU3VwcG9ydCBkbyB7fSB3aGlsZSBsb29wcy4KCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBMaWtld2lzZS4KCSogdHJlZS5kZWY6IExpa2V3aXNlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBGb3IgYSBjbGFzcyBuZXN0ZWQgaW4gYQoJdGVtcGxhdGUgY2xhc3MsIGRvbid0IG1hbmdsZSBpbiB0aGUgdGVtcGxhdGUgcGFybXMgZnJvbSBvdXIKCWNvbnRleHQuCgoJKiBsZXguYywgY3AtdHJlZS5oOiBSZW1vdmUgc3VwcG9ydCBmb3IgdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMgaW4KCXRoZSBwZW5kaW5nX2lubGluZXMgY29kZS4KCSogcHQuYzogUmVtb3ZlIGRlYWQgZnVuY3Rpb25zIGFuZCB1bnVzZWQgYXJndW1lbnRzLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBUWVBFTkFNRV9UWVBFcyBhbHdheXMgdXNlIHRlbXBsYXRlIHBhcm1zLgoJKiBwYXJzZS55OiBTdG9wIHBhc3NpbmcgYW55dGhpbmcgdG8gZW5kX3RlbXBsYXRlX2RlY2wuCgkqIHRyZWUuYyAocHJpbnRfbGFuZ19zdGF0aXN0aWNzKTogT25seSBwcmludCB0aW5zdCBpbmZvICNpZmRlZgoJR0FUSEVSX1NUQVRJU1RJQ1MuCgpXZWQgRmViIDIxIDE2OjU3OjMzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3JlY3Vyc2l2ZV9pbml0eyxfMX0pOiBEZWxldGUgZGVjbHMuIAoJKHNvcnRfbWVtYmVyX2luaXQpOiBEZWxldGUgdW51c2VkIHZhciBJTklULgoJKGVtaXRfYmFzZV9pbml0KTogRGVsZXRlIHVudXNlZCB2YXIgWC4KCShidWlsZF9vZmZzZXRfcmVmKTogRGVsZXRlIHVudXNlZCB2YXIgQ05BTUUuCgkoc29ydF9tZW1iZXJfaW5pdCk6IERlbGV0ZSB1bnVzZWQgdmFyIEZJRUxEU19UT19VTk1BUksuCgkoZW1pdF9iYXNlX2luaXQpOiBEZWxldGUgdW51c2VkIGxvY2FsIHZhciBCQVNFLiAgRGVsZXRlIGV4dGVybgoJZGVjbCBvZiBJTl9DSEFSR0VfSURFTlRJRklFUi4KCShidWlsZF9kZWxldGUpOiBEZWxldGUgdW51c2VkIGxvY2FsIHZhciBWSVJUVUFMX1NJWkUuCgoJKiBpbml0LmMgKGJ1aWxkX3ZlY19kZWxldGUpOiBEZWxldGUgdW51c2VkIHRoaXJkIGFyZyBFTFRfU0laRS4KCShidWlsZF9kZWxldGUpOiBGaXggY2FsbC4KCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGJ1aWxkX3ZlY19kZWxldGUpOiBVcGRhdGUgcHJvdG90eXBlLgoKCSogdHlwZWNrLmMgKGNvbW1vbl9iYXNlX3R5cGUpOiBEZWxldGUgdW51c2VkIHZhciBUTVAuCgkoYnVpbGRfYmluYXJ5X29wKTogRGVsZXRlIGxvY2FsIHZhciBBUkdTX1NBVkUuCgkoYnVpbGRfYXJyYXlfcmVmKTogRGVsZXRlIHVudXNlZCB2YXIgSVRZUEUuCgkoY19leHBhbmRfcmV0dXJuKTogRGVsZXRlIHVudXNlZCB2YXIgVVNFX1RFTVAuCgoJKiB0eXBlY2suYyAoY29tcGV4Y2VwdHR5cGVzKTogRGVsZXRlIHVudXNlZCBhcmcgU1RSSUNULgoJKGNvbXB0eXBlcyk6IEZpeCBjYWxscy4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChjb21wZXhjZXB0dHlwZXMpOiBEZWxldGUgZXh0cmEgYXJnLgoKCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IERlbGV0ZSB1bnVzZWQgc2Vjb25kIGFyZyBDTkFNRS4KCSogZGVjbC5jIChzdGFydF9kZWNsLCBncm9rZm5kZWNsKTogRml4IGNhbGxzLgoJKiBpbml0LmMgKGRvX2ZyaWVuZCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGNoZWNrX2NsYXNzZm4pOiBVcGRhdGUgcHJvdG90eXBlLgoKCSogY3AtdHJlZS5oIChzaWduYXR1cmVfZXJyb3IsIGltcG9ydF9leHBvcnRfdnRhYmxlLAoJYXBwZW5kX3NpZ25hdHVyZV9maWVsZHMsIGlkX2luX2N1cnJlbnRfY2xhc3MsIG1hcmtfdXNlZCwKCWNvcHlfYXNzaWdubWVudF9hcmdfcCk6IEFkZCBkZWNscy4KCSogZGVjbDIuYyAobWFya191c2VkKTogRGVsZXRlIGRlY2wuCgoJKiBjbGFzcy5jIChuXyopOiBXcmFwIHdpdGggI2lmZGVmIEdBVEhFUl9TVEFUSVNUSUNTLgoKCSogY2xhc3MuYyAoZ2V0X3Z0YWJsZV9lbnRyeSk6IERpYWJsZSB1bnVzZWQgZnVuY3Rpb24uCgkoZG9pbmdfaGFyZF92aXJ0dWFscyk6IERlbGV0ZSB1bnVzZWQgc3RhdGljIGdsb2JhbCB2YXIuCgkoZmluaXNoX3N0cnVjdF8xKTogRG9uJ3QgaW5pdCBET0lOR19IQVJEX1ZJUlRVQUxTLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogRGVsZXRlIHVudXNlZCB2YXJzIFBBVEggYW5kIFJFU1VMVC4KCShvdmVycmlkZXMpOiBEZWxldGUgdW51c2VkIHZhcnMgUkVUVFlQRSBhbmQgQkFTRV9SRVRUWVBFLgoJKG1vZGlmeV9vbmVfdnRhYmxlKTogRGVsZXRlIHVudXNlZCB2YXIgT0xEX1JUVEkuCgkoZmluaXNoX3N0cnVjdF9hbm9uKTogRGVsZXRlIHVudXNlZCB2YXJzIE9GRlNFVCBhbmQgWC4KCShmaW5pc2hfc3RydWN0X2JpdHMpOiBEZWxldGUgdW51c2VkIHZhciBNRVRIT0RfVkVDLgoJKGdldF9iYXNlZm5kZWNscyk6IERlbGV0ZSB1bnVzZWQgdmFyIFBVUlBPU0UuICBEZWxldGUgdW51c2VkCglmb3Itc2NvcGUgbG9jYWwgdmFyaWFibGUgTUVUSE9EUy4KCgkqIGNhbGwuYyAodXNlcl9oYXJzaG5lc3MpOiBEZWxldGUgdW51c2VkL3VubmVlZGVkIGFyZyBQQVJNLgoJKGlkZWFsX2NhbmRpZGF0ZSk6IERlbGV0ZSB1bnVzZWQgYXJncyBCQVNFVFlQRSBhbmQgUEFSTVMuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGUgdW51c2VkIGFyZ3MgcGFzc2VkIGludG8gaWRlYWxfY2FuZGlkYXRlLgoJKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IExpa2V3aXNlLiAgRGVsZXRlIHVudXNlZCB2YXIgT1ZFUkxPQURfTkFNRS4KCSogY3AtdHJlZS5oIChzeW50aGVzaXplX21ldGhvZCk6IEFkZCBkZWNsLgoKCSogZGVjbC5jIChub3RlX2xldmVsX2Zvcl9mb3IpOiBHaXZlIHZvaWQgcmV0dXJuIHR5cGUuCgkocHVzaGRlY2xfbm9uY2xhc3NfbGV2ZWwpOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBEZWxldGUgdW51c2VkIHZhcnMgVkZJRUxEUyBhbmQgQUxMT0NBVEVEX1RISVMuCgkocG9wbGV2ZWwpOiBEZWxldGUgdW51c2VkIHZhciBJTVBMSUNJVF9UUllfQkxPQ0suCgkoc3VzcGVuZF9iaW5kaW5nX2xldmVsKTogRGVsZXRlIHVudXNlZCB2YXIgTEVWRUwuCgkoZHVwbGljYXRlX2RlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgQ1RZUEUuCgkoZHVwbGljYXRlX2RlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgUFJFVklPVVNfQ19ERUNMLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVsZXRlIHVudXNlZCB2YXJzIEZMT0FUX0VORExJTksgYW5kCglQVFJfRU5ETElOSy4KCShncm9rZGVjbGFyYXRvcik6IERlbGV0ZSB1bnVzZWQgdmFyIEMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBEZWxldGUgdW51c2VkIHZhciBTSVpFX1ZBUklFUy4KCShncm9rcGFybXMpOiBEZWxldGUgdW51c2VkIHZhciBTQVdfVk9JRC4KCShzdGFydF9mdW5jdGlvbik6IERlbGV0ZSB1bnVzZWQgdmFyIE9MRERFQ0wuCgkoY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCk6IERlbGV0ZSB1bnVzZWQgdmFyCglSRU1PVkVfSU1QTElDSVRfSU1NRURJQVRFTFkuIAoKCSogY3AtdHJlZS5oIChwdXNoZGVjbF9ub25jbGFzc19sZXZlbCk6IEZpeCBwcm90b3R5cGUuCgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogVXBkYXRlIHRvIDEyIHNoaWZ0L3JlZHVjZS4KCldlZCBGZWIgMjEgMDA6MDY6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9taW4pOiBTZXQgVFJFRV9DT01QTEVYSVRZIHRvIGxpbmVuby4KCShidWlsZF9taW5fbnQpOiBMaWtld2lzZS4KCSogcHQuYyAoZG9fcHVzaGxldmVsKTogRW1pdCBsaW5lIG5vdGUuCgkoZG9fcG9wbGV2ZWwpOiBSZXR1cm4gd2hhdCB3ZSBnZXQgZnJvbSBwb3BsZXZlbC4KCSh0c3Vic3RfZXhwcik6IFNldCBsaW5lbm8gZnJvbSBUUkVFX0NPTVBMRVhJVFkgaW4gc3RtdCBub2Rlcy4KCSogcGFyc2UueTogVXNlIGRvX3B1c2hsZXZlbCBhbmQgZG9fcG9wbGV2ZWwuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBkb19wb3BsZXZlbC4KCQoJKiBjcC10cmVlLmg6IERlY2xhcmUgYXRfZW9mLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogUGFzcyBpdCB0byByZXN0X29mX2RlY2xfY29tcGlsYXRpb24uCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IFJlbmFtZWQgZnJvbSBpbXBvcnRfZXhwb3J0X2lubGluZS4KCShmaW5pc2hfZmlsZSk6IENhbGwgaXQgdG8gZG8gaW50ZXJmYWNlIGhhbmRsaW5nIGZvciBzdGF0aWNzLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IENhbGwgbWFya191c2VkIG9uIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCgl1c2VkIGhlcmUuCgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IGVtaXQgc3RhdGljcyB3ZSBjYW4ndCBnZW5lcmF0ZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IERvbid0IHNldCBpbnRlcmZhY2Ugb24gaW5zdGFudGlhdGlvbnMKCXdlIGNhbid0IGdlbmVyYXRlLgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgdGluc3RfbGV2ZWwpOiBDaGFuZ2UgJ2NsYXNzbmFtZScgdG8gJ2RlY2wnLgoJKiB0cmVlLmMgKHByaW50X2xhbmdfc3RhdGlzdGljcyk6IFByaW50IG1heCB0ZW1wbGF0ZSBkZXB0aC4KCSogcHQuYyAocHVzaF90aW5zdF9sZXZlbCk6IER1bXAgZW50aXJlIGluc3RhbnRpYXRpb24gY29udGV4dC4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBpdCBhbmQgcG9wX3RpbnN0X2xldmVsLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBMaWtld2lzZS4KCgkqIGNhbGwuYyBjbGFzcy5jIGNwLXRyZWUuaCBkZWNsLmMgZGVjbDIuYyBlcnJvci5jIGxleC5jIG1ldGhvZC5jCglwdC5jIHB0cmVlLmMgdHJlZS5kZWY6IFJlbW92ZSBhbGwgdHJhY2VzIG9mIFVOSU5TVEFOVElBVEVEX1BfVFlQRS4KClR1ZSBGZWIgMjAgMTg6MjE6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIGNsYXNzLmMgY3AtdHJlZS5oIGN2dC5jIGRlY2wuYyBkZWNsMi5jIGVycm9yLmMgZXhwci5jCglpbml0LmMgbGV4LmMgbWV0aG9kLmMgcGFyc2UueSBwdC5jIHJlcG8uYyBzZWFyY2guYyBzcGV3LmMgdHJlZS5jCgl0cmVlLmRlZiB0eXBlY2suYyB0eXBlY2syLmMgeHJlZi5jOiBNYXNzaXZlLCBzeXN0ZW1pYyBjaGFuZ2VzIGZvcgoJdGhlIG5ldyB0ZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbi4KClR1ZSBGZWIgMjAgMTc6MTQ6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoY2hlY2tfY3BfY2FzZV92YWx1ZSk6IFVzZSBTVFJJUF9UWVBFX05PUFMuCgpUaHUgRmViIDE1IDE4OjQ0OjQyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBEZWxheSBlbWl0dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yCglhIHR5cGVkZWYgdGhhdCBoYXMgYmVlbiBpbnN0YWxsZWQgYXMgdGhlIGNhbm9uaWNhbCB0eXBlZGVmLCBpZiB0aGUKCXR5cGUgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkLgoKVGh1IEZlYiAxNSAwOTozOTowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBTdGlsbCBjYWxsIHBvcF9uZXN0ZWRfY2xhc3MgZm9yIGFjY2VzcyBkZWNscy4KCldlZCBGZWIgMTQgMTc6MzA6MDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbGFiZWwpOiBDYWxsIGxhYmVsX3J0eC4KCgkqIGRlY2wuYyAobWFrZV9iaW5kaW5nX2xldmVsKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hsZXZlbCwgcHVzaGxldmVsX2NsYXNzKTogQ2FsbCBpdCBpbnN0ZWFkIG9mIGV4cGxpY2l0CglkdXBsaWNhdGUgY2FsbHMgdG8geG1hbGxvYy4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgdXNlbGVzcyBidWlsZF9wb2ludGVyX3R5cGUKCWNhbGwuCgoJKiBkZWNsLmMgKGZsb2F0X2Z0eXBlX2Zsb2F0LCBsZG91YmxlX2Z0eXBlX2xkb3VibGUpOiBBZGQgZGVmaW5pdGlvbnMuCgkoc2l6ZXRfZnR5cGVfc3RyaW5nKTogRGVsZXRlIHZhcmlhYmxlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIGJ1aWx0LWluIGZ1bmN0aW9ucyBmYWJzZiwgZmFic2wsCglzcXJ0Ziwgc3FydGwsIHNpbmYsIHNpbiwgc2lubCwgY29zZiwgY29zLCBjb3NsLiAgTmV3IGxvY2FsCgl2YXJpYWJsZSBzdHJsZW5fZnR5cGUsIHVzZWQgZm9yIHN0cmxlbi4KCldlZCBGZWIgMTQgMTY6MjE6MjUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX3RvX3RvcF9sZXZlbCk6IFN0YXJ0IGZyb20gY3VycmVudF9iaW5kaW5nX2xldmVsCglhZ2FpbiBmb3Igbm93OyB0aGUgc3RsIGhhY2tzIGRlcGVuZCBvbiBnKysgYmVpbmcgYnJva2VuIGluIHRoaXMKCXdheSwgYW5kIGl0J2xsIGJlIGZpeGVkIGluIHRoZSB0ZW1wbGF0ZSByZXdyaXRlLgoKCSogdHJlZS5kZWY6IEFkZCBVU0lOR19ERUNMLgoJKiBkZWNsMi5jIChkb19jbGFzc191c2luZ19kZWNsKTogSW1wbGVtZW50LgoJKGdyb2tmaWVsZCk6IFBhc3MgYWNjZXNzIGRlY2xzIG9mZiB0byBkb19jbGFzc191c2luZ19kZWNsIGluc3RlYWQgb2YKCWdyb2tkZWNsYXJhdG9yLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgVVNJTkdfREVDTHMuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgY29kZSBmb3IgaGFuZGxpbmcgYWNjZXNzIGRlY2xzLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBZGp1c3QgYWNjb3JkaW5nbHksIHRyZWF0IHVzaW5nLWRlY2xzCglhcyBhY2Nlc3MgZGVjbHMgZm9yIG5vdy4KCShmaW5pc2hfc3RydWN0KTogRG9uJ3QgY2hlY2sgVVNJTkdfREVDTHMgZm9yIG90aGVyIHVzZXMgb2YgdGhlIG5hbWUuCgoJKiBzZWFyY2guYyAoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBVc2UgY3BfZXJyb3JfYXQuCgpXZWQgRmViIDE0IDEwOjM2OjU4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBEZWZhdWx0IENPTVBfVFlQRV9BVFRSSUJVVEVTIHRvIDEsIHRvCgltYXRjaCBjLXR5cGVjay5jLgoJKHNlbGZfcHJvbW90aW5nX2FyZ3NfcCk6IE1vdmUgdGhlIGNoZWNrIHRoYXQgVFlQRSBpcyBub24tbmlsCgliZWZvcmUgdHJ5aW5nIHRvIGxvb2sgYXQgaXRzIG1haW4gdmFyaWFudC4KCSh1bnNpZ25lZF90eXBlLCBzaWduZWRfdHlwZSk6IEFkZCBjaGVja2luZyBvZiBESS9TSS9ISS9RSSBub2Rlcy4KCgkqIGNwLXRyZWUuaCAoREVDTF9XQUlUSU5HX0ZSSUVORFMsIFNFVF9ERUNMX1dBSVRJTkdfRlJJRU5EUyk6CglEZWxldGUgbWFjcm9zLgoJKiBpbml0LmMgKHhyZWZfZnJpZW5kLCBlbWJyYWNlX3dhaXRpbmdfZnJpZW5kcyk6IERlbGV0ZSBmdW5jdGlvbnMuCgkoZG9fZnJpZW5kKTogRGVsZXRlIGNhbGwgdG8geHJlZl9mcmllbmQuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERlbGV0ZSBjYWxsIHRvIGVtYnJhY2Vfd2FpdGluZ19mcmllbmRzLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfc2VxdWVuY2UpOiAjaWYgMCB1bnVzZWQgZnVuY3Rpb24uCgoJKiBjcC10cmVlLmggKERFQ0xfSU5fTUVNT1JZX1ApOiBOZXcgbWFjcm8gdy8gdGhlIGNoZWNrIHRoYXQgdXNlZCB0bwoJYmUgaW4gZGVjbF9pbl9tZW1vcnlfcC4KCShkZWNsX2luX21lbW9yeV9wKTogRGVsZXRlIGRlY2wuCgkqIGV4cHIuYyAoZGVjbF9pbl9tZW1vcnlfcCk6IERlbGV0ZSBmbi4KCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBVc2UgREVDTF9JTl9NRU1PUllfUC4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBVc2UgREVDTF9JTl9NRU1PUllfUC4KClR1ZSBGZWIgMTMgMTI6NTE6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ2hlY2sgZm9yIGEgcHVyZS1zcGVjaWZpZXIgb24gYQoJbm9uLXZpcnR1YWwgZnVuY3Rpb24gaGVyZS4KCgkqIGRlY2wyLmMgKGdyb2tfZnVuY3Rpb25faW5pdCk6IERvbid0IGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0aW9uCglpcyB2aXJ0dWFsIGhlcmUuCgkoZ3Jva2ZpZWxkKTogRG9uJ3QgY2FsbCBjaGVja19mb3Jfb3ZlcnJpZGUgaGVyZS4KCgkqIGRlY2wuYyAocHVzaF90b190b3BfbGV2ZWwpOiBTdGFydCBmcm9tIGlubmVyX2JpbmRpbmdfbGV2ZWwsCgljaGVjayBjbGFzc19zaGFkb3dlZCBpbiBjbGFzcyBsZXZlbHMuCgpNb24gRmViIDEyIDE3OjQ2OjU5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocmVzdW1lX2xldmVsKTogSWdub3JlIHRoaW5ncyB0aGF0IGRvbid0IGhhdmUgbmFtZXMsIGluc3RlYWQKCW9mIGNvcmUgZHVtcGluZy4KCk1vbiBGZWIgMTIgMTU6NDc6NDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogU2V0IERFQ0xfVklOREVYIHByb3Blcmx5IGZvciBGVU5DVElPTl9ERUNMcy4KClNhdCBGZWIgMTAgMTc6NTk6NDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2V0IERFQ0xfVklOREVYIHByb3Blcmx5IG9uIGEKCXN5bnRoZXNpemVkIGR0b3IuCgoJKiBwYXJzZS55IChjb21wbGV0ZV90eXBlX25hbWUpOiBCaW5kIGdsb2JhbF9zY29wZSBlYXJsaWVyLgoJKGNvbXBsZXhfdHlwZV9uYW1lKTogTGlrZXdpc2UuCgkocXVhbGlmaWVkX3R5cGVfbmFtZSk6IFJlbW92ZS4KClRodSBGZWIgIDggMTU6MTU6MTQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogTW92ZSBjb2RlIHRoYXQgbG9va3MgZm9yIHZpcnR1YWxzIGluIGJhc2UKCWNsYXNzZXMuLi4KCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlKTogLi4uIHRvIGEgbmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgaXQuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgd2Fybl9zaWduX2NvbXBhcmUuCgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENoZWNrIHdhcm5fc2lnbl9jb21wYXJlCglyYXRoZXIgdGhhbiBleHRyYV93YXJuaW5ncyB0byBkZWNpZGUgd2hldGhlciB0byB3YXJuIGFib3V0Cgljb21wYXJpc29uIG9mIHNpZ25lZCBhbmQgdW5zaWduZWQuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgd2Fybl9zaWduX2NvbXBhcmUuICAtV2FsbAoJaW1wbGllcyAtV3NpZ24tY29tcGFyZS4gIC1XYWxsIGRvZXNuJ3QgaW1wbHkgLVcuCgpXZWQgRmViICA3IDE1OjI3OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRml4IHRvIGhhbmRsZSBhbm9uIHVuaW9ucyBpbiBiYXNlCgljbGFzc2VzIGFzIHdlbGwuCgpXZWQgRmViICA3IDE0OjI5OjEyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IERlbGV0ZSBjb2RlIGRlYWxpbmcgd2l0aAoJYSBXSVRIX0NMRUFOVVBfRVhQUiwgc2luY2Ugd2UgZG9uJ3QgZ2VuZXJhdGUgdGhlbSBhbnkgbW9yZS4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBMaWtld2lzZS4KCShjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBMaWtld2lzZS4KCSogdHJlZS5jIChyZWFsX2x2YWx1ZV9wKTogTGlrZXdpc2UuCgkobHZhbHVlX3ApOiBMaWtld2lzZS4KCShidWlsZF9jcGx1c19uZXcpOiBMaWtld2lzZS4KCSh1bnNhdmVfZXhwcl9ub3cpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlLCBidWlsZF9tb2RpZnlfZXhwciwKCWNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgoKVHVlIEZlYiAgNiAxMzozOToyMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJTWFrZSB0aGUgQysrIGZyb250LWVuZCBwYXkgYXR0ZW50aW9uIHRvIGF0dHJpYnV0ZXMgZm9yIHN0cnVjdHVyZXMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBOZXcgYXJndW1lbnQgQVRUUklCVVRFUywgcGFzc2VkIGRvd24gaW50bwoJZmluaXNoX3N0cnVjdF8xLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IE5ldyBhcmd1bWVudCBBVFRSSUJVVEVTOyBjYWxsIGNwbHVzX2RlY2xfYXR0cmlidXRlcy4KCVRha2Ugb3V0IG9sZCByb3VuZF91cF9zaXplIHVzZSBhbmQgc2V0dGluZyB0aGUgREVDTF9BTElHTiBwb3NzaWJseQoJdXNpbmcgaXQuICBUYWtlIG91dCBzZXR0aW5nIG9mIFRZUEVfQUxJR04gdG8gcm91bmRfdXBfc2l6ZSwgd2hpY2gKCWNhbiBvdmVycmlkZSB3aGF0IHRoZSBhdHRyaWJ1dGUgc2V0LgoJKiBjcC10cmVlLmggKGZpbmlzaF9zdHJ1Y3QpOiBVcGRhdGUgcHJvdG90eXBlLgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9pbnN0YW50aWF0ZV9vbmNlKTogUGFzcyBhIE5VTExfVFJFRSBmb3IgdGhlCglhdHRyaWJ1dGVzIHRvIGZpbmlzaF9zdHJ1Y3QuCgkoc3RydWN0c3ApOiBGb3IgYSBDTEFTUyBkZWNsLCBhZGQgbWF5YmVfYXR0cmlidXRlIHRvIHJ1bGUgYW5kIHBhc3MgdGhhdAoJdmFsdWUgZG93biBpbnRvIGZpbmlzaF9zdHJ1Y3QuCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBTd2l0Y2ggdG8gNyBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLgoKVHVlIEZlYiAgNiAxMzoxMjoxNSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiAgUmUtd29yZCBkZWFkIGZvciBsb2NhbCBoYW5kbGluZy4KCShwdXNoZGVjbCk6ICBSZW1vdmUgdXNlbGVzcyBERUNMX0RFQURfRk9SX0xPQ0FMIHRlc3QuCgkoY3BfZmluaXNoX2RlY2wpOiAgSWYgaXNfZm9yX3Njb3BlLCBjaGVjayBmb3IgZHVwbGljYXRlcyBzbwoJd2UgY2FuIGRpc2FibGUgaXNfZm9yX3Njb3BlLiAgT3RoZXJ3aXNlLCBwcmVzZXJ2ZV90ZW1wX3Nsb3RzLgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiAgVXNlIGdsb2JhbCBiaW5kaW5nIGluIHByZWZlcmVuY2Ugb2YKCWRlYWQgZm9yIGxvY2FsIHZhcmlhYmxlLgoKTW9uIEZlYiAgNSAxNzo0Njo0NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGluaXRpYWxpemluZ19jb250ZXh0KTogSGFuZGxlIGFub24gdW5pb24gY2hhbmdlcywgdGhlCgljb250ZXh0IHdoZXJlIGZpZWxkcyBvZiBhbm9uIHVuaW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgbm93IGhhcyB0byBiZQoJZm91bmQgYnkgd2Fsa2luZyB1cCB0aGUgVFlQRV9DT05URVhUIGNoYWluLgoKRnJpIEZlYiAgMiAxNDo1NDowNCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6ICNpZmRlZiBvdXQgY29kZSB0byBzZXQgREVDTF9DT01NT04KCWlmIEFTTV9PVVRQVVR7LF9BTElHTkVEfV9CU1MgaXMgZGVmaW5lZC4KCShvYnNjdXJlX2NvbXBsZXhfaW5pdCk6IElmIGJzcyBpcyBzdXBwb3J0ZWQsIGFsd2F5cyBzZXQKCURFQ0xfSU5JVElBTCB0byBlcnJvcl9tYXJrX25vZGUuCgpUaHUgRmViICAxIDE2OjE5OjU2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaXNfZnJpZW5kKTogTWFrZSBzdXJlIHRoZXJlJ3MgYSBjb250ZXh0IGJlZm9yZSB3ZSBzZWUgaWYKCWl0J3MgYW4gYWdnciB0eXBlLgoKVGh1IEZlYiAgMSAxNTo0NDo1MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGlzX2ZyaWVuZCk6IENsYXNzZXMgYXJlIG5vdCBmcmllbmRseSB3aXRoIG5lc3RlZCBjbGFzc2VzLgoKVGh1IEZlYiAgMSAxNToyNzozNyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogUGFzcyBsYXN0IGNoYXJhY3RlciByZWFkIHRvIEhBTkRMRV9QUkFHTUEsCglhbmQgcmVjb3JkIGl0cyByZXN1bHQuCgpUaHUgRmViICAxIDA5OjI3OjAxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IFN3aXRjaCBhcm91bmQgY29kZSB0byBub3QgbW92ZSBhbm9uCgl1bmlvbiBlbGVtZW50cyBhcm91bmQsIG5vciBtZXNzIHVwIHRoZWlyIGNvbnRleHRzLCBub3Igb2Zmc2V0cywKCWluc3RlYWQgd2Ugbm93IGJ1aWxkIHVwIHRoZSByaWdodCBudW1iZXIgb2YgQ09NUE9ORU5UX1JFRnMgZm9yIGFsbAoJdGhlIGFub24gdW5pb25zIHRoYXQgbWF5IGJlIHByZXNlbnQgYXQgYnVpbGRfY29tcG9uZW50X3JlZiB0aW1lLgoJKiB0eXBlY2suYyAobG9va3VwX2Fub25fZmllbGQpOiBOZXcgcm91dGluZSB0byBoYW5kbGUgZmllbGQgbG9va3VwCglvbiBmaWVsZHMgd2l0aG91dCBuYW1lcy4gIFdlIGZpbmQgdGhlbSwgYmFzZWQgdXBvbiB0aGVpciB1bmlxdWUgdHlwZQoJaW5zdGVhZC4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBBbGxvdyBGSUVMRF9ERUNMIGNvbXBvbmVudHMuCglIYW5kbGUgZmluZGluZyBjb21wb25lbnRzIGluIGFub255bW91cyB1bmlvbnMsIGFuZCBlbnN1cmUgdGhhdCBhCglDT01QT05FTlRfUkVGIGlzIGJ1aWx0IGZvciBlYWNoIGxldmVsIGFzIG5lY2Vzc2FyeS4KClR1ZSBKYW4gMzAgMTg6MTg6MjMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IE1ha2UgdGhlIElORElSRUNUX0JJTkQgY2FzZSBjb21lIGFmdGVyCgljb2RlIHRoYXQgZW5zdXJlcyB0aGF0IGNvcHkgY3RvcnMgYXJlIHVzZWQgaWYgYXBwcm9wcmlhdGUuCgpUdWUgSmFuIDMwIDE3OjM1OjE0IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IE9ubHkgZ2l2ZSBhbiBlcnJvciBpZiBiYXNlIGlzbid0IGFuCgllcnJvcl9tYXJrX25vZGUuCgpNb24gSmFuIDI5IDE3OjA5OjA2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHNwZXcuYyAoZG9fYWdncik6IGBuZXcgc3RydWN0IFM7JyBpc24ndCBhIGZvcndhcmQgZGVjbGFyYXRpb24uCgkoeXlsZXgpOiBJZiB3ZSBzZWUgYG5ldycsIGtlZXAgc2x1cnBpbmcuCgpUaHUgSmFuIDI1IDE4OjMxOjM2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IE1vdmUgY29kZSBmb3IgaGFuZGxpbmcgYW5vbiB1bmlvbnMuLi4KCShmaW5pc2hfc3RydWN0X2Fub24pOiB0byBoZXJlLiAgRml4dXAgc28gdGhhdCB3ZSBkbyB0aGUgb2Zmc2V0CgljYWxjdWxhdGlvbnMgcmlnaHQsIGFuZCBzbyB0aGF0IHRoZSBmaWVsZHMgYXJlIHBoeXNpY2FsbHkgbW92ZWQgdG8KCXRoZSBjb250YWluZXJzJ3MgY2hhaW4uCgpUaHUgSmFuIDI1IDE4OjI3OjM3IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBdm9pZCB0cnlpbmcgdG8gZ2V0IGFuIG9wZXJhbmQgb2ZmIGFuCglpZGVudGlmaWVyIG5vZGUuCgpXZWQgSmFuIDI0IDExOjI1OjMwIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChwb2ludGVyX2ludF9zdW0pOiBVc2UgVFlQRV9QUkVDSVNJT04gKHNpemV0eXBlKSBub3QKCVBPSU5URVJfU0laRSB0byBhZ3JlZSB3aXRoIGV4cHIuYy4KClRodSBKYW4gMjUgMTM6MDE6MjMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IERvbid0IHJlcG9ydCBhbWJpZ3VpdGllcyBpZiBwcm90ZWN0IGlzIDAsCglpbnN0ZWFkIHJldHVybiBOVUxMX1RSRUUuCgpXZWQgSmFuIDI0IDEzOjAxOjI2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgd2Fybl9oaWRkZW4gaWYgd2Ugd2FudCB3YXJuaW5ncwoJYWJvdXQgb3ZlcmxvYWRlZCB2aXJ0dWFsIGZ1bmN0aW9ucy4KCSh3YXJuX2hpZGRlbik6IE5ldyByb3V0aW5lIHRvIHdhcm4gb2YgdmlydHVhbCBmdW5jdGlvbnMgdGhhdCBhcmUKCWhpZGRlbiBieSBvdGhlciB2aXJ0dWFsIGZ1bmN0aW9ucywgdGhhdCBhcmUgbm90IG92ZXJyaWRkZW4uCgkoZ2V0X2Jhc2VmbmRlY2xzKTogTmV3IHJvdXRpbmUsIHVzZWQgYnkgd2Fybl9oaWRkZW4uCgkobWFya19vdmVycmlkZXJzKTogTmV3IHJvdXRpbmUsIHVzZWQgYnkgd2Fybl9oaWRkZW4uCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IFJlbW92ZSBvbGQgd2FybmluZyB0aGF0IGp1c3QKCWlzbid0IHZlcnkgdXNlZnVsLgoKVHVlIEphbiAyMyAxMjoyNjoxMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG91dHB1dF9idWlsdGluX3RkZXNjX2VudHJpZXMpOiAjaWYgMCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCgkqIHR5cGVjay5jIChudWxsX3B0cl9jc3RfcCk6IERlbGV0ZSB1bnVzZWQgZm4uCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9tYXliZSk6IERlbGV0ZSB1bnVzZWQgZm4uCgoJKiBleHByLmMgKGV4dHJhY3RfaW5pdCk6ICNpZiAwIHRoZSBjb2RlIGFmdGVyIHVuY29uZGl0aW9uYWwgcmV0dXJuIDAKCWZvciBub3cuCgoJRGVsZXRlIG9sZCBjYWRpbGxhYyBjb2RlLgoJKiBlZHNlbC5jOiBSZW1vdmUgZmlsZS4KCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IFRha2UgZWRzZWwuYyBvZmYgdGhlIGxpc3QuCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IERlbGV0ZSBlZHNlbC5vLgoJKGVkc2VsLm8pOiBEZWxldGUgcnVsZS4KCSogY3AtdHJlZS5oIChmbGFnX2NhZGlsbGFjKTogRGVsZXRlIHZhciBkZWNsLgoJKiBsYW5nLW9wdGlvbnMuaDogRGVsZXRlICItZmNhZGlsbGFjIiBhbmQgIi1mbm8tY2FkaWxsYWMiLgoJKiBkZWNsMi5jIChmbGFnX2NhZGlsbGFjKTogRGVsZXRlIHZhciBkZWZpbml0aW9uLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IERlbGV0ZSBoYW5kbGluZyBvZiAtZmNhZGlsbGFjIGFuZCAtZm5vLWNhZGlsbGFjLgoJKGdyb2tmaWVsZCk6IERlbGV0ZSBjb2RlIGRlcGVuZGluZyBvbiBmbGFnX2NhZGlsbGFjLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKHB1c2hjbGFzcyk6IExpa2V3aXNlLgoJKHBvcGNsYXNzKTogTGlrZXdpc2UuCgkocHVzaF9sYW5nX2NvbnRleHQpOiBMaWtld2lzZS4KCShwb3BfbGFuZ19jb250ZXh0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShzdGFydF9kZWNsKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCSh4cmVmX3RhZyk6IExpa2V3aXNlLgoJKGZpbmlzaF9lbnVtKTogTGlrZXdpc2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfc3RtdCk6IExpa2V3aXNlLgoJKiBsZXguYyAobGFuZ19pbml0KTogTGlrZXdpc2UuCgkoY2hlY2tfbmV3bGluZSk6IExpa2V3aXNlLgoKCSogbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IERlbGV0ZSBzeW50aGVzaXplZCBtZXRob2Qga2x1ZGdlLgoKCURlbGV0ZSBkZWZ1bmN0LCBhbmNpZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbi4KCSogcnR0aS5jOiBOZXcgZmlsZSB3aXRoIHRoZSBSVFRJIHN0dWZmIGZyb20gZ2MuYy4KCSogZ2MuYzogUmVtb3ZlZCBmaWxlIChtb3ZlZCB0aGUgcmVtYWluaW5nIHN0dWZmIGludG8gcnR0aS5jKS4KCSogTWFrZWZpbGUuaW4gKENYWF9PQkpTKTogUmVwbGFjZSBnYy5vIHdpdGggcnR0aS5vLgoJKHJ0dGkubyk6IE5ldyBydWxlLCByZXBsYWNpbmcgZ2Muby4KCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IFJlcGxhY2UgZ2MuYyB3aXRoIHJ0dGkuYy4KCSogY3AtdHJlZS5oOiBEZWxldGUgZ2MtcmVsYXRlZCBmbiBkZWNscy4KCShERUNMX0dDX09GRlNFVCk6IERlbGV0ZSBtYWNyby4KCShmbGFnX2djKTogRGVsZXRlIGV4dGVybiBkZWNsLgoJKiBkZWNsLmMgKGN1cnJlbnRfZnVuY3Rpb25fb2JzdGFja19pbmRleCk6IERlbGV0ZSB2YXIgZGVjbC4KCShjdXJyZW50X2Z1bmN0aW9uX29ic3RhY2tfdXNhZ2UpOiBEZWxldGUgdmFyIGRlY2wuCgkoc3RhcnRfZnVuY3Rpb24pOiBEZWxldGUgY2xlYXJpbmcgb2YgY3VycmVudF9mdW5jdGlvbl9vYnN0YWNrX2luZGV4CglhbmQgY3VycmVudF9mdW5jdGlvbl9vYnN0YWNrX3VzYWdlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVsZXRlIGNvZGUgcmVseWluZyBvbiAtZmdjLgoJRGVsZXRlIGNhbGwgdG8gaW5pdF9nY19wcm9jZXNzaW5nLgoJKGNwX2ZpbmlzaF9kZWNsKTogRGVsZXRlIGNhbGxzIHRvIGJ1aWxkX3N0YXRpY19nY19lbnRyeSBhbmQKCXR5cGVfbmVlZHNfZ2NfZW50cnkuICBEZWxldGUgZ2MgY29kZSBzZXR0aW5nIERFQ0xfR0NfT0ZGU0VULgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBEZWxldGUgLWZnYyBjYWxscyB0byBjcF9leHBhbmRfZGVjbF9jbGVhbnVwCglhbmQgdG8gZXhwYW5kX2V4cHIgb2YgYSBfX2djX21haW4gY2FsbC4KCShtYXliZV9nY19jbGVhbnVwKTogRGVsZXRlIHZhciBkZWNsLgoJKGZpbmlzaF9mdW5jdGlvbik6IERlbGV0ZSBjYWxsIHRvIGV4cGFuZF9nY19wcm9sb2d1ZV9hbmRfZXBpbG9ndWUuCgkqIGRlY2wyLmMgKGZsYWdfZ2MpOiBEZWxldGUgdmFyIGRlY2wuCgkobGFuZ19mX29wdGlvbnMpOiBEZWxldGUgb2ZmZXJpbmcgb2YgLWZnYy4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBEZWxldGUgLWZnYyBhbmQgLWZuby1nYyBoYW5kbGluZy4KCShnZXRfdGVtcF9yZWd2YXIpOiBEZWxldGUgZ2MgY29kZS4KCSogaW5pdC5jIChidWlsZF9uZXcpOiBEZWxldGUgZ2MgY29kZS4KCSogbGV4LmMgKGluaXRfbGV4KTogRGVsZXRlIGNoZWNraW5nIG9mIGZsYWdfZ2MuCgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBEZWxldGUgZ2MgY29kZS4KCShidWlsZF9jb21wb25lbnRfYWRkcik6IERlbGV0ZSAtZmdjIHdhcm5pbmcuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBEZWxldGUgZ2MgY29kZS4KCgkqIGRlY2wyLmMgKGJ1aWxkX3B1c2hfc2NvcGUpOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAoYnVpbGRfcHVzaF9zY29wZSk6IERlbGV0ZSBkZWNsLgoKCSogc2VhcmNoLmMgKGNsZWFyX3NlYXJjaF9zbG90cyk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChjbGVhcl9zZWFyY2hfc2xvdHMpOiBEZWxldGUgZGVjbC4KCgkqIHNlYXJjaC5jICh0cmVlX25lZWRzX2NvbnN0cnVjdG9yX3ApOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAodHJlZV9uZWVkc19jb25zdHJ1Y3Rvcl9wKTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGlkX2NtcCk6IERlbGV0ZSBmbi4KCgkqIHRyZWUuYyAoc2V0X2ZuYWRkcl9mcm9tX3Z0YWJsZV9lbnRyeSk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChzZXRfZm5hZGRyX2Zyb21fdnRhYmxlX2VudHJ5KTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGRlY2xfdmFsdWVfbWVtYmVyKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGRlY2xfdmFsdWVfbWVtYmVyKTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGxpc3RfaGFzaF9sb29rdXBfb3JfY29ucyk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChsaXN0X2hhc2hfbG9va3VwX29yX2NvbnMpOiBEZWxldGUgZGVjbC4KCgkqIG1ldGhvZC5jIChjcGx1c19leGNlcHRpb25fbmFtZSk6IERlbGV0ZSBmbi4KCShFWENFUFRJT05fTkFNRV97UFJFRklYLCBMRU5HVEh9KTogRGVsZXRlIG1hY3Jvcy4KCgkqIHNwZXcuYyAoc2hpZnRfdG9rZW5zKTogRGVsZXRlIGZuLgoKTW9uIEphbiAyMiAxNzo0OTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFBhc3MgMSB0byBuZWVkc19wb3AgaW4gY2FsbHMKCXRvIGNwX2ZpbmlzaF9kZWNsLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCk1vbiBKYW4gMjIgMTc6MzQ6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9jcGx1c19zdGF0aWNmbl90eXBlKTogRGVsZXRlIGZ1bmN0aW9uIGRlZmluaXRpb247CgluZXZlciB1c2VkLgoJKiBjcC10cmVlLmggKGJ1aWxkX2NwbHVzX3N0YXRpY2ZuX3R5cGUpOiBEZWxldGUgZGVjbC4KCgkqIHRyZWUuYyAodmlydHVhbF9tZW1iZXIpOiBEZWxldGUgZnVuY3Rpb24gZGVmaW5pdGlvbjsgbmV2ZXIgdXNlZC4KCSogY3AtdHJlZS5oICh2aXJ0dWFsX21lbWJlcik6IERlbGV0ZSBkZWNsLgoKRnJpIEphbiAxOSAxODowMzoxNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEhhbmRsZSBnZXR0aW5nIHZiYXNlIHBvaW50ZXJzCglvdXQgb2YgY29tcGxleCBtdWx0aXBsZSBpbmhlcml0YW5jZSBiZXR0ZXIuCgpGcmkgSmFuIDE5IDE2OjI3OjQwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9vYmplY3RfcmVmKTogTWFrZSBzdXJlIHdlIHVzZSB0aGUgcmVhbCB0eXBlLCBub3QKCWFueSByZWZlcmVuY2UgdHlwZS4KCkZyaSBKYW4gMTkgMTY6MDE6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERvbid0IGNyZWF0ZSBuZXcgdHlwZXMgaWYgd2UKCWRvbid0IGhhdmUgdG8sIGFsc28gYnVpbGQgbmV3IHR5cGVzIG9uIHRoZSByaWdodCBvYnN0YWNrLgoKRnJpIEphbiAxOSAxNDowOTo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX2JpbmRpbmdzKTogU3BsaXQgb3V0IGZyb20gcHVzaF90b190b3BfbGV2ZWwuCgkocHVzaF90b190b3BfbGV2ZWwpOiBDYWxsIGl0IGZvciBiLT50eXBlX3NoYWRvd2VkIG9uIGNsYXNzIGJpbmRpbmcKCWxldmVscy4KCkZyaSBKYW4gMTkgMTM6NTM6MTQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogRml4IHNvIHRoYXQgb2Zmc2V0cyBzdG9yZWQgaW4KCXZiYXNlX29mZnNldHMgYXJlIGFsd2F5cyByaWdodC4gIEZpeGVzIGEgcHJvYmxlbSB3aGVyZSB2aXJ0dWFsIGJhc2UKCXVwY2FzdGluZyBhbmQgZG93bmNhc3RpbmcgY291bGQgYmUgd3JvbmcgZHVyaW5nIGNvbnZlcnNpb25zIG9uIHRoaXMKCWR1cmluZyB2aXJ0dWFsIGZ1bmN0aW9uIGRpc3BhdGNoIGF0IGN0b3IvZHRvciB0aW1lIHdoZW4gZHluYW1pYwoJdnRhYmxlIGZpeHVwcyBmb3IgZGVsdGFzIGFyZSBuZWVkZWQuICBUaGlzIG9ubHkgc291bmRzIGVhc2llciB0aGFuCglpdCBpcy4gIDotKQoJKGZpeHVwX3ZpcnR1YWxfdXBjYXN0X29mZnNldHMpOiBDaGFuZ2UgdG8gcmVmbGVjdCBuZXcgY2FsbGluZwoJY29udmVudGlvbiBmb3IgZXhwYW5kX3VwY2FzdF9maXh1cHMuCgpGcmkgSmFuIDE5IDEyOjIzOjA4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IFN0cmlwIHRoZSBOT1BzIGZyb20gV0lEVEggYmVmb3JlIHdlCgljaGVjayB0aGF0IGl0J3MgdXNhYmxlIGFzIHRoZSBiaXRmaWVsZCB3aWR0aC4KCldlZCBKYW4gMTcgMjE6MjI6NDAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogQ2FsbCBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgd2l0aCB0aGUgYXR0cmxpc3QuCglQYXNzIGEgbnVsbCB0cmVlIHRvIGdyb2tkZWNsYXJhdG9yIGZvciBpdHMgQVRUUkxJU1QgYXJnLCBzaW5jZSBpdCdzCglvbmx5IGV2ZXIgdXNlZCBmb3IgZnVuY3Rpb25zIGluIGl0LgoKV2VkIEphbiAxNyAxMjoxMDozOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZpZWRfdHlwZV9uYW1lKTogVXNlIHRoZSBUWVBFX0RFQ0wsIG5vdCB0aGUgdHlwZS4KCShuZXN0ZWRfdHlwZSk6IExpa2V3aXNlLgoJKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IFVzZSBsYXN0aWRkZWNsLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFkanVzdCBhY2NvcmRpbmdseS4KCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoYmFzZV9jbGFzcyk6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IExpa2V3aXNlLgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBGaWxsIGluIG5hbWUgYWZ0ZXIgd2UndmUKCWNoZWNrZWQgZm9yIG5vbi1hZ2dyIHR5cGUuCgpXZWQgSmFuIDE3IDEwOjE4OjAxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKHdhcm5fcG9pbnRlcl9hcml0aCk6IERlZmF1bHQgdG8gb24uCgpUdWUgSmFuIDE2IDEyOjQ1OjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChpc19yaWQpOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEaWFnbm9zZSByZXNlcnZlZCB3b3JkcyB1c2VkIGFzCglkZWNsYXJhdG9yLWlkcy4KClR1ZSBKYW4gMTYgMTE6Mzk6NDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChnZXRfZGVjbF9saXN0KTogRG9uJ3QgbG9zZSBjdi1xdWFscy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGaXggU0NPUEVfUkVGIGhhbmRsaW5nIGFuZCBkaWFnbm9zZQoJdHlwZXNwZWNzIHVzZWQgYXMgZGVjbGFyYXRvci1pZHMuCgpUdWUgSmFuIDE2IDExOjA5OjQyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBXaGVuIHBvcGluZyBhIGxldmVsLCBkb24ndCBnaXZlIGEgd2FybmluZyBmb3IKCWFueSBzdWJibG9ja3MgdGhhdCBhbHJlYWR5IGV4aXN0LgoKVHVlIEphbiAxNiAwMDoyNTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfb2JqZWN0X3JlZik6IEZpbmlzaCB3aGF0IEkgc3RhcnRlZC4KCgkqIHBhcnNlLnkgKHF1YWxpZmllZF90eXBlX25hbWUpOiBEb24ndCBjaGVjayBUWVBFX0JVSUxUX0lOLgoKCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogSGFuZGxlIFRFTVBMQVRFX1RZUEVfUEFSTXMuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxzbyBhY2NlcHQgVEVNUExBVEVfVFlQRV9QQVJNIGFzIGEKCXNjb3BlLgoKTW9uIEphbiAxNSAxNjoxOTozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogSGFuZGxlIHBhc3NpbmcgYSB0eXBlIGluIGRpcmVjdGx5LgoKCSogcGFyc2UueSAocXVhbGlmaWVkX3R5cGVfbmFtZSk6IFB1bGwgb3V0IHRoZSB0eXBlLgoJKG5lc3RlZF90eXBlKTogTGlrZXdpc2UuCglUYWtlIHR5cGVzIGRpcmVjdGx5IGluc3RlYWQgb2YgYXMgaWRlbnRpZmllcnMuCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVGFrZSB0eXBlcyBkaXJlY3RseSBpbnN0ZWFkIG9mCglhcyBpZGVudGlmaWVycy4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX21lbWJlcl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGJ1aWxkX3Njb3BlZF9yZWYpOiBMaWtld2lzZSwgcmVtb3ZlIGJvZ3VzIGNvZGUuCgkqIG1ldGhvZC5jIChkb19idWlsZF9hc3NpZ25fcmVmKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgYSB0eXBlIGFwcGVhcmluZyBhcyB0aGUKCWRlY2xhcmF0b3ItaWQgZm9yIGNvbnN0cnVjdG9ycy4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBjdXJyZW50X2Jhc2VfaW5pdF9saXN0IG5vdwoJdXNlcyB0aGUgdHlwZXMgZGlyZWN0bHksIG5vdCB0aGVpciBuYW1lcy4KCSogaW5pdC5jIChzb3J0X2Jhc2VfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGlzX2FnZ3JfdHlwZSk6IE5ldyBmdW5jdGlvbiwgbGlrZSBpc19hZ2dyX3R5cGVkZWYuCgpNb24gSmFuIDE1IDA4OjQ1OjAxIDE5OTYgIEplZmZyZXkgQSBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IENhbGwgYnVpbGRfbGFuZ19maWVsZF9kZWNsIGluc3RlYWQKCW9mIGJ1aWxkX2xhbmdfZGVjbCBpZiBmaXJzdCBhcmcgaXMgYSBGSUVMRF9ERUNMLgoKVGh1IEphbiAxMSAxNDo1NTowNyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogT25seSBjbGVhciBUUkVFX1VTRUQgaWYgREVDTF9OQU1FIGlzCglub24tZW1wdHkuCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBTZXQgVFJFRV9VU0VEIHRvIGF2b2lkCgl3YXJuaW5ncyBhYm91dCB0aGUgY2F0Y2ggaGFuZGxlci4KCk1vbiBKYW4gIDggMTc6MzU6MTIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogVXNlIGEgQ09NUE9VTkRfRVhQUiBpbnN0ZWFkIG9mCglleHBhbmRfdGFyZ2V0X2V4cHIuCgpUaHUgSmFuICA0IDEyOjMwOjMyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglGaXggYWNjZXNzIGNvbnRyb2wgdG8gdXNlIHRyZWVzIHJhdGhlciB0aGFuIGludGVnZXJzLgoJKiBjbGFzcy5jIChhY2Nlc3Nfe2RlZmF1bHQsIHB1YmxpYywgcHJvdGVjdGVkLCBwcml2YXRlLAoJZGVmYXVsdF92aXJ0dWFsLCBwdWJsaWNfdmlydHVhbCwgcHJpdmF0ZV92aXJ0dWFsfV9ub2RlKTogQWRkCglkZWZpbml0aW9ucy4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBEbyBjcmVhdGlvbiBvZiB0aG9zZSBub2Rlcy4KCSogY3AtdHJlZS5oIChhY2Nlc3NfdHlwZSk6IERlbGV0ZSBlbnVtIGRlY2wuCgkoYWNjZXNzX3tkZWZhdWx0LCBwdWJsaWMsIHByb3RlY3RlZCwgcHJpdmF0ZSwgZGVmYXVsdF92aXJ0dWFsLAoJcHVibGljX3ZpcnR1YWwsIHByaXZhdGVfdmlydHVhbH1fbm9kZSk6IEFkZCBkZWNscy4KCShjb21wdXRlX2FjY2Vzcyk6IENoYW5nZSByZXR1cm4gdHlwZS4KCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogSGF2ZSB0cmVlIHJldHVybiB0eXBlLCBpbnN0ZWFkIG9mIGVudW0uCgkobG9va3VwX2ZpZWxkKTogRGVjbGFyZSBUSElTX1YgYW5kIE5FV19WIHRvIGJlIHRyZWUgbm9kZXMuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogVXNlIHl5bHZhbC50dHlwZSBmb3IgZ2l2aW5nIHRoZSB2YWx1ZSBvZiB0aGUKCWFjY2Vzc18qIG5vZGUgZm9yIGVhY2ggb2YgUklEX3tQVUJMSUMsIFBSSVZBVEUsIFBST1RFQ1RFRH0uCgkqIHBhcnNlLnkgKFZJU1NQRUMpOiBNYWtlIHR0eXBlIHJhdGhlciB0aGFuIGl0eXBlLgoJKGJhc2VfY2xhc3NfYWNjZXNzX2xpc3QpOiBMaWtld2lzZS4KCSogKi5bY3ldOiBDaGFuZ2UgYWxsIHJlZnMgb2YgYGFjY2Vzc19wdWJsaWMnIHRvIGBhY2Nlc3NfcHVibGljX25vZGUnLAoJZXRjLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTWFrZSBBQ0NFU1MgYmUgYSB0cmVlLgoJKiBjbGFzcy5jIChhbHRlcl9hY2Nlc3MsIGZpbmlzaF9zdHJ1Y3RfMSwgZmlsdGVyX3N0cnVjdCk6IExpa2V3aXNlLgoJKiBjdnQuYyAoY29udmVydF90b19hZ2dyKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZiwgcmVzb2x2ZV9vZmZzZXRfcmVmLCBidWlsZF9kZWxldGUpOgoJTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWZfMSwgYnVpbGRfY29tcG9uZW50X3JlZik6ICk6IExpa2V3aXNlLgoKVGh1IEphbiAgNCAxMTowMjoyMCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAocG9pbnRlcl9pbnRfc3VtLCBwb2ludGVyX2RpZmYpOiBNYWtlIGNvZGUgYWdyZWUgd2l0aCBDCglmcm9udGVuZCwgYW5kIG1ha2UgaXQgbW9yZSBjb25zaXN0ZW50IHdpdGggcmVzcGVjdCB0bwoJd2Fybl9wb2ludGVyX2FyaXRoLgoKVHVlIEphbiAgMiAwMDoxMzozOCAxOTk2ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBDaGVjayBmb3IgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcy4KCldlZCBKYW4gIDMgMDk6MjU6NDggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBDYWxsIGFzc2VtYmxlX2V4dGVybmFsIGZvciBhdGV4aXQuCgpXZWQgSmFuICAzIDA3OjU1OjE5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChkb191bndpbmQpOiBSZW1vdmUgc29tZSBnZW5lcmF0ZWQgZGVhZCBjb2RlLgoJKGVoX291dGVyX2NvbnRleHQpOiBOZXcgcm91dGluZSwgZmFjdG9yIG91dCBzb21lIGNvbW1vbiBjb2RlIGZyb20KCWV4cGFuZF9idWlsdGluX3Rocm93IGFuZCBlbmRfZWhfdW53aW5kZXIuICBBZGQgY29kZSB0byBkbyByZXR1cm4KCWFkZHJlc3MgbWFza2luZyBmb3IgdGhlIFBBLgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIGVoX291dGVyX2NvbnRleHQgaW5zdGVhZCBvZiBvcGVuIGNvZGluZwoJaXQgaGVyZS4KCShlbmRfZWhfdW53aW5kZXIpOiBMaWtld2lzZS4KClR1ZSBKYW4gIDIgMTc6MDA6NTYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IENhbGwgYXNzZW1ibGVfZXh0ZXJuYWwgZm9yIF9fZW1wdHksIGlmIHdlCgl1c2UgaXQuCgpUaHUgRGVjIDI4IDExOjEzOjE1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBSRVRVUk5fQUREUl9PRkZTRVQgaW5zdGVhZCBvZgoJTk9STUFMX1JFVFVSTl9BRERSX09GRlNFVC4KCShlbmRfZWhfdW53aW5kZXIpOiBMaWtld2lzZS4KCldlZCBEZWMgMjcgMjI6MTg6MTYgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZ2MuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogTWFrZSBzdXJlIHdlIGRvbid0IGNhc3QgYXdheSBjb25zdAoJd2hlbiBkZWFsaW5nIHdpdGggcmVmZXJlbmNlcywgYW5kIG1ha2Ugc3VyZSB3ZSBoYW5kbGUgZHluYW1pYwoJY2FzdGluZyB0byBhIGN2IHF1YWxpZmllZCByZWZlcmVuY2UuCgpUaHUgRGVjIDIxIDIzOjUwOjM1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdHJ1Y3QgZWhfY29udGV4dCk6IE5ldyBzdHJ1Y3R1cmUgdG9wIGhvbGQgZWggY29udGV4dAoJaW5mb3JtYXRpb24uCgkocHVzaF9laF9jb250ZXh0KTogTmV3IHJvdXRpbmUuCgkocG9wX2VoX2NvbnRleHQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBVc2UgdGhlbS4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoKV2VkIERlYyAyMCAxMjo0Mjo1MSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEFsc28gcHJ1bmUgdW5pbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlCglpbmxpbmUgZW1pc3Npb24gbG9vcC4KCldlZCBEZWMgMjAgMDI6MzI6MDcgMTk5NSAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IE1hcmsgZnVuY3Rpb25zCglpbiB0aGUgc2lnbmF0dXJlIGFzIHJlZmVyZW5jZWQuCgpUdWUgRGVjIDE5IDIyOjM2OjU2IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG8gYWxsIHRoZSB2dGFibGUvc3ludGhlc2lzIHN0dWZmIGJlZm9yZQoJdGhlIGlubGluZSBlbWlzc2lvbiBzdHVmZi4KCk1vbiBEZWMgMTggMTU6NTE6MzMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oLCBkZWNsMi5jIChmbGFnX3dlYWspOiBOZXcgZmxhZyB0byBjb250cm9sIHRoZSB1c2Ugb2YKCXdlYWsgc3ltYm9scy4JCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZ7bm8tLH13ZWFrLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSWYgdGhlIHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IHdlYWsKCXN5bWJvbHMsIGRvbid0IHVzZSB0aGVtLgoJKiBkZWNsMi5jLCBwdC5jOiBzL1NVUFBPUlRTX1dFQUsvZmxhZ193ZWFrLy4KClN1biBEZWMgMTcgMjE6MTM6MjMgMTk5NSAgUnVzdHkgUnVzc2VsbCAgPHJ1c3R5QGFkZWxhaWRlLm1hcHRlay5jb20uYXU+CgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IHdhcm5pbmcgZm9yIGJhc2UgaW5pdCBhZnRlciBtZW1iZXJzLgoKRnJpIERlYyAxNSAxNTozMjoxOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBEb24ndCBjb252ZXJ0IHRvIGEgcmVmZXJlbmNlCgl0eXBlLgoKVGh1IERlYyAxNCAxNjowNTo1OCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAocmVwb3J0X3R5cGVfbWlzbWF0Y2gpOiBJbXByb3ZlIHdvcmRpbmcgZm9yIHZvbGF0aWxlCgltaXNtYXRjaGVzLgoKVGh1IERlYyAxNCAxNDoxNjoyNiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX2luaXRfMSk6IFVzZSBleHBhbmRfYWdncl9pbml0XzEgaW5zdGVhZCBvZgoJZXhwYW5kX2Fzc2lnbm1lbnQsIGFzIHRoZSBsYXRlciBkb2Vzbid0IGhhbmRsZSB0aGluZ3MgdGhhdCBoYXZlCgljb3B5IGNvbnN0cnVjdG9ycyB3ZWxsLiAgVGhlIGNvbXBpbGVyIHdvdWxkIGRvIGJpdHdpc2UgY29weWluZywKCWluc3RlYWQgb2YgY3RvciBjYWxsaW5nIGluIHNvbWUgY2FzZXMuCgpXZWQgRGVjIDEzIDE3OjA1OjU0IFBTVCAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGcrKy5jIChteV9zdHJlcnJvcik6IFJldHVybiAiY2Fubm90IGFjY2VzcyIgaWYgZXJybm8gaXMgMC4KCShwZmF0YWxfd2l0aF9uYW1lLCBwZXJyb3JfZXhlYyk6IERvbid0IGFzc3VtZSB0aGF0Cgl0aGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBteV9zdHJlcnJvciBjb250YWlucyBubyAnJSdzLgoJKGNvbmNhdCk6IFJlbW92ZS4KCShzeXNfbmVycm9yKTogRGVjbGFyZSBvbmx5IGlmIEhBVkVfU1RSRVJST1IgaXMgbm90IGRlZmluZWQuCgpXZWQgRGVjIDEzIDE2OjIyOjM4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCglMb3NlIENMQVNTVFlQRV9NRVRIT0RTL0RFQ0xfTkVYVF9NRVRIT0QgY2hhaW47IG1ha2UKCVRZUEVfTUVUSE9EUy9UUkVFX0NIQUlOIG1lYW4gd2hhdCB0aGV5IHVzZWQgdG8uCQoJKiBkZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBSZWZlciB0byBDTEFTU1RZUEVfTUVUSE9EX1ZFQwoJaW5zdGVhZCBvZiBUWVBFX01FVEhPRFMuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTG9zZSByZWZlcmVuY2VzIHRvIERFQ0xfTkVYVF9NRVRIT0QuCgkqIHRyZWUuYyAodHJlZV9jb3B5X2xhbmdfZGVjbF9mb3JfZGVmZXJyZWRfb3V0cHV0KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX01FVEhPRFMpOiBMb3NlLgoJKENMQVNTVFlQRV9NRVRIT0RfVkVDKTogUG9pbnQgdG8gbGFuZ19zcGVjLT5tZXRob2RzIGluc3RlYWQgb2YKCVRZUEVfTUVUSE9EUy4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogTG9zZSBuZXh0X21ldGhvZCBmaWVsZC4KCShERUNMX05FWFRfTUVUSE9EKTogTG9zZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogRG9uJ3QgbWVzcyB3aXRoIFRZUEVfTUVUSE9EUy4KCShmaW5pc2hfc3RydWN0KTogSnVzdCB1c2UgVFlQRV9NRVRIT0RTOyB3ZSBkb24ndCBuZWVkIGZuX2ZpZWxkcwoJYW55bW9yZS4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBEb24ndCBtZXNzIHdpdGggdGhlIFRSRUVfQ0hBSU5zIGluCglmbl9maWVsZHMuCgoJKiBzZWFyY2guYyAoYWRkX2NvbnZlcnNpb25zKTogRG9uJ3QgdXNlIFRSRUVfQ0hBSU4gdG8gdHJhdmVyc2UgbWV0aG9kCgl2ZWN0b3IuCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogU3ludGhlc2l6ZSBoZXJlIGV2ZW4gd2hlbiBub3QgaW5saW5pbmcuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCldlZCBEZWMgMTMgMTU6MDI6MzkgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY3AvbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBJZiBEQlhfREVCVUdHSU5HX0lORk8gYW5kIHdyaXRlX3N5bWJvbHMKCT09IERCWF9ERUJVRywgY2FsbCBkYnhvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlIGFuZAoJZGJ4b3V0X3Jlc3VtZV9wcmV2aW91c19zb3VyY2VfZmlsZSB3aGVuIGFwcHJvcHJpYXRlLgoKVHVlIERlYyAxMiAyMDozODo1NSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoc3RhcnRfYW5vbl9mdW5jKTogUHVzaCB0byB0aGUgdG9wIGxldmVsLgoJKGVuZF9hbm9uX2Z1bmMpOiBQb3AgZnJvbSB0aGUgdG9wIGxldmVsLgoKTW9uIERlYyAxMSAxODo1NjoxNCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGJ1aWxkX2NsZWFudXApOiBOZXcgcm91dGluZSB0byBidWlsZCBjbGVhbnVwcy4KCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBVc2UgYnVpbGRfY2xlYW51cCB0byBidWlsZCBhIGNsZWFudXAKCWNhbGwgYXQgY3RvciB0aW1lIGFuZCB1c2UgYXRleGl0IHRvIHJ1biBpdCBsYXRlci4KCSogZGVjbDIuYyAoYnVpbGRfY2xlYW51cCk6IE5ldyByb3V0aW5lLCB0YWtlbiBmcm9tIGZpbmlzaF9maWxlLgoJKGZpbmlzaF9maWxlKTogVXNlIGJ1aWxkX2NsZWFudXAgaW5zdGVhZCwgYW5kIGRvbid0IHB1dCBmdW5jdGlvbgoJbG9jYWwgc3RhdGljcyBpbiBnbG9iYWwgZHRvciBsaXN0LgoJCldlZCBEZWMgIDYgMTQ6MzQ6MjkgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IEVuc3VyZSB0aGF0IHdlIGhhdmUgY2xlYW51cHMsIGlmIHdlIHRyeQoJYW5kIGV4cGFuZCBjbGVhbnVwcy4KCldlZCBEZWMgIDYgMTE6NDg6MjEgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IEFkZCBsb2dpYyB0byBtYW5hZ2UgZHluYW1pYyBjbGVhbnVwcyBmb3IKCXRoZSBFSCBvYmplY3QuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IFVzZSB0aGUgbWFnaWMgb2YgZXhwYW5kX2dvdG8sIGluc3RlYWQgb2YKCWVtaXRfanVtcCBzbyB0aGF0IHdlIGdldCB0aGUgY2xlYW51cCBmb3IgYW55IGNhdGNoIGNsYXVzZSBwYXJhbWV0ZXIKCWFuZCB0aGUgY2xlYW51cCBmb3IgdGhlIGV4Y2VwdGlvbiBvYmplY3QuICBVcGRhdGUgdG8gcmVmbGVjdCBsYWJlbAoJY2hhbmdlcy4KCShwdXNoX2VoX2NsZWFudXApOiBOZXcgcm91dGluZSB0byByZWdpc3RlciBhIGNsZWFudXAgZm9yIGFuCglleGNlcHRpb24gb2JqZWN0LgoJKGVtcHR5X2ZuZGVjbCk6IFVzZWQgdG8gZGVmYXVsdCBjbGVhbnVwIGFjdGlvbnMgdG8KCW5vdGhpbmcuCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFNldHVwIGVtcHR5X2ZuZGVjbC4gIFNldHVwCglzYXZlZF9jbGVhbnVwLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFVwZGF0ZSB0byByZWZsZWN0IGxhYmVsIGNoYW5nZXMuICBDYWxsCglwdXNoX2VoX29iamVjdCB0byByZWdpc3RlciB0aGUgY2xlYW51cCBmb3IgdGhlIEVIIG9iamVjdC4KCShzdGFydF9hbm9uX2Z1bmMpOiBOZXcgcm91dGluZSB0byBzdGFydCBidWlsZGluZyBsYW1iZGEgZXhwcmVzc2lvbnMKCWZyb20gdHJlZXMuCgkoZW5kX2Fub25fZnVuYyk6IE5ldyByb3V0aW5lIHRvIGVuZCB0aGVtLgoJKHN0cnVjdCBsYWJlbE5vZGUpOiBDaGFuZ2Ugc28gdGhhdCB3ZSBjYW4gdXNlIHRyZWUgbGFiZWxzLCBvciBydHgKCWxhYmVscy4KCShzYXZlZF9jbGVhbnVwKTogT2JqZWN0IHRvIGNoZWNrIGZvciBkeW5hbWljIGNsZWFudXBzIGZvciB0aGUKCWV4Y2VwdGlvbiBoYW5kbGluZyBvYmplY3QuCgkocHVzaF9sYWJlbF9lbnRyeSk6IENoYW5nZSBzbyB0aGF0IHdlIGNhbiB1c2UgdHJlZSBsYWJlbHMsIG9yIHJ0eAoJbGFiZWxzLgoJKHBvcF9sYWJlbF9lbnRyeSk6IExpa2V3aXNlLgoJKHRvcF9sYWJlbF9lbnRyeSk6IExpa2V3aXNlLgoJKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBVc2UgdHJlZSBsYWJlbCBpbnN0ZWFkIG9mIHJ0eCBsYWJlbCwgc28KCXRoYXQgd2UgY2FuIGdldCB0aGUgbWFnaWMgb2YgZXhwYW5kX2dvdG8uCgkoZXhwYW5kX2VuZF9hbGxfY2F0Y2gpOiBVcGRhdGUgdG8gcmVmbGVjdCBsYWJlbCBjaGFuZ2VzLgoKCSogY2xhc3MuYyAoYnVpbGRfdmZuX3JlZik6IFJlbW92ZSBidWlsZGluZ19jbGVhbnVwIGxvZ2ljLCBhcyB3ZSBub3cKCXVzZSBVTlNBVkVfRVhQUnMuCgl0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBSZW1vdmUgcmVtbmFudHMgb2YKCWJ1aWxkaW5nX2NsZWFudXAgbG9naWMsIGFzIHdlIG5vdyB1c2UgVU5TQVZFX0VYUFJzLgoJKiBjcC10cmVlLmggKHVuc2F2ZV9leHByKTogRGVjbGFyZSBpdC4KCSogZGVjbC5jIChidWlsZGluZ19jbGVhbnVwKTogUmVtb3ZlLgoJKG1heWJlX2J1aWxkX2NsZWFudXApOiBSZW1vdmUgYnVpbGRpbmdfY2xlYW51cCBsb2dpYywgYW5kIHVzZQoJVU5TQVZFX0VYUFIgaW5zdGVhZC4KClN1biBEZWMgIDMgMDE6MzQ6NTggMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZ2MuYyAoYnVpbGRfdF9kZXNjKTogVXBkYXRlIGVycm9yIG1lc3NhZ2UgdG8gc2F5IDx0eXBlaW5mbz4uCgpUaHUgTm92IDMwIDEyOjMwOjA1IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBPbmx5IHdhcm4gYWJvdXQgc2hhZG93aW5nIGEgbG9jYWwgdmFyaWFibGUgaWYKCXdhcm5fc2hhZG93IGlzIHRydWUuCgpTdW4gTm92IDI2IDE2OjA2OjU1IDE5OTUgIFJ1c3R5IFJ1c3NlbGwgIDxydXN0eUBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1PgoKCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBBZGRlZCB3YXJuaW5nIGFib3V0Cgljb21wYXJpc29ucyBiZXR3ZWVuIGRpZmZlcmVudCBlbnVtIHR5cGVzIHdpdGggLVdhbGwsIHVubGVzcwoJLWZlbnVtLWludC1lcXVpdiBzZXQuCgpXZWQgTm92IDIyIDE1OjQ0OjAyIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFNraXAgZG93biB0byB0aGUgaW5uZXIgdHlwZSBpbgoJbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuICBFbnN1cmVzIGN0b3JzIHdpbGwgYmUgbWFkZSBmb3IgdHlwZXMgdGhhdAoJbmVlZCBjb25zdHJ1Y3RpbmcuCgpXZWQgTm92IDIyIDE0OjE5OjIyIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobGFzdF9kdG9yX2luc24pOiBOZXcgdG8gdHJhY2sgdGhlIGxhc3QgY29tcGlsZXIgZ2VuZXJhdGVkCglpbnNuIGluIGEgZHRvci4KCShzdG9yZV9wYXJtX2RlY2xzKTogU2V0IGl0LgoJKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBpdCB0byBzZWUgaWYgdGhlIGR0b3IgaXMgZW1wdHkuICBBdm9pZCBkb2luZwoJdnRhYmxlIHNldHVwIGFsbCB0aGUgdGltZSwgaWYgd2UgY2FuLgoJKHN0cnVjdCBjcF9mdW5jdGlvbik6IEFkZCBsYXN0X2R0b3JfaW5zbi4KCShwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBTYXZlIGl0LgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSBpdC4KCldlZCBOb3YgMjIgMTE6NTI6MTkgMTk5NSAgUGF1bCBSdXNzZWxsICA8UnVzdHkuUnVzc2VsbEBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1PgoKCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogU2V0IFRSRUVfTk9fVU5VU0VEX1dBUk5JTkcgdG8gYXZvaWQKCXdhcm5pbmdzLgoKVHVlIE5vdiAyMSAxNzoxNToyMyAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZXhwYW5kX3RhcmdldF9leHByKTogTWFrZSBzdXJlIHRhcmdldHMgZ2V0IHB1dCBpbnRvIHRoZQoJY3VycmVudCB0ZW1wX3Nsb3RfbGV2ZWwsIHNvIHRoYXQgdGhlIGZyZWVfdGVtcF9zbG90cyBjYWxsIHdpbGwgcmV1c2UKCXRoZW0uCgpUdWUgTm92IDIxIDEzOjMyOjAzIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERlbGF5IGRlbHRhIGZpeHVwcyBmb3IgdmlydHVhbCBiYXNlcwoJdW50aWwgYWZ0ZXIgd2UgaGF2ZSBkb25lIHRoZSBoYXJkIHZpcnR1YWxzLCB0byBhdm9pZCBhIGJvZ3VzIGBldmVyeQoJdmlydHVhbCBmdW5jdGlvbiBtdXN0IGhhdmUgYSB1bmlxdWUgZmluYWwgb3ZlcnJpZGVyJyBmb3IgdmlydHVhbAoJZnVuY3Rpb25zIHRoYXQgYXJlIG9ubHkgb3ZlcnJpZGRlbiBieSBoYXJkIHZpcnR1YWxzLgoKVGh1IE5vdiAgOSAxMzozNTozMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogRG9uJ3QgdHJ5IHRvIGZpbmQgYSBmaWxlLXNjb3BlCgl0ZW1wbGF0ZSBmb3IgYSBtZW1iZXIgZnVuY3Rpb24uCgpUdWUgTm92IDE0IDA2OjIwOjM1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGcrKy5jIChtYWluKTogQWRkIGhhbmRsaW5nIG9mIC1ub2RlZmF1bHRsaWJzLgoKTW9uIE5vdiAxMyAxNTo0NTozNCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKElORElSRUNUX0JJTkQpOiBBZGQgYSB3YXkgZm9yIHRoZSBmcm9udGVuZCB0bwoJZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaXJlY3QgYmluZGluZ3Mgb2YgcmVmZXJlbmNlIHZhcmlhYmxlcywgYW5kCglpbmRpcmVjdCBiaW5kaW5ncyBvZiByZWZlcmVuY2UgdmFyaWFibGVzLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogVXNlIGl0LgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBVc2UgaXQgdG8gaW5kaWNhdGUgdGhpcyBpcyBhbgoJaW5kaXJlY3QgYmluZGluZy4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IEVuc3VyZSB0aGF0IHdlIHJldXNlIHN0YWNrIHNsb3RzIGFzIGZhc3QKCWFzIHRoZXkgYXJlIHVudXNlZC4KCShleHBhbmRfc3RhdGljX2luaXQpOiBMaWtld2lzZS4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkqIGluaXQuYyAocGVyZm9ybV9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGVtaXRfYmFzZV9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfdmJhc2VfaW5pdF8xKTogTGlrZXdpc2UuCgpGcmkgTm92IDEwIDA5OjE4OjA5IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9uYW1lc3BhY2UpOiBSZXdyaXRlIHRvIHVzZSBidWlsZF9sYW5nX2RlY2wsIHNvIHdlCglnZXQgYSBERUNMX0xBTkdfU1BFQ0lGSUMgbm9kZS4KCSogY3AtdHJlZS5oIChsYW5nX2RlY2xfZmxhZ3MpOiBBZGQgbmV3IG1lbWJlciBgbGV2ZWwnLgoJKE5BTUVTUEFDRV9MRVZFTCk6IERvbid0IHVzZSBkZWNsLmFyZ3VtZW50cywgaW5zdGVhZCB1c2UgdGhlCglkZWNsX2ZsYWdzIGxldmVsIG1lbWJlci4KCk1vbiBOb3YgIDYgMTg6MzY6MTMgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IE1ha2Ugc3VyZSBpbnN0YW5jZSBoYXMgYQoJVFlQRV9MQU5HX1NQRUNJRklDIG5vZGUgYmVmb3JlIHdlIGRpdmUgaW50byBpdC4gIAoKU2F0IE5vdiAgNCAyMDowMTo1MiAxOTk1ICBKYXNvbiBNb2xlbmRhICA8Y3Jhc2hAcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogdXNlIFRSRUVfU0VUX0NPREUgdG8gc2V0IHRodW5rJ3MgdHJlZSBjb2RlLgoKVGh1IE5vdiAgMiAxNzo1Njo1NyAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFdoZW4gc21hc2hpbmcgZGVjbHMsIHNtYXNoIHN0YXRpY25lc3MgaW4KCXRoZSB1c3VhbCB3YXkuCgpUaHUgTm92ICAyIDE2OjQ0OjAyIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBIYW5kbGUgdGhlIG1lcmdpbmcgb2Ygc3ViYmxvY2tzIG9mIGNsZWFudXBzCgl3aGVuIGZpbmlzaGluZyBibG9ja3MgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGVkICh1c3VhbGx5IGR1ZSB0bwoJdGhlIGZpeHVwIGdvdG8gY29kZSkuICBGaXhlcyBiYWQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoKV2VkIE5vdiAgMSAxMjozMzo1MyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogRG9uJ3QgYWJvcnQgd2hlbiB3ZSBnZXQgYSBUUkVFX0xJU1QKCXRoYXQncyBub3QgYSBsaXN0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoKV2VkIE5vdiAgMSAxMTozODo1OCAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogQ2hlY2sgREVDTF9MQU5HX1NQRUNJRklDIG9uIGZuCgliZWZvcmUgdHJ5aW5nIHRvIHVzZSBERUNMX0FCU1RSQUNUX1ZJUlRVQUxfUC4KClR1ZSBPY3QgMzEgMTE6NTY6NTUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobWFya191c2VkKTogTmV3IGZ1bmN0aW9uIGZvciBob29raW5nIGludG8gc2V0dGluZyBvZgoJVFJFRV9VU0VEIG9uIGRlY2xzLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLiAgRG9uJ3QgY2FsbCBhc3NlbWJsZV9leHRlcm5hbAoJZm9yIGFsbCBsaWtlLW5hbWVkIGZ1bmN0aW9ucy4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKGVtaXRfdGh1bmspOiBEb24ndCBjYWxsIGFzc2VtYmxlX2V4dGVybmFsLgoJKG1ha2VfdGh1bmspOiBDcmVhdGUgdGh1bmsgYXMgYSBGVU5DVElPTl9ERUNMIHNvIHRoYXQgaXQKCWdldHMgdGhlIHJpZ2h0IG1vZGUgYW5kIEVOQ09ERV9TRUNUSU9OX0lORk8gd29ya3MuCgkKCSogcGFyc2UueTogVXNlIG1hcmtfdXNlZC4gIFBhc3Mgb3BlcmF0b3IgbmFtZXMgdG8gZG9faWRlbnRpZmllci4KCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBIYW5kbGUgb3BlcmF0b3IgbmFtZXMuCgoJKiBkZWNsMi5jIChncm9rY2xhc3Nmbik6IFR3ZWFrIF9faW5fY2hyZyBhdHRyaWJ1dGVzLgoKVGh1IE9jdCAyNiAxNjo0NTo1OCAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBlcnJmbi5jOiBJbmNsdWRlIHN0ZGlvLmguCgkoY3Bfc3ByaW50Zik6IFRha2Ugb3V0IGRlY2wgb2Ygc3ByaW50ZiwgYW5kIGNhc3Qgc3ByaW50ZiB0byBlcnJvcmZuKi4KCldlZCBPY3QgMjUgMTg6NTg6NDEgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IEFsd2F5cyBjb252ZXJ0IGluaXRpYWxpemVycyB0byB0aGUKCXJpZ2h0IHR5cGUuCgpXZWQgT2N0IDI1IDEzOjI1OjI0IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAobWVtYmVyX2luaXRfb2tfb3JfZWxzZSk6IERvbid0IGFsbG93IG1lbWJlciBpbml0aWFsaXplcnMKCWZvciBpbmRpcmVjdCBtZW1iZXJzLCBhcyBpdCBpcyBpbnZhbGlkLgoKV2VkIE9jdCAyNSAxMTozNToyOCAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgYWxsb3cgYGZyaWVuZCBzaWduZWQgKCknLgoKRnJpIE9jdCAyMCAxMDozMDo1OSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb3IuaW5pdC5zdGF0ZW1lbnQpOiBDYXRjaCBjb21wb3VuZCBzdGF0ZW1lbnRzIGluc2lkZSBmb3IKCWluaXRpYWxpemF0aW9ucywgaWYgd2UncmUgYmVpbmcgcGVkYW50aWMuCgpGcmkgT2N0IDIwIDEwOjAzOjQyIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX3RhZyk6IFJldHVybiBOVUxMX1RSRUUgaWYgd2UgZG9uJ3QgZmluZCB3aGF0IHdlIGFyZQoJbG9va2luZyBmb3IuCgpUaHUgT2N0IDE5IDE0OjI2OjEwIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IERvbid0IGNvcmUgZHVtcCB3aGVuIGEgYm9vbGVhbiBleHByZXNzaW9uIGlzCgl1c2VkIGFzIGEgZGVmYXVsdCBhcmd1bWVudC4KClRodSBPY3QgMTkgMTA6MzY6MzAgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9iaXRzKTogQ2hlY2sgYWdncmVnYXRlX3ZhbHVlX3AgaW5zdGVhZCBvZgoJUkVUVVJOX0lOX01FTU9SWS4KCldlZCBPY3QgMTggMTg6MTI6MzIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9iaXRzKTogQWxzbyBzZXQgVFJFRV9BRERSRVNTQUJMRSBvbiBhCglCTEttb2RlIHR5cGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgcmV0dXJuZWQgaW4gcmVnaXN0ZXJzLgoKTW9uIE9jdCAxNiAxMjozMjoxOSAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKysuYyAoV0lUSExJQkMpOiBOZXcgbWFjcm8uCgkobWFpbik6IERlY2xhcmUgc2F3X2xpYmMuICBVc2UgV0lUSExJQkMgaWYgYC1sYycgd2FzIHVzZWQ7IHNldAoJc2F3X2xpYmMgYW5kIHBhc3MgaXQgYXQgdGhlIGVuZCBpZiBpdCB3YXMgc2V0LgoKV2VkIE9jdCAxMSAxNjozMDozNCAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmbi5kZWYxKTogQ2FsbCBzcGxpdF9zcGVjc19hdHRycyBpbgoJZGVjbG1vZHMgbm90eXBlX2RlY2xhcmF0b3IgY2FzZS4K